猿问
为什么分两次计算,目的是什么?
unity shader 中 mul(_Object2World,v.vertex).xyz 等于 UnityObjectToClipPos(v.vertex);吗?
慕娘9325324
浏览 166
回答 1
1回答
慕标5832272
完全不是一个东西。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
0
0
随时随地看视频
慕课网APP
相关分类
Java
数据结构
我要回答