Fallout 4 - проблемы графики в изменяемом мире

Nov 07, 2015 22:52

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

[Смотреть]








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

Во-первых, давайте посмотрим на то, как должны выглядеть металлические поверхности:



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



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



Я не сомневаюсь что разработчики фоллаута в курсе этого метода и прекрасно знают про физически-достоверный рендеринг. Однако есть одна сложность: чтобы получить отражения на произвольной точке поверхности нужно, грубо говоря, "увидеть" сцену из этой точки по нужному направлению, но тогда при приближении к зеркальным поверхностям видеокарте пришлось бы считать как минимум вдвое больше, рассчитывая сначала видимую область зеркала, а затем в каждой его точке видимое отражение. Более того, чтобы получить размытое отражение там, где есть какие-то шероховатости (грязь, пыль), пришлось бы делать как минимум 16 выборок чтобы имитировать эффект рассеивания, что совершенно неприемлемо с точки зрения производительности. Но так, конечно, разработчики игр и не делают. Вместо этого, из некоторых точек, заданных дизайнером или алгоритмом, делается по 6 "фотографий" по всем направлениям граней куба, и собирается так называемый кубмэп (cubemap).



Затем из этого кубмэпа делается несколько размытых вариаций (мип-уровней), соответствующих разному уровню рассеивания. А затем, при необходимости посчитать отражение нужного размытия, из него просто берется значение по вектору отражения. Недостатков у этого метода несколько: например, такие кубмэпы дают лишь приблизительно точное отражение, так как кубмэп сделан из одной точки, а точки поверхности "зеркала" распределены в пространстве. Но это можно частично преодолеть используя технику параллаксной корреции отражений. Не буду вдаваться в детали. Также есть проблема со смешиванием нескольких кубмэпов чтобы избежать видимого перехода на стыке объектов, но и она достаточно тривиально решается. А ключевая в нашем случае проблема проистекает из того, что мир игры в Fallout 4 принципиально изменяемый. Как можно было догадаться, единожды созданный кубмэп не содержит фотографии тех объектов, которые появились позже, поэтому в нем не может быть отражений например двигающегося героя или построенного здания. Таким образом, при изменении уровня, кубмэп объекта, расположенного поблизости, будет сильно врать, и в отражениях можно будет увидеть, например, небо и солнце, в то время, как объект лежит у вас в свежепостроенной темной комнате. Еще есть проблема с динамической сменой времени суток, ведь отражения днем будут сильно отличаться от ночных. А что если добавить различные погодные условия?..

Все это требует принципиального решения: нужно либо пересоздавать кубмэпы на уровне при любом серьезном изменении окружающего пространства либо снизить их влияние на графику в целом. Так как уровни фоллаут4 предполагают большие открытые пространства, то, по всей видимости, используют только очень размытые кубмэпы, и я даже сомневаюсь что они генерируются или переключаются при смене времени суток. Следствием низкого разрешения кубмэп является отсутствие четких отражений и вариаций шероховатости на поверхностях. Кроме того, заметно, что многие элементы пейзажа и вовсе не создают отражений даже при очень больших углах, где должен возникать эффект Френеля, и даже на самых шероховатых поверхностях должны быть видимые отражения.



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

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



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

image Click to view



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

И, наконец, самые мощные техники это разного рода аппроксимации трассировки лучей, такие как VXGI, SVOGI, Voxel Cone Tracing:

image Click to view



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

Судя по всему, в Fallout 4 чтобы создать хоть какую-то видимость вторичного освещения, используется простейший ambient-light, то есть просто модификатор, добавляющий некоторое значение к цвету фрагмента в зависимости от его поворота в пространстве (нормали) или вовсе монотонно подсвечивающий объекты в тени.



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



Сходную но более продвинутую технику использовали и разработчики Star Wars: The Old Republic, что, однако, лично на мой взгляд, все равно делает восприятие мира неприятно-мультяшным и совсем нереальным.

Вывод.
Таким образом, мне представляется, что корень зла, породивший очевидное отставание в уровне графики, заключён в изменяемом мире игры. Именно необходимость целостности освещения внутри произвольных строений и возле них ограничила возможности применения физически достоверного подхода в рендеринге. Однако можно посмотреть на такие игры как GTA V и The Witcher 3, в которых огромный мир со сменяющимся временем суток и погодными условиями сочетается с реалистичным рендерингом, и утверждать, что уже сегодня существуют какие-то способы решения проблем, связанных с реалистичным динамическим освещением. Например генерация достаточно высококачественных карт отражений и их фильтрация на лету кажется мне вполне возможной с современными видеокартами, и мне непонятно почему в Fallout 4 отказались от этой идеи или очень сильно загрубили разрешение отражений (объем видеопамяти?)...

геймдев

Previous post Next post
Up