Unity 控制HDR Color Intensity
1 2 3 4 5 6
| float factor = Mathf.Pow(2,intensity);
Color color = new Color(baseColor.r * factor,baseColor.g * factor,baseColor.b * factor);
Color hdrColor = baseColor * factor;
|
intensity 强度
baseColor 基础颜色
以下暂未验证
HDRcolor面板的intensity 获取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| private void Start() { Color32 color32; float exp; DecomposeHdrColor(color, out color32, out exp); Debug.Log(exp); } private const byte k_MaxByteForOverexposedColor = 191; public static void DecomposeHdrColor(Color linearColorHdr, out Color32 baseLinearColor, out float exposure) { baseLinearColor = linearColorHdr; var maxColorComponent = linearColorHdr.maxColorComponent; if (maxColorComponent == 0f || maxColorComponent <= 1f && maxColorComponent >= 1 / 255f) { exposure = 0f; baseLinearColor.r = (byte)Mathf.RoundToInt(linearColorHdr.r * 255f); baseLinearColor.g = (byte)Mathf.RoundToInt(linearColorHdr.g * 255f); baseLinearColor.b = (byte)Mathf.RoundToInt(linearColorHdr.b * 255f); } else { var scaleFactor = k_MaxByteForOverexposedColor / maxColorComponent; exposure = Mathf.Log(255f / scaleFactor) / Mathf.Log(2f); baseLinearColor.r = Math.Min(k_MaxByteForOverexposedColor, (byte)Mathf.CeilToInt(scaleFactor * linearColorHdr.r)); baseLinearColor.g = Math.Min(k_MaxByteForOverexposedColor, (byte)Mathf.CeilToInt(scaleFactor * linearColorHdr.g)); baseLinearColor.b = Math.Min(k_MaxByteForOverexposedColor, (byte)Mathf.CeilToInt(scaleFactor * linearColorHdr.b)); } }
|