math - 体积渲染: confusion with front-to-back compositing

标签 math graphics rendering volume composite

例如,GPU Gems the front-to-back compositing equation(用于颜色)是

C'i =(1-A'i-1)Ci + C'i-1

其中C'i是输出的累积颜色值; A'i-1是直到前一个体素的累积alpha(不透明度)值; Ci是当前体素的颜色值; C'i-1是直到前一个体素为止的累积颜色值。

这种表述给我提出了两个问题:

  • 一旦累积的不透明度达到大约1,就会发生从前到后的终止。那么,对于达到不透明度极限之前超过最大值的颜色 channel (RGB),该怎么办?您是将值钳位在0..255之间(例如500,1000,2000将变为255,255,255),还是查看 channel 之间的比率(例如500,1000,2000将变为64,128,255)。
  • 上一个问题的答案可能会纳入其中。当前体素的颜色输出取决于一个减去累积的不透明度。如果累积的不透明度为零并且当前体素的不透明度为零怎么办? -输出是完全不透明的体素,因为(1-A'i-1)= 1,即使它据说是透明的体素!

  • 任何提示,不胜感激。

    最佳答案

  • A和C应该在0-1的范围内。 (如果您使用无符号字节作为表示形式,请除以255.0,但是请注意,对于某些体积渲染应用程序区域,这将使您无法充分控制较小的alpha/低不透明度区域。这实际上通常更容易实现从一开始就使用浮点数进行计算)。事实证明,使用您的公式,alpha和color值永远不会超出此范围。
  • 射线alpha A'的序列为A'(i)=(1-A'(i-1))。A(i)+ A'(i-1)(其中A(i)是体素alpha ),因此,如果您累积的射线从A'零开始,并穿过透明的(零A)体素,则射线现在具有A'=(1-0)* 0 + 0,但仍为预期的零。
  • 关于math - 体积渲染: confusion with front-to-back compositing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6111559/

    相关文章:

    java - paintComponent() 方法中的抗锯齿

    algorithm - 联立方程的最小二乘解

    Python - 仅当条件适用时的组合

    css - 是否可以使用具有阴影、文本轮廓和/或渐变等特殊效果的 CSS 来制作一种链接/按钮样式?

    c# - 测量以指定宽度包裹的文本高度

    c++ - C++ 中的图像算术函数

    c++ - 在这种情况下, 'addition' 和 'bitwise or' 是否相同?

    html - 从 500x500 大小的 div 中的字符串呈现 HTML

    video - CUDA:实时视频后处理