This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Режимы вывода изображения
Физика
Браузер SDK 2
Лицензирование и типы лицензий
Дополнения (Add-Ons)
Демонстрационные проекты
API Samples
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
Унифицированный язык шейдеров UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
Двойная точность координат
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы
Внимание! Эта версия документация УСТАРЕЛА, поскольку относится к более ранней версии SDK! Пожалуйста, переключитесь на самую актуальную документацию для последней версии SDK.
Внимание! Эта версия документации описывает устаревшую версию SDK, которая больше не поддерживается! Пожалуйста, обновитесь до последней версии SDK.

Лучшие практики VR

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

Лучшие практики, описанные в этой статье, призваны выделить некоторые ключевые моменты, которые следует учитывать при разработке проекта VR, и помочь вам создавать контент, обеспечивающий безопасный и приятный опыт VR для пользователей.

Шаблоны VR Template#

Думая о разработчиках виртуальной реальности, мы создали два шаблона (для C++ и C#), а также сделали демо-проект VR Sample demo, доступный для C ++ (для C # есть специальный сэмпл vr_sample, который встроен непосредственно в шаблон C# VR Template), что позволит вам сразу приступить к созданию собственных проектов.

Рекомендуем использовать это демо как основу для вашего VR-проекта на C++ (для C# смело берите встроенный vr_sample). Здесь вы найдете набор 3D-моделей всех популярных контроллеров VR, а также реализацию основных механик, таких как захват и толкание объектов, нажатие кнопок, открытие / закрытие ящиков и многое другое.

Миры в демо и сэмпле имеют свои настройки, оптимизированные для лучшей производительности в VR, и включают ассет .render, который можно загрузить в любое время, двойным щелчком по нему в Asset Browser и сбросить любые изменения, внесенные вами в оптимизированные значения по умолчанию.

Примечание
Вы также можете выбрать шаблон проекта VR при создании нового приложения через SDK Browser , чтобы создать пустое приложение VR с нуля (с удаленным демонстрационным контентом и кодом).

Размер объектов#

Восприятие масштаба объектов вокруг вас, вероятно, будет ключевым моментом, который отличает виртуальную реальность от плоского изображения на экране. Ваши модели могут выглядеть "правильно" на экране, но в VR вы наверняка заметите, что если стол имеет несколько необычную высоту, размер вашего стула, а также размеры предметов на вашем столе неверны.

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

Вы можете воспользоваться следующими советами, чтобы избежать ошибок, упомянутых выше:

  • Создавайте все свои модели, максимально приближая их масштаб к реальному . Например, вам следует измерить высоту своего стола, подоконника и стула. Наличие только этих параметров и использование их в качестве основы для определения размера ваших моделей сделает их реалистичными.
  • Помните, что единица измерения UNIGINE, как и во многих других движках, равна 1 метру , тогда как во многих инструментах для создания цифрового контента она равна 1 см по умолчанию для удобства. Вы можете отрегулировать масштаб ваших 3D-моделей при необходимости при их импорте, установив масштаб фактор в параметрах импорта геометрии больше или меньше 1 .
  • Протестируйте свой контент в виртуальной реальности . Этот подход полезен в любом случае, поскольку мы не просто создаем виртуальные копии существующих объектов, иногда может потребоваться создать что-то новое, чего-то, чего не существует. Такие новые созданные объекты могут потребовать дополнительных корректировок масштаба для обеспечения реалистичного вида. Рекомендуется сначала создать фиктивную модель, поместить ее в свой мир и проверить в VR, чтобы убедиться, что все размеры в порядке. Когда вы закончите с манекеном, вы можете переходить к своей 3D-модели. Такой подход поможет вам избежать мучительной корректировки пропорций 3D модели на завершающем этапе.
  • Вы можете использовать контроллеры VR в качестве эталонов для измерений . Представьте, что у вас в руке контроллер Vive, и вы видите его размер относительно других объектов вокруг вас. 3D-модель этого контроллера в вашем виртуальном мире имеет точный масштаб оригинала. Таким образом, вы можете импортировать эту модель в инструмент DCC (3DS Max, Maya и т.д.) И использовать ее в качестве эталона при создании других объектов.

Помните, что объекты в VR лучше всего просматриваются, когда они находятся в диапазоне от 0,75 до 3,5 метров от камеры игрока.

Болезнь виртуальной реальности#

Болезнь виртуальной реальности очень похожа на укачивание, оно возникает при использовании гарнитуры VR. Это может существенно повлиять или даже испортить опыт пользователя в виртуальной реальности и может стать препятствием для эффективного использования инструментов обучения виртуальной реальности.

Следуйте приведенным ниже рекомендациям, чтобы снизить риск заболевания виртуальной реальностью и убедиться, что вашим пользователям понравится виртуальная реальность:

  • Вы должны поддерживать частоту кадров, равную или превышающую частоту обновления дисплея HMD. В идеале его следует держать немного выше, чтобы всегда оставаться наверху. Лаги и пропущенные кадры вызывают дрожь, которая в VR вызывает дискомфорт. Так что постарайтесь максимально оптимизировать свой проект.
  • Худшее, что вы можете сделать со своим пользователем в виртуальной реальности, - это показывать кинематографические ролики или управлять движением камеры в конфликте с самодвижением пользователя в реальном мире. Так что не делайте этого.
  • Поле обзора (FOV) должно соответствовать физической геометрии гарнитуры и линз. В противном случае, когда вы поворачиваете голову, мир будет выглядеть искривленным, что может вызвать дискомфорт и тошноту. Таким образом, значение FOV должно устанавливаться автоматически через SDK устройства и внутреннюю конфигурацию. Избегайте переопределения вручную и не позволяйте пользователям изменять его.
  • Избегайте использования эффекта покачивания камеры для имитации ходьбы (типично для большинства игр от первого лица). Перемещение камеры вверх и вниз раздражает, мешает восприятию виртуальной реальности и вызывает недомогание.
  • Увеличение или уменьшение масштаба с помощью камеры не рекомендуется, так как это может вызвать недомогание, особенно если при этом движения головы и камеры не соответствуют друг другу.
  • Помните, что любое ускорение создает несоответствие между вашими зрительными, вестибулярными и проприоцептивными чувствами. Термин ускорение здесь относится к любому изменению движения пользователя, будь то направление или скорость. Замедление или остановка, повороты во время движения или остановки, шаг или толкание в сторону - все это формы ускорения. Делайте такие конфликты как можно более короткими (желательно мгновенными) и редкими. По возможности инициируйте и контролируйте ускорение пользователем.
  • Дрожать, дергать или покачивать камеру будет неудобно для игрока. Поэтому не трясите камеру, чтобы выделить событие (например, взрыв гранаты), это может иметь смысл в экранных носителях, но не в VR.
  • Избегайте лестниц, вместо этого используйте лифты, так как быстрое перемещение вверх и вниз по лестнице может очень дезориентировать игрока.
  • Разработчики часто используют устройства виртуальной реальности и могут не замечать или не чувствовать того, что может заметить другой человек. Итак, чтобы убедиться, что ваше приложение не вызывает ВР-болезнь, вы должны проверять его как можно чаще, вовлекая как можно больше разных людей.

Обратите внимание, что перечисленные выше пункты не составляют полный список основных причин ВР-болезнь. Он предназначен для того, чтобы дать вам общее представление о том, что может вызвать тошноту у пользователей вашего приложения VR.

Настройки рендеринга#

Для вашего удобства в папке data/template_render_settings каждого нового созданного проекта есть готовый к использованию ресурс template_virtual_reality.render со всеми настройками, оптимизированными для лучшей производительности в VR (этот актив содержит те же настройки, что и тот, который используется в VR Sample) . Вы можете загрузить и применить эти настройки, просто дважды щелкнув ресурс в Asset Browser . Вы также можете дважды щелкнуть этот актив, чтобы сбросить любые сделанные вами изменения до оптимизированных значений по умолчанию.

Для вашего проекта также может быть полезно включить предварительный проход глубины. Он доступен либо в настройках Buffers, либо в меню Render -> Features:

После включения этой опции проверьте , увеличилась ли производительность.

Также рекомендуется отключить другие буферы, если они не используются:

Эффекты экранного пространства#

Все эффекты экранного пространства в VR очень дороги, так как их производительность сильно зависит от разрешения рендеринга. Вот несколько основных рекомендаций:

  • Отключите эффекты экранного пространства и не используйте их по возможности. Это лучший вариант по производительности.
  • Используйте только те, которые обеспечивают значительное визуальное улучшение конечного изображения, например Filmic Tone Mapping, SSAO и Bloom. Только эти три эффекта могут обеспечить очень хороший визуальный результат.
  • По возможности используйте разрешение Quad или максимальное разрешение Half. Этот параметр доступен для эффектов SSAO и Bloom.
  • Использование эффектов Screen Space Reflections, Screen Space Shadows и SSRTGI в виртуальной реальности не рекомендуется для графических процессоров среднего уровня, поскольку в этих эффектах используется трассировка лучей в пространстве экрана, которая требует больших затрат производительности при высоких разрешениях.
  • Отключите Denoise (предпочтительный вариант) или установите значение 1 для параметров Blur Iterations and Radius:

Сглаживание#

Сглаживание играет очень важную роль в VR, так как большинство популярных HMD имеют более широкий угол обзора, чем мониторы. Таким образом, несмотря на высокое разрешение, наложение по-прежнему очень заметно. Ситуация становится еще хуже, поскольку постоянное движение головы в виртуальной реальности приводит к мерцанию и неровным краям объектов. Особенно плохо обстоят дела с круглыми глянцевыми объектами, у которых наложение очень грубое.

Вот следующие рекомендации:

  • Используйте Temporal Antialiasing , так как он помогает бороться с мерцанием и неровностями по краям. Гибкие настройки TAA, такие как Pixel Offset и Preserve Details, позволяют избежать размытия конечного изображения. Рекомендуемые настройки для VR следующие: Pixel Offset = 1.0 и Preserve Details = 3. Однако эти значения могут различаться в зависимости от вашей сцены, поэтому мы советуем настроить их для получения максимально четкого и немерцающего изображения.
  • Не рекомендуется использовать FXAA, так как он только добавляет размытие в VR и не удаляет неровные края, когда ваша голова движется.

Рекомендуемые настройки сглаживания

Освещение#

Освещение в VR - наверное, самая дорогая операция, особенно динамическое освещение. Добавьте к этому расчет теней в реальном времени и подумайте, сколько FPS вы потеряете.

Итак, в вашем VR-проекте вы всегда должны использовать предварительно запеченное освещение и отражения, поскольку это самый дешевый вариант для рендеринга. Запеките все ваше освещение и отражения до Voxel / Environment Probes соответственно. Обратите внимание, что режим аддитивного наложения позволяет сочетать преимущества запеченного освещения с гибким управлением, типичным для динамического.

Как правило, существуют следующие варианты (от самого легкого до самого тяжелого):

  • Ни в коем случае не использовать какие-либо источники света в вашем мире. Это самый быстрый и дешевый вариант.
  • Используйте один Voxel Probe со всем освещением. Для увеличения производительности вы можете отключить опцию Specular.
  • Используйте Voxel Probe с отключенными отражениями для диффузного освещения и Environment Probe для отражений.
  • Используйте статическое освещение и тени или хотя бы смешанный режим.
  • Более затратный вариант - использовать настоящие источники света (World, Omni, Projected), но без теней (например, для динамических объектов, излучающих свет). Тени существенно влияют на производительность в приложении VR, особенно если в настройках включен режим Penumbra.Shadows Settings(Settings -> Render -> Shadows). Так что лучше не включайте его, если он вам не нужен.

    Отключены тени для источника света и отключен режим Penumbra в настройках рендеринга
  • Используйте настоящие источники света с тенями, но настройте теневой режим как статический или смешанный . Например, если в вашей комнате есть статические объекты, которые не находятся под прямыми солнечными лучами, кажется разумным сделать их тени статичными.
  • Используйте настоящие источники света с тенями как есть. Это самый красивый и простой вариант, но имейте в виду, что вам придется пожертвовать чем-то другим, чтобы получить производительность. Например, вы можете уменьшить количество полигонов ваших объектов, так как это напрямую влияет на производительность теней.

Еще одна опция, которая может повысить производительность, - это рендеринг чередующихся источников света , который позволяет снизить нагрузку на рендеринг при сохранении высокого качества изображения. Вы можете включить режим рендеринга с чередованием для источников света и настроить его параметры в разделе Lights окна настроек (Window -> Settings -> Render -> Lights).

Обязательно используйте более тусклый свет и цвета, чем обычно. Сильное и яркое освещение и очень насыщенные цвета в VR могут вызвать болезнь VR.

Декали#

Если вы можете использовать полигональную геометрию вместо декалей, используйте ее! Декали в VR следует использовать только в том случае, если нет других вариантов, лучше их вообще не использовать!

Если вам необходимо использовать полупрозрачный аналог декали, рекомендуется использовать материал mesh_base с режимом Alpha Test и включенной опцией Jitter Transparency .

Прозрачность#

Прозрачность рендеринга может быть очень дорогостоящей, так как ее необходимо повторно оценивать для каждого кадра, чтобы убедиться, что ничего не изменилось. Это тот случай, когда стоимость сводит на нет все преимущества. Если вы используете режим Alpha Blend материала mesh_base , в группе Light Passes вы должны включать только те, которые требуются, так как это существенно влияет на производительность.

Облака и небо#

Избегайте использования объемных облаков (Cloud Layer объектов), если нет другого варианта, и это критическое требование для вашего проекта. Они очень дороги при высоком разрешении, так как имитируют реалистичное освещение и форму облаков в реальном времени. Если вам все же необходимо использовать объемные облака, рекомендуется установить параметр Downsampling Rendering на Quarter или Half. Также рекомендуется включить режим Interleaved Rendering, когда облака видны с земли или сверху (на значительном расстоянии), но имейте в виду, что быстрые и резкие движения могут привести к заметной зернистости облаков.

Когда объемные облака не требуются, лучше использовать один из следующих вариантов:

  • Просто установите HDRI-панораму в настройках Environment.

    Если в вашем проекте требуется изменить время дня, это можно сделать путем смешивания предустановок среды и, таким образом, плавной замены одной текстуры HDRI (для дневного неба) другой (для вечернего).

  • Используйте объект Sky с включенными опциями HDRI texture и 2D clouds.

Динамическая процедурная среда, хотя и удобна для производительности, не является полностью бесплатной. Вы можете отключить его с помощью Rendering -> Features -> Environment в главном меню и вместо этого использовать объект Sky с текстурой HDRI. Это на самом деле будет выглядеть лучше и даст вам немного больше производительности, однако в этом случае у вас не будет дымки на горизонте, поскольку это часть среды.

Ландшафт#

Рекомендуется использовать Landscape Terrain вместо Global Terrain, поскольку он отображается быстрее при более высоком разрешении.

Геометрия#

Помните, что в идеале ваше приложение VR должно поддерживать целевую частоту кадров на уровне 90 FPS, это означает, что рендеринг одного кадра должен занимать всего 11,1 миллисекунды. . Не так много, учитывая стереорежим и примерно 4x разрешение.

Все лица, которые никогда не будут видны в VR, должны быть удалены, чтобы избежать их рендеринга. Например, задняя часть шкафа, стоящая у стены. Однако в приложениях VR у пользователей гораздо больше свободы для осмотра. Итак, принимая решение об удалении определенного лица, вы должны дважды проверить, видно ли его или нет. Максимально упростите свои меши.

Примечание
Чтобы использовать ресурсы, созданные с помощью фотограмметрии, в ваших проектах VR, уменьшите количество полигонов, запеките освещение с помощью Voxel Probe и включите статические тени .

Мониторинг производительности#

Вы можете включить эмуляцию VR, чтобы отслеживать производительность вашего приложения прямо в редакторе. Просто выберите желаемый режим VR Emulation в настройках Screen (Settings -> Render -> Screen), например когда вы выбираете HTC Vive Pro, вы получаете точно такое же стереоизображение, которое визуализируется для этого HMD, со счетчиком FPS, отображающим фактическую производительность.

Если вам нужен более подробный анализ производительности, откройте инструмент Microprofile. Он покажет вам, где именно находятся узкие места, чтобы вы могли их исправить.

Операции рендеринга для каждого глаза в Microprofile
Последнее обновление: 25.10.2024
Build: ()