GPUレイトレ、ひとまず球でやってみた

tetsugo2004-05-11


連休を使って、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時間ぐらい無駄にしました。あほっぽい。