1. БАЗОВЫЕ ЦИФРЫ

Частота кадров

Для VR-проектов ключевым требованием является постоянная частота кадров 90 FPS и выше. Это необходимо для предотвращения дискомфорта у пользователей (тошноты и укачивания). Поэтому необходимо следить за тем, чтобы сцена содержала оптимальное количество полигонов и других графических элементов.

1.1. Тексельная плотность

1.1.1. Общее значение тексельной плотности

  • Оптимальное значение текселя для VR обычно составляет 8–16 пикселей на сантиметр (px/cm) для объектов, которые находятся в пределах нормального поля зрения игрока (на расстоянии 1–2 метра).
  • Для объектов, которые будут расположены очень близко к пользователю и могут быть детально рассмотрены, плотность можно увеличить до 16–32 px/cm.

1.1.2. Объекты с разными уровнями детализации

  • Крупные объекты (здания, стены, ландшафт): Для больших объектов, которые занимают значительное пространство и не требуют детальной прорисовки с близкого расстояния, используйте меньшую плотность — около 4–8 px/cm.

  • Средние объекты (мебель, машины): Для объектов среднего размера, которые игрок может увидеть поближе, подходит плотность 8–16 px/cm.

  • Мелкие объекты (интерактивные предметы, оружие): Объекты, которые могут быть детально рассмотрены игроком вблизи, требуют более высокого значения текселя — 16–32 px/cm.

1.2. Разрешение текстур

1.2.1. Общее правило

  • Рекомендуется использовать 2048x2048 пикселей (2K) для большинства текстур объектов, находящихся близко к игроку. Это обеспечивает достаточную детализацию при взгляде вблизи.

  • Для менее важных объектов и объектов, которые находятся дальше от пользователя, подходит разрешение 1024x1024 пикселей (1K) или даже 512x512 для ещё более дальних объектов.

1.2.2. Платформы

  • Мобильные VR устройства (Meta Quest, Pico и др.): Из-за ограничений по памяти и вычислительным ресурсам, рекомендуется использовать текстуры с максимальным разрешением 1024x1024 для интерактивных объектов и 512x512 для фоновых объектов. Для ключевых объектов можно использовать 2048x2048, но с осторожностью.

  • ПК VR: Здесь можно позволить себе использовать текстуры более высокого разрешения, такие как 2048x2048 или даже 4096x4096 для детализированных объектов, так как мощные видеокарты справляются с обработкой больших текстур.

1.3. Количество полигонов

  • Мобильные VR-устройства (Oculus Quest, Pico и др.): Для автономных устройств ограничения по полигонам строже, поскольку такие устройства имеют более слабые графические процессоры.
    • Общая рекомендация — не более 50-100 тысяч полигонов на сцену. Для важных объектов (персонажи, предметы) лучше использовать не более 5-10 тысяч полигонов.
  • PC VR (Oculus Rift, HTC Vive и др.): На более мощных ПК-устройствах можно позволить себе больше полигонов.
    • Рекомендуется 500 тысяч - 1 миллион полигонов на всю сцену. Однако для отдельных объектов количество полигонов всё ещё должно быть ограничено — 10-50 тысяч полигонов для ключевых моделей.
  • Консоли VR (PlayStation VR и др.): Требования к полигонажу для консолей будут схожи с ПК-VR, хотя ограничения могут быть несколько строже из-за фиксированной производительности.

Рекомендуемый Polycount для Mobile VR в Quest 2:

  • Количество треугольников на объект:
    • Объекты с низкой детализацией (например, удаленные объекты или элементы фона): Стремитесь к 500-2000 треугольникам на объект.
    • Объекты со средней детализацией (например, персонажи или интерактивные объекты): Около 5000-10 000 треугольников.
    • Объекты с высокой детализацией (например, главные персонажи или важные элементы): 10 000-20 000 треугольников. Эти объекты следует использовать ограниченно и для тех, которые находятся близко к игроку.
  • Общее количество треугольников в сцене: Поддерживайте общее количество треугольников в сцене на уровне 100 000-200 000. Это включает все объекты, персонажей и окружение. Чем меньше, тем лучше, особенно если сцена содержит сложное освещение или эффекты.

1.4. Размеры ассетов

  • Мобильные VR устройства (Meta Quest, Pico и др.): Для автономных устройств рекомендуется минимизировать размеры файлов моделей. Общий размер файлов для одной сцены не должен превышать 150-200 МБ, включая текстуры, анимации и шейдеры. Размер отдельной модели рекомендуется держать в пределах 1-10 МБ.
  • ПК VR: ПК устройства могут поддерживать большие файлы, однако важно сохранять баланс между качеством и производительностью. Размер файла модели может варьироваться от 10 до 50 МБ для сложных объектов, в зависимости от количества полигонов, текстур и анимаций.

1.5. Целевые показатели производительности Meta Quest

1.5.1. Draw Calls

Ниже приведены некоторые примеры диапазонов

Platform Draw Calls Description
Quest 1 50-150 Загруженная симуляция
Quest 1 150-250 Средняя симуляция
Quest 1 200-400 Легкая симуляция
Quest 2 80-200 Загруженная симуляция
Quest 2 200-300 Средняя симуляция
Quest 2 400-600 Легкая симуляция
Quest 3 200-300 Загруженная симуляция
Quest 3 400-600 Средняя симуляция
Quest 3 700-1000 Легкая симуляция
  • Загруженная симуляция: это приложения с большим количеством симуляции, VoIP, сети, анимации и скиннинга от других игроков или большого количества NPC. Например, многопользовательские шутеры от первого лица и населенные социальные приложения.
  • Средняя симуляция: Эти приложения представляют собой миры среднего размера с небольшим количеством игроков или NPC, такие как однопользовательские шутеры от первого лица и средненаселенные социальные игры. Большинство приложений попадают в эту категорию.
  • Легкая симуляция: Эти приложения имеют небольшое количество изменений состояния конвейера (минимальное количество унифицированных шейдеров без вариантов) — например, игры с побегом из комнаты, головоломки и кооперативные игры.

1.5.2. Triangle Counts

Ограничения по колличеству полигонов

Platform Triangle Count
Quest 1 350k-500k
Quest 2 750k-1m
Quest 3 1.3m-1.8m

2. Подходы оптимизации

2.1. Оптимизация геометрии

  • Низкополигональные модели (Low-poly): Используйте как можно меньше полигонов для моделей, чтобы уменьшить нагрузку на аппаратное обеспечение.
  • Уровни детализации (LOD): Создавайте несколько версий моделей с различными уровнями детализации, чтобы использовать более низкие уровни при удалении объекта от камеры.
  • Бейк текстур: Используйте нормал-мапы и другие карты для симуляции деталей на поверхностях, избегая добавления лишних полигонов.
  • Создание экземпляров геометрии: используйте методы создания экземпляров для эффективного дублирования и рендеринга нескольких экземпляров одного и того же объекта.
  • Комбинируйте ближайшую геометрию.
  • Декомпозиция крупных объектов: Разделение крупных объектов на более мелкие части позволяет загружать и рендерить только видимые части сцены.
  • Используйте Occlusion Culling в проекте.

2.2. Оптимизация текстур

  • Оптимизация разрешения текстур: Используйте оптимальные разрешения текстур, чтобы достичь баланса между качеством изображения и производительностью.
  • Атлас текстур или Texture Arrays : Используйте атлас текстур (Texture Atlases), чтобы объединить несколько текстур в одну и уменьшить количество вызовов рендеринга.
  • Используйте Trimsheet и тайленные текстуры.
  • Используйте алгоритмы сжатия текстур, чтобы уменьшить размер файла без ущерба для визуального качества (ASTC).
  • Не используйте лишние текстуры, если есть такая возможность (оставить только текстуру цвета или изменять разрешения).

2.3. Оптимизация освещения

  • Предзапечённое освещение: Используйте запечённое освещение там, где это возможно, для создания реалистичных теней без дополнительных затрат на рендеринг.
  • Динамическое освещение: Используйте динамические источники света экономно, так как они могут существенно снизить производительность в VR.