版本:Unity 6 (6000.0)
语言:English
屏幕配置
帧缓冲区方向

Android 的单通道立体渲染

Unity 支持适用于支持多视图的 Android 设备的单通道立体渲染。多视图包含GL_OVR_multiview2GL_OVR_multiview_multisampled_render_to_texture OpenGL ES 扩展。这些扩展需要着色器在 GPU 上运行的程序。 更多信息
参见词汇表
来使用一个由两片组成、每只眼睛一片的 2D 纹理数组。

着色器代码要求

要使用自定义着色器的单通道立体渲染,您可能需要包含其他着色器代码。如果您的自定义着色器是

  • 表面着色器为内置渲染管道编写着色器的一种简化方式。 更多信息
    参见词汇表
    并且没有自定义顶点处理,则无需包含其他代码。
  • 固定功能管道着色器。

注意:这些着色器更改与多通道立体渲染兼容。

修改您的着色器

如果您想使用内置着色器变量 unity_StereoEyeIndex 来了解 GPU 正在渲染哪只眼睛,则必须在您拥有的任何着色器阶段输出结构中声明 UNITY_VERTEX_OUTPUT_STEREO。例如

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

要初始化输出数据,请在顶点着色器在渲染 3D 模型时,在模型的每个顶点上运行的程序。 更多信息
参见词汇表
函数中使用 UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO()。例如

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 和景深。 更多信息 后期处理, 后期处理, 后处理
参见词汇表
着色器以处理眼睛纹理成为 2D 纹理数组。为了帮助解决这个问题,Unity 包含了 UNITY_DECLARE_SCREENSPACE_TEXTURE() 宏。为了使纹理在多通道和单通道模式下都能工作,请将每个纹理包装在此宏中。此外,当您对纹理进行采样时,请使用 UNITY_SAMPLE_SCREENSPACE_TEXTURE() 宏。

此宏要求您在单通道模式下预先调用 UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX()。Unity 还包含用于深度纹理和屏幕空间阴影贴图的类似宏。您可以在 HLSLSupport.cginc 底部查看完整列表。

屏幕配置
帧缓冲区方向