包含此页的版本:
不含此页的版本:
Unity 支持支持多视图的 Android 设备的单通道立体渲染。多视图由 GL_OVR_multiview2 和 GL_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
};
要初始化输出数据,请使用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()macro 将眼睛指数转移到后续阶段。
提示: 要计算对象的最终位置,最佳做法是使用UnityObjectToClipPos(IN.vertex)而不是mul(UNITY_MATRIX_MVP, IN.vertex).
您必须更新后处理在图像出现在屏幕上之前通过应用滤镜和效果来改善产品视觉效果的过程。你可以使用后期处理效果来模拟物理摄像机和胶片属性,例如泛光和景深。更多信息 后处理, 后处理, 后处理
在术语表中查看着色器来处理眼睛纹理是 2D 纹理数组。为了帮助解决这个问题,Unity 包含了UNITY_DECLARE_SCREENSPACE_TEXTURE()宏。要使纹理在多通道和单通道模式下都工作,请将每个纹理包装在此宏中。此外,在对纹理进行采样时,请使用UNITY_SAMPLE_SCREENSPACE_TEXTURE()宏。
此宏要求调用UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX()在单程模式下预先。Unity 还包括用于深度纹理和屏幕空间阴影贴图的类似宏。您可以在底部看到完整列表HLSLSupport.cginc.