Unity Shader實現黑幕過場效果
本文實例為大傢分享瞭Unity Shader實現黑幕過場效果的具體代碼,供大傢參考,具體內容如下
一、效果演示
二、實現
Shader:黑幕過場著色器
//黑幕過場著色器 Shader "Custom/BlackScreenSpread" { Properties { _Color("Main Color", Color) = (1,1,1,1) _MainTex("Base (RGB)", 2D) = "white" {} _Radius("Radius",float)=1.5 _Center_X("Center_X", float) =0.5 _Center_Y("Center_Y", float) =0.5 _Sharp("Sharp", float) = 100 } SubShader { Pass { ZTest Always Cull Off ZWrite Off Fog{ Mode off } CGPROGRAM #pragma vertex vert_img #pragma fragment frag #include "UnityCG.cginc" fixed4 _Color; sampler2D _MainTex; float _Radius; float _Center_X; float _Center_Y; float _Sharp; float _tanh(float x) { return 2.0f / (1.0f + exp(-2.0f * x)) - 1.0f; } float4 frag(v2f_img i) : COLOR { _Center_X=_Center_X*(_ScreenParams.x / _ScreenParams.y); float x = i.uv.x*(_ScreenParams.x / _ScreenParams.y); float y = i.uv.y; float dis = sqrt((x - _Center_X)*(x - _Center_X) + (y - _Center_Y)*(y - _Center_Y)); float t = _Radius - dis; float rt = 0.5f + _tanh(t * _Sharp) * 0.5f; float col = float4(rt, rt, rt, rt); return tex2D(_MainTex, i.uv) * col * _Color; } ENDCG } } Fallback off }
CS:後處理的基類
using UnityEngine; /// <summary> /// 後處理的基類 /// </summary> [ExecuteInEditMode] [RequireComponent(typeof(Camera))] public class PostEffectBase : MonoBehaviour { [Header("後處理著色器")] public Shader shader = null; private Material _material = null; public Material material { get { if (_material == null) { _material = GenerateMaterial(shader); } return _material; } } protected Material GenerateMaterial(Shader shader) { if (shader == null || shader.isSupported == false) { return null; } Material material = new Material(shader); material.hideFlags = HideFlags.DontSave; if (material) { return material; } return null; } }
CS:黑幕過場效果(掛載到渲染的相機上)
using UnityEngine; /// <summary> /// 黑幕過場效果 /// </summary> [RequireComponent(typeof(Camera))] public class BlackScreenSpread : PostEffectBase { [Header("黑幕半徑")] [Space(25)] public float radius; [Header("黑幕中心")] public Vector2 center; [Header("使用邊緣模糊")] public bool useEdgeBlur; [Header("邊緣模糊值")] public float blur = 10; public void OnRenderImage(RenderTexture source, RenderTexture destination) { if (material) { material.SetFloat("_Center_X", center.x); material.SetFloat("_Center_Y", center.y); material.SetFloat("_Radius", radius); material.SetFloat("_Sharp", useEdgeBlur ? blur : 200); Graphics.Blit(source, destination, material); } else { Graphics.Blit(source, destination); } } }
——設置屬性
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Unity Shader實現模糊效果
- Unity Shader實現徑向模糊效果
- unity置灰處理的實現
- Unity Shader實現動態過場切換圖片效果
- UnityShader使用Plane實現翻書效果