在 Unity 渲染管线中,模型变换是将 3D 模型从创建时的本地空间转换到最终屏幕空间的一系列数学操作。理解这些变换原理对于开发复杂的 Shader 效果至关重要。
一、坐标空间概述
在 Unity 渲染流程中,顶点需要经过多个坐标空间的转换:
1. 模型空间 (Model Space)
在 Unity Shader 中,模型空间(Model Space) 也称为对象空间(Object Space) 或局部空间(Local Space),是每个 3D 模型独立的坐标系。理解模型空间是进行顶点变换、法线计算和纹理映射的基础。
模型空间是模型创建时的原始坐标系,每个模型都有自己独立的模型空间,与其他模型无关。
比如立方体的顶点坐标通常在 [-0.5, 0.5] 范围内。
2. 世界空间 (World Space)
在 Unity 渲染管线中,世界空间(World Space) 是一个全局统一的坐标系,用于描述场景中所有物体的绝对位置和方向。理解世界空间是实现复杂光照、阴影和全局效果的基础。
3.视图空间 (View Space)
在 Unity 渲染管线中,视图空间(View Space) 也称为相机空间(Camera Space),是一个以相机为原点的坐标系。它在顶点变换流程中处于世界空间之后、裁剪空间之前,是实现光照计算和视锥体裁剪的关键环节。
将世界空间中的物体转换到以相机为中心的坐标系,便于进行视锥体裁剪和投影变换。简化光照计算,因为光源方向和视线方向在视图空间中更易于处理。
4.裁剪空间 (Clip Space)
在 Unity 渲染管线中,裁剪空间(Clip Space) 是顶点从模型空间到屏幕空间旅程中的关键阶段。它是一个四维齐次坐标系,主要用于视锥体裁剪(Frustum Culling) 和投影变换(Projection),是连接视图空间和屏幕空间的桥梁。
5.标准化设备坐标 (NDC Space)
裁剪空间经过透视除法后的坐标,范围在 [-1, 1] 之间。
6.屏幕空间 (Screen Space)
最终显示在屏幕上的 2D 坐标,范围由视口决定。
二、坐标空间之间的转换
模型空间 (Model Space)
↓
[模型矩阵: UNIT