Wings of Tirael

Hi there. Want to share my shader for wing of Tirael from game Diablo 3. Its not perfectly adjusted for game and not so optimized (special for mobiles), but it can take you a knowelage how to make such effect. Shader was made by shader forge 1.24.
To make it work you need to create a simple plane in 3dmax(or other 3d editor) with 10x3 edges or create it unity. After that create material and select that shader. Use textures below to create such single wing and thats it. In unity set "alpha is transparency" in inspector or create your alpha chanel for internal texture and alpha clip texture. Notice that internal texture was gotten from google search, it consist watermark and cannot be used in commercial. After that just copy/paste some wings in scene for making it more complex.
If you dont have shader forge you can skip text in this /* ...*/ borders before shader text itself. It needs by shader forge to initialize shader.








Shadercode itself:

/*SF_DATA;ver:1.24;sub:START;pass:START;ps:flbk:,iptp:0,cusa:False,bamd:0,lico:1,lgpr:1,limd:0,spmd:1,trmd:0,grmd:0,uamb:True,mssp:True,bkdf:False,hqlp:False,rprd:False,enco:False,rmgx:True,rpth:0,vtps:0,hqsc:True,nrmq:1,nrsp:0,vomd:0,spxs:False,tesm:0,olmd:1,culm:2,bsrc:3,bdst:7,dpts:2,wrdp:False,dith:0,rfrpo:True,rfrpn:Refraction,coma:15,ufog:False,aust:True,igpj:True,qofs:0,qpre:3,rntp:2,fgom:False,fgoc:False,fgod:False,fgor:False,fgmd:0,fgcr:0.5,fgcg:0.5,fgcb:0.5,fgca:1,fgde:0.01,fgrn:0,fgrf:300,stcl:False,stva:128,stmr:255,stmw:255,stcp:6,stps:0,stfa:0,stfz:0,ofsf:0,ofsu:0,f2p0:False,fnsp:False,fnfb:False;n:type:ShaderForge.SFN_Final,id:3138,x:33086,y:32725,varname:node_3138,prsc:2|emission-9921-OUT,alpha-2800-OUT,voffset-8926-OUT;n:type:ShaderForge.SFN_Time,id:9629,x:30827,y:31734,varname:node_9629,prsc:2;n:type:ShaderForge.SFN_Multiply,id:2144,x:31020,y:31734,varname:node_2144,prsc:2|A-5711-OUT,B-9629-T;n:type:ShaderForge.SFN_Tex2d,id:9003,x:32112,y:31829,varname:node_9003,prsc:2,tex:fef9ed465142c4246a265c64aaf7125f,ntxv:0,isnm:False|UVIN-3798-UVOUT,TEX-529-TEX;n:type:ShaderForge.SFN_Panner,id:546,x:31261,y:31662,varname:node_546,prsc:2,spu:-1,spv:0|UVIN-4173-UVOUT,DIST-2144-OUT;n:type:ShaderForge.SFN_ValueProperty,id:5711,x:30827,y:31672,ptovrint:False,ptlb:speed,ptin:_speed,varname:node_5711,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:1;n:type:ShaderForge.SFN_TexCoord,id:4173,x:31020,y:31588,varname:node_4173,prsc:2,uv:0;n:type:ShaderForge.SFN_Vector4Property,id:1785,x:31884,y:33205,ptovrint:False,ptlb:direction,ptin:_direction,varname:node_1785,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:0,v2:1,v3:0,v4:0;n:type:ShaderForge.SFN_Time,id:2101,x:31203,y:32895,varname:node_2101,prsc:2;n:type:ShaderForge.SFN_Multiply,id:7094,x:31414,y:32963,varname:node_7094,prsc:2|A-2101-T,B-579-OUT;n:type:ShaderForge.SFN_ValueProperty,id:579,x:31203,y:33051,ptovrint:False,ptlb:vertext offset,ptin:_vertextoffset,varname:node_579,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:0;n:type:ShaderForge.SFN_Tex2d,id:8996,x:31884,y:33003,ptovrint:False,ptlb:wave texture,ptin:_wavetexture,varname:node_8996,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,tex:078b4c0ef5cc7f846bfda4a571eb976c,ntxv:0,isnm:False|UVIN-9207-UVOUT;n:type:ShaderForge.SFN_Multiply,id:5133,x:32232,y:33116,varname:node_5133,prsc:2|A-8996-RGB,B-1785-XYZ;n:type:ShaderForge.SFN_Panner,id:9207,x:31620,y:33015,varname:node_9207,prsc:2,spu:1,spv:1|UVIN-7536-UVOUT,DIST-7094-OUT;n:type:ShaderForge.SFN_TexCoord,id:7536,x:31414,y:33093,varname:node_7536,prsc:2,uv:0;n:type:ShaderForge.SFN_Multiply,id:8926,x:32479,y:33201,varname:node_8926,prsc:2|A-5133-OUT,B-5951-OUT;n:type:ShaderForge.SFN_Tex2d,id:1247,x:32030,y:33457,ptovrint:False,ptlb:blend gradient,ptin:_blendgradient,varname:node_1247,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,tex:c9b3ccc65c3a9994d8449aebc17d3754,ntxv:0,isnm:False;n:type:ShaderForge.SFN_Multiply,id:5951,x:32231,y:33587,varname:node_5951,prsc:2|A-1247-RGB,B-4727-OUT;n:type:ShaderForge.SFN_ValueProperty,id:4727,x:32231,y:33739,ptovrint:False,ptlb:blend power,ptin:_blendpower,varname:node_4727,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:2;n:type:ShaderForge.SFN_Tex2d,id:8657,x:32145,y:32813,ptovrint:False,ptlb:alpha clip texture,ptin:_alphacliptexture,varname:node_8657,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,tex:d92f51b14e6de4942b74f02570f31790,ntxv:3,isnm:False;n:type:ShaderForge.SFN_Tex2dAsset,id:529,x:31598,y:31909,ptovrint:False,ptlb:internal texture,ptin:_internaltexture,varname:node_529,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,tex:fef9ed465142c4246a265c64aaf7125f,ntxv:0,isnm:False;n:type:ShaderForge.SFN_Tex2d,id:8002,x:32112,y:31982,varname:node_8002,prsc:2,tex:fef9ed465142c4246a265c64aaf7125f,ntxv:0,isnm:False|UVIN-1358-UVOUT,TEX-529-TEX;n:type:ShaderForge.SFN_Multiply,id:4357,x:31584,y:32338,varname:node_4357,prsc:2|A-546-UVOUT,B-6495-OUT;n:type:ShaderForge.SFN_Blend,id:7915,x:32958,y:31823,varname:node_7915,prsc:2,blmd:5,clmp:True|SRC-9003-RGB,DST-8002-RGB;n:type:ShaderForge.SFN_Panner,id:1358,x:31858,y:32240,varname:node_1358,prsc:2,spu:-0.5,spv:1|UVIN-4357-OUT,DIST-1614-OUT;n:type:ShaderForge.SFN_Multiply,id:1614,x:31598,y:32213,varname:node_1614,prsc:2|A-5903-OUT,B-2144-OUT;n:type:ShaderForge.SFN_ValueProperty,id:6495,x:31584,y:32486,ptovrint:False,ptlb:tile 1,ptin:_tile1,varname:node_6495,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:0;n:type:ShaderForge.SFN_ValueProperty,id:5903,x:31598,y:32149,ptovrint:False,ptlb:speed 1,ptin:_speed1,varname:node_5903,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:0;n:type:ShaderForge.SFN_Multiply,id:4293,x:31671,y:31489,varname:node_4293,prsc:2|A-546-UVOUT,B-830-OUT;n:type:ShaderForge.SFN_ValueProperty,id:830,x:31671,y:31635,ptovrint:False,ptlb:tile 2,ptin:_tile2,varname:node_830,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:0;n:type:ShaderForge.SFN_Panner,id:3798,x:31865,y:31538,varname:node_3798,prsc:2,spu:-0.5,spv:1|UVIN-4293-OUT,DIST-6510-OUT;n:type:ShaderForge.SFN_Multiply,id:6510,x:31671,y:31343,varname:node_6510,prsc:2|A-8596-OUT,B-2144-OUT;n:type:ShaderForge.SFN_ValueProperty,id:8596,x:31671,y:31276,ptovrint:False,ptlb:speed 2,ptin:_speed2,varname:node_8596,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:0;n:type:ShaderForge.SFN_Multiply,id:6914,x:32389,y:32813,varname:node_6914,prsc:2|A-6705-OUT,B-8657-A;n:type:ShaderForge.SFN_Multiply,id:1286,x:32413,y:32181,varname:node_1286,prsc:2|A-9003-A,B-4671-OUT;n:type:ShaderForge.SFN_ValueProperty,id:4671,x:32413,y:32113,ptovrint:False,ptlb:tile 1 power,ptin:_tile1power,varname:node_4671,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:1;n:type:ShaderForge.SFN_Multiply,id:6750,x:32413,y:32394,varname:node_6750,prsc:2|A-8002-A,B-8648-OUT;n:type:ShaderForge.SFN_ValueProperty,id:8648,x:32413,y:32338,ptovrint:False,ptlb:tile 2 power,ptin:_tile2power,varname:node_8648,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:1;n:type:ShaderForge.SFN_Multiply,id:2800,x:32682,y:32799,varname:node_2800,prsc:2|A-9698-OUT,B-6914-OUT;n:type:ShaderForge.SFN_Blend,id:5183,x:32780,y:32261,varname:node_5183,prsc:2,blmd:19,clmp:True|SRC-1286-OUT,DST-6750-OUT;n:type:ShaderForge.SFN_ValueProperty,id:6705,x:32164,y:32719,ptovrint:False,ptlb:alplha bleed,ptin:_alplhableed,varname:node_6705,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:1;n:type:ShaderForge.SFN_Multiply,id:9921,x:32862,y:32658,varname:node_9921,prsc:2|A-9386-RGB,B-7915-OUT;n:type:ShaderForge.SFN_Color,id:9386,x:32862,y:32483,ptovrint:False,ptlb:color,ptin:_color,varname:node_9386,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,c1:0.5,c2:0.5,c3:0.5,c4:1;n:type:ShaderForge.SFN_ValueProperty,id:9389,x:33043,y:32206,ptovrint:False,ptlb:contrast tiles,ptin:_contrasttiles,varname:node_9389,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,v1:1;n:type:ShaderForge.SFN_Blend,id:9698,x:33043,y:32023,varname:node_9698,prsc:2,blmd:12,clmp:False|SRC-5183-OUT,DST-9389-OUT;proporder:5711-1785-579-8996-1247-4727-8657-529-6495-5903-830-8596-4671-8648-6705-9386-9389;pass:END;sub:END;*/

Shader "Shader Forge/vertex&texture offset" {
    Properties {
        _speed ("speed", Float ) = 1
        _direction ("direction", Vector) = (0,1,0,0)
        _vertextoffset ("vertext offset", Float ) = 0
        _wavetexture ("wave texture", 2D) = "white" {}
        _blendgradient ("blend gradient", 2D) = "white" {}
        _blendpower ("blend power", Float ) = 2
        _alphacliptexture ("alpha clip texture", 2D) = "bump" {}
        _internaltexture ("internal texture", 2D) = "white" {}
        _tile1 ("tile 1", Float ) = 0
        _speed1 ("speed 1", Float ) = 0
        _tile2 ("tile 2", Float ) = 0
        _speed2 ("speed 2", Float ) = 0
        _tile1power ("tile 1 power", Float ) = 1
        _tile2power ("tile 2 power", Float ) = 1
        _alplhableed ("alplha bleed", Float ) = 1
        _color ("color", Color) = (0.5,0.5,0.5,1)
        _contrasttiles ("contrast tiles", Float ) = 1
        [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
    }
    SubShader {
        Tags {
            "IgnoreProjector"="True"
            "Queue"="Transparent"
            "RenderType"="Transparent"
        }
        Pass {
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"
            }
            Blend SrcAlpha OneMinusSrcAlpha
            Cull Off
            ZWrite Off
         
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #define UNITY_PASS_FORWARDBASE
            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase
            #pragma exclude_renderers opengl gles gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2
            #pragma target 3.0
            #pragma glsl
            uniform float4 _TimeEditor;
            uniform float _speed;
            uniform float4 _direction;
            uniform float _vertextoffset;
            uniform sampler2D _wavetexture; uniform float4 _wavetexture_ST;
            uniform sampler2D _blendgradient; uniform float4 _blendgradient_ST;
            uniform float _blendpower;
            uniform sampler2D _alphacliptexture; uniform float4 _alphacliptexture_ST;
            uniform sampler2D _internaltexture; uniform float4 _internaltexture_ST;
            uniform float _tile1;
            uniform float _speed1;
            uniform float _tile2;
            uniform float _speed2;
            uniform float _tile1power;
            uniform float _tile2power;
            uniform float _alplhableed;
            uniform float4 _color;
            uniform float _contrasttiles;
            struct VertexInput {
                float4 vertex : POSITION;
                float2 texcoord0 : TEXCOORD0;
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
                float2 uv0 : TEXCOORD0;
            };
            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.uv0 = v.texcoord0;
                float4 node_2101 = _Time + _TimeEditor;
                float2 node_9207 = (o.uv0+(node_2101.g*_vertextoffset)*float2(1,1));
                float4 _wavetexture_var = tex2Dlod(_wavetexture,float4(TRANSFORM_TEX(node_9207, _wavetexture),0.0,0));
                float4 _blendgradient_var = tex2Dlod(_blendgradient,float4(TRANSFORM_TEX(o.uv0, _blendgradient),0.0,0));
                v.vertex.xyz += ((_wavetexture_var.rgb*_direction.rgb)*(_blendgradient_var.rgb*_blendpower));
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex );
                return o;
            }
            float4 frag(VertexOutput i, float facing : VFACE) : COLOR {
                float isFrontFace = ( facing >= 0 ? 1 : 0 );
                float faceSign = ( facing >= 0 ? 1 : -1 );
/////// Vectors:
////// Lighting:
////// Emissive:
                float4 node_9629 = _Time + _TimeEditor;
                float node_2144 = (_speed*node_9629.g);
                float2 node_546 = (i.uv0+node_2144*float2(-1,0));
                float2 node_3798 = ((node_546*_tile2)+(_speed2*node_2144)*float2(-0.5,1));
                float4 node_9003 = tex2D(_internaltexture,node_3798);
                float2 node_1358 = ((node_546*_tile1)+(_speed1*node_2144)*float2(-0.5,1));
                float4 node_8002 = tex2D(_internaltexture,node_1358);
                float3 emissive = (_color.rgb*saturate(max(node_9003.rgb,node_8002.rgb)));
                float3 finalColor = emissive;
                float4 _alphacliptexture_var = tex2D(_alphacliptexture,TRANSFORM_TEX(i.uv0, _alphacliptexture));
                return fixed4(finalColor,((saturate(((node_8002.a*_tile2power)-(node_9003.a*_tile1power))) > 0.5 ?  (1.0-(1.0-2.0*(saturate(((node_8002.a*_tile2power)-(node_9003.a*_tile1power)))-0.5))*(1.0-_contrasttiles)) : (2.0*saturate(((node_8002.a*_tile2power)-(node_9003.a*_tile1power)))*_contrasttiles)) *(_alplhableed*_alphacliptexture_var.a)));
            }
            ENDCG
        }
        Pass {
            Name "ShadowCaster"
            Tags {
                "LightMode"="ShadowCaster"
            }
            Offset 1, 1
         
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #define UNITY_PASS_SHADOWCASTER
            #include "UnityCG.cginc"
            #include "Lighting.cginc"
            #pragma fragmentoption ARB_precision_hint_fastest
            #pragma multi_compile_shadowcaster
            #pragma exclude_renderers opengl gles gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2
            #pragma target 3.0
            #pragma glsl
            uniform float4 _TimeEditor;
            uniform float4 _direction;
            uniform float _vertextoffset;
            uniform sampler2D _wavetexture; uniform float4 _wavetexture_ST;
            uniform sampler2D _blendgradient; uniform float4 _blendgradient_ST;
            uniform float _blendpower;
            struct VertexInput {
                float4 vertex : POSITION;
                float2 texcoord0 : TEXCOORD0;
            };
            struct VertexOutput {
                V2F_SHADOW_CASTER;
                float2 uv0 : TEXCOORD1;
            };
            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.uv0 = v.texcoord0;
                float4 node_2101 = _Time + _TimeEditor;
                float2 node_9207 = (o.uv0+(node_2101.g*_vertextoffset)*float2(1,1));
                float4 _wavetexture_var = tex2Dlod(_wavetexture,float4(TRANSFORM_TEX(node_9207, _wavetexture),0.0,0));
                float4 _blendgradient_var = tex2Dlod(_blendgradient,float4(TRANSFORM_TEX(o.uv0, _blendgradient),0.0,0));
                v.vertex.xyz += ((_wavetexture_var.rgb*_direction.rgb)*(_blendgradient_var.rgb*_blendpower));
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex );
                TRANSFER_SHADOW_CASTER(o)
                return o;
            }
            float4 frag(VertexOutput i, float facing : VFACE) : COLOR {
                float isFrontFace = ( facing >= 0 ? 1 : 0 );
                float faceSign = ( facing >= 0 ? 1 : -1 );
/////// Vectors:
                SHADOW_CASTER_FRAGMENT(i)
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
    CustomEditor "ShaderForgeMaterialInspector"
}

Комментариев нет:

Отправить комментарий