DAZ Studio 3 Advanced その6:ShaderMixerでシャドウキャッチャーを組む
Category : Shader Mixer
今回もDAZ Studio 3 Advanced(DS3Adv)の新機能『ShaderMixer』を使ってみたいと思います。お題は「シャドウキャッチャー」です。
シャドウキャッチャーは、それ自身は透明で、オブジェクトの影のみを受けるものです。写真などと合成する時に便利な機能です。『pwCatch』の記事でも紹介しましたね。
今日の情報はDAZフォーラムのこのスレッドを参考にさせていただきました。

※さらに影の透明度が変更できるように手を加えました。
※DS3バージョンアップによる問題点の解消を追記しました。
■ブリックの構成
さっそくShaderMixerタブでブリックを組みましょう。
1. サーフェイスに適用するものなので、マテリアルで新規作成します。File > New で開くダイアログで「Material」を選択し「OK」ボタンを押します。
2. そこにブリックリストから、Functions > Lighting > Shadow Catcher をドラッグ&ドロップします。
3. Shadow CatcherブリックのIn ShadowノードをDAZ MaterialブリックのOpacity Colorノードへつなげます。
実はこれだけです。
影が発生している部分以外を透明にするということになります。
※ノードの種類について
接続することができるノードには種類がアルファベットで示されています。通常同じ種類のノードへつなげるのですが、違うとつながらないというわけではありません。
C - Color(色)
F - Float(数値)
N - Normal(法線)
P - Point(空間上の座標を持つ1点)
V - Vector(ベクトル)
S - U coordinate(水平位置)
T - V coordinate(垂直位置)
ここで、使いやすくするためにもう一つブリックを加えます。
Functions > Patterns > ImageをD&Dし、ColorノードをDAZ MaterialブリックのDiffuse Color、Specular Color、Amibient Color各ノードへつなげます。

「Shadow_Catch_Single」と名づけて保存しました。
さらに影の透明度を変更できるようにしてみました。

Functions > Math > Math 2 をShadow Catcherブリックの前に挟んでいます。Math 2ブリックは、2つのパラメータを演算するもので、今回はValueを透明度とみなしてMultiplyで掛け合わせています。
この時、Valueの値は0~1を取るのが望ましいのですが、標準ではスライダでいくらでも数値を増減できてしまいます。値の制限をしたい場合は、Parametersタブと同じようにします。まず、Math 2ブリックのValueノード(スライダのすぐ上の文字)をダブルクリックすると「Parameter Settings」ウィンドウが開きます。

そこでMin Limitを0に、Max Limitを1にして、Respect LimitsをYesに変えるとパラメータの範囲に制限がかかるようになります。
ついでに、Display AsをPercentに変更すれば値がパーセンテージで表示されるのでさらにわかりやすくなりますね。
また、ここではパラメータの名称を変更することが出来ますので、わかりやすい「Shadow Opacity」などに変更しておくと良いかもしれません。
■使ってみる
例えば、このように球体があるシーンで、球体の影をY座標0の床に落としたいとします。

ライトをシーンに配置(Create > New DistantLight)し、影が落ちるように設定します(ParametersタブのShadow > Shadow TypeをRaytracedに)。
影を受けるオブジェクトがないといけませんので、床としてPlaneを配置します(Create > New Primitive > Plane)。この場合は平面にしていますが、どんな形のものでも平気です。
レンダリングしてみるとこのようになりますが、床が邪魔です。

そこで、Planeオブジェクトのサーフェイス「Default」をSurfacesタブで選択し、シャドウキャッチャーを適用します。Shader Mixerタブの右下の「Apply」ボタンを押してください。
レンダリングすると、床がなくなり影のみが残ります。

※ここでは背景はグレーになっていますが、Backdropとしてあらかじめ合成用の画像を読み込んでおく(メインメニューのEdit > Backdrop)と、合成結果がより良くなります。
おまけとして、SurfacesタブのImage欄のColorを変更することで、影の色を変えることが出来ます。
また、影を作り出すオブジェクト(この場合は球体ですね)のほうに『UberSurface』を適用し「Fantom」をOnにすると、オブジェクトを隠し純粋に影だけをレンダリングすることが出来ます。
さて、このシャドウキャッチャーですが、制限事項があります。
・影を発生させるライトは1灯のみ使えます。
・『UberEnvironment2』などのAmbient Occlusionは受けることが出来ません。
1つ目はかなりきつい制限ですが、そこは使い方次第です。もっといろいろなことが出来るシャドウキャッチャーシェーダ『pwCatch』のアップデートが待たれますね。なにか解決法があればここでご紹介したいと思います。もし思いついたという方がいらっしゃれば、ご指摘もお待ちしています。
※バージョン3.0.1.137(ベータ)より、1つ目の問題が修正され複数のライトの影が反映されるようになりました。
※AOを描く方法はとうふさんのブログ「豆腐アラモード:AOの影を捕まえる」に詳しく書かれています。
最後に、シャドウキャッチャーを使ったシーンを作ってみました。

レンダリングした人物、影、ライトで明るくなった平面、ボリュームと、背景画像をそれぞれ用意しPhotoshop上で合成しています。人物はM4ですが、影をレンダリングする時には狼男キャラクター『Night World Lycanthropos』に変更しています。
今回の画像の素材はこちら
シャドウキャッチャーは、それ自身は透明で、オブジェクトの影のみを受けるものです。写真などと合成する時に便利な機能です。『pwCatch』の記事でも紹介しましたね。
今日の情報はDAZフォーラムのこのスレッドを参考にさせていただきました。

※さらに影の透明度が変更できるように手を加えました。
※DS3バージョンアップによる問題点の解消を追記しました。
■ブリックの構成
さっそくShaderMixerタブでブリックを組みましょう。
1. サーフェイスに適用するものなので、マテリアルで新規作成します。File > New で開くダイアログで「Material」を選択し「OK」ボタンを押します。
2. そこにブリックリストから、Functions > Lighting > Shadow Catcher をドラッグ&ドロップします。
3. Shadow CatcherブリックのIn ShadowノードをDAZ MaterialブリックのOpacity Colorノードへつなげます。
実はこれだけです。
影が発生している部分以外を透明にするということになります。
※ノードの種類について
接続することができるノードには種類がアルファベットで示されています。通常同じ種類のノードへつなげるのですが、違うとつながらないというわけではありません。
C - Color(色)
F - Float(数値)
N - Normal(法線)
P - Point(空間上の座標を持つ1点)
V - Vector(ベクトル)
S - U coordinate(水平位置)
T - V coordinate(垂直位置)
ここで、使いやすくするためにもう一つブリックを加えます。
Functions > Patterns > ImageをD&Dし、ColorノードをDAZ MaterialブリックのDiffuse Color、Specular Color、Amibient Color各ノードへつなげます。

「Shadow_Catch_Single」と名づけて保存しました。
さらに影の透明度を変更できるようにしてみました。

Functions > Math > Math 2 をShadow Catcherブリックの前に挟んでいます。Math 2ブリックは、2つのパラメータを演算するもので、今回はValueを透明度とみなしてMultiplyで掛け合わせています。
この時、Valueの値は0~1を取るのが望ましいのですが、標準ではスライダでいくらでも数値を増減できてしまいます。値の制限をしたい場合は、Parametersタブと同じようにします。まず、Math 2ブリックのValueノード(スライダのすぐ上の文字)をダブルクリックすると「Parameter Settings」ウィンドウが開きます。

そこでMin Limitを0に、Max Limitを1にして、Respect LimitsをYesに変えるとパラメータの範囲に制限がかかるようになります。
ついでに、Display AsをPercentに変更すれば値がパーセンテージで表示されるのでさらにわかりやすくなりますね。
また、ここではパラメータの名称を変更することが出来ますので、わかりやすい「Shadow Opacity」などに変更しておくと良いかもしれません。
■使ってみる
例えば、このように球体があるシーンで、球体の影をY座標0の床に落としたいとします。

ライトをシーンに配置(Create > New DistantLight)し、影が落ちるように設定します(ParametersタブのShadow > Shadow TypeをRaytracedに)。
影を受けるオブジェクトがないといけませんので、床としてPlaneを配置します(Create > New Primitive > Plane)。この場合は平面にしていますが、どんな形のものでも平気です。
レンダリングしてみるとこのようになりますが、床が邪魔です。

そこで、Planeオブジェクトのサーフェイス「Default」をSurfacesタブで選択し、シャドウキャッチャーを適用します。Shader Mixerタブの右下の「Apply」ボタンを押してください。
レンダリングすると、床がなくなり影のみが残ります。

※ここでは背景はグレーになっていますが、Backdropとしてあらかじめ合成用の画像を読み込んでおく(メインメニューのEdit > Backdrop)と、合成結果がより良くなります。
おまけとして、SurfacesタブのImage欄のColorを変更することで、影の色を変えることが出来ます。
また、影を作り出すオブジェクト(この場合は球体ですね)のほうに『UberSurface』を適用し「Fantom」をOnにすると、オブジェクトを隠し純粋に影だけをレンダリングすることが出来ます。
さて、このシャドウキャッチャーですが、制限事項があります。
・影を発生させるライトは1灯のみ使えます。
・『UberEnvironment2』などのAmbient Occlusionは受けることが出来ません。
1つ目はかなりきつい制限ですが、そこは使い方次第です。もっといろいろなことが出来るシャドウキャッチャーシェーダ『pwCatch』のアップデートが待たれますね。なにか解決法があればここでご紹介したいと思います。もし思いついたという方がいらっしゃれば、ご指摘もお待ちしています。
※バージョン3.0.1.137(ベータ)より、1つ目の問題が修正され複数のライトの影が反映されるようになりました。
※AOを描く方法はとうふさんのブログ「豆腐アラモード:AOの影を捕まえる」に詳しく書かれています。
最後に、シャドウキャッチャーを使ったシーンを作ってみました。

Character1: | Michael 4 |
---|---|
Character2: | Night World Lycanthropos |
Hair: | Jai Hair(Michael 4 Complete) |
Costume: | Stylin For M4(Michael 4 Complete) |
Shader: | UberVolume |
レンダリングした人物、影、ライトで明るくなった平面、ボリュームと、背景画像をそれぞれ用意しPhotoshop上で合成しています。人物はM4ですが、影をレンダリングする時には狼男キャラクター『Night World Lycanthropos』に変更しています。
今回の画像の素材はこちら
![]() Michael 4 Starter Bundle | ![]() Night World Lycanthropos |
関連エントリー
- DAZ Studio 3 Advanced その5:ShaderMixerで拡張スポットライトを組む
- DAZ Studio 3 Advanced その9:ShaderMixerでデプスキューカメラを組む
- DAZ Studio 3 Advanced その12:ShaderMixerでコースティクスを表現
- DAZ Studio 3 Advanced その13:ShaderMixerでのIndirect Lightを試す
- DAZ Studio 3 Advanced その14:Photon Mapper追加検証
- DS4でのShader Mixer その1:タブ解説
- DS4でのShader Mixer その2:シェーダーツリーの作成
- DS4でのShader Mixer その3:シーン内のシェーダーを読み込む
- DS4でのShader Mixer その4:雑多な情報