本物のページはこちら→shadow

shadow.png

影ってどうやって描画するんでしょう?

レイトレースを利用した影付け


ラスター化をレイトレーシングで行います。
視点から画面1ピクセル毎にレイを飛ばします。
フラグメントシェーダ1個につき1つのレイです。
上の図の投影面と書いてあるところを通っているレイです。
そのラスター化のついでに影を描画してます。
視点からあるピクセルにレイを飛ばして、描画すべきオブジェクトにぶつかったとします。
上の図の場合、白い床板です。
次にレイとオブジェクトの交点と光源の位置を結ぶレイを計算します。このレイのことをシャドウレイ(shadow ray)と呼びます。
シャドウレイと他のオブジェクトがぶつかっていたら、ラスター化すべきその交点は影になるので暗めに描画します。
上の図の場合、シャドウレイが球にぶつかっています。
なのでこのピクセルは影として描画すべきピクセルとして暗くします。
下の実行結果の場合、簡易的に

color.rgb *=0.5;//ちょっと暗めにする

としました。


ソースコード->ShaderToy-Sphere shadow

サポートサイト Wikidot.com