PMXのスフィアマップとトゥーン|乗算・加算の決まり方と共有トゥーン

髪のつやや金属の光り方はスフィアマップ、肌の影の付き方はトゥーンが受け持っています。どちらもPMXの材質ごとに指定があり、three.jsのMMDLoaderはその大半を読んでいます。

最終更新: 2026-10-06 · 実PMX 3体とステージ1つの材質のスフィア・トゥーンの指定を three.js 同梱のパーサで読んで数え、MMDLoader(r171)のソースで扱いを確認

スフィアの合成方法は4通り

値合成three.jsのMMDLoader
0使わない—
1乗算(テクスチャの色に掛ける)当てる
2加算(テクスチャの色に足す。つや・光沢)当てる
3サブテクスチャ当てない(TODO のまま)

PMXでは、合成方法を材質の指定(この値)で決めます。 PMD(古い形式)は指定を持たないので、ファイルの拡張子で決めます(.sph なら乗算、.spa なら加算)。three.jsのMMDLoaderも、PMXでは値を、PMDでは拡張子を見ています。

実物での使われ方

モデル材質使わない乗算加算サブテクスチャ
人物A(ad_ik2)53134360
アリシア22110110
ステージ2302300

スフィアの画像ファイルは .sph / .spa とは限りません。 人物Aは Sphere\skin_s.png のようなPNG、アリシアは Sphere\hair_s.bmp のようなBMPを、拡張子を変えずに使っていました。.sph を使っていたのはステージだけです。PMXでは合成方法を値で決めるので、拡張子が .png でも加算として働きます。

人物Aでは、肌・服・髪の多くが加算(つや)でした。乗算の指定は4材質で、そのうち画像まで指定してあるのはニーソの2材質です。ステージは23材質すべてが乗算の指定でしたが、画像まで指定してあるのは3材質(tex\metal.sph)だけで、残りの20材質は指定だけがあって効いていません。サブテクスチャは、どのモデルにもありませんでした。

トゥーンは「共有」と「個別」

トゥーンは、光の当たり方に応じた影の色を決める小さな画像です。MMDに内蔵されている10枚(toon01.bmp 〜 toon10.bmp)から選ぶ共有トゥーンと、モデルが自分で持つ画像を使う個別トゥーンがあります。

モデル共有トゥーン個別トゥーン指定なし
人物A(ad_ik2)04013
アリシア9(toon01が1・toon04が2・toon05が6)013
ステージ16(toon01が14・toon04が2)07

three.jsのMMDLoaderは、共有トゥーンの画像を自分の中に持っています(toon00 〜 toon10 を埋め込みの画像として同梱)。そのためモデルのフォルダに toon01.bmp などが無くても読めます。指定なしの材質には toon00 を使います。個別トゥーンは、テクスチャと同じくモデルのフォルダから読むので、ファイルが欠けていると読み込めません(テクスチャが表示されないとき)。