トップ > レンダリング >
ノードとノードネットワークについて

  

ノードおよびノードネットワークとは

ここで、今まで全く説明してこなかったノードとノードネットワークについて説明しておきます。 レンダリングについて深く踏み込んでいくには、どうしても避けて通れない話題です。

ノードとは、レンダリングの各処理を構成する機能ブロックのことです。 といっても、『座標変換』・『隠面消去』・『陰影計算(シェーディング)』・『表面処理(マッピング)』のような3DCG処理の一般的な処理単位のことではありません。

『マテリアル設定を読み込む』、『色を調整する』、『陰影の計算結果を出力する』のような、Blender内部での、Blenderの都合で分割されている機能ブロックです。

Blenderでは、機能ブロックであるノードをつないでノードネットワークを構築することで、レンダリング処理を構成することができます。 つまり、製造ラインのベルトコンベアのようなものです。 ベルトコンベアでデータを受け渡しながら処理を進めることができるのです

ベルトコンベア上の機能ブロックを好きなように組み合わせることで、自分の好みに調整したレンダリング結果が得られるのです。

ノードネットワークの種類

製造ラインであるノードネットワークには3種類があります

1つ目がシェーダノードネットワークで、マテリアル設定の情報を読み込んで陰影を計算し、計算結果を出力します。 マテリアル1つにつき、1つのシェーダノードネットワークを持つことができます

2つ目がテクスチャノードネットワークで、2次元のテクスチャ画像を読み込んで3次元の面に合うように加工し、結果を出力します。 テクスチャ1つにつき、1つのテクスチャノードネットワークを持つことができます

3つ目がコンポジットノードネットワークで、レンダリング結果を入力し、様々な加工をしてから出力します。 ボカシをかけたり、実写の映像と合成することができます。

ノードを意識せずに済んでいた理由

本ウェブサイトでは、これまで、ノードについて一切触れませんでした。 つまり、製造ラインであるノードネットワークは構築しませんでした

ノードについて全く意識せずに済んでいたのは、Blenderが既定の処理を行っていたためです。 利用者がノードネットワークを構築しなかった場合には、Blenderが既定の処理でレンダリングを行ってくれます。

つまり、Blenderが用意した製造ラインで処理が行われていたのです。 知らないところで、Blenderが良きに計らってくれていたのです

  

コンポジットノードネットワークで霧を表現してみよう

ここで、少しだけノードを使って遊んでみましょう。 コンポジットノードネットワークを構築し、レンダリング後の画像の加工を行います

霧

カメラからの距離に応じて淡い水色を加算することで霧を表現してみましょう。 カメラに近い面では加算の係数を小さく、遠いほど大きくなるようにします。

霧を表現する

では、作業を開始しましょう。 今回は、Blenderの新規ファイルを元にして作業を行います。 画面上部のプルダウンメニューの"File" -> "New"を実行して新規ファイルを開いてください。

まずは、地面に見立てた平面を追加しましょう。 空中に立方体が浮いているだけでは、霧の効果がわかりずらいですから。

キーボードのSHIFT+Aを押します

1. Addメニュー
1. Addメニュー

上図のように"Add"というタイトルのメニューが表示されますので、"Mesh" -> "Plane"を実行します。

2. 平面が追加される
2. 平面が追加される

上図のように平面が追加されます。

続いて、平面を下に下げましょう。 Z方向に -1 移動します。

キーボードのG(ジー)を押し、続けて、Z -> -1 -> Enterキーを入力します。

3. 平面をZ方向へ -1 移動
3. 平面をZ方向へ -1 移動

上図のように平面をZ方向に -1 移動します。

続いて、平面を8倍に拡大します。 キーボードのSを押し、続けて、8 -> Enterキーを入力します。

4. 平面を8倍に拡大
4. 平面を8倍に拡大

上図のように平面を8倍に拡大します。

これで、地面に見立てた平面の準備ができました。 では、いよいよノードネットワークの構築に進みます

ノードネットワークの操作はNode Editorウィンドウで実施します。 3D ViewウィンドウからNode Editorウィンドウに切り替えましょう。

5. ウィンドウタイプ選択リストをNode Editorに切り替える
5. ウィンドウタイプ選択リストをNode Editorに切り替える

上図のようにウィンドウタイプ選択リスト(ウィンドウタイプ選択リスト)をNode Editorに切り替えます。

6. Node Editorウィンドウ画像を拡大する
6. Node Editorウィンドウ

上図のようにNode Editorウィンドウが表示されます。 なお、ウィンドウの右側にプロパティシェルフが表示されていますが、今回は使いませんのでキーボードのNを押して折りたたんでおきましょう

次に、コンポジットノードネットワークを構築します。 これは、Blenderが裏で適切に処理していた製造ラインを捨てて、自分好みの製造ラインを用意するということです

7. コンポジットノードネットワークを構築する
7. コンポジットノードネットワークを構築する

上図のようにNode Editorウィンドウのヘッダにあるノードタイプからコンポジットを選択し、さらに、すぐ右側にあるUse Nodesチェックボックスをオンにします。

8. コンポジットノードネットワークが表示される
8. コンポジットノードネットワークが表示される

上図のようにNode Editorウィンドウ上にコンポジットノードネットワークが表示されます。 左右に2つ並んでいるウィンドウがノード(コンポジットノード)であり、それをつないでいる線が接続線です。

  
接続線の正式名称は『スレッド』らしいのですが、わかりにくいので本ウェブサイトでは『接続線』と表記します。

ノードネットワークの表示倍率が小さくて見づらいので、大きくしましょう。 キーボードのHomeキーを押します。

9. 表示倍率の調整
9. 表示倍率の調整

上図のように画面に収まるように表示倍率が調整されます。

ではここで、製造ラインであるノードネットワーク上を、データがどのように流れているかを説明します。

10. 左側が入力ソケットで右側が出力ソケット
10. 左側が入力ソケットで右側が出力ソケット

上図のように接続線の両端が丸につながっています。 この丸は『ソケット』と呼ばれるもので、ノードが持っている入力と出力の窓口です。 ソケットとソケットをつなぐことでノードネットワークが構築され、情報が流れるようになります。

ノードの左側にあるのが入力ソケットで、右側にあるのが出力ソケットです。 入力ソケットは必ず左側に、出力ソケットは必ず右側にあります

この例ではソケットは縦に3つ並んでおり、それぞれ、Image・Alpha・Zを受け渡します。

Imageとは画像のこと、つまり、各ピクセルのRGB値のことです。 Alphaは不透明度のことで、Z深度は視点からの距離です。

  
今回実現する『カメラからの距離に応じて加算の係数を変える』のカメラからの距離は、このZ深度のことです。

続いて、左右のノードについて説明します。

11. レンダーレイヤとコンポジットがつながっている
11. レンダーレイヤとコンポジットがつながっている

上図のように左側がRender Layersノード、右側がCompositeノードです。

Render Layersノードは、指定されたシーンを、指定されたレンダーレイヤの設定に従ってレンダリングし、結果を出力します。 つまり、製造ラインの起点です

Compositeノードは、画像を受け取り、それを最終的なレンダリング結果とします。 つまり、製造ラインの終点です

ここで、シーンとレンダーレイヤについて補足しておきます

シーンとは、文字通り場面のことで、室内、車の中、砂浜など、複数の場面が登場するなら、場面に応じて複数のシーンを用意します。 初期ファイルには1つのシーンしか含まれていませんが、いつでも自由にシーンを追加・削除することができます。

  
本ウェブサイトの記事では、これまでシーンについては一切操作していません。
12. シーン
12. シーン

上図のようにInfoウィンドウのヘッダでシーンの確認や切り替えなどの操作が行えます。 "Scene" という名称のシーンが初期ファイルに含まれる標準のシーンです。

続いて、レンダーレイヤについて説明します。 レンダーレイヤとは、レンダリングの条件や設定に名前を付けて管理するためのものです。 オブジェクトの配置に使う全20レイヤのどれをレンダリング対象に含めるか、レンダリング時に影を付けるかどうかなどを設定し、名前を付けて保存します。

初期ファイルには "RenderLayer" という名称のレンダーレイヤが用意されています。 "RenderLayer" は全20レイヤをレンダリング対象に含める設定になっています。

13. レンダーレイヤ
13. レンダーレイヤ

上図のようにPropertiesウィンドウのレンダーレイヤパネル切替ボタン(レンダーレイヤパネル切替ボタン)を押すことでレンダーレイヤの一覧が表示されます。

  
レンダーレイヤは、オブジェクトごとにレンダリングの流れを分ける場合などに使用します。 例えば、『レイヤ01にあるオートバイとレイヤ02にある道路標識はレンダーレイヤ "Metal" でレンダリングし、レイヤ03にある人物はレンダーレイヤ "Skin" でレンダリングし、最終的に合成する』というような用途です。

では、コンポジットノードネットワークの説明に戻ります

11. シーンとレンダーレイヤ
11. シーンとレンダーレイヤ

上図のように左側のRender Layersノードには、"Scene" と "RenderLayer" が初期状態で選択されています。 つまり、標準のシーンを、全20レイヤを対象にレンダリングするということです

Render Layersノードには、まだ説明しておきたいことがあります。

14. 無駄に見える領域
14. 無駄に見える領域

上図のように一見無駄に見える領域があります。

実はこの領域は無駄ではありません。 ここには、プレビュー画像を表示させることができます。 手順は簡単で、一度だけレンダリングすればいいだけです。

キーボードのF12キーを押してレンダリングしてみましょう。

15. レンダリング結果
15. レンダリング結果

上図のようにいつも通りにレンダリングされます。

では、キーボードのEscキーを押してレンダリング結果を閉じてください。

16. プレビュー画像
16. プレビュー画像

上図のようにRender Layersノードにプレビュー画像が表示されました。

このプレビュー画像は、表示・非表示を切り替えることができます。

17. アイコンをクリック
17. アイコンをクリック

上図のようにノードの右上にあるアイコンをクリックします。

18. プレビュー画像が非表示になる
18. プレビュー画像が非表示になる

上図のようにプレビュー画像が非表示になります。

では、再度右上にあるアイコンをクリックして表示状態に戻しておいてください。

  
他の多くのノードも、プレビュー画像を表示することができます。
19. プレビュー画像を表示する
19. プレビュー画像を表示する

上図のようにプレビュー画像が表示されていることを確認したら次へ進みましょう。

ではここで、Z深度をレンダリング結果として表示してみましょう。 つまり、カメラからの距離を画像として出力しようということです。

具体的にはRender LayersノードのZをCompositeノードのImageにつなぎます。

20. Render LayersノードのZをCompositeノードのImageにつなぐ
20. Render LayersノードのZをCompositeノードのImageにつなぐ

上図のように接続元のソケットから接続先のソケットまでマウスの左ボタン(マウスの左ボタン)でドラッグします。

21. Render LayersノードのZとCompositeノードのImageが接続される
21. Render LayersノードのZとCompositeノードのImageが接続される

上図のようにRender LayersノードのZとCompositeノードのImageが接続されます。

ここで注目すべきは、Render LayersノードのImageの出力ソケットが切断されたことです。 切断された理由は、入力ソケットは1本の接続線しか持てないからです。 CompositeノードのImageの入力ソケットがZと接続されたため、それまでつながっていたImageからの接続線が切断されたということです。

なお、出力ソケットは、複数の接続線を持つことができます。 つまり、データを流す先を分岐することができます

では、キーボードのF12キーを押してレンダリングしてみましょう。

22. レンダリング結果
22. レンダリング結果

上図のように真っ白です。

真っ白になってしまったのは、Z深度の数値が大き過ぎるためです。 Z深度はカメラからの距離であるため、色の 1.0(白色) を超えるのです。

つまり、割り算して値を小さくしなければいけないということです。

Z深度の数値の範囲を色の数値の範囲に収めるには、Map Valueノードを使います。 新たに、Map Valueノードを追加しましょう。

キーボードのSHIFT+Aを押します

23. Addメニュー
23. Addメニュー

上図のように"Add"というタイトルのメニューが表示されますので、"Vector" -> "Map Value"を実行します。

24. Map Valueノードが追加され移動可能な状態になる
24. Map Valueノードが追加され移動可能な状態になる

上図のようにMap Valueノードが追加され、移動可能な状態になります。 マウスで好きな場所へ移動させることができますので、接続線の上へ移動し、まだ確定はしないでください。

25. 接続線の色が変わる
25. 接続線の色が変わる

上図のように接続線の上に移動させると、接続線の色が変わります。 この状態で確定すると、この接続線の途中にノードが収まるように再接続が行われます。

では、接続線の上に移動した状態で、マウスの左ボタン(マウスの左ボタン)を押して確定します(キーボードのEnterキーでも確定できます)。

26. Map Valueノードが追加される
26. Map Valueノードが追加される

上図のようにRender LayersノードとCompositeノードの間に、Map Valueノードが追加されます。

  
接続線以外の場所で確定すると、ノードは独立した状態となります。

ノードが重なって見づらくなったので、整理しましょう。

27. ノードの移動
27. ノードの移動

上図のようにノードのウィンドウのタイトル部分をドラッグすることでノードを移動させることができます。

  
3D Viewウィンドウでの操作と同じようにキーボードのG(ジー)で移動させることもできます。

では、ノードを移動しましょう。

28. 整理後のコンポジットノードネットワーク
28. 整理後のコンポジットノードネットワーク

上図のように整理します。 なお、Map Valueノードの上の空きは、後で他のノードを追加するためのものです。

では、この状態でレンダリングしてみましょう。 キーボードのF12キーを押します。

29. レンダリング結果
29. レンダリング結果

上図のように真っ白なままです。

理由は、Map Valueノードの設定が初期状態であるため、Z深度がそのままCompositeノードに渡っているのです。

では、Map Valueノードの設定を変更しましょう。

30. Map Valueノードの設定
30. Map Valueノードの設定

上図のようにSize に 0.05 を、Use MinimumとUse Maximumをオンにしてそれぞれ、0.0 と 1.0 を設定します。

この設定により、入力値は 0.05倍 ( 20分の1 ) となり、さらに 0.0 から 1.0 の範囲内に収まるよう補正されます。

では、再度レンダリングしましょう。 キーボードのF12キーを押してください。

31. レンダリング結果
31. レンダリング結果

上図のようにZ深度が色で表現されました。

続いて、霧を表現する淡い水色を加算するためのノード、Mixノードを追加します。

キーボードのSHIFT+Aを押します

32. Addメニュー
32. Addメニュー

上図のように"Add"というタイトルのメニューが表示されますので、"Color" -> "Mix"を実行します。

33. Mixノードが追加される
33. Mixノードが追加される

上図のようにMap Valueノードの上にMixノードを追加します。

では、接続を行いましょう。

34. ノードを接続
34. ノードを接続

上図のように接続します。 Render LayersノードのImageをMixノードのImage(上段)へ、Map ValueノードのValueをMixノードのFacへ、MixノードのImageをCompositeノードのImageに接続します。

なお、Facが係数であり、色の加算の比率に影響します

ここでMixノードについての補足です。 MixノードはImageソケットを2つ持っていますが、これは2つの色を加算するという機能によるものです。 なお、現在はimage(下段)は未接続ですが、その場合には色を指定することができます

今回は霧を淡い水色で表現しますので、その色をここで指定します。

35. カラーフィールドをクリック
35. カラーフィールドをクリック

上図のようにカラーフィールドをクリックします。

36. カラーピッカー
36. カラーピッカー

上図のようにカラーピッカーが開きますので、R に 0.5 、G に 0.5 、B に 1.0 を指定します。

37. 最終的なノードネットワーク
37. 最終的なノードネットワーク

上図のように淡い水色がImage(下段)に設定されます。

では、レンダリングします。 キーボードのF12キーを押してください。

38. レンダリング結果
38. レンダリング結果

上図のようにカメラから遠いほど霧が濃くなる様子を再現することができました。 Z深度が色の加算の係数となったためです。

最後に、ノードネットワークの全体図を掲載します。 クリックすることで拡大表示することができます。

39. 最終的なノードネットワークの拡大図画像を拡大する
39. 最終的なノードネットワークの拡大図

接続線の切断について

まだ説明していない接続線の切断について説明しておきます。

1. 切断したい接続線
1. 切断したい接続線

上図のようにMixノードとCompositeノードの接続線を切断するものとして説明します。

1つ目は文字通り切断する方法です。

2. 接続線を切断する方法 その1
2. 接続線を切断する方法 その1

上図のようにキーボードのCTRLキーを押しながらマウスの左ボタン(マウスの左ボタン)でドラッグすることで、通過した接続線を切断することができます。

2つ目はソケットから接続線を外すという表現が近いかもしれません。

3. 接続線を切断する方法 その2
3. 接続線を切断する方法 その2

上図のように接続線の接続部を何もない場所にドロップします。

4. 切断後のノードネットワーク
4. 切断後のノードネットワーク

上図のように切断されます。

  

まとめ

Blenderは、内部でノードネットワークを構築しています。 各ノードがデータを受け渡すことでレンダリング処理が行われます。

メニュー