Color Correction (颜色校正)

介绍

在Unity中,Color Correction (颜色校正) 是一种用于调整场景或游戏画面颜色的技术。其中,Curves(曲线)和Saturation(饱和度)是常用的Color Correction工具。通过Curves,可以对RGB通道进行非线性调整,从而影响画面的色调和对比度。而Saturation用于调整画面的饱和度,使颜色更加鲜艳或淡化。

方法

Curves(曲线)

在Unity中,Curves用于调整RGB通道的曲线,其参数如下:

  • Input Range(输入范围):指定输入的像素范围。通常是0到1,但也可以是其他范围。
  • Output Range(输出范围):指定输出的像素范围。通常是0到1,但也可以是其他范围。
  • Curve(曲线):通过调整曲线上的点来改变像素的颜色值。可以在曲线上增加或减少点,以创建不同的颜色映射。

Saturation(饱和度)

在Unity中,Saturation用于调整画面的饱和度,其参数如下:

  • Saturation(饱和度):设置饱和度的值。0表示完全灰度(黑白),1表示原始饱和度,大于1增加饱和度,小于1减少饱和度。

举例子

Curves(曲线)例子

1. 增加对比度

using UnityEngine;

public class ColorCorrectionExample : MonoBehaviour
{
    public AnimationCurve redCurve;
    public AnimationCurve greenCurve;
    public AnimationCurve blueCurve;

    private Material material;

    private void Awake()
    {
        material = new Material(Shader.Find("Custom/ColorCorrection"));
    }

    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        material.SetTexture("_MainTex", source);
        material.SetFloatArray("_RedCurve", redCurve.keys.Select(key => key.value).ToArray());
        material.SetFloatArray("_GreenCurve", greenCurve.keys.Select(key => key.value).ToArray());
        material.SetFloatArray("_BlueCurve", blueCurve.keys.Select(key => key.value).ToArray());
        Graphics.Blit(source, destination, material);
    }
}

2. 创建色调效果

using UnityEngine;

public class ColorCorrectionExample : MonoBehaviour
{
    public AnimationCurve redCurve;
    public AnimationCurve greenCurve;
    public AnimationCurve blueCurve;

    private Material material;

    private void Awake()
    {
        material = new Material(Shader.Find("Custom/ColorCorrection"));
    }

    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        material.SetTexture("_MainTex", source);
        material.SetFloatArray("_RedCurve", redCurve.keys.Select(key => Mathf.Sin(key.value)).ToArray());
        material.SetFloatArray("_GreenCurve", greenCurve.keys.Select(key => Mathf.Cos(key.value)).ToArray());
        material.SetFloatArray("_BlueCurve", blueCurve.keys.Select(key => Mathf.Tan(key.value)).ToArray());
        Graphics.Blit(source, destination, material);
    }
}

Saturation(饱和度)例子

1. 提高饱和度

using UnityEngine;

public class SaturationExample : MonoBehaviour
{
    [Range(0f, 2f)]
    public float saturationValue = 1f;

    private Material material;

    private void Awake()
    {
        material = new Material(Shader.Find("Custom/Saturation"));
    }

    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        material.SetTexture("_MainTex", source);
        material.SetFloat("_Saturation", saturationValue);
        Graphics.Blit(source, destination, material);
    }
}

2. 减少饱和度

using UnityEngine;

public class SaturationExample : MonoBehaviour
{
    [Range(0f, 2f)]
    public float saturationValue = 1f;

    private Material material;

    private void Awake()
    {
        material = new Material(Shader.Find("Custom/Saturation"));
    }

    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        material.SetTexture("_MainTex", source);
        material.SetFloat("_Saturation", 1f / saturationValue);
        Graphics.Blit(source, destination, material);
    }
}

以上代码中使用了自定义的Shader(Custom/ColorCorrection和Custom/Saturation)来进行颜色校正操作。这里我们只是提供了简单的例子来演示如何使用Curves和Saturation来调整颜色,实际上可以通过调整曲线和参数来实现更复杂的颜色效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忽然602

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值