Orihaus

Texture-Sampled Vertex Distortion - 2015

Jul 19th, 2015
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.96 KB | None | 0 0
  1. Shader "Base_Artifact"
  2. {
  3.     Properties  
  4.     {
  5.         _DataTex ( "Data Artifact", 2D ) = "black" {}
  6.         _Rate ( "Artifact Rate", float ) = 2.0
  7.         _Screeny_rate ( "Screen Rate", float ) = 6.0
  8.         _WarpScale ( "Warp Scale", range( -2, 2 ) ) = 0.5
  9.        
  10.         _FresnelEmitColor ( "Fresnel Emit Color", Color ) = ( 0.89, 0.945, 1.0, 0.0 )
  11.         _FresnelEmitPower ( "Fresnel Emit Power", Range( 0.0, 1.0 ) ) = 0.7
  12.  
  13.         _FresnelInnerColor ( "Fresnel Inner Color", Color ) = ( 0.89, 0.945, 1.0, 0.0 )
  14.         _FresnelInnerPower ( "Fresnel Inner Power", Range( 0.0, 1.0 ) ) = 0.7
  15.  
  16.         _SkylightColor ( "Skylight Color", Color ) = ( 0.89, 0.945, 1.0, 0.0 )
  17.         _SkylightPower ( "Skylight Power", Range( 0.0, 1.0 ) ) = 0.7
  18.    
  19.         _DiffuseAmount ( "Diffuse Amount", Range( 0.0, 1.0 ) ) = 0.25
  20.         _TexAmount ( "Texture Amount", Range( 0.0, 1.0 ) ) = 0.25
  21.         _SpecAmount ( "Specular Amount", Range( 0.0, 2.0 ) ) = 1.0
  22.         _SpecTexAmount ( "Spec Texture Amount", Range( 0.0, 1.0 ) ) = 0.25
  23.        
  24.         _Diffusemap ( "Diffusemap", 2D ) = "diffuse" {}
  25.         _Normalmap ( "Normalmap", 2D ) = "normal" {}
  26.         _Specmap ( "Specmap", 2D ) = "spec" {}
  27.        
  28.         _Gloss ( "Gloss", Range( 0.001, 2.0 ) ) = 1.0
  29.     }
  30.        
  31.     SubShader
  32.     {
  33. Tags { "Queue"="Geometry" "IgnoreProjector"="False" "RenderType"="Opaque" }
  34.  
  35.         Cull Back
  36.         ZWrite On
  37.         ZTest LEqual
  38.  
  39.         CGPROGRAM
  40.         #pragma glsl
  41.         #pragma target 3.0
  42.         #pragma surface surf Lambert noambient nolightmap vertex:vert
  43.        
  44.         sampler2D _DataTex;
  45.         float4 _DataTex_ST;
  46.        
  47.         float _WarpScale;
  48.         float _Rate;
  49.         float _Screeny_rate;
  50.        
  51.         float _Gloss;
  52.         fixed _SpecAmount;
  53.        
  54.         struct Input
  55.         {
  56.             float2 uv_Normalmap;
  57.             float2 uv_Specmap;
  58.             float2 uv_DataTex;
  59.            
  60.             float4 pos : POSITION;
  61.             //float4 dataUV : TEXCOORD1;
  62.             float3 viewDir;
  63.             float worldNormal; INTERNAL_DATA
  64.         };
  65.  
  66.         void vert ( inout appdata_full v, out Input o )
  67.         {
  68.             o.pos = mul( UNITY_MATRIX_MVP, v.vertex );
  69.             float4 screenuv = v.vertex.xzyx;
  70.             screenuv.y += _Time.x * _Screeny_rate;
  71.             screenuv.z += _Time.x * _Screeny_rate * 0.753;
  72.             screenuv.w += _Time.x * _Screeny_rate * 1.383;
  73.  
  74.             float4 dataUV = screenuv;
  75.             dataUV.xy = TRANSFORM_TEX( dataUV.xy, _DataTex );
  76.             //dataUV.zw = TRANSFORM_TEX( dataUV.zw, _DataTex );
  77.  
  78.             float4 tex = tex2Dlod( _DataTex, float4( dataUV.xy, 0, 0 ) );
  79.             tex       += tex2Dlod( _DataTex, float4( dataUV.zw, 0, 0 ) );
  80.             tex       *= -0.5;
  81.             tex       += 0.25;
  82.            
  83.             float3 warp = float3(
  84.                 sin( v.normal.x*tex.r),
  85.                 sin( v.normal.y*tex.g),
  86.                 sin( v.normal.z*tex.b)
  87.             );
  88.             //warp *= 1.0 - ( v.normal * rand3d_3d( v.normal ) * _WarpOffset );// * _WarpOffset * sin( _Time.x * _Rate );
  89.  
  90.             float finalWarpScale = _WarpScale;
  91.             finalWarpScale *= 0.025;
  92.             v.vertex.xyz = lerp( v.vertex.xyz + warp * finalWarpScale, v.vertex.xyz, warp );
  93.             o.pos = mul( UNITY_MATRIX_MVP, v.vertex );
  94.  
  95.             UNITY_INITIALIZE_OUTPUT(Input,o);
  96.         }
  97.        
  98.         sampler2D _Diffusemap;
  99.         sampler2D _Normalmap;
  100.         sampler2D _Specmap;
  101.  
  102.         fixed _SpecTexAmount;
  103.         fixed _TexAmount;
  104.         fixed _DiffuseAmount;
  105.        
  106.         float4 _FresnelEmitColor;
  107.         float  _FresnelEmitPower;
  108.  
  109.         float4 _FresnelInnerColor;
  110.         float  _FresnelInnerPower;
  111.  
  112.         float4 _SkylightColor;
  113.         float  _SkylightPower;
  114.  
  115.         float D_Beckmann( float NoH, float Roughness )
  116.         {
  117.             float m = Roughness * Roughness;
  118.             float m2 = m * m;
  119.             float NoH2 = NoH * NoH;
  120.             float final = exp( (NoH2 - 1.0) / (m2 * NoH2) ) / ( 3.14159265359 * m2 * NoH2 * NoH2 );
  121.             return saturate( final * 0.125 );
  122.         }
  123.  
  124.         void surf( Input IN, inout SurfaceOutput o )
  125.         {
  126.             float spec = tex2D( _Specmap, IN.uv_Specmap ).r;
  127.            
  128.             o.Normal = UnpackNormal( tex2D( _Normalmap, IN.uv_Normalmap ) );
  129.            
  130.             float fresnelDot = saturate( dot( normalize( IN.viewDir ), o.Normal ) );
  131.             float skyDot = max( dot( float3( 0.0f, 1.0f, 0.0f ), WorldNormalVector( IN, o.Normal ) ), 0.0 );
  132.             float innerDot = fresnelDot * ( 1.0f - skyDot );
  133.  
  134.             float innerFresnel = D_Beckmann( innerDot, _FresnelInnerPower ); //lerp( innerPrimaryBlob, innerSecondaryBlob, _FresnelInnerPrimarySecondary );
  135.  
  136.             fresnelDot = 1.0 - fresnelDot;
  137.  
  138.             float emitFresnel = D_Beckmann( fresnelDot, _FresnelEmitPower ); //lerp( emitPrimaryBlob, emitSecondaryBlob, _FresnelEmitPrimarySecondary );
  139.             float skylightFresnel = D_Beckmann( skyDot, _SkylightPower ); //lerp( skylightPrimaryBlob, skylightSecondaryBlob, _SkylightPrimarySecondary );
  140.  
  141.             o.Emission = ( (   innerFresnel * _FresnelInnerColor.rgb * (_FresnelInnerColor.a * 16.0f ) )
  142.                          + (skylightFresnel * _SkylightColor.rgb     * (_SkylightColor.a * 16.0f ) )
  143.                          + (    emitFresnel * _FresnelEmitColor.rgb  * ( _FresnelEmitColor.a * 16.0f ) ) ) * spec;
  144.  
  145.             o.Specular = _SpecAmount;
  146.             o.Gloss = lerp( spec * 2.0, 0.5, _SpecTexAmount ) * _Gloss;
  147.             o.Albedo = _DiffuseAmount * lerp( spec, 1.0, _TexAmount );
  148.         }
  149.    
  150.         ENDCG
  151.     }
  152.        
  153.     Fallback "Diffuse"
  154. }
Advertisement
Add Comment
Please, Sign In to add comment