PMXのスフィアマップとトゥーン|乗算・加算の決まり方と共有トゥーン
髪のつやや金属の光り方はスフィアマップ、肌の影の付き方はトゥーンが受け持っています。どちらもPMXの材質ごとに指定があり、three.jsのMMDLoaderはその大半を読んでいます。
スフィアの合成方法は4通り
| 値 | 合成 | three.jsのMMDLoader |
|---|---|---|
| 0 | 使わない | — |
| 1 | 乗算(テクスチャの色に掛ける) | 当てる |
| 2 | 加算(テクスチャの色に足す。つや・光沢) | 当てる |
| 3 | サブテクスチャ | 当てない(TODO のまま) |
PMXでは、合成方法を材質の指定(この値)で決めます。 PMD(古い形式)は指定を持たないので、ファイルの拡張子で決めます(.sph なら乗算、.spa なら加算)。three.jsのMMDLoaderも、PMXでは値を、PMDでは拡張子を見ています。
実物での使われ方
| モデル | 材質 | 使わない | 乗算 | 加算 | サブテクスチャ |
|---|---|---|---|---|---|
| 人物A(ad_ik2) | 53 | 13 | 4 | 36 | 0 |
| アリシア | 22 | 11 | 0 | 11 | 0 |
| ステージ | 23 | 0 | 23 | 0 | 0 |
スフィアの画像ファイルは .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) | 0 | 40 | 13 |
| アリシア | 9(toon01が1・toon04が2・toon05が6) | 0 | 13 |
| ステージ | 16(toon01が14・toon04が2) | 0 | 7 |
three.jsのMMDLoaderは、共有トゥーンの画像を自分の中に持っています(toon00 〜 toon10 を埋め込みの画像として同梱)。そのためモデルのフォルダに toon01.bmp などが無くても読めます。指定なしの材質には toon00 を使います。個別トゥーンは、テクスチャと同じくモデルのフォルダから読むので、ファイルが欠けていると読み込めません(テクスチャが表示されないとき)。