zoukankan      html  css  js  c++  java
  • unity shader 波动圈

    c#

    ////////////////////////////////////////////
    // CameraFilterPack - by VETASOFT 2018 /////
    ////////////////////////////////////////////
    
    using UnityEngine;
    using System.Collections;
    [ExecuteInEditMode]
    [AddComponentMenu ("Camera Filter Pack/Distortion/ShockWave Manual")]
    public class CameraFilterPack_Distortion_ShockWaveManual : MonoBehaviour {
    #region Variables
    public Shader SCShader;
    private float TimeX = 1.0f;
     
    private Material SCMaterial;
    [Range(-1.5f, 1.5f)]
    public float PosX = 0.5f;
    [Range(-1.5f, 1.5f)]
    public float PosY = 0.5f;
    [Range(-0.1f, 2f)]
    public float Value = 0.5f;
    [Range(0f, 10f)]
    public float Size = 1f;
    
    #endregion
    #region Properties
    Material material
    {
    get
    {
    if(SCMaterial == null)
    {
    SCMaterial = new Material(SCShader);
    SCMaterial.hideFlags = HideFlags.HideAndDontSave;
    }
    return SCMaterial;
    }
    }
    #endregion
    void Start ()
    {
    
    SCShader = Shader.Find("CameraFilterPack/Distortion_ShockWaveManual");
    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", PosX);
    material.SetFloat("_Value2", PosY);
    material.SetFloat("_Value3", Value);
    material.SetFloat("_Value4", Size);
    material.SetVector("_ScreenResolution",new Vector4(sourceTexture.width,sourceTexture.height,0.0f,0.0f));
    Graphics.Blit(sourceTexture, destTexture, material);
    }
    else
    {
    Graphics.Blit(sourceTexture, destTexture);
    }
    }
    void Update ()
    {
    
    #if UNITY_EDITOR
    if (Application.isPlaying!=true)
    {
    SCShader = Shader.Find("CameraFilterPack/Distortion_ShockWaveManual");
    }
    #endif
    }
    void OnDisable ()
    {
    if(SCMaterial)
    {
    DestroyImmediate(SCMaterial);
    }
    }
    }

    shader

    // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
    
    ////////////////////////////////////////////
    // CameraFilterPack - by VETASOFT 2018 /////
    ////////////////////////////////////////////
    
    Shader "CameraFilterPack/Distortion_ShockWaveManual" 
    { 
        Properties 
        {
            _MainTex ("Base (RGB)", 2D) = "white" {}
            _TimeX ("Time", Range(0.0, 1.0)) = 1.0
            _ScreenResolution ("_ScreenResolution", Vector) = (0.,0.,0.,0.)
        }
        SubShader
        {
            Pass
            {
                Cull Off ZWrite Off ZTest Always
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #pragma fragmentoption ARB_precision_hint_fastest
                #pragma target 3.0
                #pragma glsl
                #include "UnityCG.cginc"
                uniform sampler2D _MainTex;
                uniform float _TimeX;
                uniform float _Value;//x坐标
                uniform float _Value2;//y坐标
                uniform float _Value3;//圈的大小
                uniform float _Value4;//强度
                uniform float4 _ScreenResolution;
                struct appdata_t
                {
                    float4 vertex   : POSITION;
                    float4 color    : COLOR;
                    float2 texcoord : TEXCOORD0;
                };
                struct v2f
                {
                    float2 texcoord  : TEXCOORD0;
                    float4 vertex   : SV_POSITION;
                    float4 color    : COLOR;
                };
                v2f vert(appdata_t IN)
                {
                    v2f OUT;
                    OUT.vertex = UnityObjectToClipPos(IN.vertex);
                    OUT.texcoord = IN.texcoord;
                    OUT.color = IN.color; 
                    return OUT;
                }
                half4 _MainTex_ST;
                float4 frag(v2f i) : COLOR
                {
                    float2 uvst = UnityStereoScreenSpaceUVAdjust(i.texcoord, _MainTex_ST);
                    float2 uv = uvst.xy;
                    float Dist = distance(uv, float2(_Value, _Value2));
                    float Diff = (Dist - _Value3);
                    float v = (1.0 - pow(abs(Diff * 10.0), 0.8));
                    
                    float vt = saturate(v * 0.02 * _Value4);
                    uv.x = uv.x - vt;
                    uv.y = uv.y - vt;
                    
                    float4 Color = tex2D(_MainTex, uv);
                    Color.rgb += float3(vt, vt, vt);
                    return Color; 
                }
                ENDCG
            }
        }
    }

  • 相关阅读:
    innodb next-key lock
    kafka-0.9
    aggregations 详解1(概述)
    mapping 详解5(dynamic mapping)
    mapping 详解4(mapping setting)
    mapping 详解3(Meta-Fields)
    mapping 详解2(field datatypes)
    mapping 详解1(mapping type)
    分布式 ES 操作流程解析
    ES 中的那些坑
  • 原文地址:https://www.cnblogs.com/sanyejun/p/11636843.html
Copyright © 2011-2022 走看看