three.jsでMMDモデルの色が浅くなる原因はトーンマッピング|7種類を実物で比べた
トーンマッピングは、明るすぎる色を画面に収まるように圧縮する処理です。写実的な3DCGでは定番ですが、MMDのトゥーン調のモデルに掛けると色が浅くなります。このサイトでも、ACESを既定で掛けていた2週間ほど「以前よりぼんやりして彩度が低い」と指摘を受けました。7種類を同じ条件で比べた結果をまとめます。
結論
- MMDモデルの色をそのまま見せたいなら、トーンマッピングは掛けない(three.js の既定の
NoToneMappingのまま)。 - ACES・AgX・Cineon・Reinhardは、どれも彩度とコントラストを落とす。 白い衣装のモデルでは、ACESで彩度が47%下がった。
- 明るいところの白飛びだけを抑えたいなら、Neutral が使える。 彩度はほぼ保ったまま、真っ白に張り付く画素が無くなった。
測り方
白い衣装が多いアリシアと、暗い衣装が多い初音ミク系のモデルを、正面から同じ大きさで描きました。照明は環境光1.2・平行光1.4、露出(toneMappingExposure)は1.0で、変えたのは renderer.toneMapping だけです。描いた画面から背景以外の画素を取り出し、次の4つを数えました。
- 明るさ: 画素の輝度の平均(0〜255)
- コントラスト: 輝度の標準偏差。大きいほど明暗の差がはっきりしている
- 彩度: HSVの彩度(S)の平均。0は灰色
- 白飛び: R・G・Bがすべて250以上の画素の割合
白い衣装のモデル(アリシア)
| トーンマッピング | 明るさ | コントラスト | 彩度 | 白飛び |
|---|---|---|---|---|
| なし(NoToneMapping) | 200.3 | 48.8 | 0.133 | 7.5% |
| Linear | 200.3 | 48.8 | 0.133 | 7.5% |
| Neutral | 190.8 | 45.8 | 0.143 | 0% |
| ACESFilmic | 195.8 | 39.6 | 0.071 | 0% |
| Cineon | 186.6 | 36.9 | 0.076 | 0% |
| AgX | 174.7 | 33.8 | 0.072 | 0% |
| Reinhard | 158.6 | 32.2 | 0.090 | 0% |
ACESは明るさをほとんど変えずに、彩度を0.133から0.071へ47%落としました。水色のニーソックスや金髪が灰色寄りになり、全体が白っぽく霞んで見えます。AgX・Cineonも同じくらい彩度が落ち、Reinhardは全体が暗くなりました。
暗い衣装のモデル(初音ミク系)
| トーンマッピング | 明るさ | コントラスト | 彩度 |
|---|---|---|---|
| なし(NoToneMapping) | 125.9 | 52.6 | 0.191 |
| Linear | 126.0 | 52.5 | 0.192 |
| Neutral | 114.9 | 56.6 | 0.248 |
| ACESFilmic | 130.3 | 55.2 | 0.164 |
| Cineon | 128.2 | 49.4 | 0.175 |
| AgX | 125.7 | 42.3 | 0.131 |
| Reinhard | 110.1 | 38.5 | 0.158 |
こちらは白飛びがもともと無く(どの方式でも0%)、ACESの彩度の落ち方は14%でした。落ち方はモデルの色によって大きく違い、明るい色が多いモデルほど大きく落ちます。 暗いモデルだけで試すと、影響を小さく見積もってしまいます。
Neutral は、このモデルでは逆に彩度が0.191から0.248へ上がり、髪の青緑が濃く出ました。白飛びを抑えたいときの候補ですが、元の色と同じになるわけではありません。
なぜMMDモデルでは色が浅くなるのか
トーンマッピングは、写実的な照明で生まれる「1を大きく超える明るさ」を、画面に表示できる範囲へ滑らかに収めるためのものです。今回の測定でも、明るい色の多いアリシアのほうが、ACES・AgX・Cineonで彩度が大きく落ちました。
MMDのモデルは、材質の色とトゥーンのテクスチャで、画面に出したい色そのものを作っています。three.js の MMDLoader も、PMXの拡散色をsRGBの色としてそのまま材質へ入れます。そこへ「明るい色を白へ寄せる」処理を重ねると、作者が付けた色が浅くなります。とくに白や淡い色の衣装は、もともと明るさの上限近くにあるので、影響を大きく受けます。
一方、トーンマッピング無しでは、アリシアの画素の7.5%が真っ白に張り付きました。白い衣装の陰影が飛んでいるところがあるということです。この白飛びを抑えつつ彩度を保てたのは、7種類のうち Neutral だけでした。
このサイトで起きたこと
このサイトは2026年9月22日から10月8日まで、「高画質ライティング」として ACES・弱い環境光・暖色の平行光を既定にしていました。アリシアの正面で彩度が0.134から0.078に、コントラストが48.5から36.3に下がっていて、「以前よりぼんやりして彩度が低い」という指摘で気づきました。いまは既定をトーンマッピング無しに戻しています。
再生画面の「明るさ」を1.0以外にしたときだけ、明るさを調整するために ACES を使います。色をそのまま見たいときは、明るさを1.0のままにしてください。
見た目に効く設定を変えるときは、変える前と同じ条件で描いて画素で比べてください。 1つのモデルを目で見るだけでは、色が浅くなったことに気づけませんでした。白い衣装と暗い衣装のように、色の傾向が違うモデルを2体以上並べると、影響の大きさを見誤りにくくなります。