ここで、今まで全く説明してこなかったノードとノードネットワークについて説明しておきます。 レンダリングについて深く踏み込んでいくには、どうしても避けて通れない話題です。
ノードとは、レンダリングの各処理を構成する機能ブロックのことです。 といっても、『座標変換』・『隠面消去』・『陰影計算(シェーディング)』・『表面処理(マッピング)』のような3DCG処理の一般的な処理単位のことではありません。
『マテリアル設定を読み込む』、『色を調整する』、『陰影の計算結果を出力する』のような、Blender内部での、Blenderの都合で分割されている機能ブロックです。
Blenderでは、機能ブロックであるノードをつないでノードネットワークを構築することで、レンダリング処理を構成することができます。 つまり、製造ラインのベルトコンベアのようなものです。 ベルトコンベアでデータを受け渡しながら処理を進めることができるのです。
ベルトコンベア上の機能ブロックを好きなように組み合わせることで、自分の好みに調整したレンダリング結果が得られるのです。
製造ラインであるノードネットワークには3種類があります。
1つ目がシェーダノードネットワークで、マテリアル設定の情報を読み込んで陰影を計算し、計算結果を出力します。 マテリアル1つにつき、1つのシェーダノードネットワークを持つことができます。
2つ目がテクスチャノードネットワークで、2次元のテクスチャ画像を読み込んで3次元の面に合うように加工し、結果を出力します。 テクスチャ1つにつき、1つのテクスチャノードネットワークを持つことができます。
3つ目がコンポジットノードネットワークで、レンダリング結果を入力し、様々な加工をしてから出力します。 ボカシをかけたり、実写の映像と合成することができます。
本ウェブサイトでは、これまで、ノードについて一切触れませんでした。 つまり、製造ラインであるノードネットワークは構築しませんでした。
ノードについて全く意識せずに済んでいたのは、Blenderが既定の処理を行っていたためです。 利用者がノードネットワークを構築しなかった場合には、Blenderが既定の処理でレンダリングを行ってくれます。
つまり、Blenderが用意した製造ラインで処理が行われていたのです。 知らないところで、Blenderが良きに計らってくれていたのです。
ここで、少しだけノードを使って遊んでみましょう。 コンポジットノードネットワークを構築し、レンダリング後の画像の加工を行います。
カメラからの距離に応じて淡い水色を加算することで霧を表現してみましょう。 カメラに近い面では加算の係数を小さく、遠いほど大きくなるようにします。
では、作業を開始しましょう。 今回は、Blenderの新規ファイルを元にして作業を行います。 画面上部のプルダウンメニューの"File" -> "New"を実行して新規ファイルを開いてください。
まずは、地面に見立てた平面を追加しましょう。 空中に立方体が浮いているだけでは、霧の効果がわかりずらいですから。
キーボードのSHIFT+Aを押します。
上図のように"Add"というタイトルのメニューが表示されますので、"Mesh" -> "Plane"を実行します。
上図のように平面が追加されます。
続いて、平面を下に下げましょう。 Z方向に -1 移動します。
キーボードのG(ジー)を押し、続けて、Z -> -1 -> Enterキーを入力します。
上図のように平面をZ方向に -1 移動します。
続いて、平面を8倍に拡大します。 キーボードのSを押し、続けて、8 -> Enterキーを入力します。
上図のように平面を8倍に拡大します。
これで、地面に見立てた平面の準備ができました。 では、いよいよノードネットワークの構築に進みます。
ノードネットワークの操作はNode Editorウィンドウで実施します。 3D ViewウィンドウからNode Editorウィンドウに切り替えましょう。
上図のようにウィンドウタイプ選択リスト()をNode Editorに切り替えます。
上図のようにNode Editorウィンドウが表示されます。 なお、ウィンドウの右側にプロパティシェルフが表示されていますが、今回は使いませんのでキーボードのNを押して折りたたんでおきましょう。
次に、コンポジットノードネットワークを構築します。 これは、Blenderが裏で適切に処理していた製造ラインを捨てて、自分好みの製造ラインを用意するということです。
上図のようにNode Editorウィンドウのヘッダにあるノードタイプからコンポジットを選択し、さらに、すぐ右側にあるUse Nodesチェックボックスをオンにします。
上図のようにNode Editorウィンドウ上にコンポジットノードネットワークが表示されます。 左右に2つ並んでいるウィンドウがノード(コンポジットノード)であり、それをつないでいる線が接続線です。
ノードネットワークの表示倍率が小さくて見づらいので、大きくしましょう。 キーボードのHomeキーを押します。
上図のように画面に収まるように表示倍率が調整されます。
ではここで、製造ラインであるノードネットワーク上を、データがどのように流れているかを説明します。
上図のように接続線の両端が丸につながっています。 この丸は『ソケット』と呼ばれるもので、ノードが持っている入力と出力の窓口です。 ソケットとソケットをつなぐことでノードネットワークが構築され、情報が流れるようになります。
ノードの左側にあるのが入力ソケットで、右側にあるのが出力ソケットです。 入力ソケットは必ず左側に、出力ソケットは必ず右側にあります。
この例ではソケットは縦に3つ並んでおり、それぞれ、Image・Alpha・Zを受け渡します。
Imageとは画像のこと、つまり、各ピクセルのRGB値のことです。 Alphaは不透明度のことで、Z深度は視点からの距離です。
続いて、左右のノードについて説明します。
上図のように左側がRender Layersノード、右側がCompositeノードです。
Render Layersノードは、指定されたシーンを、指定されたレンダーレイヤの設定に従ってレンダリングし、結果を出力します。 つまり、製造ラインの起点です。
Compositeノードは、画像を受け取り、それを最終的なレンダリング結果とします。 つまり、製造ラインの終点です。
ここで、シーンとレンダーレイヤについて補足しておきます。
シーンとは、文字通り場面のことで、室内、車の中、砂浜など、複数の場面が登場するなら、場面に応じて複数のシーンを用意します。 初期ファイルには1つのシーンしか含まれていませんが、いつでも自由にシーンを追加・削除することができます。
上図のようにInfoウィンドウのヘッダでシーンの確認や切り替えなどの操作が行えます。 "Scene" という名称のシーンが初期ファイルに含まれる標準のシーンです。
続いて、レンダーレイヤについて説明します。 レンダーレイヤとは、レンダリングの条件や設定に名前を付けて管理するためのものです。 オブジェクトの配置に使う全20レイヤのどれをレンダリング対象に含めるか、レンダリング時に影を付けるかどうかなどを設定し、名前を付けて保存します。
初期ファイルには "RenderLayer" という名称のレンダーレイヤが用意されています。 "RenderLayer" は全20レイヤをレンダリング対象に含める設定になっています。
上図のようにPropertiesウィンドウのレンダーレイヤパネル切替ボタン()を押すことでレンダーレイヤの一覧が表示されます。
では、コンポジットノードネットワークの説明に戻ります。
上図のように左側のRender Layersノードには、"Scene" と "RenderLayer" が初期状態で選択されています。 つまり、標準のシーンを、全20レイヤを対象にレンダリングするということです。
Render Layersノードには、まだ説明しておきたいことがあります。
上図のように一見無駄に見える領域があります。
実はこの領域は無駄ではありません。 ここには、プレビュー画像を表示させることができます。 手順は簡単で、一度だけレンダリングすればいいだけです。
キーボードのF12キーを押してレンダリングしてみましょう。
上図のようにいつも通りにレンダリングされます。
では、キーボードのEscキーを押してレンダリング結果を閉じてください。
上図のようにRender Layersノードにプレビュー画像が表示されました。
このプレビュー画像は、表示・非表示を切り替えることができます。
上図のようにノードの右上にあるアイコンをクリックします。
上図のようにプレビュー画像が非表示になります。
では、再度右上にあるアイコンをクリックして表示状態に戻しておいてください。
上図のようにプレビュー画像が表示されていることを確認したら次へ進みましょう。
ではここで、Z深度をレンダリング結果として表示してみましょう。 つまり、カメラからの距離を画像として出力しようということです。
具体的にはRender LayersノードのZをCompositeノードのImageにつなぎます。
上図のように接続元のソケットから接続先のソケットまでマウスの左ボタン()でドラッグします。
上図のようにRender LayersノードのZとCompositeノードのImageが接続されます。
ここで注目すべきは、Render LayersノードのImageの出力ソケットが切断されたことです。 切断された理由は、入力ソケットは1本の接続線しか持てないからです。 CompositeノードのImageの入力ソケットがZと接続されたため、それまでつながっていたImageからの接続線が切断されたということです。
なお、出力ソケットは、複数の接続線を持つことができます。 つまり、データを流す先を分岐することができます。
では、キーボードのF12キーを押してレンダリングしてみましょう。
上図のように真っ白です。
真っ白になってしまったのは、Z深度の数値が大き過ぎるためです。 Z深度はカメラからの距離であるため、色の 1.0(白色) を超えるのです。
つまり、割り算して値を小さくしなければいけないということです。
Z深度の数値の範囲を色の数値の範囲に収めるには、Map Valueノードを使います。 新たに、Map Valueノードを追加しましょう。
キーボードのSHIFT+Aを押します。
上図のように"Add"というタイトルのメニューが表示されますので、"Vector" -> "Map Value"を実行します。
上図のようにMap Valueノードが追加され、移動可能な状態になります。 マウスで好きな場所へ移動させることができますので、接続線の上へ移動し、まだ確定はしないでください。
上図のように接続線の上に移動させると、接続線の色が変わります。 この状態で確定すると、この接続線の途中にノードが収まるように再接続が行われます。
では、接続線の上に移動した状態で、マウスの左ボタン()を押して確定します(キーボードのEnterキーでも確定できます)。
上図のようにRender LayersノードとCompositeノードの間に、Map Valueノードが追加されます。
ノードが重なって見づらくなったので、整理しましょう。
上図のようにノードのウィンドウのタイトル部分をドラッグすることでノードを移動させることができます。
では、ノードを移動しましょう。
上図のように整理します。 なお、Map Valueノードの上の空きは、後で他のノードを追加するためのものです。
では、この状態でレンダリングしてみましょう。 キーボードのF12キーを押します。
上図のように真っ白なままです。
理由は、Map Valueノードの設定が初期状態であるため、Z深度がそのままCompositeノードに渡っているのです。
では、Map Valueノードの設定を変更しましょう。
上図のようにSize に 0.05 を、Use MinimumとUse Maximumをオンにしてそれぞれ、0.0 と 1.0 を設定します。
この設定により、入力値は 0.05倍 ( 20分の1 ) となり、さらに 0.0 から 1.0 の範囲内に収まるよう補正されます。
では、再度レンダリングしましょう。 キーボードのF12キーを押してください。
上図のようにZ深度が色で表現されました。
続いて、霧を表現する淡い水色を加算するためのノード、Mixノードを追加します。
キーボードのSHIFT+Aを押します。
上図のように"Add"というタイトルのメニューが表示されますので、"Color" -> "Mix"を実行します。
上図のようにMap Valueノードの上にMixノードを追加します。
では、接続を行いましょう。
上図のように接続します。 Render LayersノードのImageをMixノードのImage(上段)へ、Map ValueノードのValueをMixノードのFacへ、MixノードのImageをCompositeノードのImageに接続します。
なお、Facが係数であり、色の加算の比率に影響します。
ここでMixノードについての補足です。 MixノードはImageソケットを2つ持っていますが、これは2つの色を加算するという機能によるものです。 なお、現在はimage(下段)は未接続ですが、その場合には色を指定することができます。
今回は霧を淡い水色で表現しますので、その色をここで指定します。
上図のようにカラーフィールドをクリックします。
上図のようにカラーピッカーが開きますので、R に 0.5 、G に 0.5 、B に 1.0 を指定します。
上図のように淡い水色がImage(下段)に設定されます。
では、レンダリングします。 キーボードのF12キーを押してください。
上図のようにカメラから遠いほど霧が濃くなる様子を再現することができました。 Z深度が色の加算の係数となったためです。
最後に、ノードネットワークの全体図を掲載します。 クリックすることで拡大表示することができます。
まだ説明していない接続線の切断について説明しておきます。
上図のようにMixノードとCompositeノードの接続線を切断するものとして説明します。
1つ目は文字通り切断する方法です。
上図のようにキーボードのCTRLキーを押しながらマウスの左ボタン()でドラッグすることで、通過した接続線を切断することができます。
2つ目はソケットから接続線を外すという表現が近いかもしれません。
上図のように接続線の接続部を何もない場所にドロップします。
上図のように切断されます。