トップページ > 記事閲覧
モデルが強く発光?する
名前:ろぜ 日時: 2014/08/16 02:55

いつもお世話になっています。 描画に関してどうしても解決できないことが出てしまったので、質問させていただきます。 オリジナルのモデルを作成し、テストで使っていたDxCharaから変更し、シェーダーを有効にしたところ、 モデルがものすごく強い光が当たっているかのように真っ白に輝いてしまいました。(一目でおかしいとわかるほど) 全部が白でなく元の色も僅か残っていることから、反射光の設定がおかしいのかと考えましたが、 ビューアのほうで光の当たり方等を調整しても大した改善は見られませんでした。 また、正常に見えているDxCharaのマテリアルと同じにしても相変わらず発光は止まらず。 私のシェーダーが悪いのかと、  サンプルプログラム 3Dアクション基本+深度値を利用した影表現基本 をまるまるそのまま使い、モデルだけ差し替えて動かしてみたところやはり同じ現象が発生しました。 何通りか試してみたところ、次のようなことがわかりました。 ・オリジナルモデルで初めて発生  →MMDに付属されている [カイト.pmd]を使用しても同じ(MV1に変更しても同じ) ・モデルを50倍にしてpmdとしてエクスポートした時は発生しない。 ・MV1SetScale( pl.CharaInfo.ModelHandle,VGet(50.0f,50.0f,50.0f));と記述し、プログラム上で大きさを変えると発生。 ・カイト.pmdを使用した場合、足の裏では発生していない(光の影響を受けにくい箇所だからかも?) と、スケーリングをすると影用深度が正常に働かないために、光を受けすぎるのかと考え深度画像に着色し見てみましたが、 モデル自体が50倍でも、スケーリングして50倍でもプレイヤーはしっかりと深度に描画されていました。 思いつく範囲で試してみたものの解決ができず・・ この中で見た目を大きく変えてしまうようなことをしてしまっているのでしょうか? 実行環境は・・ win7 64bit i7 GTX560,660 いずれもプログラマブルシェーダー3.0対応  です
メンテ

Page: 1 |

Re: モデルが強く発光?する ( No.1 )
名前:管理人 日時:2014/08/16 18:47

50倍のスケーリングによってライティングの計算に使用する法線の大きさも50倍になってしまっているのが原因です 元のシェーダーコードはスケーリングを考慮していないので、50倍のスケーリングによって法線の長さ( 大きさ )も50倍に なってしまい、ライティングの計算結果である明るさも50倍になってしまっているというわけです この問題は頂点シェーダーで法線の行列計算が終わった後、スケーリングを考慮して法線の長さを1にする 『正規化』を行うことで回避することができます 『3Dアクション基本+深度値を利用した影表現基本』では以下の箇所になります NormalMesh_DirLight_DepthShadow_Step2VS.fx の102行目付近 // ワールドベクトルをビューベクトルに変換 lViewNrm.x = dot( lWorldNrm, cfViewMatrix[ 0 ].xyz ) ; lViewNrm.y = dot( lWorldNrm, cfViewMatrix[ 1 ].xyz ) ; lViewNrm.z = dot( lWorldNrm, cfViewMatrix[ 2 ].xyz ) ; // 法線を正規化(追加した処理) lViewNrm = normalize( lViewNrm ) ; SkinMesh4_DirLight_DepthShadow_Step2VS.fx の123行目付近 // ワールドベクトルをビューベクトルに変換 lViewNrm.x = dot( lWorldNrm, cfViewMatrix[ 0 ].xyz ) ; lViewNrm.y = dot( lWorldNrm, cfViewMatrix[ 1 ].xyz ) ; lViewNrm.z = dot( lWorldNrm, cfViewMatrix[ 2 ].xyz ) ; // 法線を正規化(追加した処理) lViewNrm = normalize( lViewNrm ) ; よろしければお試しください
メンテ
Re: モデルが強く発光?する ( No.2 )
名前:ろぜ(解決) 日時:2014/08/16 22:12

なるほど・・スケーリングを考慮して書かなければいけなかったのですね。法線も大きくなってしまうのはまったく気づきませんでした。 早速教えていただいたように書き加えてみたところ、モデルの描画結果が正常になりました。 有難うございます、勉強になりました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存