8

現在、レイトレーサーをコーディングしています。プリミティブカラーとライトカラーをどうブレンドするか。多くの組み合わせを見てきました。

2色を追加するだけの人もいます。これは私に非常に奇妙な結果をもたらします。

いくつかは各コンポーネントを重複させます。見た目は問題ありませんが、プリミティブは青 ({0, 0, 1}) で、ライトは赤 ({1, 0, 0}) で、ただの黒です。それは正常な動作ですか?

上記の場合、色が実際にブレンドされるため、より論理的なスクリーンブレンドモード (screen(C1, C2) = C1 + C2 - C1 * C2)) も見ました。

反射光線の色についても同じ質問: それらをローカル カラーとブレンドする方法は?

おまけの質問: プリミティブ上の照らされていない点は黒くすべきですか? 「色の半分」のようなものを見てきました。

4

1 に答える 1

19

実際にはもっと複雑です。光と表面材料は、双方向反射率分布関数(略して、BRDF)と呼ばれる式を介して相互作用します。これは、入力が光の方向と視角の方向(両方とも表面法線に対して)である4次元関数です。表面に垂直な単位ベクトル)であり、その出力は、光の方向からの入射放射照度に対するビュー方向の発信放射照度の比率です。

この短いスペースでそれを説明する簡単な方法はありません。おそらく、ウィキペディアの記事とそのリンクやリファレンスをチェックしたり、まともなコンピュータグラフィックスの教科書を開いたりすることができますか?

しかし、多くのBRDFの場合、完全に青い光で照らされた完全に反射するランバートの純粋な赤い表面は黒く見えるはずであるという点で、「乗算」に似ていると言えば十分です。

いくつかの複雑な要因があります。レーザー以外の実際の光は、他のコンポーネントが0.0である純粋な原色を放出しません。(リアルな画像が必要な場合は、これを避けてください。)他の色成分が0.0で、実際の表面が1つの波長ですべてを反射することはありません。(リアルな画像が必要な場合は、これを避けてください。)そして、実際には非常にランバート(純粋に拡散)なマテリアルはありません。一般に、下にある顔料に到達する前に、表面で光を反射する傾向のある鏡面反射成分があります。反射光の一部は、表面ではなく、光の色のように見える傾向があります。金属でない限り、その場合、金属の「色」は鏡面反射光に影響を与えます。はぁ。私が言ったように、それは複雑です、

ボーナス回答(「照らされていないポイントはどうなるか」):本当に照らされていないポイントは黒である必要があります。しかし、確かにあなたはそれを知っていました、そしてどんな現実の状況でも、照明が得られない(そして写真を撮ることもできる)ポイントがないという事実と同様に。質問のより興味深い定式化は次のようになります:私のレンダラーは直接を考慮しているだけです暗いコーナーを照らすすべての間接パス(オブジェクトからオブジェクト)ではなく、光源からの光パスです。どうすれば黒くなるのを防ぐことができますか?安価な答えは、どこにでも一定量の光を放つ「アンビエント」ライトを追加することです。これは人々が長い間行ったことであり、あなたが想像するようにそれはかなり偽物に見えました。より良いアプローチは、さまざまな「グローバルイルミネーション」技術を使用することです。調べる。ただし、非常にスタイリッシュな(現実的ではなく)外観を目指している場合を除いて、「半分だけ照らす」ことは絶対にしないでください。

于 2010-11-11T05:17:14.337 に答える