立体の材質設定

ここでは、立体の材質設定を扱います。ここで言う「材質」とは、 表面の模様などではなく、光の反射に関する特性の事を意味します。

- 目次 -

材質パラメータ(マテリアルパラメータ)

材質と光の反射

実際の物体は、材質によって見え方が異なります。 例えば単なる板でも、それが紙なら「サラサラ」に見え、 プラスチックならば「ピカピカ」に見えます。 そのように見え方が異なる理由は、厳密には様々なものがありますが、 恐らく最も大きいのは光の反射効果でしょう。

様々な反射

一言で光の反射と言っても、それはいくつかの種類に分けられます。

例えばプラスチックの板を例に挙げてみましょう。 全体的に一様な明るさで見えている部分は、光がプラスチックに当たり、 それが様々な方向に拡散的に反射した光が、 我々の目に入って見えているわけです。スポット的に明るい部分(ハイライト)は、 光源からまっすぐ飛んできた光がプラスチック表面で全反射したものが見えているわけです。 さらに、光に対して裏側にある部分は、 光が空気中で散乱されたものが板の裏側まで回りこんで照らしているわけです。

このように、光の反射にも様々なものが存在します。 3DCGでは、こういった各種の反射のバランスを調整する事で、 材質を表現します。このバランスを調整するパラメータの事を材質パラメータ (マテリアルパラメータ)と呼びます。

拡散反射パラメータ( Diffuse )

拡散反射パラメータは、光が立体に当たり、 その後様々な方向へ拡散的に反射する度合いを調整するパラメータです。 例えるなら、紙に光が当たっている場合に、 その明るい面における光の反射の度合いを調整する感じです。

拡散反射パラメータは、立体表面のさらさらな質感に大きく影響します。 布や紙では大きめに指定すると良いでしょう。逆に金属などでは小さめに抑えます。

拡散反射の様子
拡散反射のみを最大にした場合
拡散反射のみでは、光の方向を向いている面ほど明るく照らされ、向いていない面は真っ暗になる。

モデルに対して設定する

モデルに対して拡散反射パラメータを設定するには、 setModelDiffuse関数を使用します。

- 関数仕様 -

void setModelDiffuse ( int modelID, float ref )

最初の引数modelIDには、設定対象のモデルのIDを指定します。 続く引数refには、拡散反射の強さを0.0〜1.0の範囲で指定します。

ポリゴンに対して設定する

ポリゴンに対して拡散反射パラメータを設定するには、 setPolygonDiffuse関数を使用します。

- 関数仕様 -

void setPolygonDiffuse ( int polygonID, float ref )

最初の引数polygonIDには、設定対象のポリゴンのIDを指定します。 続く引数refには、拡散反射の強さを0.0〜1.0の範囲で指定します。

回折反射パラメータ( Diffractive )

拡散反射パラメータは、光が立体付近の空気中で散乱され、 立体裏側まで回りこむ度合いを調整するパラメータです。 この効果が無いと、宇宙空間に浮かぶの天体のように、 立体の裏側が完全な真っ暗になってしまいます。

このパラメータは、 後で扱う環境光反射パラメータと同じような使い方をします。 しかし、環境光反射とは異なり、 回折反射では光源方向との角度に応じてグラデーションで照らされます。

モデルに対して設定する

モデルに対して回折反射パラメータを設定するには、 setModelDiffractive関数を使用します。

- 関数仕様 -

void setModelDiffractive ( int modelID, float ref )

最初の引数modelIDには、設定対象のモデルのIDを指定します。 続く引数refには、回折反射の強さを0.0〜1.0の範囲で指定します。

ポリゴンに対して設定する

ポリゴンに対して回折反射パラメータを設定するには、 setPolygonDiffractive関数を使用します。

- 関数仕様 -

void setPolygonDiffractive ( int polygonID, float ref )

最初の引数polygonIDには、設定対象のポリゴンのIDを指定します。 続く引数refには、回折反射の強さを0.0〜1.0の範囲で指定します。

環境光反射パラメータ( Ambient )

環境光反射パラメータは、 立体の周囲から一様に飛んでくる光の効果を調整するパラメータです。 現実の光は、立体に向かって直進してくるものだけではありません。 まず部屋の壁など、別の方向へ飛んでから散乱され、 その後間接的に立体を照らす光も存在します。 環境光とは、こういった周囲からの光の事を指します。

このパラメータは、 すでに扱った回折反射パラメータと同じような使い方をします。 しかし、回折反射とは微妙に異なり、照らし方に角度依存性が全くありません。 従って立体全体に一様な色が付くようになります。

環境光反射の様子
環境光反射のみを最大にした場合
環境光反射のみでは、面の向きに関わらず、全体が一様な明るさで照らされる。

モデルに対して設定する

モデルに対して環境光反射パラメータを設定するには、 setModelAmbient関数を使用します。

- 関数仕様 -

void setModelAmbient ( int modelID, float ref )

最初の引数modelIDには、設定対象のモデルのIDを指定します。 続く引数refには、環境光反射の強さを0.0〜1.0の範囲で指定します。

ポリゴンに対して設定する

ポリゴンに対して環境光反射パラメータを設定するには、 setPolygonDiffractive関数を使用します。

- 関数仕様 -

void setPolygonAmbient ( int polygonID, float ref )

最初の引数polygonIDには、設定対象のポリゴンのIDを指定します。 続く引数refには、環境光反射の強さを0.0〜1.0の範囲で指定します。

鏡面反射パラメータ( Specular )

鏡面反射パラメータは、光源から立体へまっすぐ向かってきた光が、 立体表面で散乱されずに、そのまま鏡面反射する度合いを調整するパラメータです。

例えばプラスチックなどのつるつるした材質において、 光源が白く移りこむ箇所(ハイライト)は、この鏡面反射によるものです。

このパラメータにより、立体表面の滑らかさを表現する事ができます。

鏡面反射の様子
鏡面反射のみを最大にした場合
鏡面反射のみでは、面の向きと光源の位置、および視点の位置との間に、物理学的な反射の法則を満たす箇所のみが明るく照らされる。

モデルに対して設定する

モデルに対して鏡面反射パラメータを設定するには、 setModelSpecular関数を使用します。

- 関数仕様 -

void setModelSpecular ( int modelID, float ref, float angle )

最初の引数modelIDには、設定対象のモデルのIDを指定します。 続く引数refには、鏡面反射の強さを0.0〜1.0の範囲で指定します。 最後の引数angleには、ハイライトの広がり角を0.0〜1.5までの範囲で指定します。

ポリゴンに対して設定する

ポリゴンに対して鏡面反射パラメータを設定するには、 setPolygonSpecular関数を使用します。

- 関数仕様 -

void setPolygonSpecular ( int polygonID, float ref, float angle )

最初の引数polygonIDには、設定対象のポリゴンのIDを指定します。 続く引数refには、鏡面反射の強さを0.0〜1.0の範囲で指定します。 最後の引数angleには、ハイライトの広がり角を0.0〜1.5までの範囲で指定します。

自発光パラメータ( Emissive )

自発光パラメータは、一様に発光する度合いを調整するパラメータです。 見え方の効果は環境光反射とほぼ同じですが、こちらは光源の輝度に全く影響されません。

モデルに対して設定する

モデルに対して自発光パラメータを設定するには、 setModelEmissive関数を使用します。

- 関数仕様 -

void setModelEmissive ( int modelID, float ref )

最初の引数modelIDには、設定対象のモデルのIDを指定します。 続く引数refには、自発光の強さを0.0〜1.0の範囲で指定します。

ポリゴンに対して設定する

ポリゴンに対して自発光パラメータを設定するには、 setPolygonEmissive関数を使用します。

- 関数仕様 -

void setPolygonEmissive ( int polygonID, float ref )

最初の引数polygonIDには、設定対象のポリゴンのIDを指定します。 続く引数refには、自発光の強さを0.0〜1.0の範囲で指定します。