搜档网
当前位置:搜档网 › 光线跟踪算法

光线跟踪算法

光线跟踪算法
光线跟踪算法

光线跟踪算法的研究与进展

刘进

摘要:光线跟踪算法是图形绘制技术中的经典算法,但是该算法光线与物体的求交量庞大,严重制约着应用。本文从经典的光线跟踪算法出发,研究了目前光线跟踪算法的国内外研究状况,具体从改进的光线跟踪算法和光线跟踪算法的加速技术,并进行了对比和分析。最后对近几年的光线跟踪方法发展进行了总结,对未来研究热点及应用前景进行了展望。

关键词:可视化;光线跟踪算法;并行绘制;GPU

Research Status and Prospect for ray tracing algorithms

Abstract: As an classic algorithms of volume rendering in computer graphics, ray tracing algorithms is hindered by the huge computation cost in ray and volume. This paper summarizes the research status in ray tracing technology from the two main solutions: different extended ray tracing algorithms and the acceleration techniques in ray tracing algorithms. Comparison and analysis the different performance. Both current research focus and the future research prospect are also discussed in recent years.

Key words: visualization; ray tracing algorithms; parallel rendering; GPU

引言

随着科学技术和计算机高速发展,人类已经进入到一个科技支撑的时代,在我们的生活中到处充满了高科技产品和技术,给我们的生活带来了改变和方便,其中计算机图形学的应用已经渗透到了各个工程技术领域,其已经成为计算机科学的重要学科之一,具有相当的重要性和无可替代的作用。计算机图形学自诞生以来得到了飞速发展,其通过计算机的输入设备、显示设备及绘制设备等对图形的表示、绘制、存储、显示等相关理论知识、算法技术进行研究的一门学科。真实感图形绘制是计算机图形学的主要研究内容之一,在虚拟现实、文物保护、影视游戏、三维动画、医学研究、建筑设计和系统仿真等领域中得到广泛应用,它追求对场景的逼真渲染[1]。其中逼真的图形绘制技术是最为活跃的研究领域之一。

光线跟踪算法是真实感图形绘制技术的主要算法之一,其原理简单,能够有效生成具有比较真实视观效果的各种各样的场景。该算法可通过一些光照明模型模拟在光源或环境光照射下物体表面发生的多种光照效果,例如漫反射、高光、镜面映像、场景消隐及阴影等。在计算机中对现实场景或是虚拟场景进行显示,除了要构建场景图形外,还要将场景中的各种光照效果模拟出来,这样生成的场景才能更逼真,光线跟踪算法就是既在几何上相似,也能模拟出大部分的光照效果的生成真实感图形的方法。光线跟踪算法是逆着真实光线的投射方向进行反向跟踪的,从视点向场景发射光线,光线与场景中的物体相交,计算光分量,因为视点向场景的光线较多,因而该算法光线与物体的求交量较大,但是因为其对场景的模拟的逼真,及其可以模拟漫反射、镜面反射、反射折射以及阴影等光照效果[1-2]。

进入90年代,随着计算机技术的发展,光线跟踪技术广泛应用于三维特技电影、电视广告、电子游戏的制作中,其应用领域也正在向如物理、化学、生物等其他学科领域渗透,其应用的范围正不断扩大,很多基于光线跟踪算法的新理论也应运而生,物理学中的相对论、地理中地层的绘图等与光线跟踪算法相结合的研究已经实现,极大的推动其学科的发展。可

以说它已经与我们的生活息息相关了,因此对光线跟踪进行研究具有很现实的重要意义[1-3]。

1.光线跟踪算法原理

对光线跟踪算法研究最早可以追索到1968 年,Appel 等在对消除隐藏面的研究时运用的光线投射算法,在原理上第一次描述了光线跟踪算法。1979年,Kay与Greenberg对光的折射进行了研究,直到1980年,Whitted综合考虑了多种光照效果,模拟出了漫反射、镜面反射、高光、反射折射以及阴影等光照效果,提出了第一个整体的光照明模型——Whitted 模型[4]。

光线跟踪思路:从视点出发,通过图像平面上每个像素中心向场景发出一条光线,光线的起点为视点,方向为像素中心和视点连线单位向量。光线与离视点最近的场景物体表面交点有三种可能:

1.当前交点所在的物体表面为理想漫射面,跟踪结束。

2.当前交点所在的物体表面为理想镜面,光线沿其镜面发射方向继续跟踪。

3.当前交点所在的物体表面为规则透射面,光线沿其规则透射方向继续跟踪。

图1 三个半透明玻璃球场景跟踪图

如图1中,场景中有三个半透明玻璃球,视点发出光线与场景最近交点为P1,使用任意局部光照模型可以计算出P1点处的局部光亮度Ilocal,为了计算周围环境在P1点处产生的镜面发射光和规则折射光,光线1在P1点处衍生出两支光线:反射光2和折射光3。P1处的光照由三部分组成:

I local + k s * I2 + k t * I3(1)

其中:I3 为折射光线3的颜色,K t为折射率,I2为反射光线2的颜色,K s为反射率,I3和I2 的计算需要递归。

我们知道光源向其四周发射出数不清的光线,从光源对光线进行跟中是永远也跟踪不完的。而光源发出的光线进入人眼的只有少部分直接或是通过场景中的物体表面之间的折射和反射后间接地射入观察者眼中。所以,标准的光线跟踪算法是逆着射入观察者眼中的光线进行跟踪的方法来完成整个跟踪过程的。在光线跟踪的过程中选定视点,将一个与视点位置相当的平面矩形区域当做显示屏幕,将显示屏幕均匀网格划分,每一个网格表示显示屏幕的一个像素,从视点向像素网格中心引射线作为跟踪光线进行跟踪,跟踪该光线得到的光亮度就是显示屏幕对应的像素的光亮度,所有像素点组成场景图形[5]。

光线跟踪的流行来源于它比其它渲染方法如扫描线渲染或者光线投射更加能够现实地模拟光线,象反射和阴影这样一些对于其它的算法来说都很难实现的效果,却是光线跟踪算法的一种自然结果。光线跟踪易于实现并且视觉效果很好,所以它通常是图形编程中首次尝试的领域。光线跟踪的一个最大的缺点就是性能,扫描线算法以及其它算法利用了数据的一致性从而在像素之间共享计算,但是光线跟踪通常是将每条光线当作独立的光线,每次都要重新计算。但是,这种独立的做法也有一些其它的优点,例如可以使用更多的光线以抗混叠现象,并且在需要的时候可以提高图像质量。尽管它正确地处理了相互反射的现象以及折射等光学效果,但是传统的光线跟踪并不一定是真实效果图像,只有在非常近似或者完全实现渲染方程的时候才能实现真正的真实效果图像。由于渲染方程描述了每个光束的物理效果,

所以实现渲染方程可以得到真正的真实效果,但是,考虑到所需要的计算资源,这通常是无法实现的。于是,所有可以实现的渲染模型都必须是渲染方程的近似,而光线跟踪就不一定是最为可行的方法。包括光子映射在内的一些方法,都是依据光线跟踪实现一部分算法,但是可以得到更好的效果[5-6]。

2光线跟踪算法及扩展算法

光线跟踪算法通过模拟光的传播方式,即光从光源出发经过若干次反射或折射到达摄像机的过程来实现全局光照效果。其思想起源于光线投射算法[5]。目前,国内外对光线跟踪算法的研究大部分处于理论研究的水平,集中在对光线跟踪算法的加速,而对于光线跟踪算法在生产生活和科学研究中的应用还是较少的,还处于起步阶段。针对标准的光线跟踪算法的不足,研究者提出了很多基于标准光线跟踪算法的改进算法。

Cook等[7]提出分布式的光线跟踪算法,根据分布函数进行采样而产生一定方向分布的光线,并在场景中进行跟踪而产生运动模糊、景深、半影和模糊反射等光照效果。Kajiya 等[8]提出基于分布式光线跟踪的层次采样算法,它适应具有广泛多样性的基于蒙特卡洛方法的光线跟踪。Mitchell[9]将图像的非均匀采样方法应用到高维的分布式的光线跟踪算法中。Walter等[10]通过对光源进行聚类生成相应的树状结构,对多种光源进行光线跟踪,产生丰富的视觉效果。Hachisuka等[11]提出光线跟踪的多维自适应采样与重建技术,通过多维函数的综合进行分布式的绘制效果。在具有复杂的漫反射和镜面反射成分表面的场景中,Ward等[12]提出一个计算全局光照效果的有效方法,即在绘制阶段用蒙特卡洛方法计算间接光照并将其保存起来,提高计算效率。Lafortune等[13]提出双向的路径跟踪算法,即先从人眼与光源两个方向发射光线并在场景中进行分布式跟踪,然后进行光照计算,达到增强室内间接光照的绘制效果的目的。Lafortune等[14]描述了种的全局反射分布函数的概念,通过简化光照模型,对射能量和聚集能量进行卡洛绘制方法,提高成像效果。Veach等[15]对优化的光线方向进行采样而计算光照,在增加少量的计算成本下提高成像效果。Veach等[16]提一种新的蒙特卡洛光线跟踪算法,根据光线跟踪的路径对场景中明亮的区域进行密集采样,对多维采样空间进行自适应采样。M?ller等[17]提出高效的并且所需内存空间最小的光线与三角形的求交算法;Kajiya [18]和Toth[19]分别提出了光线与参数表面的求交算法;Hanrahan [20]提出光线与代数曲面的求交算法;Hart等[21]提出光线与确定性的不规则碎片形表面的求交算法;Knoll等[22]提出高效的光线与代数隐式曲面的求交算法;Heckbert等[23]提出光柱和网格模型的求交算法;Amanatides [24]提出光锥和三维模型的求交算法。Reshetov[25]提出以层次性的光束作为光线集合的代理,实现多级的光线跟踪算法,能极大减少计算量并且能严格保证了方案的几何正确性。Moon等[26]提出光线跟踪的光线重新排序的缓存算法,能有效地匹配光线跟踪中各级缓存的数据,极大地提高了光线跟踪效率,特别就无法全部载入内存的大规模的三维模型而言。Mora[27]提出基于分而治之策略的光线跟踪算法,即在空间细分时直接计算光线与场景的交点,无需存储相关的数据,大大提高动态场景的绘制效率。Hou等[28]提出高效的基于微三角形的光线跟踪的重用算法。

光线跟踪算法简洁灵活且修改移植方便,绘制结果真实感程度高,绘制速度慢一直是一个严峻的问题。对此人们提出了许多改进的算法来加快绘制速度,但由于体数据庞大,单纯的算法改进越来越难以满足现在的需求,随着图形处理器的迅速发展,因此人们开始将目光转向图形硬件,希望借助硬件来实现光线跟踪体绘制,提高实际应用价值。

3基于加速技术的光线跟踪法

光线跟踪需要完成大量的光线与场景的求交测试运算,所以求交计算构成了光线跟踪算

法的瓶颈,因此,要提高光线跟踪的效率就必须提高光线与场景的求交测试效率。近几年,快速发展的图形处理器GPU强大的并行处理能力和高精度的浮点运算能力使得越来越多的应用研究开始利用GPU来完成[29]。目前基于GPU的光线跟踪、交互式体绘制技术是国内外研究热点。

Purcell[30]首先提出完全基于GPU的光线跟踪算法,成为一些基于GPU的光线跟踪渲染器的基础。Cullip等首先将体数据沿投影轴进行切片依次装入GPU纹理内存,在体数据内定义代理几何体元进行重采样、颜色合成等操作。Meiner[31]采取压缩纹理的方式以提高速度,但影响绘制结果准确度。Kruger[32]在GPU上进行光线投射绘制时,将与光线相交的体元从纹理表中取出,计算并更新其透明度和颜色值,利用片段着色沿光线方向采用步进法完成采样进行最终绘制。Chen[33]使用视点相关的层次采样将面向多边形绘制的图形引擎转化为体光线投射算法引擎,提供了基于GPU的一种新的体光线投射绘制方法。Singh等[34]在GPU 上实现了实时的光线与代数隐式曲面的求交算法。Zhou等[35]通过在图形硬件上实现光线跟踪的加速结构k-d树的实时构造,以现对动态场景进行实时地光线跟踪。Woop[36]研制的可编程光线处理芯片RPU(ray processing unit)可用来实时光线跟踪动态绘制复杂的几何场景,达到了理想的交互绘制速度。

在加速光线跟踪体绘制技术中,另一种有效地方法是采用并行技术,利用多个处理单元,将整个绘制任务合理地分成若干个子任务提供给若干个绘制单元分别进行绘制,最后将每个绘制单元得到的结果进行拼接或是合成得到最终的绘制结果,以达到负载均衡和加速绘制的目的。Pfister等[37]给出的Cube4系统是一个比较成功并行体系结构的设计,它能在30帧/秒速率下实现512 级大小数据场的实时绘制, Knitel等[38]提出将体数据内存组织成8个可同时访问的内存模块,以支持三线性插值计算中对8个相邻体素的同时存取。2010年等人在文献[39]采用的就是层次包围体加速结构"它将标准的光线跟踪算法分解为一些可以数据并行的多个阶段,采用的是广度优先遍法将这些并行阶段能有效地映射到GPU的并行结构上。

4总结和讨论

光线跟踪算法是计算机图形学中生成真实感图形的核心算法之一,它的研究和应用一直是计算机图形学研究的热点。本文着重论述了国内外体光线跟踪算法、加速的光线跟踪绘制技术等,并讨论了各自特点及其相互联系。目前,基于硬件加速的光线跟踪绘制技术应用越来越广泛,但是如何构造有效的数据结构以及高效的遍历算法一直是研究的重点,使这些数据结构和算法能够在硬件上达到优化配置,如何充分发挥图形硬件的功能、实时生成真实感强的图像将是今后的重点研究方向。随着强大的可编程性GPU高端图形卡的和并行可视化技术的不断发展,具有高度真实感的实时可视化技术将会应用得越来越广泛。

参考文献

[1] 张少帅. 真实感图形中光线跟踪算法及其加速技术的研究[D]. 西安电子科技大学, 2008.

[2] 裴雪飞. 光线跟踪体绘制算法的研究[D]. 燕山大学, 2007.

[3] 周鹏. 基于光线跟踪的真实感全局光照问题研究[D]. 山东大学, 2012.

[4] Whitted T. A scan line algorithm for computer display of curved surfaces[J]. ACM SIGGRAPH Computer Graphics, 1978, 12(SI): 8-13.

[5] 彭群生、鲍虎军、金小钢编著. 计算机真实感图形的算法基础[M]. 北京:科学出版社,1999,6

[6] 蔡勋, 曾亮, 刘光国. 光线跟踪方法在体绘制中的应用与发展[J]. 计算机工程与设计,

2009 (21): 4956-4959.

[7] Robert Cook, Thomas Porter, and Loren Carpenter Distributed Ray Tracing. Computer Graphics (Proceeding of SIGGRAPH 84), 18(3):137-144, 1984.

[8]Kajiya J T. The rendering equation[C]//ACM Siggraph Computer Graphics. ACM, 1986, 20(4): 143-150.

[9]Mitchell D P. Spectrally optimal sampling for distribution ray tracing[J]. ACM SIGGRAPH Computer Graphics, 1991, 25(4): 157-164.

[10]Walter B, Drettakis G, Parker S. Interactive rendering using the render cache[M]//Rendering techniques’ 99. Springer Vienna, 1999: 19-30.

[11] Hachisuka T, Jarosz W, Weistroffer R P, et al. Multidimensional adaptive sampling and reconstruction for ray tracing[C]//ACM Transactions on Graphics (TOG). ACM, 2008, 27(3): 33.

[12] Ward G J, Rubinstein F M, Clear R D. A ray tracing solution for diffuse interreflection[J]. ACM SIGGRAPH Computer Graphics, 1988, 22(4): 85-92.

[13] Lafortune E P, Willems Y D. Bi-directional path tracing[C]//Proceedings of CompuGraphics. 1993, 93: 145-153.

[14] Lafortune E P, Willems Y D. A 5D tree to reduce the variance of Monte Carlo ray tracing[M]//Rendering Techniques’ 95. Springer Vienna, 1995: 11-20.

[15] Veach E, Guibas L J. Optimally combining sampling techniques for monte carlo rendering

[C]. Computer Graphics Proceedings, Annual Conference Series, 1995: 419–428.

[16]Veach E, Guibas L J. Metropolis light transport [C]. Computer Graphics Proceedings, SIGGRAPH 97, 1997: 65-76.

[17]M?ller T, Trumbore B. Fast, minimum storage ray-triangle intersection [J]. Journal of Graphics Tools, 1997, 2(1): 21-28.

[18] Kajiya J T. Ray tracing parametric patches [J]. Computer Graphics, 1982, 16(3): 245-254.

[19] Toth D L. On ray tracing parametric surfaces [J]. Computer Graphics, 1985, 19(3):

171-179.

[20] Hanrahan P. Ray tracing algebraic surfaces [J]. Computer Graphics, 1983, 17(3): 83-90.

[21] Hart J C, Sandin D J, Kauffman L H. Ray tracing deterministic 3-D fractals [J]. Computer Graphics, 1989, 23(3): 289-296.

[22] Knoll A. Ray tracing implicit surfaces for interactive visualization. PhD Thesis, University of Utah, May 2009.

[23] Heckbert P S, Hanrahan P. Beam tracing polygonal objects [J]. Computer Graphics, 1984, 18(3): 119-127.

[24] Amanatides J. Ray tracing with cones [J]. Computer Graphics, 1984, 18(3): 129-135.

[25] Reshetov A, Soupikov A, Hurley J. Multi-level ray tracing algorithm [J]. ACM Transactions on Graphics, 2005, 24(3): 1176-1185.

[26] Moon B, Byun Y, Kim T-J, Claudio P, Kim H-S, Ban Y-J, Nam S W, Yoon S-Eui. Cache-oblivious ray reordering [J]. ACM Transactions on Graphics, 2010, 29(3): 1-10.

[27]Mora B. Naive ray-tracing: A divide-and-conquer approach [J]. ACM Transactions on Graphics, 2011, 30(5): 1-12.

[28] Hou Q M, Zhou K. A shading reuse method for efficient micropolygon ray tracing [J]. ACM Transactions on Graphics, 2011, 30(6): 1-8.

[29] 柳有权, 张曼. 光线跟踪算法的加速技术研究[J]. 计算机与数字工程, 2013, 41(6): 863-865.

[30]Purcell T J, Buck I, Mark W R, et al. Ray tracing on programmable graphics hardware[C]//ACM Transactions on Graphics (TOG). ACM, 2002, 21(3): 703-712.

[31] Meiner M,Guthe S,Strasser W.Interactive lighting models and pre-integration for volume rendering on PC graphics accelera-tors[C].Proceedings of Graphics Interface,2002:209-218. [32]Kruger J, Westermann R. Acceleration techniques for GPU-based volume rendering[C]. Proceedings of IEEE Visualization, 2003:114-121.

[33] 陈为,彭群生,鲍虎军.视点相关的层次采样:一种新的硬件加速体光线投射算法[J].软件学报, 2006,17(3):587-601.

[34]Singh J M, Narayanan P J. Real-time ray tracing of implicit surfaces on the GPU[J]. Visualization and Computer Graphics, IEEE Transactions on, 2010, 16(2): 261-272.

[35] Zhou K, Hou Q M, Wang R, Guo B N. Real-time KD-tree construction on graphics hardware [J]. ACM Transactions on Graphics, 2008, 27(5): 1-11.

[36] Woop S, Schmittler J.RPU:A programmable ray processing unit for real time ray tracing[C].Proceedings of ACM SIGGRAPH, 2005:221-226.

[37] Pfister H, Kreeger K A, Marks J W, et al. Temporal and spatial coherent ray tracing for rendering scenes with sampled and geometry data: U.S. Patent 6,556,200[P]. 2003-4-29.

[38] Knittel J, Schnieder L, Buess G, et al. Endoscope-compatible nonlocal microscope using a gradient index-lens system[J]. Optics Communications, 2001, 188(5): 267-273.

[39]Garanzha K, Loop C. Fast Ray Sorting and Breadth‐First Packet Traversal for GPU Ray Tracing[C] //Computer Graphics Forum. Blackwell Publishing Ltd, 2010, 29(2): 289-298.

室内设计经典布光思路及灯光讲解

室内设计经典布光思路及灯光讲解 有个著名而经典的布光理论就是“三点照明”。笔者在此简述一 下:三点照明,又称为区域照明,一般用于较小范围的场景照明。如果场景很大,可以把它拆分成若干个较小的区域进行布光。一般有三盏灯即可,分别为主体光、辅助光与背景光。 主体光:通常用它来照亮场景中的主要对象与其周围区域,并且担任给主体对象投影的功能。主要的明暗关系由主体光决定,包括投影的方向。主体光的任务根据需要也可以用几盏灯光来共同完成。如:主光灯在1 5度到30度的位置上,称顺光;在45度到90度的位置上, 称为侧光;在90度到120度的位置上成为侧逆光。主体光常用聚光灯来完成。笔者喜欢把主体光的亮度设置为240左右。辅助光: 又称为补光。用一个聚光灯照射扇形反射面,以形成一种均匀的、非直射性的柔和光源,用它来填充阴影区以及被主体光遗漏的场景区域、调和明暗区域之间的反差,同时能形成景深与层次,而且这种广泛均匀布光的特性使它为场景打一层底色,定义了场景的基调。由于要达到柔和照明的效果,通常辅助光的亮度只有主体光的 5 0%-80% 背景光:它的作用是增加背景的亮度,从而衬托主体,并使主体对象与背景相分离。一般使用泛光灯,亮度宜暗不可太亮。 布光的顺序是:1)先定主体光的位置与强度;2)决定辅助光的强度与角度;3)分配背景光与装饰光。这样产生的布光效果应该能达到主次分明,互相补充。布光还有几个地方需要特别注意:1)灯光宜精不宜多。过多的灯光使工作过程变得杂乱无章,难以处理,显

示与渲染速度也会受到严重影响。只有必要的灯光才能保留。另外要注意 灯光投影与阴影贴图及材质贴图的用处,能用贴图替代灯光的地方最好用贴图去做。例如要表现晚上从室外观看到的窗户内灯火通明的效果,用自发光贴图去做会方便得多,效果也很好,而不不要用灯光去模拟。切忌随手布光,否则成功率将非常低。对于可有可无的灯光,要坚决不予保留。 2)灯光要体现场景的明暗分布,要有层 次性,切不可把所有灯光一概处理。根据需要选用不同种类的灯光,如选用聚光灯还是泛光灯;根据需要决定灯光是否投影,以及阴影的浓度;根据需要决定灯光的亮度与对比度。如果要达到更真实的效果,一定要在灯光衰减方面下一番功夫。可以利用暂时关闭某些灯光的方法排除干扰对其他的灯光进行更好地设置。 3)要知道max中的灯光是可以超现实的。要学会利用灯光的“排除” 与“包括”功能,绝对灯光对某个物体是否起到照明或投影作用。例如要模拟烛光的照明与投影效果,我们通常在蜡烛灯芯位置放置一盏泛光灯。如果这盏灯不对蜡烛主体进行投影排除,那么蜡烛主体产生在桌面上的很大一片阴影可能要让我们头痛半天。在建筑效果图中,也往往会通过“排除”的方法使灯光不对某些物体产生照明或投影效果。 4)布光时应该遵循由主体到局部、由简到繁的过程。对于灯光效果的形成,应该先调角度定下主格调,再调节灯光的衰减等特性来增强现实感。 最后再调整灯光的颜色做细致修改。 灯光的分类及其属性 在3DMA中,灯光分为标准灯光与光度学灯光,还有制作室内效果图

光线跟踪讲解及源代码

计算机图形学期末作业 作业题目:Ray Tracing算法的实现 姓名:李海广 学号:S130201036 任课教师:秦红星

摘要 Ray Tracing算法又叫光线跟踪算法,它能通过递归方法逐个计算每个像素点的光强,然后就可以绘制出高度真实感的图像,因此该方法在图形学领域得到了广泛的应用。Ray Tracing算法的思想还能应用到移动通信终端定位领域,该领域里的射线跟踪法与此算法思想类似。MFC是微软公司提供的一个类库,以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。MFC在处理Windows窗口应用程序方面具有很大的优势,因此,本文使用MFC在VC6.0里实现Ray Tracing算法,并给出了该算法的详细讲解。 【关键词】Ray tracing 光线跟踪递归像素光强 MFC C++

目录 1.Ray Tracing算法概述 (1) 1.1Ray Tracing算法简介 (1) 1.2Ray Tracing算法的实现原理 (1) 2.Ray Tracing算法的具体实现 (2) 2.1算法的实现环境 (2) 2.2实现算法的C++程序简介 (2) 2.3算法的具体实现过程 (3) 2.4 程序运行结果 (11) 3.总结 (11) 3.1 通过该算法学到的东西 (11) 3.2本程序未完成的任务 (12) 4.参考文献 (12)

1.Ray Tracing算法概述 1.1Ray Tracing算法简介 光线跟踪(Ray tracing),又称为光迹追踪或光线追迹,它是来自于几何光学的一项通用技术,它通过跟踪与光学表面发生交互作用的光线从而得到光线经过路径的模型。它用于光学系统设计,如照相机镜头、显微镜、望远镜以及双目镜等。这个术语也用于表示三维计算机图形学中的特殊渲染算法,跟踪从眼睛发出的光线而不是光源发出的光线,通过这样一项技术将具有一定数学模型的场景显现出来。这样得到的结果类似于光线投射与扫描线渲染方法的结果,但是这种方法有更好的光学效果,例如对于反射与折射有更准确的模拟效果,并且效率非常高,所以在追求高质量结果时我们经常使用这种方法。 在光线跟踪的过程中,我们要考虑许多因素。要跟踪的光线包括反射光线、散射光线和镜面反射光线,利用递归方法并且设定一定的阀值来跟踪;在计算光强度时,我们要考虑场景中物体的反射系数、漫反射系数和镜面反射系数,还有交点处的法向量,出射光线的方向向量;在求视线以及反射光线和场景中物体的交点时,要计算出离眼睛以及出射点最近的交点作为击中点,得到击中点之后,我们就可以计算出击中点的坐标。最终,通过三个公式计算出每一个像素点处三种光线的光强值,再将三个光强值相加,就得到了该像素点出的总光强值,最后将颜色缓冲器中的三种颜色值输出到屏幕上,就得到了我们需要的光线跟踪图像。 1.2Ray Tracing算法的实现原理 (1)对图像中的每一个像素,创建从视点射向该像素的光线; (2)初始化最近时间T为一个很大的值,离视点最近的物体指针设为空值; (3)对场景中的每一个物体,如果从视点出发的光线和物体相交,且交点处的时间t比最近时间T小,则将t的值赋给最近时间T,并设置该物体为最近物体,将物体指针指向该物体; (4)经过第三步的计算后,如果最近物体指针指向空值NULL,则用背景色填充该像素。如果该指针指向光源,则用光源的颜色填充该像素;

三维影像渲染基本概要

三维图像渲染基本概要 渲染(Render)是用软件从模型生成图像的过程。模型是用严格定义的语言或者数据结构对于三维物体的描述,它包括几何、视点、纹理以及照明信息。图像是数字图像或者位图图像。渲染这个术语类似于“艺术家对于场景的渲染”。另外渲染也用于描述计算视频编辑文件中的效果以生成最终视频输出的过程。 渲染是三维计算机图形学中的最重要的研究课题之一,并且在实践领域它与其它技术密切相关。在图形流水线中渲染是最后一项重要步骤,通过它得到模型与动画最终显示效果。自从二十世纪七十年代以来随着计算机图形的不断复杂化,渲染也越来越成为一项重要的技术。 渲染的应用领域有:计算机与视频游戏、模拟、电影或者电视特效以及可视化设计,每一种应用都是特性与技术的综合考虑。作为产品来看,现在已经有各种不同的渲染工具产品,有些集成到更大的建模或者动画包中,有些是独立产品,有些是开放源代码的产品。从内部来看,渲染工具是都是根据各种学科理论经过仔细设计的程序,其中有:光学、视觉感知、数学以及软件开发。 三维计算机图形的预渲染或者实时渲染的速度都非常慢。预渲染的计算强度很大,通常是用于电影制作;实时渲染经常用于三维视频游戏,通常依靠带有三维硬件加速器的图形卡完成这个过程。 使用在图像初步建立(通常使用网格骨架构建)之后,就要进行

渲染了。渲染将会在上面添加位图纹理或者程序纹理、照明、凸凹纹理映射以及相对于其它物体的位置。得到的结果就是消费者或者观察者所能看到的完整图像。 对于电影动画来说,需要渲染几幅或几帧图像,并且将这些图像在动画制作程序中将它们连结在一起。大多数的三维图像编辑程序都能够完成这项工作。 特性 渲染的图像有许多显著的特性,渲染研究的领域也主要集中在寻找高效模拟这些特性的方法。有些特性只与特定的算法有关,有些却与多个算法相关。 ●浓淡处理 — 表面颜色与亮度随光照的变化 ●纹理映射 — 在表面生成细节的方法 ●凸凹纹理映射 — 在表面模拟小凸凹的方法 ●距离模糊 — 光照穿过不清澈的大气时的模糊 ●阴影 — 阻挡光照的效果 ●柔和阴影 — 非常微弱的光源生成的暗处 ●反射 — 镜子或者非常光滑的反射 ●透明 — 固体明显允许光线穿过 ●半透明 — 光线通过固体高度散射 ●折射 — 与透明相关的光线弯曲

光线投射,光线追踪与路径追踪的概念与区别

光线投射,光线追踪与路径追踪的概念与区别 光线投射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 光线跟踪方法。 光线追踪方法主要思想是从视点向成像平面上的像素发射光线,找到与该光线相交的最近物体的交点,如果该点处的表面是散射面,则计算光源直接照射该点产生的颜色;如果该点处表面是镜面或折射面,则继续向反射或折射方向跟踪另一条光线,如此递归下去,直到光线逃逸出场景或达到设定的最大递归深度。 经典的光线追踪:每像素从眼睛投射射线到场景,并追踪次级光线((shadow, reflection, refraction),并结合递归 光线追踪(Ray tracing)是三维计算机图形学中的特殊渲染算法,跟踪从眼睛发出的光线而不是光源发出的光线,通过这样一项技术生成编排好的场景的数学模型显现出来。这样得到的结果类似于光线投射与扫描线渲染方法的结果,但是这种方法有更好的光学效果,例如对于反射与折射有更准确的模拟效果,并且效率非常高,所以当追求高质量的效果时经常使用这种方法。

光线跟踪算法思想

光线跟踪算法思想 一、概述 本试验完成了基本光线跟踪、高级光线跟踪(反射、折射、透明、阴影)、光线跟踪加速算法等三个与光线跟踪有关的内容。 二、算法简述 1.面片求交 面片求交采用了先求交后判断的方法。现将光线的方程代入平面方程中求出交点。然后将该面片与交点都投影到同一个平面中如XOY平面。投影时需要判断投影结果是否会退化为一条直线,如果发生这种情况则要投影到另一平面内。 投影后,将交点坐标代入到面的边线方程中(要保证线的方向一致),并判断符号,如果符号始终相同,则表示点在面内。 2.球体求交 球体求交也采用了将光线方程代入球体方程的方式。如果方程无解表示没有交点。如果有两个大于0的解,则取较小的一个;如果一个大于0,一个小于0的解,则取大于零的解。 如果没有大于零的解则仍判定为不相交。 3.光线跟踪算法 设定视点和画布 for 画布上的每一行 { for 每一行上的每个像素 { 生成一条从视点到像素点的光线ray LT[i,j] = ray.RayTrace(物体数组,光源数组,1) } } //计算光线与物体的交点,并计算光强 V oid RayTrace(物体数组,光源数组,递归深度) { for 每个物体 { 计算光线与该物体的交点 if 光线起点到交点的距离小于已记录的最短距离且大于0 { 将最短距离设置为该距离

在这条光线对象中记录交点坐标,平面法向量,透明度,物体序号等 } } 对于距光线起点最近的那个点,执行 ComputeIntensity(物体数组,交点数组序号,光源数组,递归深度) } V oid ComputeIntensity(物体数组,交点数组序号,光源数组,递归深度) { 给物体加上环境光强 for (每个光源) { 生成一条从光源指向交点的光线 判断该光线是否与其他不透明的物体相交 if (不相交) 将该光线光强乘以满反射系数和镜面反射系数加到被跟踪光线的光强中 } if (递归深度< 设定深度) { if (需要反射) { 生成一条以交点为起点的反射光线reflectRay reflectRay.RayTrace(物体数组,光源数组,递归深度+1) 将reflectRay的光强与镜面反射系数相乘,加到原被跟踪光线光强中} if (需要折射) { 生成一条以交点为起点的折射光线refractRay refractRay.RayTrace(物体数组,光源数组,递归深度+1) 将refractRay的光强与透明系数相乘,加到原被跟踪光线光强中} } } 4.光线跟踪加速算法(层次包围球) 本作业选择了包围球而不是包围和来实现加速。这是基于光线与包围球求交比与包围盒求交速度快的考虑。虽然包围盒比包围球能更紧密地包围住物体,但与包围盒求交时需要处理所有可见面片并且对求出的交点还要判断是否在面片内,这样,当物体数量较少时反而起不到加速的作用。因此我觉得包围盒更适合于规模很大的光线跟踪计算。

室内设计经典布光思路及灯光讲解

室内设计经典布光思路及灯光讲解有个著名而经典的布光理论就是“三点照明”。笔者在此简述一下: 三点照明,又称为区域照明,一般用于较小范围的场景照明。如果场景很大,可以把它拆分成若干个较小的区域进行布光。一般有三盏灯即可,分别为主体光、辅助光与背景光。 主体光:通常用它来照亮场景中的主要对象与其周围区域,并且担任给主体对象投影的功能。主要的明暗关系由主体光决定,包括投影的方向。主体光的任务根据需要也可以用几盏灯光来共同完成。如:主 光灯在1 5度到30度的位置上,称顺光;在45度到90度的位置上,称为侧光;在90度到120度的位置上成为侧逆光。主体光常用聚光 灯来完成。笔者喜欢把主体光的亮度设置为240左右。辅助光:又称为补光。用一个聚光灯照射扇形反射面,以形成一种均匀的、非直射性的柔和光源,用它来填充阴影区以及被主体光遗漏的场景区域、调和明暗区域之间的反差,同时能形成景深与层次,而且这种广泛均匀布光的特性使它为场景打一层底色,定义了场景的基调。由于要达到柔和照明的效果,通常辅助光的亮度只有主体光的5 0%-80%。 背景光:它的作用是增加背景的亮度,从而衬托主体,并使主体对象与背景相分离。一般使用泛光灯,亮度宜暗不可太亮。 布光的顺序是:1)先定主体光的位置与强度;2)决定辅助光的强度与角度;3)分配背景光与装饰光。这样产生的布光效果应该能达到 主次分明,互相补充。布光还有几个地方需要特别注意:1)灯光宜精不宜多。过多的灯光使工作过程变得杂乱无章,难以处理,

显示与渲染速度也会受到严重影响。只有必要的灯光才能保留。另外要注意灯光投影与阴影贴图及材质贴图的用处,能用贴图替代灯光的地方最好用贴图去做。例如要表现晚上从室外观看到的窗户内灯火通明的效果,用自发光贴图去做会方便得多,效果也很好,而不不要用灯光去模拟。切忌随手布光,否则成功率将非常低。对于可有可无的灯光,要坚决不予保留。 2)灯光要体现场景的明暗分布,要有层次性,切不可把所有灯光一概处理。根据需要选用不同种类的灯光,如选用聚光灯还是泛光灯;根据需要决定灯光是否投影,以及阴影的浓度;根据需要决定灯光的亮度与对比度。如果要达到更真实的效果,一定要在灯光衰减方面下一番功夫。可以利用暂时关闭某些灯光的方法排除干扰对其他的灯光进行更好地设置。 3)要知道max中的灯光是可以超现实的。要学会利用灯光的“排除”与“包括”功能,绝对灯光对某个物体是否起到照明或投影作用。例如要模拟烛光的照明与投影效果,我们通常在蜡烛灯芯位置放置一盏泛光灯。如果这盏灯不对蜡烛主体进行投影排除,那么蜡烛主体产生在桌面上的很大一片阴影可能要让我们头痛半天。在建筑效果图中,也往往会通过“排除”的方法使灯光不对某些物体产生照明或投影 效果。 4)布光时应该遵循由主体到局部、由简到繁的过程。对于灯光效果的形成,应该先调角度定下主格调,再调节灯光的衰减等特性来增强现实感。最后再调整灯光的颜色做细致修改。 灯光的分类及其属性

光线跟踪算法

光线跟踪算法的研究与进展 刘进 摘要:光线跟踪算法是图形绘制技术中的经典算法,但是该算法光线与物体的求交量庞大,严重制约着应用。本文从经典的光线跟踪算法出发,研究了目前光线跟踪算法的国内外研究状况,具体从改进的光线跟踪算法和光线跟踪算法的加速技术,并进行了对比和分析。最后对近几年的光线跟踪方法发展进行了总结,对未来研究热点及应用前景进行了展望。 关键词:可视化;光线跟踪算法;并行绘制;GPU Research Status and Prospect for ray tracing algorithms Abstract: As an classic algorithms of volume rendering in computer graphics, ray tracing algorithms is hindered by the huge computation cost in ray and volume. This paper summarizes the research status in ray tracing technology from the two main solutions: different extended ray tracing algorithms and the acceleration techniques in ray tracing algorithms. Comparison and analysis the different performance. Both current research focus and the future research prospect are also discussed in recent years. Key words: visualization; ray tracing algorithms; parallel rendering; GPU 引言 随着科学技术和计算机高速发展,人类已经进入到一个科技支撑的时代,在我们的生活中到处充满了高科技产品和技术,给我们的生活带来了改变和方便,其中计算机图形学的应用已经渗透到了各个工程技术领域,其已经成为计算机科学的重要学科之一,具有相当的重要性和无可替代的作用。计算机图形学自诞生以来得到了飞速发展,其通过计算机的输入设备、显示设备及绘制设备等对图形的表示、绘制、存储、显示等相关理论知识、算法技术进行研究的一门学科。真实感图形绘制是计算机图形学的主要研究内容之一,在虚拟现实、文物保护、影视游戏、三维动画、医学研究、建筑设计和系统仿真等领域中得到广泛应用,它追求对场景的逼真渲染[1]。其中逼真的图形绘制技术是最为活跃的研究领域之一。 光线跟踪算法是真实感图形绘制技术的主要算法之一,其原理简单,能够有效生成具有比较真实视观效果的各种各样的场景。该算法可通过一些光照明模型模拟在光源或环境光照射下物体表面发生的多种光照效果,例如漫反射、高光、镜面映像、场景消隐及阴影等。在计算机中对现实场景或是虚拟场景进行显示,除了要构建场景图形外,还要将场景中的各种光照效果模拟出来,这样生成的场景才能更逼真,光线跟踪算法就是既在几何上相似,也能模拟出大部分的光照效果的生成真实感图形的方法。光线跟踪算法是逆着真实光线的投射方向进行反向跟踪的,从视点向场景发射光线,光线与场景中的物体相交,计算光分量,因为视点向场景的光线较多,因而该算法光线与物体的求交量较大,但是因为其对场景的模拟的逼真,及其可以模拟漫反射、镜面反射、反射折射以及阴影等光照效果[1-2]。 进入90年代,随着计算机技术的发展,光线跟踪技术广泛应用于三维特技电影、电视广告、电子游戏的制作中,其应用领域也正在向如物理、化学、生物等其他学科领域渗透,其应用的范围正不断扩大,很多基于光线跟踪算法的新理论也应运而生,物理学中的相对论、地理中地层的绘图等与光线跟踪算法相结合的研究已经实现,极大的推动其学科的发展。可

光线追踪的应用及发展趋势

课程论文 课程论文题目:光线追踪的应用及未来发展 学院:人民武装学院 专业:计算机科学与技术 班级:物联人151 学号: 1500860346 学生姓名:谭朝艳 指导教师:宁阳 2016 年6 月3 日

目录 摘要 ............................................................... II 第一章绪论 . (1) 1.1 光线追踪的定义 (1) 1.2 光线追踪的原理 (1) 1.2.1 自然现象 (1) 1.2.2 光线追踪的原理 (1) 1.3 光线追踪的特点 (3) 1.3.1 光线追踪的优点 (3) 1.3.2 光线追踪的缺点 (3) 第二章光线追踪的应用 (4) 2.1 光线追踪在图形渲染中的应用 (4) 2.2 光线追踪在物理学中的应用 (4) 2.3 光线追踪在实际应用 (4) 2.4 实时跟踪 (4) 第三章光线追踪的未来发展趋势 (6) 3.1 光线追踪VS光栅化 (6) 3.2 显卡何时才能实时光线追踪 (7) 3.3 光线追踪的未来发展 (8)

光线追踪的应用及未来发展 摘要 光线跟踪是一种真实地显示物体的方法,该方法由Appe在1968年提出。光线跟踪方法沿着到达视点的光线的反方向跟踪,经过屏幕上每一个象素,找出与视线相交的物体表面点P0,并继续跟踪,找出影响P0点光强的所有光源,从而算出P0点上精确的光线强度,在材质编辑中经常用来表现镜面效果。光线跟踪或称光迹追踪是计算机图形学的核心算法之一。在算法中,光线从光源被抛射出来,当他们经过物体表面的时候,对他们应用种种符合物理光学定律的变换。最终,光线进入虚拟的摄像机底片中,图片被生成出来。 关键字:光线跟踪(Ray tracing),真实感

电影级第一渲染器renderman

向你介绍电影级第一渲染器——renderman综合教程3 二、Renderman进阶 在学会了Prman的一些渲染流程后,我们将测试一下Renderman的一些高级工具:Displacement、Volume、Multi-segment Motion Blur和使用自己写的Shader。 Renderman除了上面的SoftShadow外,还有几样杀手锏——Displacement、MotionSample、RiCurve等强劲效果。其中Displacement是众多渲染器中最好效果的、最真实的。 Renderman的Displacement有两种方式——Do Displacement和Bump。Do Displacement是真实的贴图置换,效果惊人,而Bump只是简单地改变法线的方向,效果还算可以。

一般渲染真实的Volume需要光线跟踪,而Renderman的Volume效果就不用光线跟踪都可以渲染出漂亮的体积光。

Motion blur是运动模糊,它可以表现十分有动感的运动效果。一般的Motion blur都是简单的帧与帧之间的运动插值,欠缺真实感。而分布式光线跟踪虽然可以做出漂亮的效果但计算时间又太长。RAT套件里的Motio nSample就可以在

短时间内做出漂亮的效果,实现Multi-segment Motion Blur。 最新回复 香香儿 at 2008-5-26 16:05:53 renderman的一大特点是可以方便地使用自己写的Shader。自己写Shader 的条件十分简单,只要有纯ASCII码的文本编辑器,要shader.exe ,还 要脑子里的一点编程经验。 涉及编程的详细资料不属于“ very basic”范围,所以在此我不说编程的东西,只说说写好的Shader怎么用。网上有很多已经写好了的 Shader,在http://61.187.55.83/ycjl/https://www.sodocs.net/doc/8a8081290.html,和 http://61.187.55.83/ycjl/https://www.sodocs.net/doc/8a8081290.html,上有,大家可以自己去找一下。 现在提供一分Frame Shader,是用来做火焰的,下载后解压到硬盘就可以用了。 下载把文件名改成Shader.zip: