Blenderでセルルックなマテリアルノードを作る

※この記事での方法は結構に煩雑なので、「もっとシンプルにセルルックなマテリアルノードを作りたい!」という場合は、こちらの記事をご覧ください。

 Blenderのマテリアルには、元からトゥーンシェーダーが存在します。これを使うと、アニメ調(アニメ塗り)な色合いでオブジェクトをレンダリングできます。
 例えば、以下のように『ディフューズ』を設定すると、ベースカラーと影の2色だけの色合いになります。本記事ではベースカラーと影の色だけの状態をセルルック(アニメ調の色合い)であると定義して話を進めていきます。

 さて、お気づきかと思いますが、このままでは影の部分は真っ黒です。なお、この段階で使っているランプオブジェクトはサンランプ(太陽光)だけです。
 サンランプだけではどうしても照らしきれない部分ができてしまい、そこが真っ黒な影になります。しかし、影が真っ黒だとあまりに光のコントラストが強いので補助的な明かりで影部分も照らす必要があります。この場合に考えられるのはヘミランプを追加したり、ワールド設定でアンビエントオクルージョン(AO)をオンにするという手段あたりでしょうか。
 しかし、どちらの場合も単に追加しただけではベース色と影だけの二色にはなってくれません。薄影ができてしまいます。

 一応、サンランプのみが光源の場合でもマテリアルのシェーディングパネル内の『放射』の数値を上げていくと影部分を明るくできます。

 これでもアニメ調にできますが、『放射』を0より大きな数値にするとオブジェクト自体が明るくなる(発光している)ことになります。ということは、ランプを切った状態でも影の部分は黒くなってはくれません。また、サンランプが当たっていない部分が影である以上、サンランプからの光の色を変えても影部分にはその色は反映されません。例えば、夕焼けの光をオブジェクトに当てても影部分がオレンジになってくれないなどの不具合が生じます。

 場面の暗転や色付きの光を当てるなどのシーンを作る予定がない場合はこれでも構いませんが、せっかくなのでベース色と影の色だけのアニメ調の色合いにしたい! ということで、実際にそうなる設定を考えてみました。
 先に結論から掲載すると以下のような感じです。



 以上のような設定でヘミランプからの光の色を変えるとオブジェクトの色に反映されるはずです。ノード部分に関して何をしているのかはもう少し詳しく解説していきます。

まずは色を色相・彩度・輝度に分離する

 ヘミで明るさを足すと薄影が出てしまうのが問題ならば、影部分が一色になるように設定してしまえばいいわけです。
 Blenderのマテリアルノードでは『コンバーター』の『HSV分離』を使って、色を色相・彩度・輝度に分離させることができます。分離させた色相・彩度・輝度は『HSV合成』を使うと統合できます。

 問題となっている薄影を一色に統一するために、まずHSV分離とHSV合成からV(輝度)の接続を外します。そのうえで、『コンバーター』から『カラーランプ』を追加し、以下の図のように設定します。カラーランプを白黒二色にして係数につないだことにより、影からグラデーションを取り除くことができるようになりました。

 次に『カラー』の『ミックスRGB』を選択し『追加』を選択します。この状態でカラーランプの『カラー』の方から出した線を『ミックスRGB(追加)』の係数につなぎます。

 そして、『HSV合成』のアウトプット『カラー』から『色1』と『色2』に線をつなぎます。
 また、『HSV合成』の『V』の項目には0より大きい数字を入力します。この数値で影の濃さを調整するわけです。ここでは仮に0.5という数値を入れておきます。

 これにより、ひとまずオブジェクトを二色化することができました。これだけでもヘミランプの光の色の影響を受けてくる設定にはなっています。

 しかし、この状態でサンランプとヘミランプの両方を切っても(照明を消しても)、オブジェクトは真っ黒にはなってくれません。灰色になってしまいます。

 なぜこうなるかというと、『HSV合成』の『V』の項目の数値がそのまま照明を切った場合の色として出てしまうからです。出力部分のプレビュー画面の球体に灰色の部分があるかと思いますが、これが照明を切ってある場合の色を表しています。

 ということは、この灰色部分を真っ黒にする設定にできれば照明がないときにオブジェクトは真っ黒になってくれるわけです。
 というわけで、次はそのための設定です。

照明がないときにオブジェクトを黒くする

 照明がないときにオブジェクトを真っ黒にするために、まず『カラー』の『ミックスRGB』を選択し『除算』を選びます。次に、『マテリアル』の『カラー』から『ミックスRGB(除算)』の『色1』と『色2』へ線を伸ばします。この時、『係数』を最大値である1.000にしておきます。

 試しに、これを『出力』につなぐと白地の中に真っ黒な部分がある円が表示されます。この黒部分が照明を切った場合のマテリアルの色になります。

 何をしたかをもう少し詳しく解説します。『除算』を使用すると、色と色の割り算を行うことができます。『色と色の割り算』というと要領を得ない言い回しですが、要するに通常の割り算で同じ値同士を割ると必ず数値が1になるように、色と色の割り算でも同じ色同士を割ると数値が1になるのです。数値が1というのは色で言うと真っ白に相当します。『ミックスRGB(除算)』の『色1』と『色2』には同じマテリアルの色を入力しているわけなので、黒以外の部分は1(つまり真っ白)が出力されるわけです。
 一方で『マテリアル』のプレビューを見れば分かるように真っ黒な部分も存在します。真っ黒というのは数値でいうと0に相当します。真っ黒な部分同士の割り算は0÷0なので通常は計算不能(エラー)となります。しかし、Blenderのノードでは0(真っ黒)で割った場合は色1の値が出力される設定のようです。

 さて、次に『ミックスRGB(除算)』で得られた結果と、先ほどのベース色と影の色へと二値化した色を合成するノードを設定します。
 『カラー』内の『ミックスRGB』から『乗算』を選びます。『係数』を最大値である1.000にしておきます。そして以下のように線を伸ばしていきます。

 乗算とは読んで字のごとく掛け算の意味です。どんな値(色)でも白部分(数値が1)をかけてみたところで値は変わりません。つまり色が変わらないことになります。
 一方で、どんな値であろうと黒部分(数値が0)を掛けると答えは0になり、真っ黒になってしまうわけです。
 最後に『ミックスRGB(乗算)』から『出力』へとノードをつなげばノードの設定は完了です。

 試しに、サンランプとヘミランプの両方を切った状態でレンダリングしてみると、確かにオブジェクトが真っ黒になっている(闇に包まれている)ことがわかります。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする