1
+ Shader "Billboard Metallic"
2
+ {
3
+ Properties
4
+ {
5
+ _Color ( "Color" , Color ) = (1 ,1 ,1 ,1 )
6
+ _MainTex ( "Albedo Map" , 2D ) = "black" {}
7
+ _BumpMap ( "Normal Map" , 2D ) = "bump" {}
8
+ _MetallicGlossMap ( "Metallic (R) Smoothness(A) Map" , 2D ) = "black" {}
9
+ }
10
+
11
+ Subshader
12
+ {
13
+ Tags { "RenderType" = "Opaque" "Queue" = "Geometry+0" }
14
+ CGPROGRAM
15
+ #pragma surface SurfaceShader Standard fullforwardshadows addshadow vertex:vertexDataFunc
16
+
17
+ sampler2D _MainTex, _BumpMap, _MetallicGlossMap;
18
+ float4 _Color;
19
+
20
+ struct Input
21
+ {
22
+ float2 uv_MainTex;
23
+ float2 uv_BumpMap;
24
+ float2 uv_MetallicGlossMap;
25
+ };
26
+
27
+ void vertexDataFunc ( inout appdata_full v, out Input o )
28
+ {
29
+ UNITY_INITIALIZE_OUTPUT ( Input , o );
30
+ v.vertex.xy *= float2 (length (unity_ObjectToWorld ._m00_m10_m20), length (unity_ObjectToWorld ._m01_m11_m21));
31
+ float3 forward = -normalize (UNITY_MATRIX_V ._m20_m21_m22);
32
+ float3 up = normalize (UNITY_MATRIX_V ._m10_m11_m12);
33
+ float3 right = normalize (UNITY_MATRIX_V ._m00_m01_m02);
34
+ float4x4 rotationMatrix = float4x4 (right, 0 , up, 0 , forward, 0 , 0 , 0 , 0 , 1 );
35
+ v.vertex = mul (v.vertex, rotationMatrix);
36
+ v.normal = mul (v.normal, rotationMatrix);
37
+ v.vertex.xyz = mul ((float3x3 )unity_WorldToObject , v.vertex.xyz);
38
+ v.normal = mul (v.normal, (float3x3 )unity_ObjectToWorld );
39
+ }
40
+
41
+ void SurfaceShader (Input IN, inout SurfaceOutputStandard o)
42
+ {
43
+ float4 c = tex2D (_MainTex,IN.uv_MainTex);
44
+ o.Albedo = c.rgb * _Color;
45
+ o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
46
+ o.Metallic = tex2D (_MetallicGlossMap, IN.uv_MetallicGlossMap).r;
47
+ o.Smoothness = tex2D (_MetallicGlossMap, IN.uv_MetallicGlossMap).a;
48
+ clip (c.a - 0.5 );
49
+ }
50
+
51
+ ENDCG
52
+ }
53
+ }
0 commit comments