Re: 深度値を利用した影表現基本で影が上手く出ない ( No.1 ) |
- 名前:takatwu 日時:2012/09/20 15:14
>これらはすべて分けて別々に用意しないといけないのでしょうか?
とはどういうことでしょうか?
これらのシェーダーは全て使わなければ影を描画できません。
背景とキャラクターで別々のバッファを使いたいのであれば
SkinMesh4_DirLight_DepthShadow_Step2VS.fx
DirLight_DepthShadow_Step2PS.fx
を改造することで出来ます。
|
Re: 深度値を利用した影表現基本で影が上手く出ない ( No.2 ) |
- 名前:ジュンヤ 日時:2012/09/20 19:58
takatwuさん返信ありがとうございます。
個々に別々のバッファを使う場合に背景やキャラクターなどの数分だけ
すべてのfxファイルを書き直してコンパイルし用意しなければならないのかと思ってました。
描画用のfxファイルの修正だけで良いということですね!さっそく試してみます。
ただちょっと思ったんですが、影用深度記録画像をSetUseTextureToShaderで設定する場合に
SetUseTextureToShader( 1, DepthBufferGraphHandle ) ;
SetUseTextureToShader( 2, DepthBufferGraphHandle2 ) ;
の様にどんどん追加していったらバッファを追加するたびにfxファイルも修正しなければならないですよね?
この方法だとキャラクター1人増やすだけでも大変な気がします。
|
Re: 深度値を利用した影表現基本で影が上手く出ない ( No.3 ) |
- 名前:takatwu 日時:2012/09/22 18:37
シェーダーで使うテクスチャや定数はモデルを描画する前に設定し直せます。
背景用深度バッファ設定
キャラクター用深度バッファ設定
背景用深度バッファのカメラからのマトリックス設定
キャラクター用深度バッファのカメラからのマトリックス設定
キャラクター描画
という様にループすればいいです。
背景に対してはキャラクターと背景でバッファを分けない方がいいかもしれません。
キャラクター用のシェーダーと背景用のシェーダーで完全に分けた方がいいと思います。
私自身シェーダーを最近触り始めたので間違っていたらすみません。
|
Re: 深度値を利用した影表現基本で影が上手く出ない ( No.4 ) |
- 名前:ジュンヤ 日時:2012/09/22 21:23
>背景に対してはキャラクターと背景でバッファを分けない方がいいかもしれません。
たしかにバッファを分けた時にセルフシャドウが出なくなってしまっているようです。
自分の考えでは最初に全体が見渡せる位置からバッファを作りそれを背景用として使い、
次にキャラが収まる範囲でバッファを作って描画すると思っていたんですが・・
他にもDirectXでのシャドウマップの実装方法をいくつか調べてみたんですが、
1パス目にバッファに書き込んで2パス目に描画という流れが多いみたいで、
バッファをそれ以上多く用意してるサンプルは見つかりませんでした。
やはりシェーダのサンプルはDirextXが多いので、それらを参考に書き直したいのですが、
まだまだ理解不足なためなかなかできません。
DXライブラリはTechniqueが使えないということなので頂点シェーダとピクセルシェーダの処理が含まれ
2パス以上のレンダリングがある場合は、Techniqueを使用せずvsoファイル2つpsoファイル2つに分ければ
DXライブラリでも実装可能なのでしょうか?
>私自身シェーダーを最近触り始めたので間違っていたらすみません。
いえいえとんでもないです!その様な情報でもとてもありがたいので、何かあればよろしくお願いします。
|
Re: 深度値を利用した影表現基本で影が上手く出ない ( No.5 ) |
- 名前:管理人 日時:2012/09/22 22:41
> DXライブラリはTechniqueが使えないということなので頂点シェーダとピクセルシェーダの処理が含まれ
> 2パス以上のレンダリングがある場合は、Techniqueを使用せずvsoファイル2つpsoファイル2つに分ければ
> DXライブラリでも実装可能なのでしょうか?
はい、その方法で実装可能です
|
Re: 深度値を利用した影表現基本で影が上手く出ない ( No.6 ) |
- 名前:ジュンヤ 日時:2012/09/23 20:48
バッファを作るときにカメラの位置を固定でなく、キャラクターの座標に合わせて計算することでなんとか前より良くなりました。
あと少しパラメーターを調整すればもうちょっとましになりそうです。
> はい、その方法で実装可能です
試しにいくつかの簡単なDirectXでのシェーダのサンプルを書き直してみたらたしかに実装できました!
h t t p://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2589
以前こちらの記事でDXライブラリのシェーダで実装できることは少ないと仰せられていたので、
Techniqueを使用した物すべてが使えないと思っていました。
ファイルを分けて作り直せばよかったんですね!勉強になりました。
管理人さんありがとうございました。
|
Re: 深度値を利用した影表現基本で影が上手く出ない ( No.7 ) |
- 名前:管理人 日時:2012/09/23 23:34
現在は複数の描画可能画像に対して同時に描画結果を出力するための関数 SetRenderTargetToShader があるので
シェーダーモデル3.0の機能もそれなりに活用できるようになっています
( それでも Direct3D9 を直接使った場合に比べると制限はありますが・・・ )
|