体绘制:与从前到后的合成混淆。

|| 例如,在GPU Gems中,从前到后的合成方程式(对于颜色)为 C \'i =(1-A \'i-1)Ci + C \'i-1 其中C \'i是输出累积颜色值; A \'i-1是直到上一个体素的累积alpha(不透明度)值; Ci是当前体素的颜色值; C \'i-1是直到前一个体素的累积颜色值。 这种表述给我提出了两个问题: 一旦累积的不透明度达到大约1,就会终止从前到后的处理。那么,在达到不透明度极限之前超过最大值的颜色通道(RGB)怎么办?您是将数值钳位在0..255之间(例如500,1000,2000将变为255,255,255),还是查看通道之间的比率(例如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)为因此,如果您累积的光线从A \'0开始,并通过透明(零A)体素,则光线现在具有A \'=(1-0)* 0 + 0,但仍为零如预期的那样。     
A和C应该在0到1之间。请使用预乘alpha;您将没有溢出问题。     
嗯,让我们相信C和A在0和1之间。正如我们可以看到,序列ѭ0随ѭ1的增长而增长。我认为C不是彩色(RGB或其他任何型号)。也许是某些体素的“灰色”。即如果体素前面有很多体素,则应该比顶部体素更灰。 因此,我的假设是C_i不会直接描述颜色。它告诉我们应该将某些体素着色为多灰色。 原谅我的英语不好,如果有不清楚的地方,请随时提出来。 顺便说一句:如果您相信我,那么C_0(顶部体素的灰度)应该为1,而A_0应该为0。     

要回复问题请先登录注册