-
Notifications
You must be signed in to change notification settings - Fork 8
Description
SS6Player for Unityの
- Ver.2.2.6 : 「develop_v2_2_0」ブランチ
- Ver.2.1.25 : 「develop」ブランチ
以降で、Unityプロジェクトの色空間の設定([Project Setting]-[Other]-[Color Space])が「Linear(リニアRGB)」でも、自動判別して「Gamma(sRGB / ガンマ2.2近似)」の色空間の時と同様の描画結果になるように改修しました。
ただし、色を変換している都合上、Linearの時とGammaの時では、描画の結果の色が微細に変化して(微妙に彩度が低下して・グレーに近づく)しまう色の範囲があります。
これは、いくつかの要因の複合となっております。
-
色空間の変換式が近似計算であること。
sRGBは「ガンマ値2.2」と言われることもありますが、厳密には「直線変化」と「ガンマ値2.4の曲線の一部」を組み合わせた複合の計算を用います(大枠は「ガンマ値2.2」と同じような色の変化をしますが、特に輝度が低い範囲で変化の仕方が異なっています)。
ただ現在、SS6PUではシェーダでの計算量を軽減するために「ガンマ値2.2」として扱う近似計算を行っているため、その「近似」の範囲で若干色が変化します。 -
テクスチャのピクセルが半透明である場合の色の変換
テクスチャで一定以上のまとまった範囲が、「半透明」のピクセルになっている場合、テクスチャの作成環境によっては「プリマルチプライド・アルファ(PMA・事前乗算アルファ・コンポジット合成形式……などとも呼ばれます)」でテクスチャが生成されます。
ただし、原則的には画面で合成を行う時には「ストレートアルファ」の計算が用いられることが多く、今回のSS6PUの更新の色の変換計算でも、内部的に「PMAからストレートアルファ」への変換計算を同時に行ってから計算しています。
PMAのテクスチャ上での「色」は、色の成分(RGB)が不透明度(アルファ)で乗算されているために(合成の時に有利に働く場合も少なくないのですが)特にアルファが透明に近づく時に色の成分が劣化(細かな違いが無視される)する特性があります。
そのため、ストレートアルファに再変換した場合でも、失われた色の成分が戻らない場合があり・その「誤差」が描画結果に影響する場合があります。
今後も、状況を見つつ、なるだけ同じ表示になるよう改良していく予定ではありますが、現状は上記のような事情から「微細に色が変化する」場合がありますこと、ご了承下さい。
追伸:
上記以外の要因で、特に「ピクセルの不透明度」がLinearとGammaで見た目に大きく異なって出力される場合があります。
その場合には、一度「テクスチャの格納形式」をチェックしていただけますようお願いいたします。
特に、テクスチャが「CLUTを持つPNG(256色・8bit)」である場合に、(SS6PUが関与できる以外の処理で)色やアルファの変換が正常に行われない場合がございます。
そういう場合には、SpriteStudioのデータの時点から、(8bitなどのCLUTではなく)フルカラー(24bit / 32bit・A8R8G8B8など)のテクスチャを使用して、それをSS6PUでUnityにインポートするようにしていただけますようお願いいたします。