Advertisement
Phantom2155

Untitled

Jan 13th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader "Unlit/triplanar"
  2. {
  3.     Properties
  4.     {
  5.         _MainTex ("Texture", 2D) = "white" {}
  6.     }
  7.     SubShader
  8.     {
  9.         Tags { "RenderType"="Opaque" }
  10.         LOD 100
  11.  
  12.         Pass
  13.         {
  14.             CGPROGRAM
  15.             #pragma vertex vert
  16.             #pragma fragment frag
  17.            
  18.             #include "UnityCG.cginc"
  19.  
  20.             struct appdata
  21.             {
  22.                 float4 vertex : POSITION;
  23.                 float3 normal : NORMAL;
  24.                 float4 tangent : TANGENT;
  25.             };
  26.  
  27.             struct v2f
  28.             {
  29.                 float4 vertex : SV_POSITION;
  30.                 float3 worldPos : TEXCOORD1;
  31.                 float3 tangentForward : TEXCOORD3;
  32.             };
  33.  
  34.             sampler2D _MainTex;
  35.             float4 _MainTex_ST;
  36.            
  37.             v2f vert (appdata v)
  38.             {
  39.                 v2f o;
  40.                 o.vertex = UnityObjectToClipPos(v.vertex);
  41.                 o.worldPos = mul(unity_ObjectToWorld, v.vertex);
  42.  
  43.                 fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);
  44.                 fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz);
  45.                 fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w;
  46.  
  47.                 float4x4 tangentToWorld = float4x4(worldTangent.x, worldBinormal.x, worldNormal.x, 0.0,
  48.                     worldTangent.y, worldBinormal.y, worldNormal.y, 0.0,
  49.                     worldTangent.z, worldBinormal.z, worldNormal.z, 0.0,
  50.                     0.0, 0.0, 0.0, 1.0);
  51.  
  52.                 o.tangentForward = mul(tangentToWorld,float4(0, 0, 1, 0)).xyz;
  53.                 o.tangentForward = mul(unity_WorldToObject, o.tangentForward);
  54.                 return o;
  55.             }
  56.  
  57.             float4 CalculateContrast(float contrastValue, float4 colorTarget)
  58.             {
  59.                 float t = 0.5 * (1.0 - contrastValue);
  60.                 return mul(float4x4(
  61.                     contrastValue, 0, 0, t,
  62.                     0, contrastValue, 0, t,
  63.                     0, 0, contrastValue, t,
  64.                     0, 0, 0, 1), colorTarget);
  65.             }
  66.            
  67.             fixed4 frag (v2f i) : SV_Target
  68.             {
  69.                 float3 pos = mul(unity_WorldToObject, i.worldPos) / 1024;
  70.  
  71.                 float3 dir = pow(abs(i.tangentForward), 160);
  72.                 dir /= dot(dir, 1);
  73.                 dir = CalculateContrast(512, float4(dir,0)).rgb;
  74.  
  75.                 float2 uvs = pos.rg * dir.z + pos.gb * dir.x + pos.rb * dir.y;
  76.                 fixed4 col = tex2D(_MainTex, uvs);
  77.                 return col;
  78.             }
  79.             ENDCG
  80.         }
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement