logo-roadto3dcg logo-artstation logo-deviantart logo-pixiv logo-sketchfab logo-twitter logo-vine header

Blender | 地面に落ちる影だけを別にレンダリングする・IBL用

(大幅に書き直し。 Blender2.78からCycles用シャドウキャッチャーが実装されるらしいので、将来的にはそちらを使ったほうが楽だと思う

背景に画像を合成するときなど、モデルと地面に落ちる影を別々に扱いたい場合の手順。モデルと地面+影のレンダーレイヤーを分けてレンダリングし、コンポジットノードで合成する。

用意した背景画像にモデルを合成する場合

RenderLayersのShadowパスで影情報を出力する方法だと、現状ではIBLやメッシュライトでできた影が反映されないらしく、光源に合わせて影を出すためのランプを追加したりする必要が生じる。ここではもっと単純な方法でやってみている。手順的には、「地面のみ」と「地面に影」のレンダーレイヤーを作成→差分を計算して影だけを取り出す→影を背景画像に乗算→背景を透過させた「モデル」のレンダーレイヤーを合成、という具合。

合成のために背景を透過させたいので、プロパティエディタのRender→FilmでTransparentにチェックを入れておく。

モデルと地面オブジェクトを別のレイヤーに配置する。地面オブジェクトはただのPlaneで、影が表示される領域(=地面のように見せかけたい領域)をカバーするサイズにしてある。

プロパティエディタのRenderLayersに移動。デフォルトで表示されている「RenderLayer」の名前をダブルクリックして「model」に変更する。 Layer→Sceneで、モデルと地面のレイヤーが両方選択されているのを確認。Layer→Layerでモデルのレイヤーをオン・地面のレイヤーをオフに、Excludeで地面のレイヤーにチェックしてレンダリングから除外する。これで、地面の影響を受けずにモデルだけがレンダリングされる。

レンダーレイヤーリストの右の+ボタンをクリックして新規レンダーレイヤーを作成。「ground」という名前にした。こちらはLayer→Layerで地面のレイヤーだけをオンにして、Excludeでモデルのレイヤーにチェックしてレンダリングから除外する。これで、モデルの影響を受けずに地面だけがレンダリングされる。

さらにレンダーレイヤーリストの右の+ボタンをクリックして新規レンダーレイヤーを作成。「shadow」という名前にした。こちらはLayer→Layerで地面のレイヤーだけをオンにする。モデルのレイヤーはExcludeで除外せずそのままにしているので、地面に落ちるモデルの影はレンダリングされる。

コンポジットノードを下図のように組めば、背景画像に影とモデルが合成される。RGB Curvesは影の濃さやコントラストを調節するために入れた。2つの画像の差分を出す演算方法は「Difference」だけど、Blender Guruで影の抽出に「Divide」を使っている例を見て以来、こっちのほうが一発でくっきり出せて便利かなと思い真似している。色や明るさによって不都合が出る場合はDivideをDifferenceに変え、その後にInvertを挟んでください。

HDRI画像にそのままモデルを合成する場合

背景画像を別に用意せず、IBLの光源として使っているHDRI画像をそのまま表示させたい場合は、レンダーレイヤーmodelのPasses→Environmentを有効にしておき、背景画像のかわりにMultiplyに入力する。

使用ソフトのバージョン: Blender 2.7x