为了账号安全,请及时绑定邮箱和手机立即绑定

为什么分两次计算,目的是什么?

为什么分两次计算,目的是什么?

慕娘9325324 2022-08-05 10:06:56
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,不然很多问题你都可能觉得莫名其妙。

查看完整回答
反对 回复 2022-08-08
  • 1 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号