顶点着色器-经过的空间变换

发表于2017-10-30
评论0 3.7k浏览
顶点着色器:

基本功能:就是把模型的顶点坐标从模型空间转换到齐次剪裁空间中。渲染过程可以理解成把一个一个顶点记过层层处理最终转化到屏幕上的过程。

模型空间(Model Space):

模型空间也叫作 Object Space和Local Space(局部坐标),也就是模型在移动旋转的时候,模型空间也会跟着移动旋转。

世界空间(World Space):

Unity中,世界空间使用的是左手坐标系,如果一个模型没有父节点,Transform属性就是模型在世界空间中的位置

顶点变换-模型变换(Model Transform):

顶点变换的第一步就是将顶点坐标从模型空间变换到世界空间中,这个变换也叫作模型变换(Model Transform) 
比如求一个模型的手指在世界空间中的位置(已知模型中心在世界空间中位置,手指在模型空间中位置,通过矩阵可以求出手指在世界空间中位置),可以通过矩阵变换 P(world) = M(modsl)P(modsl)

观察坐标(View Space)

观察空间也叫作摄像机空间(Camera Space)。观察空间可以认为是模型空间的一个特例-在所有模型中有一个特殊的模型即摄像机为中心的空间

剪裁空间(Clip Space)(投影矩阵-projection matrix)

通过视锥体进行剪裁,视锥体设计两种投影类型-一种是正交投影(orthographic projection),一种是透视投影(perspective projection),透视投影是一个金字塔形,正交投影是一个长方体。

屏幕空间(Screen Space)

观察空间(三维)到屏幕空间(二维)的转换要经过投影操作(projection),进过投影变换后,我们可以进行剪裁操作,当完成所有的剪裁操作之后,就把视锥体投影到屏幕空间中。进过这个变换我们得到真正的像素位置。而不是虚拟的三维坐标。 
在Unity中,从剪裁空间到屏幕空间的转换是由Unity帮我们完成的,我们的顶点着色器只需要把顶点转换到剪裁空间中,然后unity自动转换到屏幕空间。

总结:模型到屏幕经过的转换如下

  • 模型空间–>世界空间–>观察空间–>剪裁空间–>屏幕空间
  • 其中:模型空间–>世界空间–>观察空间–>剪裁空间 分别进过 MVP矩阵进行变换
  • 剪裁空间–>屏幕空间是由Unity自动完成的。
  • 除观察坐标用的是右手坐标系,其他都用左手坐标系
  • 在顶点着色器中,通常串联成一个矩阵,即MVP矩阵,用于将顶点从模型空间转换到剪裁空间中。 
    最后,在顶点着色器中,通常串联成一个矩阵,即MVP矩阵,用于将顶点从模型空间转换到剪裁空间中。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引