Создание погружающих, фотореалистичных VR-опытов с помощью High Definition Render Pipeline

Мы официально представляем виртуальную реальность в High Definition Render Pipeline (HDRP). В версии 2019.3.6f1 и позже с версией пакета 7.3.1 HDRP теперь проверен и может использоваться в VR.
Этот блог-пост подробно рассматривает использование HDRP в вашем VR-проекте. Чтобы узнать больше обо всех возможностях, которые предлагает HDRP, ознакомьтесь с этим блог-постом.
VR в HDRP разработан так, чтобы:
Все функции HDRP совместимы с VR.
HDRP полностью поддерживается новым Unity XR Plugin Framework.
Однопроходная (инстансинг) является стандартным и рекомендуемым решением для рендеринга в VR.
Используя HDRP для VR-проекта, вы можете воспользоваться всеми функциями рендеринга, чтобы создать впечатления, ограниченные только вашим воображением. С его современными техниками рендеринга HDRP может предоставить потрясающую, фотореалистичную графику на качестве, редко видимом ранее в средах виртуальной реальности.
Вот очень краткий обзор функций, доступных для ваших VR-проектов:
- Отложенный и прямой рендеринг
- Все типы света, тени, декали и объемные эффекты
- Эффекты в пространстве экрана
- Окклюзия окружающей среды (AO)
- Отражение в пространстве экрана (SSR)
- Подповерхностное рассеяние (SSS)
- Искажение и преломление
- Постобработка
- Цветокоррекция, сглаживание, глубина резкости и т.д.
- Все VFX из Visual Effect Graph
VR для HDRP в настоящее время доступен для следующих платформ и устройств:
- Oculus Rift и Rift S (Oculus XR Plugin, Windows 10, DirectX 11)
- Windows Mixed Reality (Windows XR Plugin, Windows 10, DirectX 11)
- PlayStationVR
OpenVR: Valve в настоящее время разрабатывает свой OpenVR Unity XR Plugin для 2019.3 и более поздних версий, и это будет доступно скоро.
Стерео-рендеринг техники
Нативная реализация VR будет обрабатывать все дважды – один раз для каждого глаза. Мы называем это решение мультипроходное рендеринг. HDRP поддерживает мультипроходное рендеринг, однако мы не рекомендуем этот метод, потому что ваше приложение будет использовать в два раза больше мощности ЦП для рендеринга, фактически удваивая количество ваших вызовов отрисовки. Кроме того, тени будут отрисовываться дважды и могут потреблять значительную часть вашего бюджета GPU.
Тем не менее, есть некоторые случаи, когда использование мультипрохода уместно:
- Если ваша система имеет небольшое количество памяти GPU, мультипроход использует меньше памяти для целей рендеринга, чем одиночный проход.
- Если по какой-то причине вам нужно отрисовывать значительно разные точки зрения для каждого глаза.
Более быстрое решение – использовать одиночный проход (инстансированный) рендеринг. В этом режиме каждый вызов отрисовки одновременно отрисовывается для обоих глаз. Это достигается с помощью использования массива текстур для целей рендеринга и инстансированных вызовов отрисовки. Кроме того, отсечение и тени обрабатываются только один раз за кадр.
HDRP был разработан так, чтобы все функции были совместимы с VR и оптимизированы для рендеринга в один проход.
Ключевым дизайнерским решением было использование текстурного массива для всех целевых рендеров (даже когда вы не создаете для VR). Это решение, в сочетании с макросами шейдеров, позволило нам создавать шейдеры, которые автоматически совместимы с VR, за исключением нескольких особых случаев (например, генерация списка света, косвенное затенение плиток, объемное освещение и рендеринг относительно камеры).
Обратите внимание, что рендеринг в один проход для текстур двойной ширины не поддерживается HDRP из-за дополнительной сложности и накладных расходов, необходимых для всех полноэкранных проходов и эффектов.
Чтобы начать работу с HDRP VR, ознакомьтесь с разделом Обзор VR в документации Unity. Чтобы помочь вам настроить HDRP с VR, мы также предоставляем Мастера HDRP, который проверяет ваши настройки и может помочь вам исправить любые настройки, которые Мастер определяет как неправильные.

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

Сглаживание
Снижение алиасинга крайне важно в VR для создания отличного пользовательского опыта и избежания разрушения погружения в виртуальную среду. HDRP предоставляет несколько решений для помощи в сглаживании.
Режимы сглаживания камеры описаны подробно в документации Unity. Эти параметры включают:
- Многообразное сглаживание (MSAA) поддерживается с прямым рендерингом. Вы можете сбалансировать качество и производительность, выбрав количество образцов (2x, 4x, 8x). Эта техника может достичь отличных результатов, но она также может быть дорогой.
- Временное сглаживание является, вероятно, лучшим решением для большинства приложений. Она очень эффективна в снижении алиасинга, но может размывать некоторые детали. Вы можете компенсировать это размытие с помощью встроенного управления фильтром резкости.
- Некоторые более дешевые решения включают быстрое приближенное сглаживание (FXAA) или морфологическое сглаживание подпикселей (SMAA).
- Также возможно комбинировать MSAA с TAA, FXAA или SMAA. Эта техника улучшает визуальное качество, но стоимость является кумулятивной.
- Также доступно дополнительное сглаживание теней для каждого материала с Геометрическим Спекулярным Сглаживанием, которое вы можете настраивать непосредственно на материалах. Его использование рекомендуется для гладких и плотных поверхностей.
Производительность
Рендеринг VR крайне требователен из-за более высокой частоты обновления и разрешения, необходимых для отображения для обоих глаз. Убедитесь, что вы отключили все функции, которые вам не нужны в настройках актива HDRP. Функции, такие как объемные, не подходят для VR-приложений, поскольку их производительность не соответствует требуемым 90 fps, несмотря на поддержку. Частый мониторинг и профилирование производительности помогут вам выявить любые узкие места в вашем проекте.
Обратите внимание, что по умолчанию точность объемных эффектов (срезы по оси z) в VR будет уменьшена вдвое, чтобы сохранить более приемлемую производительность GPU. В дополнение к объемному освещению, настоятельно рекомендуется отключить поддержку HDRP Area Light при выполнении проекта VR. В отличие от других функций, Area Light должен быть отключен через файлы конфигурации шейдеров.
В HDRP доступны два метода рендеринга, которые также влияют на производительность: Режим шейдера Lit Forward и Deferred. Чтобы узнать о различиях между этими двумя режимами, пожалуйста, смотрите документацию. Выбор правильного режима для VR зависит от требований проекта. Прямое рендеринг позволяет включить MSAA и уменьшить использование памяти, в то время как отложенное рендеринг более эффективно для проектов с большим количеством источников света, но также потребляет больше памяти.
Другим фактором, влияющим на производительность GPU, является разрешение буфера рендеринга. Это разрешение изначально устанавливается плагином XR-дисплея и зависит от используемой гарнитуры. Затем вы можете настроить разрешение в своем приложении или использовать функцию динамического разрешения, чтобы управлять разрешением в зависимости от контекста текущей сцены. Например, разрешение может быть адаптировано в зависимости от текущего времени кадра GPU.
Для получения дополнительных советов ознакомьтесь с этой лекцией HDRP VR на Unite 2019 в Копенгагене.
Чтобы поддерживать VR в HDRP, мы добавили набор макросов шейдеров, чтобы помочь обрабатывать экземплярный вид и использование массивов текстур для целевого рендеринга. Например, вы можете объявить текстуру в шейдере с помощью следующего кода:
TEXTURE2D_X(MyTexture);
На платформах, которые поддерживают массив текстур, этот макрос будет расширяться до TEXTURE2D_ARRAY. Если платформа не поддерживает массив текстур или если настройка в ShaderConfig.cs отключена, макрос будет расширяться до обычного TEXTURE2D. Аналогичные функции доступны для выборки текстур.
На стороне шейдера правильные константы вида (матрица вида, матрица проекции и т. д.) хранятся в массиве и индексируются на основе индекса глаза, который получается из instanceID примитивов. В случае вычислительных шейдеров размерность z dispatch используется для идентификации каждого глаза. Макрос UNITY_XR_ASSIGN_VIEW_INDEX обычно используется для назначения правильного индекса глаза.
Будущие версии HDRP VR будут сосредоточены на:
- Улучшении производительности с новыми аппаратными опциями, такими как переменная скорость затенения.
- Улучшение поддержки платформ с Vulkan и DX12
- Улучшение поддержки устройств
- Расширение однопроходной обработки для поддержки более чем двух видов
Вы можете начать использовать HDRP VR уже сегодня. Мы будем рады услышать ваши отзывы на форуме HDRP, пока продолжаем вносить улучшения.
