计算机图形学之光线跟踪算法的研究与实现2017年我的优秀毕业论文
版权所有使用者请联系我 刘创 QQ:903188593
诚信声明
本人郑重声明:本设计及其研究工作是本人在指导教师的指导下独立完成的,在完成设计时所利用的一切资料均已在参考文献中列出。
本人签名: 年 月 日
毕业设计(论文)任务书
毕业设计(论文)题目: 基于CPU下的光线跟踪算法的研究与实现
系部: 计算机工程 专业: 计算机科学与技术 学号: 132054137
学生: 刘创 指导教师(含职称): 傅宏智(讲师)
1.课题意义及目标
在游戏、CAD、虚拟现实、电影电视特效等众多应用的推动下,光线跟踪算法作为一种重要的真实感绘制技术被广泛地研究并得到了大力的发展。生成一幅比较真实的图象,最简单也是最好的方法就是光线跟踪算法。利用光线跟踪算法可以模拟出自然中的物理现象,真实度非常好,这将给客户带来不同的画质感,提高人们的生活水平。
2. 主要任务
(1)在Windows平台下用C/C++语言使用VC++6.0编译器设计出基于CPU的光线跟踪渲染器。
(2)研究场景中物体模型(主要模型:球体、柱体、椎体、三角形、四边形、组合模型等)与光线求交的算法,并对复杂的模型采取包围盒算法加速场景中模型的求交速度。
(3)使用三角形的重心填充算法来实现纹理的填充,将物理学上关于光的反射、折射等相关的物理算法应用在程序里。
(4)最终实现由光线跟踪算法而生成的一幅接近于真实场景的图像。
3.主要参考资料
[1] 杨丰萍.统一建模语言UML及其支持工具[J].华东交通大学学报.2000(03) : 59-77.
[2]Held M. ERIT. A collection of efficient and reliable intersection tests [J].Journal of Graphics Tools,1997,2(4): 25-45.
[3] Jason Gregory.游戏引擎架构[M].北京.电子工业出版社,2014,364-390.
[4] 韩红蕾,王文成.光删化时的线性纹理插值[J].计算机辅助设计与图形学学报,2011,23:6-10.
[5]R.Keith Morley A K Peters.Fundamentals of Computer Graphics 3ed[M].CRC Press.2009:68-92
4.进度安排
|
设计(论文)各阶段名称 |
起 止 日 期 |
1 |
调研、文献检索、开题报告 、 |
2016.12-2017.01 |
2 |
光线跟踪程序UML类图框架设计 |
2017.01-2017.02 |
3 |
光线跟踪所涉及到的算法汇总分析 |
2017.02-2017.03 |
4 |
场景中的模型设计阶段 |
2017.03-2017.04 |
5 |
编码以及测试阶段 |
2017.05-2017.06 |
6 |
完成毕业论文及答辩工作 |
2017.06 |
审核人: 年 月 日
基于CPU下的光线跟踪算法的研究与实现
摘要
在计算机图形学之光线跟踪算法中,我们主要研究如何用数学知识去构造矢量图,更好的模拟出真实的自然世界,比如自然光照射到我们周边的景物上,太阳光的反射、折射等。我们通过某种可编程语言实现这种算法,并通过显示器显示出一幅比较真实的图像。众所周知,光线跟踪算法产生的效果非常接近现实生活,因此,在游戏或工业级工程中,我们一般会选择这种算法去模拟现实生活的物体。
在该算法的实现过程中,我们使用由眼睛指向屏幕上的像素点而组成的射线追踪世界场景中的物体进行求交、Phong光照模型、三角形重心填充、纹理贴图、球体包围盒、物理学中的反射、折射定律等[1];使用面向对象程序设计的核心思想将世界场景中的物体抽象出来例如三角形、平面、球体、柱体等;复杂的模型使用三角形作为最基本的图元处理,规则的物体如球体、柱体等使用各自的方程实现;最后我们采用以球体作为包围盒加速场景中物体的求交速度。毋庸置疑,包围盒算法的使用将会使整个程序的性能得到极大的提高。
关键词:光线跟踪,反射,折射,三角形重心填充,包围盒,求交
Ray tracing algorithm with the research and implementation
based on CPU
Abstract
The tracing algorithm in computer graphics, we mainly study how to use mathematical knowledge to construct the vector diagram, better simulate the real world of nature, such as natural light to our surrounding scenery, sun light reflection and refraction. This algorithm is implemented in a programmable language. And we use the tracing algorithm to make more realistic image which is displayed through our PC monitor. As we all know, the tracing algorithm in computer graphics we used will make a more realistic effect result. As a result, in games or industrial engineering, we usually choose the tracing algorithm to simulate real objects of our life.
In the implementation of the tracing algorithm, we trace the world objects and make intersections each by the eyes to pixels on a screen. And we will compute some data by some formulas such as Phong illumination model, triangle gravity filling, texture mapping, bounding box as sphere, the reflection and refraction law based on physics, etc. Object-oriented programing will abstract the objects in the scene such as triangles, plane, sphere, cylinder, etc. Complex models use triangles as primitive. Regular objects such as spheres, cylinders use their equations to realize the tracing algorithm. Last but not least, we use bounding box as sphere to accelerate intersection speed in the scene. Beyond all doubt, using bounding box will improve our whole program.
Key words: ray tracing, reflection, refraction, triangle gravity filling, bounding box,
intersection
目 录
1 前言 1
2 光线跟踪的原理算法概述 2
2.1光线跟踪算法的起源和它的详细描述 2
2.1.1自然现象 2
2.1.2光线跟踪算法 2
2.1.3光线跟踪的优点 3
2.1.4光线跟踪的缺点 3
2.2光照模型 3
2.2.1 Lambert光照模型 4
2.2.2 Phong光照模型 5
3 光线跟踪UML设计实现 7
4 向量工具类构 10
4.1向量类构造 10
4.2射线类构造 11
4.3摄像机类构造 12
4.4反射向量推导、构造 13
4.5折射向量构造 15
5 常见几何与射线求交算法 17
5.1平面与射线求交 17
5.2球体与射线求交 17
5.3三角形与射线求交 19
5.3.1直线的隐式方程求解 19
5.3.2判断一点是否在三角形内部 20
5.4柱体与射线求交 22
5.5圆锥体与射线求交 23
5.6组合体与射线求交 23
6 光栅化渲染器的设计实现 25
7 三角形光栅化原理解析 27
8 纹理 29
8.1 BMP纹理资源简介 29
8.2 UV纹理坐标 30
8.3 纹理贴图采样的几种算法 31
9 三角形网格数据构造实现 34
10加速光线跟踪求交的重要算法包围盒的设计与实现 37
11总结与展望 40
参考文献 41
致谢 42
附录 43
本次毕业论文以光线跟踪为主题,将所涉及到相关算法基于CPU设计出来。光线跟踪中所涉及到的主要算法:射线建立、模型与射线求交、三角形重心填充、纹理映射、反射定律、折射定律、包围盒求交加速技术。事实上,国外对图形学中的光线跟踪算法的研究已经非常熟悉,尤其是那些大型游戏的创作,比如极品飞车游戏中的真实画质,汽车模型外面反射周围的场景,也就是真实度非常的高。此外,目前一款比较流行的渲染引擎——虚幻引擎4的出现,更能体现出国外对图形学的相关算法的深入研究,技术还是国内所达不到的。在国内中我们研究光线跟踪的算法主要是体现大学生阶段对计算机图形学底层知识的深刻认识与研究,为将来从事渲染引擎制作提供坚实的基础。同时,随着计算机的高速发展以及人民物质生活水平的极大提高,人民对画面的真实感要求会大大提高,这就要求我们对计算机图形学的原理深刻理解,并且有较强的实践能力。通过本次程序的设计,不但加强了我对计算机图形的深刻认识,更增强了我写代码的技术以及面向对象程序设计的能力,为将来从事游戏等相关的图形学的工作做出了坚实的后盾。本次程序设计的文献《Fundamentals Of Computer Gra-phics 3rd edition》是参考量最多的,该文献介绍了大量的图形学知识,包括数学、线性代数中的向量、矩阵、物理学的反射、折射、以及采样等重要的基础知识,重点介绍了渲染时的求交算法、三角形填充算法,为我写算法提供了很基础的理论知识。
我们在三维计算机图形学中通过计算生成一副比较真实的图像,其中光线追踪算法是一个比较更加现实且容易的实现方法。该计算的方法是通过反向镜头进行跟踪工作,也即从相机视图的场景可见信息以及我们设定的特定的光照,通过这样的处理可以建立这种模型。光线与场景中的一些物体进行求交后的反射向量从而去计算物体相应的折射,反射,以及吸收对结果产生的影响。
我们知道由于光源发出的光,在大多数情况下会出现遮挡现象。然而现实生活中,从我们的眼睛看到的大部分光线中会有很多通过多次反射后消失了或光线的能量减少了,所以对于构造可见的物体信息来说,反向跟踪光线算法的效率要比真正的模拟计算相交的效率要高出很多倍。
我们都知道在自然界中,光源发出的光线都会朝着向前的方向进行传播。光线最终会到达阻碍它继续向前传播的对象的表面,由此,我们可以看到把光线作为光子传输流量相同的方式。在一个比较理想的真空中,光线会位于一条直线上进行传播,没有偏转发生。但在现实中,光线在传播过程中会受到三个因素的影响:吸收、反射和折射。有的表面可能存在一个或多个方向会有全部或部分反射光线,有的还可以吸收光线,。此外,如果世界场景中有的模型表面是半透明或透明的,将会有一部分光线会被吸收或者被反射。当光的反射、折射到达其他表面时,光的吸收、反射和折射根据入射光会再次加以计算。一些光经过传播如果不被遮挡的情况下会发射到我们的眼睛,这样我们可以看到最终的渲染图像和场景。
以前比较传统的简单算法是从眼睛到场景投影光,但是不要跟踪这些光。当它到达一个物体的表面,可能会产生三个新类型的光线:反射、折射和阴影。发射到光滑表面的光经过反射方向,然后光线与场景中的物体进行相交,求得到最近的交集再进行对象的反射的求解。此外,在有些透明的材料模型中光的传播也会以类似的方式进行。此外,为了避免在世界场景中跟踪所有的光,人们有时候会使用光子测试光线是否可以照射到表面。光投射到物体的表面,我们进行光照的计算,然后再进行迭代的追踪。如果物体模型的表面和光源之间有一些不透明的物体遮挡,那么这个表面将会位于阴影中,光线是无法照亮这个模型的这一点,最终会产生阴影的效果。这个算法计算得到的结果会使跟踪图像的效果更加真实。
光线跟踪,它的优点是要比其他的渲染方法诸如扫描线等等渲染有时更能完美逼真高效地模拟出阴影等非常真实的效果,这是其他一些算法所无法媲美的。当我们对程序的性能没有太大的要求的情况下,由于射线追踪的易于实现和视觉效果很好,所以这种计算方案通常会是第一个比较合适选择的图形编程。此外,光线跟踪的算法是计算机图形读者更容易理解接受的,也是更加接近现实物理学原理的。
光线跟踪的缺点是计算量会很大尤其是当场景中的物体很复杂的时候,因为按照这种计算方案,我们会将每个光线跟踪的射线作为独立的光,每次进行重新计算。然而,这种计算方案会使图像中的每个像素的计算独立出来,当然独立出来也有其他好处。虽然我们正确处理了世界场景中物体的相互间的反射和折射光现象,但有时候光线跟踪得到的效果不一定是真正的效果,只有在基于真正的自然想象上方可以实现真正的真实图像的效果。所以,我们有可能会出现有的模型和光线跟踪这种方案并不总是最可行有效的算法方法的情况,即有时候我们要视情况而定。
现实生活中比较常见的光照模型中有比较著名的Phong光照模型,其中的一些重要的系数因子一般都会包括以下的四个部分:环境光系数ambient, 漫反射光系数diffuse, 高光系数specular, 自发光系数emitted light。现在,简单介绍下每个因子对光照最终效果产生的影响。
(1)环境光系数:简称Ambient light,通常定义在场景中的光源中,注意每个光源的衰减量。
(2)漫反射系数:简称Diffuse,光线投射到物体的表面,由于物体的表面可能会出现凹凸不平即不光滑从而产生反射到各个方向的光,与物体的材质有关系,与观察者的视角位置没有关系。
(3)高光系数:简称Specular,与漫反射系数相比较,入射光通过镜面反射只产生一个方向Specular,与人的观察位置有关系。按照反射法则,入射角和出射角大小相同。Diffuse和Specular的区别可以参考下面的图2.1。
(4)自发光系数:简称Emittion,物体的自发光,与物体的材质有关系。
光照计算后的像素点的最终顶点颜色值:VertexColor = Ambient + Diffuse + Specular + Emitted light,当场景中有多个光源加入的时候,最终顶点的颜色就是多个因素产生的结果的叠加值,此外我们应注意RGB颜色的阈值[0, 1]。
图2.1光照模型
Lambert光照模型用于比较理想的漫反射表面的物体,比如玻璃的表面,我们所看到的反射光和我们观察时的角度无关,这样的表面通常称为理想散射。专业一点的
说法就是它表面的亮度是各向同性的,亮度的计算遵循Lambert's cosine 法则。Lambert's cosine 法则图解见图2.2。
图2.2 Lambert光照模型
具体描述:一束光线经过传播投射到理想漫反射的物体表面,光照强度的结果将由入射光线和该物体表面法线的夹角值所决定,也就是该两个向量的点击值。
在具体计算的时候,用到的公式2.1、2.2是
cos(α) = N·L 式2.2
表示物体表面的漫反射属性,表时入射光强。N:入射点的单位法向量,L:入射点指向光源的单位向量(注意:其中入射点指向光源,表示了入射光的方向),再将该向量进行单位化之后相乘就得到了夹角的余弦值,如果向量不单位化,计算后的结果可能会出现错误的情况。