要件
Unity6000.026f1
URPプロジェクト
はじめに
マテリアルのHDRカラーの「強さ」の変更方法で少し詰まったのでメモ

まず、HDRカラーの「強さ」を設定する専用の変数は存在しません。
色のR,G,Bの値に数値を乗算することで実現します。
サンプル
using UnityEngine; using UnityEngine.UI; public class HDRColorController : MonoBehaviour { [Header("UI")] [SerializeField] private Slider _colorIntensitySlider; // HDR強度スライダー [SerializeField] private Image _colorImage; // 色取得用UI(ColorPickerなど) [Header("Material Settings")] [SerializeField] private Material _backgroundImageBaseMaterial; // 操作対象のマテリアル [SerializeField] private string _colorPropertyName = "_Color"; // マテリアルのColorプロパティ名(Reference名) private void Start() { // スライダーが設定されているか確認 if (_colorIntensitySlider != null) { _colorIntensitySlider.onValueChanged.AddListener(OnColorIntensityChanged); } } /// <summary> /// HDR強度スライダーが変更された時に呼ばれる処理 /// </summary> private void OnColorIntensityChanged(float value) { if (_backgroundImageBaseMaterial == null || _colorImage == null) return; // マテリアルにプロパティが存在するか検証 if (_backgroundImageBaseMaterial.HasProperty(_colorPropertyName)) { // UIから選択された色 Color baseColor = _colorImage.color; // HDR強度を2のべき乗で計算 float factor = Mathf.Pow(2, value); // HDR適用(RGBのみ拡張) Color hdrColor = new Color( baseColor.r * factor, baseColor.g * factor, baseColor.b * factor, baseColor.a ); // マテリアルに設定 _backgroundImageBaseMaterial.SetColor(_colorPropertyName, hdrColor); } } }
スライダーの値を2のべき乗としている理由は、
HDRの強度は「線形に上げる」よりも「指数的に上げる」方が自然なためです。
お好みによりスライダーの値をそのまま使用しても問題ありません。
// HDR強度を2のべき乗で計算 float factor = Mathf.Pow(2, value);
参考
https://discussions.unity.com/t/how-to-get-set-hdr-color-intensity/226028