unity shader 中 mul(_Object2World,v.vertex).xyz 等于 UnityObjectToClipPos(v.vertex);吗?
1 回答

慕标5832272
TA贡献1966条经验 获得超4个赞
完全不是一个东西。
float3 worldPos = mul(_Object2World, v.vertex).xyz;
这是把顶点从模型空间(物体的本地坐标空间)转化到世界空间中,并取xyz分量;其中,_Object2World是转化矩阵。
UnityObjectToClipPos(v.vertex);
这个是把顶点从模型空间直接转化到裁剪空间,也就是进行了M-V-P三次转化,这个函数是unity重新封装过一次,其实它最初是mul(UNITY_MATRIX_MVP,v.vertex);其中,UNITY_MATRIX_MVP是转化矩阵。
既然可以直接转化为什么还要得到世界空间中的顶点位置?
这是因为很多时候我们需要在片元着色器中进行一些特殊的运算,这些运算需要世界空间中的顶点位置,例如,光照模拟,凹凸映射等。
另外建议你先充分熟悉GPU渲染流水线再学习Shader,不然很多问题你都可能觉得莫名其妙。
添加回答
举报
0/150
提交
取消