はじめに
はじめまして。プロジェクトスタジオQ、モデリングディレクターの林田 樹です。普段はモデリングを中心に作業していますが、シェーダやリグなどアセットに関わること全般を活動範囲としています。
当社は2019年からBlenderへの移行を始め、翌年から3D部分はBlenderで大部分の作業を行い、現在はBlenderのみで映像作品をつくりきる体制に移行が完了しました。プロジェクトスタジオQ、およびスタジオカラーがどのような経緯からBlenderへの移行を考えたのかについてはこちらの「エンガジェット日本版」の記事をご覧ください。
それから約3年が経ち、現在の状況としては個人ではBlenderを積極的に使い、モデリングなど部分的な作業に導入している方々が見受けられますが、まだスタジオレベルでは「これから導入しようかと考え検証中」というところが多いかと思います。
そこで今回は、これまでに取り組んできた様々な検証結果やプロジェクトスタジオQなりのノウハウをこの場を借りて発信していきたいと思います。各社がBlenderをワークフローに加えてみようかなと考える際の一助になれば幸いです。また、アニメCG業界を志望する学生の方々も、現場目線ではどのようなことを考えながら制作しているのかを知っていただく機会になれば嬉しいです。
主要な制作アプリケーション
Blender 2.93
第1回:レンダリングについて
これから何回かに分けて、プロジェクトスタジオQでのアニメ制作時、コンポジットのためにどのように各種素材をレンダリングしているかについて説明します。まずはレンダリングの様⼦を動画でご覧ください。レンダリングにはCyclesを使⽤しています。
ライトは1灯だけでなく、身体と頭、ハイライト、リムライト、落ち影、地⾯に落ちる影といったように要素ごとに別々のライトでコントロールしています。
レンダリングが何回か⾏われた後に最終的な合成結果が表⽰されています。コンポジットタブで表⽰を切り替えて⾒せているのが各種素材になります。今回はこのレンダリングの⼤まかな中⾝について説明していきます。
各種レンダリング素材とAOV
先程の動画の内訳は以下のようになっています。
上から順にビューレイヤーが切り替わりながらひとつずつレンダリングされ、それぞれ異なる⽤途のレンダリング素材がつくられた後にBlender内でコンポジットされています。
レンダリング内訳
- ビューレイヤー
出⼒されるレンダリング素材
- opaque
ハイライト⾊、ノーマル⾊、1号影、2号影、陰影のマスク、部位別のマスク、法線、ポジション、フレネル、etc......
- shadow
不透明なオブジェクトに落ちる影
- transparent
opaqueと同じ素材+透明度
- trpShadow
半透明なオブジェクトに落ちる影
- highLight
ハイライト
- rimLight
リムライト
- bgShadow
地⾯に落ちる影
- line
輪郭線
[opaque]や[transparent]のビューレイヤーでは、ノーマル⾊や影⾊や法線情報などはAOVを使って1回分のレンダリングで出しているので、マテリアルを⼊れ替えてレンダリングし直すといった⼿間がないようにしています。
では、AOVの設定方法を⾒ていきましょう。
AOVの出し⽅
AOVの出し⽅は以下のようになります。
1. マテリアルに[AOV Output]を追加して名前を付け、出⼒したい⾊か値を設定します。例として名前を「mask」、⾊を⾚にしました。
2. ビューレイヤーのパスの設定の中にある[Shader AOV]に先ほど追加した[AOV Output]と同じ名前「mask」を追加します。取り出したい情報によって名前の横の設定を[Color]か[Value]を変更します。
3. コンポジットに移動して、レンダーレイヤーを追加します。レンダーレイヤーを先ほど[Shader AOV]を設定したビューレイヤーに切り替えるとAOVが追加されているのが確認できます。顔の前⾯だけ「mask」を追加したマテリアルを割り当てているので、画像のような出⼒結果が表示されました。
AOVはレンダーレイヤーのほかに、3Dビューのマテリアルプレビューでも確認することができます。
AOVはいくつでも追加できるので、よく使う素材をまとめて作成して⼀度のレンダリングで取り出すことができます。
ですがこのままだとマテリアルごとに[AOV Output]をつくらなければならず使い勝⼿が良くないので、グループノードに⼊れて全マテリアルが同じ設定を使い回せるようにしたいと思います。
プロジェクトスタジオQではこのグループノードを「toonShading」と名前をつけて共有しています。これについては次回説明します。
ビューレイヤーの使い⽅
ここからは素材ごとに必要なオブジェクトの表⽰を切り替えてレンダリングするための設定を⾒ていきます。設定はビューレイヤーとコレクションの表⽰がセットになっています。
各ビューレイヤーの役割
最初の動画でも⾒たとおり、レンダリングするとビューレイヤーが切り替わりながら複数レンダリングされます。ビューレイヤーごとの役割は以下のようになっています。
この他にもアセット特有の素材が必要になればそのためのビューレイヤーを追加することもあります。また、毎回全てのビューレイヤーを使うというわけではなく、アセットによっては減ることもあります。
ビューレイヤー
- 名前
解説
- ViewLayer
作業⽤のビューレイヤー。レンダリングには使⽤しません
- opaque
不透明なメッシュをレンダリングします
- shadow
落ち影をレンダリングします。影を落とすためのメッシュや影を落とされるメッシュもここで表⽰します
- transparent
透明・半透明なメッシュをレンダリングします。opaqueのコレクションはHoldoutにしてマスクとして使⽤します
- trpShadow
透明なメッシュに落ちる影をレンダリングします
- highLight
マテリアルとは別にメッシュでハイライトを追加したい場合はここでレンダリングします
- rimLight
リムライトをレンダリングします
- bgShadow
地⾯に落ちる影をレンダリングします
- line
ラインをレンダリングします。ラインに影響させたくないメッシュを⾮表⽰にしたり、ライン専⽤のメッシュを表⽰します
コレクションの役割
コレクションはオブジェクトをまとめて操作するためのグループです。表⽰の設定やFreeStyleのラインの割り当てなどをコレクション単位で指定できます。
コレクションはいくつでもつくることができ、階層にすることができます。アセットでは各オブジェクトの役割に合わせてコレクションで分類することで様々なレンダリング設定に適した表⽰状態に切り替えます。
以下がレンダリング⽤のメッシュとライトのコレクションです。
_mdl
- 末尾名
解説
- _opaque
不透明なメッシュとテクスチャで切り抜いて表⽰するメッシュを格納する
- _shadow
落ち影⽤のメッシュを格納する
- _transparent
透明・半透明を格納する
- _highLight
ハイライト⽤のメッシュを格納する
_light
- 末尾名
解説
- _main
シェーディング⽤のライトとハイライト⽤のライトを格納する。アセットがキャラクターであれば顔⽤ライトなども格納する
- _shadow
落ち影⽤のライトを格納する
- _rim
リムライト⽤のライトを格納する
- _bgShadow
地⾯に落ちる影⽤のライトを格納する
各ビューレイヤーごとのコレクションの表⽰設定
アウトライナーの表⽰/⾮表⽰設定の使い⽅は以下のようになっています。
この中のコレクションのチェックマーク、[Holdout][Indirect Only]のON/OFFを組み合わせて、必要なオブジェクトのみ表⽰してレンダリングしていきます。
アウトライナーのアイコン
- アイコン
解説
- チェック
コレクションの表⽰を3Dビューとレンダリング両⽅とも切り替えます
- ⽮印
オブジェクトの選択の可能・不可能を切り替えます
- ⽬
3Dビューの表⽰を切り替えます(現在のビューレイヤーのみ)
- ディスプレイ
3Dビューの表⽰を切り替えます(全てのビューレイヤー)
- カメラ
レンダリングの表⽰を切り替えます
- Holdout
コレクション内のオブジェクトでマスクします
- Indirect Only
コレクション内のオブジェクトがレンダリングには映らずにライティングだけ反応します
ビューレイヤーとコレクションとアウトライナーの表⽰設定を組み合わせた結果が以下のようになります。
opaqueビューレイヤー
[opaque]以外のチェックを無効にします。
shadowビューレイヤー
[opaque]と[shadow]のチェックを有効にして、それ以外は無効にします。ライトは[shadow]を有効にします。
transparentビューレイヤー
[transparent]のチェックを有効にして、[opaque]を[Holdout]にします。そのほかはチェックを無効にします。
trpShadowビューレイヤー
[opaque]を[Indirect Only]にして、[shadow]と[transparent]のチェックを有効にします。ライトは[shadow]を有効にします。
highLightビューレイヤー
[opaque]と[transparent]を[Holdout]にして、[highLight]のチェックを有効にします。
rimLightビューレイヤー
[opaque]と[transparent]のチェックを有効にします。ライトは[rim]を有効にします。
bgShadowビューレイヤー
アセット本体の影を落とす場合は[opaque]のチェックを有効にします。影⽤の簡易モデルを使う場合は[opaque]もチェックを無効にして、[bgShadow]コレクションの中に⼊れた影⽤モデルから影を落とします。
lineビューレイヤー
基本的には[opaque]と同じですが、ラインに含みたくないメッシュがある場合はそのコレクションのチェックをOFFにしたり、ライン専⽤のメッシュが⼊ったコレクションのチェックを有効にしたりします。
まとめ
●コンポジット⽤の素材はAOVで出⼒するとレンダリング回数を節約できる
●ビューレイヤーとコレクションを使って必要なメッシュとライトだけを表⽰してレンダリングすると⾃由度が上がる
「なぜビューレイヤーを分けるのか」についてですが、それぞれの要素をひとつのビューレイヤーでレンダリングしようとした場合、メッシュとライトの関係やカメラに映るものか、影だけを落とすものかといった設定をシェーダかオブジェクトのプロパティで⾏うことになります。さらに半透明など、ほかの要素のことも考えると複雑になっていき......。対処できないケースも出てきてしまうため、シンプルに考えるためにビューレイヤーを分けることにしています。
以上、各種素材をレンダリングするための概要でした。
次回はトゥーンシェーディングを⾏うためのマテリアルのつくり⽅を2通り説明する予定です。ここまで読んでいただきありがとうございました。次回もよろしくお願いいたします。
株式会社プロジェクトスタジオQ
スタジオカラー・ドワンゴ・麻生塾の3社共同プロジェクトとして、2017年に福岡に設立されたアニメーション制作スタジオ。アニメCGコンテスト「Award:Q/Project Studio Q Anime CG Award 2022」開催中。
studio-q.co.jp