登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP网盘
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
科技
›
《Fundamentals Of Computer Graphics》第四章 光线追踪 ...
《Fundamentals Of Computer Graphics》第四章 光线追踪 总结
[ 复制链接 ]
匝抽
2025-6-7 10:14:57
开篇
在学过上一章
光栅图像
后,第四章“
Ray Tracing
”,就说明了如何运用基础的光线追踪算法来生成一张计算机图像。计算机图形能完成的基础任务之一是
渲染
(
Rendering
)三维物体,即利用在三维空间中排布的物体所构成的场景,计算出场景在某一
视点
(
Viewpoint
)观察得到的二维图像,这实际上和数世纪以来一些建筑师和工程师使用绘图与其他人交流他们的设计一样。
从根本上来说,渲染是一个接受一系列物体的输入然后产生像素阵列输出的过程。不管怎么样,渲染涉及到考虑每个物体对每个像素的贡献,而且可以被分为两种一般方法。第一种是
物体顺序渲染
(
Object-Order Rendering
),这种渲染方法以每个物体为中心,为每个物体找到它能影响的像素并且更新像素值。第二种是
图像顺序渲染
(
Image-Order Rendering
),这种方式以每个像素为中心,为每个像素找到能影响到当前像素的物体并且计算像素值。你可以用嵌套循环来思考这两种方法的区别,在图像顺序渲染中,for each pixel在外面,然而在物体顺序渲染中,for each object在外面。
使用这两种方法实际上能计算出完全一样的图像,但是由于它们的区别导致了不同的计算效果,从而造成了截然不同的性能特性。在我们讨论完这两个方法后,我们将在第九章探索方法的比较优势。但是广地来说,使用图像顺序渲染更容易得到能用的结果而且在能产生的效果上更加灵活,不过通常要花费更多的执行时间来得到相似的图像。
光线追踪
就是一个用于渲染三维场景的图像顺序算法,我们首先考虑这个,因为开发一个能用的光线追踪器相比于物体顺序渲染而言,不需要开发额外的数学工具。
基础的光线追踪算法(The Basic Ray-Tracing Algorithm)
一个光线追踪器通过计算每个像素工作,对于每个像素来说,基础的任务就是找到在图像中的当前像素位置能看到的物体。每个像素会往不同方向“看”,任何被看到物体必定会和
视线
(
Viewing Ray
)相交。看到的应该是和视线相交并且距离摄像头最近的物体,正是因为被看到的物体遮蔽了它后面的物体。一旦找到了目标物体,接着就要利用表面法线等交汇点的信息进行
着色
(
Shading
),从而计算出像素的颜色。下图是个比较形象的交汇检测的例子
因此基础的光线追踪器应该包括三个部分:
光线生成
:它基于摄像头几何为每个像素计算视线的
起点
(
Origin
)和
方向
(
Direction
)
光线交汇
:它为视线找到最近的物体
着色
:它基于光线交汇的的结果为像素计算颜色
基础的光线追踪程序对每个像素的计算流程应该如下:
计算视线
找到视线击中的最近物体和表面法线
基于击中点、光源、法线计算并设置像素的颜色
透视(Perspective)
在计算机之前的数百年间,一些艺术家一直在研究使用二维绘画来表示三维物体或场景的问题,照片也通过二维图像表示三维场景。对于制造图像来说其实有许多不一般的方式,从立体派绘画到鱼眼镜头再到外围摄像头。对于艺术和摄影还有计算机图形来说,一般途径就是
线性透视
(
Linear Perspective
),在这个途径中,三维物体通过在场景中的直线在图像中依旧是直线这种投影方式被投影到
图像平面
(
Image Plane
)上。
最简单的一种投影类型就是
平行投影
(
Planar Projection
),如下图所示
三维点通过跟随
投影方向
(
Projection Direction
)移动,从而被映射到图像平面上。视图是由投影方向和图像平面的选择决定的,如果图像平面和观察方向垂直,那么这种平行投影叫
正投影
(
Orthographic
),否则就是
斜投影
(
Oblique
)。
平行投影通常用于机械以及建筑绘图,因为这个方法可以让相互平行的直线投影后依然平行,还能保留大小以及形状当平面物体平行于图像平面时。但是它的优势同时也是它的劣势,在我们的日常生活体验中,远离我们的物体看起来会更小,因此在空间中平行的直线由我们观察可能不会平行。这是因为人眼和摄像头不会从一个方向收集光照信息,反而是通过从某个位置观察,收集四面八方来的光线。早在文艺复新时期艺术家们已经认可使用
透视投影
(
Perspective Projection
)来生成看起来自然的视图,使用这种投影方法只需要让三维点跟随过
视点
的直线移动,如下图所示
这样离视点越远的物体在投影后会自然地变小。一个透视视图是是通过视点和图像平面的选择决定的,和平行视图一样有斜角透视视图和非斜角透视视图,它们之间的区别就在于图像中心处的投影方向。
你可能已经了解了艺术中使用的
三点透视
(
Three-point Perspective
)规则,不过我们只需要遵循这之下的数学规则,就能实现透视投影效果。
计算观察光线(Computing Viewing Rays)
在上个部分,生成光线基本的工具就是视点和图像平面,有许多方法能得到相机几何的细节,在这个部分我们介绍一个方法基于单位正交基,支持正平行、斜平行、正交投影视图。
为了生成光线,我们首先需要光线的数学表达。一条光线仅仅是由一个起始点和一个传播方向构成。我们可以使用三维参数直线描述光线,即
\[\mathbf{p}(t)=\mathbf{e}+t(\mathbf{s}-\mathbf{e})\]
这个参数直线可以理解为从\(\mathbf{e}\)点出发,沿\(\mathbf{s}-\mathbf{e}\)方向传播,从而找到点\(\mathbf{p}\)。对于给定的\(t\),我们就可以知道\(\mathbf{p}\)点在哪。在这个参数方程中点\(\mathbf{e}\)为光线
起点
,\(\mathbf{s}-\mathbf{e}\)为光线
方向
。下图是个形象的例子
这里要注意的是\(\mathbf{p}(0)=\mathbf{e}\)还有\(\mathbf{p}(1)=\mathbf{s}\),如果计算出两个交汇参数\(t\)且满足\(0
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
匝抽
2025-6-7 10:14:57
关注
0
粉丝关注
16
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9986
背竽
9992
猷咎
9990
4
凶契帽
9990
5
里豳朝
9990
6
处匈跑
9990
7
黎瑞芝
9990
8
恐肩
9988
9
终秀敏
9988
10
杭环
9988
查看更多