shader 扫描

本文介绍全息扫描Shader的实现,适用于电脑端,详细阐述了该Shader的两个关键控制参数。遗憾的是,目前该Shader不支持移动端,期待有经验的大佬进行改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全息扫描shader 从上至下

电脑端很棒,需要控制两个参数,不会发动图,抱歉,目前不支持移动端,如果有大佬能改下就更好了

  shader  全息 扫描
在这里插入代码片
// Note: Manually altering this data may prevent you from opening it in Shader Forge


Shader "Kaima/Dissolve/DirectionAsh" {
    Properties {
        _MainTex ("MainTex", 2D) = "white" {}
        _NormalMap ("NormalMap", 2D) = "bump" {}
        _EmissionTex ("EmissionTex", 2D) = "white" {}
        [HDR]_EmissionColor ("EmissionColor", Color) = (0.5,0.5,0.5,1)
        _EmissionLineWidth ("EmissionLineWidth", Range(0, 1)) = 0.739786
        [MaterialToggle] _OppositeDir ("OppositeDir", Float ) = 1
        _EmissionLineSpeed_U ("EmissionLineSpeed_U", Range(-1, 1)) = 0.04
        _EmissionLineSpeed_V ("EmissionLineSpeed_V", Range(-1, 1)) = -0.2
        _Fresnel ("Fresnel", Range(0, 5)) = 0
        [HDR]_FresnelColor ("Fresnel Color", Color) = (0.1544118,0.5451315,1,1)
        [MaterialToggle] _Refraction ("Refraction", Float ) = 1
        _RefractionStrength ("RefractionStrength", Range(0, 1)) = 0.06843606
        _TexColorLerp ("TexColorLerp", Range(0, 1)) = 0
        [MaterialToggle] _AddNoise ("AddNoise", Float ) = 1
        _NoiseColor ("NoiseColor", Color) = (0.5,0.5,0.5,1)
        _NoiseSpeed ("NoiseSpeed", Range(-1, 1)) = 0.4512348
        _NoiseSize ("NoiseSize", Range(1, 5)) = 2.572649
        [MaterialToggle] _AddLine ("AddLine", Float ) = 1
        _LineWidth ("LineWidth", Range(1, 10)) = 6.336524
        _LineTiling ("LineTiling", Float ) = 10
        _LineSpeed ("LineSpeed", Range(-10, 10)) = -2
        _LineBrightness ("LineBrightness", Range(1, 20)) = 2
        _DissolveMask ("DissolveMask", 2D) = "white" {}
        _Switch ("Switch", Range(0, 1)) = 1
        _GlobalAlpha ("GlobalAlpha", Range(0, 1)) = 1
        [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
    }
    SubShader {
        Tags {
            "IgnoreProjector"="True"
            "Queue"="Transparent"
            "RenderType"="Transparent"
        }
        GrabPass{ }
        Pass {
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"
            }
            Blend SrcAlpha OneMinusSrcAlpha
            ZWrite Off
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
           // #define UNITY_PASS_FORWARDBASE
            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase
            #pragma multi_compile_fog
            #pragma only_renderers d3d9 d3d11 glcore gles metal xboxone ps4 
            #pragma target 3.0
            uniform sampler2D _GrabTexture;
            uniform fixed _EmissionLineWidth;
            uniform half _Fresnel;
            uniform fixed4 _FresnelColor;
            uniform sampler2D _MainTex; uniform float4 _MainTex_ST;
            uniform sampler2D _EmissionTex; uniform float4 _EmissionTex_ST;
            uniform fixed4 _EmissionColor;
            uniform fixed _Switch;
            uniform sampler2D _NormalMap; uniform float4 _NormalMap_ST;
            uniform fixed _Refraction;
            uniform fixed _RefractionStrength;
            uniform sampler2D _DissolveMask; uniform float4 _DissolveMask_ST;
            uniform fixed _TexColorLerp;
            uniform fixed _NoiseSpeed;
            uniform half _NoiseSize;
            uniform fixed4 _NoiseColor;
            uniform fixed _AddNoise;
            uniform half _LineWidth;
            uniform half _LineTiling;
            uniform float _LineSpeed;
            uniform half _LineBrightness;
            uniform fixed _AddLine;
            uniform fixed _EmissionLineSpeed_U;
            uniform fixed _EmissionLineSpeed_V;
            uniform fixed _GlobalAlpha;
            uniform fixed _OppositeDir;
            struct VertexInput {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
                float4 tangent : TANGENT;
                float2 texcoord0 : TEXCOORD0;
                float2 texcoord1 : TEXCOORD1;
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
                float2 uv0 : TEXCOORD0;
                float2 uv1 : TEXCOORD1;
                float4 posWorld : TEXCOORD2;
                float3 normalDir : TEXCOORD3;
                float3 tangentDir : TEXCOORD4;
                float3 bitangentDir : TEXCOORD5;
                float4 projPos : TEXCOORD6;
                UNITY_FOG_COORDS(7)
            };
            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.uv0 = v.texcoord0;
                o.uv1 = v.texcoord1;
                o.normalDir = UnityObjectToWorldNormal(v.normal);
                o.tangentDir = normalize( mul( unity_ObjectToWorld, float4( v.tangent.xyz, 0.0 ) ).xyz );
                o.bitangentDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w);
                o.posWorld = mul(unity_ObjectToWorld, v.vertex);
                o.pos = UnityObjectToClipPos( v.vertex );
                UNITY_TRANSFER_FOG(o,o.pos);
                o.projPos = ComputeScreenPos (o.pos);
                COMPUTE_EYEDEPTH(o.projPos.z);
                return o;
            }
            float4 frag(VertexOutput i) : COLOR {
                i.normalDir = normalize(i.normalDir);
                float3x3 tangentTransform = float3x3( i.tangentDir, i.bitangentDir, i.normalDir);
                float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
                half3 _NormalMap_var = UnpackNormal(tex2D(_NormalMap,TRANSFORM_TEX(i.uv0, _NormalMap)));
                float3 normalLocal = _NormalMap_var.rgb;
                float3 normalDirection = normalize(mul( normalLocal, tangentTransform )); // Perturbed normals
                float2 sceneUVs = (i.projPos.xy / i.projPos.w) + (_GlobalAlpha*(lerp(fixed3(0,0,1),(_NormalMap_var.rgb*normalDirection*0.5),_RefractionStrength)*_Refraction).rg);
                float4 sceneColor = tex2D(_GrabTexture, sceneUVs);
// Lighting:
// Emissive:
                half4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(i.uv0, _MainTex));
                half Fresned = pow(1.0-max(0,dot(normalDirection, viewDirection)),exp(_Fresnel));
                float4 Time = _Time;
                half speedMul = 10.0;
                float2 objUV = float2(i.uv1.r,(i.uv1.g*100.0));
                half2 Noise_1 = objUV.rg;
                half NoiseSizeRemap = (_NoiseSize*-49.9875+249.9875);
                half2 Noise_2 = objUV.rg;
                float2 NoiseUV = (floor(((_NoiseSpeed*Time.g*speedMul)+float2((Noise_1.r*1.2*NoiseSizeRemap),(abs(sin(Noise_1.g))*NoiseSizeRemap))))+floor((float2((NoiseSizeRemap*0.5*Noise_2.r),(NoiseSizeRemap*abs(sin(Noise_2.g))))+((-1*_NoiseSpeed)*Time.g*speedMul))));
                float2 NoiseAppend_skew = NoiseUV + 0.2127+NoiseUV.x*0.3713*NoiseUV.y;
                float2 NoiseAppend_rnd = 4.789*sin(489.123*(NoiseAppend_skew));
                float NoiseAppend = frac(NoiseAppend_rnd.x*NoiseAppend_rnd.y*(1+NoiseAppend_skew.x));
                float node_3180 = pow((NoiseAppend*1.2),2.5);
                half UV_Y = i.uv1.g;
                float2 node_703 = (i.uv1+float2((_EmissionLineSpeed_U*Time.g),(Time.g*_EmissionLineSpeed_V)));
                fixed4 _DissolveMask_var = tex2D(_DissolveMask,TRANSFORM_TEX(node_703, _DissolveMask));
                fixed MaskAdd = (((lerp( UV_Y, (1.0 - UV_Y), _OppositeDir )+(_Switch*1.7+-1.1))*(_EmissionLineWidth*-45.0+50.0))+dot(_DissolveMask_var.rgb,float3(0.3,0.59,0.11)));
                half DisMask = saturate((0.25+MaskAdd));
                float4 node_5597 = _Time;
                fixed2 EmissionUV = (i.uv1+node_5597.g*float2(0,-0.15));
                fixed4 _EmissionTex_var = tex2D(_EmissionTex,TRANSFORM_TEX(EmissionUV, _EmissionTex));
                float3 emissive = (lerp(_MainTex_var.rgb,(lerp(_EmissionColor.rgb,((_MainTex_var.rgb*_EmissionColor.rgb*_EmissionColor.a)+(_FresnelColor.rgb*Fresned)),_TexColorLerp)+(_NoiseColor.rgb*node_3180*_AddNoise)+(_NoiseColor.rgb*_LineBrightness*saturate((1.0 - (abs(sin(((Time.g*_LineSpeed)+(i.uv1.g*_LineTiling))))*(_LineWidth*-11.0+111.0))))*_AddLine*node_3180)),DisMask)+(_EmissionTex_var.rgb*_EmissionColor.rgb*saturate((1.0 - abs(MaskAdd)))));
                float3 finalColor = emissive;
                fixed4 finalRGBA = fixed4(lerp(sceneColor.rgb, finalColor,(_FresnelColor.a*lerp(1.0,(Fresned+_EmissionColor.a),DisMask)*_GlobalAlpha)),1);
                UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
                return finalRGBA;
            }
            ENDCG
        }
    }
    FallBack "Particles/Additive"
    CustomEditor "ShaderForgeMaterialInspector"
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值