美文网首页
光线追踪介绍

光线追踪介绍

作者: Dragon_boy | 来源:发表于2020-09-21 09:45 被阅读0次

正向追踪

如果我们试着在计算机生成图像这一过程中模拟光线与物体的交互,那么我们除了明白光线会在物体表面反射外,还需要注意一点。物体反射的光线的数量很多,只有其中的一部分会进入我们的眼中。例如,想象一下我们创建了一个光源,每次只会发射一个光子,该光子从光源出发,沿着光路前进,直到碰撞到物体表面,忽略光子吸收的话,我们可以假设该光子沿一个任意的方向反射,如果光子碰撞到我们眼睛的表面上,我们就会看见表面上光子反射的点,见下图:


有一个问题,之前我们提到过,物体的表面上的每一个点会向四面八方反射光线,这是否与我们所说的随机相违背?其实都对。解释光线为什么向四面八方反射是一个物理课题。在自然中,一个光子在表面上反射时会以一个特定的方向反射,这区语句几何体的拓扑结构,以及光子的入射方向。漫发射物体的表面会看起来比较光滑,不过如果在微观层面观察,会发现非常的复杂,完全不光滑。光子非常小,它们会被物体表面的微观结构反射,如果光线碰撞到漫反射的物体表面,其中的光子会各自碰撞到不同的微观结构的表面,这样就会向很多方向反射,因此,我们可以说是向任何可能的方向反射。有时某些材质的微观结构非常的整齐划一,这样就会让物体在某一特定方向反射光线,这被描述为各向异性反射。>
我们现在先看一看图形学的一些术语。首先,我们用由像素复合的图片表面替换眼睛,在这一情况下,发射的光子会碰撞到图片表面的许多像素中的一个,然后就会增加其中某一点的亮度值。重复这一过程直到所有的像素被调整,创建一个计算机生成的图片。这一技术被称为正向光线追踪,因为我们是沿着光子从光源到观察者的方向来进行的。

该方法有一些问题:在我们的例子中,我们假设反射的光子总是会遇到我们眼睛的表面。实际上,光线会向任何可能的方向反射,其中会由很少很少的光线会碰撞到我们的眼睛。我们会从光源发射庞大数量的光子,然后找到可能会碰到眼睛的光子。事实上就是这么实现的,数不胜数的光子沿光线方向以光速飞行,在计算机世界中,在场景中模拟这么大数量的光子并不是一个可行的方法。

因此,我们可以想一下,其实不太需要向随机的方向发射光子。由于我们知道眼睛的位置,为什么不只是向一个方向发射光子,然后看一下哪个像素接收到了光子。这是一种可能的优化方法,然而我们只会对某些特定的材质类型使用该方法。对于我们接下来要讲解的光物质交互,对于漫发射表面方向性并不那么重要。这是因为碰撞到漫发射表面的光子可以在一个半球范围内沿任意方向反射。然而,如果表面是镜子,而且没有漫发射部分,那么光线就只能沿某一精确方向仿射。对于这种类型的表面,我们不能人为改变光子的方向,意味着我们所提到方法不太合适。

即使我们决定使用该方法,同时场景只有漫反射物体组成,我们仍会遇到一个问题。我们想象一下自己正向一个物体表面喷射光线,如果喷射的密度不够,有些区域就不会被完全照明。

想象一下我们试着使用一个白色记号笔在一张黑纸上用点画一个茶壶(将每个点想象为一个光子)。一开始只有很少的光子与茶壶模型交叉,有许多未覆盖的区域,当我们持续添加光子时,光子的密度会增加,茶壶也渐渐的被点填充,模型的外形也渐渐完整。

但如果发射1000个光子或甚至发射多次,这并不能保证物体的表面会被光子完全覆盖。这是该技术的一个缺点,换句话说,我们需要让程序不断运行,直到喷射了足够的光子让物体的表面得到了比较正确的外形。这意味着我们需要在渲染时观察图像来决定何时停止程序。在生产过程中,这一情况完全不可能。另外,之后我们会看到,光线追踪器最耗费性能的任务是找到光线与几何体的交叉区域。从光源创建大量的光子并不是一个问题,但找出它们与场景中物体的交叉情况就是一个极其耗费性能的工作了。

反向追踪

该方法从观察者到光源来追踪光线。因为该追踪方法的起源是观察者,因此也被称为反向光线追踪或眼追踪,见下图:



这一方法针对正向追踪的缺陷提供了不错的方案。由于我们的模拟不能像自然一般快速,我们需要进行折中拖鞋,从眼睛进行光线追踪。如果光线碰撞到一个物体,我们就会找到接受到的光线的程度,通过将另一个光线从碰撞到发射到场景中的光源中。偶尔光线会被场景中的其它物体遮挡,意味着我们的初始碰撞点位于阴影中,也就是不会受到光照影响。因此,我们将这些光线称为阴影光线。在CG术语中,从眼睛射向场景中的第一束光线称为主光线、可见光线或摄像机光线。

相关文章

  • 光线追踪介绍

    正向追踪 如果我们试着在计算机生成图像这一过程中模拟光线与物体的交互,那么我们除了明白光线会在物体表面反射外,还需...

  • 光线追踪介绍

    摘要图像渲染就是一个这样的过程,输入一组物体,输出一个像素矩阵。把这个像素矩阵输送给显卡,显示器上就可以显示出来图...

  • 实现光线追踪算法

    接下来我们介绍光线追踪算法,用于实现我们的第一个光线追踪器。 首先,我们可以发现自然实际中光线的传播只是大量从光源...

  • 利用rayrender动态可视化全球人口密度

    介绍 rayrender 是一个R语言编写的开源包,用于创建光线跟踪场景。这个包为用 C++ 构建的光线追踪器提供...

  • 体积的使用 光线追踪

    简介: Unity HDRP 在 Unity2019 版已经支持光线追踪了,在设置中开启光线追踪后(开启方法[ht...

  • 光线追踪算法综述

    Problem Formulation Ray Tracing的目标是生成一张包含场景内物体,具有真实感的图像,因...

  • 221231 光线追踪练习

    烟火追着你冷去的时间追着你你不要逃,不要逃 钟声追着你没做完的梦追着你你不要逃,不要逃 所有双向反射函数都为你备好...

  • 计算机仿真技术_1

    全局光照模型里面最著名的技术就是光线追踪算法(ray-tracing)。 所谓的光线追踪就是为了在全局光照模型下实...

  • 英伟达发了新显卡很了不起,但是我觉得你们没必要这么兴奋

    英伟达前几天发布了新的专业显卡Quadro RTX 系列,已经可在以单张卡实现光线追踪,并且也放了相应的光线追踪技...

  • 3D渲染-光线追踪-包围盒

    一、回顾 1、理解 上节通过光栅化和光线追踪的对比,引入光线追踪。 在光栅化中,其实就是构建网格,然后在像素网格中...

网友评论

      本文标题:光线追踪介绍

      本文链接:https://www.haomeiwen.com/subject/mcgmyktx.html