質問

複数のRGBAピクセルがあり、それぞれにアルファ成分があります。

つまり、ピクセルのリストがあります:( p0 p1 p2 p3 p4 ... pn )ここで、p_0_は前のピクセルで、p_n_は最も遠い(後ろ)です。

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

R、G、Bだけでなく、Aコンポーネントについても正しいブレンド式を提案できますか?

UPD :色をブレンドする決まったプロセスで、多くの数式を使用できるのはどのように考えられますか?それはある種の近接ですか?私にとっては、これは奇妙に見えます:数式はそれほど変わらないので、効率や最適化が本当に得られます。誰でもこれを明確にできますか?

役に立ちましたか?

解決

アルファブレンディングは、あなたが考えているよりも深いトピックの1つです。システムでのアルファ値の意味に依存します。間違って推測した場合、結果は大丈夫に見えますが、奇妙なアーティファクトが表示されます。

ポーターとダフの古典的な論文" デジタル画像の合成&quot ;素晴らしい、読みやすい議論とすべての式のために。あなたはおそらく「オーバー」をしたいです演算子。

ボリュームレンダリングに近いことをしているようです。数式と参照については、グラフィックスFAQ 、質問5.16" Howボリュームレンダリングを実行しますか?」

他のヒント

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%の光です。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top