Panda3Dのライティングとシェーディングの研究

Posted: / Modified:

概要 / 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, レンダリング, 光と影の芸術, 光と陰影の芸術