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

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

Они!

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

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

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

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

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

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

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

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

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

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

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

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

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

115115
85 комментариев

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

29

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

6

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

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

9

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

10