R12絵の質は、照明とマテリアルの質で決まる。1アンビエントオクルージョンこの章では、マテリアルに関するいろいろな特殊効果について説明します。「アンビエントオクルージョン」は、「くぼんだ部分」の色(性質)を変える特殊効果シェーダです。アンビエントオクルージョンを使ってくぼんだ部分を暗くすると、オブジェクトの立体感を強調できます。図023-1左はカラーのみ(フレーム70)、右は拡散チャンネルにアンビエントオクルージョンを適用したマテリアル(フレーム71)。(サンプル023a)アンビエントオクルージョンの原理は簡単です。アンビエントオクルージョンは、ある点から周囲を調べ、周りに存在する障害物にしたがってその点の色を決定します。図023-2において、「A点」は11本放射したサンプル光線のうち、4本が障害物にぶつかったので「7/11」に相当する色になります。「B点」はサンプル光線が全く障害物にぶつからなかったので「11/11」に相当する色になります。「C点」は11本放射したサンプル光線のうち、8本が障害物にぶつかったので「3/11」に相当する色になります。図023-2また、くぼみが全く同じ形状であっても、大きさが変われば色は変わります。図023-3左の絵において、「D点」は11本放射したサンプル光線のうち、8本が障害物にぶつかったので「3/11」に相当する色になります。図023-3右の絵において、「E点」は11本放射したサンプル光線が全く障害物にぶつからなかったので「11/11」に相当する色になります。図023-3これは、障害物を調べるために使われるサンプル光線の長さが決まっているためです。サンプル光線の長さよりも遠くにある障害物は考慮されません。サンプル光線の長さは「レイの最大距離」で指定します。アンビエントオクルージョンを使うと、現実世界のいろいろな現象を表現できます。一つは「汚れ」とか「くすみ」です。図023-4左の絵は、鏡面反射チャンネルを使って表現しています。全ての部分の反射率が高いのでオブジェクトの形状がよくわかりません。このような時、拡散チャンネルにアンビエントオクルージョンを適用して、オブジェクトの奥まった部分を適度に暗くすると、リアリティーが向上します。現実世界の物質は必ず汚れています。汚れはくぼんだ部分に溜まるものです。人間は無意識のうちにその原則を利用してオブジェクトの立体感を認識しているのです。図023-4左は鏡面反射のみ(フレーム72)、右は拡散チャンネルにアンビエントオクルージョンを適用したマテリアル(フレーム73)。アンビエントオクルージョンを逆に使って、くぼんだ部分を強調することもできます。熱は「内部にこもりやすい」という性質を持っています。発光チャンネルを使ってオブジェクトを発光させると、全体が一様に明るくなってしまいますが、拡散チャンネルにアンビエントオクルージョンを入れて、奥まったところだけ発光させると、「内部に熱がこもっている様子」を簡単に表現できます。図023-5フレーム76、フレーム77また、アンビエントオクルージョンをカラーチャンネルに入れると、カラーを直接変えることができます。この機能を使うと内部と外部で色が異なるような性質を持った動植物や、工業製品を表現できます。図023-6フレーム75また、アンビエントオクルージョンをアルファチャンネルに入れると、奥まった部分を切り抜くことができます。切り抜いた部分には下に重ねた別のマテリアルが出てきます。現実世界において、工業製品を長く使っていると表面の塗装が剥げてきます。剥げるのは表に面した部分だけで、奥まった部分は元のままです。図023-7では、マテリアルを「内部の真鍮」、「白い地塗り」、「表面の塗装」の3層に重ね、上の2層をアンビエントオクルージョンで切り抜いています。このようにすると、内部と外部で全く質感の違うオブジェクトを表現できます。図023-7フレーム74アンビエントオクルージョンはGIの機能を応用したものですが、使い方はそれ程難しくありません。GIなどの機能と組み合わせていくとそれなりにレンダリング時間がかかるので、注意して設定して下さい。図023-8まず、一番上にカラーグラデーションがあります。グラデーションの左側が最も奥まった部分の、右側が表面の部分の色に対応します。「レイの最大距離」は、障害物を探すために放射されるサンプル光線の長さを指定します。この値によってアンビエントオクルージョンの結果は大きく変わります。値を小さくすると計算が軽くなります。サンプル数」、「最大サンプル数」は、エリアシャドウや拡散屈折にあるパラメータと全く同じです。この値はデフォルトで「10」と「64」になっていて、大体このぐらいでいいと思います。「透過を考慮」オプションをチェックすると、障害物の透明度が考慮されるようになります。透明な障害物は「障害物ではない」とみなされるようになります。「自己影のみ」オプションをチェックすると、アンビエントオクルージョンが適用されたオブジェクト以外の障害物を無視するようになります。このオプションが外れていると、他のオブジェクトが近付いたり離れたりする時にアンビエントオクルージョンの効果が変ってしまいます。したがって、アンビエントオクルージョンを「オブジェクトの性質」として使う場合は忘れずにこのオプションをチェックしておいて下さい。アンビエントオクルージョンを「照明の補助」や「絵の強調」の目的で使う場合は、このオプションを外して下さい。2プロクシマル「プロクシマル」は、「他のオブジェクトに接している部分」の色(性質)を変える特殊効果シェーダです。ここで「他のオブジェクト」として使えるのは、「ヌル(オブジェクトの軸)」、「ポイント」、「エッジ」、「ポリゴン」、「スプライン」、「パーティクル」で、ほとんどのオブジェクトやエレメントをターゲットにできます。プロクシマルの特徴は、マテリアルの色を決めるのに「他のオブジェクトを使う」という点です。この性質を利用すると、「他のオブジェクトとの干渉」を表現できます。プロクシマルのターゲットを人形の手に指定すると、人形の手が触れた部分だけオブジェクトの性質を変えることができます。図023-9左は発光(フレーム80)、右はバンプがプロクシマルによって干渉されている(フレーム81)。図023-10左では、プロクシマルを拡散チャンネルに適用し、ターゲットを自分の内部にあるエッジに指定しています。するとポリゴンのワイアフレームを表現できます。図023-10右では、プロクシマルを発光チャンネルに適用し、ターゲットを自分の内部にあるポイントに指定しています。するとポリゴンに含まれるポイントの周囲を発光させられます。図023-10左はオブジェクトに含まれるエッジ(フレーム90)、右はポイントの周囲をプロクシマルで変えている(フレーム91)。このようなパターンをビットマップテクスチャで表現しようとすると、テクスチャを作るのも、貼るのも非常に困難です。プロクシマルの計算は、ターゲットの数によって決まります。ターゲットが数個のオブジェクトであればほとんど時間がかかりませんが、数万個のパーティクルを使うとかなり重くなります。その点に注意して下さい。図023-11まず、ターゲットとなるオブジェクトを一番上の「オブジェクト」フィールドにドラッグアンドドロップして下さい。次に、デフォルトのプロクシマルは「オブジェクト」フィールドにリンクされたオブジェクトだけをターゲットとみなします。子オブジェクトを含めたい場合は「子オブジェクトを含む」オプションをチェックして下さい。その際親オブジェクトを除外したい場合は、「親オブジェクトを除外」オプションをチェックして下さい。次に、デフォルトのプロクシマルは、リンクされたオブジェクトの「軸」をターゲットとみなします。スプラインオブジェクトのスプラインや、ポリゴンオブジェクトのポイントをターゲットにしたい場合は、「スプライン/ポリゴンを使う」オプションをチェックして下さい。ポリゴンオブジェクトのエッジをターゲットにしたい場合は、「エッジを使う」オプションをチェックして下さい。「減衰関数」は、プロクシマルの強度が、ターゲットからの距離によってどのように変化するかを指定します。3乗」、「スムーズ」などです。「混合モード」は、複数のターゲットの値が重なった時にそれをどう扱うかを指定します。プロクシマルの大きさを指定します。「強度」はプロクシマルの明るさを指定します。「背後からの照明」は、文字通り背後からの照明を表現する特殊効果シェーダです。ランプシェードや障子など、光を透過しながら拡散させる働きをもつ物質を表現するために欠かせません。一般的に、3DCGの拡散反射は「表側への反射」しか扱いません。4Dではカラーチャンネルに相当するのですが、例えば、あるオブジェクトの反対側に明るいライトがあって、そのオブジェクトが非常に薄くても、光は全く透過しないのです。したがって、カラーチャンネルだけを指定したランプシェードは図023-12のようになります。図023-12フレーム100現実世界において、確かにアルミホイルのような金属であれば、非常に薄くても光を透過しません。「紙」などの物質は、光を表側に拡散反射するだけでなく、ある程度の光を透過して裏側にも放射します。背後からの照明を使うと、図023-13のようにこれを表現できます。図023-13フレーム101背後からの照明シェーダは、背後から照明されている部分を「発光させる」という働きをするので、発光チャンネルに入れます。図023-14「背後から照明」の使い方は簡単です。レンダリング時間もほとんどかかりません。変えるのは、「照明の強さ」と「影の濃さ」だけで、文字通りの働きをします。「カラー」や「アルゴリズム」などのパラメータを使って、シェーダ内部で色やグラデーションを調整することもできますが、別のシェーダを重ねて調整した方がいいでしょう。図23-13では、背後からの照明に「ノイズ」シェーダを乗算して、紙のムラを表現しています。「背後からの照明」は、ライトからの直接照明にしか働きません。背後からGIで間接照明されても働きません。このような場合は別の方法で背後からの照明を表現する必要があります。背後からの照明によって発光したランプシェードは、GIの効果で周囲を照明できます。4内部拡散反射ステップ3では、紙のような薄い物質に対する背後からの照明について説明しましたが、ロウソクや人体などの半透明の物質は、かなりの厚みがあっても光を透過し、拡散させます。これを表現するのが「内部拡散反射」シェーダです。図023-15左はカラーだけ(フレーム110)、右は内部拡散反射を指定したマテリアル(フレーム111)。カラーチャンネルはロウソクの上面を明るくしますが、側面の上の方は明るくできません。側面が炎の方向を向いていないからです。シェーダも、背後から光が透過してきた部分を「発光させる」という働きをするので、発光チャンネルに入れます。図023-16「拡散内部反射」の使い方も簡単です。レンダリング時間もほとんどかかりません。変えるのは、「強度」と「浸透距離」です。浸透距離は、光が内部を透過できる距離を表し、この点が「背後からの照明」と異なっています。「カラーフィルタ」のグラデーションと「フィルタが働く距離」を指定すると、内部を透過する光の色を距離にしたがって変えることができます。4Dの内部拡散反射は、半透明なオブジェクトに入った光が拡散せず直進するように作られています。図023-17においてロウソクは消えていて、右にある円柱の影がロウソクに落ちています。左の絵ではカラーしか使っていないので、光の当たった部分しか明るくならず、そもそもロウに見えません。右の絵では拡散内部反射を使っているので、光がロウソクの内部を透過し、左側を明るくしています。この部分はいいのですが、現実世界ではロウソクの内部に入った光は拡散するので、本当なら光が当たった部分の「下側」も少し明るくなるべきなのです。図023-17フレーム112、フレーム113この例では大した問題ではありませんが、大部分が影に覆われたオブジェクトに拡散内部反射を適用する場合はこの点に注意して下さい。