精华内容
下载资源
问答
  • shader 特效
    千次阅读
    2021-06-10 23:49:13

    原地址
    在基础上调整了一下,拿来即用。

    参数面板
    在这里插入图片描述

    效果
    在这里插入图片描述

    控制shader的代码。如果想做延时流光可以写个协程之类的。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class ImageFlow : MonoBehaviour
    {
    	private float widthRate = 1;
    	private float heightRate = 1;
    	private float xOffsetRate = 0;
    	private float yOffsetRate = 0;
    	public Shader shader;
    	public Color color = Color.yellow;
    	public float power = 0.55f;
    	public float speed = 5;
    	public float largeWidth = 0.003f;
    	public float littleWidth = 0.0003f;
    	public float length = 0.1f;
    	public float skewRadio = 0.2f;//倾斜
    	public float moveTime = 0;
    	float endMoveTime = 0;
    	private MaskableGraphic maskableGraphic;
    	Image image;
    	Material imageMat = null;
    	void Awake()
    	{
    		maskableGraphic = GetComponent<MaskableGraphic>();
    		if (maskableGraphic)
    		{
    			image = maskableGraphic as Image;
    			if (image)
    			{
    				imageMat = new Material(shader);
    				widthRate = image.sprite.textureRect.width * 1.0f / image.sprite.texture.width;
    				heightRate = image.sprite.textureRect.height * 1.0f / image.sprite.texture.height;
    				xOffsetRate = (image.sprite.textureRect.xMin) * 1.0f / image.sprite.texture.width;
    				yOffsetRate = (image.sprite.textureRect.yMin) * 1.0f / image.sprite.texture.height;
    
    				image.material = imageMat;
    			}
    		}
    	}
    	
    	void Start()
    	{
    		SetShader();
    	}
    	
    	void Update()
    	{
    		moveTime = Time.time;
    
    		//调试时开启,不用时注释掉
    		SetShader();
    	}
    	public void SetShader()
    	{
    		skewRadio = Mathf.Clamp(skewRadio, 0, 1);
    		length = Mathf.Clamp(length, 0, 0.5f);
    		imageMat.SetColor("_FlowlightColor", color);
    		imageMat.SetFloat("_Power", power);
    		imageMat.SetFloat("_MoveSpeed", speed);
    		imageMat.SetFloat("_LargeWidth", largeWidth);
    		imageMat.SetFloat("_LittleWidth", littleWidth);
    		imageMat.SetFloat("_SkewRadio", skewRadio);
    		imageMat.SetFloat("_Lengthlitandlar", length);
    		imageMat.SetFloat("_MoveTime", moveTime);
    
    		imageMat.SetFloat("_WidthRate", widthRate);
    		imageMat.SetFloat("_HeightRate", heightRate);
    		imageMat.SetFloat("_XOffset", xOffsetRate);
    		imageMat.SetFloat("_YOffset", yOffsetRate);
    	}
    }
    
    

    shader代码

    Shader "Custom/UI/Flowlight" {
    	Properties {
    		[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
            _Color("Tint", Color) = (1, 1, 1, 1)
            [MaterialToggle] PixelSnap("Pixel snap", float) = 0
    
            /* Flowlight */
            _FlowlightColor("Flowlight Color", Color) = (1, 0, 0, 1)
            _Lengthlitandlar("LangthofLittle and Large", range(0,0.5)) = 0.005
            _MoveSpeed("MoveSpeed", float) = 5
            _Power("Power", float) = 1
            _LargeWidth("LargeWidth", range(0,0.005)) = 0.0035
            _LittleWidth("LittleWidth", range(0,0.001)) = 0.002
    		_SkewRadio("SkewRadio", Range(0, 1)) = 0.2//倾斜度,0-1
    		_MoveTime("MoveTime", float) = 0//控制扫光显示的位置,0-1
            /* --------- */
    
    		_WidthRate("WidthRate",float) = 0
    		_XOffset("XOffset",float) = 0
    		_HeightRate("HeightRate",float) = 0
    		_YOffset("YOffset",float) = 0
    
            /* UI */
            _StencilComp("Stencil Comparison", Float) = 8
            _Stencil("Stencil ID", Float) = 0
            _StencilOp("Stencil Operation", Float) = 0
            _StencilWriteMask("Stencil Write Mask", Float) = 255
            _StencilReadMask("Stencil Read Mask", Float) = 255
            _ColorMask("Color Mask", Float) = 15
            /* -- */
    	}
    	SubShader {
    		Tags { 
    			"Queue" = "Transparent"
    			"IgnoreProjector" = "True"
    			"RenderType" = "Transparent"
    			"PreviewType" = "Plane"
    			"CanUseSpriteAtlas" = "True"
    		}
    		Cull Off
            Lighting Off
            ZWrite Off
            Blend One OneMinusSrcAlpha
            ColorMask[_ColorMask]
    
    		/* UI */
            Stencil{
                Ref[_Stencil]
                Comp[_StencilComp]
                Pass[_StencilOp]
                ReadMask[_StencilReadMask]
                WriteMask[_StencilWriteMask]
            }
            /* -- */
    
    		Pass {
    			CGPROGRAM
    			#pragma vertex vert
    			#pragma fragment frag
    			#pragma multi_compile _ PIXELSNAP_ON
    			#include "UnityCG.cginc"
    
            	struct appdata_t {
    				float4 vertex : POSITION;
    				float4 color : COLOR;
    				float2 texcoord : TEXCOORD0;
        		};
    
    			struct v2f {
    				float4 vertex : SV_POSITION;
    				fixed4 color : COLOR;
    				half2 texcoord : TEXCOORD0;
    				float4 worldPosition: TEXCOORD1;
    			};
    
    			fixed4 _Color;
    			/* Flowlight */
    			float _Power;
    			float _LargeWidth;
    			float _LittleWidth;
    			float _Lengthlitandlar;
    			float _MoveSpeed;
    			float _SkewRadio;
    			float _MoveTime;
    			fixed4 _FlowlightColor;
    			/* --------- */
    			float _UVPosX;
    			v2f vert(appdata_t IN) {
    				v2f OUT;
    				OUT.worldPosition = IN.vertex;
    				OUT.vertex = UnityObjectToClipPos(IN.vertex);
    				OUT.texcoord = IN.texcoord;
    				OUT.color = IN.color * _Color;
    
    				#ifdef PIXELSNAP_ON
    				OUT.vertex = UnityPixelSnap(OUT.vertex);
    				#endif
    
    				return OUT;
    			}
    
    			sampler2D _MainTex;
    			float4 _MainTex_ST;
    			float _WidthRate;
    			float _XOffset;
    			float _HeightRate;
    			float _YOffset;
    
    			bool _UseClipRect;
    			float4 _ClipRect;
    			float _ClipSoftX;
    			float _ClipSoftY;
        		fixed4 frag(v2f IN) : SV_Target {
            		fixed4 c = tex2D(_MainTex, IN.texcoord);
    				//这里加了个判断,是否有半透明。当然可以根据自己的需要,通过半透明度去计算最终的结果达到目的
    				if (c.a == 1){
    					/*使用裁剪*/
    					if (_UseClipRect)
    					{
    						float2 factor = float2(0.0, 0.0);
    						float2 tempXY = (IN.worldPosition.xy - _ClipRect.xy) / float2(_ClipSoftX, _ClipSoftY)*step(_ClipRect.xy, IN.worldPosition.xy);
    						factor = max(factor, tempXY);
    						float2 tempZW = (_ClipRect.zw - IN.worldPosition.xy) / float2(_ClipSoftX, _ClipSoftY)*step(IN.worldPosition.xy, _ClipRect.zw);
    						factor = min(factor, tempZW);
    						c.a *= clamp(min(factor.x, factor.y), 0.0, 1.0);
    					}
    					/* --------- */
    				
    					/* Flowlight */
    					//计算流动的标准uvX从-0.5到1.5范围
    					_UVPosX = _XOffset + (fmod(_MoveTime*_MoveSpeed, 1) * 2 - 0.5)* _WidthRate;
    					//标准uvX倾斜
    					_UVPosX += (IN.texcoord.y - _HeightRate*0.5- _YOffset)*_SkewRadio;
    					//以下是计算流光在区域内的强度,根据到标准点的距离的来确定强度,为了使变化更柔和非线性,使用距离平方或者sin函数也可以
    					float lar = pow(1 - _LargeWidth*_WidthRate, 2);
    					float lit = pow(1 - _LittleWidth*_WidthRate, 2);
    					//第一道流光,可以累加任意条,如下
    					fixed4 cadd = _FlowlightColor* saturate((1 - saturate(pow(_UVPosX - IN.texcoord.x,2))) - lar)*_Power /(1-lar);
    					cadd += _FlowlightColor* saturate((1 - saturate(pow(_UVPosX - _Lengthlitandlar*_WidthRate - IN.texcoord.x, 2))) - lit)*_Power/ (1-lit);
    					
    					cadd.rgb *= cadd.a;
    					
    					c.rgb += cadd.rgb;
    					/* --------- */
    				}
    				c.rgb *= c.a;
            		return c;
        		}
            	ENDCG
        	}
    	}
    }
    
    更多相关内容
  • 波动实例 (shader2.0 顶点着色器) y=Asin(ωx+φ) φ:决定波形与X轴位置关系或横向移动距离(左加右减) ω:决定周期(最小正周期T=2π/∣ω∣) A:决定峰值(即纵向拉伸压缩的倍数) 模型波动(顶点卓思琪) 顶点...

    屏幕后期特效:

    场景渲染完以后在添加一些特效。
    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
    		}
    	}
    }
    
    

    生命周期
    在这里插入图片描述
    在这里插入图片描述

    Blood 血液闪烁特效:

    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
    		}
    	}
    }
    
    
    展开全文
  • 动态水面波纹shader特效
  • Shader特效之图片波动炫光效果

    千次阅读 2021-12-18 17:59:20
    今天给大家介绍一个非常炫酷的UV流光特效。可以用于UI的Image的图片波动+炫光的效果。 2.素材 素材1:主图片,用于效果的主体显示和波动颜色 素材2:噪波图,用于干扰主图渲染UV的干扰图,控制显示流动效果 3.UV...

    1.前言

    今天给大家介绍一个非常炫酷的UV流光特效。可以用于UI的Image的图片波动+炫光的效果。
    效果使用ShaderForge实现的,原因是ShaderForge可以很方便的导出源码,而ShaderGraph不可以。
    ShaderForge虽然对Unity新版本不再支持了,但是这个仓库:ShaderForge,作者兼容了很多新版本的Unity,我们依然还是可以使用。
    请添加图片描述

    2.素材

    素材1:主图片,用于效果的主体显示和波动颜色
    请添加图片描述

    素材2:噪波图,用于干扰主图渲染UV的干扰图,控制显示流动效果
    请添加图片描述

    3.UV波动效果

    普通的UV波动效果如下图所示:
    请添加图片描述

    下面是再ShaderForge中使用节点链接的,逻辑非常简单清晰
    请添加图片描述

    4.波动+炫光效果

    我们也可以根据自己的需要,给shader添加不同的参数,比如炫光,颜色叠加等。比如看下我加的炫光效果如下:
    白色流光:
    请添加图片描述
    彩色炫光:
    请添加图片描述
    ShaderForge实现:
    请添加图片描述

    5.UV流动原理

    使用了时间节点Time和自定义参数pannerUV,来控制图片的UV流动,其中噪波图的流动和主图的流动原理一样。详见下图:
    请添加图片描述

    6.参数解释

    请添加图片描述
    tex1_pannerUV:噪波图的uv流动速度
    tex2_pannerUV:主图的uv流动速度,例子中是0,不需要主图流动
    disturbance_stronger:噪波图的强度,可以是扰动更剧烈
    flow_color:炫光的颜色
    t1_stronger:噪波产生的炫光的强度
    t2_stronger:主图的亮度

    7.Shader源码

    最后我们贴出Shader的源码,让大家可以直接使用:

    Shader "Shader Forge/uv_flow_pure" {
        Properties {
            _Tex1 ("Tex1", 2D) = "white" {}
            _Tex2 ("Tex2", 2D) = "white" {}
            _tex1_panner_U ("tex1_panner_U", Range(-5, 5)) = 0.1
            _tex1_panner_V ("tex1_panner_V", Range(-5, 5)) = 0.1
            _tex2_panner_U ("tex2_panner_U", Range(-5, 5)) = 0
            _tex2_panner_V ("tex2_panner_V", Range(-5, 5)) = 0
            _disturbance_stronger ("disturbance_stronger", Range(0, 5)) = 0.2
            _flow_color ("flow_color", Color) = (1,1,1,1)
            _t1_stronger ("t1_stronger", Range(0, 10)) = 1
            _t2_stronger ("t2_stronger", Range(0, 10)) = 1
        }
        SubShader {
            Tags {
                "RenderType"="Opaque"
            }
            Pass {
                Name "FORWARD"
                Tags {
                    "LightMode"="ForwardBase"
                }
                
                
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #pragma multi_compile_instancing
                #include "UnityCG.cginc"
                #pragma multi_compile_fwdbase_fullshadows
                #pragma target 3.0
                uniform sampler2D _Tex1; uniform float4 _Tex1_ST;
                uniform sampler2D _Tex2; uniform float4 _Tex2_ST;
                UNITY_INSTANCING_BUFFER_START( Props )
                    UNITY_DEFINE_INSTANCED_PROP( float, _tex1_panner_U)
                    UNITY_DEFINE_INSTANCED_PROP( float, _disturbance_stronger)
                    UNITY_DEFINE_INSTANCED_PROP( float, _t2_stronger)
                    UNITY_DEFINE_INSTANCED_PROP( float, _tex1_panner_V)
                    UNITY_DEFINE_INSTANCED_PROP( float, _tex2_panner_V)
                    UNITY_DEFINE_INSTANCED_PROP( float, _tex2_panner_U)
                    UNITY_DEFINE_INSTANCED_PROP( float, _t1_stronger)
                    UNITY_DEFINE_INSTANCED_PROP( float4, _flow_color)
                UNITY_INSTANCING_BUFFER_END( Props )
                struct VertexInput {
                    UNITY_VERTEX_INPUT_INSTANCE_ID
                    float4 vertex : POSITION;
                    float2 texcoord0 : TEXCOORD0;
                    float4 vertexColor : COLOR;
                };
                struct VertexOutput {
                    float4 pos : SV_POSITION;
                    UNITY_VERTEX_INPUT_INSTANCE_ID
                    float2 uv0 : TEXCOORD0;
                    float4 vertexColor : COLOR;
                };
                VertexOutput vert (VertexInput v) {
                    VertexOutput o = (VertexOutput)0;
                    UNITY_SETUP_INSTANCE_ID( v );
                    UNITY_TRANSFER_INSTANCE_ID( v, o );
                    o.uv0 = v.texcoord0;
                    o.vertexColor = v.vertexColor;
                    o.pos = UnityObjectToClipPos( v.vertex );
                    return o;
                }
                float4 frag(VertexOutput i) : COLOR {
                    UNITY_SETUP_INSTANCE_ID( i );
    // Lighting:
                    float _t1_stronger_var = UNITY_ACCESS_INSTANCED_PROP( Props, _t1_stronger );
                    float _tex1_panner_U_var = UNITY_ACCESS_INSTANCED_PROP( Props, _tex1_panner_U );
                    float _tex1_panner_V_var = UNITY_ACCESS_INSTANCED_PROP( Props, _tex1_panner_V );
                    float4 node_5719 = _Time;
                    float2 node_2527 = ((float2(_tex1_panner_U_var,_tex1_panner_V_var)*node_5719.g)+i.uv0); // UV流动
                    float4 _Tex1_var = tex2D(_Tex1,TRANSFORM_TEX(node_2527, _Tex1)); // 噪波干扰
                    float _disturbance_stronger_var = UNITY_ACCESS_INSTANCED_PROP( Props, _disturbance_stronger );
                    float node_6101 = (_Tex1_var.r*_disturbance_stronger_var);
                    float4 _flow_color_var = UNITY_ACCESS_INSTANCED_PROP( Props, _flow_color );
                    float _tex2_panner_U_var = UNITY_ACCESS_INSTANCED_PROP( Props, _tex2_panner_U );
                    float _tex2_panner_V_var = UNITY_ACCESS_INSTANCED_PROP( Props, _tex2_panner_V );
                    float4 node_7472 = _Time;
                    float2 node_326 = (node_6101+((float2(_tex2_panner_U_var,_tex2_panner_V_var)*node_7472.g)+i.uv0));
                    float4 _Tex2_var = tex2D(_Tex2,TRANSFORM_TEX(node_326, _Tex2)); // 叠加效果
                    float _t2_stronger_var = UNITY_ACCESS_INSTANCED_PROP( Props, _t2_stronger );
                    float3 finalColor = (i.vertexColor.rgb*((_t1_stronger_var*node_6101*_flow_color_var.rgb)+_Tex2_var.rgb)*_t2_stronger_var);
                    return fixed4(finalColor,1);
                }
                ENDCG
            }
        }
        FallBack "Diffuse"
        CustomEditor "ShaderForgeMaterialInspector"
    }
    

    好了,这篇文章就到这里,希望对你有所帮助

    展开全文
  • creator2.4.4shader特效.zip

    2021-03-05 10:46:32
    渐变shader特效 文字波浪运动特效 头像裁剪特效 图片镂空特效 高斯模糊特效 图片描边效果 文字打印效果
  • Shader特效】—— 爆炸,沙化

    千次阅读 2019-04-28 19:37:10
    终于可以自己写一些简单的shader特效了,今天用一个并不常用的几何着色器来做一个简单的爆炸,沙化的特效。调节shader参数之后会得到各种好玩的东西。 ...

      终于可以自己写一些简单的shader特效了,今天用一个并不常用的几何着色器来做一个简单的爆炸,沙化的特效。调节shader参数之后会得到各种好玩的东西。

    烟花爆炸

      有初速度,加速度为负的。
      这个还不是很像,可以加上重力加速度以及对各方向的加速度做随机可以让它看起来不那么圆。这个特效用的模型是Unity内置的球,更换一些奇怪的模型并调节加速度和初速度后可以得到一些意想不到的效果。
    效果

    模型沙化

    初速度为0,加速度大于0,还是挺由意思的。
    在这里插入图片描述
    在这里插入图片描述

    Shader代码

    // 模型粒子化效果
    Shader "Custom/Particles"
    {
        Properties
        {
            _MainTex ("Texture", 2D) = "white" {}
    		_InitSpeed("Init Speed", Float) = 0
    		_Acceleration("Acceleration", Float) = 5
            _ContinueTime("Current Time",Int) = 2
            _Color("Color",Color) = (1,1,1,1)
        }
        SubShader
        {
            Pass{
                Tags { "RenderType"="Opaque" }
    
                CGPROGRAM
                
                #pragma vertex vert
                #pragma geometry geom
                #pragma fragment frag
    
                sampler2D _MainTex;
                float _InitSpeed;
                float _Acceleration;
                float _ContinueTime;
                fixed4 _Color;
    
                struct a2v{
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                };
    
                struct v2g{
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                };
    
                struct g2f{
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                };
    
                v2g vert(a2v v){
                    v2g o;
                    o.vertex = v.vertex;
                    o.uv = v.uv;
                    return o;
                }
    
                // 定义输出顶点的最大数量
                [maxvertexcount(1)]
                void geom(triangle v2g IN[3], inout PointStream<g2f> pointStream){
                    g2f o;
                    float3 v1 = IN[1].vertex - IN[0].vertex;
                    float3 v2 = IN[2].vertex - IN[0].vertex;
    
                    float3 normal = normalize(cross(v1,v2));
                    float3 pos = (IN[0].vertex + IN[1].vertex + IN[2].vertex) / 3;
    
                    float time = _Time.y % _ContinueTime;
                    pos += normal * (_InitSpeed * time + 0.5 * _Acceleration * pow(time, 2));
    
                    o.vertex = UnityObjectToClipPos(pos);
    
                    o.uv = (IN[0].uv + IN[1].uv + IN[2].uv) / 3;
    
                    pointStream.Append(o);
                }
    
                fixed4 frag (g2f i) : SV_Target
                {
                    fixed4 color = tex2D(_MainTex, i.uv) * _Color;
                    return color;
                }
    
                ENDCG
            }
            
        }
        FallBack "Diffuse"
    }
    
    
    展开全文
  • UIshader特效,马赛克,光边,闪现,Effect-ColorSub,Effect-ColorAdd等等,
  • 目前已实现效果 2D换装震屏效果+动画恢复第一帧预览二维码融球效果(shader)元球也叫融球,它能够让两个球体产生“黏糊糊”的效果,是流体,融合等效果的实现基础,异名这次实现的demo是一个固定的大圆,然后手指...
  • Unity Shader特效:模型溶解、燃烧

    万次阅读 2018-03-05 23:38:24
    半年前看的一篇讲溶解特效的文章,然而只讲思路,没有源文件,最近挺流行这种特效的,决定尝试一下。 最后结合网络上一些不成熟的例子和文章的思路,写了一个表面着色器Shader,效果挺不错的,达到了要求,这里记录...
  • 角色身上的流光shader,可以变换颜色和强度范围 替换任意的材质,然后将文件内的黑白图片附在fluLightTex后使用
  • Shader界面图: 因为特效师的攻击特效做得过为酷炫,不够朴素,于是打算增加“愤怒状态”这一设定,然后就需要一个特效来支撑这一设定。 上网查了一些文章,一开始想做边缘光的特效,发现效果不太理想,最...
  • shader特效整理

    2019-02-27 14:17:47
    【GLSL教程】(一)图形流水线 【GLSL教程】(二)在OpenGL中使用GLSL OpenGL纹理详解(上)(https://www.jianshu.com/p/1829b4acc58d) 游戏中的3D数学知识之法线...Unity Shader-法线贴图(Normal)及其原理 - CSD...
  • Shader特效

    2018-09-14 13:57:00
    Shader特效——“水彩画”的实现【GLSL】 【ShaderToy】水彩画 Android OpenGLES2.0(十二)——FBO离屏渲染 GPU-Accelerated Image Processing 深度学习AI美颜系列----AI美发算法(美妆相机/天天P图染发特效) ...
  • 实际上用Shader也可以很简单地实现这个效果,并且还可以简化场景节点结构以及表现和逻辑的结耦合。 效果图 实现方式 首先要对用作背景的图片启用repeat模式 代码如下 shader_type canvas_i...
  • threejs-shader-materials Three.js的着色器材料集合 演示版 入门 安装 npm install https://github.com/MasatoMakino/threejs-shader-materials.git --save-dev 进口 threejs-shader-materials由ES6模块和...
  • Shader特效】—— 音符跳动

    千次阅读 2019-04-29 21:01:15
      之前在看B站上看到unity官方用Shader Graph做的一个模型随音乐跳动的教程,想着直接用Shader代码实现一下吧,最后实现效果如下,配合之前的烟花效果,还有点KTV的感觉。示例工程和c#脚本在Shader学习笔记 ...
  • Cocos Shader入门基础五:是纹理给了你这个花花世界!
  • Shader实现的闪电效果特效

    热门讨论 2011-03-23 21:25:50
    Shader Model发展史上,从SM 1.0进化到SM 2.0称得上是真正意义上的技术革命,后者赋予了显示芯片强大的能力,人们在游戏中也领略到前所未有的视觉体验,例如水面光影和雾化等特效的出现使游戏场景更真实。...
  • three.js抗锯齿平面扩散波
  • Shader特效】—— UI 溶解

    千次阅读 2020-04-19 20:22:04
    前两天在shadertoy上看到了一个图片溶解的效果,移植到unity中并做了一些改动。 1.效果 2.shader Shader "Custom/UI/Dissolve" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("MainTex", 2D)...
  • unity Shader Forge 1.38特效插件 可用 谢谢大家的支持
  • Godot Shader特效:流光效果

    千次阅读 2019-09-01 08:41:31
    效果图 ...shader_type canvas_item; uniform sampler2D light_vector; uniform float width = 0.08; void fragment(){ vec4 color = texture(TEXTURE,UV); if(color.a != 0.0){ float...
  • Shader 实例详解,揭秘酷炫特效背后的算法,一起感受算法之美+数学之美 —— CSDN 专栏 “ShaderJoy”
  • Unity Shader特效:遮挡显示

    千次阅读 2018-03-06 14:23:50
    写于2017-6-7,转载请注明 以下是正文 ……………………………………………………………………………………………… 先上效果: 这是游戏中常用的特效之一。原以为挺简单的,没想到几乎...Shader "Custom/Sh...
  • 基于webgl开发的粒子特效,喷泉效果,包括喷泉的gltf模型,粒子图片以及完整vue组件代码
  • // 闪光特效 /** 01、当两站纹理都不透明进行叠加 02、一个透明,一个不透明,以背景色为主 03、都不透明 就不透明 **/ Shader "Study/04-FlashShader" { Properties { _MainTex ("Texture", 2D) = "white" {} ...
  • 我的顶点着色器的代码如下: #version 400 #extension GL_ARB_separate_shader_objects : enable #extension GL_ARB_shading_language_420pack : enable layout (push_constant) uniform constantVals { mat4 mvp;...
  • Shader实现海水波浪GLSL源码,通过修改unityshader植入相关代码便可实现。
  • Shader特效:流光效果

    千次阅读 2019-11-02 10:31:08
    shader_type canvas_item; uniform sampler2D light_vector; uniform float width = 0.08; void fragment(){ vec4 color = texture(TEXTURE,UV); if(color.a != 0.0){ float v = texture...
  • //CheckShaderAndCreateMaterial函数接受两个参数,第一个参数指定了改特效需要使用的Shader //第二个参数则是用于后期处理的材质。该函数首先检查Shader的可用性,检查通过后就返回一个使 //用了该shader的材质...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,985
精华内容 4,794
关键字:

shader 特效