Game of drones

Well... Starting game dev now =)


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"
}

Small zone for experements

This is a small location for tests and experements. Some commercial assets was used.






3d Designers room. Tasks only.

Task 1.

From that point we will start a small tests for all of us. That test will show our experience in 3d design (low/mid/hi poly). Also later we will start doing models for Unity3d with future integrating in engine.

For the first small test lets do  air-conditioner. As you can see below, its an outer part. Its not so new, but is fully functional. Task is - do photorealistic model as you can, as your skill alow it. There is no limitation on poly count, count of materials and textures. You can avoid beauty hierarchy and names. I need only to see how cool that model can be. Parts, which we not see, you can create as you like, use your imagination or just leave flat side, if you wont to create some geometry.





And we are finish





Task 2.


There is a pictures, which i found in network. Lets create textured 3d model from those
pictures. Polycount 5000, not more then. This time i need only 1 material, only 1 texture atlas
and only 1 object (that building i mean). Primary condition is do that texture atlas so small in
memory as much as possible but without losing quality. This task imply using decals, repeating
textured mesh parts and working with alpha channel.
And 1 more, do not try to use those reference pictures for making textures.







Task 3.

Next batch will be a testing for a texturing skill. There is brick building. That building doesnt have beauty grid but it looks ok for needed range of view. The task is - do the blow-hole in that building, textured and detalised as much as possible. Hole must be look like it was created by blow of gas barel. Imagine that after blow was a fire in hole, after that fire was choked and picture of destruction is that we need to reproduce. Ill do a small manga for you for best understanding. Triangle count of that new building ofcourse will be higher, but do not take to large count. At that moment building around 5k poly, so let it be not more then 
10k after destructions. Count of objects and textured materials doesnt matter, more important to stay in 10k poly and bring UltraPhotoRealisticMegaEnsane beauty. There must be at least a diffuse textures in unlimited resolution.

Wasteland 2 submittions

This is a model i created from a concept, which i took from gues, who doing Wasteland 2 at that moment.
Will do few more later. Hope you like it.



work_in_progress (stoped)


This is my first location. There wiil be a few styles of forest around the path.

Upgraded my forest.