Sample 11 はPSSMによる影の表現です
PSM系とは違い、シャドウマップを分割して影の解像度を上げちゃおうってな処理です
3分割くらいがベストだと思います^^
いつものように、変数フィールド内でPSSMを宣言し
初期化します
初期化した後、splitCountに分割数を指定してやります
それをやったら
- PSSM.AddBoundingBox(BoundingBox bb);
- で、シーンのバウンディングボックスをPSSMに送ります
描画処理ないし更新処理部分で
- PSSM.SetLightParam(Vector3 LightPosition,Vector3 Target,Vector3.Up,float Fov,float fNear, float fFar);
- PSSM.SetCameraParam(Vector3 CameraPosition,Vector3 Target,Vector3.Up,float aspect,float Fov,float fNear,float fFar)
- で、カメラとライトのパラメーターをPSSMに送ります
- Position系には位置をTargetにはターゲット位置を
- Upにはアップベクトル、aspectにはアスペクト比
- Fovには視野角、fNearにはニアクリップ、fFarにはファークリップを送ります
次に、分割されたライト、カメラ行列を受け取ります
- PSSM.ReturnPSSMLightMatrix(out Matrix[] lightMat,out float[] fFar);
- PSSM.ReturnPSSMCameraMatrix(out Matrix[] cView,out Matrix[] Proj,out Viewport[] viewport);
- lightMatにはライト行列、fFarには分割されたファークリップ
- cViewにはカメラ行列、Projにはプロジェクション、
- viewportには分割されたビューポート情報が入ります
その後、分割数分レンダリングします
今回のサンプルでは、分割数を動的に変えるようにしているため
初期化やらレンダーターゲットやらを複数作ったり、描画内で呼んだりしていますが
動的に変えない場合は、描画内で呼ぶ必要は無いと思いますよ
コメント