Unity:Post Pocessing后处理基础学习笔记

内容来源于B站教学视频:
Unity社区直播 Post Processing 后处理的介绍和使用

一、下载与获取

  1. 以2019版本的Unity为例,首先在Windows -> Package Manager中搜索Post Pocessing之后将包安装;
  2. 安装后可通过右键Create下创建Post-pocessing profile并命名My Profile,该按钮位于Create -> Scene下方;
  3. 在场景中创建一个空物体,命名为PP Volume,将已经创建出的My Profile挂载到该物体上,记得勾选isGlobal使其效果能够影响全局;
  4. 可通过Add Effect为其添加不同的后处理效果。

二、不同后处理效果中英对照

(一)Camera & Cinematic Effects 相机和电影视觉效果

  • Bloom【辉光、柔光效果】
  • Chromatic 【色差效果】
  • Film Grain 【胶片颗粒】
  • Vignette【暗角效果、边角压暗】
  • Depth of Field【景深】-焦距外的地方模糊
  • Motion Blur【运动模糊】
  • Lens Distortion【镜头畸变、扭曲效果】
  • Panini Projection【帕尼尼投影】-中间鼓起来,其他地方依然垂直于将镜头
  • (2019)Ambient Occlusion【环境光遮蔽】-物体间遮挡的阴影
  • (2019)Screen-space Reflections

(二)颜色效果

  • Tonemapper【色调映射】
  • White Balance【白平衡】
  • Color Adjustment【色彩调整】
  • Split Tone【色调分离】
  • Channel Mixer【通道混合器】
  • Color Curves【颜色曲线】
  • Shadows,Midtones,Highlights【阴影、中间色调、高光】
  • Life.Gamma,Gain【提升、伽马、增益】
  • Color Lookup Talbe【颜色查找LUT】-在PS中导出相应文件,可使画面按照那个文件着色

(三)其它

  • Dithering【抖色】-消除色阶,使画面更自然
  • Anti-Aliasing【反锯齿、抗锯齿】

三、控制代码

以边角压暗效果和辉光效果为例。

(一)直接获取

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

pulbic class PPController:MonoBehaviour
{
   private PostProcessVolume volume;//体积,这里指的是容量,容量里有各个设置
   private Vignette vignette;
   private Bloom bloom;

   private bool isFading;
   [SerializeField] private float fadeSpeed = 0.35f;
   [SerializeField] private Color modifiedColor;
   
   private void Start()
   {
      volume = GetComponent<PostProcessVolume>();
      volume.profile.TryGetSettings(out vignette);
      voluem.profile.TryGetSettings(out bloom);
   }
   private void Update()
   {
      //按键瞬间变化
      if(Input.GetKeyDown(KeyCode.Space))
      {
         //vignette,intensity.value=1.0f;//FloatPara -> Float
         vignette.intensity.Override(1.0f);//效果同上
         //vignette.enabled.Override(false);//效果禁用
      }

      //按键逐渐变化
      if(Input.GetKeyDown(KeyCode.Space))
      {
         isFading = true;
      }
      if(isFading)
      {
         vignatte.intensity.value += fadeSpeed * Time.deltaTime;
         Debug.log("Increase intensity");

         if(vignette.intensity.value >= 0.75f)
         {
            isFading = false;
         }
      }
      
      if(Input.GetKeyDown(KeyCode.D))
      {
         bloom.color.value = modifiedColor;
      }
   }
}

(二)创建组建再获取

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class PPController:MonoBehaviour
{
   private PostPocessVolume volume;
   private Vignette vignette;

   private void Start()
   {
      vignette = ScriptableObject.CreateInstance<Vignette>();
      vignette.enabled.Override(true);
      vignette.intensity.Override(1.0f);

      volume = PostPocessManager.instance.QuickVolume(gameobject.layer,1,vignette);
   }
   
   private void Update()
   {
      vignette.intensity.value = Mathf.Sin(Time.realtimeSinceStartup);
   }
   private void onDestory()
   {
      RuntimeUtilities.DestoryVolume(volume,true,true);
   }
}

(三)扣血效果案例

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class PPController:MonoBehaviour
{
   private PostProcessVolume volume;//体积,这里指的是容量,容量里有各个设置
   private Vignette vignette;
   [SerializeField] private Color hurtColor;
   [SerializeField] private float hurtSpeed;

   [HideInInspector] public bool isDamaging;
   private bool isBack;
   
   private void Start()
   {
      volume = GetComponent<PostProcessVolume>();
      volume.profile.TryGetSettings(out vignette);
   }

   private void Update()
   {
      if(isDamaging && isBack == false)
      {
         vignette.intensity.value += hurtSpeed * Time.deltatime;
         vignette.color.value = hurtColor;
      }
      if(vignette.color.value >= 0.75f)
      {
         isDamaging = false;
         isBack = true;
      }

      if(isBack)
      {
         vignette.intensity.value -= 5f * hurtSpeed *Time.deltaTime;
         if(vignette.intensity.value <= 0.05f)
         {
            isBack = false;
         } 
      }
}

你可能感兴趣的:(unity,unity3d)