こんにちわ。
Pocolです。
もう年末ですね,みなさんいかがお過ごしでしょうか?
自分は冬休みの宿題としてLogPSMを実用的に実装しよう!というものをやっていたのですが,コンピュートシェーダを使ってのラスタライザ処理がシーンに結構依存して,「カメラぐりぐり動かしたいのに,これはだめだなぁ」という結論に達してしまいました。
一応これからプランBに移りますが,せっかく書いたコードをそのまま放置しておくのもあれだなぁ~と思ったので,
デバッグ用途に作成したCPUでラスタライズするコードを公開しておきます。
もし,バグがあれば正しい修正方法と共にご指摘いただけると幸いです。
線形ラスタライズは,https://github.com/ProjectAsura/Rasterizer/tree/master/LinearRasterizerです。
一応下記のような感じになります。
対数ラスタライズは,https://github.com/ProjectAsura/Rasterizer/tree/master/LogarithmicRasterizerです。
実行結果は下記のようになります。
ラスタライズ処理自体は,重心座標を用いて計算しています。
線形ラスタライズ自体の説明はhttp://www.sunshine2k.de/coding/java/TriangleRasterization/TriangleRasterization.htmlあたりを参考にしました。
最近だと三つ葉レイさんが解説してくれているので,そちらの動画を見る方が良いかもしれません。
対数ラスタライズの実装についての説明は,”Logarithmic Perspective Shadow Maps”の CHAPTER 7. Logarithmic rasterization hardware(pp.148-160)に詳細が載っていますので,そちらをご参照ください。