图形管道
渲染一幅带有基本光照的的单个图像,图像管道中数据流的概况大致如下:
- 建立场景:开始渲染之前,需要预先设定对整个场景有效的一些选项。比如,要建立摄像机位置(要选择进行渲染的出发点-视点,渲染的输出-视图)。
- 可见性检测:选好了摄像机,就要决定场景中哪些物体是可见的。可见性检测对实时渲染极为重要,因为我们不需要花时间去渲染那些我们看不到的东西。
- 设置物体级的渲染状态:如果有些物体是潜在可见,就要把它实际绘制出来。每个物体的渲染设置可能是不同的,在渲染该物体的任何片源之前,首先要设置上述选项,比如纹理映射。
- 几何体的生成与提交:向API提交几何体,通常提交的数据是种种形式的三角形,可能会应用LOD,或者渐进式生成几何体。
- 变换与光照:
- 背面剔除与裁剪:那些背对摄像机的三角形被去除(背面剔除),三角形在视锥外的部分也被剔除(裁剪)。
- 投影到屏幕空间:在3D裁剪空间中产生的多边形,被投影到输出窗口的2D屏幕空间里。
- 光栅化:当把裁剪过后的多边形转换到屏幕空间后,就到了光栅化阶段。光栅化是指计算应绘制三角形上哪些像素的过程,并为接下来的像素着色阶段提供合理的插值参数(如光照和纹理映射坐标)。
- 像素着色:最后,在管道的最后阶段,计算三角形的色彩,接着把这些颜色写至屏幕,这时可能需要alpha混合与z-缓冲。
坐标空间
- 摄像机空间:通过视变换,顶点从世界空间变换到摄像机空间,使用的坐标系一般为左手坐标系。
-
裁剪空间:从摄像机空间,定点又被变换到裁剪空间,又称标准视体空间,该空间对应的矩阵成为裁剪矩阵。裁剪矩阵将有用信息放入向量的w值中,主要用处有:为透视投影准备向量,由除以w来实现;规范化x,y,z,使它们可与w比较。
为透视投影做准备:4D齐次向量中由除以w而得到对应的3D向量,裁剪矩阵通过正确计算w的值,以得到正确的投影。设要投影到垂直于z轴且距离原点为d的平面。投影平面在视锥内的矩形部分将映射到屏幕,如果改变d。投影平面将前后移动,在一个真正的摄像机中,这样变化焦距将产生放大、缩小的效果。但对计算机内的投影平面不会如此,在真的摄像机中,增大焦距使像变大了,而底片位置不变,所以物体变大。在计算机中,增大焦距,像也会变大,但是“底片”(投影平面在视锥内的部分)也变大了,因为他们变化的比例一致,所以渲染出的图像不变。因此,在计算机图形学中,缩放完全由视锥的形状控制,d的值并不重要。所以假设d=1。
裁剪矩阵.PNG
-
屏幕空间:一旦视锥完成了几何体裁剪,即可向屏幕空间投影,从而对应于真正的屏幕像素。因为屏幕空间是2D的,所以要进行一次3D到2D的映射以得到正确的2D坐标。
2D-3D.PNG
输出窗口.PNG
光照与雾化
-
标准光照方程
颜色值=镜面反射分量+散射分量+环境分量
其中的颜色值是打开光照情况下计算的,与关闭光照情况下计算的结果不同计算机图形学中的“光照”是指取关闭光照情况下的纹理颜色值进行计算,一般情况下得到的结果比原纹理颜色暗。
镜面反射分量是指由光源直接经物体表面反射入眼睛的光线。
漫反射分量反应的是散开的随机方向上的反射,由物体的粗糙程度决定。
环境光分量取决于材质和全局环境光。好比在现实世界中,光线经常在经历多于一次的反射后进入眼睛,如在黑暗的房间打开冰箱,整个房间都会变得亮一些。