複数のtoon.bmpを適用した出力画像の重ね合わせによる陰影の重層化その1〜序・トゥーンの仕組み

はじめに

http://gyazo.com/f7fda233071ee5b7ff4f7774adadd7f3.png]
MikuMikuDanceスターターパックでも解説した、「白色モデルにさまざまなtoon.bmpをかけ合わせた動画を複数出力して合成し陰影を重層化する加工」の解説をします。
この技術を活かした動画の構想はあるのですが、どうもやる気が出ない制作が滞っていて完成の目処が立たないので、先に技術紹介だけやってしまいます。正直俺以外にだれがこんなのやるんだって感じがしますがまあ一種のバカテクギャグということで…。

  • 資料

http://www.mediafire.com/?66i5ixhubte71u0
資料としてモデルデータ、NiVEのプロジェクトファイルをアップしておきます。参考にするなり応用して使うなりはご自由に。(メディアファイアーは広告がうざいですが、上げる側としては管理が楽なので…)

MMDのシェーダー・セルフシャドウとはどういうものか

標準のミクモデルの材質を単一のtoon.bmpで設定
http://gyazo.com/9f45880dd42cba1469fef57c4cee7b53.png


左からMMDデフォで使われている一段階トゥーン。それのセルフシャドウオン。
上から下への単純なグラデーション。中央付近が一番濃くなるような両サイドグラデーション。
toon.bmpは円筒を横倒しにしたような感じで、上から光源に対してポリゴンが表向きに平行、一番下が光源に対して裏向きに平行、というように適用されるとイメージしてみてください。
グラデーション状にすると、微妙な凹凸が陰影に反映されて立体感が強調されます。中央部が濃くなるようなグラデーションはななみさんモデルなどで使われていたりします。以前toon.bmpグラデーション化の新たな方法 - えむえむでえで紹介したテクです。


【MMD】セルフシャドウ説明‐ニコニコ動画(9)
【MMD】セルフシャドウ説明 - ニコニコ動画
セルフシャドウについては「左下1ピクセルのみがトゥーン色として使われる」と説明されていますが、これは「セルフシャドウモードでは左下1ピクセルのみでシェードが決定され、それ以外の部分は無視される」ということです。極端に言うと、toon.bmpが1*1の解像度でも1000*1000の解像度でも同じ結果が出ます。
※toon.bmpの解像度についてはtoon.bmpの話 - えむえむでえを参照。解像度で補間の差が出ます。

MMDレンダリングは材質に対してtoon.bmpを乗算して表示される

http://gyazo.com/dce1ff24d29368365dddaf326ef81702.png
http://gyazo.com/d3af82506f2cb93eb1b648ecb3322554.png
MMDのトゥーンは元材質の発色にtoon.bmpを乗算した結果です。
左は全面白トゥーンで陰影が出ていません、右は全面黒を適用して真っ黒に塗りつぶされています(ただしspecularの光沢は出ています)。

toonの仕組みを単純なオブジェクトに適用

http://gyazo.com/5ea59538b4f86864233d2f9a4c6d8de4.png


球にトゥーンを適用したものです。上の■はセルフシャドウを落とすため。
セルフシャドウは色の推移する範囲が案外広く、また光源側にやや食い込んでいるのがわかると思います。
Mによると、これはセルフシャドウの精度に絡んで陰影が汚くなるのを防ぐためにこうなったそうです。

なぜシェーダをコントロールしたくなったか

自分の動画を見てもらうとわかりますが、もともと階調のハッキリしたトゥーンレンダがあまり好きではなくグラデーションタイプのtoonを多用していました。

セルフシャドウモードが実装されたときは感動しましたが、

  • 陰影の調子がMMDの設定で一様に決まってしまう
  • 落ち影の精度にどうしても限界がある

という点がどうしてもクリアしたくなり、工夫してみたという感じです。