Рубрика развивается при поддержке

Кругом сплошной обман Материал редакции

«Эффект Хитрого койота» в игре и его создание.

В закладки
Аудио

Шотландский инди-разработчик Мэтт Старк в своём Твиттере разместил видео, демонстрирующие то, что сам он назвал «эффектом Хитрого койота», в честь персонажа мультсериала Warner Bros. В нём койот, преследующий кукушку-подорожника по имени «Дорожный бегун», иногда врезался в стену, на которой был нарисован, например, сквозной туннель. Примерно такой же обман происходит и в ролике Старка. В своём блоге разработчик рассказал, как работает этот эффект.

В каждом дверном проёме на локации находится скрытая стена, которая становится видимой, когда персонаж игрока запускает триггер. В то же время, камера генерирует текстуру и применяет её к появившейся стене. Вот так это выглядит со стороны.

Чтобы эффект работал вне зависимости от того, куда смотрит сам игрок, разработчик добавил «временную камеру». Она находится там же, где и персонаж пользователя, но всегда направлена в на объект, который будет меняться. Подходящий угол поля зрения выбирается через итерации по углам ограничивающего параллелепипеда.

float maxAngle = 0; Vector3 min = meshFilter.sharedMesh.bounds.min; Vector3 max = meshFilter.sharedMesh.bounds.max; // Iterate through each of the 8 corners of the bounding box foreach (float bx in new float[] { min.x, max.x }) { foreach (float by in new float[] { min.y, max.y }) { foreach (float bz in new float[] { min.z, max.z }) { // Get the corner's position in camera space Vector3 cornerInCameraSpace = cam.transform.InverseTransformPoint(transform.TransformPoint(new Vector3(bx, by, bz))); // Find the horizontal and vertical angles between the camera's forward vector and the corner's position float horizontalAngle = Mathf.Abs(Mathf.Atan(cornerInCameraSpace.x / cornerInCameraSpace.z)); float verticalAngle = Mathf.Abs(Mathf.Atan(cornerInCameraSpace.y / cornerInCameraSpace.z)); // If either angle is greater than the stored value, replace it maxAngle = Mathf.Max(maxAngle, horizontalAngle, verticalAngle); } } } // Set the camera's field of view based on maxAngle. MaxAngle is in radians so must be converted to degrees. Maxangle also only represents the angle between forward and the edge of the view, but field of view is the angle between the top and bottom of the view, so it must be multiplied by two. cam.fieldOfView = maxAngle * Mathf.Rad2Deg * 2;

После этого камера рендерит нужную текстуру, однако важно правильно разместить её на объекте. Если сделать это с помощью UV-координат, то результат получится таким.

Старк проецирует позиции вершин объекта в экранное пространство «временной камеры». Они используются для создания текстуры.

Перед удалением «временной камеры» просчитывается матрица, которая конвертирует значения по мировой системе координат в систему координат отсечения.

camMatrix = cam.projectionMatrix * cam.worldToCameraMatrix;

Эта матрица передаётся шейдеру вместе с текстурой. Позиции вершин проецируются сперва по мировой системе, а затем по системе отсечения «временной камеры».

// Project the vertex into world space float3 worldPos = mul(unity_ObjectToWorld, v.vertex); // Project the world space position into the temporary camera's clip space o.clipPos = mul(_WorldToCam, float4(worldPos, 1));

Во фрагментарном шейдере позиция по системе отсечения конвертируется в UV-координаты, которые используются для наложения текстуры.

// Get the UV coordinate float2 uv = i.clipPos.xy / i.clipPos.w; uv = (uv + float2(1, 1)) / 2; // Convert it from the range -1 to 1 to the range 0 to 1 // Sample the texture fixed4 col = tex2D(_CamTex, uv);
Вы думаете я тут значит паши а вы там клубничку приедите с молочком поедите?
{ "author_name": "Андрей Верещагин", "author_type": "editor", "tags": ["\u043e\u043f\u044b\u0442","\u0433\u0440\u0430\u0444\u0438\u043a\u0430"], "comments": 52, "likes": 385, "favorites": 264, "is_advertisement": false, "subsite_label": "gamedev", "id": 80908, "is_wide": false, "is_ugc": false, "date": "Mon, 11 Nov 2019 16:43:33 +0300", "is_special": false }
Проект в сеттинге киберпанка
Вакансия Game Designer
я с вами!
0
52 комментария
Популярные
По порядку
Написать комментарий...
26

круть, игра Antichamber почти про такое

Ответить
3

Да там вообще круто сделали

Ответить
1

Особенно комната с звуками сверчков.

Ответить
14

Винтажный мем, который полностью описывает мою степень недоумения.

Ответить

Алый кубок

Kilyari
16

Раскукож обратно мою перспективу, проклятый демон!

Ответить
1

К тому и отсылался.

Ответить

Комментарий удален

9

Вот тут можно сыграть в подобное 
https://ianmaclarty.itch.io/catacombs-of-solaris

Ответить
7

Тут похоже можно вообще блевануть.

Ответить
0

Главное дерни мышку чтобы появился рабочий стол и всё ок будет

Ответить
0

Как же на таких кадрах, всасывает ютуб, с его энкодом видео. Одна каша.

Ответить
0

Видео еще 2016 года и та же техника, что и в статье. Хм, кто-то отнюдь не первоткрыватель.

Ответить
0

вот поэтому я в яндекс такси предпочитаю киа рио

Ответить
7

После второго раза можно заметить что перспектива перестаёт меняться и начинается искажение текстур.
Опять же этот фокус гораздо легче провернуть с репетативными текстурами, вроде кирпича и клетки. Как только текстура становится уникальной, иллюзия сразу потеряется.

Но выглядит улётно, спасибо что поделился, автор!

Ответить
7

повторяющимися

Дарю. Пользуйся.

Ответить
1
Ответить
1

Никакое английское слово так не пишется и не читается.
И никаких репетатов в живой природе не водится.
Так что это просто словечко школьников. Которые смотрат ютаб на смартфане пад партай на зла училка.

Ответить

Административный цвет

sloa
1

https://en.wiktionary.org/wiki/repetat

Так что начнем с того, что это не англицизм :)

Погуглил.

«Репитатив, репетативный» — игровой термин, плод словесной эквилибристики Эрика Сати (унаследованный им от Альфонса Алле и самого себя, вестимо). Обычно он называл это занятие: «кончать слова», доводя себя до полного изнеможения... Это яркое, отчасти издевательское словечко, введённое им в речь около 1920 года, по сути, «репитатив» (или репетатив) означал примерно то же, что и более привычный для французов «Relache» (релаш! — «спектакль отменяется», табличка на дверях закрытого театра), по сути — эпатаж, издевательство над публикой. Произведённый от игрового слияния слов répit (отсрочка, передышка), répéter (повторять, репетировать) = повторная отсрочка и récitatif (речитатив) или réсital (сольный концерт), в итоге, «репетатив» в целом описывал первую форму минимализма: так называемую «меблировочную музыку». А публика, пришедшая на «концерт», вместо речитатива с арией получала прямо себе в нос «репетатив», полный облом (répit), отсрочку, обман лучших ожиданий, да ещё и повторённый (répéter) множество раз.

Так что скорее всего термин пришел из музыки, а приминяют его просто неправильно.

Ответить
0

Не пришел. Это натягивание совы на глобус в попытке защитить безграмотную кальку.
Никаких Альфонсов коверкающих слова большой интернет не знает.

Ответить
0

Если бы это слово попало в русский язык от него, то это произошло бы сто лет назад, а само слово гордо красовалось бы на грамота ру с примерами употребления.
Так что сова, глобус, аэробус.

Ответить

Административный

sloa
0

Это же музыка, не нужно вводить новые термины, если можно просто написать крилицей французское слово.

Ответить
–2

Музыке музыково, неграмотным долбоёбам - неграмотнодолбоебово.

Ответить
1

Звучит как названия населённых пунктов. Не хотел бы я жить в Неграмотнодолбоебово.

Ответить
0

Слово "repetitive", регулярно использую. На работе часто приходится говорить на английском. Может отстанешь уже, а?

Ответить
–2

Тогда подтяни свой английский хотя бы до школьного уровня, потому что это слово читается совершенно иначе.
А то перед коллегами стыдно же.

Ответить
6

IELTS 7.5 из 9, практика 15 лет, 10 лет путешествую по загранице, разговариваю на английском по работе регулярно, многие иностранцы подмечают отсутствие акцента. Repetitive произносится так, что первую "i" практически не слышно, и вполне можно принять за "а".

Что мне сделать чтобы ты отвалил, душняра? Я обычно людей нахуй не привык посылать, но, Аллах свидетель, ты очень стараешься.

Ответить
–3

Оно произносится так, что почти  все гласные звучат как "и", так что маневр не засчитан и сертификат свой выкинь. И оценку за русский в школьном табеле исправь на три с минусом.

Ответить
3

сертификат свой выкинь

Ну раз это сказал такой авторитетный сопляк из интернетов, то да, надо бы :)
Иди-ка ты всё же нахуй, дружок. Мой блэклист там же. И да, я специально сказал "блэклист" :) Утрись, твой ответ я уже не увижу.

Ответить
0

Блэклист ты транскрибировал корректно, но предпочел остаться долбоёбом. Ну ок.
Мог бы написать "блаклест", кстати. Раз уж упорствуешь.

Ответить
0

@Шериф DTF дай мне бан на недельку. Отдохнуть хочу.
Можно на две, я не обижусь.

Ответить
0

Если верить гуглу, то транскрипция следующая: ri'petətiv. Так что довольно близко к "репетативу".

Ответить
–1

Не очень.
И даже если чисто на слух:
https://www.youtube.com/watch?v=v7C_lVl2c_Q
https://www.youtube.com/watch?v=W0mQ_gzKgN8
https://youtu.be/b5GFyIHhpgg?t=240
Ни одного репетата.

Ответить
1

Лично я слышу рипет'этив.

Тут примерно описано как читается звук первой "i", что не соответствует скрину.
https://en.wikipedia.org/wiki/Schwa
"An example in English is the vowel sound of the 'a' in the word about"

По твоему, он должен был написать "рипетэтивный" ?

Как по мне это странная логика, потому что слова иногда заимствуются с изменениями.

Да, у слова есть русский аналог, но who cares :)

Ответить
0

Для меня это просто выглядит вопиющей безграмотностью. Как если бы он по-английски написал "repetative".
При этом я подозреваю, что эта безграмотность может прижиться, потому что звучит похоже на слово "речитатив", и тогда она будет бесить меня вечно.
Так что да - пишите по-русски. Слов до чорта, их хватает.

Ответить
6

Выглядит интересно, но играть в такое я бы не стал

Ответить
5

У меня уже от видео жопа сгорела. Не люблю чувство "тебя наебали" в играх.
А тут сплошное наебали.

Ответить
5

В лавкрафтовскую игру покатит такая фишка

Ответить
3

Есть игра Layers of Fear.

Там не совсем такое наебалово, но ассоциации у меня такие.

Ответить
3

Охренеть как круто

Ответить
3

Хочу игру в жанре головоломок аки Antichamber с похожей механикой

Ответить
3

кукушку-подорожника по имени «Дорожный бегун»
Моя жизнь никогда не будет прежней, всё детство считал, что это страус

Ответить
2

Проверить бы в VR — на плоском мониторе легко обмануть, а как получится в стерео? Иллюзии с картонным крокодилом Гарднера работали.

Ответить
1

Начал гуглить крокодила, нашел комнату Эймса, так бы cостарился не узнав про неё, спасибо

Ответить

Низкий ключ

2

Нихуя не понял, но очень интересно.

Ответить
1

Меня чуть не стошнило, это этих эффектов... 

Ответить
1

Стало интересно в такое в VR сыграть :) главное не блевануть только

Ответить
0

Бля, жиза!

Ответить
0

Да ну нафиг, мне на это смотреть больно, не то что играть.

Ответить
0

Идеально для скримера

Ответить
0

Пьяным в нее точно нельзя играть😆

Ответить
0

милениалы придумали иллюзию)

Ответить
0

Уже прям хочется в какой-то хоррор сыграть в подобными обманами. Помнится что-то подобное было на движке ХЛ2 , там что-то про дом название было вроде бы. И в Layers of Fear помню ещё такое слыхал, но Лэирс оказался настолько невыносимо скучной и жутко переоценённой игрой , что эти заигрывания с пространством для меня было чуть-ли не единственным плюсом игры (ну и звук вроде там ещё хорош был) 

Ответить

Прямой эфир

{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }