光线追踪
在二维屏幕上呈现三维图像的方法
光线追踪(Ray tracing),是在二维屏幕上呈现三维图像的方法。作为一种图像合成技术,它通过模拟光线与物体表面的交点来实现图像的绘制,具有高效率渲染、精确的阴影和光照效果、适用于复杂场景、真实性好等优点。
光线追踪的发展始于1968年阿瑟·阿彭海姆(Arthur Appel)提出的光线投射理念。1979年,透纳·惠特德(Turner Whitted)在光线投射的基础上,加入光与物体表面的交互,让光线在物体表面沿着反射、折射以及散射方式继续传播,直到与光源相交。1984年,斯蒂芬·库克(Cook)引入蒙特卡洛方法,将经典的光线跟踪方法扩展为分布式光线跟踪算法,又称随机光线追踪。在前人的研究基础上,卡吉雅(Kajiya)于1986年进一步建立渲染方程的理论,第一次将渲染方程引入计算机图形学,并使用它来解释光能传输产生的各种现象。此后,技术在硬件和算法上不断优化,如使用kd树加速结构,2003年,德国萨尔兰(SaarLand)大学提出了业界首个硬件加速光线追踪算法方案。2016年,Imagination公司推出了世界上首个满足实时光线追踪的加速器专用芯片。2018年8月14日,英伟达发布了基于图灵架构的Quadro系列图形卡,并将该系列命名为Quadro RTX家族,这是全球首款支持实时光线追踪技术的显卡。2023年12月,英伟达推出了实时3D创作软件D5渲染器,增强了光线追踪性能并提高了实时视窗帧速率
光线追踪算法通过包围体方法、空间分剖法、预处理法等关键方法,光线束遍历、无栈遍历、光线重排序等相关算法提高效率,涉及像素的区域采样技术、像素细分技术等关键技术。光线追踪广泛应用在影视、游戏、建筑、工程和施工产业(AEC)等领域,但同时存在着效率较低、阴影尖锐、产生噪点等局限。在图像真实感的提升上,纹理空间技术和可变速率光线追踪的结合是未来的研究方向。同时,神经网络技术的融入为实时光线追踪的硬件优化和图像处理提供了新的可能性,预示着进入神经网络渲染新时代的潜在发展。
相关概念
基础概念
光线:光线是表示光的传播路径和方向的直线。光线实际是一种几何的抽象,口语中光线亦可指光源所辐射的光。
光源:光源是指能发出一定波长范围的电磁波(包括可见光以及紫外线红外线、X射线等不可见光)的物体,工业上通常指能发出可见光的发光体
交点:交点指的是捕捉圆弧、圆、椭圆、椭圆弧、直线、多线、多段线、射线、样条曲线或参照线的交点。
数学概念
渲染方程:在计算机图形学中,渲染方程描述光能在场景中的流动,是渲染中不可感知方面最抽象的正式表示。渲染方程的物理基础是能量守恒定律,即在一个特定的位置和方向,出射光是自发光与反射光线之和,反射光线本身是各个方向的入射光之和乘以表面反射率入射角。根据光学原理,渲染方程在理论上代表了场景中全部的光线传输。
立体角:立体角(Solid Angle)是描述辐射能向空间发射、传输或被某一表面接收时的发散或会聚的角度,定义为以锥体的基点为球心作一球表面,锥体在球表面上所截取部分的表面积和球半径的平方之比。
光线方程:几何光学中把光看作是在真空或介质中传播的光线,其轨迹遵循的数学方程,公式为。式中为空间点矢径,为空间折射率分布,表示空间曲线微分元。在变折射率介质中传播的光,路径通常是曲线,具体形式取决于介质的空间折射率分布和光线的初始入射条件,可根据具体的情况由光线方程进行分析。很多光学系统的设计基本依据光线方程来进行。
光的传播与衰减:光是一种电磁波,是一种以波状的形式辐射出来的物质,以每秒钟30万公里的速度运行。在水里的速度是真空的3/4,在玻璃里的运行速度约占真空速度2/3,人们通常把这种光的行进状态称为光的传播。从光源的位置到其最大的作用距离,光强度逐渐减弱,这被称为光衰减。
相位函数:相位这一物理概念被广泛用于波动随时间变化的特征以及某一时间点波动位置的分析和比较。在周期性振动时其变化属性都可以用时间的周期函数来描述。简谐振动是最简单的正弦信号,可以用最简单的三角函数表述为,其中是一个与时刻直接相关的弧度函数,称为相位函数。
双向反射分布函数:当物体表面的某一“小块”受到沿着方向的光的照射时,沿着方向看过去,该小块的辐射强度与该小块所受到的辐照强度之间的比值,被称为双向反射分布函数。
历史沿革
起源
作为光线追踪算法中的第一步,光线投射(Ray Casting)理念最早于1968年由阿瑟·阿彭海姆(Arthur Appel)在论文“Some techniques for shading machine rendering of solids"(《实体着色机渲染技术》)中首先提出。其具体思路是视平面上每个像素射出一条射线,直到最近的物体挡住射线路径,综合每条射线获得的物体信息,如位置、色彩、亮度,在视平面上形成图像。光线投射理念的提出,为光线追踪的研究奠定了基础。
1979年,透纳·惠特德(Turner Whitted)在光线投射的基础上,加入光与物体表面的交互,让光线在物体表面沿着反射、折射以及散射方式继续传播,直到与光源相交。这一方法后来也被称为经典光线跟踪方法、递归式光线追踪(Recursive Ray Tracing)方法,为光线追踪提供了算法补充。
算法丰富阶段
1984年,斯蒂芬·库克(Cook)引入了蒙特卡洛方法(Monte Carlo Method),将经典的光线跟踪方法扩展为分布式光线跟踪算法(Distributed Ray Tracing),又称随机光线追踪,该算法可以模拟更多效果,如金属光泽、景深、运动模糊等。蒙特卡洛算法并不是一种算法的名称,而是对一类随机算法的特性概括。
在前人的研究基础上,卡吉雅(Kajiya)于1986年进一步建立渲染方程(The Rendering Equation)的理论,第一次将渲染方程引入计算机图形学,并使用它来解释光能传输产生的各种现象。这一方程描述了场景中光能传输达到稳定状态以后,物体表面某个点在某个方向上的辐射率(Radiance)与入射辐射亮度等的关系。
1988年,富塞尔(Fussel)和萨勃拉曼尼亚(Subramanian)首次实现了使用kd树(k dimensional tree)作为加速结构的光线追踪器。哈夫兰(Havran)等人在对若干光线追踪加速结构进行研究比较后发现,对于静态渲染场景来说,其数据显示基于kd树的算法的加速效率最高。
1994年,拉福蒂纳(Lafortune)、威廉(Willems)、维奇(Veach)、吉布(Guibas)等人提出双向路径追踪(BPT)算法,BPT除了追踪视点投射光线的路径外,还追踪光源发射光线的路径。1997年,Veach将渲染方程改写成对路径积分的形式,允许多种路径采样的方法来求解该积分。
1997年,埃里克·维奇(Eric Veach)等人提出了梅特波利斯光照传输(MLT)算法。路径追踪中的一个核心问题就是怎样尽可能多地采样一些贡献大的路径,而该方法会避开贡献小的路径,在贡献大的路径附近做更多局部的探索,通过特殊的变异方法,生成一些新的路径,这些局部的路径的贡献往往也很高。与双向路径追踪相比,MLT更加鲁棒,能处理各种复杂的场景。
开发利用阶段
2003年,德国萨尔兰(SaarLand)大学提出了业界首个硬件加速光线追踪算法方案,基于FPGA的硬件架构——SaarCOR,SaarCOR可以实时生成3D场景中高仿真度的画面。芯片可以通过高效算法实现光线追踪的实时特效,不过SaarCOR不能单独工作,它需要一些硬件资源(主要是处理器)以及会占用小部分内存带宽。在2005年的SIGGRAPH大会上他们展示了第一个实时光线追踪加速硬件——RPU(Ray Processing Unit)。RPU原型机采用FPGA技术制造,核心频率运行在66MHz,内存带宽也只有350MB/S。RPU跟GPU一样都是完全可编程架构,能够提供对材质、几何以及光照等的实时编程支持。
2008年,英伟达的卢贝克(luebke)等人实现了基于CUDA的交互式光线追踪,2010年推出了通用的光线追踪引擎Optix。
2016年,Imagination公司推出了世界上首个满足实时光线追踪的加速器专用芯片。2018年,NVIDIA在Turing架构中推出初代RT core,集成到Turing架构的流多处理器(streaming multiprocessors,SM)中。
2018年8月14日,在SIGGRAPH 2018大会上,英伟达发布了基于图灵架构的Quadro系列图形卡,并将该系列命名为Quadro RTX家族。这是全球首款支持实时光线追踪技术的显卡,内部最大的变化就是增加了RT Core核心,专用于物体与环境光线的实时追踪,能够准确绘制环境的光影效果。
2019年1月,有爱好者团队基于《雷神之锤II》打造了名为Q2VKPT的项目,用VULKAN API为这款经典游戏加入了RTX光线追踪效果。随着该项目被NVIDIA官方吸纳,打造成了《雷神之锤II RTX》。《雷神之锤II RTX》相比最初的Q2VKPT相比增加了实时可控数量光线、精确日照与间接光照、水面与玻璃反射、可反射与半透明表面、武器粒子与光束特效、随光线实时变换的山脉天空云朵环境程序贴图、改进的降噪器、SLI支持、高细节武器模型与纹理、英伟达 Flow火焰烟雾例子特效等等。在加入了光线追踪效果后,画面质量都得到了提升。
2020年,AMD不仅在游戏中引入了对实时光线追踪的支持,而且还发布了RX 6000系列的三款GPU。与此同时,引入一些RDNA 2架构设计的关键元素来实现这一功能,为了提高光线追踪的性能,在核心计算单元设计中加入了光线加速器。2021年,Imagination将PowerVR Photon架构的光线加速集群(ray acceleration cluster,RAC)加入到C系列的GPU中,为手机市场提供光线追踪的IP技术。
为实现逼真的光线追踪视觉效果,英伟达于2023年12月推出了实时3D创作软件D5渲染器,拥有AI神经网络提供支持的DLSS超分辨率、帧生成和光线重建功能。该功能增强了光线追踪性能并提高了实时视窗帧速率,可带来更流畅的编辑体验,进而实现直观的交互式3D创建。
基本原理
光线追踪的原理是从观察者的角度出发,向场景中发射光线,找出这条光线与物体表面的相交点,并找出影响相交点光强的所有光源,从而算出相交点上精确的光线强度,最后结合相交点表面的材质算出屏幕上像素点的像素值。在计算图形学中,物体的表示方式以三角形面片最为普遍。所以判断射线与物体是否相交的核心,实际上可以演变为判断射线与三角形是否相交。
在光线追踪的运算过程中,需要运用到蒙特卡洛算法。蒙特卡洛算法是指随机的对样本进行抽取,来补给某个子样本运用到光线追踪中就是在渲染过程中,在空中随机抽取光线用来解决问题。光线追踪与光栅化不同,由于光线追踪是随机发射光线,这就会带来方差的问题,例如骰子六个点的平均数是3.5,当扔的次数越多,就越接近平均数;光线追踪也是同样的道理,当光线数量足够时,也能得到最终的主项。
关键技术
真实感图形显示的光线跟踪算法是一种典型的点采样技术,它用相互分离的像素点阵组合出图形,这样的图形与真实的景物之间不可避免地会存在误差。为此,可通过像素细分技术、像素的区域采样技术、降噪技术、神经网络结合的实时光线追踪技术等来提升图形的高频细节。
像素细分技术
判别像素点存在走样问题的规则是像素的某个角点的亮度与其余的三个角点的亮度相差太远,或四条光线之间有小物体存在,这时可把这个像素均匀地分割成四个小方块,于是又得到五个新的角点。注意到五个新的角点有四个被另外的像素点公用,实际上每个像素点平均只增加了三个新的角点。也就是说,每对像素进行一次分割就会增加三个采样点。对这五个新增加的采样点运用光线跟踪算法进行亮度求值后,和原来四个点的亮度值一起求平均,确定和比较这四个小方块的亮度值。
如果分割一次后仍然认为在某些像素点存在走样问题,则继续进行同样的分割和计算,直到认为不存在走样问题时为止。也可事先限定一个原始的像素点最大的追踪光线数,最后将这些小方块的亮度进行加权平均来求得这个相应的像素点的亮度值。
像素的区域采样技术
反走样显示场景的另一种方法是将像素光线看作一个锥体,这时每个像素虽仍然只生成一束光线,但是光线有一个有限的相交区域。锥体与相交的物体覆盖了像素区域的一定部分。按照像素点被相关物体覆盖部分的面积百分比,并以此面积百分比相应光线对应的光强的加权因子加权平均得出这个像素点的光强。
要想确定像素被物体覆盖部分的面积百分比,需通过计算像素锥体与景物表面的交点获得。对一个球而言,这就需要计算出两个圆周的交点;而对多面体而言,则需要求出圆周与多边形的交点。
像素光线也可看作是一个棱台锥体,要想确定像素被物体覆盖部分的面积百分比,需通过计算像素棱台锥体与景物表面的交点获得。求解的过程主要是要获得像素光线棱台锥体侧面的各平面与物体的交线。
降噪技术
随着GPU实时光线追踪解决方案的出现,在降噪领域的研究也逐步兴起。降噪技术主要是基于蒙特卡洛的渲染技术进行解决。蒙特卡洛渲染是基于随机样本的累积来近似给定场景光线追踪结果的算法。降噪技术主要包括滤波技术、机器学习驱动的滤波器、改进采样和近似技术等。滤波技术是在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制;机器学习驱动的滤波器能够帮助降噪网络生成更真实的高频细节和全局照明效果;改进采样能够在一定程度上解决渲染中的噪声,但无法从根本上解决噪声;近似技术可以通过光线追踪中的低频近似,为实时应用程序提供了质量和性能之间的理想平衡。
神经网络结合的实时光线追踪技术
基于神经网络的实时光线追踪技术可以用于降噪、图像的重构、神经辐射场优化、光线采样和图像超分辨率上采样等技术。在神经网络中,可采用RNN(recurrent neural network)和自动编码器的神经网络方式,提出一种适合蒙特卡洛渲染中噪声类别的网络变体,能够考虑更大的像系域,自动编码器可以完成图像的降噪和重构,也可利用卷积神经网络提出一种梯度域渲染重构方法,实验结果显著提高了光线追踪渲染中梯度域的质量,效果比使用其他降噪技术更优。
关键方法
包围体方法
在光线追踪算法中最耗时的工作是计算光线与物体的交点。利用最小包围体可以尽早排除可能与光线不相交的物体,从而减少计算工作量。然而,对包围体的选择也有一些限制,例如要根据物体的形状特点来选择包围体,使得包围体内尽量由被包围的物体充满,使得包围体在能完全包围物体的前提下尽可能得小,以便尽可能多地排除与被包围的物体不相交的光线。同时,包围体本身要求几何形状简单,一般为球体或长方体,与光线是否相交的判断比被包围的物体与光线是否相交的判断需简单得多。
空间分剖法
空间分剖法也是通过减少判断射线是否与物体相交的次数而提高算法效率的,可以将所有物体包含在一个立方体中,然后将立方体逐次分割,直至每个子立方体(体元)所包含的物体表面或表面数目小于等于一个预定的、可一次性处理的最大值为止。例如,可以要求每个体元中至多只包含一个表面。立方体的空间分割单元可以用一棵八叉树或一棵二叉分割树等KD树进行存储,通过该方法可以进行均匀分割,即每次将立方体分割为8个相同大小的体元;也可以采用适应性细分,即仅对包含物体的立方体区域进行分割。
其中KD树算法代表K维树,其概括了不同的树结构,如二叉树四叉树八叉树等,其中树的各节点将具有K个节点:二叉树为2个,四树为4个,八叉树为8个。其为排序的分层数据结构,用于查找高维空间中的最近邻。高维数据的主要问题之一是难以找到最近邻。
预处理法
预处理法是指在计算从像素发出的射线与物体的第一次相交的交点时,可以把所有的隐藏面排除在外。
综合方法
综合方法是指对空间分剖法和包围体法的综合运用,是先对包围所有物体的最小立方体进行分割,直到每个子立方体中包围的物体数不超过两个为止,再对立方体中的物体作包围体处理。
射线分类法
如果两条射线的起点和方向都比较接近,那么在它们的连续反射和透射过程中所遇到的表面很可能大多数是相同的。因此在计算出第一条射线的射线追踪树后,与之相近的射线可以先参照第一条射线的追踪树来建立自己的射线追踪树。例如,射线A在某次反射中与物体R相交,那么与射线A相似的射线B在与A同一深度的反射中可以首先判断是否与物体R相交,而不必从第一个物体开始逐个判断计算。具体的判定过程类似于多边形扫描线填充算法中相邻扫描线与多边形边的交点之间的连贯性判断,需要对有关处理对象进行分类,寻找相近的射线之间的关系。
相关算法
光线追踪基础算法
光线束遍历
光线束遍历是利用单指令多数据流架构,将多条光线当作一个光线束,调度到GPU的线程束(warp)或CPU的不同线程中进行处理,不同光线共享遍历栈。因此同一个光线束遍历的顺序是一致的。只要其中的一条光线与某个节点相交,那么整个光线束都遍历该节点的子树。该方式能够将二次光线分成阴影光线、反射光线和折射光线三种光线束来进行光线追踪,使光线束的组合更加合理,性能得到较大的提升。但是,该方式的性能会受到内存带宽的限制。
无栈遍历
无栈遍历算法是光线追踪中常用的技术。这种算法的提出源于GPU中有限的寄存器空间,栈的编程复杂度和定制化硬件单元有限的片上存储资源。无栈的遍历算法带来了两点好处:一是按照特定的格式构造加速数据结构在遍历时可以减少内存的访问;二是无栈的遍历算法在GPU平台可以提高并行度,提升计算性能。但通常需要在加速数据结构中设置标记位或进行冗余操作才可以完成无栈遍历。
简单光线追踪算法
简单光线追踪算法是按相反途径追踪光线,即从观察者到造型物体的方向追踪光线。在简单光线跟踪方法中,每条射线都要和所有物体求交,然后再对所得的全部交点进行排序,才能确定可见点。下图所示是一个最简单的光线追踪方法。设视点或观察者位于z轴正向的无穷远处,因此所有光线均平行于z轴,且不考虑透视变换。光线从观察者出发,通过光栅中象素的中心到达物体。然后沿光线路径进行追踪,以决定它与物体的哪一部分相关。每一光线均需与每一个物体以及物体的每一部分进行比较。如果相交,则需求出该光线与物体的所有可能的交点。
递归光线追踪算法
递归光线追踪是指每一次一条光线和物体的几个表面碰撞或相交,产生一条新光线,每一次的碰撞和相交叫一个递归。在镜面反射情况下总有一个主要反射方向,通过检查反射方向可以判断一个点是否能产生镜面高光。在考虑反射光的情况下,还要通过检查这个方向来判断是否还有其他光线能够在这一点产生出镜面高光。这样,通过递归使用光线追踪算法,投射出一个沿着反射光方向的射线,就可以完成反射光线对物体照明的判断。下图给出了一条从镜头(或视点)到光源的递归光线路径,其中一个漫反射表面向所有方向反射光线。
高级光线追踪算法
路径追踪算法
路径追踪算法的基本思想是从视点发出一条光线,光线与物体表面相交时根据表面的材质属性继续采样一个方向,发出另一条光线,如此迭代,直到光线打到光源上或逃逸出场景,然后用蒙特卡洛方法对场景进行路径采样,对每条光线路径的贡献值进行平均求和的蒙特卡洛积分计算。使用蒙特卡洛方法对积分的求解是无偏的,只要时间足够长,最终图像能收敛到一个正确的结果,但单向路径追踪渲染的短板是透明材质和焦散渲染。
双向路径追踪算法
双向路径追踪算法除了追踪视点投射光线的路径外,还追踪光源发射光线的路径,从视点和光源分别发出的光线,经过若干次反弹后,视点子路径和光源子路径上的顶点被连接起来,连接时需要测试可见性,以快速产生很多路径。这种方法能够产生单向路径追踪难以采样到的光路,所以能够很有效地降低噪声。双向路径追踪在间接光线丰富的空间环境中非常实用高效,在焦散渲染方面比单向路径追踪更好、更快,但还存在一些问题,如在一些镜面反射和漫反射表面场景中的控制不好,例如,在被玻璃封闭的汽车或建筑空间内出现亮斑。
光子映射
光子映射方法是一种两遍的全局光照算法。在第一遍渲染中,光向场景中发射光子,并在场景中追踪每一个有效光子,将符合条件的光子的能量、轨迹以及接触表面的信息存储在一种叫做光子图(Photon Map)的数据结构中,这个过程称之为光子追踪(Pholon Tracing)。第二遍渲染则是从视点出发向场景中发出光线并跟踪此光线,得到光线与场景相交的采样点,在光子图中搜索与采样点邻近的k个光子,根据k个邻近光子和采样点信息计算图像平面上相应点的颜色即进行辐射评估,并生成最终的图像。
光线优化算法
光线重排序
光线追踪由于漫反射和光泽反射会产生不连续的光线。光线束的遍历方法也需要连续的光线才能够保证高性能。此外不连续的光线会造成更高的内存带宽、更高的缓存缺失率和计算分支。光线重排序的方法可以将多维光线空间映射到使用标准排序算法排序键的一维空间中,能够在一定程度上缓解这一问题。
多分支BVH
为了解决非连续光线的问题,研究人员提出了多分支(wide)BVH的概念,该方法在每次遍历时只处理一条光线,在遍历某个节点时,加载某个子节点数据的同时,光线可以同时跳去处理另外一个子节点,这样的方式可以隐藏访存延时。随着子节点变宽,树的节点变小,栈的深度也减少。如果所有子节点的序号是连续的,那么栈只需要记录第一个序号和有效子节点的数量即可,因此也可以起到节省栈内存的作用。
算法变体
锥体追踪
锥体追踪是射线追踪技术的一种改进,它使用光线的锥形区域而不是单根射线,目标在于减少总的计算次数。锥体追踪解决了与采样和混叠相关的某些问题,这些问题会影响传统的光线追踪技术。然而,锥体追踪本身也产生了许多问题。例如,仅仅将圆锥与场景几何体相交就会导致多种可能的结果。出于这个原因,锥体追踪基本上不受欢迎。后来,蒙特卡洛算法的出现,如分布式光线追踪即随机显式像素积分的使用比锥体追踪更广泛。
差分锥体追踪考虑到光束周围的差分角邻域,避免了精确几何切割的复杂性,但需要对物体的几何形状和外观进行LOD表示。Mip映射是一种近似值,仅限于锥体覆盖区内表面结构的积分。差分光线追踪扩展到通过曲面反射或折射的锥体复杂路径查看的结构化表面。
光束追踪
光束追踪算法的基本思路是将一定直径的激光束离散成n条光线,每条光线携带一定的能量。从光束出发的地方开始追踪光线,当搜索到工件界面时,该光束将一部分能量传递给工件,另一部分能量根据界面形貌发生反射,形成新的不同方向的光线,用同样的方法追踪新的光线。一种多重反射示意图如下所示。
分布式光线追踪
分布式光线追踪又称随机光线追踪,随机算法就是指在采样不全时,通常不能保证找到最优解,只是尽量找,根据追求结果高质量和解决高效性的不同侧重,可以把随机算法分成两类:一类是蒙特卡洛算法,采样越多,越近似最优解,尽量找好的,但不保证是最好的;另一类是拉斯维加斯算法,采样越多,越有机会找到最优解,尽量找最好的,但不保证能找到。如果问题要求必须给出最优解,但对采样没有限制,那就用拉斯维加斯算法。对于机器围棋程序而言,因为每一步棋的运算时间、堆栈空间都是有限的,而且不要求最优解,所以,机器围棋涉及的随机算法是蒙特卡洛式。蒙特卡洛和拉斯维加斯也是两座著名赌城的名字,因为赌博中体现了许多随机算法,所以借此命名。
光线投射算法
构造实体几何法存在的主要问题是求交困难,解决该问题的主要方法是采用光线投射(Ray-casting)算法。该算法的核心思想是从显示屏(投影平面)的每一个像素位置发射一根光线(射线),求出射线与距离投影平面最近的可见表面的交点和交点处的表面法矢量,然后根据光照模型计算出表面可见点的色彩和亮度,生成实体的光栅图形。该算法的关键之处在于确定光线与距离投影平面最近的可见表面的交点,这可以通过集合成员分类算法实现。
优点与局限
优点
真实性:光线追踪技术能够模拟光源和环境入射光在物体表面产生的镜面反射、折射和阴影,从而生成各种逼真的视觉效果。这种技术综合考虑了消隐、浓淡、阴影、色彩等真实性技术,适用于各种物体造型。
高效率渲染:随着GPU计算能力的增强和存储容量的不断增加,光线追踪越来越为人们所重视。通过采用基于CUDA的光线追踪算法,可以利用GPU的并行处理能力,同时结合KD-Tree加速相交测试过程,最终提高仿真场景的渲染速度。
精确的阴影和光照效果:光线追踪技术能够实现精确的阴影和光照效果,这对于提升场景的真实感至关重要。例如,与其他现代精确阴影技术相比,光线追踪被认为是最快且易于实现的方法之一,具有较小的内存占用。
适用于复杂场景:光线追踪技术不仅适用于简单的场景,也能够处理复杂的场景。通过采用改进的算法和加速技术,如基于环境映照变换的快速光线跟踪算法,可以实时生成镜面反射效果和折射效果,即使在复杂的场景中也能保持高效率和高质量的渲染效果。
局限性
走样问题:光线跟踪是基于点采样技术,使用独立的像素点来生成图像,这可能导致与真实景象的误差。例如,渲染的直线可能出现锯齿状,而小物体可能无法正确显示。
尖锐阴影:基本的光线追踪算法模拟点光源,通常只能产生尖锐的阴影,不具备柔和阴影的能力。
局部光照和着色:算法通常只追踪有限数量的光线,通常仅考虑四种光线类型,而物体间的漫反射光未被包括,导致全局光照效果的缺失。
噪点问题:光线追踪渲染中常见的噪点主要由样本数量不足引起。少量的样本会导致高方差,进而产生噪点,而大量的样本则可以减少方差,使得结果更加接近预期值。
效率问题:光线跟踪的主要缺陷是其低效率,因为它需要进行大量的计算。与传统的光栅图形学算法不同,光栅图形学可以在像素间共享计算,提高效率。光线跟踪则需要为每条光线独立计算,虽然这有助于避免混叠现象,提高图像质量,但其计算需求远超当时的计算硬件能力。尽管光线跟踪致力于模拟真实环境,但受限于计算资源,它无法完全实现物理上的渲染方程。
平台工具
应用领域
影视
光线追踪技术主要应用于动画与离线视频生成系统。空间数据结构让光线追踪可以向实时渲染发展。空间数据结构被应用于场景图像以减少光线投射和图元结构(如三角形、圆、隐式曲面等)相交过程消耗的时间。因为屏幕光线像素的计算可以分布到并行计算单元,所以光线追踪具有高度并行性。电影工业使用渲染集群(Render Clusters)以生成复杂的光线追踪电影场景。
游戏
光线追踪技术在游戏领域中,可以创造表现效果更强的图像,而且还会对游戏玩法产生根本性的影响。光线追踪技术通过模拟光线的传播,电脑只渲染光线打到的地方,因此仅需要很少的人工编程,相比于光栅式渲染简便了很多。同时光线追踪也能表现出更真实的画面,在光影效果的表现上更强,尤其是符合物理规律的光影效果。支持光线追踪的游戏包括《赛博朋克2077》《看门狗:军团》《使命召唤:现代战争》《重生:边缘》和《光明记忆》等。
工程建设
光线追踪改变了一些专业领域的设计流程,比如在建筑、工程以及施工行业(AEC)上。通过加入光线追踪技术,设计师可以通过类似电影画质的实时渲染来增强创造力,实现更佳的效果。与客户在房间中探索设计,对照明和材料进行实验和测试并实时调整,从而准确模拟真实世界的光线条件。人们可以看到全局照明的实时效果。在建模渲染方面,光线追踪技术被视作AEC行业的重要突破。设计完成的工程图纸,经过GPU分析后,结合材质、光照条件以及物品形状等参数,就可以再进行渲染建模实时模拟展现实际情况。同时,经过更改的参数也会在渲染中自动发生变化,实现所见即所得,并提高人机交互效率。强调浸入感的虚拟现实(VR)也成为了光线追踪的应用方向,而提高渲染效果带来的好处是,将更有利于提高AEC行业的协同办公工作效率。
计算机图形学
在计算机图形学中,光线跟踪是一种生成高度逼真图像的技术,是显示三维物体的最有效方法之一。它对计算量的要求使得它在一些有较多交互性要求的任务中的可用性大大降低。若将场景视觉效果放在首要位置,而又没有交互性存在时,这种方法是非常有效的。
无线通信领域
在无线通信领域,光线追踪用于模拟无线信号的传播。自20世纪90年代初以来,光线追踪模型已经被用于移动无线系统中的场预测和信道模拟,并且随着算法效率的提高和应用能力的增强,其在无线通信领域的应用前景广阔。
物理学和工程领域
在物理学和工程领域,光线追踪常用于模拟光波的传播和相互作用。这包括地震层析成像研究中的三维光线追踪方法,该方法通过改进计算过程中的关键步骤,提高了精度和速度。此外,光线追踪方法也被应用于地震波反演及偏移成像等过程,对于地震波理论研究具有重要意义。
医学
医学图像的三维可视化即采用数字化成像技术,获取人体有关部位的扫描图像,通过三维重建技术恢复人体相关部位的三维结构,获得传统手段无法获得的结构信息。三维可视化方法主要包括预处理和绘制技术。按图像顺序体绘制,也称为光线追踪,即确定图像平面上的某个像素值,按照当前参数,射出一条通过该像素并穿透体数据集的光线,沿光线计算所遇到的数据,显示像素值。
发展方向
长期以来,基于光线追踪的物理渲染被视为提升视觉体验的最有效方法,但是由于过大的计算强度限制了其在实时应用领域的使用。近年来,随着算法研究和硬件技术的发展,已经处于传统光栅化渲染方式到消费者平台实时光线追踪的转折点。但是,基于实时光线追踪的研究还未结束,该领域还有一些关键性的问题有待进一步研究。
提升图像真实感:在图像真实感方面,光线追踪的模型是基于理想模型做光线路径的模拟,由于真实场景中光线的折射会造成能量损失,距离完全真实地描绘3D场景还具有一定差距。如果要更进一步地模拟光线的传递,还需要考虑辐射度量学的内容。除此之外,纹理空间技术(texture space techniques)、可变速率光线追踪(variable rate ray tracing)等提升图像真实感技术如何与光线追踪技术相结合可能是后续研究的重点方向。
优化算法和硬件:在算法和硬件优化方面,神经网络技术与实时光线追踪结合愈发紧密,在降噪处理、图像重构和超分辨率等方面发展迅速,下一步可能会推动人们进入神经网络渲染的新时代。利用定制的高效光线重排序硬件或者近存计算等会成为实时光线追踪进一步发展的突破口。此外,同样值得研究的是光线追踪硬件是否可以推广到其他不规则应用程序的架构中,可以充分发挥现代光线追踪GPU架构的优势。
相关对比
光线追踪是一种图像合成技术,它通过模拟光线与物体表面的交点来实现图像的绘制。光栅化是把顶点数据转换为片元的过程,具有将图转化为一个个栅格组成的图象的作用。光线追踪和光栅化渲染作为两种常见的计算机图形学渲染技术,适用于不同的应用场景,光线追踪和光栅化渲染有以下几点不同:
目录
概述
相关概念
基础概念
数学概念
历史沿革
起源
算法丰富阶段
开发利用阶段
基本原理
关键技术
像素细分技术
像素的区域采样技术
降噪技术
神经网络结合的实时光线追踪技术
关键方法
包围体方法
空间分剖法
预处理法
综合方法
射线分类法
相关算法
光线追踪基础算法
光线束遍历
无栈遍历
简单光线追踪算法
递归光线追踪算法
高级光线追踪算法
路径追踪算法
双向路径追踪算法
光子映射
光线优化算法
光线重排序
多分支BVH
算法变体
锥体追踪
光束追踪
分布式光线追踪
光线投射算法
优点与局限
优点
局限性
平台工具
应用领域
影视
游戏
工程建设
计算机图形学
无线通信领域
物理学和工程领域
医学
发展方向
相关对比
参考资料