成果物
とうとう、Processingでレンダリングエンジンを自作することができました!Rayを大量に発射して光の反射を計算しているので、リアルな質感になっています。
仕組み
Rayを使った、反射色の取得
カギになっているのがこの式です。x1が反射光の出発地点、ωが反射光の向き、xiが入射光の出発地点、ωi,1が入射光の向きとなっていて、光の通り道を遡って計算しています。
Lは光の色、fは面の色になっています。ただしLiは初めはわからないので、関数Lを再帰的に呼び出すことによって少しづつ計算していきます。コードを見た方が実感がわくと思います。
このサイトに詳しい情報が載っているのでご覧ください。(Pσについての説明もあります)
rayspace.xyz
画面の全てのピクセルからRayを飛ばすカメラの仕組み
x,y,view_dist(定数)から座標系を変換して、Rayの向きを計算しています。
前回のサンプリングの記事で軽く触れているu,v,wマッピングの情報が参考になると思います。
nekodigi.hatenablog.com
コード
Python で作られたこちらのコードを参考にしながら作成しました。
github.com
Processingで作成することで、数百~千倍の高速化を実現しました。次は鏡面反射とGrossyの実装をしようと思います。所々Rayを変数を入れる箱として利用しているのでご注意ください。
github.com