RayTracingInAction[1/3]--overview

距离这个置顶图上线的gdc18已经过去两年了,raytracing在多个产品中逐渐开始落地,有比较轻量级的
战地的反射,cod的shadow,也有在地铁中的GlobalIllumination方案。
很高兴看到业界逐渐开始在这些方面落地,目前nvidia的raytracing方面进展蛮好,基于amd的gpu的两代console上也是有raytracing的支持,not bad。

raytracing vs rasterization

nvidia自家视频里提到说raytracing是图形方面自2002以来最大的技术飞跃,略显夸张,但也是有道理的。
raytracing就是按照光线真正传播的方式来渲染场景,这样可以避免掉大量的rasterization的局限性。
目前的turing gpu上把raytracing的能力硬件化,进而可以让这个过程可以做到实时,我们也可以大量的应用。
在最新版的directx12 raytracing中,这里的RayTracing求交可以inline到各个shader里,so:
习惯于rasterization下编程的程序员,可以在大量地方去thinking/programming in raytracing了。

nvidia的raytracing

目前nvidia的raytracing进展较好,资料和应用也多。
nvidia是专门有硬件rt core来做raytracing的加速,对场景专门建的BVH(bounding volume hierarchy)遍历和求交。
RayTracingInAction[1/3]--overview_第1张图片
这块的专门硬件加速,带来raytracing相关的计算速度显著优于我们用compute shader来做的性能。

DirectXRayTracing

微软在directx上对raytracing有了支持。
我们在使用的时候主要有两种方式可以做:

DispatchRay系列

就是专门的发出ray,然后求交
RayTracingInAction[1/3]--overview_第2张图片
可以通过这个示意图了解整体:

  • TopLevelAccelerationStructure(TLAS)–加速结构
  • BottomLevelAccelerationStructure(BLAS)–加速结构
  • shader table:包含ray generate shader, hit group(ray hit之后执行的shader), miss shader

这块指令就像dispatch一个compute shader一样,相当于一个专门做ray tracing的事情。

TraceRayInline

这块就是在任何一个shader里都可以调用的一个指令,指令返回intersect的obj的一系列信息。
具体应用中我们可以根据bindless pipeline去取具体texture,shader指令等等来达到和直接DispatchRay中hit shader类似的事情。
这块预计是amd后续硬件会倾向使用的方式了。

RayTracing应用

这里目前几个典型游戏中的应用:

  • reflection : 战地5
  • shadow : cod和坦克世界
  • global illumination : 这里有probe base(e.g. RTXGI)和stochastic base两个,metro exodos是用的stochastic base,也是用的比较好的一个

目前来看,就当前的画面进展来说,对于global illumination的需求是最高的,在reflection和shadow中,虽然做ab对比时候也能看到不同,但是相对于当前的shadow和reflection来说,对于游戏整体提升有限。
一个是现在游戏普遍reflection情况不多,画面还没有进展到必须要physically based reflection有明显区别的那个点,所以对ScreenSpaceReflection+ReflectionVolume在游戏品质上影响较小。
shadow则更是。
全动态的global illumination(indirect diffuse lighting,也带上ao相关)是当前短板比较厉害的地方,而且在游戏中时刻伴随,提升是比较好的。

StochasticBased RayTracingGlobalIllumination难点


整体上加速结构构建和ray相关,都是比较容易的部分,对于pipeline冲击甚至在taa之下。
就是基于stochastic的方法,在denoise上面是一个比较麻烦的点。
真的是:rt难点不在rt,在乎denoise之间也!

reference

  • https://microsoft.github.io/DirectX-Specs/d3d/Raytracing.html#inline-raytracing
  • https://www.nvidia.com/content/dam/en-zz/Solutions/design-visualization/technologies/turing-architecture/NVIDIA-Turing-Architecture-Whitepaper.pdf

你可能感兴趣的:(Engine&Render,游戏开发,游戏引擎,图形学)