この記事でのバージョン
Unity 2022.2.8f1
はじめに
UnityにはHDR(ハイダイナミックレンジ)という、より広い(明るい)範囲の色を指定する方法があります。
ハイダイナミックレンジ (HDR) は、標準ダイナミックレンジ (SDR) 画像よりも大きなダイナミックレンジの光度を持つ画像を生成する技術で、色と明るさを現実的に表現できます。
今回はこのHDRをInspectorやプログラムで使う方法の紹介です!
なお、エディタ拡張で使いたい場合は以下の記事を参考のこと。
HDRをInspectorやプログラムで使う方法
まずInspectorで使う(表示させる)方法ですが、ColorUsageAttributeという属性をColorに設定し、
第2引数をtrueにするだけ。
[ColorUsage(false, true)] public Color color;
ちなみに第1引数をtrueにすればアルファ値(不透明度)が設定出来ます。
[ColorUsage(true, true)] public Color color;
次にプログラムから使う方法ですが、実はColorがそのまま使えます。
例えばR,G,B全てに2を設定すると、Intensity(明るさ)が1を越えて設定されます。
color = new Color(2, 2, 2)
なお、ColorにIntensity込みで設定したい場合は以下のようになります。
//intensityは明るさのfloat値、red, green, blueは各色のfloat値(1f = 255) var factor = Mathf.Pow(2, intensity); Color color = new Color(red * factor, green * factor, blue * factor);
ただし、例えば全色255(1.0f)でintensity1.5に設定しても、Inspector上では違う値になります。
var intensity = 1.5f; var factor = Mathf.Pow(2, intensity); color = new Color(1.0f * factor , 1.0f * factor, 1.0f * factor);
おそらくこれは違う値だが同じ色なので気にしなくて大丈夫だと思います。
(ガンマ空間とリニア空間の変換が原因っぽい?)
ちなみにInspectorで値を設定した時にも、閉じて再度開くと値が変化する事があります。
参考