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”, выделенные зеленым цветом).
Рисунок 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, см. на рисунке.
Рисунок 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.
Скриншот 1. Обзорный
Скриншот 2
Скриншот 3
Скриншот 4
Скриншот 5. Обновленный вид эстакад
Скриншот 6
Скриншот 7
Обратите внимание, что дорожная развязка на скриншоте 5 составлена из обновленных моделей эстакад уровня LOD_0, что легко определить по наличию перил, по торчащей арматуре и прочим деталям. Чтобы понять, как далеко это от игрока, обратимся к координатной сетке.
Рисунок 3
На этом рисунке числа отмечают углы квадратных зон детальной отрисовки, задаваемых параметром uGridsToLoad, когда игрок находится в квадрате 1. Именно из этой точки сделана серия скриншотов №1. Фрагмент эстакад, который мы наблюдаем на скриншоте 5, расположен в левом нижнем углу координатной сетки, двумя квадратами ниже отметки 15 (левый кружок). Из этого следует, что новые варианты эстакад отрисованы по меньшей мере на расстоянии, которое соответствует uGridsToLoad = 19. И только на дистанции 12 квадратов от игрока (uGridsToLoad = 25) мы точно видим модели уровня LOD_1 (ср. скриншот 6 с координатной сеткой, правый кружок). Скриншот 7 - это тоже взгляд с точки моста, отмеченной цифрой 1, но не вперед, а налево (по координатной сетке - направо). Данный фрагмент мира на координатной сетке не отражен, он очень далеко.
Серия скриншотов № 2.
Скриншот 8. Обзорный
Скриншот 9
Скриншот 10
Скриншот 11
Скриншот 12
Серия скриншотов № 3.
Скриншот 13. Обзорный
Скриншот 14
Скриншот 15
Скриншот 16
Серия скриншотов № 4.
Скриншот 17. Обзорный
Скриншот 18
Скриншот 19
Скриншот 20
Скриншот 21
На скриншотах 17 – 21 показаны обновленные варианты эстакад уровня LOD_1. Если внимательно присмотреться, на скриншоте 18 можно также разглядеть краешек модели эстакады уровня LOD_0 (ищите перила и характерные фрагменты арматуры, выглядывающие из-под дорожного покрытия).
Серия скриншотов № 5.
Скриншот 22. Обзорный
Скриншот 23
Скриншот 24
Скриншот 25
Серия скриншотов № 6.
Скриншот 26. Обзорный
Скриншот 27
Скриншот 28
Скриншот 29
Скриншот 30
Скриншот 31
На скриншоте 27 видим плоскость, летающую над перилами. В старой версии LOD она тоже есть, но там ее трудно рассмотреть из-за шума, созданного низкой детализацией текстур. Эта плоскость не является частью какой-либо модели эстакады. Предполагаю, что это LOD-кусочек мостика, перекинутого через перила. На скриншоте 31 видны сильно удаленные от игрока эстакады, которые не поместились на обзорном скриншоте серии № 6. Эти эстакады находятся слева от области, отраженной на скриншоте 26.
Серия скриншотов № 7.
Скриншот 32. Обзорный
Скриншот 33
Скриншот 34
Скриншот 35
Скриншот 36. Обзорный
Скриншот 37
Скриншот 38. Гуляем
Скриншот 39. Что там вдалеке?
Скриншот 40. Эстакады, эстакады, эстакады...
Серия скриншотов № 8. Артефакты
Скриншот 41. Артефакт 1
Скриншот 42. Артефакт 1
Скриншот 43. Артефакт 1
Скриншот 44. Артефакт 2
Скриншот 45. Артефакт 2
Не обошлось без артефактов. В обоих случаях причиной оказался элемент стиля работы Bethesda, который я называю “принятие неожиданных проектных решений”. Оказалось, что карты эстакад для атласа текстур (диффузная карта Data/Textures/LOD/HWOverpassLOD_d.dds) используются в других моделях: мост (артефакт 1) и земля с фрагментом дороги (артефакт 2). Исправляется это простым редактированием проекционных координат текстур. Редактировать UV-координаты моста смысла нет, потому что в планах - переделка мостов для LOD. Артефакт 2 я планирую исправить, когда решу главные задачи проекта.
Созданные для генерации LOD ресурсы доступны за условную плату здесь. К сожалению, на данный момент я не могу позволить себе предоставлять их бесплатно, поэтому вы не сможете найти их на nexusmods и других аналогичных ресурсах.
Сейчас я реализую следующий этап - перерабатываю LOD-модели локации “Альянс” и большинства деревянных строений игры. Это более трудоемкая задача, так как для ее решения без тщательной ретопологии не обойтись. Об этом будет мой новый отчет.
Всем хорошего дня.
Любое использование данной статьи должно содержать ссылку на эту публикацию.