three.jsでMMDモデルの色が浅くなる原因はトーンマッピング|7種類を実物で比べた

トーンマッピングは、明るすぎる色を画面に収まるように圧縮する処理です。写実的な3DCGでは定番ですが、MMDのトゥーン調のモデルに掛けると色が浅くなります。このサイトでも、ACESを既定で掛けていた2週間ほど「以前よりぼんやりして彩度が低い」と指摘を受けました。7種類を同じ条件で比べた結果をまとめます。

最終更新: 2026-10-08 · 実PMX 2体(アリシア・初音ミク系)を、このサイトの再生(three.js r171 の MMDLoader)で同じ照明・同じカメラのまま描き、トーンマッピングだけを切り替えて canvas の画素を数えた(露出は1.0)

結論

  • 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.348.80.1337.5%
Linear200.348.80.1337.5%
Neutral190.845.80.1430%
ACESFilmic195.839.60.0710%
Cineon186.636.90.0760%
AgX174.733.80.0720%
Reinhard158.632.20.0900%

ACESは明るさをほとんど変えずに、彩度を0.133から0.071へ47%落としました。水色のニーソックスや金髪が灰色寄りになり、全体が白っぽく霞んで見えます。AgX・Cineonも同じくらい彩度が落ち、Reinhardは全体が暗くなりました。

暗い衣装のモデル(初音ミク系)

トーンマッピング明るさコントラスト彩度
なし(NoToneMapping)125.952.60.191
Linear126.052.50.192
Neutral114.956.60.248
ACESFilmic130.355.20.164
Cineon128.249.40.175
AgX125.742.30.131
Reinhard110.138.50.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体以上並べると、影響の大きさを見誤りにくくなります。