Mathematica 9 is now available

Documentation / Mathematica / Mathematicaブック / Mathematicaの仕組み / グラフィックスとサウンド オブジェクトの構造  /

2.10.12 照明効果と曲面の反射特性

3Dグラフではデフォルトで照明効果を取り入れた描画が行われる(オプションの設定はLighting -> True).具体的には擬似照明法に基づき多面体の色付けが行われる.

照明の度合いは2つの条件で決定する.その1つは「アンビエントライティング」(背景光)の設定で,被写体に対し一様な陰影処理を施すというものである.もう1つは,点光源の設定である.必要ならば光源を複数配置し,個々の点光源には固有の位置と色を持たせることが可能である.描画の際はすべての点光源からの光が合成され各多角形の面に落ちる光量と光彩が算出される.

擬似照明の設定

デフォルトの照明設定では赤,緑,青の3色,3つの点光源だけを使い,もれ光は使わない.また,点光源は被写体の右手方向に45度間隔で配置される.

デフォルトの擬似照明設定で曲面を描画する.

In[1]:= Plot3D[Sin[x + Sin[y]], {x, -3, 3}, {y, -3, 3},
Lighting -> True]

Out[1]=

今度はアンビエントライティングの処理を加え点光源をすべて除去したらどう表示が変わるか見てみる.

In[2]:= Show[%, AmbientLight -> GrayLevel[0.5],
LightSources -> {}]

Out[2]=

被写体(曲面)の左側に点光源を1つ設 ける.

In[3]:= Show[%,
LightSources -> {{{-1, 0, 0.5}, GrayLevel[0.5]}}]

Out[3]=

光源の位置指定は表示座標系で行う.表示面がxyで,表示面に対し垂直入射方向が正のz軸に対応している.この座標系で光源の配置指定を行うと,座標系自体は見る者に対して固定なので,被写体を動かしても光源はシフトせず見やすくなる.

ビューポイントを変え被写体(曲面)を多少回転させる.それでも光源の位置は被写体の左側のままである.

In[4]:= Show[%, ViewPoint -> {2, 2, 6}]

Out[4]=

多角形面の色調は,面に入射する光だけでなく,面がどの程度光を反射するかにもよる.反射の度合いを制御するにはグラフィックス指示子 SurfaceColorを使う.

SurfaceColorを使わなければ,多角形はつや消しの白の面を持つものとされる.つまり,結果的に,入射光のすべてが全方向に一様に反射されることになる.材料にたとえると,表面塗布のない白い紙というところである.

これに対し SurfaceColorを使うと複雑な表面形態が指定できる.基本的に表面形態には拡散反射と鏡面反射の2種類がある.

拡散反射とは,面に入射する光はあらゆる方向に一様に散乱する現象をさす.表面がこのような状態にあるときは「さえない色」とか「つや消し」的な面として映る.拡散反射体はランバート(Lambert)の反射法則に従うことが知られており,反射強度は入射強度に を掛けた値として求まる.ここで とは入射光と法ベクトルのなす角度である. のとき,反射強度はゼロになる.

鏡面反射では,面は鏡のように入射光を反射する.このため,「光沢のある」とか「つやのある」表面として映る.理想的な鏡であれば,入射する光はすべて入射角と同じ角度で反射される.だが,実際の鏡面では,材料によっても程度は違うが,入射光がある程度は散乱するので,反射光が広い角度範囲で分布してしまう. Mathematicaでは強度分布の決定のため,フォン(Phong)の照明モデルを使い,そこで定義される「鏡面指数」と呼ばれる面に固有な定数を適当な値に設定することで分布を計算するようになっている.このモデルは,鏡面指数を とし,反射角方向から角度ずれた方向に反射される光の強度は で与えられる,というものである. のとき,反射面は理想的な鏡面になる.また,が減少すれば散乱強度が上がるので,表面は光沢性を失ってくるし, で完全な拡散反射になる.実際の材料では 1から数百の値を取ることが知られている.

実際の材料では拡散反射と鏡面反射の両方の効果が有効である.さらに,材料の面は固有の色を持っているので,白色光が照らされるとその固有の色で反射光を放つ.そして,白色以外の光を照らした場合は,反射光は入射光の色成分と材料固有の色の積で与えられる色成分の光を放つことになる.

Mathematicaでは両方の反射効果に個別に固有の色を指定することが可能である.反射光がゼロの材料面には, GrayLevel[0]と設定し黒を固有色として指定しておく.また,「白っぽい」色付き表面には,表面の反射率(アルベド)を aとし GrayLevel[a]と設定する.

多角形の表面反射特性

各種グラフィックスオブジェクトを定義したパッケージを読み込ませる.

In[5]:= <<Graphics`Shapes`

Sphereを使い球体を作る.

In[6]:= s = Sphere[ ] ;

デフォルトの設定のまま表示する.表面がつや消しになる.

In[7]:= Show[Graphics3D[s]]

Out[7]=

次に,拡散反射を低く押さえて,高目の鏡面反射で表示し直す.すると,光源の近くの面が輝いて表示され,他の部分は暗めに表示される.

In[8]:= Show[Graphics3D[{
SurfaceColor[GrayLevel[0.2],
GrayLevel[0.8], 5], s}]]

Out[8]=

光源と表面の色に設定において,注意しなければいけないことが1つある.それは,どの多角形であってもそこから反射する光の強度は1を越えてはいけない,ということで,もし,1以上に設定した場合は表示がおかしくなる.



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.