В данной статье описан процесс оптимизации 3D-визуализации для VR-тренажёра «Ремонт фонтанной арматуры».
В данной статье описан процесс оптимизации 3D-визуализации для VR-тренажёра «Ремонт фонтанной арматуры».
В проекте Unity используются следующие решения:
При создании 3D-моделей следует использовать минимальное количество полигонов для описания нужной формы. Однако, если созданная сцена получилась слишком «тяжёлой», можно использовать LOD (Level of Detail) – приём, заключающийся в создании нескольких вариантов одного объекта с различными степенями детализации, которые переключаются в зависимости от удаления объекта от виртуальной камеры.
Использование LOD способно существенно снизить требования к ресурсам компьютера при выводе графики на экран.
Подробнее о том, как оптимизировать 3D-модели и использовать LOD в Unity можно узнать в видео MAKE YOUR GAME RUN SMOOTH — Unity LOD Tutorial, а также в разделе Level of Detail (LOD) for meshes.
В нашем случае для рендеринга сцены необходимо было обработать около 150 тыс. треугольников.
Мы не использовали LOD, так как зона передвижения пользователя была небольшой.
Следующем шагом было уменьшение разрешения текстурных карт с 8192×8192 до 2048х2048 px для 3D-моделей, с которыми пользователь взаимодействует регулярно, и с 8192х8192 до 512×512 px для 3D-моделей, находящихся за пределами зоны передвижения пользователя.
Для этого использовалась встроенная функция сжатия текстур в Unity. Более подробно о форматах текстур для целевых платформ можно узнать в разделе Recommended, default, and supported texture formats, by platform.
Пакетная обработка вызовов отрисовки (Draw call batching) – это метод оптимизации, который объединяет сетки, чтобы Unity мог отображать их за меньшее количество вызовов отрисовки.
О том, как оптимизировать вызовы отрисовки можно узнать в разделе Optimizing draw calls.
В нашем случае использовалось два метода оптимизации:
Отбор окклюзии (Occlusion culling) – это процесс, который не позволяет Unity выполнять расчёты рендеринга для игровых объектов (Game objects), которые полностью скрыты от просмотра (или закрыты) другими игровыми объектами.
Более подробно о процессе отбора окклюзии и его использовании можно узнать в разделе Occlusion culling.
Так как всё освещение в сцене просчитывалось в реальном времени, а этот процесс являлся наиболее ресурсоёмким, последним шагом было уменьшение качества теней. Для этого были созданы каскады теней (Shadow cascades), которые позволяют установить разрешение теней относительно виртуальной камеры.
Более подробно о каскадах теней можно узнать в разделе Shadow Cascades. Информация о настройке каскадов в Unity URP представлена в разделе Universal Render Pipeline → Shadow.