Unity Shader實現(xiàn)黑幕過場效果
更新時間:2021年07月27日 11:32:30 作者:Hello Bug.
這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)黑幕過場效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了Unity Shader實現(xiàn)黑幕過場效果的具體代碼,供大家參考,具體內(nèi)容如下
一、效果演示
二、實現(xiàn)
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); } } }
——設(shè)置屬性
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Unity的Console的控制類LogEntries深入解析與實用案例
這篇文章主要為大家介紹了Unity的Console的控制類LogEntries深入解析與實用案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07支持windows與linux的php計劃任務的實現(xiàn)方法
這篇文章主要介紹了支持windows與linux的php計劃任務的實現(xiàn)方法,較為詳細的講述了php計劃任務中涉及到的php程序?qū)崿F(xiàn)方法、Windows計劃任務實現(xiàn)方法等,需要的朋友可以參考下2014-11-11c# 如何實現(xiàn)獲取二維數(shù)組的列數(shù)
這篇文章主要介紹了c# 實現(xiàn)獲取二維數(shù)組的列數(shù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04