質感の設定
< 前へ [ トップへ ] 次へ >


 前回は光源の配置を扱いました。今回はもう一つの光の表現、“ 質感 ” の設定を行ってみましょう。RINEARN-X 3Dでは、一般的なリアルタイム3DCG環境と同様に、様々な光学反射パラメータを設定可能です。それらを調整しつつ設定する事で、モデルの質感を表現します。ここでは、各光学反射パラメータの解説と設定方法について解説します。


 質感とは

・材質と「見た目」
 私たちは日常、目で見た景色の中から物体の材質などの情報を判断しています。例えばそれがザラザラであるかツルツルであるか、もしくは紙であるかプラスチックであるかまたは金属であるかなど、手で直接触れなくても「見た目」で大体判断する事ができます。これがいわゆる質感ですね。高級感を上げるためのメッキや塗装技術は、この質感の効果をうまく利用したものと言えるでしょう。
 さて、3Dコンピュータグラフィックスの世界では、当然ながら物体には「見た目」しか存在しません。従って物体の材質などは全て見た目によってユーザーに判断されるのです。つまり3Dコンピュータグラフィックスでは「 材質 = 見た目 」なのです。

・材質パラメータ(マテリアルパラメータ)
 RINEARN-X 3Dをはじめ一般的なリアルタイム3Dシステムでは、質感を表現するために「材質パラメータ」という設定項目が存在します。これは立体に照射された光をどのように反射するかを司るパラメータであり、このパラメータを調整する事で紙や金属など様々な質感を表現する事ができるのです。RINEARN 3Dも一般に広く用いられている種類の材質パラメータをサポートしています。それには以下のようなものがあります。

・方向性反射(Directional)
 方向性反射とは、物体表面の微細な凹凸によって様々な方向へ光が向かうような反射です。反射強度は光源と面との角度に依存し、光と面が垂直に近いほど明るく照らされます。光に対して裏側を向いている部位は全く照らされません。例えば紙面での光の反射などが挙げられます。立体表面のざらつきを表現する事ができます。

・回折性反射(Diffractional)
 回折性反射とは、立体形状からして本来は光の当たらない「 立体裏側 (※面の裏側では無い) 」にまで光が回りこんで照らされるような光の反射です。宇宙空間などの完全真空では起こりえない効果ですが、大気中ででは微細な塵などで回折した光が立体裏側まで照らします。このパラメータはそのような効果を設定するものであり、立体の材質と言うよりは大気の濃さや埃の多さを表現するものです。

・環境光反射(Ambient)
 環境光反射とは、光の照射方向に関係なくモデル全体が一様に照らされる反射です。日陰部分の明るさを微調整すると思えば良いでしょう。基本的には自発光と同じような扱いですが、自発光パラメータは光源の明るさによりません。一方で環境光反射は光源の明るさや色に依存するので、光源状態が時間変化する場合に明確な違いが出てきます。また回折性反射との差異も分かりにくいかもしれません。回折性反射の使い方も環境光反射と基本的には同じなのですが、環境光は面の角度を完全に無視して一様に色をつけるため、複雑に凹凸した物体などの日陰部分が完全にフラットな感じに仕上がってしまいます。回折性反射は日陰部分でも微妙な角度差によって色が異なります。

・鏡面反射
 鏡面反射とは、物体表面に光源が写り込むような反射です。物理的には物体表面で全反射を起こした光がそのまま目に届くような反射を表現します。立体表面の滑らかさや金属感を表現する事ができます。なお鏡面反射において気に留めておくべき点は、鏡面反射は方向性反射とは異なり、光線に対して垂直な面が明るく照らされるのでは無いという事です。鏡面反射は光源の光が面で “はねかえって” 目に直接届いた光を見ているという点で、方向性反射とは本質的に異なります。明るく写り込む部分は、光源と平面と目の位置関係において、物理でいう反射の法則を満たす部分です。


・全反射臨界角
 鏡面反射の分散角度(ハイライトの角度的な広がり)を指定します。

・自発光
 自ら発光する明るさを指定します。


 材質パラメータの設定

 材質パラメータの設定は、立体モデル及びポリゴン共通の設定メソッドを呼び出して行います。設定メソッドには以下のようなものがあります。

設定項目 メソッド 引数
方向性反射率 setDirectionalReflection( double ) 0.0〜無限
回折性反射 setDiffractionalReflection( double ) 0.0〜無限
環境光反射 setAmbientReflection( double ) 0.0〜無限
鏡面反射率 setShinyReflection( double ) 0.0〜無限
全反射臨界角 setShinyAngle( double ) 0.0〜1.5
自発光率 setEmission( double ) 0.0〜無限



 いろいろな質感

 たったこれだけの反射設定で、本当に様々な材質の質感を表現できるのかと疑問に思われるかもしれません。しかし実際に設定してみると、その自由度の高さにきっと驚かれることでしょう。試行錯誤しながらの設定作業は案外に楽しいものです。
 それでは材質パラメータを設定して、自分だけの世界観を表現してみましょう。参考までに以下にいろいろな例を挙げておきます。

・プラスチック
スタンダードな質感です。プラスチックではハイライトを狭めに、ガラスでは広めに設定すると良いでしょう。基本的に、艶・光沢のある材質ほどハイライトを強く広めに出すようにします。


/*80×80ポリゴンの球モデル*/
SphereModel3DEG sph = new SphereModel3DEG( 80, 80 );
sph.setRadius( 2.0 );
sph.setColor( Color.blue );

/*質感の設定*/
sph.setDirectionalReflection(1.3);
sph.setDiffractionalReflection(1.2);
sph.setAmbientReflection(0.0);
sph.setShinyReflection(2.0);
sph.setShinyAngle(0.5);
sph.setEmission(0.0);


・布 / 紙
艶の無い材質は、鏡面反射率を 0 にし、ハイライトを全く出さないようにして表現します。

sph.setDirectionalReflection(1.3);
sph.setDiffractionalReflection(1.2);
sph.setAmbientReflection(0.0);
sph.setShinyReflection(0.0);
sph.setShinyAngle(0.0);
sph.setEmission(0.0);


・宝石
環境光の代わりに回折性反射を強く効かせる事で、裏側にも鮮やかで立体的な発色が現れ、透き通った感じを演出できます。

sph.setDirectionalReflection(1.0);
sph.setDiffractionalReflection(2.0);
sph.setAmbientReflection(0.2);
sph.setShinyReflection(2.0);
sph.setShinyAngle(1.4);
sph.setEmission(0.0);


・金属感
金属感を出すには、コントラストを極端に強調する事を考えます。例えば、全体は暗めに抑えつつもハイライトを非常に強くします。

sph.setDirectionalReflection(1.4);
sph.setDiffractionalReflection(0.8);
sph.setAmbientReflection(0.0);
sph.setShinyReflection(2.4);
sph.setShinyAngle(1.5);
sph.setEmission(0.0);


・宇宙空間
宇宙空間では、光のあたらない部位は真っ暗です。このような環境では、方向性反射と鏡面反射のみを有効にします。

sph.setDirectionalReflection(5.0);
sph.setDiffractionalReflection(0.0);
sph.setAmbientReflection(0.0);
sph.setShinyReflection(1.7);
sph.setShinyAngle(1.4);
sph.setEmission(0.0);


・半透明
RINEARN-X 3Dではアルファブレンドをサポートしており、RGB加法混色に加えて半透明効果の演出も可能です。
半透明処理は重いので、ポリゴン数に注意して下さい。

/*半透明色に設定 ( 赤, 緑, 青, アルファ値 ) */
sph.setColor( new Color(0,0,255,140) );

< 前へ [ トップへ ] 次へ >