Sample11の解説

 

 

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には分割されたビューポート情報が入ります

 

その後、分割数分レンダリングします

 

 

今回のサンプルでは、分割数を動的に変えるようにしているため

初期化やらレンダーターゲットやらを複数作ったり、描画内で呼んだりしていますが

動的に変えない場合は、描画内で呼ぶ必要は無いと思いますよ

コメント

タイトルとURLをコピーしました