【MMD備忘録】ray-mmdでトゥーン調 ~マテリアル編~

元記事:https://archive.md/v2Jgy

作成者:azolt様

ニコニコユーザーページ:https://www.nicovideo.jp/user/12006246

作成日:2019-03-17 15:34


おはこにゃばちにんこ。

 前回は導入編ということで、ray-mmdの導入とモデルにtoonマテリアルを割り当てるところまで解説しました。今回は実際にマテリアルのパラメータをいじっていきたいと思います。


 ※本記事ではRadicalC氏配布のtoonマテリアルを使って解説していきますので、まだの方はリンク先より入手してください。Toon_RC


ray-mmd-1.5.2\Materials\material_2.0.fx


 前回最後から少し戻って、ray-mmdとモデルを導入したところです(あと気分でPostAlphaEyeを入れてます)。明るさは調整してます。ここからToon_RCのtoon.fxマテリアルをモデルに適用します。


ray-mmd-1.5.2\Materials\Toon_RC\Toon.fx


 はい、toon調になりました。ただこのままだと残念な感じなので色々調整していきましょう。


◆CUSTOM_ENABLE









https://github.com/gaj-cg/ray-mmd-docs-ja


 シェーディングの種類を設定します。これにより、後に解説するcutomA, customBという変数の役割が変わります。

 ray-mmdにおいてtoonシェーディングとされているのは8と9です。Toon_RCにおいてはToon.fxが8。Toon_Soft.fxが9に該当します。




左:CUSTOM_ENABLE=8;右:CUSTOM_ENABLE=9;


◆customA

 影の量を決めます。値は0.0~1.0で小さい値ほど影は減ります。CUSTOM_ENABLE=8であれば0.0で影は完全になくなります。CUSTOM_ENABLE=8以外では、0.0にしても影はなくなりません。

CUSTOM_ENABLE=8;, customA=0.0;


◆customB

 影の色を決めます。Toon.fxではfloat3(0.1, 0.1, 0.1)のように定義されているかと思います。()の中の値はそれぞれRGBに該当します。黒はRGB=(0, 0 , 0)。白はRGB=(1, 1, 1)なので、初期設定はだいぶ暗い影になっているということですね。これをいじってみると以下のようになります。

const float3 customB = float3(0.9, 0.1, 0.1);


const float3 customB = float3(0.5, 0.5, 0.5);


◆ALBEDO

 材質の色を決めます。細かいことは他のサイトに譲るとして、とりあえず以下のように設定してください。

 #define ALBEDO_MAP_FROM 3

 #define ALBEDO_MAP_UV_FLIP 0

 #define ALBEDO_MAP_APPLY_SCALE 1 ←デフォルトは0

 #define ALBEDO_MAP_APPLY_DIFFUSE 1

 #define ALBEDO_MAP_APPLY_MORPH_COLOR 0

 const float3 albedoという変数で色の設定をします。customBと同じくfloat3(r,g,b)形式で設定します。


const float3 albedo = float3(0.9, 0.1, 0.1);


◆NORMAL_MAP

 法線をいじるやつです。質感がだいぶ変わります。Toon_RCにセーターっぽい質感のマテリアルが用意されているので、試しに適用してみましょう。

ray-mmd-1.5.2\Materials\Toon_RC\Toon_SweaterA.fx

 #define NORMAL_MAP_FROM 1 ←1で有効

 #define NORMAL_MAP_TYPE 0

 #define NORMAL_MAP_UV_FLIP 0

 #define NORMAL_MAP_FILE "./Tex/S1.png" ←参照ノーマルマップ


 ノーマルマップは自分で用意しなくても、ray-mmd-1.5.2\Materials\Skinなどに置いてあったりするので好みで使用してみると良いでしょう。

◆SMOOTHNESS

 ツヤがでます。const float smoothnessに0.0~1.0の値を入れましょう。下記画像では、腕の部分にツヤが出ているのがわかると思います。

左:const float smoothness = 0.0; 右:const float smoothness = 0.5;


◆EMISSIVE

 光ります。正確には、発光色になるだけで実際には光っていないようです。なのでライトには使えません。const float3 emissiveが発光色の明るさ。const float3 emissiveBlinkが点滅です。下画像では、目のハイライト・首のチョーカー・髪飾りに適用しています。

 #define EMISSIVE_ENABLE 1    ←発光ON:1 発光OFF:0

 #define EMISSIVE_MAP_FROM 3  ←3推奨。材質の元の色で発光する。

 #define EMISSIVE_MAP_UV_FLIP 0

 #define EMISSIVE_MAP_APPLY_SCALE 1

 #define EMISSIVE_MAP_APPLY_MORPH_COLOR 0

 #define EMISSIVE_MAP_APPLY_MORPH_INTENSITY 0

 #define EMISSIVE_MAP_APPLY_BLINK 0 ←1で点滅が有効。

 #define EMISSIVE_MAP_FILE "emissive.png"

◆まとめ

 こんなところでしょうか。他にもパラメータはありますが、私も手探りで学んでる最中なのでこれ以上は割愛します。今回紹介した知識があれば、ray-mmdだけで下記画像のような、toonに若干リアル調が混じったような質感が得ることも可能です。

 いわゆる「アニメ調」と言われるような、かっちりしたトゥーンを目指すのであれば、わざわざray-mmdでtoon調をやるメリットはないように思います。加えて、LocalShadowに対応してないので嘘影が出来ません(もし出来るなら教えて。あと、いずれは対応してくれるかも)。

 私なんかは、イラストを描くような感覚で自由に質感を作れるので気に入ってますが、そもそもray-mmdでやりたかったのはZookin氏や2mk氏の作る質感なのでtoonに拘っているわけではありません。


◆神質感の動画たち・・・



◆おまけ

 頑張ってパラメータ調整しまくったやつのスクショ。ツヤ感とかを自在に出せるのが楽しいです。



以上です。感想・質問などお待ちしております。

コメント