Shader "Grass/GrassBlade" { Properties { [KeywordEnum(LOD 0, LOD 1, LOD 2, LOD 3)] _LOD("Level of Detail", int) = 0 _BladeWidth("Blade Width", Range(0.003, .1)) = 0.01 _BendStrength("Bend Strength", Range(0, 1)) = 1 _FieldColor("Field Color", 2D) = "white" {} _BladeWidthTex("Blade Width Texture", 2D) = "white" {} _AOStrength("Ambient Occlusion Strength", Range(0,2)) = 1 _Translucency("Translucency", Range(0,5)) = 1 _SSSStrength("Subsurface Scattering Strength", Range(0,1)) = 1 _Metallic("Metallic", Range(0,1)) = 0 _Roughness("Roughness", Range(0,1)) = 0.3 _NormalCurvature("Normal Curvature", Range(0,1)) = 0.3 _BladeWidthTexStrength("BladeWidthTexStrength", Range(0,1)) = 0.3 _InnerColor("Inner Color", Color) = (1,1,1,1) } SubShader { LOD 100 Cull Off //Render Pass Pass { Tags { "LightMode" = "ForwardBase"} CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma geometry geom #pragma multi_compile _ SHADOWS_SCREEN // shader_feature is very similar to multi_compile. Use multi_compile for keywords that are set from code. #pragma shader_feature _LOD_LOD_0 _LOD_LOD_1 _LOD_LOD_2 _LOD_LOD_3 #pragma shader_feature UNITY_EDITOR #include "UnityCG.cginc" #include "UnityPBSLighting.cginc" #include "AutoLight.cginc" #include "./include/Random.hlsl" #include "./include/Math.hlsl" #include "./include/Culling.hlsl" #include "./include/GrassHelpers.hlsl" #define IS_IN_BASE_PASS #include "./include/GrassBladePass.hlsl" ENDCG } // Shadow Pass Pass { Tags { "LightMode" = "ShadowCaster" } CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma geometry geom #pragma shader_feature _LOD_LOD_0 _LOD_LOD_1 _LOD_LOD_2 _LOD_LOD_3 #pragma shader_feature UNITY_EDITOR #include "UnityCG.cginc" #include "./include/Random.hlsl" #include "./include/Math.hlsl" #include "./include/Culling.hlsl" #include "./include/GrassHelpers.hlsl" #define IS_IN_SHADOW_PASS #include "./include/GrassBladePass.hlsl" ENDCG } } }