Unity Shader顶点变换总结

顶点变换的目的:

将顶点坐标坐标开始,到屏幕坐标为止的一系列转换。
image

UNITY_MATRIX_MVP矩阵的解释:

Unity内置的MVP矩阵,可以将模型上的顶点从他的本地坐标系,转换到裁剪空间中。

一个顶点转换到裁剪空间后,就表示它的
w 具有了特殊意义:可以用来进行透视除法,
透视除法( xyz 分别除以 w )后的 x、y 用来进行屏幕映射(也就是这个顶点应该出现在屏幕上的哪个位置),
z 用来表示这个顶点的深度(是否离观察者更近或被其他顶点挡住等)。

M(Model): 从本地坐标系 转换到 世界坐标系 的转换矩阵。

V(View): 从世界坐标系转换到相机坐标系 的转换矩阵。

转换矩阵总结如下 (矩阵左乘列向量):
image
image

注意: Unity的相机坐标系(观察者空间、相机空间)是比较特殊的坐标系,它使用右手坐标系,而它的前一步转换是在左手坐标系内完成的,因此顶点转换到相机坐标系后要对z进行一下处理(或使用相反的转换顺序)。

P(Projection): 投影矩阵,说是投影矩阵,其实并未进行投影计算,但是它却坚强的算出了齐次向量w的值,为后面的透视除法做准备,根据相机类型的不同,投影矩阵也会有些许差别。

正交相机(orthographic)中: w的值恒为1,所以做了透视除法也没变化;

透视相机(perspective)中: w的值 有意义,经过此投影矩阵计算的xyz向量需分别除以w进行透视除法即\(xyz / w\)

正交相机的矩阵总结如下(矩阵左乘列向量):

image

透视相机的矩阵如下(矩阵左乘列向量):

image

更多请参考

CSND

精美壁纸

posted @ 2021-08-16 10:25  镜子-眼泪  阅读(644)  评论(0)    收藏  举报