全局光照(简述)

全局光照(简述)本文深入探讨了全局光照 GlobalIllumi 技术 包括其概念 主要算法流派 渲染方程以及光线投射 光线追踪 路径追踪的区别

大家好,欢迎来到IT知识分享网。

一、什么是全局光照

全局光照(Global Illumination,简称 GI), 作为图形学中比较酷的概念之一,是指既考虑场景中来自光源的直接光照,又考虑经过场景中其他物体反射后的间接光照的一种渲染技术。

虽说实际应用中只有漫反射全局照明的模拟算法被称为全局照明算法,但其实理论上说反射、折射、阴影都属于全局光照的范畴,因为模拟它们的时候不仅仅要考虑光源对物体的直接作用还要考虑物体与物体之间的相互作用也是因为,镜面反射、折射、阴影一般不需要进行复杂的光照方程求解,也不需要进行迭代的计算。因此,这些部分的算法已经十分高效,甚至可以做到实时。不同于镜面反射,光的漫反射表面反弹时的方向是近似“随机”,因此不能用简单的光线跟踪得到反射的结果,往往需要利用多种方法进行多次迭代,直到光能分布达到一个基本平衡的状态。
实际应用中只有漫反射全局照明的模拟算法被称为全局照明算法
PBR中的BRDF主要模拟的是镜面高光,漫反射通常使用Lambert着色方程模拟

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

经过几十年的发展,全局光照现今已有多种实现方向,常见的全局光照主要流派列举如下:

  • Ray tracing 光线追踪 [1968]
  • Path tracing 路径追踪 [1986]
  • 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
  • 等。
三、渲染方程 The Rendering Equation [1986]

在前人的研究基础上,Kajiya于1986年进一步建立了渲染方程的理论,并使用它来解释光能传输的产生的各种现象。这一方程描述了场景中光能传输达到稳定状态以后,物体表面某个点在某个方向上的辐射率(Radiance)与入射辐射亮度等的关系。

四、光线投射 Ray Casting [1968]

光线投射(Ray Casting),作为光线追踪算法中的第一步,其理念起源于1968年,由Arthur Appel在一篇名为《 Some techniques for shading machine rendering of solids》的文章中提出。其具体思路是从每一个像素射出一条射线,然后找到最接近的物体挡住射线的路径,而视平面上每个像素的颜色取决于从可见光表面产生的亮度。

在这里插入图片描述

五、光线追踪 Ray Tracing [1979]

1979年,Turner Whitted在光线投射的基础上,加入光与物体表面的交互,让光线在物体表面沿着反射,折射以及散射方式上继续传播,直到与光源相交。这一方法后来也被称为经典光线跟踪方法、递归式光线追踪(Recursive Ray Tracing)方法,或 Whitted-style 光线跟踪方法。

光线追踪方法主要思想是从视点向成像平面上的像素发射光线,找到与该光线相交的最近物体的交点,如果该点处的表面是散射面,则计算光源直接照射该点产生的颜色;如果该点处表面是镜面或折射面,则继续向反射或折射方向跟踪另一条光线,如此递归下去,直到光线逃逸出场景或达到设定的最大递归深度。

一般的光线追踪算法有两大缺点,一是表面属性比较单一,很难去丰富光接触到物体表面以后发生的多种光学效应,二是忽略了漫反射。我们可以通过模型修正的方式来缓解,首先,物体的表面属性是混合的,比如它有一部分是反射,一部分折射,一部分漫反射。我们这么理解各个部分:当光线接触该表面以后,有一定概率发生反射,折射和漫反射。发生这些光学效应的概率我们可以事先定义好。然后我们多次计算光线跟踪,每次按照概率决定光线的反射属性,就能把各种光学效应都考虑进去。

在这里插入图片描述
以下这张图示可以很好的说明光线追踪方法的思路:
在这里插入图片描述
图 Ray Tracing Illustration First Bounce


在这里插入图片描述
图 典型效果图

光线追踪的伪代码:

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 inthe 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 [1986]

Kajiya也于1986年提出了路径追踪算法的理念,开创了基于蒙特卡洛的全局光照这一领域。根据渲染方程, Kajiya 提出的路径追踪方法是第一个无偏(Unbiased)的渲染方法。路径追踪的基本思想是从视点发出一条光线,光线与物体表面相交时根据表面的材质属性继续采样一个方向,发出另一条光线,如此迭代,直到光线打到光源上(或逃逸出场景),然后用蒙特卡洛的方法,计算其贡献,作为像素的颜色值。

路径追踪 = 光线追踪+ 蒙特卡洛方法

具体算法流程:(1)从视点出发,到成像平面上的每一个像素向场景发出一条虚拟的光线。 (2)当光线与物体相交时按照概率确定光学效应,即是折射,反射还是散射(漫反射)。 (3)根据不同的光学效应继续跟踪和计算,直到得到最终结果。如果光学效应为漫反射,随机选择一个反射方向进行跟踪。 (4)重复前面的过程,把每次渲染出来的图像像素叠加混合,直到渲染出的结果达到满意程度。

六、光线投射(Ray Casting ),光线追踪(Ray Tracing),路径追踪(Path Tracing)三者的的区别:
  • Ray Tracing:这其实是个框架,而不是个方法。符合这个框架的都叫raytracing。这个框架就是从视点发射ray,与物体相交就根据规则反射、折射或吸收。遇到光源或者走太远就停住。一般来说运算量不小。
  • Ray Casting:其实这个和volumetric可以脱钩。它就是ray tracing的第一步,发射光线,与物体相交。这个可以做的很快,在Doom 1里用它来做遮挡。
  • Path Tracing:是ray tracing + 蒙特卡洛法。在相交后会选一个随机方向继续跟踪,并根据BRDF计算颜色。运算量也不小。还有一些小分类,比如Bidirectional path tracing。

参考文献:

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129347.html

(0)
上一篇 2025-08-24 21:00
下一篇 2025-08-24 21:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信