粒子混合问题与预乘alpha

时间:2012-07-03 08:01:15

标签: alphablending direct3d9 particles premultiplied-alpha

我试图从3D渲染场景中保存一些纹理,然后让它们重复使用。
最大的问题是rgb值无法匹配其alpha值。我需要一些没有黑边的图片,所以我必须使用rgb颜色来划分它的alpha值(Photoshop等图像处理软件只能处理alpha通道未经过相应处理的图片。)不幸的是,颜色太浅,某些结果值被切断为1。所以我转向了一种名为预乘alpha的技术。(See more)。我只使用单独的alpha计算而不是使用着色器。
例如:
RenderState.SourceBlend = Blend.SourceAlpha;
RenderState.DestinationBlend = Blend.InverseSourceAlpha;
现在我添加了一些渲染。
RenderState.SourceBlendAlpha = Blend.One;
RenderState.DestinationBlendAlpha = Blend.InverseSourceAlpha;这很有效。但是当我尝试处理以下事情时:
RenderState.SourceBlend = Blend.SourceAlpha;
RenderState.DestinationBlend = Blend.One;
RenderState.SourceBlendAlpha = Blend.One;
RenderState.DestinationBlendAlpha = Blend.One;结果完全错了,有人可以告诉我原因吗? PS:现在我明白了。当我使用nonpremultiplied混合状态时,它是SourceAlpha和inverseSourceAlpha .rgba值肯定控制在0~1之间。但是当我切换到 加性状态,即SourceAlpha和1,rgb值可能超过1,从而导致不正确的值 现在我的问题是如何控制alpha值,以确保它保留所有细节并且不会同时溢出?

0 个答案:

没有答案