• 2 追踪光线=》2.2 前向光线追踪和逆向光线追踪


      前一节所描述的光线追踪技术已经很接近现实工业中所使用的技术了。你可能认为直接模拟这个过程是个制作图像的好办法,你基本上是对的。但,直接模拟有个问题,那就是他绘制图像所需要的时间,考虑每个光源每秒可能产生数以兆计(Millions)个光子的情况,其中,每个光子都以略微不同的震动频率朝着略微不同的方向前进。其中的许多光子撞击对象你甚至都无法间接看到。其他的正好跑出场景的,比如冲出窗户的。如果我们想要尝试去以参照真实追踪从光源出来的光子的方式来绘制一个图像,那将会花费数年的时间来得到那个蠢图。

      本质问题不是前向光线追踪不好,而是从光源来的大部分光子对想要绘制的图像都没有帮助。从占用计算资源的角度来说,跟随无用的光子的代价太过于昂贵了。

      对于计算效率的关键理解是反转问题,通过用逆向光线追踪来代替前向光线追踪。这开始于我们的反问"哪些光子对绘图是有贡献的?",符合条件的光子是那些撞击了图像平面并反射进眼睛的那些光子.所有的这些光子在撞击屏幕前都行进了一段路程;也许有一些直接来自于光源,但是更多的也许在进入眼睛前在周围反弹。

      让我们考虑一个图像平面上的特殊点。我们可以轻易地跟着依次撞击屏幕和眼睛的光子找到路径:那是一条从屏幕到眼睛的线,如图6所示。

      

      因此,如果一下光子确实对视距内的图片上的某点有贡献,那么它就代表一条进入眼睛和胶卷的光线。但是等等,这个光子来自哪里呢?如果我们把光线延伸入世界,我们可以沿着光线的路径寻找寻找最近的物体,光线必定来自这个物体。

      思考图7,一个光线射入眼睛撞击球体,穿过图像平面。那就是光子可能的路径;即使任何光子穿过了那个路径,我们也无从得知。但是如果任何光线撞击了屏幕中的那部分射入眼睛,那么它必须沿着从球到眼睛的这条线行进。因此,我们的新计划着重讨论是否有任何光子通过了那条路。

      

      以这个途径,我们以从对象到光源的逆向光线追踪手段来进行光线追踪。这是种重要规定,它可以允许我们去限制我们对于光线的注意,从而让我们知道真正对图片有用的,进入了眼睛的那些光线。

      现在,我们找到了吸引我们眼球的光子了。我们必须找出来那些真的通过了那条路径的光子,及其颜色,我们将会在下面的话题中解决这些问题。

      因为正向光线追踪是如此的昂贵,现今的图形学中的光线追踪大部分都只逆向光线追踪。很不幸的是一些逆向追踪的符号产生了一些令人困惑的符号。回想我们逆向追踪来找出光子的起点,虽然我们经常在逆向追踪中完成这些研究。想象我们乘坐在光子在路径上行进,寻找我们路径上的第一个对象;这是光线的起点,因此我们经常说的"光线第一个撞击的对象"或者"路径上的第一个对象"。即我们通常指的对象就是这样一个穿过这个光线的光子,这样一个逆向点在光线追踪文章和算法中很流行。因此他是用来思考现在的问题再好不过,而且之后也不会迷惑。总结起来就是"光线撞击的第一个对象"意味着"某个发射了这个光线的对象"

  • 相关阅读:
    TCP带外数据
    ASP.Net Core 返回的json数据,自定义日期格式
    C# 简单的区块链实现
    PowerShell自动部署ASP.NET Core程序到 IIS
    ASP.NET Core依赖注入多个服务实现类
    EF Core 2.0 执行原始查询如何防止SQL注入
    C#7 进入快速迭代道路
    QuartzNet 任务管理系统
    WebApi如何传递参数
    C# 快速高效率复制对象另一种方式 表达式树
  • 原文地址:https://www.cnblogs.com/TooYoungTsukasa/p/9136628.html
Copyright © 2020-2023  润新知