一、Gobal VS Local Lighting
局部光照(Local illumation) 简单说就是只考虑光源到模型表面的照射效果。
特点:速度快,真实度欠佳。
全局光照(Global illumination) 简单的说就是考虑到环境中所有表面和光源相互作用的照射效果。
特点:速度慢,真实度高。
相关课件截图:
二、Ray Tracing
A.简介:
采用Ray Tracing和Radiosity两种技术来计算全局光照
Ray Tracing用于计算镜面反射,灯光透过玻璃的效果和阴影,还有模拟精确的直接照射光产生的阴影。
Radiosity计算每个表面的元素发射的光照量进行计算,并保存到网格当中。
光线跟踪是一种真实地显示物体的方法。
光线跟踪方法沿着到达视点的光线的反方向跟踪,经过屏幕上每一个象素,找出与视线相交的物体表面点Po,并继续跟踪,找出影响Po点光强的所有光源,
从而算出P0点上精确的光线强度,在材质编辑中经常用来表现镜面效果。光线跟踪或称光迹追踪是计算机图形学的核心算法之一。
B.原理:
1)相机的胶片被分成离散的网格(即像素点),我们的目标是确定每一个像素点的颜色值。
2)对于每一个像素,从相机位置追踪一条光线,指向该像素点。
3)对于这束光线,判断其是否和场景中的物体相交。如果相交,则继续步骤4;否则,将背景色填充到当前像素中去,回到步骤2,继续处理下一个像素。
4)如果光线和物体相交,计算物体表面交点的颜色值。该点的颜色值即为该像素的颜色值。
a、首先检查每个光源在该交点的贡献值。追踪一条新光线去光源,用来确定交点是被全部照亮、部分照亮还是没有被照亮,同时确定了阴影。
b、如果物体表面具有反射性质,计算初始光线的反射光线,然后追踪这条反射光线,转到步骤3。
c、如果物体表面具有折射性质,计算初始光线的折射光线,然后追踪这条折射光线,转到步骤3。
d、最终,根据表面性质(反射率、折射率),和不同类型光线计算得出的颜色值,来确定交点的颜色值,即当前像素点的颜色值。
5)回到步骤2,继续下一个像素点。重复这个过程直到像素点都遍历完成。
C.光线跟踪的优点:
光线跟踪的流行来源于它比其它渲染方法如扫描线渲染或者光线投射更加能够现实地模拟光线,像反射和阴影这样一些对于其它的算法来说都很难实现的效果,
却是光线跟踪算法的一种自然结果。光线跟踪易于实现并且视觉效果很好。实际上可能对于简单的物体如多边形曲面与简单的点源比较简单,原则上,可以产生全球照明效果,阴影和多重反射。
D.光线跟踪的缺点:
光线跟踪的一个最大的缺点就是性能。光线跟踪是缓慢的,不适合交互应用
相关课件截图:
三、Synthetic Camera Model
合成照相机模式:观察者,物体,光源。
相关课件截图:
四、Practical Approach
按照应用加工的顺序依次访问物体,可以只考虑局部照明
管道结构:
所有步骤可以在硬件的显卡中实现。
1、Vertex Processing:
许多工作在管道转换对象表示从一个坐标系到另一个坐标系:
1)物体坐标
2)相机(眼)坐标
3)屏幕坐标
每一个坐标变换相当于一个矩阵变换。顶点处理器还计算顶点颜色。
2、Clipping&Primitive Assembly
Clipping:就像一个真正的相机不能“看到”整个世界,虚拟摄像头所能看到的只是世界的一部分或对象空间。
Primitive Assembly:顶点必须收集到的几何对象前剪切和光栅化可以发生。线段、多边形、曲线和曲面。
3、Rasterization
如果一个对象没有被裁剪,适当的像素在帧缓冲区必须被指定颜色,光栅产生每个对象的一组片段。
碎片是“潜在的像素”:1.在帧缓冲区中有坐标。2.有颜色和深度的属性。
顶点属性在光栅化过程中插入。
4.Fragment Processing
分段处理:片断被处理去确定帧缓冲中相应像素的颜色。颜色可通过纹理映射或插值顶点的颜色来确定。
颜色可能会被其他更接近于相机的片段阻塞。
相关课件截图:
五、GL_TRIANGLE_STRIP vs GL_TRIANGLE_FAN
一般情况下有三种绘制一系列三角形的方式,
1).GL_TRIANGLES
以每三个顶点绘制一个三角形。
第一个三角形使用顶点v0,v1,v2,第二个使用v3,v4,v5,以此类推。
如果顶点的个数n不是3的倍数,那么最后的1个或者2个顶点会被忽略。
2)GL_TRIANGLE_STRIP
稍微有点复杂,其规律是:
构建当前三角形的顶点的连接顺序依赖于要和前面已经出现过的2个顶点组成三角形的当前顶点的序号的奇偶性(如果从0开始):
如果当前顶点是奇数:
组成三角形的顶点排列顺序:T = [n-1 n-2 n].
如果当前顶点是偶数:
组成三角形的顶点排列顺序:T = [n-2 n-1 n].
以上图为例,第一个三角形,顶点v2序号是2,是偶数,则顶点排列顺序是v0,v1,v2。第二个三角形,顶点v3序号是3,是奇数,则顶点排列顺序是v2,v1,v3,
第三个三角形,顶点v4序号是4,是偶数,则顶点排列顺序是v2,v3,v4,以此类推。
这个顺序是为了保证所有的三角形都是按照相同的方向绘制的,使这个三角形串能够正确形成表面的一部分。
对于某些操作,维持方向是很重要的,比如剔除。
注意:顶点个数n至少要大于3,否则不能绘制任何三角形。
3)GL_TRIANGLE_FAN
与GL_TRIANGLE_STRIP类似,不过它的三角形的顶点排列顺序是T = [0 n-1 n].各三角形形成一个扇形序列。
举个栗子:
顶点v1,v2,v3,v4
GL_TRIANGLE_FAN
先v1,v2,v3再v1,v3,v4这样可以形成一个扇形状得图形。
GL_TRIANGLE_STRIP
先v1, v2, v3, 再 v3, v2, v4 并且确定这些顶点可以形成某个多边形。
效率总结:用GL_TRIANGLE_STRIP的效率是远远高于GL_TRIANGLES。
相关课件截图:
<