1

3Dレンダリングシーンからテクスチャを保存して、再利用しようとしていました。
大きな問題は、rgb値がそのアルファ値と一致しないことです。黒のエッジのない画像が必要なので、そのアルファ値を分割するためにrgbカラーを使用する必要があります(Photoshopなどの画像操作ソフトウェアは、アルファチャネルが事前に乗算されていない画像を処理できます。)
残念ながら、色が薄すぎるため、一部の結果値が1にカットオフされます。
そこで、事前乗算アルファと呼ばれる手法に目を向けました(詳細を参照)。シェーダーを使用する代わりに、個別のアルファ計算を使用します。
例:
RenderState.SourceBlend = Blend.SourceAlpha;
RenderState.DestinationBlend = Blend.InverseSourceAlpha;
次に、renderstateを追加します。
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:理由がわかりました。事前に乗算されていないブレンド状態(SourceAlphaとinverseSourceAlpha)を使用すると、rgba値は確実に0〜1以内に制御されますが、加算状態(SourceAlphaと1)に切り替えると、rgb値は1を超えると、誤った値が発生します。
今私の問題は、アルファ値を制御して、すべての詳細を保持し、同時にオーバーフローしないようにする方法です。

4

0 に答える 0