TOP‎ > ‎Blender LAB‎ > ‎

考察編 02: 新トゥーンマテリアルの設定と、アニメ表現における陰色の決定要因のお話。

まずは以前書いたこちらの記事のおさらい。 もう3年前とか。。。 




オブジェクトは細分割曲面(Subdivision Surface)モディファイアをかけてスムーズ(Smooth)をかけとくのが理想。

マテリアルはディフューズでタイプを「トゥーン」に切り替え、「強度」を低め(0.3~0.5)に、「サイズ」を大きめ(1.4以上)に、「スムーズ」を低め(0.05以下)に。


あとはスペキュラータブの「強度」を0にしてシェーディングタブの「放射」を高め(0.7~0.9)にして、それ以外はデフォルトのまま。



ツヤ、テカリ有りな材質の場合はスペキュラータブの「強度」を上げてタイプを「トゥーン」にして「スムーズ」を0.05以下に、サイズはお好みで。



というのが前回のトゥーンマテリアルだったんだよね。
更にコンポジットノードでAOを二値化して乗算合成して、Zマップとノーマルマップを輪郭抽出したものでエッジを上乗せ。

ただ、この方法の弱点は陰色を任意に指定できないところと、影、AOの乗算によって影が二段階になってしまっている所。
あと、エッジの太さを動的に変えられない所。



まず一つ目の「陰色を自由に変えられない」というのは別にこの方法特有の弱点ではなく、Blenderそのものの弱点と言ってもいいかもしれない。。

そもそも陰の部分の色というのはディフューズで設定した色に「放射」の強さで明るさを足したもので、そこにさらにディフューズの「強さ」で明るさを足したものが光が当たっている部分の色、という感じなので陰色を直接指定できる方がおかしいんだよ!
でもBlender以外のハイエンド3Dソフトは直接陰色指定出来るものが結構多くて、他ソフトからBlenderに入ってきたひとには「陰色指定出来ないの?」って聞かれることがしばしば。。。

そんなわけで今回は直接陰色を指定するのと、影が二段階になってしまうのを同時に解決するマテリアルノードをご紹介するよ。


とその前に、なぜ陰色を直接指定する必要があるのかというお話。


通常、陰色をどんな色にしようか決定しようとした時、地色から明度、彩度を落とせばいいんじゃないの?と思うかもしれないけど、様々な要因によってそうとは限らないケースが多く、特にキャラクターの命とも言える肌、髪なんかはすごく特徴的。

例えば肌は、完全な不透明ではなく実はほんの少し光を透過する性質を持っていて、一旦光が肌の内部に侵入し拡散して外に出てくるために内部の色(血液の赤)が浮き上がって見えてくるという表面下散乱(サブサーフェイス・スキャタリング)現象が起こっていたり、髪の毛も完全な固体ではなく光が侵入する隙間があるために似たような現象が起こり、更に髪の毛一本一本が透過率を持っている茶髪、金髪ではもっと複雑。

↑Subsurface Scatteringによる赤み。


さらに光の反射によって反射した材質の色が反射の先に色移りする間接光の性質も考慮する必用があるよね。

↑Indirect Lightingによる色移り。

Blenderではそれぞれの現象をシミュレートする機能は備わっているものの、それらはフォトリアリスティックなCGを実現するたの機能なのでトゥーンとは相性が悪く、処理も重いためにリミテッドアニメーションとも相性が悪いのです。。。

これら物理学的な要因に加え、色陰現象と呼ばれる心理的効果を考慮した演出的な事情も加えて、アニメの陰色というのは決定されているんだよ(そこまでめんどくさく考えてないかもしれないけど)。

色陰現象についてはこちらがとてもわかりやすいのでおすすめ!


というわけで現状、トゥーンの陰色はデザイナーが直接手作業で指定していく、というのが最適解だと思うのさー。




ではそのトゥーンマテリアルの作り方。












まずはディフューズの色を真っ白にしてタイプをトゥーンに。
「強度」を1にして「サイズ」、「スムーズ」は最初にご紹介したマテリアルと同じような設定の1.4以上、0.05以下。





スペキュラーは「強度」0にして、






シェーディングタブの「放射」は0に(つまりデフォルトのまま)。







レンダリング結果がこんな感じになればおっけー!
光が当たっている部分が真っ白、当たっていない部分が真っ黒に。



















「光が当たっている部分が真っ白」をライトの距離にかかわらず保証するために、ライトの設定で「減衰」を「一定」にしておくのがベストだよ。










さて、今作ったマテリアルは適当に「Toon」という名前にでもして、それとは別に新しくマテリアルを作成。こっちの方は「skin」って名前にしたよ。
この「skin」の方をオブジェクトのメッシュに「適用」しておいて、ノードを有効にするボタンをぽちっと。









ワールド設定でアンビエントオクルージョンの設定。

「アンビエントオクルージョン(AO)」にチェックを入れてギャザータブの「サンプル」数を上げておくよ。
上げれば上げるほどノイズは減るけど負荷がマッハ。
「減衰」のあたりの設定も合わせてまぁこのあたりはリアル志向レンダリングでのAO設定と考え方は変わんないよ~











そしてノードエディタで「skin」のマテリアルノードを編集。
「拡張マテリアル」ノードを追加して、ここには上で作成した白黒のマテリアル「Toon」を選択入力。
「カラーランプ」ノードと「ミックスRGB(乗算)」ノードを追加して、「拡張マテリアル」ノードの「AO」端子からは「カラーランプ」へ繋いでその「カラー」出力と「ディフューズ」端子からの出力を「乗算」で合成し、「出力」ノードへ。
「乗算」ノードの「係数」は1にしておいて、カラーランプはバーを操作して真ん中辺りで白黒の二値に近くなるように調整しておくよ。










その状態でレンダリングしてみて、こんな感じにできればおっけ~。
影(Shadow)と陰(Shade)とカラーランプにより二値化されたAOの影が同じ濃さ(っていうか真っ黒)で塗りつぶされた状態。
AO影の境界線はちょっとギザギザになっちゃってるけど、これはAO設定のサンプリング数を上げるとなんとかなるよなならないような。

















そして新たに「ミックスRGB」ノードを追加して、「乗算」ノードの出力から「ミックスRGB」ノードの「係数」へ繋ぎ、「色1」へは陰色にしたい色、「色2」には地色にしたい色を入力して「出力」ノードへ繋ぎレンダリング!













で、こうなる!



なにが起こっているかわかるかな?
最初に作成した白黒のマテリアルをマスクとして使用し、そのマスクの黒い部分は「色1」の色、白い部分は「色2」の色にしなさい、というノードになっているんだよ。

意外と単純! 5個しかノード使ってない!







んで、そのノードの「カラーランプ」と「乗算」を選択してCtrl+Gでグループ化してしまいましょー(グループ化後Tabキーで小さく)。
このグループノードにも「Toon」って名前をつけておいたよ。








そうすると何が良いのかというと、別のマテリアルを作った時にこのトゥーン設定が流用できるのです。









カサの部分の茶色い方のオブジェクトにもマテリアルを作成するとき、「skin」と同じようにマテリアルノードを有効にして「拡張マテリアル」ノードを追加した後は、「Toon」と名前を付けたグループノードを呼び出してそこへ「ディフューズ」と「AO」の端子から繋げ、グループノードの出力からまた同じように「ミックスRGB」ノードの「係数」へ繋いで茶色い部分の陰色、地色を入力して「出力」ノードへ。
上記の「skin」ノードと違う部分は「ミックスRGB」ノードの色のところだけ。
















こうして「拡張マテリアル」の参照元となるマテリアルと、AOの二値化設定のグループノードを共有することで、すべてのマテリアルの「影の広さ」を横断的に同時に調節することができるのだ!

















さらに陰色、地色を設定した部分には端子が付いているのでこんな感じに外部マテリアルから色を入力するようにノードを設定しておけば、













例えばこのように別レイヤーかどこかにキャラ設定画面を用意しておき、色表示パネルのマテリアルと上記ノードの色入力用のマテリアルを一致させておけば、このキャラ設定画面だけを見て色指定をまとめて行うことが出来たり。


分業で色指定を専門に行う人が居たりした場合、その人はノード画面を一切見ずに色設定だけに専念することが出来ちゃうというわけ。


.blendファイルは↓からダウンロード。使用バージョンは2.68a。
長くなっちゃったのでFreeStyleについてはまた次回
ċ
S02_NewToon.blend
(712k)
Tomo asks,
2013/08/05 4:16