赞
踩
场景渲染完以后在添加一些特效。
1,引擎渲染后最终的结果是一张图片。
1, void OnRenderImage(RenderTexture sourceTexture, RenderTexture desTexture)
2, Graphics.Blit(sourceTexture, desTexture,mat);
sourceTexture拦截相机渲染出来的图片。
mat : 用哪个材质球重新渲染sourceTexture。
desTexture:更改以后的图片存在这里 重新交给引擎。
2,将图片传递给 shader 进行二次计算。
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Custom/GaoSi" { Properties { _MainTex ("Texture", 2D) = "white" {} _Ambient ("Ambient", float) = 0.001 } SubShader { // No culling or depth Cull Off ZWrite Off ZTest Always Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; float _Ambient; fixed4 frag (v2f i) : SV_Target { float2 tmpUV = i.uv ; // float ambient = 0.001 ; fixed4 col = tex2D(_MainTex, tmpUV); // just invert the colors // col = 1 - col; fixed4 col2 = tex2D(_MainTex, tmpUV+float2(-_Ambient,0)); fixed4 col3 = tex2D(_MainTex, tmpUV+float2(0,-_Ambient)); fixed4 col4 = tex2D(_MainTex, tmpUV+float2(_Ambient,0)); fixed4 col5 = tex2D(_MainTex, tmpUV+float2(0,_Ambient)); col = (col + col2 +col3+col4+col5) /5.0 ; return col; } ENDCG } } }
生命周期
1, 红色光线从两边闪出
圆心(-0.5,0.5) (1.5, 0.5)
2,红色有中间到两边渐变变浓。
通过圆心的距离判别渐变的过程。
Length : 求向量的模长
Lerp: (1-t) A + t * B - - -
Lerp (A,B,T)
Clamp(x, a , b) : 表示将 X 限制在 a 和 B 之间。
Material 更改shader 属性:
graphicMat.SetFloat
graphicMat.SetTexture
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Hidden/Blood" { Properties { _MainTex ("Texture", 2D) = "white" {} _BloodLength (" length",float) = 0.5 } SubShader { // No culling or depth //Cull Off ZWrite Off ZTest Always Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; float _BloodLength; fixed4 frag (v2f i) : SV_Target { float2 tmpUV = i.uv ; float tmpLength = 0 ; if(tmpUV.x < 0.5) { tmpLength = length ( tmpUV - float2(-0.5 ,0.5)) ; } else { tmpLength = length (float2(1.5 ,0.5)- tmpUV ) ; } tmpLength *= _BloodLength ; fixed4 col = tex2D(_MainTex, i.uv); col = lerp(col,fixed4(1,0,0,1) , 1-clamp(tmpLength,0,1) ) ; return col; } ENDCG } } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Blood : MonoBehaviour { // Use this for initialization void Start () { } float tmpCount; // Update is called once per frame void Update () { tmpCount += Time.deltaTime*5; rangValue = Mathf.Sin(tmpCount) ; // -1 1 rangValue = 1+(rangValue + 1) * 0.25f ; // 0 --0.5 // 1---1. } public float rangValue; public Material graphicMat; void OnRenderImage(RenderTexture sourceTexture, RenderTexture desTexture) { graphicMat.SetFloat("_BloodLength", rangValue) Graphics.Blit(sourceTexture, desTexture, graphicMat); } }
波动方程:
y=Asin(ωx+φ)
φ:决定波形与X轴位置关系或横向移动距离(左加右减)
ω:决定周期(最小正周期T=2π/∣ω∣)
A:决定峰值(即纵向拉伸压缩的倍数)
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Hidden/Wave" { Properties { _MainTex ("Texture", 2D) = "white" {} _Arange("Amplitute",float) = 1 _Frenquncy("Frenquncy",float) = 0.5 _Speed("Speed",float) = 0.5 } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; float _Frenquncy ; float _Arange ; float _Speed ; v2f vert (appdata v) { v2f o; float timer = _Time.y * _Speed ; float waver = _Arange* sin(timer + v.vertex.x *_Frenquncy ); v.vertex.y = v.vertex.y + waver ; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); // just invert the colors //col = 1 - col; return col; } ENDCG } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。