Tips

実験と検証 / Try & Memo編

マテリアルについて(ルートノード)

まえがき

光、すなわちある範囲内の波長を持つ電磁波であるところの可視光線。波でもあり、また粒子でもあるこの電磁波は、空間内を300,000,000[m/s]の速度で直進し、物質に衝突すればその分子の格子間隔によってある波長は吸収され、もしくは一定の角度で反射・屈折する。その性質は、非常に簡潔、そして厳密です。

しかしながら自然界には様々な物質が存在し、その見え方も千差万別です。空、海、木々の緑、金属、人間の肌……。それらのものがすべて異なった物質として目に映るのは、光がそれらを区別しているわけではありません。それら各々の物質が持つ、複雑な分子構造が光を吸収し、あるいは反射し、屈折し、複雑な見え方を決定しているのです。

あ、そこの人、ブラウザを閉じないように。

しかし、現代のCGでは、光の性質をシミュレートすることはできても、自然界に存在するあらゆる物質の分子構造を瞬時にシミュレートすることはできません。物質の「材質」、その見え方をシミュレートすることはまだできないのです。そこでCGでは、物質の「材質」を表現するために、現実の物理法則とはまったく異なるパラメータを採用することにしました。これは今ではほとんどのCGプログラムで採用され、呼称が異なってもその考え方はほぼ共通です。

それがすなわち、マテリアル(表面材質)です。

4つのルートノード

Poserでレンダリングされる全てのエレメントは、マテリアルを定義するのに、マテリアルルームを使用します。マテリアルルームは「手続き型シェーダ(プロシージャルシェーダ)」をサポートしています。表面の色など基本となる材質設定から樹木のように枝を伸ばし、肌や異方性反射といった様々な属性である節(ノード)を追加していくのです。そして、その根幹(ルート)となる材質設定をルートノードと呼びます。

ここでは4つのルートノードについて簡単に説明し、Poserで最もよく使用することになるPoserサーフェースノードについてまとめます。ちなみに、ここでは簡易設定は使用しません。

Poserには4種類のルートノードが存在します。

Poserサーフェースノード

フィギュアの肌や、服、髪、その他、あらゆるオブジェクトのすべてのマテリアルグループについて一つずつ存在します。マテリアルグループはポリゴンのグループの一種で、フィギュアのパーツ分けとは異なります。地面もPoserサーフェースノードを持っています。

ライトノード

ライトの色や減衰などを定義します。ライトごとに一つずつ存在します。

背景

ウィンドウ内の何も存在しない場所、背景を定義します。単純な単一色から、画像、ムービーファイルなどを設定することができます。シーンファイル内に一つだけ存在します。

大気

シーンファイルの中の大気の属性を定義します。奥行きに伴ってオブジェクトが霞んだり、靄などを発生されることができます。シーンファイル内に一つだけ存在します。

Poserサーフェースノードのパラメータについて

Poserサーフェースノードには、以下のパラメータがあります。その中の基本的なパラメータには、その他の3DCGソフトでも共通のものが多くあります。

基本的なパラメータ
特殊なパラメータ

では、ひとつずつパラメータの内容を確認していきましょう。

図1
図1:拡散色の違い
拡散色 (Diffuse_Color)

オブジェクトの表面の色を決定します。カラーパレットで色を選択できます。

図2
図2:拡散値の違い
拡散値 (Diffuse_Value)

拡散色の強さを0〜1までの数値で決定します。この数値が拡散色に乗算されるので、拡散値が1の時は拡散色がそのまま反映されますが、拡散値が0の場合は、表面の色は黒になります。拡散色が赤(R=255,G=0,B=0)で拡散値が0.5の場合、実際の色は暗い赤(R=128,G=0,B=0)になります。

Poserでは、拡散色に黒を設定することと、拡散値に0を設定することは同義になります。

なぜ「表面」色とか「色」とか言わずに「拡散」色と呼ぶのでしょう? 現実の世界では、物質の色はその表面(または表面近く)で「拡散」した光によって決定されるからです。反射した光は鏡面色または反射色になります。吸収された光は色には現れません。物質に吸収されず、物質表面の微妙な凹凸によって乱反射(拡散)した光が、その物質の色となって目に映ります。

したがって、表面に凹凸の少ない物質は拡散値が低くなります。鏡のように周囲の色を良く反射したり、ガラスのようにほとんどの光を透過するものは、拡散値を低く設定するとよいでしょう。

図3
図3:ライトの色による見え方の違い

ここで誤解されやすいのがライトと拡散色の関係です。物質の色は減色混合で決定されます。つまりライトの色と物質の色の、赤・青・緑の各成分の乗算で表現されるのです。

青い物質に赤いライトを当てると何色に見えるでしょうか。紫ではありません。

物質が青く見えるのは、その物質が青い光だけを吸収せず反射するからです。したがって、いくら強いライトを当てても、その中に青い光の成分が含まれていなければ、その物質は光を反射しません。

フォトレタッチソフトなどに慣れ親しんでいる方は、ライトと拡散色、そして拡散値は乗算される、と考えたら分かりやすいでしょう。

図4
図4:鏡面色による光沢の違い
鏡面色 (Specular_Color)

ライトが当たった時に現れる、光沢の色を決定します。カラーパレットで色を選択できます。

図5
図5:鏡面値による違い
鏡面値 (Specular_Value)

鏡面色の強さを0〜1までの数値で決定します。この数値が鏡面色に乗算されるので、鏡面値が1の時は鏡面色がそのまま反映されますが、鏡面値が0の場合は、光沢は現れません。鏡面色が赤(R=255,G=0,B=0)で鏡面値が0.5の場合、実際の光沢の色は暗い赤(R=128,G=0,B=0)になります。

Poserでは、鏡面色に黒を設定することと、鏡面値に0を設定することは同義になります。

図6
図6:ハイライトサイズ
ハイライトサイズ (Highlight_Size)

光沢のサイズを決定します。値が大きいほど光沢は強く広範囲に広がり、値が小さくなるほど鋭く小さくなります。

環境色 (Ambient_Color)

現実の世界では、ライトが直接当たっていてない場所でも、真っ暗になるということはなかなかありません。これは、ライトが当たっている物体から放射された拡散光が、間接光となって周囲を照らしているからです。また、晴れた日中のように、日陰になっている場所でも空全体から青い光を受けることもあります。このような間接光や天空光を表現するのに、IBLやラジオシティが普及していない段階では環境光という考えを使用しました。環境光は影を落とさず、あらゆる方向から物体を照らす光です。

Poserでは環境光はマテリアルごとに設定します。環境色および環境値が設定されたマテリアルは、ライトの照射にかかわらず設定されただけの明るさを持つため、強い環境光が設定されたマテリアルは発光しているように見えます。

環境色は、環境光の色を決定します。

図7
図7:環境色と環境値
環境値 (Ambient_Value)

環境色の強さを0〜1までの数値で決定します。この数値が環境色に乗算され、マテリアルの表面に「加算」されます。

図8
図8:透明度
透明度 (Transparency)

カメラの平面に対して平行なオブジェクトの面(カメラの正面を向いている面)の透明度を決定します。透明度が1の時、オブジェクトは透明になります。

透明度_エッジ (Transparency_Edge)

カメラの平面に対して垂直なオブジェクトの面(エッジ)の透明度を決定します。透明度_エッジが1の時、オブジェクトの端面は透明になります。

透明度_減少 (Transparency_Falloff)

オブジェクトがそのエッジに向かうにつれて「透明度」から「透明度_エッジ」へ移り変わる、その変化の度合いを決定します。値が小さければエッジが鋭くなり、値が大きくなればエッジは鈍くなります。

透明度および透明度_エッジは通常0〜1の値を入力しますが、1以上の数値を入力することもできます。

図9
図9:半透明色と半透明値
半透明色 (Translucence_Color)

オブジェクトの不透明部分に加算する色を決定します。カラーパレットで色を選択できます。

半透明値 (Translucence_Value)

半透明色の強さを0〜1までの数値で決定します。この数値が半透明色に乗算されるので、半透明値が1の時は半透明色がそのまま反映されますが、半透明値が0の場合は、半透明色は加算されません。

半透明色はライトに依存しないので、透明度が設定されていないオブジェクトでは環境色と同じ働きをします。

図10
図10:反射色による写り込みの違い
反射色 (Reflection_Color)

オブジェクトに写り込む色を指定します。このパラメータは通常は無効になっており、なんらかのノードを接続したときに初めて有効になります。鏡のように他のオブジェクトを写り込ませるには、ここに反射ノードを追加してレイトレーシングでレンダリングする必要があります。ここでは、レイトレーシングによる反射の説明などは省略します。

図11
図11:反射値による写り込みの違い
反射値 (Reflection_Value)

反射色の強さを0〜1までの数値で決定します。このパラメータは通常は無効になっており、反射色パラメータになんらかのノードを接続したときに初めて有効になります。反射色に接続したノードの内容に反射色とこの数値が乗算され、その後拡散色に加算されます。

反射は拡散色に対する加算なので、ライトの影響を受けていることがわかります。

図12
図12:屈折
屈折色 (Refraction_Color)

オブジェクトを透過したときの屈折として映る色を指定します。 このパラメータは通常は無効になっており、なんらかのノードを接続したときに初めて有効になります。水晶のような屈折を再現するには、ここに屈折ノードを追加してレイトレーシングでレンダリングする必要があります。ここでは、レイトレーシングによる屈折の説明などは省略します。

屈折値 (Refraction_Value)

屈折色の強さを0〜1までの数値で決定します。このパラメータは通常は無効になっており、屈折色パラメータになんらかのノードを接続したときに初めて有効になります。屈折色に接続したノードの内容に屈折色とこの数値が乗算され、その後オブジェクトの表面の不透明部分に加算されます。

図12のように、オブジェクトに透明度が設定されていなくても、屈折の内容が反映されていることがわかります。

図13
図13:バンプ
バンプ (Bump)

オブジェクトの形状は変化させないまま、マッピングされた高低差の情報を元に法線を変化させ、疑似的に凹凸を表現する手法をバンプマッピングといいます。このパラメータは通常はオフになっており、なんらかのノードを接続したときに初めて有効になります。凹凸を再現するには、表面の高低差をグレースケールで表現したノードを接続する必要があります。

このパラメータの数値は凹凸の強度を決定します。数値が正の場合、接続されたノードの黒い部分は低く、白い部分は高くなります。数値が負の場合、高低差は逆転し、黒い部分は高く、白い部分は低く扱われます。

この高低差は疑似的なものですので、オブジェクトの輪郭が変形していないことがわかります。

バンプの値は距離で設定します。単位は環境設定で設定された基本単位によります。環境設定の基本単位がセンチメートルの場合、バンプの値が1.00であればオブジェクトは最大で1センチの高低差があるかのように陰影付けされます。

図14
図14:ディスプレイスメント
ディスプレイスメント (Displacement)

レンダリング時にオブジェクトを微細なマイクロポリゴンに分割した際、マッピングされた高低差の情報を元に形状を変化させる手法をディスプレイスメントマッピングといいます。このパラメータは通常はオフになっており、なんらかのノードを接続したときに初めて有効になります。凹凸を再現するには、表面の高低差をグレースケールで表現したノードを接続する必要があります。また、レンダリングに反映させるには、レンダリングオプションで「ディスプレイスメントマップ使用」にチェックを入れなければなりません。

このパラメータの数値は凹凸の強度を決定します。数値が正の場合、接続されたノードの黒い部分は低く、白い部分は高くなります。数値が負の場合、高低差は逆転し、黒い部分は高く、白い部分は低く扱われます。

日本語版のPoserでは、ディスプレイスメントを部分的に「置き換え」と訳している箇所がありますので注意して下さい。

ディスプレイスメントの値は距離で設定します。単位は環境設定で設定された基本単位によります。環境設定の基本単位がセンチメートルの場合、ディスプレイスメントの値が1.00であればオブジェクトは最大で1センチの高低差を持つことになります。

代替拡散 (Alternate_Diffuse)

拡散色の代替として使用します。このパラメータは通常はオフになっており、なんらかのノードを接続したときに初めて有効になります。このパラメータにノードを接続すると、その内容が色(カラーパレットで色を選択できます)と乗算された後にオブジェクトの表面に加算されます。このパラメータには通常のシェーディングが適用されません。肌やベルベット、髪、スケッチシェーディングなど、通常のシェーディングを行いたくないノードを使用する時は、この代替拡散ノードを使用します。

代替鏡面 (Alternate_Specular)

鏡面色の代替として使用します。このパラメータは通常はオフになっており、なんらかのノードを接続したときに初めて有効になります。このパラメータにノードを接続すると、その内容が色(カラーパレットで色を選択できます)と乗算された後にオブジェクトの表面に加算されます。このパラメータには通常のシェーディングが適用されません。異方性やブリン・髪など、通常のシェーディングを行いたくないノードを使用する時は、この代替鏡面ノードを使用します。

図15
図15:反射ライトマルチと反射_Kd_マルチ
反射ライトマルチ (Reflection_Lite_Mult)

反射色がシェーディングの影響を受けるかどうかを指定します。チェックがオンになっている場合、反射色はライトによって陰影付けされます。デフォルトではオンになっています。

反射_Kd_マルチ (Reflection_Kd_Mult)

反射色が拡散色の影響を受けるかどうかを指定します。チェックがオンになっている場合、反射色は拡散色と乗算されます。オフの場合は、拡散色の上に加算されます。デフォルトではオフになっています。

図16
図16:無理矢理グラデーションバンプを使用した場合
グラデーションバンプ (Gradient_Bump)

Poser4以前でバンプマッピングを実現するために使用した、.BUM形式のマップを使用するためのパラメータです。このパラメータは通常はオフになっており、なんらかのノードを接続したときに初めて有効になります。グラデーションバンプは勾配バンプとも訳され、高低差を表すバンプマップの代わりに、法線の傾きを表す.BUM形式のマップを使用します。

.BUMはU方向の凹凸をR成分に、V方向の凹凸をG成分に記録したbmpファイルです。.BUM形式のファイルを使用するためには、.BUM形式のファイルを読み込んだイメージマップノードをグラデーションバンプノードに接続し、Poser4互換レンダリングを使用します。

Fireflyレンダリングでは、バンプに接続したマップの輝度差から法線の傾きを計算しますので、グラデーションバンプを使用する必要はありません。Fireflyレンダリングでグラデーションバンプを使用した場合、接続されたノードの内容によって法線がシフトしたレンダリング結果が得られます。

オブジェクト表面にマッピングされた「面の傾き」の情報によって、光源が回転したかのようにハイライトの位置が変化していることがわかります。

図17
図17:レンダリングによる地面の違い
影のみを受ける (Shadow_Catch_Only)

このチェックボックスをオンにすると、オブジェクトはその他の設定に関わらず、透明な板のようにレンダリングされます。陰影付けや鏡面反射なども行われず、他のオブジェクトからの影のみを受けるようになります。一番わかりやすい例がデフォルトで表示されている地面です。地面はデフォルトでこのチェックボックスがオンになっているので、拡散色にイメージマップが接続されていますが、透明になっています。Poser4互換レンダリングでは、このチェックボックスが無視されるので地面がレンダリングされます。

図18
図18:トゥーンIDによる輪郭線の違い
トゥーンID (ToonID)

レンダリングオプションで「トゥーンの輪郭」チェックボックスをオンにすると、マテリアルグループごとに輪郭線が描画されます。腕と手首、顔と唇など、マテリアルが異なっていても輪郭線を描画したくない場合は、トゥーンIDに同じ値を入力しておくと輪郭線が描画されません。

図19
図19:ノーマル_前の効用
ノーマル_前 (Normals_Forward)

両面ポリゴンをレンダリングすると、不正な模様が現れることがあります。これは、Poserがレンダリング時にポリゴンをマイクロポリゴンに分割する際、前後を正しく判断できないために起こると思われます。このチェックボックスをオンにすると、オブジェクトの法線がカメラのある方向を向きますので、すべてのポリゴンを表向きとしてレンダリングすることができます。

その他のルートノードについては省略します。機会があれば、またいずれ。

▲ Tipsタイトルに戻る
◆ ホームに戻る