ようやく、シャドウマップ。。。

SoftBankから出ている、「ゲームエフェクトマニアックス」に載っていた「シャドウマップ」という方法を実装していました。

必要な機能としては…

だけです。HLSLのコードは本のサンプルをそのまま使っているので、後はC++のコードをC#へ移行するだけです。今まで、マルチターゲットでレンダリングを行っていなかったため、

のやり方を調べることに。C#+Managedをやっている人はどうも少ないようで、情報が少ない。。。まぁ、適当にメソッドを試して、行き当たりばったりで2日間がたってしまいました。

まずは、レンダリングターゲットの生成です。普通に行くと「Device.CreateRenderTarget」を使ってサーフェイスを生成するのですが、レンダリング後にテクスチャーとして使わなくてはいけないので、Textureを生成してから「GetSurfaceLevel()」を使ってSurfaceを取得しました。(C++でもこうやってやるみたいです。)
深度ステンシルバッファは素直に「Device.CreateDepthStencilSurface」で生成できました。
レンダリングターゲットの変更は、「Device.SetRenderTarget(0,Surface)」を使います。Surfaceには先ほどTextureから取得したサーフェイスを渡します。深度ステンシルバッファは「Device.DepthStencilSurface」プロパティに代入します。ここら辺は一貫してほしいものですね。

あと、困ったのが僕のノートのGMA900では「R32F」型のテクスチャーが生成できないようで、他の形式で代用しています。ここら辺はハードウェアの影響をモロに受けるので大変です。。。

まぁ、そんなこんなで、こんな感じに。

ちゃんと影も落ちて結構きれいに仕上がりました。

モーションブラーは比較的簡単なので明日はそれをやろうと思います。