Guest User

Low Poly Shader (Unity3D)

a guest
Jul 10th, 2016
2,581
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader "Low Poly"
  2. {
  3.     Properties
  4.     {
  5.         _Color("Color", Color) = (1,0,0,1)
  6.     }
  7.     SubShader
  8.     {
  9.    
  10.         Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
  11.         Blend SrcAlpha OneMinusSrcAlpha
  12.  
  13.         Pass
  14.         {
  15.  
  16.             CGPROGRAM
  17.             #include "UnityCG.cginc"
  18.             #pragma vertex vert
  19.             #pragma geometry geom
  20.             #pragma fragment frag
  21.            
  22.             uniform float4 _LightColor0;
  23.  
  24.             uniform float4 _Color;
  25.  
  26.             struct v2g
  27.             {
  28.                 float4  pos : SV_POSITION;
  29.                 float3  norm : NORMAL;
  30.                 float2  uv : TEXCOORD0;
  31.             };
  32.            
  33.             struct g2f
  34.             {
  35.                 float4  pos : SV_POSITION;
  36.                 float3  norm : NORMAL;
  37.                 float2  uv : TEXCOORD0;            
  38.                 float3 diffuseColor : TEXCOORD1;
  39.             };
  40.  
  41.             v2g vert(appdata_full v)
  42.             {
  43.                 float3 v0 = mul(_Object2World, v.vertex).xyz;
  44.  
  45.                 v.vertex.xyz = mul((float3x3)_World2Object, v0);
  46.  
  47.                 v2g OUT;
  48.                 OUT.pos = v.vertex;
  49.                 OUT.norm = v.normal;
  50.                 OUT.uv = v.texcoord;
  51.                 return OUT;
  52.             }
  53.            
  54.             [maxvertexcount(3)]
  55.             void geom(triangle v2g IN[3], inout TriangleStream<g2f> triStream)
  56.             {
  57.                 float3 v0 = IN[0].pos.xyz;
  58.                 float3 v1 = IN[1].pos.xyz;
  59.                 float3 v2 = IN[2].pos.xyz;
  60.  
  61.                 float3 centerPos = (v0 + v1 + v2) / 3.0;
  62.  
  63.                 float3 vn = normalize(cross(v1 - v0, v2 - v0));
  64.                
  65.                 float4x4 modelMatrix = _Object2World;
  66.                 float4x4 modelMatrixInverse = _World2Object;
  67.  
  68.                 float3 normalDirection = normalize(
  69.                     mul(float4(vn, 0.0), modelMatrixInverse).xyz);
  70.                 float3 viewDirection = normalize(_WorldSpaceCameraPos
  71.                     - mul(modelMatrix, float4(centerPos, 0.0)).xyz);
  72.                 float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
  73.                 float attenuation = 1.0;
  74.  
  75.                 float3 ambientLighting =
  76.                     UNITY_LIGHTMODEL_AMBIENT.rgb * _Color.rgb;
  77.  
  78.                 float3 diffuseReflection =
  79.                     attenuation * _LightColor0.rgb * _Color.rgb
  80.                     * max(0.0, dot(normalDirection, lightDirection));
  81.  
  82.                 g2f OUT;
  83.                 OUT.pos = mul(UNITY_MATRIX_MVP, IN[0].pos);
  84.                 OUT.norm = vn;
  85.                 OUT.uv = IN[0].uv;
  86.                 OUT.diffuseColor = ambientLighting + diffuseReflection;
  87.                 triStream.Append(OUT);
  88.  
  89.                 OUT.pos = mul(UNITY_MATRIX_MVP, IN[1].pos);
  90.                 OUT.norm = vn;
  91.                 OUT.uv = IN[1].uv;
  92.                 OUT.diffuseColor = ambientLighting + diffuseReflection;
  93.                 triStream.Append(OUT);
  94.  
  95.                 OUT.pos = mul(UNITY_MATRIX_MVP, IN[2].pos);
  96.                 OUT.norm = vn;
  97.                 OUT.uv = IN[2].uv;
  98.                 OUT.diffuseColor = ambientLighting + diffuseReflection;
  99.                 triStream.Append(OUT);
  100.                
  101.             }
  102.            
  103.             half4 frag(g2f IN) : COLOR
  104.             {
  105.                 return float4(IN.diffuseColor, 1.0);
  106.             }
  107.            
  108.             ENDCG
  109.  
  110.         }
  111.     }
  112. }
RAW Paste Data