3

アルファ ブレンディングまたはアルファ テストのいずれかで動作するはずのシェーダーがありますが、渡されるカラー値は乗算済みのアルファ値です。

事前に乗算されたアルファを使用するときに、アルファ ブレンディングとアルファ テストの両方で「正しい」結果を生成する簡単で標準的な方法はありますか?

たとえば、シェーダーの最終結果がRGBA(1,0,0,0.75)ストレート アルファであり、したがって事前に乗算されたアルファである場合、アルファ テスト時にRGBA(0.75,0,0,0.75)結果が残るはずです。RGBA(1,0,0,0.75)

おそらく 1 つのオプションは、アルファ テストを行う場合、アルファ チャネルを「分割」することです。つまり、元の赤の値を取得するために、上記で を分割Rします。しかし、アルファが 0 になると、これは非決定論的になります。A0.75/0.75 = 1.0

バック バッファーがRGBA(1,1,1,1)で、部分的に透明な緑色RGBA(0,1,0,0.75)(ストレート アルファ) でレンダリングしているとします。色は、乗算済みアルファ as として渡されRGBA(0,0.75,0,0.75)ます。アルファブレンディングの場合、1 + invsrcalpha を使用してブレンドし、最終的な色を取得しRGBA(0.25,1,0.25,1)ます。したがって、バック バッファーには 100% の緑があり、元の緑の色もそうであるため、私の緑のチャンネルは 100% のままです。したがって、緑のチャンネルで 100% 未満になる方法はありません。

アルファテストでは、ブレンドは行われません。代わりに、私の緑色は としてバック バッファに直接レンダリングされRGBA(0,0.75,0,1)ます。でも欲しかった色はRGBA(0,1,0,1).

4

0 に答える 0