| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 | 
							- using UnityEngine;
 
- using System.Collections;
 
- public enum LensFlareTypes { 
 
-     BloomAndFlare = 0,
 
- 	Flare = 2,
 
- 	Bloom = 1
 
- }
 
- [RequireComponent (typeof(Camera))]
 
- [ExecuteInEditMode]
 
- [AddComponentMenu("Image Effects/Max P/Dirty Lens Flare")]
 
- public class DirtyLensFlare : MonoBehaviour {
 
- 	
 
- 	// Flare Settings
 
- 	public LensFlareTypes lensFlareType;
 
- 	public float saturation     = 0.9f;
 
- 	public float threshold      = 0.5f;
 
- 	public float flareIntensity = 2.5f;
 
- 	public float bloomIntensity = 2.0f;
 
- 	
 
- 	// Blur
 
- 	public int   iterations = 10;
 
- 	public float blurSpread = 0.6f;
 
- 	
 
- 	// Downsample
 
- 	public int   downsample = 6;
 
- 	
 
- 	// Textures
 
- 	public bool      useDirt = true;
 
- 	public Texture2D screenDirt;
 
- 	
 
- 	// Shaders and Materials
 
- 	private Shader   blurShader;
 
- 	private Material blurMaterial;
 
- 	
 
- 	// ------------------------------------------------------------------------------
 
- 	//  Image Effect Base (Default Unity Image Effect Script: Standard Assets/Image Effects (Pro Only)/ImageEffectBase.cs)
 
- 	// ------------------------------------------------------------------------------
 
- 	#region Image Effect Base
 
- 	private Shader   shader;
 
- 	private Material m_Material;
 
- 	
 
- 	// (Modified)
 
- 	protected virtual void Start ()
 
- 	{
 
- 		// Check Resources First
 
- 		CheckResources();
 
- 		
 
- 		// Disable if we don't support image effects
 
- 		if (!SystemInfo.supportsImageEffects) {
 
- 			enabled = false;
 
- 			return;
 
- 		}
 
- 		
 
- 		// Disable the image effect if the shader can't
 
- 		// run on the users graphics card
 
- 		if (!shader || !shader.isSupported)
 
- 			enabled = false;
 
- 	}
 
- 	
 
- 	protected Material material {
 
- 		get {
 
- 			if (m_Material == null) {
 
- 				m_Material = new Material (shader);
 
- 				m_Material.hideFlags = HideFlags.HideAndDontSave;
 
- 			}
 
- 			return m_Material;
 
- 		} 
 
- 	}
 
- 	
 
- 	protected virtual void OnDisable() {
 
- 		if( m_Material ) {
 
- 			DestroyImmediate( m_Material );
 
- 		}
 
- 	}
 
- 	#endregion
 
- 	
 
- 	
 
- 	// ------------------------------------------------------------------------------
 
- 	//  Blur (Default Unity Blur Shader Script: Standard Assets/Image Effects (Pro Only)/BlurEffect.cs)
 
- 	// ------------------------------------------------------------------------------
 
- 	#region Blur Shader Script
 
- 	// Performs one blur iteration.
 
- 	public void FourTapCone (RenderTexture source, RenderTexture dest, int iteration, Material blurMtl)
 
- 	{
 
- 		float off = 0.5f + iteration*blurSpread;
 
- 		Graphics.BlitMultiTap (source, dest, blurMtl,
 
- 			new Vector2(-off, -off),
 
- 			new Vector2(-off,  off),
 
- 			new Vector2( off,  off),
 
- 			new Vector2( off, -off)
 
- 		);
 
- 	}
 
- 	
 
- 	// Applies a blur effect (Modified from default script)
 
- 	void ApplyBlurPass(RenderTexture source, RenderTexture destination, Material blurMtl)
 
- 	{
 
- 		
 
- 		downsample = Mathf.Clamp(downsample, 1, 12);
 
- 		
 
- 		RenderTexture buffer  = RenderTexture.GetTemporary(source.width / downsample, source.height / downsample, 0);
 
- 		RenderTexture buffer2 = RenderTexture.GetTemporary(source.width / downsample, source.height / downsample, 0);
 
- 		
 
- 		// Copy source into buffer
 
- 		Graphics.Blit(source, buffer);
 
- 		
 
- 		// Blur the small texture
 
- 		bool oddEven = true;
 
- 		for(int i = 0; i < iterations; i++)
 
- 		{
 
- 			if( oddEven )
 
- 				FourTapCone (buffer, buffer2, i, blurMtl);
 
- 			else
 
- 				FourTapCone (buffer2, buffer, i, blurMtl);
 
- 			oddEven = !oddEven;
 
- 		}
 
- 		if( oddEven )
 
- 			Graphics.Blit(buffer, destination);
 
- 		else
 
- 			Graphics.Blit(buffer2, destination);
 
- 		
 
- 		// Release the buffers
 
- 		RenderTexture.ReleaseTemporary(buffer);
 
- 		RenderTexture.ReleaseTemporary(buffer2);
 
- 	}
 
- 	#endregion
 
- 	
 
- 	// ------------------------------------------------------------------------------
 
- 	//  Dirty Lens Flare MAIN
 
- 	// ------------------------------------------------------------------------------
 
- 	#region Dirty Lens Flare
 
- 	
 
- 	bool CheckResources()
 
- 	{
 
- 		// Check blur shader
 
- 		if(!blurShader)
 
- 		{
 
- 			blurShader = Shader.Find("Hidden/Dirty Lens Flare Blur");
 
- 			if(!blurShader)
 
- 				return false;
 
- 		}
 
- 		
 
- 		// Check blur material
 
- 		if(!blurMaterial)
 
- 		{
 
- 			blurMaterial = new Material(blurShader);
 
- 			blurMaterial.hideFlags = HideFlags.HideAndDontSave;
 
- 			if(!blurMaterial)
 
- 				return false;
 
- 		}
 
- 		
 
- 		// Check dirty lens flare shader
 
- 		if(!shader)
 
- 		{
 
- 			shader = Shader.Find("Hidden/Dirty Lens Flare");
 
- 			if(!shader)
 
- 				return false;
 
- 		}
 
- 		
 
- 		return true;
 
- 	}
 
- 	
 
- 	// Called by camera to apply image effect
 
- 	void OnRenderImage (RenderTexture source, RenderTexture destination) {
 
- 		
 
- 		if( CheckResources() )
 
- 		{
 
- 			
 
- 			material.SetFloat("_Threshold",  threshold);
 
- 			material.SetFloat("_Scale",      flareIntensity);
 
- 			material.SetFloat("_BloomScale", bloomIntensity);
 
- 			
 
- 			// Create downsampled image
 
- 			RenderTexture downSampled = RenderTexture.GetTemporary (source.width / 4, source.height / 4, 0, RenderTextureFormat.Default);
 
- 			
 
- 			// Apply threshold
 
- 			material.SetFloat("_desaturate", 1.0f-saturation);
 
- 			switch(lensFlareType)
 
- 			{
 
- 			case LensFlareTypes.Bloom:
 
- 				Graphics.Blit(source, downSampled, material, 2); // Bloom only
 
- 				break;
 
- 			case LensFlareTypes.Flare:
 
- 				Graphics.Blit(source, downSampled, material, 0); // Flare only
 
- 				break;
 
- 			case LensFlareTypes.BloomAndFlare:
 
- 				Graphics.Blit(source, downSampled, material, 1); // Flare + Bloom
 
- 				break;
 
- 			}
 
- 			
 
- 			// Create blur buffer
 
- 			RenderTexture blurred = RenderTexture.GetTemporary (downSampled.width, downSampled.height, 0, RenderTextureFormat.Default);	
 
- 			
 
- 			// Apply blur
 
- 			ApplyBlurPass(downSampled, blurred, blurMaterial);
 
- 			
 
- 			// Apply blending
 
- 			material.SetTexture("_Flare", blurred);
 
- 			if( useDirt )
 
- 			{
 
- 				material.SetTexture("_Dirt", screenDirt);
 
- 				Graphics.Blit (source, destination, material, 3);
 
- 			}
 
- 			else
 
- 			{
 
- 				Graphics.Blit (source, destination, material, 4);
 
- 			}
 
- 			
 
- 			// Release downsampled images
 
- 			RenderTexture.ReleaseTemporary (downSampled);
 
- 			RenderTexture.ReleaseTemporary (blurred);
 
- 			
 
- 		}
 
- 		
 
- 	}
 
- 	#endregion
 
- 	
 
- }
 
 
  |