c++ - 延迟渲染的特殊情况

标签 c++ opengl graphics glsl rendering

我想知道以下是否可能:

我想分两次渲染一个场景。在第一遍中,检测实际可见的片段和仅可见的片段(即,如果我只有一个被栅格化的三角形,则不包含在三角形栅格化中的任何像素都被视为不可见)。

然后我想在第二遍中使用此信息来生成更复杂的图像。

这里的重点是,我不仅想从计算中忽略被遮挡的片段,我还想忽略任何不是光栅化结果的东西。

最终目标很简单,滥用这种着色器来渲染包含不透明和透明几何体的几何体。不透明几何体在第一遍中被认为不存在并被丢弃。

仅生成第一个可见透明片段的片段图。

然后,我在第二遍中使用此信息来生成基于透明度的光线追踪颜色。

目标是将片段数量减少到实际追踪透明几何体所需的严格最小值。

最佳答案

实现它的方法很少。

  1. 您可以使用深度预 channel 。这是最简单的方法,而且效果很好。
  2. 您可以使用计算着色器在栅格化之前实际过滤几何体。 DICE 讨论了这种方法。
  3. 您可以在第一次通过时将您的片段存储到链表中,稍后再对它们进行着色。

如果没有其他信息,很难回答您的问题。

关于c++ - 延迟渲染的特殊情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50781433/

相关文章:

c++ - ARB_DEBUG_OUTPUT 的访问冲突

javascript - 为区域构建具有可选和不同背景(颜色和图像填充)的复杂图像映射

iphone - iOS——drawRect 有时会在意想不到的大矩形上被调用

c++ std::list 编译问题?与 list.end() 和 list.end() 有关 - 1

c++ - 将 'const char *' 传递给类型为 'char *' 的参数会丢弃限定符

c++ - 在这里显式调用析构函数会导致未定义的行为吗?

opengl - GLSL Vertex Shader 编译无显示

java - 纹理图集在不同计算机上呈现不同的效果

c# - 调整图像大小 降低图像质量

c++ - 作弊 Linux : executables and dependent libraries via LD_PRELOAD