Байки старпёров девелоперов - 5
Продолжаем сеанс самобичевания.
Вы не поверите, но это тоже сделал я!
Итак, краткое содержание предыдущих серий: Я разработчик со стажем. Делал всякое и Мафию 3 тоже.
В Мафии 3 я делал систему отражений. При кажущейся простоте, на текущем поколении железа - это довольно нетривиальная задача. Когда ray tracing наконец победит, то проблема исчезнет навсегда.
Но пока что, 99% игр решают эту проблему просто, используя технику под названием SSR (screen space reflections). Если не вдаваться глубоко в детали, то техника очень простая. Если исходить из простого предположения, что большая часть того, что будет в отражении, рисуется в основном кадре игры, то довольно дешево и быстро можно оттрассировать основную картинку и получить отражение. Но как только результат не может быть получен из основного кадра, то встает вопрос откуда брать информацию. 99% игр поступают просто, либо выводят черный цвет, либо берут информацию из некого усреденнного пространства окружения. Обычно это некий кубмап.
Это очень легко проверить в любой игре, в которой есть отражения, достаточно покрутить камерой вверх-вниз, чтобы увидеть, как в отражении, что-то похожее на правду подменяется какой-то размазней.
1% игр заморачивается с этой проблемой и есть много способов, как ее решить. Первый и самый честный - это честно рисовать все, что должно отражаться. Это делал, например Unreal, тот, что самый первый. Проблема состоит в том, что это очень дорого. В смысле сильно влияет на производительность.
Второй способ - это использовать тот же самый кубмап, но более интеллектуально. Например, учитывать его относительное смещение. Так, например, делают в Uncharted 4. Парни молодцы, сделали так мастерски, что это буквально заметно всего в паре мест. Это очень дешево и почти идеально, но, к сожалению не работает в общем случае.
У нас в Мафии 3 использовался совершенно другой способ. Если SSR не находил нужного результата, то мы динамически строили еще несколько кубмапов, позиции которых были либо расставлены художниками ( например в помещениях), либо автоматически генерировались движком. Так вот, если SSR не находил результата, мы трассировали еще и кубмапы. Честно трассировали, чтобы найти необходимую информацию. Посмотрите в игре и покрутите камерой - у нас везде честные отражения!
Теперь же собственно байка.
В самом конце проекта ко мне пришли художники и спросили про зеркала. Так как игра была и на консолях, никакого бюджета для настоящих зеркал (помните про первый путь) у нас не было. Мы с трудом скребли производительность для основного кадра, какой там еще проход для зеркал. И я предложил попробовать сделать зеркала через общую систему отражений. Довольно быстро сделал прототип, который показывал на тестовом уровне приемлимую картинку.
А потом художники стали вставлять это в игру. И тут, как обычно, полезла Нарния.
Времени чинить не было, поэтому было принято решение все убрать к чертям собачьим. Что и было сделано в 90% случаев, если обратите внимание, в игре в основном зеркала либо поломаны, либо замутнены. Кроме тех самых 10%, про которые либо забыли, либо недоглядели и не убрали соотвествующие настройки.
Зато вам радость!
Комментарий недоступен
Про это было в предыдущей части, но в более глобальном масштабе!
О, привет, Слартибартфаст!
2004
Там даже в Codename 47 (2000) были честные отражения.
Хорошая традиция, прошедшая через года
2016 тогда уж
И уж если честно, из последнего, мордой по полу меня может поволозить только Detroit. Чуваки мой респект к вам без меры. Вы круче всех.