于见原来英伟达光线追踪是这样实现的!


于见原来英伟达光线追踪是这样实现的!
本文插图
回顾两年前 , 也就是2018年 , NVIDIA在德国科隆举办新品发布会 。 在这次大会上 , NVIDIA发布了大家期待许久的图灵显卡 , NV表示全新的显卡带来的是强大的性能以及惊艳的图像表现 。 随着NVIDIA发布了全新的20系显卡 , 玩家们终于迎来了实时光照追踪 , 将游戏带入了全新的世代 。
两年时间过去了 , 9月NVIDIA即将发布第二代光线追踪显卡 , 传闻这一代将会带来巨大的提升 , 并且会让光线追踪进入高度可用的阶段 。 那么光线追踪到底是如何实现的呢?
有玩家会说 , 有很多早一些的游戏也有很不错的反射效果 , 那么那些是不是光线追踪呢?答案是否定的 。 这些游戏出现的反射效果大都是光栅化渲染加屏幕空间反射SSR带来的 。 现代的游戏渲染以光栅化渲染为基本框架搭建 , 一个复杂的场景的渲染任务会以物体为单位划分为若干个子任务 , 每个物体由若干三角面组成 , 我们将这些三角面经过几何变换映射到屏幕的某些区域 , 然后将三角面覆盖的区域拆解成一个个的像素 , 这个拆解的过程就叫做光栅化 。 在这个逐层拆解的过程中 , 下一层就会失去对上一层全局信息的了解 , 比如拆分成物体后 , 我们就不知道场景里其他物体的存在了 , 拆分成三角面后 , 我们就无法得知其他三角面的信息 , 到对每个像素进行着色时 , 我们连该像素所在的三角形的信息也丢失了 。 这样拆解任务可以让渲染过程高度并行化 , 所以非常的快 , 但是同时因为全局信息的丢失 , 我们很难实现一些需要全局信息的渲染效果 。
在英伟达光线追踪之前 , 光栅化技术多年来一直作为电脑游戏中的实时渲染标准 , 虽然很多光栅化场景看起来十分出色 , 但光栅化渲染仍存在很大局限 。 例如 , 若仅使用光栅化技术渲染反射和阴影 , 我们需要简化可能导致多种不同伪影的设想 。 同样 , 静态光照贴图可能看起来正确无误 , 但物体一经移动就会失真 , 光栅化阴影经常会出现锯齿和漏光等问题 , 而屏幕空间反射SSR只能反射屏幕上显示的物体,这些伪影有损游戏体验的真实感 。 Turing 光线追踪硬件与 NVIDIA 的 RTX 光线追踪技术、NVIDIA 实时光线追踪库、NVIDIA OptiX、Microsoft DXR API 以及即将推出的 Vulkan 光线追踪 API 协同运行 。
相比于屏幕空间反射SSR , 光线追踪是三维计算机图形学中的特殊渲染算法 , 它与之前计算光源光线传播路径不一样 , 利用光的可逆性质 , 反向计算 , 跟踪从眼睛发出的光线 , 通过技术生成编排好的数学模型展现出来 , 这样的得到画面效果更佳 , 对于反射与折射有更准确的模拟效果 , 并且效率非常高 , 但很遗憾 , 光线追踪最大缺陷在于对算力要求极高 , 计算量非常庞大 , 目前的单一硬件很难满足实时光线追踪的需求 。 光栅图形学中的算法 , 利用了数据的一致性从而在像素之间共享计算 , 而光线跟踪通常是将每条光线当作独立的光线 , 每次都要重新计算 。
同时 , NVIDIA在2018年也发布了一项名为DLSS的技术 , 中文名为深度学习超采样技术 。 技术的实现则是基于显卡核心内的tensor core 。 深度学习超采样分为两个步骤 , 一个是训练阶段 , 一个是处理阶段 , 这两个阶段使用的是同一个模型 。 在训练阶段 , 需要使用大量的"显卡原始输出图像"(1080P分辨率或2K分辨率)和"对应的超级计算机抗锯齿处理过后的图像"(8K分辨率)这样的图像组对这个模型进行训练 , 使用深度学习技术优化这个模型 , 使得这个模型能够从低分辨率图像生成高分辨率图像 , 这个过程需要庞大的计算资源 , 由英伟达计算 , 将模型训练好后将该模型推送给用户 。 简单来说就是用低分辨率画质渲染输出高分辨率画面 , 这样做的好处就是游戏帧数的提升 。 配合光线追踪 , NVIDIA给玩家带来的是游戏体验提升是巨大的 。