Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.21 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. [ExecuteInEditMode]
  4. public class PostEffects : MonoBehaviour
  5. {
  6.  
  7.     [Header("Bloom")]
  8.     public bool isBloomEnabled = true;
  9.     [SerializeField] [Range(1, 8)] int textureReductionFactor = 4;
  10.     [SerializeField] [Range(0, 20)] float bloomIntensity = 2;
  11.  
  12.     [Header("Motion Blur")]
  13.     public bool isMotionBlurEnabled = true;
  14.     [Header("Static")]
  15.     [SerializeField] [Range(0, 0.8f)] float staticBlurRadius = 0.2f;
  16.     [SerializeField] [Range(0, 10)] float staticBlurSoftness = 0.5f;
  17.     [SerializeField] [Range(0, 10)] float staticBlurIntensity = 0.5f;
  18.     [Header("Motion")]
  19.     [SerializeField] [Range(0, 0.8f)] float motionBlurRadius = 0.2f;
  20.     [SerializeField] [Range(0, 10)] float motionBlurSoftness = 0.5f;
  21.     [SerializeField] [Range(0, 10)] float speedMultiplier = 5f;
  22.     [SerializeField] [Range(0, 10)] float maxMotionBlurIntensity = 5f;
  23.  
  24.     [Header("Noise")]
  25.     public bool isNoiseEnabled = true;
  26.     [SerializeField] [Range(0, 0.5f)] float noiseSeed = 0.2f;
  27.     [SerializeField] [Range(0, 0.5f)] float noiseIntensity = 0.2f;
  28.  
  29.     [Header("Vignette")]
  30.     public bool isVignetteEnabled = true;
  31.     [SerializeField] [Range(0, 0.5f)] float vignetteRadius = 0.2f;
  32.     [SerializeField] [Range(0, 10)] float vignetteSoftness = 0.5f;
  33.  
  34.     [Header("Other")]
  35.     [SerializeField] Material material;
  36.     [SerializeField] Transform carContainer;
  37.     [SerializeField] Transform carCenter;
  38.     [SerializeField] Texture2D lensTexture;
  39.     [SerializeField] [Range(0, 20)] float lensIntensity = 2;
  40.     [HideInInspector] public float saturation = 1;
  41.  
  42.     Vector3 prevContainerPosition;
  43.     RenderTexture bufferRT;
  44.     Camera cam;
  45.  
  46.     void OnEnable()
  47.     {
  48.         cam = Camera.main;
  49.         bufferRT = RenderTexture.GetTemporary(cam.pixelWidth / textureReductionFactor, cam.pixelHeight / textureReductionFactor, 0);
  50.  
  51.         prevContainerPosition = carContainer.position;
  52.         UpdateParams();
  53.     }
  54.  
  55.     void OnDisable()
  56.     {
  57.         RenderTexture.ReleaseTemporary(bufferRT);
  58.     }
  59.  
  60. #if UNITY_EDITOR
  61.     void Update()
  62.     {
  63.         UpdateParams();
  64.     }
  65. #endif
  66.  
  67.     public void UpdateParams()
  68.     {
  69.         material.SetFloat("_NoiseSeed", noiseSeed);
  70.         material.SetFloat("_NoiseIntensity", noiseIntensity);
  71.         material.SetFloat("_VignetteRadius", vignetteRadius);
  72.         material.SetFloat("_VignetteSoftness", vignetteSoftness);
  73.         material.SetFloat("_BloomIntensity", bloomIntensity);
  74.         material.SetFloat("_LensIntensity", lensIntensity);
  75.         material.SetFloat("_Saturation", saturation);
  76.         material.SetTexture("_LensTex", lensTexture);
  77.  
  78.         SetKeyword(isBloomEnabled, "_BLOOM");
  79.         SetKeyword(isMotionBlurEnabled, "_MOTION_BLUR");
  80.         SetKeyword(isNoiseEnabled, "_NOISE");
  81.         SetKeyword(isVignetteEnabled, "_VIGNETTE");
  82.     }
  83.  
  84.     void Bloom(RenderTexture src)
  85.     {
  86.         bufferRT.DiscardContents();
  87.         Graphics.Blit(src, bufferRT, material, 0);
  88.         material.SetTexture("_MaskTex", bufferRT);
  89.     }
  90.  
  91.     void MotionBlur()
  92.     {
  93.         var delta = (carContainer.position - prevContainerPosition).magnitude * speedMultiplier;
  94.         delta = Mathf.Min(delta, maxMotionBlurIntensity);
  95.         prevContainerPosition = carContainer.position;
  96.         bool useWithMotion = delta >= staticBlurIntensity;
  97.         material.SetFloat("_MotionBlurRadius", useWithMotion ? motionBlurRadius : staticBlurRadius);
  98.         material.SetFloat("_MotionBlurSoftness", useWithMotion ? motionBlurSoftness : staticBlurSoftness);
  99.         material.SetVector("_MotionBlurIntensity", useWithMotion ? Vector2.right * delta : Vector2.right * staticBlurIntensity);
  100.         var cp = cam.WorldToViewportPoint(carCenter.position);
  101.         material.SetVector("_CarCenter", new Vector2(cp.x, cp.y));
  102.     }
  103.  
  104.     public void ProcessImage(RenderTexture src, RenderTexture dst)
  105.     {
  106.         if (isBloomEnabled)
  107.             Bloom(src);
  108.         if (isMotionBlurEnabled)
  109.             MotionBlur();
  110.  
  111.         Graphics.Blit(src, dst, material, 1);
  112.     }
  113.  
  114.     void SetKeyword(bool enabled, string keyword)
  115.     {
  116.         if (enabled)
  117.             material.EnableKeyword(keyword);
  118.         else
  119.             material.DisableKeyword(keyword);
  120.     }
  121.  
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement