Panda3Dのライティングとシェーディングの研究
概要 / Abstract
Panda3Dのデフォルトのレンダラーはかなりシンプルです。計算式が分かっていれば、自分で色を制御しやすいでしょう。
私が検証したことをまとめます。
※もしかしたら間違っているかもしれません。
仕組み
マテリアルの色はDiffuseとAmbientで分かれています。
material.setDiffuse((r, g, b, a)), material.setAmbient((r, g, b, a))で設定します。※rgbaは0~1です。
Diffuseはサンライト、ポイントライト、スポットライトから影響を受けます。
Ambientはアンビエントライトから影響を受けます。
最終的な色はそれらの加算したものです。
Diffuseの色
表示色 = マテリアルの色 * サンライトの色 * cos(入射角)
例
マテリアルの色rが0.8、サンライトの色rが1、入射角が0度(垂直)の時、表示色rは
0.8 * 1 * cos(90) = 0.8
マテリアルの色そのままです。
※gとbも同じように計算します。
例2
マテリアルの色rが0.8、サンライトの色rが1、入射角が60度の時、表示色rは
0.8 * 1 * cos(60) = 0.4
マテリアルの色が半分になりました。
Ambientの色
表示色 = マテリアルの色 * アンビエントライトの色
例
マテリアルの色rが0.8、アンビエントライトの色rが0.2の時、表示色rは
0.8 * 0.2 = 0.16
最終的な表示色
表示色 = Diffuseの表示色 + Ambientの表示色
例
Diffuseの表示色rが0.8, Ambientの表示色rが0.16の時、表示色rは
0.8 + 0.16 = 0.96
※1を超えた場合は1になります。いわゆる白飛びです。
その他(宣伝)
私の作品を見て頂けるとうれしいです。
YouTube
【Multiply or Release】やさしくかがやく色塗りバトル - YouTube
ニコニコ動画
検索用キーワード
Panda3D, レンダリング, 光と影の芸術, 光と陰影の芸術