- 最后登录
- 2017-5-10
- 注册时间
- 2016-12-6
- 阅读权限
- 20
- 积分
- 272

- 纳金币
- 35
- 精华
- 0
|
今天为大家分享一下,如何写一个雪花效果的Shader,因为操作过程比较简单,我直接上代码啦!
欢迎加我的学习交流群:575561285
1.新建一个unity3d 项目,新建一个CameraFilterPack_Atmosphere_Snow_8bits.shader文件。2.为了方便更改shader的一些参数,所以我们新建一个CameraFilterPack_Atmosphere_Snow_8bits.cs 组件类。- using UnityEngine;
- using System.Collections;
- [ExecuteInEditMode]
- [AddComponentMenu ("Camera Filter Pack/Pixel/Snow_8bits")]
- public class CameraFilterPack_Atmosphere_Snow_8bits : MonoBehaviour {
- #region Variables
- public Shader SCShader;
- private float TimeX = 1.0f;
- private Vector4 ScreenResolution;
- private Material SCMaterial;
- [Range(0.9f, 2f)]
- public float Threshold = 1f;
- [Range(8f, 256f)]
- public float Size = 64f;
- [Range(0f, 10f)]
- private float Value3 = 1f;
- [Range(0f, 10f)]
- private float Value4 = 1f;
- public static float ChangeValue;
- public static float ChangeValue2;
- public static float ChangeValue3;
- public static float ChangeValue4;
- #endregion
- #region Properties
- Material material
- {
- get
- {
- if(SCMaterial == null)
- {
- SCMaterial = new Material(SCShader);
- SCMaterial.hideFlags = HideFlags.HideAndDontSave;
- }
- return SCMaterial;
- }
- }
- #endregion
- void Start ()
- {
- ChangeValue = Threshold;
- ChangeValue2 = Size;
- ChangeValue3 = Value3;
- ChangeValue4 = Value4;
- SCShader = Shader.Find("CameraFilterPack/Atmosphere_Snow_8bits");
- if(!SystemInfo.supportsImageEffects)
- {
- enabled = false;
- return;
- }
- }
- void OnRenderImage (RenderTexture sourceTexture, RenderTexture destTexture)
- {
- if(SCShader != null)
- {
- TimeX+=Time.deltaTime;
- if (TimeX>100) TimeX=0;
- material.SetFloat("_TimeX", TimeX);
- material.SetFloat("_Value", Threshold);
- material.SetFloat("_Value2", Size);
- material.SetFloat("_Value3", Value3);
- material.SetFloat("_Value4", Value4);
- material.SetVector("_ScreenResolution",new Vector4(sourceTexture.width,sourceTexture.height,0.0f,0.0f));
- Graphics.Blit(sourceTexture, destTexture, material);
- }
- else
- {
- Graphics.Blit(sourceTexture, destTexture);
- }
- }
- void OnValidate()
- {
- ChangeValue=Threshold;
- ChangeValue2=Size;
- ChangeValue3=Value3;
- ChangeValue4=Value4;
- }
- void Update ()
- {
- if (Application.isPlaying)
- {
- Threshold = ChangeValue;
- Size = ChangeValue2;
- Value3 = ChangeValue3;
- Value4 = ChangeValue4;
- }
- #if UNITY_EDITOR
- if (Application.isPlaying!=true)
- {
- SCShader = Shader.Find("CameraFilterPack/Atmosphere_Snow_8bits");
- }
- #endif
- }
- void OnDisable ()
- {
- if(SCMaterial)
- {
- DestroyImmediate(SCMaterial);
- }
- }
- }
复制代码 3.在摄像机上附加AddCameraFilter.cs组件,为了方便控制看出效果。- using UnityEngine;
- public class AddCameraFilter : MonoBehaviour {
- private CameraFilterPack_Atmosphere_Snow_8bits _cameraFilterPack;
- // Use this for initialization
- void Start()
- {
- _cameraFilterPack = GetComponent<CameraFilterPack_Atmosphere_Snow_8bits>();
- }
- // Update is called once per frame
- void OnGUI()
- {
- if (GUI.Button(new Rect(50, 200, 200, 30), "添加雪花效果"))
- {
- if (_cameraFilterPack == null)
- _cameraFilterPack = gameObject.AddComponent<CameraFilterPack_Atmosphere_Snow_8bits>();
- if (_cameraFilterPack != null)
- _cameraFilterPack.enabled = true;
- }
- if (GUI.Button(new Rect(50, 250, 200, 30), "移除雪花效果"))
- {
- if (_cameraFilterPack != null)
- _cameraFilterPack.enabled = false;
- }
- }
- }
复制代码 4.好吧!最后我们直接运行项目看效果噢!
学习交流群:575561285
|
|