Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- [ExecuteInEditMode]
- public class PostEffects : MonoBehaviour
- {
- [Header("Bloom")]
- public bool isBloomEnabled = true;
- [SerializeField] [Range(1, 8)] int textureReductionFactor = 4;
- [SerializeField] [Range(0, 20)] float bloomIntensity = 2;
- [Header("Motion Blur")]
- public bool isMotionBlurEnabled = true;
- [Header("Static")]
- [SerializeField] [Range(0, 0.8f)] float staticBlurRadius = 0.2f;
- [SerializeField] [Range(0, 10)] float staticBlurSoftness = 0.5f;
- [SerializeField] [Range(0, 10)] float staticBlurIntensity = 0.5f;
- [Header("Motion")]
- [SerializeField] [Range(0, 0.8f)] float motionBlurRadius = 0.2f;
- [SerializeField] [Range(0, 10)] float motionBlurSoftness = 0.5f;
- [SerializeField] [Range(0, 10)] float speedMultiplier = 5f;
- [SerializeField] [Range(0, 10)] float maxMotionBlurIntensity = 5f;
- [Header("Noise")]
- public bool isNoiseEnabled = true;
- [SerializeField] [Range(0, 0.5f)] float noiseSeed = 0.2f;
- [SerializeField] [Range(0, 0.5f)] float noiseIntensity = 0.2f;
- [Header("Vignette")]
- public bool isVignetteEnabled = true;
- [SerializeField] [Range(0, 0.5f)] float vignetteRadius = 0.2f;
- [SerializeField] [Range(0, 10)] float vignetteSoftness = 0.5f;
- [Header("Other")]
- [SerializeField] Material material;
- [SerializeField] Transform carContainer;
- [SerializeField] Transform carCenter;
- [SerializeField] Texture2D lensTexture;
- [SerializeField] [Range(0, 20)] float lensIntensity = 2;
- [HideInInspector] public float saturation = 1;
- Vector3 prevContainerPosition;
- RenderTexture bufferRT;
- Camera cam;
- void OnEnable()
- {
- cam = Camera.main;
- bufferRT = RenderTexture.GetTemporary(cam.pixelWidth / textureReductionFactor, cam.pixelHeight / textureReductionFactor, 0);
- prevContainerPosition = carContainer.position;
- UpdateParams();
- }
- void OnDisable()
- {
- RenderTexture.ReleaseTemporary(bufferRT);
- }
- #if UNITY_EDITOR
- void Update()
- {
- UpdateParams();
- }
- #endif
- public void UpdateParams()
- {
- material.SetFloat("_NoiseSeed", noiseSeed);
- material.SetFloat("_NoiseIntensity", noiseIntensity);
- material.SetFloat("_VignetteRadius", vignetteRadius);
- material.SetFloat("_VignetteSoftness", vignetteSoftness);
- material.SetFloat("_BloomIntensity", bloomIntensity);
- material.SetFloat("_LensIntensity", lensIntensity);
- material.SetFloat("_Saturation", saturation);
- material.SetTexture("_LensTex", lensTexture);
- SetKeyword(isBloomEnabled, "_BLOOM");
- SetKeyword(isMotionBlurEnabled, "_MOTION_BLUR");
- SetKeyword(isNoiseEnabled, "_NOISE");
- SetKeyword(isVignetteEnabled, "_VIGNETTE");
- }
- void Bloom(RenderTexture src)
- {
- bufferRT.DiscardContents();
- Graphics.Blit(src, bufferRT, material, 0);
- material.SetTexture("_MaskTex", bufferRT);
- }
- void MotionBlur()
- {
- var delta = (carContainer.position - prevContainerPosition).magnitude * speedMultiplier;
- delta = Mathf.Min(delta, maxMotionBlurIntensity);
- prevContainerPosition = carContainer.position;
- bool useWithMotion = delta >= staticBlurIntensity;
- material.SetFloat("_MotionBlurRadius", useWithMotion ? motionBlurRadius : staticBlurRadius);
- material.SetFloat("_MotionBlurSoftness", useWithMotion ? motionBlurSoftness : staticBlurSoftness);
- material.SetVector("_MotionBlurIntensity", useWithMotion ? Vector2.right * delta : Vector2.right * staticBlurIntensity);
- var cp = cam.WorldToViewportPoint(carCenter.position);
- material.SetVector("_CarCenter", new Vector2(cp.x, cp.y));
- }
- public void ProcessImage(RenderTexture src, RenderTexture dst)
- {
- if (isBloomEnabled)
- Bloom(src);
- if (isMotionBlurEnabled)
- MotionBlur();
- Graphics.Blit(src, dst, material, 1);
- }
- void SetKeyword(bool enabled, string keyword)
- {
- if (enabled)
- material.EnableKeyword(keyword);
- else
- material.DisableKeyword(keyword);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement