Основные настройки
Ниже — рекомендации по основным настройкам графики и оптимизации сцен.
Глоссарий
- Полигонаж — количество полигонов из которых состоят 3D-модели. По количеству полигонов можно судить на сколько детализированна и «тяжела» модель для рендеринга в реальном времени.
- Лайтмап — специальная текстура, в которую запекается освещение сцены.
- Шейдер — программа, которая управляет тем, как выглядит 3D-графика на экране. Определяет, как рисуются вершины, поверхности, тени, отражения, свет и материалы объектов.
- Полигональный меш — сетка из полигонов, которая формирует поверхность 3D-модели, другими словами — каркас.
- Постэффекты — визуальные эффекты, которые применяются после рендеринга сцены, к уже готовому изображению на экране.
- Антиалиасинг — технология, которая сглаживает «лесенки» на границах объектов в 3D-графике. Делает картинку более плавной и реалистичной, убирая резкие пиксельные края.
- FPS (frame per second) — количество кадров, сменяющих друг друга за одну секунду.
- GPU (graphics processing unit) — графический процессор.
- URP (universal render pipeline) — система рендеринга в Unity, разработанная с учетом мобильных устройств и ПК.
Общие требования
Cцены необходимо оптимизировать так, чтобы они не были чрезмерно нагружены и 3D-встречи могли корректно работать даже на маломощных компьютерах и VR-гарнитурах (шлемах).
Низкий показатель FPS в VR-приложениях недопустим. Нагрузка на GPU, вызванная геометрией и логикой локации, должна быть сбалансирована так, чтобы приложение в среде SaluteJazz XR стабильно работало с частотой не менее 90 кадров в секунду.
Поскольку проект WebXR и его APK-версия ориентированы на использование на маломощных устройствах, например, интегрированных видеокартах Intel или VR-шлемах на базе процессора Qualcomm XR2, разработка локации накладывает ряд технических ограничений. Важно придерживаться следующих рекомендаций:
- Общий полигонаж локации не должен превышать 200 000 треугольников.
- Общий объем текстур, включая лайтмапы, должен быть не более 250 МБ.
- Следует избегать сложных шейдеров с эффектами отражения.
- Не рекомендуется использовать источники света и тени в реальном времени.
- Количество Drawcalls должно быть минимизировано — не более 100 на локацию.
Соблюдение этих правил позволит достичь оптимальной производительности и комфортного пользовательского опыта.
Материал, текстуры, шейдеры
Ограничений на количество материалов для локации нет, однако, стремясь к минимизации drawcalls, рекомендуется использовать 5–10 материалов. Это позволит сохранить производительность на высоком уровне.
Технических ограничений на размер текстур также нет, максимальный размер — 4096 x 4096. Но общий объем всех текстур, включая лайтмапы, не должен превышать 250 МБ. Для оптимизации разумно создавать текстурные атласы, объединяющие объекты, которые используют один материал.
Проект использует систему шейдинга URP. Допускается применение всех шейдеров, поддерживаемых этой системой, но без особой необходимости не стоит использовать сложные шейдеры, такие как Complex Lit. В большинстве случаев достаточно шейдеров Lit (с предварительно рассчитанным освещением) и Simple Lit (для отражений на металлических и других отражающих поверхностях). Также возможно использование сторонних шейдеров, например, для воды или визуальных эффектов, работающих в URP, но они редко превосходят встроенные шейдеры по производительности.
Реалтайм-отражения не рекомендуются, так как они снижают производительность вдвое. Однако для локаций с изначально высоким FPS, например, ~180 кадров в секунду на простых сценах, их использование допустимо в качестве визуального улучшения.
Свет
Использование динамического света и теней значительно снижает производительность, поэтому их применение крайне не рекомендуется. Для простых локаций с изначально высоким FPS это допустимо. Вместо динамического света рекомендуется использовать Lightmaps — систему, при которой освещение «запекается» в текстуру, а также Light Probes, которые обеспечивают освещение динамических объектов, таких как аватары, на основе данных ближайших про б. Это исключает необходимость в реальных источниках света во время выполнения.
Lightmaps
Ограничений на технику рендеринга Lightmaps нет, но важно найти баланс между качеством и размером текстур. Следите за артефактами на швах UV, особенно при автоматической генерации. Помните, что общий размер текстур, включая Lightmaps, не должен превышать 250 МБ. Оптимальное количество Lightmaps — 2–6 текстур размером 2048 x 2048.
Drawcalls
Drawcalls — это команды GPU для отрисовки объектов в кадре, и они напрямую влияют на производительность. Для слабых систем каждый лишний drawcall создает дополнительную нагрузку. Поэтому минимизация их количества — ключевая задача при создании локации. Количество можно отследить в отладочном окне Unity в режиме Play. Каждый материал, объект, тень или источник света увеличивают количество drawcalls. Чтобы снизить их число:
- Используйте минимальное количество материалов, объединяя объекты в текстурные атласы.
- Объединяйте геоме трию в один объект для отрисовки за один проход. Например, книги на полке лучше сделать одним объектом.
- Стремитесь к тому, чтобы общее количество drawcalls на локацию не превышало 100.
Batches (Draw Call Batching)
Unity автоматически оптимизирует рендеринг с помощью системы Draw Call Batching, исключая объекты, невидимые камере. Например, находящиеся за пределами ее обзора или полностью перекрытые другими объектами. Однако если локация объединена в один полигональный меш, GPU все равно будет обсч итывать весь объект, даже если часть его не видна. Это может снизить FPS, поэтому важно учитывать этот момент при оптимизации.
Post Effects
Постэффекты в VR запрещены. Они не учитывают глубину сцены и создают визуальные артефакты, которые мешают восприятию в VR-режиме.
Коллайдеры
Коллайдеры выполняют две основные функции: они служат поверхностью для перемещения аватаров и ограничивают их движение. Для объектов, с которыми игрок должен взаимодействовать, используйте простые коллайдеры (боксы или сферы) — они наиболее эффективны. Для сложных объектов создавайте упрощенные копии и применяйте Mesh Collider с отключенной визуализацией геометрии. В VR важно учитывать, что коллайдеры должны быть смещены от стен на 15 см в реальном масштабе, чтобы предотвратить возможность «проникновения» головы пользователя в объекты.
Масштаб
Высота сидячих поверхностей, например, стульев — 45 см. Высота столов для сидения за ними — 75 см. Допускается создание объектов других высот, но они будут исключительно декоративными, так как анимации персонажей рассчитаны только на указанные выше параметры. При импорте в Unity объекты должны быть увеличены в 2 раза. Это связано с особенностью технологии: персонажи в экосистеме SaluteJazz XR имеют рост 360 см (180 см × 2).
Резюме
Оптимальным тестом является запуск локации в VR APK с показателем 90 FPS из любой точки сцены при включенном антиалиасинге x2 и Render Scale 1.2. Такой уровень производительности должен сохраняться даже при просмотре локации из самых удаленных точек. Если этого не удается достичь, локацию необходимо оптимизировать в соответствии с описанными требованиями. Это особенно важно, так как добавление логики среды SaluteJazz XR, звуков, аватаров и других элементов неизбежно снизит FPS. Поэтому на этапе создания локации важно избегать излишне «тяжелой» графики, чтобы сохранить производительность на должном уровне.