【问题标题】:Voxel Cone Tracing in Deferred pipeline?延迟管道中的体素锥跟踪?
【发布时间】:2020-06-01 01:57:21
【问题描述】:

我正在做一个项目,我必须在 C++/OpenGL 中实现间接光的体素锥跟踪。我已经有一个延迟渲染器设置,但我能找到的大多数 VCT 示例通常绘制一次场景用于体素化,一次使用锥形跟踪着色器。是否可以在全屏四边形上运行锥形跟踪着色器并从 GBuffer 中采样顶点数据,或者这通常是一个愚蠢的想法?是否因为我只有每个像素的顶点数据而失去准确性?

【问题讨论】:

    标签: opengl graphics 3d glsl


    【解决方案1】:

    是否可以在全屏四边形上运行锥形跟踪着色器并从 GBuffer 中采样顶点数据,或者这通常是一个愚蠢的想法?

    是的,但这不再是体素锥追踪。那是Screen-Space Global Illumination (SSGI)。您可以将 VCT 中的体素化场景视为 3D GBuffer,它决定了“屏幕空间”和“全场景”之间的所有区别。

    是否会因为我只有每个像素的顶点数据而失去准确性?

    当然。所有屏幕空间近似值都受到相同的伪像集的影响。它们不考虑在屏幕上不直接可见的表面(超出框架或被可见几何图形遮挡)。最值得注意的是,当相机移动并且物体进入或退出框架时,可见表面上的反射也会发生不切实际的变化。

    【讨论】:

    • 如果我两者都做怎么办,我运行一个完整场景体素化通道运行一个完整场景 GBuffer 通道,然后执行第三个通道,我全屏四边形并运行一个使用 GBuffer 位置/法线对 3D 体素纹理进行锥形跟踪的着色器?我认为它会比全场景体素化更快 -> 前向渲染场景和锥形跟踪每个顶点的每个片段。
    • @NicovanBentum:当然,您可以从 GBuffer 中的片段运行锥形跟踪器。没有人说锥体追踪必须使用前向渲染完成,恰恰相反——它通常以较低的采样率运行,然后进行插值。
    【解决方案2】:

    一个问题可能是,您尝试两者兼有的动机是什么。

    当您进行体素锥体跟踪时,您正在尝试解决与延迟渲染相同的问题,如果您已经愿意处理体素锥体跟踪的开销,那么现在这两种技术都会产生开销那么最好完全致力于该技术。

    原因很简单,如果你在做体素锥体追踪,那么你就有了某种 3D 纹理(可能是体素 oct 树,以及实际的 3D 纹理或其他一些结构)。这本质上是一个 3D Gbuffer。

    如果您的想法只是消除对这种结构的需求并改用现有的平面 GBuffer,那么您将引入传统 SSRT 技术不会出现的工件。

    本质上,同时尝试这两种方法可能会给你带来两全其美的结果,而不是最好的。

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 2019-01-12
      • 2019-05-12
      • 1970-01-01
      相关资源
      最近更新 更多