本系列文章系学习 唐福幸《Unity ShaderLab 新手宝典》的笔记,包含个人理解,如有错误欢迎批评指出
2.3 空间变换
顶点在不同的进行变换是流水线上不可或缺的步骤,而且许多特殊效果是在不同空间中进行计算的
模型空间
又称物体空间,本地空间:每个物体都有自己顶点数据,模型空间用于存储自身的顶点数据。
顶点数据包含顶点坐标,法线向量,UV(纹理坐标)的信息等
世界空间
如果要表示不同物体之间的相对位置,要以谁为标准呢,以任意一个都不太合适,所以引入一个公共空间:世界空间
把顶点坐标从模型空间转换成世界空间的过程称之为模型变换(需要使用模型变换矩阵)
例子:当物体进行光照计算时,需要将物体顶点和灯光变换到一个坐标空间中
- 将灯光坐标变换到每个物体的模型空间中分别计算
- 将灯光和所有物体统一变换到世界空间中整体进行计算
摄像机空间
又称观察空间,引擎在渲染的时候是以摄像机作为观察视角的,就像人的眼睛。因此就需要把世界空间中的物体转换成摄像机空间,转换过程称为视变换(需要使用视变换矩阵)
裁切空间
一个游戏场景可能非常大,但摄像机一次只能看到一小部分,所以为了提高性能,一般只把视野中的物体进行渲染显示,视野外的裁切掉。
所以所谓裁切实际上是在摄像机视锥体边界上对几何体进行切割。
视锥体:视锥体决定了摄像机可以看到的区域,有透视和正交两种
屏幕空间
到目前为止空间中的顶点坐标信息都还是3D数据,如果想要在屏幕上呈现最终的效果,需要把3D坐标进行投影变换转换成2D坐标,进而得到屏幕空间下的像素坐标。
虽然像素作为平面显示,不需要z分量,但仍然需要把z分量保存下来,以便后面进行深度测试阶段进行深度值比较和其它处理
多个坐标空间存在的意义
转换过程如下:
意义:描述物体的时候不容易产生歧义,有利于简化空间计算。