例如,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,但仍为预期的零。