计算机图形学的魔法概述篇(一)

前要简述:

光学:分几何光学和波动光学
几何光学:把光看成光线,光是沿着直线传播.(在计算机中假设光沿着直线传播,比如现在流行的光线追踪技术)
波动光学“:把光看成微观分子和电子,分子间传递能量(分子之间能量得失无非就是电子得失)是具有波方式传递。

任何和光学扯上关系都不能少了(辐射度量学),这个之前好几篇都介绍过,在此系列中将简述。
辐射度量学(基于物理) != 光度学(基于人眼【视锥细胞的感知】)

第一章 概述 真实感渲染
真实的渲染简单一句话1就是1模拟环境中的光的物理相互作用1来生成图形的过程。
光的物理量:
radiant 辐射通量(单位时间内光子能量)
                                                Φ = dQ / dt    (1.1)
irradiance 辐照度 (单位时间 单位面积 光子能量)
                                               E = dΦ / dA    (1.2)
radiance 辐射度 (单位时间 单位面积 单位立体角 光子能量)

                                                 L = dΦ / dw dA    (1.2)

Spectral flux in frequency, denoted Φe,ν, is defined as
                                                Φe,λ   =   Φe / V (V是频率)

Spectral flux in wavelength, denoted Φe,λ, is defined as
                                                 Φe,λ   =   Φe / λ


在此,再次讲述人类视觉的感知:

光的波长依赖性被人类视为颜色。色觉来自视网膜上的锥细胞光感受器,人类有三种类型,每一种都对不同波长波段的光敏感,大致对应于对红、绿、蓝的感知。

通过结合红色、绿色和蓝色波长波段中不同强度的光,可以合理地再现颜色;大多数显示系统都使用这一原理。因此,使用三色(三色)表示光谱量是很常见的。在RGB表示法中,每个值都有一个单独的红色、绿色和蓝色组件。

模拟光的行为

局部照明和全局照明

简单来说,光直接照在物体表面通过只计算物体表面的信息就被称为直接光照,光进入表面后会散射到物体内部,这些光又会对物体进行着色,计算这些光线就被称为全局光照。


第二章 全局光照

 


                                                                    


渲染方程
渲染方程模拟了对象表面之间的光传输。在特定方向上照射到表面的光的辐射Lo是表面从该点发射出的辐射Le和从所有入射方向反射的辐射Lr的总和。(如图)发射辐射是通过将表面点上方半球的入射辐射与BRDF进行积分来计算的。
                                                        


发射是表面固有的;请注意,受光表面也会反射光。方程(2.2)是渲染方程的一种形式,在其外观上看似简单。从方向ω在x处的入射光Li(x,ω)可以是从光源发出的光,也可以从另一个表面反射的光;事实上,它包括从表面点x本身反弹的光。换句话说,Li(x,ω)依赖于Lr(x,ω),而Lr又无限大地依赖于Li(x,ω)。这种复杂而复杂的相互依赖是GI如此困难的原因。
                                                        


因为入射光来自其他表面点,无论是通过反射还是直接光照,方程(2.2)可以重新表述为所有表面点x'的总和。图(b),这需要2个术语:一个用于编码其他表面的可见性,另一个用于表示到x'的距离和投影透视的缩短,后者表示为一个几何项如图.

方程2.4 积分对于所有曲面S,符号 x'' -> x'表示光的传输方向x'' 到x。纵观整个方程,计时对于简单的环境,渲染方程也是非常复杂。所以求解类似的方程,我们只能用近似法,但是计算机图形学中,我们是使用肉眼去捕获信息。数值上的artifst不如在视觉上接受来的好。求解此方程由2种方法:辐射度强度算法和蒙特卡洛路径追踪(MCPT)。辐射强度的工作是将环境分成许多1小部分(像素块)。而蒙特卡洛算法路径追踪的工作原理是追踪从场景到随机方向的光路径。

辐射强度算法

辐射强度算法采用有限元法求解渲染方程。有限元的基本思想是划分一个系统变成离散1的单元格或"element"的·集合,然后处理这些元素的相互作用。对于全局光照来说,一个环境的每个表面被分成小的斑块,并通过建模这些斑块之间的光传输的影响来计算解决方案。

在基本的辐射强度算法中,假设表面是Lambert,假设所有的反射都是完全漫反射,然后每个曲面BRDF都是常数,因此公式2.4可分解为方程(2.6)

                                                        



公式2.6中的积分值都是恒定的,。这允许渲染方程被离散成一个线性方程组,每个表面补丁都有一个方程,斑块的辐射出射度是方程(2.7)。常数值Fij从斑块i的光到达斑块j的因子。


                                                                    


因为每个表面斑块上的辐射度是恒定的,输出辐射也是恒定的。场景看起来像是连续的信号叠起来的,但在离散化的视觉上是1不可接受的,即使这些数值接近正确的值,在光度重建的过程中,需要一个额外的步骤,一种简单的解决方案是斑块间的光能度值通过插值或者平滑斑块之间的光能度值。另一种方案是通过使用射线追踪对方向半球进行采样,在每个点进行最后的累积求值:每条射线的辐射值来自它所击中的表面斑块的辐射值。重建还可能包括增加光线追踪的高光部分和镜像反射。

 辐射强度法可以产生准确的结果,但他1及内存密集又耗时。如何将表面细分为斑块对最终解有显著影响。当一个物体有很多细节时,它的表面必须被细分为非常小的斑块,从而导致问题的大小发生爆炸。最重要的是,辐射传递法只处理纯漫反射(有限元法可以用于非漫反射光的传输,但它要复杂得多)。

蒙特卡洛和路径追踪 

数学方程(2.2)给出的渲染方程,用表面点上方所有进入的方向表示,本质是递归的,从任意的方向w处的表面x点的Li(x,w)是在另一个表面x'出的出射辐射度。可以通过从x点到w方向的光线追踪来找到在这个二次点x'处的出射辐射度。这个二次点x’处的出射辐射度再次由x'.处的方程(2.2)给出从另一个任意方向的x'的入射辐射可以通过追踪来自该方向的x'的射线来找到,以此类推。

近似方程(2.2)的一种方法是对半球在点方向采样入射辐射应用一种数值积分。在每个采样点,沿着相应的方向追踪光线,已找到光产生的表面点。同样的近似过程也适用于次级点,结果也就是如此。因此,样本总数随着反射次数的增加呈指数增长,但这可以通过在更深的深度使用更少的样本点来减轻;事实上,一些固定的近似可以在规定的深度被替换。例如一次 “one-bounce” 近似,在所有次级点的输出辐射近似于直接照明。

路径跟踪来自于这种方法的“深度优先”版本。从x中选择一个样本方向,追踪射线到原点x'在那里选择并追踪另一个样本方向,以此类推。当到达一个光源时,该过程将停止。

BRDF的双向性确保了收集路径的反向,从光通过每个表面反弹到x,是一个有效的光路径。沿着给定的光路进入x的辐射是来自光源的辐射乘以每次反弹时的表面BRDF值。通过路径追踪计算GI的基本思想是对所有光路径的入射辐射进行求和。

(Whitted-style ray tracing只会考虑光滑物体, 漫反射物体会直接终止追踪)

基于随机数采样样本的方向的射线追踪称为蒙特卡洛射线追踪(MCRT)。蒙特卡罗路径追踪(MCPT)是对一般光路径的扩展。这个想法类似于Whitted-style ray tracing,即光线从视点拍摄到环境中。不同之处在于,反射的光线是向各个方向拍摄的,而不是仅仅沿着镜子反射或折射的路径。路径跟踪一般是一种直接而有效的GI计算方法。它使用任何BRDF模型来处理反射,从纯粹的漫反射表面到真正的镜面反射,以及透射和折射,甚至是与波长相关的折射(色散)。此外,它还可以很好地应用于复杂的几何结构。其缺点是,为了获得准确的结果,通常需要非常大量的样本:渲染一个中等复杂度的图像可能需要跟踪数十亿条射线。


基本的MCRT
Rob Cook,Thomas Porter, and Loren Carpenter 首次使用蒙特卡洛方法在一篇"Distributed Ray Tracing"进行了描述. [Cook et al. 84]分布式光线追踪有效的1利用超采样在每个像素和每个1交点1上投射许多光线,(图2.4a)根据1镜面反射的扩散分布,对多个反射射线进行平均,计算处表面点上的光泽反射。在原论文中,隐含的BRDF相当简单:反射射线在一个围绕镜面反射方向的窄圆锥中均匀采样,就像BRDF具有圆锥的形状一样。因此,锥体的宽度决定了镜性。该实现还使用了区域光源的蒙特卡罗采样来生成“软阴影”(图2.4(b))。

 


                                              

(图2.5)Rob Cook,Thomas Porter, and Loren Carpenter 的光线追踪是实现真实渲染的真实一步,但所需要的样本的数量令人望而止步,此外,它并不能产生一个完整的GI解决方案:它只解释了光滑反射,柔和阴影,聚集和运动模糊灯。模糊现象。基本的分布式光线追踪没有考虑到漫反射的互相反射。Kajiya的方法是MCPT算法。在每个射线表面相交处,二次反射以随机方向拍摄;在射线击中表面选择另一个随机方向;以此类推,知道光源被击中。通过从视点或摄像机发送足够的光线(并适当地平均结果),基本上所有的光路都可以被捕获。

在实际应用中,通过直接对光线进行采样,分别计算路径上每个交点x处的直接照明,可以提高效率。在这种情况下,通常使用不同的路径终止准则,例如在规定的深度停止。如果场景包含点光源并且追踪光线根本击不中则必须使用上面方法。

MCPT在实践中工作效果取决于样本数量和如何选择他们。如果样本数量太低,就没有足够的路径有足够的代表性,由此产生的误差将在最终的图像中显示为过度或有害的噪声。但是增加样本的数量会增加渲染时间。不幸的是,获得误差低于某一阈值所需的样本数量是二次的:获得一半的误差需要是样本数量的四倍。

如何选择样本也是MCPT成功的关键。正如Kajiya所指出的,某些光路径比其他路径更“重要”,因为它们携带更多的辐射能量。例如,在一个高镜面的环境中,靠近镜面反射路径的光路携带了大部分的能量。相比之下,沿着从光面方向反射的光携带视点的光要少得多。避免这些路径而选择更重要的路径可以使MCPT更有效,但它也会引入偏差。例如,如果只遵循镜面路径,则漫反射将不会出现在最终的图像中。当根据非均匀分布选择路径时,必须在最终的平均值中相应地加权。许多研究都是关于如何在不影响结果的情况下明智地选择样本点和光路的.

双向路径追踪
Basic的路径追踪依赖于从视点开始的随机路径追踪,最终找到光源的路径。在一个具有大光源的纯Lambert环境中,可以期望有足够数量的路径来这样做。然而,遵循随机路径通常过于浪费。另一种方法是开始从光源跟踪路径,并跟踪他们到视点,以便所有路径都携带光线。但问题就变成了如何获得足够的路径来真正到达相机。双向路径跟踪的思想[Lafortune and Willems 93]是从视点和光跟踪路径,然后以某种方式将它们连接起来,得到一组具有代表性的光到视点的路径。

Metropolis Light Transport(梅特罗波利斯光线传输)

另一种分别从光线和视点追踪的方法是光子映射,(Henrik Wann Jensen),该方法主要由2个阶段:第一个阶段涉及到从一个光源开始的粒子输出模拟的形式,第二个阶段是从这个角度追踪光线,并根据粒子模拟的结果计算出辐射光度。在模拟阶段,一组被称为“光子”的数据包沿着正常的光路从光源向随机方向发射。在表面交点,一个光子要么被表面吸收,要么失去一些能量,沿着另一条路径继续前进,要么可能分裂成两个光子。在任何一种情况下,关于碰撞的信息,包括沉积在表面的能量,都被记录在光子图中。最终,每个光子都在某个表面被吸收。第二个阶段包括从这个角度进行基本的光线追踪。在每个射线交点,查询光子图来确定照明,很像辐射强度方法中的最终聚集。光子映射是蒙特卡罗模拟的一种形式。

对于MCPT来说,只考虑从光开始到从视点结束的路径似乎更自然。然而,根据均匀的随机分布构造这样的路径是一个重大的挑战。Eric Veach and Leonidas J. Guibas.在1997年的一篇签名论文中提出了这样做的一种方法。这种方法被称为梅特罗波利斯光线传输(MLT),它从几条简单的光路径开始,并通过每条路径的引导随机突变发展出更多的方法。路径的构造是基于大都市算法的。在大多数环境下,MLT算法的效率明显高于普通的MCPT算法。

Bidirectional Path Tracinhg (双向路径追踪)
双向路径追踪的思想建立在光线追踪上,MCPT 依赖于视点开始的随机路径最终找到通往光源的路径。在具有大光源的Lambert环境中,可以预期有足够数量可以做成这样。然而,遵循随机路径通常过于浪费。另一种方法是开始从光源跟踪路径,并跟踪它们到视点,以便所有路径carry灯。但问题就变成了如何获得足够的路径来真正到达相机。双向路径追踪的想法[LafortuneandWillems93]是同时从视点和光处路径追踪,然后以某种方式连接它们,以获得一个具有代表性的光到视点路径的集合。

Metropolis Light Transport
另一种从光和视点出发的射线是photon mapping 。它有基本的2个阶段,第一个阶段涉及一个光源开始的粒子输运模拟的形式;第二种方法是从这个角度追踪光线,并根据粒子模拟的结果计算出辐射光度。在模拟阶段,一组被称为“光子”的数据包沿着正常的光路从光源向随机方向发射。在一个表面的交点处,一个光子要么是被表面吸收,要么失去部分能量,继续沿着另一条路径继续前进,或者可能分裂成两个光子。在任何一种情况下,有关碰撞的信息,包括储存的在表面的能量,都被记录在光子图中。最终,每个光子都在某个表面被吸收。第二个阶段包括从这个角度进行基本的光线追踪。在每个射线的交点处,查询光子以确定光照,很像辐射度法中的最终聚集。光子映射是蒙特卡罗模拟的一种形式。

对于MCPT,只考虑从光开始到视点结束的的路径似乎更自然点,然而根据均匀随机分布构造这样的路径是一种挑战。Eric Veach和Leonidas在1997SIGGRAPH论文论文中提出了一种方式。这种方法被称为Metropolis Light Transport(MLT),他从几个简单的光路开始通过每个路径引导随机突发处更多的光路。路径的创建基于Metropolis算法。

Sampling Techniques

蒙特卡罗模拟的最终结果高度依赖于样本的选择方式。一个好的采样方案使用少量的样本,产生的噪声小,误差更小.纯随机抽样是无偏不倚的,但效率很低。虽然可能没有一种“理想的”抽样方法,但已经提出了许多好的抽样方案。
 

随机样本很少均匀分布;它们最终往往会彼此靠近,这种现象被称为聚类。对蒙特卡罗采样的影响是,在平均值中,聚类点附近的值被过度强调。例如,如果从概率上预计,在一个表面点上方的半球上只有一条光线会击中光源,但最终有三条光线击中它,那么该表面点将获得过多的光线。虽然聚类并非不可避免,但可以通过将域划分为小区域,然后在这些区域中分别采样来减轻聚类。这就是所谓的分层抽样。图2.7说明了非分层和分层抽样,用三种不同的方式划分域。


 


 

如上所述,有些光路比其他光路携带的功率更大,但找到那些更“重要”的路径并不容易。一般的蒙特卡罗积分可以通过集中被积分函数最大的样本来提高效率,这种技术被称为重要抽样。类似的事情可以用蒙特卡罗光线追踪来完成。与发射均匀分布在半球上的射线不同,它们可以集中在入射辐射(乘以BRDF值)最大的半球区域。当然,诀窍在于确定这些区域是什么,而唯一的方法就是实际取样他们。一种方法是从半球上的粗抽样开始,然后用它来指导重要性抽样。
 


非均匀样本分布由一个重要函数控制。反射最显著的地方BRDF最大,因此它是GI积分中重要函数的自然选择。然而,BRDF并没有说明最强入射光的方向。光子模拟可以用来预先计算优势光的方向。当此信息与BRDF结合使用时,可以实现更好的采样。图2.8说明了这种方法。在图中,半球被划分为更小的斑块(在球坐标中),并且预先计算了每个patch的近似入射辐射。然后在每个patch中分别进行采样,采样的数量与patch中预先计算的值成正比。对BRDF进行重要性采样进一步提高了采样质量。




[Keller 96] Alexander Keller. “Quasi-Monte Carlo Radiosity.” In Rendering Techniques Simulation with Online Model Reduction.” Proc. SIGGRAPH Asia ’09, Transactions on Graphics 28:5 (2009), 1–9.
 

[Lafortune and Willems 93] Eric P. Lafortune and Yves D. Willems. “Bi-directional Path Tracing.” In Proceedings of Third International Conference on Computational

Graphics and Visualization Techniques (Compugraphics ’93), edited by H. P. Santo,pp. 145–153. Alvor, Portugal, 1993. Available online (http://citeseer.ist.psu.edu/

lafortune93bidirectional.html).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值