Advertisement
GibTreaty

VertexColorMapGlowInstanced.shader

Aug 20th, 2017
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.62 KB | None | 0 0
  1. Shader "Instanced/Vertex Color Map Instanced" {
  2.     Properties{
  3.         _PrimaryColor("PrimaryColor", Color) = (0.7529412,0.7529412,0.7529412,1)
  4.         _SecondaryColor("SecondaryColor", Color) = (0.1529412,0.09803922,0.01960784,1)
  5.         _AccessoryPrimaryColor("AccessoryPrimaryColor", Color) = (0,0,0)
  6.         _AccessorySecondaryColor("AccessorySecondaryColor", Color) = (0,0,0)
  7.         _Gloss("Gloss", Range(0,1)) = 0.8
  8.         _Metallic("Metallic", Range(0,1)) = 0.0
  9.         [HDR]_GlowColor("GlowColor", Color) = (0,1,0.04827595,1)
  10.         _RimColor("Rim Color", Color) = (1,1,1,0.0)
  11.         _RimPower("Rim Power", Range(0.5,8.0)) = 5.0
  12.     }
  13.         SubShader{
  14.             Tags { "RenderType" = "Opaque" }
  15.  
  16.             CGPROGRAM
  17.  
  18.             #pragma surface surf Standard
  19.             //#pragma target 3.0
  20.             #pragma multi_compile_instancing
  21.  
  22.             sampler2D _MainTex;
  23.  
  24.             struct Input {
  25.                 float4 vertexColor : COLOR;
  26.                 float3 viewDir;
  27.             };
  28.  
  29.             half _Gloss;
  30.             half _Metallic;
  31.             float4 _RimColor;
  32.             float _RimPower;
  33.  
  34.             // Declare instanced properties inside a cbuffer.
  35.             // Each instanced property is an array of by default 500(D3D)/128(GL) elements. Since D3D and GL imposes a certain limitation
  36.             // of 64KB and 16KB respectively on the size of a cubffer, the default array size thus allows two matrix arrays in one cbuffer.
  37.             // Use maxcount option on #pragma instancing_options directive to specify array size other than default (divided by 4 when used
  38.             // for GL).
  39.             UNITY_INSTANCING_CBUFFER_START(Props)
  40.                 UNITY_DEFINE_INSTANCED_PROP(fixed4, _PrimaryColor)
  41.                 UNITY_DEFINE_INSTANCED_PROP(fixed4, _SecondaryColor)
  42.                 UNITY_DEFINE_INSTANCED_PROP(fixed4, _AccessoryPrimaryColor)
  43.                 UNITY_DEFINE_INSTANCED_PROP(fixed4, _AccessorySecondaryColor)
  44.                 UNITY_DEFINE_INSTANCED_PROP(fixed4, _GlowColor)
  45.             UNITY_INSTANCING_CBUFFER_END
  46.  
  47.             void surf(Input IN, inout SurfaceOutputStandard o) {
  48.                 float3 primaryColor = lerp(UNITY_ACCESS_INSTANCED_PROP(_PrimaryColor).rgb, UNITY_ACCESS_INSTANCED_PROP(_AccessoryPrimaryColor).rgb, IN.vertexColor.b);
  49.                 float3 secondaryColor = lerp(UNITY_ACCESS_INSTANCED_PROP(_SecondaryColor).rgb, UNITY_ACCESS_INSTANCED_PROP(_AccessorySecondaryColor).rgb, IN.vertexColor.b);
  50.  
  51.                 float3 diffuseColor = lerp(secondaryColor, primaryColor, IN.vertexColor.r);
  52.  
  53.                 fixed4 c = fixed4(diffuseColor.r, diffuseColor.g, diffuseColor.b, 1);
  54.                 float3 emissive = IN.vertexColor.g * UNITY_ACCESS_INSTANCED_PROP(_GlowColor).rgb;
  55.                 o.Albedo = c.rgb;
  56.                 o.Metallic = _Metallic;
  57.                 o.Smoothness = _Gloss;
  58.  
  59.                 half rim = 1.0 - saturate(dot(normalize(IN.viewDir), o.Normal));
  60.                 o.Emission = emissive + _RimColor * pow(rim, _RimPower);
  61.             }
  62.             ENDCG
  63.     }
  64.         FallBack "Diffuse"
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement