文章目录

  • 什么是光线追踪
    • 光栅化渲染方式的弊端
    • 光线追踪的优势
  • 光线追踪发展历史
  • 如何学习光线追踪
  • 总结
  • 参考文献

原文链接


本系列为光线追踪专题,本章不涉及理论知识,后续章节将从理论出发,对光线追踪技术进行详细说明,欢迎持续关注。

什么是光线追踪

**光线追踪(Ray Tracing)**是3D计算机图形学中一种特殊的渲染算法,用于在基于物理的渲染方式中模拟真实世界中的光线照射方式。目前,在动画、游戏等领域已经得到广泛使用。光线追踪实现了对光线的模拟,包括光的反射、折射、散射,甚至可以实现波动光学中光的各种性质,虽然能够得到非常不错的效果,但是模拟波动光在理论和实现上具有较大的难度,这也让很多人望而却步。所以,在本系列中,只使用光线追踪模拟较为简单的几何光学(这也是大多数情况下会使用的方式)。

光线追踪这个概念并不是最近才提出的,早在20世纪80年代光线追踪已经作为一个研究课题开始了不断的探索,但是受限于当时硬件算力的不足,光线追踪的进展一直很缓慢。直到2018年,这一年也被认为是光线追踪元年,GDC 2018上光线追踪才正式进入大众的视野,这一年,微软宣布DirectX Ray Tracing(DRX)的问世;NVIDIA、ILMxLAB、UE4联合发布了基于实时光线追踪的具有电影级视觉效果的《星球大战》短片;NVIDIA发布了RTX Tehnology Demo以及Project Sol Cinematic Demo Part 1;EA SEED团队带来了PICA实时光线追踪Demo;Remedy的Northlight引擎带来了Ray Tracing in North Light Demo;Futuremark团队发布了DirectX Raytracing Tech Demo。

光栅化渲染方式的弊端

作为最为传统的渲染方式,光栅化一直以来都是最主要的渲染方式,同时光栅化也是最原始的渲染方式,由于其渲染速度快,现在仍是3D游戏的主要渲染方式。但是由于其渲染的原理是通过各种变换将矢量图形投影在屏幕上并进行像素化(采样),并不能体现被渲染物体的物理性质。因此,光栅化渲染方式对物体阴影、光的反射、折射等现象无法进行准确描述,所渲染出的图像真实感较差。

光线追踪的优势

作为一种基于物理的渲染方式,光线追踪所实现的效果是十分接近真实场景的,因为其很好的模拟了光在传播过程中发生的反射、折射、散射等现象,使得物体的材质属性得到很好的表现,但是由于模拟光线传播过程需要使用递归算法,渲染速度远不如光栅化。近些年,在工业界和学术界的共同努力下,光线追踪逐渐实时化,通过对光线算法的不断近似和简化,实时光线追踪得以实现,并在3D游戏中得到了不错的应用。

光线追踪发展历史

光线追踪算法的起源可以早至1968年,Arthur Appel在一篇名为《Ray-tracing and other Rendering Approaches》的论文中提出的光线投射(Ray Casting)的概念。光线投射其实只是一根单一的从一个点向一个方向发射出光线,它与场景中的物体相交时停止,Appel的算法中使用了View Ray和Shadow Ray两条光线,这计算出来的其实就是光照方程中的直接光照部分。paper

1979年,Turner Whitted在光线投射的基础上,加入光与物体表面的交互,是光线在物体表面沿着反射,折射以及散射方式上继续传播,直到与光源相交。这种算法形成了一个递归的光线穿梭,因此此时不再是一根单一的光线,而是形成了一个光传输的路径,此时的算法称为递归光线追踪(Recursive Ray Tracing,或者Whitted-style ray tracing)。Whitted的模型是基于纯高光反射的,它假设物体表面绝对光滑,这显然和大自然中大部分物质的表面属性不相符。paper

在计算机图形学中,一个像素的尺寸远远大于光的波长,在这个微观尺寸(Microfacet)下,物体表面是不光滑的,也就是说进入一个像素的多个光线可能分别被反射到不同的方向上,根据表面粗糙度的不同,这些散射的方向呈现不同的分布,非常粗糙的表面可能比较均匀地周围反射,而比较光滑的表面反射光则集中在光滑表面的反射方向附近。在现代渲染技术中,这些反射特性通常被使用Microfacet BRDF公式表述出来,它基本上使用一个简单的粗糙度方向就可以模拟出比较真实的光反射分布。结合金属性等一些参数,这就是目前流行的基于物理的渲染模型。

1984年,Cook提出了分布式光线追踪(Distribution ray tracing),他使得原来一束单一的反射光变为围绕一个空间中漫反射或高光反射范围内的积分计算,如下图所示。为了计算积分方程,蒙特卡洛方法被引入,所以Cook的方法又称为随机光线追踪(stochastic ray tracing)。Cook的模型计算代价非常高,每一条从摄像机发出的光线在表面点是被反射至多个不同的方向,分散成多束光线,以此递归,每条光线最终形成一个光线树(a tree of rays),尤其对于间接漫反射光,它几乎要反射至整个可见空间。

1986年,Kajiya统一了光照公式,并推导出了光照公式的路径表述形式,使得光照公式由一个递归的结构,变成一个路径函数的积分,因此蒙特卡洛的每个随机数只要产生一条路径即可,这些路径不需要是递归的,因此每条路径可以随机生成,然后每个路径的值作为一个随机数用于计算最终的光照结果,这种新的形式称为路径追踪(Path tracing)。paper

1993年,双向路径追踪(Bidirectional path tracing)由Lafortune和 Willems提出,它分别从光源和摄像机两个方向出发,分别经过一定的路径之后,将该两条路径的终点链接起来形成一条完整的路径,这样大大增加了光源的有效贡献。Veach则对双向路径追踪做了详细的描述paper。paper

1997年Veach首次将最早应用在计算物理领域的Metropolis采样方法引入图形学,提出了Metropolis Light Transport(MLT),使用Metropolis采样方法对全局光照计算中用到的路径空间进行采样,这样就产生了一种新的全局光照算法,称为Metropolis光线追踪。。paper

2005年由Cline提出了Energy Redistribution Path Tracing(ERPT)的方法,是一种无偏的绘制方法,它是一种基于Energy Redistribution采样的路径追踪方法。paper

2012年Jakob提出了Manifold Exploration,提出了一种非常巧妙的方式来解决由完美的镜面或折射链接而成的光路依靠随机采样非常难得到的问题。paper

如何学习光线追踪

关于如何学习光线追踪,本系列文章将从理论到实现上完整的说明如何实现一个光线追踪方法,同时,这里也给出一些非常不错的参考资料。

视频资源:

  • GAMES101,加州大学圣芭芭拉分校助理教授Lingqi Yan(闫令琪)

书籍推荐:

  • Fundamentals of Computer Graphics 3rd Edition. Peter Shirley, Michael Ashikhmin, Michael Gleicher, et al.

  • Real-Time Rendering 4th Edition. Tomas Akenine-Moller, Eric Haines, Naty Hoffman, Angelo Pesce, et al.

  • Physically Based Rendering 3rd Edition. Matt Pharr, Wenzel Jakob, Greg Humphreys.

其他学习资料:

  • Ray Tracing In One Weekend. Peter Shirley.

  • Ray Tracing The Next Week. Peter Shirley.

  • Ray Tracing The Rest Of Your Life. Peter Shirley.

总结

在本章中,我们介绍了光线追踪,简单介绍了光线追踪的发展历史(在之后的章节中,会一一详细分析各个算法),在最后给出了一些适合入门的学习资料。

参考文献

[1] Real-Time Rendering 4th Edition. Tomas Akenine-Moller, Eric Haines, Naty Hoffman, Angelo Pesce, et al.

[2] Physically Based Rendering 3rd Edition. Matt Pharr, Wenzel Jakob, Greg Humphreys.

[3] 实时光线追踪技术:业界发展近况与未来挑战. 毛星云. https://zhuanlan.zhihu.com/p/102397700.

[4] 光线追踪. babalqi. https://zhuanlan.zhihu.com/p/72673165.

[5] 全局光照技术进化史1-光线追踪篇. 秦春林. https://zhuanlan.zhihu.com/p/24063586.


个人博客:https://quanfita.cn
原文链接:https://quanfita.cn/article/raytracing_introduction

【Ray Tracing】光线追踪——概述相关推荐

  1. Ray tracing 光线追踪 之 embree ,从入门到精通 01 安装与体验

    1. 什么是光线追踪 渲染技术之一,区别于光栅化图形学OpenGL等与体渲染图形学 VTK等 2. embree 安装 2.1 下载: Releases · embree/embree · GitHu ...

  2. Ray Tracing

    Ray Tracing 文章目录 Ray Tracing 光线追踪 Whitted-Style Ray Tracing 求交点 加速求交点 Bounding Volumes 包围盒 BVH Basic ...

  3. 《Ray Tracing in One Weekend》、《Ray Tracing from the Ground Up》读后感以及光线追踪学习推荐...

    <Ray Tracing in One Weekend> 优点: 相对简单易懂 渲染效果相当好 代码简短,只看书上的代码就可以写出完整的程序,而且Github上的代码是将基类与之类写在一起 ...

  4. 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-5 random direction ONB

     Preface 往后看了几章,对这本书有了新的理解 上一篇,我们第一次尝试把MC积分运用到了Lambertian材质中,当然,第一次尝试是失败的,作者发现它的渲染效果和现实有些出入,所以结尾处声明要 ...

  5. 【Ray Tracing The Next Week 超详解】 光线追踪2-4 Perlin noise

     Preface 为了得到更好的纹理,很多人采用各种形式的柏林噪声(该命名来自于发明人 Ken Perlin) 柏林噪声是一种比较模糊的白噪声的东西:(引用书中一张图) 柏林噪声是用来生成一些看似杂乱 ...

  6. GAMES101复习:光线追踪(Ray Tracing)

    目录 0. 阴影:Shadow Mapping(从光栅化角度实现) ⭐1.光线追踪:光路(线)的可逆性.光的折射.着色贡献度 1.0 Why Ray Tracing?光栅化的局限性 1.1 Recur ...

  7. 闫令琪:Games101 现代计算机图形学-光线追踪(三):渲染方程和路径追踪path ray tracing 作业Assignment07解析

    文章目录 0 whitted光线追踪的局限 1 辐射度量学 1.1 光线的表示 Radiance 1.2 物体表面上一个点的亮度 Irradiance 1.3 BRDF(Bidirectional R ...

  8. Ray Tracing in One Weekend从零实现一个简单的光线追踪渲染器

    Ray Tracing in One Weekend学习笔记 1.Overview 从零开始实现一个简单的光线追踪渲染器,能够实现漫反射材质.金属材质.透明材质的渲染,此外还实现了摄像机的自由移动和焦 ...

  9. UE4如何开启光线追踪Ray Tracing

                                             UE4 Ray Tracing 一.找到4.22在桌面上的快捷方式,打开属性面板找到目标栏,再最后面打上  -dx12 ...

  10. 【Ray Tracing】光线追踪(1)

    课程来源:GAMES101-现代计算机图形学入门-闫令琪 Lecture13 GAMES101 现代计算机图形学入门 主讲老师:闫令琪,UCSB 课程主页:https://sites.cs.ucsb. ...

最新文章

  1. okhttp面试: Socket
  2. C++语言基本类型—浮点型
  3. 演讲实录丨王海峰:AI 新基建加速产业智能化
  4. 如何安装系统认证签名过的APK
  5. webservice java客户端_Java Webservice客户端(最佳方法)
  6. 8086指令(II)
  7. 提示JS错误:WebForm_PostBackOptions 未定义
  8. ubuntu的xfce4的display只有一种分辨率选项
  9. ab753变频器参数怎么拷贝到面板_变频器怎么设置参数?变频器的基本参数设定...
  10. 面向对象与原型(二)
  11. Keil(MDK)4升级到Keil(MDK)5
  12. php模仿一个开票系统,一个模仿oso的php论坛程序(之一)
  13. css less使用
  14. VM 虚拟机查看ip地址
  15. UI设计--蓝湖切图
  16. 一次性删除PPT所有动画
  17. Android studio飞机大战游戏分析-月末总结
  18. 贵州大学计算机试题及答案,贵州大学学位计算机选择题答案
  19. 想装吗 看看装B大全
  20. 论Android产品高效开发之路

热门文章

  1. can总线程序讲解_汽车can总线工作原理及测量方法详解
  2. 卡方线性趋势检验_趋势性卡方检验专题讨论
  3. chkdsk 后数据丢失的恢复方法chkdsk 后数据丢失的恢复方法
  4. freyja对分库分表设计绝对是最强大的
  5. C/C++计算字符串的长度
  6. 锐明部标视频设备和博实结设备对部标1078协议支持程度评测对比
  7. SPSS进行多元线性回归
  8. 2020计算机校友会大学排名,2020年校友会大学排名:一个世界一流大学,一个中国一流大学...
  9. VB Label自动换行妙招
  10. MQTT 基础--MQTT 协议简介 :第 1 部分