社内にBlenderチームを結成し、デモ映像の制作を通じて日々検証を行なっているグリオグルーヴ。本連載では、3ds Max歴25年からBlenderを使い始めた同社のCGディレクター横田義生氏が、自身の経験からBlenderを始めたい人に向けたTIPSを紹介していく。

TEXT_横田義生 / Yoshio Yokota(Griot Groove)
EDIT_三村ゆにこ / Uniko Mimura(@UNIKO_LITTLE

Infomation

『DEEP HUNTER』
グリオグルーヴBlenderチームによる、Blenderで制作を完結させることを目標としたCGアニメーション作品のパイロットムービー。本連載では、この映像の制作を通してBlenderの基礎を解説していく

はじめに

これまでレンダリングに関する設定と保存方法について説明してきました。今回は、『Deep Hunter』の制作で筆者が実際に使用したレンダリングワークフローについて解説していきます。CGムービーの制作工程では、レンダリングはコンポジットに入る前の3Dでの最後の作業になることがほとんどだと思いますが、実際はモデリング、レイアウト、ライティングといった作業中でも確認やチェック用のレンダリングは頻繁に行われます。そのため複数のクリエイターが関わるプロジェクトでは、各々の工程でチェック提出用に保存したレンダリング画像や最終レンダリング画像を「テストレンダリングで上書きしてしまう」といったミスが多々発生します。

今回解説するワークフローは、上記の注意点を踏まえて筆者が独自に構築した手法ですので、「これが正解」というわけではありません。人によってはSceneを複数に分けることがかえって煩わしく感じる方もいると思いますし、恐らくもっとスマートな手法があるのではとも思っています。これから解説する手法を「1つの例」として参考にしていただき、皆さんも独自のワークフローを構築してみてください。

制作環境
Blender 2.83.2(Portable版)
OS:Windows 10
CPU:Intel Core i7-9700K
メモリ:32GB
GPU:NVIDIA GeForce RTX 2080 SUPER

<1>レンダリングワークフロー

前回解説した「Compositorエディタ」で保存設定を行なってレンダリングを実行すると、静止画であろうとアニメーションであろうとレンダリング結果は自動的に「File Outputノード」で指定されたフォルダに保存されます。ライティングやマテリアルの調整を行なってテストレンダリングを実行した場合でもレンダリング結果は保存されてしまうため、それ以前のレンダリング結果を取っておきたい場合は、上書きしないようCompositorエディタの「Render Layersノード」か「File Outputノード」をミュートにする必要があります。

レンダリングを実行するたびにミュートのON/OFFを確認する必要があったり、Blenderの納品データを開いてレンダリングを実行したら、納品済みのレンダリング画像を上書きしてしまった......、といったミスを起こすと目も当てられませんよね。筆者はこれらのトラブルを回避するため、実際に作業するSceneでのレンダリングは「あくまで確認用」として保存設定は行わず、最終的にレンダリング結果をファイルとして出力するためにレンダリング用のSceneを作成し、必要に応じてSceneを切り替えて作業を行うようにしました。この手法を用いることで、レンダリング時の手間とミスを大幅に軽減することができました。


●作業用Sceneとレンダリング用Scene

・作業用Scene
作業用のSceneでは通常通りモデリング、ライティング、アニメーションの作業を行い、最終的にレンダリングするための「View Layer」の設定を行います。この作業用のSceneでは「Compositorエディタ」でのレンダリングの出力設定は行いません。レンダリングした結果を保存したい場合は「Imageエディタ」での画像の保存を使用します。

・レンダリング用Scene
作業用とは別に新規で空(から)のレンダリング用のSceneを作成します。そのSceneのCompositorエディタで「Render Layersノード」を作成し、作業用Sceneで設定した「View Layer」を読み込み、「File Outputノード」に接続して出力設定を行います。作業用Sceneで複数のView Layerを設定した場合は、その数に応じたRender Layersノードを作成して、それぞれにView Layerを読み込む必要があります。


●ワークフロー
それでは実際に、作業用Sceneとレンダリング用Sceneを使用してレンダリング設定するまでの工程を説明していきます。

1:作業用Sceneの作成
図のようなSceneを作成して、「View Layer」を設定します【1-A】 。今回はレンダリング用に[rend_BG]と[rend_CH]の2つのView Layerが設定されています。

▲【1-A】レンダリングワークフロー①
[rend_BG]は、キャラクターを[Indirect only(カメラに対しての可視性をOFF)]に設定した背景のみのView Layerで、[rend_CH]は背景を[Holdout(マットオブジェクト)]に設定したキャラクターのみのView layerです

2:レンダリング用Sceneの作成
作業用Sceneをアクティブにした状態で[Copy Settings]を選択し、レンダリング用の新規Sceneを作成します【1-B】 。[Copy Settings]を使用することで、作業用Sceneとシーン設定が同じ空(から)のSceneを作成することができます。


  • ◀【1-B】レンダリングワークフロー②
    Scene切り替えのプルダウンに表示されるSceneの名前はアルファベット順になるので、作業用を[01_work]、レンダリング用を[02_rend]といった具合に変更すると任意の順番に並べることができます

3:Compositorエディタの設定
レンダリング用SceneのCompositorエディタの[Use Node]にチェックを入れて、Render Layersノードを2つ用意し、作業用Sceneで設定した2つのView Layer、[rend_BG]と[rend_CH]を読み込みます【1-C(赤枠)】

4:File Outputノードの設定
保存するレンダリング要素をFile Outputノードに接続します【1-C(緑枠)】 。今回はRender Layersノードの数に合わせて2つのFile Outputノードを作成し、それぞれを接続しています。

▲【1-C】レンダリングワークフロー③
Render Layersノードに[01_work]の[rend_BG]と[rend_CH]を読み込むと、作業用SceneのView Layerで設定したレンダリング要素が[Render Layers]の出力に項目が追加されていることが確認できます

5:レンダリングの実行
レンダリング用のSceneで通常通りレンダリングを実行します。Scene上にはオブジェクト、ライト、カメラ等は一切存在しませんが、Compositorエディタの「Render Layersノード」で設定されたSceneのView Layerがレンダリングされます。


●注意点
①:[Copy Settings]でSceneを作成しているため作業用Sceneの設定をそのまま引き継いでいますが、レンダリングの解像度やフレーム範囲は「レンダリング用Scene」の設定が適用されます。 そのため、[Copy Settings]でSceneの設定を複製後に作業用Sceneの上記の設定を変更しても、レンダリング用のSceneには適用されないことに注意してください。また静止画をレンダリングする場合も、レンダリングされるフレームは「レンダリング用Scene」で設定したフレームになります。

その他、筆者が確認しているのは「Renderプロパティ」の[Color Management]の設定で、それ以外の[Sampling]や[Light Paths]、[Render Engine]などの設定は、基本的に作業用Sceneの設定が引き継がれるようです。今後も要検証ですが、設定に不安がある場合は再度作業用Sceneを[Copy Setteings]で複製して、基のレンダリング用SceneのCompositorエディタのノードを全選択してコピーし、複製した新規SceneのCompositorエディタにペーストすることで、簡単にレンダリング用Sceneを再構築できます。


②:レンダリング用SceneのCompositorエディタにある「Render Layersノード」をミュートすることで、画像ファイルの出力を無効化することはできますが、Render Layersノードに読み込まれたSceneの全てのView Layerのレンダリングは実行されます。今回のSceneの例でいうと、[rend_BG]のレンダリングのみをファイルとして出力するために、[rend_CH]を読み込んでいるRender Layersノードをミュートしたとします。

これにより[rend_CH]のレンダリング結果はファイルとしては出力はされなくなりますが、[rend_BG]を読み込んでいるRender LayersノードにはSceneに含まれる[rend_CH]も読み込まれているため、レンダリング自体は実行され処理的に無駄が生じます。特定のView Layerのレンダリング自体を無効化したい場合は、作業用SceneのView Layerプロパティにある[View Layer]の項目の[Use for rendering]のチェックを外す必要があります【1-D】


  • ◀【1-D】レンダリングワークフロー④
    今回のレンダリングワークフローを使用する場合は、[Render Single Layer]にチェックを付けないようにしてください。この設定は個々のView Layerに対する設定ではなく、アクティブなView Layerに対する設定であるため、Sceneを切り替えた際にアクティブなView Layerが変更され、設定したView Layerと異なる結果がレンダリングされることがあります



<2>OpenEXR MultiLayerの設定

静止画のレンダリング出力フォーマットで[OpenEXR MultiLayer]を選択すると、1枚のEXRファイルに複数のレンダリング要素を格納することができます。レンダリング要素をバラバラに出力するよりもシンプルなフォルダ構成になりますが、1枚のファイルに複数のレンダリング要素が含まれるため、 1枚の画像に対するファイル容量が非常に大きくなるので取り扱いには注意が必要です。

筆者も実際のプロジェクトで使用したことはあまりありませんが、『Deep Hunter』ではマスクなどのレンダリング設定に時間をかけたくなかったため、シーンが完成した後はいったん必要になりそうな要素を全て含んだ「OpenEXR MultiLayerフォーマット」のEXRでレンダリングを実行し、そのレンダリングファイルをCompositorエディタに読み込んで、必要なレンダリング要素をさらに通常の「OpenEXRフォーマット」のファイルで個別に出力するという手法を採りました。

上記の手法はHDDの容量を圧迫するため常に使用できる手法ではありませんが、「OpenEXR MultiLayer」の活用方法の1つとして紹介しました。「OpenEXR MultiLayer」の出力設定は他の静止画の出力フォーマットと多少異なるため設定方法を説明します。


●OpenEXR MultiLayerの設定
基本的な設定方法は他の出力フォーマットと似ています。「File Outputノード」を選択してサイドメニューの[Itemタブ→Properties]で設定を行います【2-A】


  • ◀【2-A】OpenEXR MultiLayer①
    他のファイルフォーマットではレンダリングの出力パスを設定しましたが、OpenEXR MultiLayerフォーマットではEXRに格納するレンダリング要素を設定します。③の横の上下の矢印でレンダリング要素の順番を変更することができます

①:Path
ここで保存先のフォルダとファイル名を指定します。他のフォーマットとのちがいは、「ファイル名まで指定する必要がある」ということです。連番で出力する場合は、ファイル名の最後に[_](アンダーバー)を付けておけばフレーム番号はその後に続くことになります。

②:File Format、Color、Color Depth、Codec
File Formatで[OpenEXR MultiLayer]を選択すると、Color、Color Depth、Codecを設定することができます。レンダリングを実行したときと同じ結果(Render Layersノードに読み込まれた結果)で出力するには、Color Depthの設定を[Float(Full)]にする必要があります。

③:Add Input
[Add Input]をクリックすると、File Outputノードの入力に項目が追加されます。ここでの設定は他のフォーマットとは異なり、OpenEXR MultiLayerに格納されるレンダリングの要素が追加されます。

④:Layer
ここではOpenEXR MultiLayerに格納されるレンダリング要素の名前を設定します。③のリスト上の名前をダブルクリックすることでも名前の変更は可能です。ここで設定する名前は、出力するRender Layersノードの出力項目と同じ名前にして、対応したレンダリング要素をFile Outputノードの入力項目に接続するようにしましょう。


●OpenEXR MultiLayerの読み込み
上記の設定でレンダリング出力されたOpenEXR MultiLayerフォーマットのEXRファイルをCompositorエディタのImageノードで読み込むと、【2-B】 のようにRender Layersノードと同じレンダリング要素が出力項目に追加されているのが確認できます。

▲【2-B】OpenEXR MultiLayer②
File Outputから出力されたOpenEXR MultiLayerフォーマットのEXRをImageノードで読み込み、基のRender Layersノードのレンダリング要素と比較しています。Render LayersノードとImageノードのレンダリング要素の並び順が異なっていますが、Render Layersノードに読み込まれたレンダリング要素と同じ結果となります

これで3Dのシーンを再レンダリングすることなく、必要なレンダリング要素をFile Outputノードに接続することで、任意のフォーマットで出力することができます。出力する際に当然レンダリングを行う必要がありますが、Imageノードに読み込んだOpenEXR MultiLayerフォーマットのEXRを個別に書き出すだけの計算しか行わないため、レンダリングは非常に高速に行われます。



次ページ:
<3>今月の便利アドオン&ミニTips

[[SplitPage]]

<3>今月の便利アドオン

●B-Renderon
blendermarket.com/products/b-renderon

正確に言うと、アドオンではなくバッチレンダリング用のBlenderの外部のツールになります。このツールを使用することで、複数のBlenderのファイルのレンダリングを実行できるようになります。Blenderには多くのバッチレンダリング用のアドオンがリリースされていますが、CPUとGPUの切り替えの選択ができなかったり、読み込んだ全てのシーンのレンダリングを同時に実行してしまったりと、なかなか思うようにバッチレンダリングを実行できるアドオンを見つけることができませんでした(筆者の勉強不足かもしれませんが......)。

「B-Renderon」は外部ツールであるため、Blenderを起動して実行する必要がなくメモリの節約にもなりますし、 何より操作が非常にシンプルで覚えやすく、このツールを使い始めてからは複数のレンダリング用ファイルを一気にレンダリングできるようになりました。それでは簡単に使用方法を説明していきます。

1:B-Renderonの起動
B-Renderonを購入し、ダウンロードしたzipファイルを解凍すると「B-renderon.exe」というファイルが含まれていますので、そのファイルを実行します。

2:B-Renderonの設定
初回起動時には【3-A】 のような設定画面が開くので、[System→Blender:]の項目でレンダリングを実行するBlenderの実行ファイル「blender.exe」があるフォルダを指定して[OK]を押すとB-Renderonが起動します。


  • ◀【3-A】B-Renderon①
    ここの設定は、起動した後でも左上の[Settings]というギアのアイコンが付いたボタンを押すことで変更可能です。ここで設定したBlenderのバージョンはデフォルトのBlenderのバージョンとして登録されますが、バージョンを追加登録することで読み込んだBlenderファイルごとにバージョンの切り替えが可能です

3:レンダリングシーンの読み込み
B-Renderonが起動すると【3-B】 のようなインターフェイスが表示されます。

▲【3-B】B-Renderon②
一見複雑なインターフェイスに見えますが、あらかじめBlenderのシーンでレンダリングの設定を行なっておけば、B-Renderonで細かく設定をする必要はありません。言い換えると、B-RenderonでもBlenderで設定したフレーム範囲や、CPU/GPUの切り替えなど多くの設定を変更できるということです

中央の何も表示されていない広い項目のところで右クリックすると、【3-B】 のように[Add Blends]という項目と[Add scenes]という項目がメニューに表示されます。どちらの項目を選んでも、レンダリングを実行するBlenderのファイルを選択するウインドウが起ち上がりますが、[Add scenes]を選択すると読み込んだBlenderファイルのSceneを選択して読み込むことができます【3-C】


  • ◀【3-C】B-Renderon③
    [Add Blends]を選択した場合は、デフォルトではシーンファイルを保存したときにアクティブになっているSceneが読み込まれるようです。[Settings]でSceneの読み込まれ方も設定することができます

4:レンダリングの実行
[Add Blends]を選択した場合は、デフォルトではシーンファイルを保存したときにアクティブになっているSceneが読み込まれるようです。[Settings]でSceneの読み込まれ方も設定できます。大きなプロジェクトでは「Deadline」などを使用した大規模なネットワークレンダリングシステムの構築が必要となってきますが、セル系のCGやEeveeを使用したレンダリングが高速なプロジェクトなどでは、B-Renderonを使用してローカルのPCや2〜3台のPCでレンダリングを回して運用していくことも可能です。実際に『Deep Hunter』では、B-Renderonを使用して1台のPCで深夜や土日に一気にレンダリングを回すことでムービーを完成させることができました。

Blenderはシーンファイルにテクスチャを格納することができる上、アプリケーション自体をフォルダごとコピーしてしまえば簡単に他のPCに環境を複製できるため、通常では非常に手間とコストがかかるレンダリング回りの設定を簡単に構築できます。



<4>今月のミニTips

●レンダリング要素のAOVの出力方法

今回はレンダリング要素の「Cryptomatte」の出力方法について説明していきます。

・AOV
AOVとは「Arbitrary Output Variable」の略で、正直なところ筆者自身も言葉の意味は深くは理解してはいません。しかしこの機能を使用することで、任意のマップでマテリアルが上書きされたオブジェクトをレンダリング要素として出力できるようになります(V-RayでいうRender Elementsの「VRayExtraTex」と同じ機能)。

機能的にはView Layerプロパティの「Override」に似ていますが、Overrideがシーン上のオブジェクト全体のマテリアルを上書きしてしまうことに対し、AOVはオブジェクトに割り当てられているマテリアルごとに設定することが可能です。またAOVは、マテリアルではなくマップで上書きするという点に注意しましょう。結果はEmissionマテリアルの[Color]にマップを割り当てた状態に似ていますが、マテリアルではないために透明度などの設定を適用することはできません。では、実際にAOVをレンダリング要素に追加していく方法を説明していきます。

①:【4-A】 のように目の部分に「Blueマテリアル」、それ以外に「Redマテリアル」を割り当てたMonkeyのモデルを用意します。

▲【4-A】AOV①
Monkeyには[Subdivisionモディファイアー]を割り当て、[Shade Smooth]が適用されています

②:Shaderエディタで「Redマテリアル」を選択し、[Addメニュー→Output]から[AOV Outputノード]を追加します。

③:[Addメニュー→Texture→Noise Textureノード]、[Converter→Color Rampノード]を追加して【4-B】 のように接続し、AOV Outputノードの[Name]を「Noise」にします。

▲【4-B】AOV②
AOVを出力する上で、この[Name]で設定された名前がレンダリングの要素の名前になるため、わかりやすい名前を設定しましょう

④:「View Layerプロパティ」の[Shader AOV]の項目で[+]をクリックしてAOVを追加し、名前を③の[Name]で設定した「Noise」に変更します【4-C】


  • ◀【4-C】AOV③
    [+]をクリックして追加されたAOVのテキストの上でダブルクリックすると、名前を変更することができます

⑤:Compositorエディタに切り替えて[Use Nodes]にチェックを入れ、Render Layersノードを確認してください。出力の項目に「Noise」が追加されていることが確認できたと思います。それでは「Noise」をViewerノードに接続してレンダリングを実行してみましょう。結果は【4-D】 のように「Redマテリアル」部分にノイズのテクスチャが割り当てられたレンダリング要素になりました。

▲【4-D】AOV④
AOVが設定されていない「Blueマテリアル」(目)の部分は黒でレンダリングされます

⑥:Shaderエディタで「Redマテリアル」のAov Output、Color Ramp、Noise Textureノードをコピーして「Blueマテリアル」にペーストしてください。

⑦:「Blueマテリアル」のNoise TextureノードとColor Rampノードの設定を変更してレンダリングを実行すると、レンダリング結果は【4-E】 のようになります。

▲【4-E】AOV⑤
Noiseの設定を細かくして[Color Ramp]の設定を赤と黒に変更しました。同じ名前のAOV Outputノードに接続されていれば、それぞれが異なるマップであっても設定は反映されます

このようにAOVのレンダリング要素は、Shaderエディタで同じ名前に設定されたAOV Outputノードに接続されたマップを反映します。今回の説明では、ノード自体をコピー&ペーストしてそれぞれのマテリアルでAOVを設定しましたが、それらのノードをグループ化してそのグループをコピー&ペーストすることで、マップの設定をリンクできます。マテリアルが複数あり一括でAOVのマップを制御したい場合は、グループの機能を使用することで効率的に作業できます。ノードのグループ化は、複数ノードを選択した状態で[右クリック→Group(Ctrl+G)]で実行できます。グループは[Tabキー→Open/Close]の切り替えが可能です。

さいごに

全10回にわたる連載も今回で最終回です。いかがでしたか? 本誌での掲載を含めるとほぼ1年のお付き合いになりましたが、その間もBlenderの進化は止まりませんね。まだまだ日本ではBlenderを使用したプロジェクトとなるとあまり話題にはなっていませんが、アニメ業界を中心に、動きが活発になっていきそうな気配があります。この1年で教則本もいくつか出版され敷居もかなり低くなってきていますので、これを機にBlenderの世界に足を踏み入れてみてはいかがでしょうか。



Profile.

  • 横田義生/Yoshio Yokota(Griot Groove)
    3ds Max歴25年。Web3D、建築、ゲーム、CMを経て現在映像プロダクション・グリオグルーヴにディレクターとして所属。頑なに3ds Maxを使用してきましたが、そろそろ新しいツールを覚えたいと言うタイミングでBlenderに出会い仕事の傍ら猛勉強中です。もともとジェネラリストでしたが、ここしばらくは制作現場からは遠ざかっていたため、これを機に一クリエイターとして制作をしていこうと意気込んでいます