Shader中用到的各种空间概念

Shader中用到的各种空间概念

模型空间

每一个物体都有一个以它自己的Pivot为原点的欧几里德三维坐标空间

在Unity的脚本中,可以通过tranform.worldToLocalMatrix这个矩阵的MultiplyPoint()或者MultiplyVector()方法,把世界坐标表达的矢量转换为此物体的模型空间表达的矢量。在Shader中,可以通过左乘
_World2Object 这个矩阵来完成此项任务。

世界坐标空间

统一表达
在脚本中,物体的Transform组件的localToWorldMatrix矩阵的MulitplyPoint 和 MultiplyVector 方法能把此物体自身以模型空间坐标表达的矢量变换到以世界坐标表达的矢量。
在Shader中,对应的矩阵是 _Object2World

视空间

渲染的需要:视空间
我们可以通过相机Camera组件的worldToCameraMatrix来把一个世界坐标的向量重新表示为一个以相机为中心的空间的表达形式。如果我们想把一个相机空间的向量重新表示到世界坐标系,可以用cameraToWorldMatrix来实现。在Shader中,有一个矩阵UNITY_MATRIX_MV可以把向量一次性从模型空间转换到视空间

视椎体

只有处于视椎体内的物体才会被渲染,而其他部分都将处于视线之外,从而得到我们在屏幕上能看到的东西。(Culling)

我们可以把一系列的转换组合到一起;脚本和Shader中的投影矩阵

 在脚本中代表这个投影的操作是Camera组件的projectMatrix,在Shader中则是UNITY_MATRIX_MVP。 通过这个矩阵,可以直接把物体上的一个点投射到屏幕上,这也是正常显示一个物体的Shader所需完成的工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值