材質の設定値は何が正解なのか?
拡散色・環境色・反射色・Toonマップを正しく設定すれば「MMDでモデルが白飛びする」「影がくすんで不健康に見える」といった問題が解消できる。
正解は基準とするものによって変わってくるが、妥当な基準を設定して根拠を明確にし、トゥーン調にもリアル調にも対応できる一貫した最適解と調整方法を用意した。

本記事の調整後の見た目はこのようになる。
髪以外に陰影の書き込みが全くないモデルなので、ほぼ標準の陰影表現のみ。
設定方針
- 別作者のモデルと並べて違和感がない。
- MMDの初期照明を基準とする。
- テクスチャがそのまま表示される。
- ほぼ白飛びがない。
- できるだけ簡略化する。
提案する設定値
| 設定項目 | 設定値 | 備考 |
| 拡散色 | 1 | テクスチャを100%表示 |
| 環境色 | 0.4 | 照明オフでも浮かない |
| 反射色 | 0.03(白)~0.38(黒) | 下記の「反射色早見表」参照 |
| 反射強度 | 20(肌・髪)/ 50(白目) | 反射光の広がりを見て調整 |
| Toonマップ | HSV S0~30 / V230~245 | 彩度(S)上限12% (30/255) |
拡散色と環境色
期待される見え方
モデルの表示は、「テクスチャの見た目そのままに」、「照明を暗くするとモデルも暗くなる」といったところが期待されるだろう。
「明るくしたときにもモデルが明るくなる」ことも期待するが、これは拡散色の仕様上、テクスチャよりも明るくすることができないので、その部分は反射色に任せることになる。
内部的な色の計算
テクスチャは拡散色と環境色の合計に応じた明るさになる。
テクスチャをそのまま100%の明るさで表示するには、合計を1にする必要がある。
ただし、拡散色は照明の影響を受ける。
MMDの最高照明である255が100%、初期状態は154/255で約60%という数値が内部計算に使われており、これを拡散色に乗算する。
まずは環境色から決める必要がある。
環境色は照明を消したときの明るさを決めているが、これが高すぎると明かりを消しても光って見えてしまう。
上の動画では徐々に照明を暗くしているだけだが、モデルによって明るさの下がり方が違う。
本来は他多数のモデルと合わせたいところだが、ここでは少数派の0.4を提案する。
合計を1にするには0.6いるので、0.6/60%=1となり、これを拡散色に適用すればいい。
1と0.4という数値はわかりやすい上に、陰影表現を最大限利用できる値となっているので申し分ない設定値と言える。
通常はテクスチャの色が正しいと考えるので、特別な理由がない限り彩度は不要。
影の色味を変えたいときはToonマップで対応するのがおすすめ。
他の設定値にした場合の問題
多数派の「拡散色1、環境色0.5」だと、合計1を超えるので照明を下げてもすぐ暗くなり始めない。
「拡散色0.8、環境色0.5」だと合計1にわずかに足りず、くすんでしまう。
どちらも明暗の差が小さいので表現の幅が制限される。
反射強度
反射強度に明確な基準というのはなく、見た目だけで判断する必要がある。
調整するときは一時的に反射色を一律0.38など高めにしておくとわかりやすい。
なので反射色よりも先にこちらを設定するのがおすすめ。
あまり白飛びしない程度の角度で確認しながら調整するが、ここで重要なのが「明るさを見る」のではなく「反射光の広がりの自然さ」で判断すること。
例えば足に反射したテカリが自然に見えるように調整すればいい。


個人差もあるので決まった数値はないが、理想的な反射の広がりに見えればそれが正解。
髪は特殊なので判断が難しいが、低すぎて全体がぼやっと光るよりも、強めの値から違和感がない程度に絞っていくのがおすすめ。
白目が皿状になっているなど、反射があると不自然になる材質は反射色のほうを0にして反射を完全になくす。
反射色
金属でない限りは反射色に彩度は不要。
そもそも反射色で金属表現はできないと思われる。
反射色の明るさを一定にするのは難しい
ここでいう反射は照明の鏡面反射であり、身の回りのものはどの物質でも反射率が4%前後あるので一律4%を適用することを考える。
MMDではテクスチャに反射色が加算されるが、それは光の計算方法になっておらず、一定の数値を入れても4%相当にならない。
参考に見え方を次の画像で比較する。



髪、顔、スカート、靴のテカリがついているのがわかる。
靴はツルツルに設定しているが、反射色が一律だと顔のテカリに対して控え目に見えてしまう。
なので面倒だがテクスチャの輝度によって数値を変えなければならない。
算出方法の概要としては、リニア色空間でテクスチャに4%足して、ガンマ色空間でその4%分だけ抜き出して、さらに照明100%に増幅するというもの。
その結果、テクスチャが真っ黒なら0.38、真っ白なら0.03と算出される。
テクスチャの明るさに応じた設定値の一覧を次に示しておく。
反射色早見表
| テクスチャ明るさ | 反射色 |
| 1 | 0.03 |
| 0.9 | 0.03 |
| 0.8 | 0.04 |
| 0.7 | 0.05 |
| 0.6 | 0.05 |
| 0.5 | 0.07 |
| 0.4 | 0.08 |
| 0.3 | 0.11 |
| 0.2 | 0.16 |
| 0.1 | 0.24 |
| 0 | 0.38 |
テクスチャが真っ黒なら0、真っ白なら1とした明るさで11段階に分けている。
計算はかなり面倒なので、テクスチャの明るさはだいたいの見た目で判断していい。
MMD標準では最大輝度が白=1なので、白飛びを防ぐことも含めるとあまり「ギラギラ反射させるような表現」ができない。
やりたい場合はエフェクトを使う必要がある。
参考までに反射色の計算式を示しておく。
テクスチャ輝度 = R * 0.299 + G * 0.587 + B * 0.114
((テクスチャ輝度 ^ 2.2 + 0.04) ^ (1 / 2.2) – テクスチャ輝度) / 初期照明0.6
拡散色などは本記事の推奨値であれば結果に影響しないため省いてある。
Toonマップ
作り方と色の決定方法
「セルフ影」をオフにしない限りToonマップは一色塗りつぶしでも問題はない。
が、一般的には32×32のbmpファイルで上半分が白、下半分に目的の色をつける。
どうやって色を決めるかについては、こちらもやはり他のモデルとの統一感が重要になる。
だいたい輝度にして90%前後が使われていることが多いので、輝度90%を目指す。
単に90%グレーにすると色あせて見える。
その比較画像を次に示す。


色あせを回避するにはテクスチャのメインの色を使う。
白を輝度100%とすると、色味によっても輝度が違い、完全に彩度を保って輝度90%にするということはできない。
つまり輝度と彩度のどちらをどれだけ犠牲にするかのバランスをとる必要がある。


右の画像は先ほどの調整後のものと同じ画像。
比較しなければ左の画像でも問題ないが、右側が「最低でもこのくらいほしいよね」という値になっている。
計算方法
輝度を86~92%に収まるようにする。
逆算ができないため近似値の算出までとした。
中央値が89%だが、最も違和感の出やすい肌色を90%に合わせた。
設定値は筆者の画像編集ソフトの表記に合わせて0~255に変換する。
また輝度は「明度」と表記する。
テクスチャのメインの色をスポイトを使って数値化して使用する。
概要としては、彩度が上がるに従って明度を上げ、明度を230~245に収めるというもの。
彩度が0なら明度は230にする。
彩度が30以上の場合は彩度を30に抑え、明度を245にする。
だいたい上記どちらかに当てはまるが、彩度が1~29の場合は次の計算式に当てはめる。
計算式:明度=230+彩度÷2

おもしろい仕様
おもしろい仕様になっているので少し紹介する。
そこまで重要ではないのでさらっと流すだけでOK

上の動画はテクスチャのないモデルを使い、4色Toonマップを適用して照明0からMAXまで上げていったときの様子。
画面右上のモデル前方から照明が当たっているが、照明の当たる範囲とToonマップの使われる場所が対応しており、照明の強さなどには関係なく配色が固定されてしまうことがわかる。
ただし、これは「セルフ影」をオフにしており、「影を受けません」という設定の場合。
次は「セルフ影」をオンにしただけで他は何も変えていない。
前と同じToonマップを使っているが、暗い部分にToonマップの一番下の赤色だけが使われ、青緑黄は、照明の当たる側は自動的に白が反映される仕様になっている。
ここでもやはり陰影のバランスが変わっていない。
一見問題ないように見えるが、これは「照明が0なのに右上から照明が当たっているように見え、陰影がくっきりしている」不自然な描写である。
「そんなToonマップなんていらない」と思ってしまうが、これがないとどうやっても影ができない。
なので何か設定するしか道がない。
そして恐ろしいことに、ここまでの検証からMMDのソフト側ではなく「Toonマップが影の強さを完全に支配している」ことが浮き彫りになる。
かなり重要な位置づけとなっている。
終わりに
面倒な計算になってしまうので、参考にしてだいたいの値を入れるのでもいい。
それでも遜色ない結果になると思う。
コメント