untty shaderlab 关于unity_Vpos_type的实例
时间: 2023-11-28 11:06:20 浏览: 187
Unity的内置着色器中经常使用UNITY_VPOS_TYPE枚举类型,它表示当前顶点的坐标空间类型。以下是一个使用UNITY_VPOS_TYPE的实例:
```hlsl
v2f vert(appdata_base v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
#if defined(UNITY_PASS_FORWARDBASE) || defined(UNITY_PASS_FORWARDADD)
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.worldPos = mul(unity_ObjectToWorld, v.vertex);
o.worldNormal = UnityObjectToWorldNormal(v.normal);
o.screenPos = ComputeScreenPos(o.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
#if defined(_ALPHATEST_ON)
o.alpha = v.color.a;
#endif
#elif defined(UNITY_PASS_SHADOWCASTER)
o.worldPos = mul(unity_ObjectToWorld, v.vertex);
#endif
return o;
}
```
在这个顶点着色器函数中,我们可以看到在#if defined(UNITY_PASS_FORWARDBASE) || defined(UNITY_PASS_FORWARDADD)条件下,我们通过UNITY_SETUP_INSTANCE_ID(v)和UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o)来设置实例ID和立体视图,然后根据UNITY_VPOS_TYPE的不同,我们可以对o.worldPos和o.vertex进行不同的计算。在这个例子中,我们通过UnityObjectToClipPos(v.vertex)来将顶点坐标从对象空间转换到裁剪空间,并将结果保存在o.vertex中。
需要注意的是,UNITY_VPOS_TYPE枚举类型的取值是根据渲染管线的不同而不同的。在顶点着色器中,我们需要根据当前的渲染管线类型来确定UNITY_VPOS_TYPE的取值,以正确地计算顶点的位置和法线等信息。
阅读全文