Blenderとか3DCGとか

スクリプト寄りです。

一つの.blendファイルでEeveeとCycles両方をレンダリングする(リンクを重視する方法)

前回の記事で紹介した、一つの.blendファイルに複数のシーンを持たせる方法を使用して

を行ってみます。
f:id:masayuki-osaka-blend:20190727184814p:plain
 Eeveeには影のみを受け取る設定が標準では存在しないため、それをCyclesで補おうというアプローチです。

 と、記事を書こうとしている最中に、既に同じことをしている動画を見つけてしまいました・・・
youtu.be なんとも間が悪い上に、自身もビューレイヤーの有効な使いかたをこれで知り、前回の記事に手を加えた次第です。
 影の調整やレンダリング設定の最適化にも触れているので、この手法をお勧めします。

さて、書くことが無くなってしまうので、ここでは敢えてシーンとオブジェクト、コレクションのリンクに拘った手法を紹介します。
 この手法はリスクを伴いますが、リンクについて考える一助になれば幸いです。

シーン共通の設定を行う

スザンヌが地面に影を落とすシチュエーションを想定します。
f:id:masayuki-osaka-blend:20190801000448p:plain

このシーンを基に、Eevee用のシーンとCycles用のシーンへ拡張していきますが、レンダー設定は各シーンで別々に管理されます。
 そのため、解像度などの共通させたいシーン設定は、最初の段階で行うことをお勧めします。今回の例では、レンダリングの背景を透明にするための設定をこの段階で行います。

f:id:masayuki-osaka-blend:20190801001832p:plain
シーンを増やした後では、シーン毎にこれを行う必要があります

シーンを増やす

シーンを増やす際、Linked Copyを選択してください。
f:id:masayuki-osaka-blend:20190802092318p:plain

 この段階で、Sceneと新しく出来たScene.001、オブジェクト等のリンク関係は図のようになります。

f:id:masayuki-osaka-blend:20190801022046p:plain
各シーンは、矢印にそって辿れるものを扱えます
★赤丸のView Layer, Scene Collectionは同じ名前で同じアイコンですが、この二種は別々の物として扱われます。

レンダラーの設定

SceneとScene.001のレンダラーをそれぞれ、EeveeとCyclesにします。
 また、それぞれのシーン名をScene.eevee, Scene.cyclesへと変えました。
f:id:masayuki-osaka-blend:20190801014711p:plain

この結果、各シーンでの関係は次のようになります。

f:id:masayuki-osaka-blend:20190801021629p:plain
Transparent, Eevee, Cyclesはレンダー設定なので、シーン別に保持されます

階層とリンク関係を変更

PlaneはCyclesでの落ち影ちとしてのみ必要なので、Eeveeのシーンから取り除きます。
 ただし、そのまま削除してしまうと両シーンから失われてしまいます。そこで、Scene.cyclesのアウトライナで、PlaneをScene Collection直下に移動させます。

f:id:masayuki-osaka-blend:20190801024247p:plain
ドラッグアンドドロップでScene Collectionへ移動させます
PlaneがScene.eeveeのScene Collectionから辿れない場所へ移ったことで、Scene.cyclesのみで取り扱えるようになりました。
f:id:masayuki-osaka-blend:20190801025556p:plain
Scene.eeveeから矢印を辿っても、Planeに辿り着けません

マテリアルとリンク関係

この段階に限らず、スザンヌにマテリアルを割り当てると両方のシーンへ反映されます。
 その理由は、マテリアルはスザンヌの下の階層に配置され、どちらのシーンからでも辿れるようになるからです。

f:id:masayuki-osaka-blend:20190802063056p:plain
マテリアルはシーンではなく、オブジェクト(にリンクしたメッシュ)へリンクします

Eevee側でのレンダリング

Scene.eeveeに切り替えてレンダリングすると、プレーンはリンクが無いため現れません。
 今回の例ではEevee側でプレーン以外をレンダリングするのが目的なので、これでスザンヌのみのレンダリング結果が得られました。
f:id:masayuki-osaka-blend:20190802064156p:plain

Cycles側でのレンダリング

Scene.cyclesに切り替えて、落ち影のみを取得するために以下の設定を行います。

  • スザンヌレンダリング結果が背景の透明と同じになるように
  • プレーンは影のみを表示する物体になるように

この2つは共にCyclesのみの機能で、Eeveeには搭載されていません。

f:id:masayuki-osaka-blend:20190802065117p:plain
スザンヌへHoldout, プレーンへShadow Catcherを設定します
これらはシーンに対してではなくオブジェクトに対しての設定です。そのため、Scene.eevee側へも影響します。
 ただし、Eeveeはこの設定を活用することができないため、Scene.eeveeではプロパティにもレンダリング結果にも反映されません。
f:id:masayuki-osaka-blend:20190802071427p:plain
Scene.eeveeからも辿れますが、レンダラーがEeveeのため意味がありません
設定後、レンダリングを行うと落ち影のみが取得できます。
f:id:masayuki-osaka-blend:20190802072512p:plain

コンポジット

前回の記事で紹介した動画では、Eeveeだけを使用して落ち影用オブジェクトを作成するため、コンポジットが不要でした。 youtu.be

ですが本記事の手法ではコンポジットが必要になります。

コンポジットエディタでRender Layerノードを複製し、それぞれScene.cycles, Scene.eeveeのレンダリング結果を表示するように設定します。

f:id:masayuki-osaka-blend:20190802073354p:plain
赤丸の所をクリックし、表示させるレンダリング結果を選択します
あとは落ち影にスザンヌを重ねると最終結果が得られます。
f:id:masayuki-osaka-blend:20190802074119p:plain

コンポジットとシーンの関係

コンポジットは、シーン毎に別々で保持されています。
 そのため例えばScene.cyclesでコンポジットを組んだ場合、Scene.eeveeに切り替えてレンダリングを行うと臨んだ最終結果が得られません。

f:id:masayuki-osaka-blend:20190802075002p:plain
Scene.cyclesでコンポジットを組んだ例
組んだコンポジットを見失ったときは、シーンを切り替えてみてください。

逆にこれを利用すれば複数のコンポジットを用意することができ、シーンを切り替えてF12を押すだけで最終イメージを選べます。
 コンポジットのノウハウを貯めたファイルをひとつ持っておくのも良いかもしれません。
f:id:masayuki-osaka-blend:20190802083851p:plain
Compositing Nodetreeというものがコンポジットの事で、シーン毎に保持されます

最後に

Blender2.8ではコレクションとビューレイヤーの登場により、シーンの切り替えはそれほど頻繁には使用しなくなるかも知れません。
 ですが取得したいレンダリング結果の種類が増えるほど、選択肢として有効になっていきます。

また、シーンに限らずリンクの概念は混乱しやすいものですが、慣れると様々な取り回しが出来るようになります。
 是非、リンクの図を思い浮かべながら色々操作してみてください。