6

多数の RGBA ピクセルがあり、それぞれにアルファ コンポーネントがあります。

したがって、ピクセルのリストがあります: ( p0 p1 p2 p3 p4 ... pn ) ここで、 p_0_ は前面ピクセルで、 p_n_ は最も遠い (背面)。

最後の (またはいずれかの) ピクセルは必ずしも不透明ではないため、結果として得られるブレンドされたピクセルも何らかの形で透明になる可能性があります。リストの最初から最後までブレンドしていますが、その逆ではありません (はい、レイトレーシングです)。そのため、いつでも結果が十分に不透明になった場合、十分に正しい結果で停止できます。この方法で混合アルゴリズムを適用します: (((( p0 @ p1 ) @ p2 ) @ p3 ) ... )

R、G、B だけでなく、A 成分の正しい配合処方を教えてください。

UPD : 色をブレンドする決定されたプロセスで、多くの数式を使用できるのはどうしてでしょうか? ある種の近似ですか?私にとっては、これはおかしいように見えます。数式は、実際に効率や最適化が得られるほど違いはありません。誰でもこれを明確にできますか?

4

2 に答える 2

10

アルファブレンディングは、あなたが思っているよりも深いトピックの 1 つです。これは、システムでアルファ値が何を意味するかによって異なります。推測が間違っていると、一見問題ないように見えますが、奇妙なアーティファクトが表示される結果になります。

Porter と Duff の古典的な論文 " Compositing Digital Images " をチェックして、読みやすく素晴らしい議論とすべての公式を確認してください。おそらく「over」演算子が必要です。

ボリュームレンダリングに近いことをしているようです。式と参考文献については、Graphics FAQの質問 5.16「ボリューム レンダリングを実行するにはどうすればよいですか?」を参照してください。

于 2008-09-30T18:03:46.830 に答える
2

RGBA 値が実際にマテリアルのプロパティをどのように表しているかに応じて、これを行うにはさまざまな方法があります。

これが可能なアルゴリズムです。最終的なピクセルの色lightr=lightg=lightb=0, から始めlightleft=1ます。

r、g、b、検出されたピクセルごとに、次のように評価します。

lightr += lightleft*r*(1-a)
lightg += lightleft*g*(1-a)
lightb += lightleft*b*(1-a)
lightleft *= 1-a;

(RGBA 値は 0 から 1 の間で正規化され、a=1 は不透明を意味し、a=0 は完全に透明を意味すると想定しています)

最初に検出されたピクセルが不透明度 50% の青の場合、使用可能な色の 50% が青に設定され、残りは不明です。不透明度 50% の赤のピクセルが次にある場合、残りの光の 25% が赤に設定されるため、ピクセルは青 50%、赤 25% になります。次に不透明度 60% の緑のピクセルがある場合、そのピクセルは青 50%、赤 25%、緑 15% で、残りの光は 10% です。

この機能に対応する物理的なマテリアルは、発光するが部分的に不透明なマテリアルです。したがって、スタックの中央にあるピクセルは、最終的な色を暗くすることはできません。背後の光が最終的な色を増やさないようにすることしかできません (黒になることによって)。完全に不透明です)。

于 2008-09-30T17:30:48.890 に答える