实时渲染学习(七)全局光照:光线追踪、路径追踪与GI技术进化编年史

参考博文【《Real-Time Rendering 3rd》 提炼总结】(八) 第九章 · 全局光照:光线追踪、路径追踪与GI技术进化编年史

前言

本章知识概览:

  • 全局光照的基本概念
  • 全局光照的算法主要流派
  • 全局光照技术进化编年史
  • 光线追踪 Ray Tracing
  • 路径追踪 Path Tracing
  • 光线追踪、路径追踪、光线投射的区别
  • 环境光遮蔽 Ambient Occlusion

一、全局光照

全局光照(Global Illumination,简称 GI), 或被称为间接光照(Indirect Illumination)。使用全局光照能够有效地增强场景的真实感。
全 局 光 照 = 直 接 光 照 ( D i r e c t L i g h t ) + 间 接 光 照 ( I n d i r e c t L i g h t ) 全局光照 = 直接光照(Direct Light) + 间接光照(Indirect Light) =(DirectLight)+(IndirectLight)

尽管实际应用中只有漫反射全局照明的模拟算法被称为全局照明算法,但理论上说由于反射、折射、阴影的模拟都需要考虑光源对物体的直接作用和物体之间的相互作用,因此也属于全局光照的范畴。

二、全局光照的主要算法流派

主要流派:

  • Ray tracing 光线追踪
  • Path tracing 路径追踪
  • Photon mapping 光子映射
  • Point Based Global Illumination 基于点的全局光照
  • Radiosity 辐射度
  • Metropolis light transport 梅特波利斯光照传输
  • Spherical harmonic lighting 球谐光照
  • Ambient occlusion 环境光遮蔽
  • Voxel-based Global Illumination 基于体素的全局光照
  • Light Propagation Volumes Global Illumination
  • Deferred Radiance Transfer Global Illumination
  • Deep G-Buffer based Global Illumination

其中,光线追踪又分为递归式光线追踪、分布式光线追踪和蒙特卡洛光线追踪等;路径追踪又分为蒙特卡洛路径追踪、双向路径追踪、能量再分配路径追踪等。

三、全局光照技术进化编年史

3.1 光线投射 Ray Casting

从每个像素射出一条射线(每像素从眼睛投射射线到场景中),找到挡住射线路径的最近物体,视平面上每个像素的颜色取决于可见光表面产生的亮度。
光线投射示意

3.2 光线追踪 Ray Tracing

在光线投射基础上加入光与物体表面的交互,让光线在物体表面沿着反射、折射以及散射方式继续传播,直到与光源相交。也称为经典光线追踪方法、递归式光线追踪方法或者Whitted-style光线追踪方法。
每像素从眼睛投射射线到场景中,找到与该光线相交的最近物体的交点。(1)若该点处的表面是散射面,计算光源直接照射该点产生的颜色;(2)若该点处的表面是镜面或折射面,则继续向反射或折射方向追踪另一条光线。如此递归,知道光线射出场景或到达预设的最大递归深度。
经典光线追踪示意

3.3 分布式光线追踪 Distributed Ray Tracing

将蒙特卡洛方法引入光线追踪领域,将经典光线追踪算法扩展为分布式光线追踪算法,也称为随机光线追踪算法,可以模拟金属光泽、软阴影、景深和运动模糊等效果。

【补充】蒙特卡洛方法,参照蒙特卡洛光线追踪

3.3.1 反向光线追踪

传统正向光线追踪的基本思想:从光源出发,正向追踪每一条光线在场景中的传递过程。正向追踪计算了大量对当前屏幕颜色不产生贡献的信息,极大影响了效率。因此引入反向光线追踪。
反向光线追踪的基本思想:从相机(而不是光源)出发,向投影屏幕发出光线,然后追踪该光线的传递过程。若该光线经过若干次反射、折射打到光源上,则认为该光线是有用的并递归计算其颜色,否则丢弃该光线。实际上,该过程是真实光线投影的逆过程,同样也会产生浪费,并且只适用于静态渲染。

3.3.2 蒙特卡洛光线追踪

理论基础:
传统的逆向光线追踪算法表面属性的单一且不考虑漫反射。改进:认为一个表面的属性可以是混合的,有20%的概率发生反射,30%的概率发生折射,50%的概率发生漫反射。然后通过多次计算光线跟踪,每次按照概率决定光线的反射属性,这样在就把漫反射也考虑进去了。
逆向光线追踪的改进方法:本质就是通过大量的随机采样来模拟半球积分。这种方法在光照细节上可以产生真实度很高的图像,但是图像质量有比较严重的走样,而且效率极其低下。

蒙特卡罗光线追踪本身也是一种逆向光线跟踪。其本质是通过概率理论,把半球积分方程进行近似简化,使之可以通过少量相对重要的采样来模拟积分。相对于普通光线追踪,蒙特卡罗光线追踪引入了更复杂的漫反射模型,从而增加了需要跟踪的光线数量。但是又通过采样算法减少了需要跟踪光线,所以其核心效率取决于采样模型。

3.4 渲染方程 The Rendering Equation

渲染方程描述了场景中光能传输达到稳定状态以后,物体表面某个点在某个方向上的辐射率(Radiance)与入射辐射亮度等的关系。渲染方程根据光的物理学原理,以及能量守恒定律,完美地描述了光能在场景中的传播。很多真实感渲染技术都是对它的一个近似。

3.5 路径追踪 Path Tracing

路径追踪方法是第一个无偏(Unbiased)的渲染方法。路径追踪的基本思想是从视点发出一条光线,光线与物体表面相交时根据表面的材质属性继续采样一个方向,发出另一条光线,如此迭代,直到光线打到光源上(或逃逸出场景),然后用蒙特卡洛的方法,计算其贡献,作为像素的颜色值。
路径追踪会避开贡献小的路径,而在贡献大的路径附近做更多局部的探索。

3.6 双向路径追踪 Bidirectional Path Tracing

双向路径追踪(Bidirectional Path Tracing)的基本思想是同时从视点、光源打出射线,经过若干次反弹后,将视点子路径( eye path) 和光源子路径( light path) 上的顶点连接起来(连接时需要测试可见性),以快速生成很多路径。这种方法能够产生一些传统路径追踪难以采样到的光路,所以能够很有效地降低噪声。

3.7 梅特波利斯光照传输 Metropolis Light Transport

与双向路径追踪相比, MLT方法 更加鲁棒,能处理各种复杂的场景。比如说整个场景只通过门缝透进来的间接光照亮,此时传统的路径追踪方法因为难以采样到透过门缝的这样的特殊路径而产生非常大的噪声。

四、光线追踪 Ray Tracing

光线追踪跟踪从眼睛发出的光线而不是光源发出的光线,所得结果类似于光线投射与扫描线渲染方法的结果,但是具有更好的光学效果。
光线追踪的最大缺点是性能问题,独立看待每条光线,每次均需要重新计算,计算量非常巨大。传统光线追踪产生的并不一定是真实效果图,只有在非常近似或者完全实现渲染方程的时候才能实现真正的真实效果图像。
伪代码:

for each pixel of the screen
{
	Final color = 0;
      	Ray = { starting point, direction };
      	Repeat
	{
		for each object in the scene
          	{
                 	determine closest ray object/intersection;
          	}
	        if intersection exists
      	        {
             		for each light in the scene
             		{
                    		if the light is not in shadow of anotherobject
                    		{
                           			addthis light contribution to computed color;
                    		}
		        }
	       }
      	       Final color = Final color + computed color * previous reflectionfactor;
      	       reflection factor = reflection factor * surface reflectionproperty;
      	       increment depth;
      } until reflection factor is 0 or maximumdepth is reached
}

五、路径追踪 Path Tracing

从视点发出一条光线,光线与物体表面相交时根据表面的材质属性继续采样一个方向,发出另一条光线,如此迭代,直到光线打到光源上(或逃逸出场景),然后用蒙特卡洛方法,计算光线的贡献,作为像素的颜色值。而使用蒙特卡洛方法对积分的求解是无偏的,只要时间足够长,最终图像能收敛到一个正确的结果。
路 径 追 踪 = 光 线 追 踪 + 蒙 特 卡 洛 方 法 路径追踪 = 光线追踪+ 蒙特卡洛方法 =线+

六、Ray Casting ,Ray Tracing,Path Tracing区别

  • 光线投射 Ray Tracing:实际上是一个框架,符合该框架的都叫Ray Tracing。从视点发射光线,与物体相交就根据规则反射、折射或吸收。遇到光源或者走太远就停住。一般来说运算量不小。
  • 光线追踪 Ray Casting:是Ray Tracing的第一步,发射光线,与物体相交。
  • 路径追踪 Path Tracing:是Ray Tracing + 蒙特卡洛法。在相交后会选一个随机方向继续跟踪,并根据BRDF计算颜色。

七、环境光遮蔽 Ambient Occlusion

环境光遮蔽(Ambient Occlusion,简称AO)是全局光照明的一种近似替代品,可以产生重要的视觉明暗效果,通过描绘物体之间由于遮挡而产生的阴影, 能够更好地捕捉到场景中的细节,可以解决漏光,阴影漂浮等问题,改善场景中角落、锯齿、裂缝等细小物体阴影不清晰等问题,增强场景的深度和立体感。

后记

本章内容的重点是光线投射、光线追踪和路径追踪,介绍了全局光照技术的发展历程,涉及的算法简单介绍了其原理,算法变形和细节没有过多介绍,时间问题我也没有过多探索,通过本章的学习我对全局光照技术有了大体的认识,具体算法细节留到需要用的时候再做深入探索。

  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
《3D游戏:卷2 动画与高级实时渲染技术》是一本关于3D游戏开发的书籍。在这本书中,作者详细介绍了动画制作和高级实时渲染技术在游戏开发中的应用。 首先,动画在游戏中扮演着非常重要的角色。书中介绍了不同类型的动画技术,包括骨骼动画、关键帧动画和蒙皮动画等。通过学习这些动画技术,开发者可以创建逼真的角色动作,使游戏世界更加生动和有趣。 其次,高级实时渲染技术是现代游戏开发中的一个关键领域。书中深入介绍了一些常用的高级实时渲染技术,如PBR(Physically Based Rendering)渲染全局光照(Global Illumination)和HDR(High Dynamic Range)渲染等。这些技术可以使游戏画面更加逼真、细腻,并提升整体的视觉效果。 此外,书中还介绍了一些实践案例和实用技巧,帮助读者更好地理解和应用所学知识。例如,如何创建合适的动画帧率、如何优化渲染性能等等。这些实用的技巧对于开发人员来说非常有价值,可以帮助他们提升游戏的质量和用户体验。 总的来说,《3D游戏:卷2 动画与高级实时渲染技术》是一本非常实用的游戏开发指南。通过学习这本书,开发人员可以了解并掌握动画制作和高级实时渲染技术,从而创建出更加引人入胜且视觉效果出色的3D游戏作品。无论是对于游戏开发初学者还是有经验的开发人员来说,这本书都是一本值得阅读的参考书籍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值