NPR:ちょっと面白いフェイクシャドウの作り方

《本記事は、Blender Advent Calender 2020、12月24日の参加記事です。入門者向けとしてはちょっと難しいかもしれない内容も含みますので、ご了承下さい》

「シャンパンなんか開けてる場合じゃないぜ、Blenderを開くんだ!」

えーさて、Blenderのマテリアルプレビューを見ながらアニメーションなどを作成していて、そのままビューポート表示をレンダリングすることもあるかと思います。そのまま作品として使っても良いくらいマテリアルプレビューの表示がきれいなのは周知の事実ですね。
Eeveeのさらに美しいレンダリング表示も良いですが、マテリアルプレビューだと性能の高くないPCでも相当な高速できれいに表示されますし、とても魅力的です。

ここからサクッとレンダリング!
ここからサクッとレンダリング!

 

でも、ひとつ淋しいポイントがあります。左がマテリアルプレビュー、右がレンダリングプレビューですが、宙に浮いている足と接地している足の区別が付きません。そう、光の影響がないため、影がありませんね!

 

そこで、マテリアルプレビューのインスタントな美しい表示に、《フェイクでそれっぽいシャドーを追加する方法》を考えてみました。

結果はこちら。

 

空の色や靴の色を影の中に映り込ませるGIの効果も盛り込んでみました(やり過ぎですが!)

なかなかきれいでございましょう?

では、設定など。左足から行います。

 

■影用オブジェクトの用意

・左足のシャドウ用オブジェクトとしてプレーンを用意、UVを調整するために1回だけ割りを入れる(図を参照)
・左足の子にする(Ctrl+P)
・Shrinkwrapモディファイアを掛け、floorオブジェクトに貼り付かせる
・プレーンは真上からUV展開する

床との隙間を2mm開けています
Shrinkwrapは、床との隙間を2mm開けています

 

■プレーンを影にするため、マテリアルを設定
基本の構成としてはシンプルなものです。
Shadow03

 

透明なマテリアルに暗い青色のEmissionマテリアルを合成し、マスクで抜いています。ポイントは、Facに繋がるマスクをプロシージャル・テクスチャーで作っているところでしょうか。

SphericalのGradientテクスチャーを用いると、白黒の円形マスクを得ることができます。マスクの階調をMap Rangeで調整し、望みのボケ足をにしています。

次の動画は、たった1回の面分割でも、靴と影が概ね似た形にUV調整可能なことを示しています。

 

あとは靴にアニメーションを付ければ、それっぽい影の完成です。影用のプレーンはShrinkwrapによって地面から2mmの高さに固定されながら、前後左右の足の動きには追従しますので、これだけでもしっかり影らしく見えますね!

動画は、左足がここまでの設定、右足はこの先の設定(色と形の変化)を含んだものです。

 

■足の動きに対応して影の色と形を変化させる

2つのオブジェクトを関連付けたうえで異なった動きをさせるには、Driver機能を使います。Driverの深い部分については私自身もしっかり理解していないので、「とりあえず使える」レベルの使い方ですが……。

足が接地している状態のZ座標をコピーしておきます。

 

shadow6

 

影用のマテリアルにColorRampとMap Rangeを追加してEmissionのColorに接続します。ColorRampは3分割程度にし、右端を足が上がりきった時の影の色に、左端を接地した時の影の色(=間接光の影響で、影に靴の赤色が付く想定です)にします。shadow7

 

Map RangeノードのValue枠内で右クリックしてメニューを表示。
Add Driverをクリックすると、Driverの設定が開きます。
Shadow8

 

先ほどコピーした足の座標値をExpression:の数値としてペーストし、頭にマイナス記号を付けます。「var(=変数=足の位置のZ座標)から1.1546を引いた値(=0)が変化の初期値」というような意味になります。

Objectとして足を選択し、TypeでZ Locationを選択します。

これで、「足がZ軸上を上に移動すると、影のColorRamp色設定が右側の色へ変化する」ということになるわけです。
Shadow9

 

左足のここまでの仕上がりです。

 

最後の工程です。足(=靴)が地面から遠ざかると、影が弱くなって消えていくように、Driverを設定します。

Shadow11

 

という値になるよう、From MaxにDriverを追加し、設定します。

足が接地している時、図の下に見えるValue(=Zの座標)は1.155(1.1546の四捨五入値)です。Driverを追加直後(図の左)のDriver Value(=影響を受け取る側の値)は1.355になっています。これが0.2(Driverを追加する前のFrom Maxと同じ値)になるよう、Expressionの値(緑色の部分)を調整します。

0.2から1.155をマイナスした値=-0.955が適正値です!

※この時、足が地面に接地している状態で行なって下さい。そうでない場合は、値がずれてしまいます。

左足が出来上がったら、右足用の影にも同じマテリアルをアサインした上で複製して別マテリアルとし、Driveする元のオブジェクトとして右足を指定し直します。

マテリアルの内部にDriverの設定を行なっているため、同じマテリアルのままだと全く同じ振舞いになってしまいます。マテリアルを複製後、別物として編集し直すことを忘れないようにして下さい。

出来上がったものをもう一度、見てみます。

 

今回使用したBlenderファイルは、こちらで無償配布(クリスマスプレゼントにしてはちょっとしょぼい?)させて頂きます。影の色を自由に変化させるなどして、遊んでみて下さいね!

【FakeShadow_by_driver.blend】

なお、本記事で解説した以外にも、靴の内部が暗く見えるように頂点カラーを合成したり、靴の飾りのためにオブジェクトインスタンスを使ったりと、ちょっとした小技も埋込まれていますので!

ちなみに、地面が平らでなくともこの方法は有効です。影をさらにサブディバイドした上でちょっと試してみた動画をどうぞ。ただし靴にはボーンの設定も何もしていませんので、靴はめちゃくちゃ減り込んでますし、地面の凹凸を大きくしすぎて影も破綻していますが……!

 

上手に使えば、なかなか便利そうだと思いませんか?


最後までお読み下さいましてありがとうございます!

では、年末年始もHappy Blending !!


 

Blender Advent Calendarに戻るのは、こちらからどうぞ。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>