Skip to content

v2.1.25 / v2.2.6 Linear色空間での描画で色がくすむ場合がある #100

Description

@MasamiYitsuse

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にインポートするようにしていただけますようお願いいたします。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions