Unity 是一款跨平台的 3D 引擎,有着强大的渲染功能,并主要用于游戏开发。
谈到 Unity 的渲染功能,我们不得不提及到着色器(Shader)——3D 游戏引擎中最重要的一个因素,它在游戏效果以及画面显示方面起到了决定性的作用。Shader 编程也属于计算机图形学中一个重要的部分。
接下来让我们从可编程渲染管线来了解 Shader 编程。
渲染管线模型
3D 游戏以及 3D 模型通过渲染管线来渲染到 2D 的屏幕上。渲染管线的流程是在 GPU 中进行的,它主要占有计算机的显存部分。渲染管线在这个过程中进行了顶点处理、面处理、光栅化、像素处理。
1)顶点处理
大多数接触过 3D 图形的人都知道3D 模型是通过众多点构成的面而展现出来的。
顶点处理,是通过一系列坐标系的变换,让各个顶点通过一定的规律在摄像机前位移,最终在屏幕上对应这些顶点的过程。
首先,物体的各个顶点从自身坐标系,通过世界变换矩阵处理转换到世界坐标系,再通过取景变换矩阵变换到观察者坐标系,最后通过投影变换,将顶点转移到屏幕坐标系。
有一点大家会经常忘记,在观察者坐标系转换到投影坐标系的过程中,GPU(图形处理单元)还对材质属性和光照属性进行了处理。
2)面处理
三点成一面。面处理有三个部分:面的组装、面的截取、面的剔除。
面的组装:模型中的三个点会组成一个三角形的面(非任意点,因为每个点都有自己的编号)。这些面,面面相接,组成了我们能看到的模型。
面的截