トップページ > 過去ログ > 記事閲覧
深度値を利用した影表現基本で影が上手く出ない
名前:ジュンヤ 日時: 2012/09/20 13:37

3Dアクション基本+深度値を利用した影表現基本を参考に作ったプログラムなんですが、 キャラクターの影の解像度が荒くなってしまいます。 h t t p://youtu.be/eQKLXOm9flQ 説明にもある通りキャラクターとステージに同じ「深度値画像」を使用して影を表現しているのが原因だと思いまして、 DepthBufferGraphHandleをもう一つ作り書き込んで、ステージとキャラそれぞれ別に描画してみましたが、 地形の影がキャラクターに落ちなくなってしまったり、キャラクターの影が出なくなってしまったり色々試してみましたが上手くいきませんでした。 そこで質問なんですが、キャラクターとステージをそれぞれ一つずつ描画するとしたら、 深度記録画像への描画用の剛体メッシュ用頂点シェーダーのプログラム 深度記録画像への描画用のスキニングメッシュ用頂点シェーダーのプログラム 深度記録画像への描画用のピクセルシェーダーのプログラム 深度記録画像を使ったディレクショナルライト一つ付きの剛体メッシュ描画用頂点シェーダーのプログラム 深度記録画像を使ったディレクショナルライト一つ付きのスキニングメッシュ描画用頂点シェーダーのプログラム 深度記録画像を使ったディレクショナルライト一つ付きの描画用ピクセルシェーダーのプログラム これらはすべて分けて別々に用意しないといけないのでしょうか?

Page: 1 |

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 を直接使った場合に比べると制限はありますが・・・ )

Page: 1 |