トップページ > 過去ログ > 記事閲覧
アンビエントカラーについて
名前:なら 日時: 2010/06/09 02:09

お世話になっています。 3Dのアンビエントカラーについて質問させていただきます。 私の思い違いかもしれませんので、その際はどうかお許しください。 ライトにアンビエントカラーを設定すると、 ライトの当たっている部分もあたっていない部分も ライトのアンビエントカラーで上塗りされた様な表示になりますが、 以前も(DxLib3.0あたり)もこの様な動作でしたでしょうか? 例えば、 メタセコイアで、基本色(ディフューズカラー)のみを真っ赤(RGB=255,0,0)に変更した材質でモデルを作り、 mqo形式で保存したものをDxLibModelViewerで開きます。 (マテリアルの環境光の輝度は0.6になっているはずです。) (大域環境照明を解除し、照明0を平行照明にして陰影が分かりやすい様にします。) その照明0の色設定で環境光の輝度を1.0にすると、モデル全体が白ばみます。 この上でマテリアルの環境光の輝度を1.0にすると、モデルは真っ白になってしまいます。 私の認識では、...表現の仕方が分かりませんが、 ライトのアンビエントカラーは、マテリアルのディフューズカラーの明るさの割合で、 ライトのアンビエントカラーを RGB=255,255,255 にした場合、 モデルの色は全体が白っぽくなるのではなく、マテリアルのディフューズカラーになります。 ゲーム画面で、陰を薄くしたいと思ってアンビエントカラーを設定したところ、 モデル全体が白っぽくなってしまったので「あれ?」と思い、質問させていただきました。 最初にも書きましたが、私の思い違いでしたらお時間を取らせてしまい申し訳ありません。 よろしくお願いいたします。

Page: 1 |

Re: アンビエントカラーについて ( No.1 )
名前:管理人 日時:2010/06/13 03:25

DXライブラリのライティングの仕様は今のところ DirectX9 まで存在した 固定機能パイプラインというプログラマブルシェーダーが登場する前の Direct3D の 仕様に準拠しています 固定機能パイプラインでのディフューズカラーは以下のように算出されています ディフューズカラー =   大域環境照明色 × マテリアルのアンビエントカラー +   頂点とライト0との距離減衰係数 × ( ライト0と頂点法線との角度減衰係数 × マテリアルのディフューズカラー × ライト0のディフューズカラー + マテリアルのアンビエントカラー × ライト0のアンビエントカラー ) ( 上記の「ライト0」が絡んでいる部分はライトの数の分だけ存在します ) 上記のディフューズカラーを算出する計算式をご覧になっていただくと分かると思いますが、 大域環境照明色とマテリアルの環境光カラー( アンビエントカラー )を最大値にすると それだけでディフューズカラーが真っ白になってしまうのが分かると思います なので、Direct3D の固定機能パイプラインの仕様に準拠した場合、ならさんが目の当たりにした 挙動はDXライブラリの仕様の通りということになります 尚、メタセコイアでのライティング計算式は Direct3D の固定機能パイプラインとは 微妙に違うものが使用されていると思います 因みにここで算出されたディフューズカラーはこの後テクスチャの色を乗算することになりますので、 モデルの基準色としてマテリアルのディフューズカラーを使用されるのではなく、テクスチャで モデルの基準色を表現するようにすればアンビエントカラーを最大にしても白くはなりませんので、 よろしければお試しになってみてください m(_ _)m
Re: アンビエントカラーについて ( No.2 )
名前:なら(解決) 日時:2010/06/14 01:48

管理人様、ご回答有難うございます。 ご説明内の、テクスチャで基準色を表現―という部分で、以前はテクスチャ有りのモデル、現在は無しのモデルでテストしていることに気付きました。 早速テクスチャを張って試したところ、私のイメージしていた通りの映像になりました。 テクスチャの有無でのこの違いは、正直感覚的にまだピンとと来ない部分もありますが、色々試して理解していきたいと思います。 計算式からの理解は(私には)難しいかも知れませんが…(^_^;)

Page: 1 |