体积渲染:与前后合成混淆

时间:2011-05-24 13:57:18

标签: math graphics rendering volume composite

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

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

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

这个提法给我提出了两个问题:

  1. 一旦累积的不透明度达到约1,就会发生前后反复的终止。那么,在达到不透明度限制之前,有什么颜色通道(RGB)会超过最大值?你只是将值夹在0..255之间(例如500,1000,2000将变为255,255,255),或者查看通道之间的比例(例如500,1000,2000将变为64,128,255)。

  2. 上一个问题的答案可能就是这个问题。当前体素的颜色输出取决于一个减去累积的不透明度。如果累积不透明度为零当前体素的不透明度为零,该怎么办? - 输出是完全不透明的体素,因为(1 - A' i-1 )= 1,即使它被认为是透明的体素!?

  3. 任何提示都非常赞赏。

3 个答案:

答案 0 :(得分:1)

  1. A和C应在0-1范围内。 (如果你使用无符号字节作为表示,除以255.0,但请注意,对于某些体积渲染应用程序区域,这将使您对小的alpha /低不透明度区域的控制不足以真正令人满意。这些天它通常更容易从一开始就使用浮点数计算)。事实证明,使用您的公式,alpha和颜色值永远不会超出此范围。

  2. 光线αA'的序列是A'(i)=(1-A'(i-1))。A(i)+ A'(i-1)(其中A(i) )是体素alpha),所以如果你的累积光线以A'零开始,并通过一个透明(零A)体素,那么光线现在有A'=(1-0)* 0 + 0,它仍为零正如所料。

答案 1 :(得分:0)

A和C应介于0和1之间。使用预乘的alpha;你没有溢出问题。

答案 2 :(得分:0)

嗯,让我们相信C和A介于0和1之间。因为可以看到序列C'(i) = [1 - A'_(i+1)]C(i) + C'(i-1)随着i的增长而增长。我认为C不是颜色(RGB或任何型号)。也许这是一些体素的“灰色”。即如果体素前面有许多体素,它应该比顶部体素更灰。

所以我的假设是C_i没有直接描述颜色。它告诉我们一些体素的颜色应该是多少灰色。

原谅我的英语不好,可以随意重新询问是否有不清楚的事情。

BTW:如果你相信我C_0(顶级体素的灰度)应该是1,而A_0应该是0.