はじめに
Blenderで絵を作りたい。
フォトリアルの、というよりは、まずアイキャッチ画像(↑)のような玉ボケを作りたいというWantが抑えきれず、Blenderの被写界深度(Depth of field)を調べました。
EEVEE/Cyclesの設定方法やレンダリング動画・画像、考察したことをまとめます。
Blender 2.8は2019年3月31日にダウンロードしたものを使用しています(記事執筆当時)。
カメラとBlenderの被写界深度は違う
Blenderがどこまで現実の物理特性をシミュレートしているのかはわかりませんので、あくまで僕の所感になります。
カメラの被写界深度とは、ピント面に対して前後にピントが合っているように見える範囲のこと。絞り(F値)や焦点距離、撮影距離で決まります。また、被写界深度はピント面から手前に1:奥に2の比率で増減します。
という原理はどうもBlenderにはなさそうです。
写真の知識そのままでやると混乱します。 ← 当初の僕(笑)
シャッタースピードやISO感度は設定できませんし、ここに掲載している動画・画像のF値は0.4〜0.5にしていますからね。0.4というとめっっっっっちゃくちゃ明るいレンズです。そんなレンズは現実に存在しないと思います。
つまり、Blenderのルールのもとボケが作られているんだろうな、という感じ。作り手が「これでOK!」と感じる数値が正解ということですね。
補足:カメラは原理的には同じ(2019.6.14追記)
こちらの記事に書いたように、上記の「という原理はどうもBlenderにはなさそう」は少し誤りでした。正しくは「厳密には同じではないけれど、実際のカメラと原理的には同じ」でした。
Blenderの光源の仕組み
僕たちは光がないとものを見ることはできません。TVのように自ら発光するものや、反射した光があるから僕たちは色や形を把握できます。
BlenderのLightオブジェクトはTVのように発光してないんです。← 当初の僕の勘違い(笑)
レンダリングのとき、Lightから発せられた光(の情報)がオブジェクトに当たる(反射する)ことで、ものが見えるようになっている様子。
ちなみに、発光しているオブジェクトを作る方法は、Emission Materialを作ってオブジェクトに適用させます。ライティング機材でいうソフトボックスみたいなものを作る感覚です。
被写界深度の設定方法
EEVEEの場合
プロパティエディタの「Scene」 → 「Depth of Field」をONにします。「Max Size」はボケの最大サイズとのことで、3D Viewを見ながら「いい感じ」になる数値に調整しましょう。
「Shadow」 → 「Soft Shadow」は直接関係ありませんが、影が柔らかくなるのでONにしています。
プロパティエディタの「Camera」 → 「Depth of Field」の各種項目を設定します。最低限以下を設定すればOKです。
- Focus Distance
- カメラからピント面までの距離。
- Focus on Objectでピントを合わせたいオブジェクトを選択することもできる。
- Blades
- 絞り羽根の枚数。
- 0で玉ボケに、3で三角・・・16まで増やすと再び玉ボケになりました。
プロパティエディタ「Camera」 → 「Viewport displayのLimits」をONにすると、3D Viewにピント面を表すマークが表示されます。
Cyclesの場合
プロパティエディタの「Camera」 → 「Depth of Field」の各種項目を設定します。最低限以下を設定すればOKです。
- Distance
- カメラからピント面までの距離。
- Focus Objectでピントを合わせたいオブジェクトを選択することもできる。
- Aperture Type
- Radius or F-stop(F値)を選択する。
- F-stopにするとSize → Numberに変わる。F値を入力すればOK。
- Blades
- 絞り羽根の枚数。
- 0で玉ボケに、3で三角・・・16まで増やすと再び玉ボケになりました。
プロパティエディタの「Camera」 → 「Viewport display」のLimitsをONにすると、3D Viewにピント面を表すマークが表示されます。
ピント面を合わせる
3D View上でピント面を任意の場所に移動させたり、オブジェクトを指定してピント面を合わせます。LookDevビューやRenderビューでボケ具合を確かめながら設定を詰めていくと良いです。
以下の動画・画像ではFocus Distanceを約4m、F-stopを0.4〜0.5にしました。
被写界深度が変化する動画
ピント面を奥に移動させる(EEVEE)
ファーストインプレッションは「EEVEEはなんて簡単に玉ボケが作れるんだろう!」でした。でも、それは静止画のときだけ。動画にすると違和感がありました。
4秒くらいまでのボケの変化はいい感じなのです。しかし、6秒あたりからカクカクと変化してすごい違和感。
3D Viewで見ている分には違和感ないので謎。
ピント面を奥に移動させる(Cycles)
サンプル数256でレンダリングしたので玉ボケの品質はさておき、とてもスムーズにボケが変化しています。EEVEEはなぜこうならないんだろう?
サンプル数が256なのにレンダリング時間が10倍に増えたので気軽には使えません。270フレームで90分程度かかりました。
スザンヌを前後に移動させる(EEVEE)
ピント面を固定して、スザンヌ(という名前のモンキー)を前後に動かしました。
違和感のないボケ具合です。EEVEEで動画を作る場合はピント面を固定してオブジェクトを動かした方が綺麗ですね。
サンプル数による画像比較
EEVEEの場合
静止画の場合、サンプル数よる違いはほとんどないですね。もちろんシーンによるのでしょうけど。
Cyclesの場合
EEVEEとくらべるとサンプル数によって違いますね。サンプルを増やすごとに丸ボケもはっきりしていきます。
サンプルを増やせば綺麗なボケになりますが、レンダリング時間が長大になるデメリットがあります。
被写界深度は後付けか
前項のことから、CGツールで「被写界深度なし」のレンダリングを行い、After Effectsなどでコンポジットして被写界深度を後付けするのが一般的なのだろうと思います。
実際に試していませんが、OpenEXR形式でレンダリングすると、After Effectsで被写界深度を後付けできるようです。OpenEXRにはたくさんのZバッファ(深度=奥行き)情報が含まれて、それを元にボケ加減を調整できるとか。
ということは、OpenEXR形式ならBlenderでレンダリングしつつ、コンポジットエディタでイケるってことですよね。Dofocus nodeが使えますし。
まとめ:Blenderで丸ボケは作れる
EEVEEはかんたんにボケが作れます。見た目もいい感じです。ただ、フォトリアルを追求するなら、他の設定を詰めてく必要はありそうです。ささっとならこれでもいいかな。
Cyclesもかんたんにボケは作れます。ボケ品質は良いです。とはいえ、品質向上=レンダリング時間長大になりますのでケースバイケースです。
現実のボケに関しては、カメラからオブジェクトの距離やオブジェクトの配置(距離感)によって結果は変わります。
Blenderのスケールは1メートル単位で、今回は現実の尺度でオブジェクトを配置していません。もしかしたら現実に合わせて作り込むといい感じの玉ボケが作れるかもしれませんね。
最終的にどちらのレンダラーを使うか?といったら、自分の表現にあった方を使うことですね。
EEVEEは表示もレンダリングも高速なのでEEVEEだけで済めば楽。ただ、現状ではEEVEEでは表現できず、Cyclesならできる表現もあるようなので、どちらを使っても設定を詰めることは必要だと思いました。