Оффтоп Alexey Medvedev
3 147

Байки старпёров девелоперов - 5

Продолжаем сеанс самобичевания.

В закладки
Они!

Вы не поверите, но это тоже сделал я!

Итак, краткое содержание предыдущих серий: Я разработчик со стажем. Делал всякое и Мафию 3 тоже.

В Мафии 3 я делал систему отражений. При кажущейся простоте, на текущем поколении железа - это довольно нетривиальная задача. Когда ray tracing наконец победит, то проблема исчезнет навсегда.

Но пока что, 99% игр решают эту проблему просто, используя технику под названием SSR (screen space reflections). Если не вдаваться глубоко в детали, то техника очень простая. Если исходить из простого предположения, что большая часть того, что будет в отражении, рисуется в основном кадре игры, то довольно дешево и быстро можно оттрассировать основную картинку и получить отражение. Но как только результат не может быть получен из основного кадра, то встает вопрос откуда брать информацию. 99% игр поступают просто, либо выводят черный цвет, либо берут информацию из некого усреденнного пространства окружения. Обычно это некий кубмап.

Это очень легко проверить в любой игре, в которой есть отражения, достаточно покрутить камерой вверх-вниз, чтобы увидеть, как в отражении, что-то похожее на правду подменяется какой-то размазней.

1% игр заморачивается с этой проблемой и есть много способов, как ее решить. Первый и самый честный - это честно рисовать все, что должно отражаться. Это делал, например Unreal, тот, что самый первый. Проблема состоит в том, что это очень дорого. В смысле сильно влияет на производительность.

Второй способ - это использовать тот же самый кубмап, но более интеллектуально. Например, учитывать его относительное смещение. Так, например, делают в Uncharted 4. Парни молодцы, сделали так мастерски, что это буквально заметно всего в паре мест. Это очень дешево и почти идеально, но, к сожалению не работает в общем случае.

У нас в Мафии 3 использовался совершенно другой способ. Если SSR не находил нужного результата, то мы динамически строили еще несколько кубмапов, позиции которых были либо расставлены художниками ( например в помещениях), либо автоматически генерировались движком. Так вот, если SSR не находил результата, мы трассировали еще и кубмапы. Честно трассировали, чтобы найти необходимую информацию. Посмотрите в игре и покрутите камерой - у нас везде честные отражения!

Теперь же собственно байка.

В самом конце проекта ко мне пришли художники и спросили про зеркала. Так как игра была и на консолях, никакого бюджета для настоящих зеркал (помните про первый путь) у нас не было. Мы с трудом скребли производительность для основного кадра, какой там еще проход для зеркал. И я предложил попробовать сделать зеркала через общую систему отражений. Довольно быстро сделал прототип, который показывал на тестовом уровне приемлимую картинку.

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

Времени чинить не было, поэтому было принято решение все убрать к чертям собачьим. Что и было сделано в 90% случаев, если обратите внимание, в игре в основном зеркала либо поломаны, либо замутнены. Кроме тех самых 10%, про которые либо забыли, либо недоглядели и не убрали соотвествующие настройки.

Зато вам радость!

{ "author_name": "Alexey Medvedev", "author_type": "self", "tags": [], "comments": 82, "likes": 115, "favorites": 23, "is_advertisement": false, "subsite_label": "flood", "id": 20633, "is_wide": false }
{ "id": 20633, "author_id": 58304, "diff_limit": 1000, "urls": {"diff":"\/comments\/20633\/get","add":"\/comments\/20633\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/20633"}, "attach_limit": 2, "max_comment_text_length": 5000 }

82 комментария 82 комм.

Популярные

По порядку

Написать комментарий...
26

Байки старперов-девелоперов 76:

Вы не поверите, но это тоже сделал я!

Ответить
6

Про это было в предыдущей части, но в более глобальном масштабе!

Ответить
0

О, привет, Слартибартфаст!

Ответить
8

2004

Ответить
7

Там даже в Codename 47 (2000) были честные отражения.
Хорошая традиция, прошедшая через года

Ответить
0

Но при этом враги тебя в зеркалах не замечают...

Ответить
4

Ну это уж совсем next-level, еще бы по отбрасываемой тени палили :D

Ответить
4

Еще в MGS 2 2000 года тебя могли спалить по тени.

Ответить
0

Эммм, в Thief Deadly Shadows, 2004 года, сделанном на Unreal Engine 2, враги вас по тени могли обнаружить.

Ответить
0

Кстати, ещё вспомнил, как для одной из неуловимых целей на уровень добавили ещё одно зеркало, и вот оно уже не работало

Ответить
2

2016 тогда уж

Ответить
9

И уж если честно, из последнего, мордой по полу меня может поволозить только Detroit. Чуваки мой респект к вам без меры. Вы круче всех.

Ответить
0

Я конено понимаю, что вода это скорее всего не зеркала. Но меня до сих пор радует оная в Ground Control 2. В целом, для RealtimeTactics ребята очень классный движок выкатили. А World in Conflict так вообще планку задрал.

Ответить
2

Вода может быть похожа, да. Обычно там тоже ssr + cubemaps. Посмотрю, что там в этой игре. Но, как я уже писал, если есть возможность сделать честно, то почему бы и нет. Другое дело, когда это невозможно :)

Ответить
5

Спасибо за историю, некогда не думал, что делать зеркала это так сложно. Теперь я начал понимать почему в Prey все зеркала мутные. И последнее, что мне осталось это загуглить, что такое кубмап.

Ответить
3

Глянь на дтф когда была статья год или два назад про отражения в играх

Ответить
0

Спасибо, буду искать.

Ответить
2

Само по себе - это несложно, сложно сделать приделать 4-ю ножку к трехножной табуретке, когда ее уже собрали. Впихнуть некуда :) Именно про это моя история.

Ответить
0

Ааа понятно, хех)))

Ответить
0

К слову, в оригинальном Прей(2005 года) зеркала работали отлично.

Ответить
0

Потому что движок заточен под порталы, а это - зеркала, считай.

Ответить
–8

Проблема геймдизайна на самом деле, в поделке 2017 года решили не заморачиваться)

Ответить
3

не специалист, но в чем проблема вместо зеркала делать окно с полупрозрачным стеклом, через которое будет видна полноценная такая же комната, в которой все расставлено зеркально? и вторую модельку героя в ту комнату поставить, повторяющую зеркально движения. а если ты из комнаты с зеркалом выходишь, та зеркальная комната подменяется уже той моделью коридора/комнаты, в которую вышел герой

Ответить
12

Проблема именно в том, что все надо рисовать второй раз. Это значит, что fps будет примерно в 2 раза ниже, а на консолях это нельзя - есть TRC

Ответить
6

Но ведь Мафия может отрисовывать большие открытые городские локации с кучей npc, но при этом, если отрисовать две маленькие замкнутые комнаты вместо одной, фпс упадёт? Почему?

Ответить
5

Вопрос хорош, но ответ прост как камень.
Лоды и куча замылиных текстур для дальней прорисовки размером в 128 на 128

Ответить
3

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

Ответить
1

Потому, что с точки зрения кода - это не так тривиально. Там куча всего задействовано

Ответить
4

В GTA как-то же реализовали такое без просадок.

Ответить
3

Не, я имею ввиду зеркала в примерочных: https://youtu.be/mypKcHLWQEo

Ответить
0

У них было больше времени отполировать, чем у нас. Никакой магии, очевидно нет.

Ответить
0

Так почему тогда в каждом Хитмане есть нормальные зеркала? Они ведь и на консолях выходили.

Ответить
0

Не знаю, как там на консолях, но на ПК у меня в последнем Хитмане реально в два раза проседал фпс рядом с зеркалами. По крайней мере, сразу после релиза, потом вроде получше стало.

Ответить
2

А как сделаны отражения в последнем God of War? Смотришь в воду и в ней отражается объекты даже если их не видно на камере.

Ответить
6
Как зеркало в Uncharted 4 да, только здесь отраженная геометрия статическая. И когда голова с поверхности поднимается - её "отражение" вручную подтирают шейдером вдоль траектории отрыва от отражающей поверхности.

КТО-ТО ВРУЧНУЮ ДЕЛАЛ ЭТУ ХУЙНЮ.
54
Ответить
0

А что значит «вручную» в этом контексте? Что конкретно делали?

Ответить
2

Ставили кубмапы руками. В нужном месте

Ответить
0

Разве это нельзя автоматизировать тулзой, которая будет их в редакторе расставлять по более-менее примерному алгоритму? У меня нет опыта с именно таким способом, но в более простом случае расстановка кубмапов по уровню обычно полуавтоматическая: первая итерация делается тулзой, и потом уже вручную правятся отдельные вылезшие в тестировании вещи.

Ответить
2

У них отличные кубмапы, правильно расставленные. Но, увы, не так как у нас. Очень правильные художники, респект.

Ответить
4

https://www.youtube.com/watch?v=APJHtsKxbXM

1998 год, я в курсе. Я про это писал!

Ответить
3

Слушай, почему это в разделе оффтоп? Нету раздела геймдев? Такое мне нравится, но от оффтопа я отписываюсь в ближайшем будущем (

Ответить
1

Я не знаю, мне кажется это оффтоп. Какие предложения?

Ответить
0

Статья на вопрос "как устроена игра" отвечает? Отвечает. Почему бы и не геймдев?

Ответить
1

В геймдев только администрация может заносить. Простой пользователь туда не напишет.

Ответить
0

Тогда ладно ((

Ответить
3

В техно-демке Epic Citadel, которая еще на UDK, были отражения в замке. Подошли к вопросу достаточно оригинально - отзеркалив всю геометрию вниз, на пол добавили полупрозрачный материал плитки и получилось очень правдоподобно. Но такой метод не подходит, если пространство не позволяет. Так же у игры Portal есть режим игры с комментариями разработчиков, там они рассказывали как в порталах делали точную отрисовку комнат и каким образом создавали видимость проходящих через порталы объектов

Ответить
–6

ты же знаешь сколько ненависти вызвала мафия3 в свое время, да?🤔

Ответить
10

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

Ответить
0

Смотря что он разрабатывал, если модели и анимации..

Ответить
–6

тебе стоит немножечка охладить🤔
зачем нервы тратить на чушь всякую?

Ответить
0

Не хочу чтобы тред скатился, не принимайте близко

Ответить
–1

я не вижу так часто, чтобы прямо вот войны какие то были. и народ тут постарше 15 в большинстве своем, вроде🤔

Ответить
1

Да. Я к этому привык - это нормально.

Ответить
–5

ну наверно, я даже не играл в нее ниразу🤔

Ответить
10

Я про вообще. Не было ни одной игры, которая не вызывала бы полный спектр чувств от ненависти до любви. Учитывая, что это была далеко не первая, мне все равно, я привык - это нормально. Так и должно быть.
Между тем, после всех патчей, я советую поиграть. Хорошая игра, местами затянута, но отличный сюжет и геймплей.

Ответить
–3

я больше по рпг и ртс, туже гта5 проходил сюжетку еще на 360 боксе и больше не интересовала🤔

Ответить
1

На вкус и цвет, фломастеры, как известно, разные. Я люблю хорошие истории. В Мафии 3 добротная и хорошая история. GTA был отличный тоже, но это как сравнивать Камеди клаб с Крестным отцом. Вроде и по телевизору показывают, но и разном.

Ответить
–2

да я не пытался залеть чью либо профессиональную гордость. я говорио о том, что сеттинг современный меня мало интересует. либо фентези либо далекое светлое будущее🤔

Ответить
–11

Как в нормальные компании попадают такие люди? Зеркало он через SSR делал. Позорник сделал бы хотябы через RenderTexture если через Stencil не смог....

Ответить
6

Дмитрий, ты молодец, что знаешь такие слова как stencil и rendertexture. Теперь просто прочитай мой текст еще раз. Если будет непонятно, спроси, я объясню, только задай вопрос по конкретней.

Ответить
0

Что за техника отражений через stencil? И чем тот же повторный рендеринг, но уже "зеркальной" камерой, оптимальней зеркальной геометрии? Помимо того, что разрешение зеркальной камеры можно снизить?
Правда, оба вопроса интересуют, я тупенький, не понимаю.

Ответить
1

Зеркала - это уже прошлый век, а вот камеры, это уже повеселей)
https://youtu.be/d8O09FWAUiI

Ответить
0

Гарис мод.

Ответить
0

Справедливости ради, отражения у нас были сделаны именно камерами.

Ответить
0

Deferred Lighting прошлый век, но что поделать)

Ответить
0

Я сначала подумал, что в видео отвратительный звук с шумом. А потом, к концу понял, что шум не просто так -_-

Ответить
1

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

Ответить
1

в Uncharted 4 отражения сделаны через reflection proxy, тоесть это отдельный уровень , но есть и parallax corrected cubemaps, и SSR.

Ответить
0

Я правильно понял, что те зеркала которые работают визуально правильно - это не удаленные зеркала?
Т.е баг, который фича, но при этом баг?

Ответить
2

Да :) Они в общем-то работали, просто не везде хорошо.

Ответить
0

В Мафии 3 я делал систему отражений.

А почему нельзя было взять зеркала из Mafia II, там они работали, где-то читал, что движок в Mafia III тот же.

Ответить
2

Движок сильно поменялся, именно зеркала отломали, плюс, проблема была в том, что производительнось проседала сильно, а у нас не было особо запаса на консолях.

Ответить
0

А кто-нибудь знает, как реализованы отражения в GTA 5 на автомобилях и воде?

Ответить
0

Теперь я понимаю почему в The Crew 2 нет отражения в зеркалах заднего вида, меня это сильно беспокоило)

Ответить
0

Что то в th crew 2 все меньше остается(

Ответить
0

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

Ответить
0

У нас кстати есть, и их тоже я делал :)

Ответить
0

забыли, либо недоглядели и не убрали

А почему патчем не исправили? Или просто решили на это дело забить, раз так получилось?

Ответить
0

Отличный вопрос, думаю да, решили забить, так как были аддоны, не было особо времени. А потом я ушел и дальнейшую судьбу не знаю, может и исправили.

Ответить
0

Я может чего-то не понимаю, но почему нельзя сделать отражения в зеркалах в виде второй камеры и поместить ее в зеркало?

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Уве Болл вернулся в кино
и начал экранизировать flash-игры
Подписаться на push-уведомления