GPUレイトレ、ひとまず球でやってみた
連休を使って、4つの球で、1DiffuseLight+Shadow、反射無し、というところまで実装できました。GLSLだと、アプリとシェーダーの連携が楽で良いです。
Radeon9600XT + Pen4 1.7G だと、256x256で、60FPSぐらい。512x512だと、12FPSぐらい。
パス数は、
- Obj位置
- 視線始点
- 視線方向
- 当たり判定x4
- あたり位置
- Shading
- シャドウレイ始点
- シャドウレイ方向
- 影判定x4
- 影付け
で、計16パス。
Obj位置は、Objが4つしかないのに256x256領域にRenderingしてみたり、なぜかTextureが3枚までしか引けないので、Shadingをするときに、あたり位置をStoreしなきゃいけなかったり、何かと無駄が多いです。減らしてどこまで上がるだろうか…。
MultiRenderTargetは欲しい。視線の始点と方向は、同時に算出できるので、本当は2パスに分けたくない。正規化Vector2つだったら、x0,y0,x1,y1で格納して、zは再計算で求められるんだけどねぇ。
あと、FixedPipeでRenderingすると、すべて0〜1.0にクランプされます。よく考えれば当たり前なんですが、2時間ぐらい無駄にしました。あほっぽい。