Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Однопроходный стереорендеринг для Android

Unity поддерживает однопроходный стереорендеринг для устройств Android, поддерживающих мультипросмотр. Multiview состоит из GL_OVR_multiview2 и GL_OVR_multiview_multisampled_render_to_texture расширения OpenGL ES. Эти расширения требуют, чтобы шейдеры использовали массив 2D-текстур, состоящий из двух срезов, по одному на каждый глаз. Это отличается от реализации однопроходного стереорендеринга Unity для ПК/PS4, в котором используется 2D-текстура двойной ширины. Это означает, что шейдерПрограмма, работающая на графическом процессоре. Подробнее
См. в Словарь
, модификации для поддержки однопроходного стереорендеринга на Android отличаются от другие платформы.

Требования к коду шейдера

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

  • Шейдеры поверхностиУпрощенный способ написания шейдеров для встроенного конвейера рендеринга. Подробнее
    См. в Словарь
    , в котором нет пользовательской обработки вершин.
  • Конвейерные шейдеры с фиксированными функциями.

Примечание. Эти изменения шейдера совместимы с многопроходным стереорендерингом.

Измените свои шейдеры

Если вы хотите использовать встроенную переменную шейдера unity_StereoEyeIndex, чтобы узнать, для какого глаза выполняется рендеринг GPU, вы должны объявить UNITY_VERTEX_OUTPUT_STEREO во всех имеющихся у вас выходных структурах этапа шейдера. Например:

struct v2f { float2 uv : TEXCOOR0; float4 vertex : SV_POSITION; UNITY_VERTEX_OUTPUT_STEREO };

Для инициализации выходных данных используйте UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO() в вершинном шейдереПрограмма, которая запускается на каждой вершине 3D-модели во время рендеринга модели. Подробнее
См. в функции Словарь
. Например:

v2f vert (appdata v) { v2f o; UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; }

Чтобы инициализировать unity_StereoEyeIndex на последующих этапах, добавьте UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX() в начале. Например:

fixed4 frag (v2f i) : SV_Target { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); // sample the texture fixed4 col = tex2D(_MainTex, i.uv); // apply fog UNITY_APPLY_FOG(i.fogCoord, col); return col; }

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

Совет. Чтобы вычислить конечное положение объекта, рекомендуется использовать UnityObjectToClipPos(IN.vertex) вместо mul(UNITY_MATRIX_MVP, IN.vertex).

Шейдеры постобработки

Необходимо обновить постобработкупроцесс, улучшающий внешний вид продукта за счет применения фильтров и эффектов до того, как изображение появится на экране. Вы можете использовать эффекты постобработки для имитации физических свойств камеры и пленки, например Bloom и Depth of Field. Дополнительная информация
См. в шейдерах Словарь
, чтобы разобраться с текстурами глаз, являющимися 2D-текстурами. множество. Чтобы помочь в этом, Unity включает макрос UNITY_DECLARE_SCREENSPACE_TEXTURE(). Чтобы текстуры работали как в многопроходном, так и в однопроходном режимах, оберните каждую текстуру в этот макрос. Кроме того, при сэмплировании текстуры используйте макрос UNITY_SAMPLE_SCREENSPACE_TEXTURE().

Этот макрос требует, чтобы вы вызывали UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX() заранее в однопроходном режиме. Unity также включает аналогичные макросы для текстур глубины и карт теней экранного пространства. Вы можете увидеть полный список в нижней части HLSLSupport.cginc.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3