uGridsToLOD: улучшение LOD Fallout 4. Эстакады

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

В ходе обработки моделей требуется использовать по меньшей мере 10 инструментов (если не считать комплексные 3d-пакеты, такие как Blender), возникает множество интересных наблюдений, вопросов и нюансов. Их обсуждение требует отдельного внимания. Сначала я планировал написать об этом в статье, которую вы сейчас читаете, но скоро понял, что это будет слишком длинный текст, его лучше не смешивать с отчетом о результатах. Насколько я вижу, инструменты модификации игр довольно скудно представлены в рунете, русскоязычных материалов и внятных пояснений по ним очень мало, почти нет. Если эта тема покажется аудитории интересной, а у меня, с другой стороны, не угаснет к ней интерес, то, вполне вероятно, в будущем я уделю ей внимание. Например, в формате пособия по модификации игр на примере Fallout 4.

Итак, перехожу к первому отчету по проекту uGridsToLOD.

Общее количество объектов LOD в игре Fallout 4 велико (3999), и, как я уже говорил, они весьма разного достоинства и ценности. Чтобы быстрее оценить потенциал идеи, я начал с группы самых заметных и в то же время самых “тяжелых” объектов игры, представленных в LOD - с эстакад.

LOD нулевого уровня (LOD_0) включает 57 моделей эстакад. Их детализированные аналоги используют 6 материалов и 16 текстур. Все эти объекты были переработаны мною для LOD. Текстуры были помещены в папку LOD игры с сохранением структуры папок, которая используется для текстур основных игровых моделей (Data/Textures/LOD/Landscape/Roads). Плотность пикселей каждой текстуры была уменьшена в 16 раз (2048 -> 512). Материалы были помещены в папку LOD сходным образом (Data/Materials/LOD/Landscape/Roads), а все ссылки материалов на текстуры были заменены с учетом их местоположения в папке LOD. Затем была отредактирована каждая из 57 моделей эстакад (Data/Meshes/LOD/Landscape/Roads/HighwayOverpass). Это позволило уменьшить число полигонов в 1,5 - 5 раз. Из моделей были удалены мелкие, но очень тяжелые объекты, например: камешки; декали, наложенные сверху на срезы бетона для придания им фактуры раскрошившегося камня (поначалу это решение разработчиков, честно говоря, меня несколько обескуражило); крупные камни; незаметные издалека элементы металлоконструкций. Из следующего рисунка хорошо видно, как без заметных последствий для внешнего вида модели можно избавиться от 7825 граней (слева - оригинальная модель, справа - ее новая LOD-версия, сравни значения параметра “Num Triangles”, выделенные зеленым цветом).

01 - Example.png

Рисунок 1

Кроме того, были переработаны диффузная карта и карта нормалей для моделей эстакад уровня LOD_1 (Data/Textures/LOD/HWOverpassLOD_d.dds и Data/Textures/LOD/HWOverpassLOD_n.dds). Эти карты были нарисованы заново в разрешении 2048 х 2048 пикселей, после чего уменьшены до размера 1024 х 1024 пикселей для повышения производительности. Меши эстакад LOD_1 я редактировать не стал, решив ограничиться заменой карт. Детализацию этого уровня повысить тоже можно, просто перенеся в него модели прежнего LOD_0 (существовавшие в нем до его переработки), но здесь расположены очень удаленные от игрока объекты, а работа с ними (пока) не входит в задачи проекта. Пример того, как новая текстура изменила вид моделей LOD_1, см. на рисунке.

02 - Example.png

Рисунок 2

Меши и мэппинг ванильных моделей игры весьма неаккуратны. К счастью, модели уровня LOD_1 отрисовываются настолько далеко от игрока, что их сложно рассмотреть даже в оптический прицел в VR-версии игры.

Число граней в одной из самых больших моделей эстакад, HWExitTranYRamp01.nif - 65327, после обработки сократилось до 28678, т. е. в 2,28 раза. Число граней в одной из самых маленьких моделей, HWOnRampEndCap01.nif - 2209, после обработки сократилось до 841, т. е. в 2,62 раза. Таким образом, в грубом приближении среднее число граней в одной модели равно (28678 + 841) / 2 = 14759,5. Если не учитывать файлы с мешами пяти высотных зданий, упомянутые в предыдущей статье (имеют префикс LOD_Fake), самая тяжелая LOD-модель здания в игре - AirportTower01_LOD.nif. Число граней в ней равно 2244. Значит, один отредактированный “марш” эстакады в среднем нагружает компьютер так же, как 6,5 достаточно тяжелых зданий (14759 / 2244 = 6,58), что я нахожу хорошей пропорцией, особенно если учесть, что во многих LOD-моделях зданий количество граней можно будет сделать существенно меньше 2244. Эти расчеты означают, что если внедрение новых моделей эстакад в LOD хорошо проявит себя в плане производительности, то следующий шаг - внедрение новых моделей зданий - можно считать перспективным. Кроме того, всегда остается возможность второй итерации в редактировании эстакад.

Тесты проводились при uGridsToLoad = 5, fBlockLevel0Distance = 32768, fBlockLevel1Distance = 65536, fBlockLevel2Distance = 131072 и fBlockMaximumDistance = 262144. Характеристики тестового стенда: Ryzen 7 1700, 32 Gb, 1050 Ti 4 gb (т. е. это в чистом виде тест производительности видеокарты, нагрузка на процессор несущественна). Обновленный LOD показал себя хорошо. Внедренные на уровень LOD 4 модели эстакад выглядят так же, как и их модели в ближней прорисовке. По субъективным ощущениям производительность видеокарты не изменилась, тестирование со старым и новым LOD показывает разницу в 2-3 кадра (не более 5%). Нагрузка на центральный процессор остается без изменений и лежит в диапазоне от 9% до 33%. Важно учесть, что при fBlockLevel0Distance = 32768 новые модели эстакад уровня LOD 4 отрисовываются на расстоянии, значительно большем чем uGridsToLoad = 13, что хорошо видно при сопоставлении тестовых скриншотов с координатной сеткой мира Fallout 4. Подробнее об этом скажем чуть ниже.

При желании можно вернуть назад потерянные кадры и сохранить качественную картинку на приемлемой дистанции прорисовки, просто уменьшив значения параметров fBlockLevelXDistance до нужного значения. Это придает данным параметрам некий новый смысл, который, как я полагаю, был изначально заложен в них, но потом утерян в ходе оптимизации игры, косвенные свидетельства чего, на мой взгляд, можно найти в недрах игровых ресурсов. Это доказывает состоятельность идеи uGridsToLOD. Мы действительно можем повышать уровень детализации игры без заметных потерь в производительности, перенося базовые игровые модели в LOD при условии разумной оптимизации. Этот подход значительно дешевле в плане затрат на рендеринг, чем увеличение значений uGridsToLoad, но дает почти такое же визуальное качество кадра.

На тестовых скриншотах вы можете сравнить новый вид эстакад LOD (справа) с ванильным (слева). Для удобства я пронумеровал все скриншоты и разделил их на серии.


Серия скриншотов № 1.

Sess 1 - 01.jpg

Скриншот 1. Обзорный

Sess 1 - 03.jpg

Скриншот 2

Sess 1 - 04.jpg

Скриншот 3

Sess 1 - 05 - 1.jpg

Скриншот 4

Sess 1 - 05 - 2.jpg

Скриншот 5. Обновленный вид эстакад

Sess 1 - 06.jpg

Скриншот 6

Sess 1 - 02.jpg

Скриншот 7

Обратите внимание, что дорожная развязка на скриншоте 5 составлена из обновленных моделей эстакад уровня LOD_0, что легко определить по наличию перил, по торчащей арматуре и прочим деталям. Чтобы понять, как далеко это от игрока, обратимся к координатной сетке.

03 - Fallout 4 World Coords - uGrids.jpg

Рисунок 3

На этом рисунке числа отмечают углы квадратных зон детальной отрисовки, задаваемых параметром uGridsToLoad, когда игрок находится в квадрате 1. Именно из этой точки сделана серия скриншотов №1. Фрагмент эстакад, который мы наблюдаем на скриншоте 5, расположен в левом нижнем углу координатной сетки, двумя квадратами ниже отметки 15 (левый кружок). Из этого следует, что новые варианты эстакад отрисованы по меньшей мере на расстоянии, которое соответствует uGridsToLoad = 19. И только на дистанции 12 квадратов от игрока (uGridsToLoad = 25) мы точно видим модели уровня LOD_1 (ср. скриншот 6 с координатной сеткой, правый кружок). Скриншот 7 - это тоже взгляд с точки моста, отмеченной цифрой 1, но не вперед, а налево (по координатной сетке - направо). Данный фрагмент мира на координатной сетке не отражен, он очень далеко.


Серия скриншотов № 2.

Sess 1 - 07.jpg

Скриншот 8. Обзорный

Sess 1 - 09.jpg

Скриншот 9

Sess 1 - 10.jpg

Скриншот 10

Sess 1 - 11.jpg

Скриншот 11

Sess 1 - 08.jpg

Скриншот 12


Серия скриншотов № 3.

Sess 2 - 1.jpg

Скриншот 13. Обзорный

Sess 2 - 2.jpg

Скриншот 14

Sess 2 - 3.jpg

Скриншот 15

Sess 2 - 4.jpg

Скриншот 16


Серия скриншотов № 4.

Sess 2 - 5.jpg

Скриншот 17. Обзорный

Sess 2 - 6.jpg

Скриншот 18

Sess 2 - 7.jpg

Скриншот 19

Sess 2 - 8.jpg

Скриншот 20

Sess 2 - 9.jpg

Скриншот 21

На скриншотах 17 – 21 показаны обновленные варианты эстакад уровня LOD_1. Если внимательно присмотреться, на скриншоте 18 можно также разглядеть краешек модели эстакады уровня LOD_0 (ищите перила и характерные фрагменты арматуры, выглядывающие из-под дорожного покрытия).


Серия скриншотов № 5.

Sess 2 - 10.jpg

Скриншот 22. Обзорный

Sess 2 - 11.jpg

Скриншот 23

Sess 2 - 12.jpg

Скриншот 24

Sess 2 - 13.jpg

Скриншот 25


Серия скриншотов № 6.

Sess 2 - 14.jpg

Скриншот 26. Обзорный

Sess 2 - 15.jpg

Скриншот 27

Sess 2 - 16.jpg

Скриншот 28

Sess 2 - 17.jpg

Скриншот 29

Sess 2 - 18.jpg

Скриншот 30

Sess 2 - 19.jpg

Скриншот 31

На скриншоте 27 видим плоскость, летающую над перилами. В старой версии LOD она тоже есть, но там ее трудно рассмотреть из-за шума, созданного низкой детализацией текстур. Эта плоскость не является частью какой-либо модели эстакады. Предполагаю, что это LOD-кусочек мостика, перекинутого через перила. На скриншоте 31 видны сильно удаленные от игрока эстакады, которые не поместились на обзорном скриншоте серии № 6. Эти эстакады находятся слева от области, отраженной на скриншоте 26.


Серия скриншотов № 7.

New extra 1.jpg

Скриншот 32. Обзорный

New extra 2.jpg

Скриншот 33

New extra 3.jpg

Скриншот 34

New extra 4.jpg

Скриншот 35

New extra 5.jpg

Скриншот 36. Обзорный

New extra 6.jpg

Скриншот 37

New extra 7.jpg

Скриншот 38. Гуляем

New extra 8.jpg

Скриншот 39. Что там вдалеке?

New extra 9.jpg

Скриншот 40. Эстакады, эстакады, эстакады...


Серия скриншотов № 8. Артефакты

Artefact 1 - 0.jpg

Скриншот 41. Артефакт 1

Artefact 1 - 1.jpg

Скриншот 42. Артефакт 1

Artefact 1 - 2.jpg

Скриншот 43. Артефакт 1

Artefact 2 - 1.jpg

Скриншот 44. Артефакт 2

Artefact 2 - 2.jpg

Скриншот 45. Артефакт 2

Не обошлось без артефактов. В обоих случаях причиной оказался элемент стиля работы Bethesda, который я называю “принятие неожиданных проектных решений”. Оказалось, что карты эстакад для атласа текстур (диффузная карта Data/Textures/LOD/HWOverpassLOD_d.dds) используются в других моделях: мост (артефакт 1) и земля с фрагментом дороги (артефакт 2). Исправляется это простым редактированием проекционных координат текстур. Редактировать UV-координаты моста смысла нет, потому что в планах - переделка мостов для LOD. Артефакт 2 я планирую исправить, когда решу главные задачи проекта.

Созданные для генерации LOD ресурсы доступны за условную плату здесь. К сожалению, на данный момент я не могу позволить себе предоставлять их бесплатно, поэтому вы не сможете найти их на nexusmods и других аналогичных ресурсах.

Сейчас я реализую следующий этап - перерабатываю LOD-модели локации “Альянс” и большинства деревянных строений игры. Это более трудоемкая задача, так как для ее решения без тщательной ретопологии не обойтись. Об этом будет мой новый отчет.

Всем хорошего дня.

Любое использование данной статьи должно содержать ссылку на эту публикацию.

742 0 850 4
0
RENDER.RU