Fallout箱庭DIY

「箱庭DIY」Fallout分室

【Fallout4】カラーパレットの構造調査



スポンサーリンク

一部の武器や防具の色変更に使われているカラーパレットですが、検索してもいまいち構造がよく判らなかった為、自分で調べてみました。例によって情弱なだけだったらマジすいません(汗)

コンバットアーマーでの話になります。

※いつもながら勝手な独自研究なので、間違いがあるかもしれません。あらかじめご了承の上でお願いします。

コンバットアーマーのディフューズマップとカラーパレット

モデルに貼られるディフューズマップと、色を変換するカラーパレットの概要について、まずはじめに載せておきます。

 

コンバットアーマー用ディフューズマップ

胴のディフューズマップ、CombatArmor_Torso_d.ddsです。 実質的に256階調のグレースケール(RGB画像ですけど、便宜的に)と同じだと思います。これがカラーパレットで選択された色に置き換わります。

コンバットアーマー用ディフューズマップ

ポーチ、装甲、ベルト、ボタンの4部位で、グレースケールのレンジが切り離されています。

 

コンバットアーマー用カラーパレット

コンバットアーマー用のカラーパレット、CombatArmor_palette_d.ddsの実寸大です。128x64ピクセルの小さなテクスチャで、これを参照することでディフューズマップの色を変換しています。LUT(Look Up Table)的な使い方ですかね。

コンバットアーマー用カラーパレット

色の基準となるテーブルの為、DXTやBCによる圧縮は避けた方が良いと思います。元々小さいので、30KB程度の節約と引き換えにパレットの色が代表値+計算値になるのはデメリットが大きいかと。バニラは32bit(A8R8G8B8)みたいです。理由は判りませんが、ARGBでないとうまく動いてくれないようです。

 

 

カラーパレットの構造

カラーパレットの構造と見方、マテリアルごとに色が変更される仕組みについて。

 

ディフューズマップとの応答

まず横軸から見ていきます。

カラーパレットの基本構造

128ピクセルが、ディフューズマップのグレースケールに128階調で対応しています。左端の縦列を0(黒)として、右端128個目の縦列が127(白)に相当します。バニラだと128階調ですが、Custom Combat and Synth Armorのように256ピクセル(256階調)にサイズを上げても使えるようです。元のグレースケールに対して単に色相情報を載せるだけでなく、自由に置換え可能みたいです。

 

ディフューズマップで切り離されているレンジ別に、4部位が対応しています。

パーツごとのレンジ分割

つまり、マテリアルごとに横向きに使っていくということになります。

 

色が変更される仕組み

次は縦軸をメインに。

マテリアルごとのパレット

このカラーパレットは1枚で7パターンの色に対応している為、横向きに使うパレットが縦方向に積まれているイメージになります。赤枠内は、それぞれ縦方向は同じ色です。

 

例えばマテリアルを"Shadowed"仕様にすると、下から2番目の赤枠のパレットを使います(Standardは一番下)。

Shadowed仕様のIndex

※便宜上、Line(ピクセル番号に対応した横軸の意)という言葉を使ってますが、僕の造語です(rowとcolumnで説明するのも解りづらいかな、と)。何か適切な単語があれば、置き換えて読んでくださいませ。

 

装甲部だけ比較すると、特に緑系の違いが顕著です。

StandardとShadowedの比較

 

カラーパレットの選択方法

使いたいパレットは、Color Remapping Indexで指定します。このIndexはプラグイン(esm、esp)で設定します。各マテリアルのObject Modificationに項目が有ります。

 

各マテリアルのIndex

実際に使うのは、青線(と赤線)で塗ってある1ピクセル幅のLineのみです。つまり、マテリアルごとに128x1ピクセルで切り出した色を参照しています。 この縦幅1ピクセルのLineの置き場所を、Color Remapping Indexで決めています。

例えばShadowed仕様のパレット領域は、Line48~58の11ピクセル幅です。この中に正しく納まるように、Index値が設定されています。

Indexの設定範囲

このIndexはちょっと面倒で、縦方向の最終ピクセル(この場合は64個目)をIndex=1として、floatで計算されています。

各マテリアルのIndex値はSSに載せてありますので、参考までに。

 

Material SwapsにもIndexが設定項目があるのですが、これは正しく動作しないようです。BoS仕様のみこちらの設定が使われています。残念ながらBoS仕様のコンバットアーマーはIndex0.33が反映されておらず、Line0のパレットを読んでいます。結果として錆色のコンバットアーマーになっており、恐らくこれはバグだと思います。

正しいIndexを反映させると、BoS仕様のパワーアーマーと同じく鋼鉄色になるので、こちらが本来の想定ですかね?

次回の記事で実際に修正します。

 

 

(おまけ)実験用カラーパレット

興味のある人は、このSSを"CombatArmor_palette_d.dds"としてA8R8G8B8で保存して、コンバットアーマーのテクスチャフォルダに入れてみてください。BoS仕様が真っ赤に、それ以外のコンバットアーマーは全部青になると思います。

実験用カラーパレット

この色付きのLine以外を全部黒塗りしても動きます。なので実際は128x7ピクセルのカラーパレットでも、適切にIndexを計算すれば動作すると思います(確認してないですが多分)。

推測ですが、目視確認やIndex計算の利便性の為に、幅を取ってるんですかね?。元々サイズも小さいので、無駄なく納めてもメリット薄そうです。

バニラでは縦64ピクセルですが、Indexの再計算をすればもっと縦に伸ばせます。ただし競合要因になりやすいので(バニラのOMODのIndexを上書きする必要がある為)、伸ばすのはオリジナルのカラーパレットだけにした方がよさそうです。

 

今回はこんな所で終了です。次回に実際の色変更の実験と、BoS仕様のIndexを正しく反映させるパッチ作成を試します。

 続きはこちら。

 

Copyright © 2015 Fallout Hakoniwa DIY All rights reserved .

S.kutsumiya@gmail.com