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

Dav*_*ave 9 math graphics rendering volume composite

例如,在GPU Gems中,前后合成方程(用于颜色)是

C ' =(1 - A' Ⅰ-1)C + 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,即使它被认为是透明的体素!?

任何提示非常感谢.

tim*_*day 1

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

  2. 射线 alpha A' 的序列为 A'(i) = (1-A'(i-1)).A(i) + A'(i-1) (其中 A(i) 是体素 alpha) ,因此,如果累积的光线从 A' 零开始,并穿过透明(零 A)体素,则光线现在具有 A' = (1-0)*0+0,它仍然如预期为零。