0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于光线追踪实现反射折射效果

颖脉Imgtec 2024-11-09 01:07 次阅读

本文翻译自Scratchapixel 3.0[1],是一个关于计算机图形学的系统性的学习教程。如果有误,欢迎在评论区讨论。

光线追踪的另一个优点是,通过扩展光线传播的思想,我们可以非常容易地「模拟反射」和「折射」等效果,这在模拟玻璃材料或镜面表面时非常方便。在一篇名为《用于阴影显示的改进照明模型》的 1979 年论文中,Turner Whitted 首次描述了如何扩展 Appel 的光线追踪算法以进行更高级的渲染。Whitted 的想法扩展了 Appel 发射光线的模型,以包括反射和折射的计算。

光学中,反射和折射是众所周知的现象。虽然后面的课程将专门讲解反射和折射,但我们将研究模拟它们所需的内容。我们将以具有折射和反射特性的玻璃球为例。只要我们知道与球相交的光线的方向,就很容易计算它发生的情况。反射和折射方向都基于交点处的法向量和入射光线(主光线)的方向。为了计算折射方向,我们还需要指定材料的折射率。虽然我们之前说过光线直线传播,但我们可以将折射可视化为光线弯曲。当光子撞击不同介质(因此折射率不同)的物体时,其方向会改变。这个科学将在后面更深入地讨论。只要我们记住这两个效应取决于法向量和入射光线方向,而折射取决于材料的折射率,我们就可以继续前进。同样,我们还必须意识到像玻璃球这样的物体同时具有反射和折射性质。我们需要计算给定表面上的两者,但是我们如何混合它们?我们将反射结果的 50%与折射结果的 50%混合吗?不幸的是,它比那更复杂。值的混合取决于主光线(或视角方向)和物体法线以及折射指数之间的角度。幸运的是,一个方程可以精确地计算每个值应该如何混合。这个方程被称为菲涅耳方程。为了保持简洁,我们现在只需要知道它的存在,并将帮助确定混合值。

f59649ac-9df3-11ef-8084-92fbcf53809c.gif

图1:使用光学定律计算反射和折射光线。

让我们回顾一下。Whitted 算法如何工作?我们从眼睛发射主光线,并与场景中的物体最近的交点(如果有)相交。如果光线击中不是漫反射或不透明的物体,我们必须进行额外的计算工作。为了计算例如玻璃球上的那个点的结果颜色,你需要计算反射颜色和折射颜色并将它们混合。记住,我们需要分三步进行。计算反射颜色,计算折射颜色,然后应用菲涅耳方程。

f5a96456-9df3-11ef-8084-92fbcf53809c.png

首先,我们计算反射方向。为此,我们需要两个项目:交点处的法向量和主光线的方向。一旦我们获得反射方向,我们发射一个新光线。回到我们的旧例子,假设反射光线击中了红色球。使用 Appel 的算法,我们通过向光源发射阴影光线来确定达到红色球上那个点的光线量。这将获得颜色(如果被遮挡则为黑色),乘以光强度并返回到玻璃球的表面。

现在,我们对折射做同样的事情。因为光线穿过了玻璃球,所以它被称为传输光线(光线从球的一侧传输到另一侧;已传输)。为了计算传输方向,我们需要交点处的法向量,主光线方向和材料的折射率(在这个例子中,它可能是类似于玻璃材料的 1.5)。使用计算出的新方向,折射光线继续到玻璃球的另一侧。在那里,因为它改变了介质,所以光线又被折射了一次。正如你在相邻的图像中看到的那样,当光线进入和离开玻璃物体时,光线的方向会改变。每当有介质变化时都会发生折射,而光线退出的介质和进入的介质具有不同的折射率。空气的折射率非常接近 1,而玻璃的折射率约为 1.5。折射会使物体在看不同折射率的物体时或通过不同折射率的物体看时出现偏移。假设当折射光线离开玻璃球时,它击中了绿色球。我们通过发射阴影光线计算了绿色球和折射光线之间的交点处的局部照明。然后,将颜色(如果被遮挡则为黑色)乘以光强度并返回到玻璃球的表面。

最后,我们计算菲涅耳方程。我们需要玻璃球的折射率,主光线与命中点法线之间的角度。使用点积(我们将在稍后解释),菲涅耳方程返回两个混合值。

以下是一些伪代码,以加强它的工作方式:

// compute reflection colorcolor reflectionCol = computeReflectionColor();
// compute refraction colorcolor refractionCol = computeRefractionColor();
float Kr; // reflection mix valuefloat Kt; // refraction mix value
fresnel(refractiveIndex, normalHit, primaryRayDirection, &Kr, &Kt);
// mix the two colors. Note that Kt = 1 - KrglassBallColorAtHit = Kr * reflectionColor + Kt * refractionColor;

在上面的代码中,我们在注释中写道Kt = 1 - Kr。换句话说,Kr + Kt = 1。这是因为在自然界中,光线不能被创造或摧毁。因此,如果一些入射光被反射,那么剩余的入射光(未被反射的部分)必然会被折射。如果你将反射和折射光的总和相加,它等于入射光的量。通常,菲涅耳方程为我们提供了Kr和Kt的值(如果它做正确的事情,它们的总和应该等于 1),因此你可以直接使用函数返回的值。然而,如果我们只有其中一个,这就足够了。如果你有Kr,你可以得到Kt(1-Kr)。如果你有Kt,你可以得到Kr(1-Kt)。

这个算法最后一个美妙的事情是它是「递归」的(这在某种程度上也是一种诅咒!)。在我们研究的情况下,反射光线击中了一个红色的不透明球体,折射光线击中了一个绿色的、不透明的、散射的球体。然而,我们会想象红色和绿色的球体也是玻璃球。要找到反射和折射光线返回的颜色,我们必须对红色和绿色球体使用与原始玻璃球相同的过程:也就是说,向场景中射入更多的反射和折射光线。这是射线跟踪算法的一个缺点,有时会成为一个头痛的问题。想象一下我们的相机在一个只有反射面的盒子里。理论上,光线被困住了,将会无限地反弹在盒子的墙壁上(或者直到你停止模拟)。因此,我们必须设置一个任意的限制,防止光线相互作用,从而无限递归。每次光线反射或折射时,它的深度都会增加。当光线深度大于最大递归深度时,我们停止递归过程。你的图像不一定会看起来完全准确,但是有一个近似的结果总比没有结果好。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 追踪算法
    +关注

    关注

    2

    文章

    9

    浏览量

    7635
  • 计算机图像
    +关注

    关注

    2

    文章

    5

    浏览量

    2248
  • 光线追踪
    +关注

    关注

    0

    文章

    183

    浏览量

    21473
收藏 人收藏

    评论

    相关推荐

    光线追踪技术的作用

    ,虽然可以实现很美观的效果,但其始终受限于一个事实,即这些技术仅仅是在模拟光照。光线追踪技术则是模拟光照在真实世界中如何表现,以创建更精确、更程序化的
    发表于 11-02 08:21

    光线追踪如何实现实时三维图形?

    什么是光线追踪光线追踪如何实现实时三维图形?
    发表于 02-26 07:03

    什么是光线追踪

    什么是光线追踪
    发表于 05-28 06:38

    怎样实现光线追踪

    怎样实现光线追踪?怎么使光线追踪生效?
    发表于 05-31 06:51

    模拟光线折射与全反射小程序

    使用LabVIEW模拟光线折射与全反射
    发表于 11-16 15:56

    【惊呆!】光线追踪效果竟然这么震撼!

    路径的模型”。一旦实现就将彻底颠覆现在的光栅化渲染技术,它几乎完美还原一个真实的世界,帮发烧友成就真正电影化的游戏图形应用。Intel、NVIDIA、AMD等行业公司都在其中投入了巨大的精力。但是使用光线追踪技术的运算量异常庞大
    发表于 02-10 07:14 354次阅读

    光线投射,光线追踪与路径追踪的概念与区别

    线渲染方法的结果,但是这种方法有更好的光学效果,例如对于反射折射有更准确的模拟效果,并且效率非常高,所以当追求高质量的效果时经常使用这种方
    的头像 发表于 04-19 14:59 1.1w次阅读
    <b class='flag-5'>光线</b>投射,<b class='flag-5'>光线</b><b class='flag-5'>追踪</b>与路径<b class='flag-5'>追踪</b>的概念与区别

    将NVIDIA RTX平台光线追踪功能和AI效果应用到游戏当中

    NVIDIA RTX 平台自面市以来一跃成为行业标准游戏开发平台,成功将实时光线追踪技术运用至游戏。采用 NVIDIA Turing 架构的全新 RT Core 可凭借对阴影、反射折射
    的头像 发表于 08-28 14:34 3968次阅读

    光线追踪技术最近又成为了行业的焦点

    计算机中的光线追踪或者更精确的路径追踪过程与真实世界中的光线传播方式是相反的。光线实际上是从相机的某个视角照射到场景内的物体上,然后算法会计
    的头像 发表于 10-24 16:01 3931次阅读

    GTX10系列是如何实现光线追踪

    就在刚刚,随着新一轮驱动更新,GeForce GTX 1060 6GB以上的帕斯卡架构显卡正式加入光线追踪技术阵营。这意味着拥有GeForce GTX 1060 6GB以上显卡的小伙伴不用升级到GeForce RTX 20系列显卡,也可以开启一定的
    发表于 04-12 14:19 2578次阅读

    Imaginantion发布了光线追踪等级系统

    目前,面向Windows系统桌面级PC的第二代光线追踪显卡刚刚上市,实现首次支持光线追踪效果4K
    的头像 发表于 10-21 11:05 1828次阅读

    洞悉光线追踪加速技术在图形处理行业中的未来

    光线追踪是一种渲染技术,可以精确地追踪场景中光线的路径,相比传统的光栅化技术,它可以渲染出可信且具有更高真实感和保真度的反射
    的头像 发表于 10-21 11:09 1830次阅读

    移动端的光线追踪是如何实现

    是一个在二维(2D)屏幕上呈现三维(3D)图像的方法。这样的定义可能比较抽象,实际上光线追踪就是为了计算出光线发出后经过一系列衰减(吸收、反射折射
    的头像 发表于 11-11 09:34 2060次阅读

    英特尔的Meteor Lake 的 iGPU将具有光线追踪硬件

    光线追踪可以实现更为逼真的阴影和反射效果,同时还可以大大改善半透明度和散射,带来相似于人眼所看到的更为真实场景
    的头像 发表于 08-22 11:00 1173次阅读

    光线追踪:计算机模拟自然光的奥秘

    反射折射等过程,最终计算出这条光线的颜色和亮度。通过对每个像素重复这个过程,就可以得到整个图像的渲染结果。光线追踪的历史
    的头像 发表于 10-10 10:08 1015次阅读
    <b class='flag-5'>光线</b><b class='flag-5'>追踪</b>:计算机模拟自然光的奥秘