全局光照及相关算法的汇总介绍.ppt
I-局部光照 Phong光照模型 II-全局光照 路径跟踪家族:光线跟踪,双向光线跟踪,分布式光线跟踪,光 柱跟踪,光束跟踪,光子贴图 辐射度 MLT,基于图像的光照IBL 环境光遮蔽,计算机图形学中的光照,1、全局光照、全局光照算法2、BRDF:Bidirectional Reflectance Distribution Function3、蒙特卡洛方法4、马尔科夫链模型,几个相关术语,路径的定义:终端点:E:眼睛 L:光源 反/透射分类:D:完全漫反射 S:完全镜面反射 G:介于漫反射和镜面反射不同算法对应的EL表达式 光线投射:E(D|G)L 光线跟踪:ES*(DjG)L 路径跟踪:E(D|G|S)+(D|G)L 辐射度:ED*L,路径跟踪家族:,光线多次反射反射光线,折射光线,阴影光线从屏幕的每个像素投射光线进行跟踪,光线跟踪,算法特点:由于是对光照物理模型的忠实模拟,很多光照效果使用该算法很自然就能实现 各个像素之间的计算相互独立,可以使用并行方式来实现 由于每条光线都精确计算,因此生成的图像都是边缘锐利的,适用于物体均比较光泽的场景和比较大的光源,光线跟踪,对于单向(正向和反向)光线跟踪的不足做出的改进算法特点:从光源和屏幕同时发射光线,根据某种决策方式来决定连接相向的光线很好解决了对于一些情况比较特殊的场景的光照模拟,如小光源,大面积镜面,都可以很好地避免噪声,双向光线跟踪,双向光线跟踪双向光线连接决策,双向光线跟踪处理不同特点的场景,双向光线跟踪,大光源和曲面反射,小光源和大面积镜面,分布式光线跟踪,算法简介:该算法是基于传统光线跟踪的一种改进算法,为了弥补原始光线跟踪算法光线计算过于精确造成锐化光影,而无法支持半影、运动模糊、景深、半透明效果和模糊反射效果等的缺陷。算法思想:不同于传统光线跟踪只从一个点发出一条光线,该算法是对光线分布在发射的主轴线附近再分布些光线,根据不同的分布策略,就可以选择性地实现光照中的一些模糊现象;对不同的时刻进行光线跟踪则实现了运动模糊;从透镜表面发出光线进行跟踪则可以实现景深效果。,分布式光线跟踪,算法介绍:光线跟踪的衍生算法,与光线跟踪从每个像素发出射线不同,这2种算法是从整个屏幕发出一束横截面为矩形(或圆形)的光柱,该光柱与场景中的表面相交,未相交的光柱部分则分出来成为新的一群相对较细的光柱,光柱的投射计算和光线跟踪采用的是一样的模型。,光柱跟踪和光束跟踪,算法特点:相比较于光线跟踪算法,该算法使用的光柱其实就是高密度的射线集,可以自然地回避掉过多采样和过低采样的问题,因此可以得到非常逼真的效果,可想而知带来了计算上的极大开销,在图形学的实时应用中难以普及。但由于该算法的精确性,其在声学和电磁学的模拟计算中则大放异彩。,光柱跟踪和光束跟踪,光柱跟踪效果图,算法简介:与蒙特卡洛系列的跟踪算法完全不同出发点的一种算法,最早是1950年应用于工程领域的热传导计算,1984年被康奈尔大学的研究人员修改以用于图形学中的光照模拟。辐射度由于其算法特点被许多游戏引擎采用。算法思想:前提:假设场景中所有表面都具有良好的漫反射特性1、把场景中的表面都分割成更小的单位,称为小块;2、定义每对小块之间的可视因子,该因子由小块之间的位置和角度关系决定;3、借助于计算好的可视因子,对辐射度进行迭代计算,迭代的次数正好对应模拟光线反弹的次数,由辐射度计算结果来产生颜色和亮度。,辐射度方法,算法特点:1、对于暖色调的场景,辐射度算法由于特别适用于漫反射模型,因此能产生很逼真的效果2、辐射度算法是不依赖于视平面的位置和角度的,因此计算一次可视因子就可以了3、辐射度是以逐次迭代的方式来细化场景的,因此当迭代到可以接受的效果时,就可以结束迭代,辐射度方法,迭代次数对应光线反弹的次数,小块粒度过大会导致锯齿现象,辐射度计算公式:,辐射度方法,辐射度方法迭代计算过程:,辐射度方法,可以选择发光量比较多的表面开始迭代,辐射度方法,直接光照和辐射度方法的对照,针对路径跟踪方法提出的改进方法,时、空上均优化在路径采样的过程中,自适应地生成后续的更多的采样路径,采用的策略就是对贡献度比较大的路径进行路径变异来生成新的采样路径。,MLT,双向路径跟踪40条路径/像素,MLT,MLT方法平均250条变异路径/像素,MLT不再是机械地从每个像素投射出同样数量的路径,而是根据接受的路径数量的情况来选择各个像素需要生成的采样路径的数量,而且新的采样路径是从原有路径转移过来的,生成速度也快得多;,MLT,MLT方法平均100变异路径/像素可以实现刻蚀效果,MLT更奇妙的地方在于,这样的变异路径可以更智能的方式去生成。,双向路径跟踪210路径/像素,光子贴图,针对蒙特卡洛光线跟踪提出的改进算法目的:产生优化的取样方向减少阴影光线数量渲染刻蚀效果(例如水面的斑驳亮光)减少反射光线数量,光子贴图,实现步骤一:产生2张光子贴图-刻蚀光子贴图和全局光贴图刻蚀光子贴图:使用高密度的光子簇,只向高光泽的物体表面进行碰撞计算,首次碰撞就将光子记录下来全局光子贴图:使用相对较低密度的光子簇,对所有物体表面进行碰撞计算,并根据碰撞情况对光子分类,首次碰撞记录为直接光子,多次穿透碰撞记录为阴影光子,反射碰撞记录为间接光子注:碰撞后光子的受影响情况可采用类似俄罗斯转盘方式来计算 光子的存储可采用平衡K-D树结构将2张贴图存储,用于下个步骤,光子贴图,实现步骤二:使用蒙特卡洛光线跟踪法来进行光照模拟,在模拟计算过程中借助于光子贴图来加快模拟。计算遵循的原则:对于观察较敏感的表面采用精确的计算公式,对于不敏感的表面采用近似的简化公式,基于图像的光照(IBL),原理图,基于图像的光照IBL,场景中:药瓶表面的光泽可以看出周围环境显微镜模型受全局光照显得格外逼真注意:除了IBL之外还使用了光线跟踪(RT),阴影的效果就是由光线跟踪产生的,基于图像的光照IBL,IBL实现步骤一:获取一个用来投射到包围环境(一般是包围球)中的全角照片什么是全角照片?通俗的说,在某个位置拍摄的反映其四周环境的照片如何获取全角照片?方法一:将一个镜面反射性质的球放在场景中,然后拿个照相机给这个球拍照方法二:使用广角拍取空间中六个方向的照片,然后拼接在一起(可以借助RealVizs Stitcher)方法三:使用网上已有分享的现成的全角照片,链接,基于图像的光照IBL,IBL实现步骤二:定义一个包围要渲染的场景的包围体(球体),然后将全角照片作为贴图映射在该球体的内表面上(就像3D游戏中的Skybox一样),包围体贴图举例,基于图像的光照IBL,IBL实现步骤三:将我们要绘制的物体放置到我们的”世界”(包围体)里,基于图像的光照IBL,IBL实现步骤四:在包围体加入光源进行光照模拟,在这过程中,包围体的内表面自然而然成为了参与计算的反射面,可以使用光线跟踪进行光照模拟,算法简介:每个点处的计算涉及到场景中的其他几何对象,是一种对全局光照模型的近似算法。由于在动画制作领域被广泛使用,该算法的发明者因此获得了2010年奥斯卡科技奖。算法思想:该算法认为表面上的点,如果是处在比较角落的位置(例如一个表面上陷进去的点),它得到的光线就会比较少,也就是它会比较暗,基于这样的思想,我们采用一种方法来计算每个顶点被遮蔽的情况,然后生成一个独立的遮蔽灰度图,再将该遮蔽图与渲染后的场景图进行合成,就可以得到类似于全局光照的效果。,环境光遮蔽,环境光遮蔽,与遮蔽图进行合成,环境光遮蔽,点遮蔽情况的计算模型,点遮蔽度公式:,环境光遮蔽,局部光照,环境光遮蔽,全局光照,环境光遮蔽,环境光遮蔽的特点:对于静态场景和静态的逻辑整体来说,遮蔽图一次计算,多次使用,可以以极小的开销得到近似于全局光照的效果。环境光遮蔽的一些其他算法改进:屏幕空间环境光遮蔽(SSAO):在像素阶段进行遮蔽度计算,遮蔽度依赖于像素的深度信息来生成,优点是实时速度快,缺点就是误差较大。另外还有高解析度环境光遮蔽(HDAO),水平环境光遮蔽(HBAO),这些算法的算法思想和AO都是一样的,区别就在于采用不同的方式对点的遮蔽度进行计算,目的都为了得到更好的光影效果。,Henrik Wann Jensen,University of California,San Diego关于全局光照的一系列论文:http:/graphics.stanford.edu/henrik/papers/百度文库关于IBL的一种实现的文章:Radiance,一个实现全局光照的程序包,可用于实验:画质/驱动引争议!环境光遮蔽解析评测,讲解的AO及其发展情况,参考资料,