1、概述
近年来,随着计算机图形图像技术在游戏、影视动西、虚拟现实、建筑漫游等领域应用的深入和普及,人们对计算机生成图形的逼真性要求越来越高。光照效果的计算是生成逼真图形的基础,要得到高度真实感的图形,不仅要计算直接光照,还需计算间接光照,获得全局光照效果。间接光照是由光线在物体之间的多次反射、折射引起的,其产生原理非常复杂,与光源特性、场景中物体的物理特性及物体问的相对空问位置等有关。因此,基于间接光照产生的物理原理的算法(如能量辐射、光影跟踪算法)计算量大、算法复杂,但目前绝大部分提供全局光照的软件都是采用这类算法,很难满足游戏、动画等实时性要求高或渲染最非常大的应用。如何实现一种既能达到一定的视觉效果,又能快速计算的方法成为研究的热点。通过光照环境贴图表示光在空间中的分布是一种较早被引入计算机图形学中用来模拟全局光照的方法。它假定物体离光源足够远,物体相对于光源可看作一个点,这样物体上每个点周围的光线分布可近似为相同的,每个点的光照效果通过对光照环境贴图积分获得。为了提高计算效率,文献[l-3]提出了用法向作为参数的球面协波函数和非线性小波表示光在空间的分布。但这种情况只适用于间接光来自很远处的情况,而且针对每幅光照环境贴图需要进行费时的预计算。文献f4J采用低阶函数拟合场景中的环境光照和间接光照分量,避免了全局光照计算,但其拟合产生的低阶重光照函数只反映了特定视点下的间接光照和环境光照。
文献[5]提出了一种实时重建光照的方法。该方法是在演播室中建立一个大笼子,笼子上安装许多灯,通过拍摄的场景来控制每个灯的亮度和颜色,使笼内演员获得与实拍场景相似的光照效果,再通过红外技术将笼内演员合成到拍摄的场景之中,实现实时的视频合成。本文对上述方法加以改进,提出了一种从渲染的视觉效果出发、不需要借助硬件设备的模拟全局光照的方法。
2、本文算法的原理
直接光是从光源出发,直接照射到物体表面,由于物体问的遮挡和光源照射范围等因素,直接光照变化非常剧烈,分布很不均匀。而间接光照是由直接光照射到物体表面后,经过多次反射、折射产生的,因此。每个方向都有来自环境的间接光照,而且在空间的分布比较均匀,没有剧烈的变化,属于光照中的低频成分。由直接光照和间接光照产生的物体表面的光照效果可以统一表示为
其中,x是顶点的位置;ω0是视方向;ω是入射光线方向;L是在x点的ω方向上的入射光线强度;S是可见性函数,确定沿ω方向入射到x的光线是否被遮挡;f是在x点的反射函数,对于漫反射表面,它与视角无关,而对于镜面反射表面,一旦确定了视点位置,视方向ω0将由x点的位置决定,即可表示为ω0(x);n(x)是x点的法向;(ω.n(x))是入射角的余弦值。将可见性函数、反射函数和余弦函数合写为
对x点周围的环境空间光线做离散采样,将积分转换为求和:
通过这种离散化处理,物体上每个点J都存在一个反映其周围空间光线分布的采样图,计算每个点在每个采样方向上的L(x,ωj),运算量非常大。由于全局光照由直接光照和间接光照2个部分组成,两者在空间分布的规律不一样,一般情况下产生直接光照的光源用点光源模拟,数量非常有限,只分布在空间的几个点上,因此可以将直接光照和间接光照分别处理。直接光照可以按照下式计算:
其中,BD表示直接光照效果;i表示光源的索引值;Yi表示第i个光源的位置;Li(ω(x,yi))表示第i个光源在x点在ω方向的光照强度。间接光照分布在空间各个方向,可以用一个包围物体的球(或者一个其他形状的包围盒)模拟其分布,球面上布满了光源。当间接光照主要由远处的环境产生时,L可看作只与ω有关,而与顶点位置无关,光源可简化为用一张光照环境图表示。
其中,T(x,ω)由于只由该点所处位置的物体属性决定,与光源无关,因此可以进行预计算。按照ω进行离散化,将T(x,ω)的预计算结果存储后,在渲染时通过硬件支持的矩阵运算,计算T和L乘积的累加和,达到非常快的渲染速度。当物体间存在较近距离的互反射,即物体相对于包围球的大小关系无法将它看作一个点时,L不仅与ω有关,还受顶点位置的影响,这时将球面进行离散采样后的每个采样点当作一个独立的光源处理,这些光源组成一个将物体包围在内的灯光阵列。利用式(4)计算这些光源的直接光照效果,如下式所示:
合并直接光照和间接光照计算公式得到统一的全局光照计算公式:
因此,在这种情况下,将间接光照转化为直接光照方式计算,简化了计算过程,达到了通过直接光照模拟全局光照的目的。而且在计算直接光照时,可通过GPU支持的矩阵运算来实现硬件加速,提高渲染速度。
3、本文算法的实现
3.1光源的位置
球形分布光源的位置通过多面体对球形的逼近方法确定。多面体的顶点位置为光源的位置。如表1所示,多面体的基本型可以是四面体、八面体、十二面体,通过调整基本型的细分层级来控制顶点数,从而达到调节光源数量的目的,以此决定模拟的效果。球心的位置和球的半径可根据具体场景确定。光源数可根据具体应用需求,通过对渲染效果与渲染时间的折中来选取。
光源的分布也可根据具体场景设定,如将光源分布在方形包围盒上,在确定形状后,类似干球面细分的过程,确定光源的位置和数量。用这种方法可模拟各种开窗的光照效果。
3.2光源的颤色
间接光照光源的亮度值比较小,且各光源问变化不大。光源颜色可通过多种方式确定,本文设计了如下3种光源颜色计算方法:
(1)由用户设定2种颜色,分别对应顶部和底部的光源颜色,其余光源颜色由这两者插值产生,如顶部偏蓝、底部偏绿,其他光源颜色则为由蓝到绿的渐变色。光源按照位置的z轴坐标建立索引,每个光源的颜色计算公式为
其中,L0,Ln-1分别对应顶部和底部的光源颜色;N为光源的数量。
(2)由贴图确定光源的颜色。首先,对球面指定贴图映射方式,计算球面每个顶点的贴图坐标,再采用邻域平均法或加权邻域平均法,实现低通滤波,计算光源的颜色。邻域的大小根据邻近顶点的贴图坐标所形成的区域决定。
(3)采用HDR图(High—Dynamic—Range images)确定光源的颜色,类似于文献[5]中控制灯光的方法。由于HDR图用浮点数存储图像的RGB信息,因此更接近真实环境照明。但贴图方式无法采用常规的映射方式,其贴图坐标计算公式为
其中,Nx,Ny为光源所在顶点的法向的x,y分量;μ,v为贴图坐标。
3.3光源的类星
光源的类型采用了点光源、聚光源,聚光源的汇聚点设置在球心,灯光阵列中的所有光源具有共同的光照范围和衰减区域,其值町根据实际情况做调整。
4、实验结果与讨论
应用基于本算法开发的软件对多个场景进行了全局光照模拟渲染,通过实验发现,当模拟问接光照的光源数增加到42时,可取得比较理想的渲染效果,能满足一般的应用需要,再增加光源数后,对整体渲染效果的改善不是很明显。图I是用42个光源模拟间接光照效果的渲染图。
由于一般情况下基于光影跟踪的算法比基于能量辐射的算法速度快,因此本实验只与MAX提供的光影跟踪算法做了对比测试,在渲染效果无明显差异的情况下。本算法渲染速度明显快于光影跟踪算法。所有测试在CPU为P4 2.0 GHz、显卡为RADEON 8500、l 024MB内存的计算机上完成,渲染图像的分辨率为800X600。表2中的主要光源指模拟场景中直接光照效果的光源。光影跟踪算法的光线弹跳次数设为一次,其余参数采用MAX6.0中的缺省设置。具体渲染时间
如表2所示。图2采用了本算法渲染,设置了42个方向光模拟环境光效果,光源的颜色直接指定,同时设置了一个主光源和一个背景光;图3设置了同样的一个主光源和一个背景光,应用MAX的光影跟踪算法进行渲染。
2种光照算法渲染效果的差异不是很明显,但图2中恐龙嘴的内部偏亮,显得不够自然,因为在实际场景中当光源位于恐龙上部时,没有直接光射进口腔内部,而且反射光也不容易进入,亮度应该偏暗。这是本算法的一个不足之处,容易在一些孔、洞或凹坑部位造成渲染效果不自然,主要原因就在于入射到这些部分的光过强,可通过增加光源数量、降低光源亮度的方法来消除。
5、结束语
本文针对目前全局光照算法存在的不足,讨论了用直接光照模拟全局光照的原理及其实现方法。本方法具有可利用GPU硬件加速、光源控制灵活、渲染速度快等特点。下一阶段将对通过视频序列控制光源颜色做进一步研究。
分享到:
相关推荐
全局光照不仅包括直接光照,还包括光线在不同物体之间反弹产生的间接光照,从而营造出更加自然的光影效果。 #### 二、Unity光照模式 Unity提供了多种光照模式来帮助开发者实现不同的光照需求,主要包括实时光照...
全局光照渲染技术是现代计算机图形学中的一个重要领域,它涉及到如何真实地模拟光线在场景中的传播,从而使得虚拟环境中的光照效果更为逼真。在Unity2019大会上,这一主题的演讲深入探讨了光照渲染的多个关键方面,...
光照模型能够模拟光线如何影响物体表面,从而赋予场景深度和真实感。本示例将详细介绍如何在osg中实现全局光与混合光,并讨论如何动态调整光源位置。 首先,我们要理解什么是全局光和混合光。全局光,也称为环境光...
2. 全局光照估计:通过算法计算场景中每个像素点的光照分量,通常采用低频滤波的方式模拟全局光照条件。 3. 局部光照估计:此部分需要分析图像中各个局部区域的光照分布,通常利用高频滤波处理局部的光照信息。 4. ...
基于BRDF和GPU并行计算的全局光照实时渲染 本文介绍了一种基于BRDF(双向反射分布函数)和GPU并行计算的全局光照实时渲染算法。该算法将屏幕图像像素分解为投射光线与场景对象交点面片辐射亮度和纹理贴图的合成,每...
该方法首先需要对全局光照进行离线预处理,通过物理模拟或者采样得到一组训练数据,包括不同光照条件下的场景光照结果。接着,利用RBF神经网络对这些数据进行训练,找出最佳的网络参数,使得网络的输出尽可能接近...
Lumen的设计目标是提供全动态的全局光照和反射,能够实时模拟光线在场景中的反弹,这对于游戏开发和实时可视化领域来说是一个巨大的突破。本文将深入探讨Lumen的工作原理,以及如何在UE5中利用这一系统进行光照和...
全局光照(Global Illumination, 简称GI)是Unity引擎中的关键技术,用于模拟光在游戏环境中复杂的互动和反弹现象,以实现更为真实的光照效果。Unity 5引入了多种全局光照解决方案,包括实时照明、烘焙全局光照和...
在使用时,将这些文件导入到相应的软件中,可以调整场景的全局光照,从而实现逼真的照明效果。例如,一款游戏可能会使用HDR光照效果来提升户外场景的视觉质量,使阳光、阴影和反射显得更为自然。 对于“HDR光照效果...
这有助于分离图像的细节信息和全局光照信息。通常会使用一阶微分算子(如Sobel或Prewitt)或二阶微分算子(如Laplacian)来获取图像的边缘信息。 3. **计算局部亮度**:根据图像的亮度分布,计算每个像素的局部亮度...
7. **环境映射**:环境映射是一种模拟全局光照的技术,包括立方体映射、球形映射等,可以捕捉周围环境的反射信息,增强物体的光照效果。 8. **GLSL着色器**:现代OpenGL使用GLSL(OpenGL Shading Language)编写...
另外,可能还会用到`glLightModel`来设置全局光照属性。 例如,以下代码片段展示了如何设置一个白色光源: ```cpp GLfloat lightPosition[] = {1.0f, 1.0f, 1.0f, 1.0f}; glLightfv(GL_LIGHT0, GL_POSITION, ...
提供了屏幕空间全局光照效果,这种技术可以在屏幕空间内模拟间接光照的效果,从而提升场景的光照真实性。 通过在运行时计算光照信息,能够动态地调整光照效果,增强环境的光照细节。 遮挡光线追踪阴影(Raymarched...
环境光照捕获了周围环境的全局光照信息,而镜面光照贴图则用于计算高光反射,使得反射效果更加精确且动态。通过这些技术,Filament可以为场景中的每个物体提供准确的间接光照,增强了场景的整体真实感。 在实际应用...
全局光照模型考虑了光源对场景中所有物体的影响,包括直接光照和间接光照。直接光照是指光源直接照射到物体上的光线,而间接光照则是光线经过一个或多个表面反射、折射后到达物体。Whitted光照模型,是这个项目中...
在OpenGL中,环境光照模型不考虑光源的具体位置,而是简单地将物体表面涂上一个全局的环境颜色,为场景增添基础的亮度和色彩。 在GL_illuminationBase这个压缩包中,可能包含了一系列的源代码文件,如顶点着色器和...
C4D的全局光照引擎在完成所有直接光照和特效计算之后开始工作,对每个像素的漫反射光进行分析,根据需要增加额外的光照信息。这种技术让光线在场景中的传播和反射更接近现实,增强了阴影的柔和度,以及环境对物体...
全局光照的预处理方法有多种,如基于体素的全局光照(Voxel Cone Tracing)和基于光线追踪的全局光照(Path Tracing)等。 五、在"IlluminationTests-master"中的实现 在这个项目中,开发者可能提供了代码示例和...