UnityのLinear色空間のサポート

こんにちは。企業でCubism SDK for Unityを使わせていただいている者です。

UnityにてCubism SDKを使用する際、色空間をLinearにすると、CubismModelの加算合成や半透明部分などの色がCubism Editor上と異なることに気が付きました。おそらくSDKのシェーダーがGamma色空間にしか対応していないことが原因と思われます。

私はLive2Dと3Dモデルを両方使用するUnityのアプリケーションを開発しておりまして、3Dモデルで正しい描画結果を得るためにはLinear色空間にする必要があります。

Unityにより開発されたアプリでは今後もLinear色空間の活用場面が増えると思われますが、Cubism SDK for UnityはLinear色空間に対応されるご予定はございますでしょうか?ぜひご検討いただければと思います。

「いいね!」 1

@tp

いつも弊社製品をご愛顧くださり誠にありがとうございます。
Live2Dスタッフでございます。

現在はLinear色空間への対応の予定はございません。
こちらはご要望として承りました。
今後の開発で検討させていただきます。

よろしくお願いいたします。

ご回答ありがとうございます。承知いたしました。Linear色空間への対応、ぜひ前向きにご検討いただければと思います。

@tp

弊社製品をご利用いただきまして誠にありがとうございます。
Cubism SDK 開発チームです。

頂いておりましたリニア色空間対応につきまして、当方で調査・検討を行っていましたところ、いくつか確認させていただきたい事項がございましたのでご確認いただければと存じます。

  1. テクスチャについて

SDK for UnityでLive2Dモデルを扱う際、テクスチャの設定としてsRGB色空間を利用する設定をする必要があります。
インスペクタ上の “sRGB (Color Texture)” にチェックが入っているかご確認ください。
image3

これはプロジェクトがリニアワークフローかガンマワークフローかに関わらず、sRGB色空間の値がテクスチャで利用されていることを示すものです。
現在、Cubism Editorではテクスチャの色空間にはsRGBのみを利用しており、この設定を行わない場合Unityはリニア色空間の値がテクスチャに設定されていると認識するため、Cubism Editorと比較して明らかな描画差異が発生します。
image1
リニアワークフロー_非sRGBの状態(“sRGB (Color Texture)” にチェックが入っていない)

こちらの設定を行った場合はsRGB色空間の値を利用したテクスチャとして認識され、リニアワークフローでもUnity側で変換される状態になり、ほぼ同一の描画結果が得られます。
image2
ガンマワークフロー_sRGBの状態(“sRGB (Color Texture)” にチェックが入っている)

image4
リニアワークフロー_sRGBの状態(“sRGB (Color Texture)” にチェックが入っている)

  1. サンプルモデルの挙動について

SDK for Unity同梱のNatoriやRiceのサンプルモデルについて、上記の設定が適用されている状態かと思いますのでサンプルモデルの描画が正しい状態かご確認いただければと思います。

  1. シェーダーでの対応策

1.の“sRGB (Color Texture)” の設定を行わない場合、あるいは何らかの理由で設定が出来ない場合は、シェーダーにて以下の式を利用することでも対応が可能です。

#if !UNITY_COLORSPACE_GAMMA
  // SRGBで計算した値をリニアで返す
  OUT.rgb = GammaToLinearSpace(OUT.rgb);
#endif

“GammaToLinearSpace” はシェーダーファイルに “UnityCG.cginc” をインクルードすることで利用可能になる関数です。

追加する位置は、SDK for Unityで用意しているシェーダーであれば “/Live2D/Cubism/Rendering/Resources/Live2D/Cubism/Shaders/Unlit.shader” 内のフラグメントシェーダーの “CUBISM_APPLY_ALPHA(IN, OUT);” の直前に配置してください。

・当該モデルの状況について

上記の対応策でも期待結果と大きく異なる部分があるようでしたら、再現する設定とモデルのスクリーンショットを頂ければと思います。

お問い合わせからお時間をいただいてしまい大変恐縮ですが、今後の対応のため何卒ご回答いただければと存じます。

よろしくお願いいたします。

ご回答ありがとうございます!

返答いただいていたにも関わらず、見逃しており確認遅れてしまい申し訳ありません。頂いた情報を元に、リニア色空間モードでも正常に表示できるか試してみます。