视频系列:RTX实时射线追踪(上)

Video Series: Practical Real-Time Ray Tracing With RTX

RTX在游戏和应用程序中引入了一个令人兴奋的和根本性的转变。在这个视频系列中,NVIDIA工程师Martin Karl Lefrancois和Pascal Gautron帮助您开始实时光线跟踪。您将了解如何管理数据和渲染、加速结构和着色器如何工作,以及管道需要哪些新组件。我们还将包括本视频系列所基于的演示文稿中的关键幻灯片。

这些视频包含丰富的信息,但在您观看时不要担心记下东西;我们已经为您做了笔记。你可以从每一个以子弹形式呈现的片段中找到“关键的东西”。不过,我们强烈建议你在挖掘子弹之前先看视频,以确保你得到了正确的上下文。

Part1: Ray Tracing: An Overview (3:15 min)

Key things from part 1

光线跟踪是一个与光栅化根本不同的渲染过程,如图1所示。

Figure 1. Instead of the triangle being projected on the screen, we take the position from the eye, send a ray through the pixel, and try to find the triangle underneath.

可以跟踪更多光线来计算该像素的阴影。

当你追踪光线时,它会击中最近的三角形并将其返回给你。

你不必解决它。它只会返回沿射线最近的三角形。

当场景中有很多三角形时会发生什么?如何快速处理?您需要一个加速结构,如图2所示。场景中的所有对象周围都有一个大的边界框,一种算法将拆分该框并重复执行此操作,直到该框仅包含几个三角形。然后,你就可以用这些三角形来测试了。

Figure 2. The construction of this acceleration structure is provided by RTX API.

Part2: Data and Rendering (11:14 min)

Martin Karl解释了实时光线跟踪中数据的组成,并说明了加速度结构、管道和绑定表是如何协同工作的。

Key things from part 2

图形程序包括用户界面和交互、引擎更新、数据和渲染。我们对光线跟踪的数据和渲染组件特别感兴趣。

光栅包括顶点缓冲区和包含场景中所有三角形的索引,如图3所示,以及顶点和片段着色器。

Figure 3. Raster scene construction.

聚集一起,他们将有助于绘制你的场景。在光线跟踪中,必须将顶点和索引的缓冲区转换为加速度结构。同样,顶点和片段着色器必须转换为不同类型的着色系统。在光栅中,这些是分开的。在光线跟踪器中,你必须把这些东西结合起来。

底层加速度结构(BLAS)和顶层加速度结构(TLAS)代表两部分。为什么结构会这样分裂?让我们考虑一个城市、汽车和卡车的例子,如图4所示。

Figure 4. Splitting the acceleration structure into top and bottom halves improves performance.

一个加速结构支撑着城市。你把所有的建筑都放在里面。这都是静态的;你想渲染和光线跟踪那块非常快。

另一个加速结构支撑着汽车。在本例中,有两个实例使用它,因为同一辆车在场景中可以是不同的颜色。

最后,我们使用一个实例添加一个truck。

您可以轻松地重建顶层。汽车可以在整个城市移动,你不必重建整个系统。

你可以在底层重建。如果一个结构必须调整,比如说,一场车祸,你可以在不改变其他结构的情况下做出改变。

出于性能原因,您希望最小化底部结构的数量。追踪光线穿过两个重叠的BLA需要做两倍的工作来找到最近的交点…这一点很重要。

让我们看看光线跟踪管道,如图5所示。

Figure 5. The Ray Tracing Pipeline

管道由一组着色器组成,如图6所示。

首先是转到光线生成着色器的像素。这就是你决定开始的地方和你拍摄光线的方向,一个叫做光线生成的过程,以每像素为单位执行。这将为您准备的每个像素调用。

然后,它将转到遍历,并调用交叉点着色器。有一个内置的三角形(可以重写)。

Figure 6. Ray tracing shader architecture

还有一个任意命中材质球。这是内置在管道中的,但您可以覆盖它。例如,叶子形状由alpha纹理定义的树。你想让这个系统经历所有的困难,直到它真的碰到什么东西。它测试alpha,只有当叶子的身体受到真正的触碰,而不是仅仅触碰叶子的外部时,才会产生最接近的命中率。

您也可以将此用于阴影光线。

最接近的命中材质球在实际接触对象时起作用。最近的命中保存了阴影的代码。你也可以从那里追踪新的光线并追踪到你的影子。

当你什么都不碰的时候,你就会发现“小姐”的影子。你完全忽略了场景中的所有对象。例如,这将是您的环境着色器。

All together now

图7中的图表显示了完全使用光线跟踪着色器管道的可能性。

Figure 7. This diagram shows one possible data flow using ray tracing shaders.

你有一个TLAS(顶层加速结构)和一个BLAS(底层加速结构)。

管道是找到编译的着色器和声明所有着色器的位置。

着色绑定表将绑定着色器的元素。

它们共同维护一个复杂的关系,但不太复杂,如图8中的组装图所示。

Figure 8. This assembly view shows the relationship between the ray tracing pipeline and the shader binding table. This is what you have to do in DX12.

在渲染方面,光线跟踪只需要一个调用dispatchray。然后你可以移动到无人机,并渲染目标。

Figure 9. The rendering side of ray tracing uses just a single call.

Part3: RTX Acceleration Structures (8:04 min)

Pascal现在提供了一个更深入的研究,当您尝试使用基于光栅的应用程序并使其与光线跟踪一起工作时会发生什么。

Key Things from Part 3

虽然本系列视频的焦点是直接X12,但基本原理都转移到Vulkan。阅读我们的博客文章关于Vulkan射线跟踪如何与RTX工作的更多细节。

Regarding acceleration structures

将场景分为底层实例(BLAS)

为每个实例生成底层加速结构

少BLAS更好

将动态对象保存在它们自己的BLAS中

对动态对象使用重新装配

生成顶层加速结构(TLAS)

How do we build the BLAS?

从描述符开始,如图10所示。

您将能够重用基于光栅的应用程序中使用的数据。通常,您可以指向顶点和索引缓冲区,并访问完全相同的数据。在基于光栅的应用程序中,可以使用与每个对象对应的任何范围来描述对象。

Figure 10. Setting up bottom-level acceleration structures

您可以将不同的对象放在一个BLAS中,并使用转换缓冲区来定位它们,该缓冲区会将它们烘焙到一个加速结构中。

三角形将被内部转换并放置在加速结构的正确位置。

我们构建了另一个描述符,它将给我们一些关于BLAS将是什么的信息。我们需要定义是否能够更新结构,如图11所示。

Figure 11. More BLAS setup requirements

Obtain pre-build information

确定产生的加速度结构的尺寸。

scratch数据大小描述了加速结构构建器在构建过程中需要多少内存。你需要分配这个内存。

在DX12中没有隐藏的分配;必须显式地执行所有操作。

scratch空间仅在构建期间使用。之后,您可以取消分配。

一旦分配了暂存空间,就可以重用所有的描述符。您可以创建另一个带有更新标志的描述符,用于可选的重新安装。最后,可以构建BLAS,这在GPU上发生得很快。

Build the TLAS

就像处理场景图一样,只有两个级别。

每个实例都有一个ID,它描述了在哪里找到与对象对应的着色器,如图12所示。

Figure 12. Top level acceleration structure setup

再次,我们有一个转变,这次是在TLAS。如果我们想在世界上移动一个完整的底部水平,我们可以使用这个,并有非常快速的重新拟合,而不必接触实际的几何。

您遵循与使用BLAS相同的原则,但我们将获取实例化信息,而不是几何体。

视频系列:RTX实时射线追踪(上)相关推荐

  1. 视频系列:RTX实时射线追踪(下)

    视频系列:RTX实时射线追踪(下) Key things from part 4 光线有效载荷是从一个着色器传递到另一个着色器的结构. 这一切都发生在RTX的引擎下. 更小的有效载荷要好得多! 新的D ...

  2. keyshot9: 支持 NVIDIA RTX 射线追踪和 AI 去噪即将推出

    Today, we're sharing the news of a new era coming to KeyShot and to KeyShot users around the world. ...

  3. 大厂h5开源视频系列-网易云音乐年度总结

    前言 大厂h5开源视频系列 是一个专题,在这个专题中我们会解析一些酷酷的线上h5,在每一个细节,每一个细腻的过渡背后都能看到前端工程师付出的心血,本篇带来的是 ?? 网易云音乐年度总结 看视屏学习 欢 ...

  4. GeForce RTX 30系列GPU实现NVIDIA史上前所未有的性能飞跃

    采用NVIDIA Ampere架构,第二代RTX为实时光线追踪和AI游戏带来2倍于Turing GPU的性能提升 加州-圣克拉拉市, 2020年9月1日--今天,NVIDIA 发布采用 NVIDIA ...

  5. 相机视频实时人脸追踪检测

    相机视频实时人脸追踪检测 import cv2 as cv import matplotlib.pyplot as plt import numpy as np from PIL import Ima ...

  6. 蒙特卡洛射线追踪_什么是射线追踪?

    蒙特卡洛射线追踪 Recently a demo from Epic, the makers of the Unreal game engine, raised eyebrows for its ph ...

  7. 将HLSL射线追踪到Vulkan

    将HLSL射线追踪到Vulkan Bringing HLSL Ray Tracing to Vulkan Vulkan标志 DirectX光线跟踪(DXR)允许您使用光线跟踪而不是传统的光栅化方法渲染 ...

  8. [MetalKit]14-Ray-tracing-in-a-Swift-playground5射线追踪5

    本系列文章是对 metalkit.org 上面MetalKit内容的全面翻译和学习. MetalKit系统文章目录 让我们继续上周的工作完成ray tracer射线追踪器.现在我们知道如何生成不同材料 ...

  9. 微信视频号的实时推荐技术架构分享

    猜你喜欢 0.2021微信视频号生态洞察报告1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进5.腾讯PC ...

最新文章

  1. maven_Maven提示:关于可执行jar的全部
  2. 多元函数严格凹 海塞矩阵正定_海森矩阵的应用:多元函数极值的判定
  3. js常用reduce方法
  4. 揭开AS程序的外纱(四) -- 全屏模式的那点事
  5. mysql的字码设置方法
  6. 为什么不可以使用哈曼顿距离_哈曼卡顿SOUNDSTICKS4全新一代无线水晶蓝牙音箱评测...
  7. rcp异步多参数实例
  8. Windows 64位下装Oracle 11g,PLSQL Developer的配置问题,数据库处显示为空白的解决方案...
  9. 推贴B2B/B2C订货商城系统 V3.0版
  10. 国内硕士申请加拿大计算机博士难度,【经验分享】如何申请加拿大硕士研究生或者博士?...
  11. Linux 离线安装本地rpm的命令
  12. 利用OPENCV创作梵高艺术风格图片
  13. Activiti 简单demo (2)
  14. 刷机案例-----谷歌pixel系列机型刷写系统的一些问题解析
  15. ArcGIS Earth 1.11版本发布啦!
  16. MySQL修改root密码的4种方法
  17. 设计模式学习笔记--桥梁(Bridge)模式
  18. python 将图片切割成固定大小的图片脚本
  19. pdf在线预览 pdf.js的使用
  20. 视频监控运维常见故障排除点

热门文章

  1. 2021-10-27 我与地坛
  2. 记录win10快捷键
  3. 2022-2028年中国床上用品行业投资分析及前景预测报告
  4. NLP进阶之(七)膨胀卷积神经网络
  5. 地理围栏API服务开发
  6. 高并发下接口幂等性技术方案
  7. php 正则中文匹配
  8. [递归]一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
  9. Android 自定义ProgressBar 实现进度圆环
  10. postgreSQL外键引用查询 查询外键被那些表占用