/* Filamented triplanar example. */ Shader "Silent/Filamented Extras/Simple Triplanar Filamented" { Properties { [CheckDFGTexture] [BlendModeSelector(_SrcBlend, _DstBlend, _CustomRenderQueue, _ZWrite, _AtoCmode)] _Mode ("__mode", Float) = 0.0 [HeaderEx(Base Material)] [SingleLine(_Color)]_MainTex("Albedo", 2D) = "white" {} [HideInInspector]_Color("Color", Color) = (1,1,1,1) [SingleLine(_BumpScale)][Normal] _BumpMap("Normal", 2D) = "bump" {} [HideInInspector]_BumpScale("Normal Scale", Float) = 1 [SingleLine]_MOESMap("MOES Map", 2D) = "white" {} [Space] _MetallicScale("Metallic", Range( 0 , 1)) = 0 _OcclusionScale("Occlusion", Range( 0 , 1)) = 0 _Emission("Emission Power", Float) = 0 _SmoothnessScale("Smoothness", Range( 0 , 1)) = 0 [Space] _EmissionColor("Emission Tint", Color) = (1,1,1,1) [Space] [HeaderEx(Texture Transform)] _UVTransform0("UV Transform X", Vector) = (1, 0, 0, 0) _UVTransform1("UV Transform Y", Vector) = (0, 1, 0, 0) _UVTransform2("UV Transform Z", Vector) = (0, 0, 1, 0) [HeaderEx(System)] [Toggle(_LIGHTMAPSPECULAR)]_LightmapSpecular("Lightmap Specular", Range(0, 1)) = 1 _LightmapSpecularMaxSmoothness("Lightmap Specular Max Smoothness", Range(0, 1)) = 1 _ExposureOcclusion("Lightmap Occlusion Sensitivity", Range(0, 1)) = 0.2 [KeywordEnum(None, SH, RNM, MonoSH)] _Bakery ("Bakery Mode", Int) = 0 [HideInInspector]_RNM0("RNM0", 2D) = "black" {} [HideInInspector]_RNM1("RNM1", 2D) = "black" {} [HideInInspector]_RNM2("RNM2", 2D) = "black" {} [Toggle(_LTCGI)] _LTCGI ("LTCGI", Int) = 0 [Toggle(_VRCLV)] _VRCLV ("VRC Light Volumes", Int) = 0 [IfDef(_VRCLV)] _VRCLVSurfaceBias("Light Volume Surface Bias", Range(0, 0.5)) = 0.05 [Space] [Enum(UnityEngine.Rendering.CullMode)]_CullMode("Cull Mode", Int) = 2 [NonModifiableTextureData][HideInInspector] _DFG("DFG", 2D) = "white" {} // Blending state [HideInInspector] _SrcBlend ("__src", Float) = 1.0 [HideInInspector] _DstBlend ("__dst", Float) = 0.0 [HideInInspector] _CustomRenderQueue ("__rq", Float) = 1.0 [HideInInspector] _ZWrite ("__zw", Float) = 1.0 [HideInInspector] _AtoCmode("__atoc", Float) = 0 } CustomEditor "Silent.FilamentedExtras.Unity.FilamentedExtrasInspector" CGINCLUDE // First, setup what Filamented does. // Filamented's behaviour is decided by the shading model and what material properties are defined. // These are listed in FilamentMaterialInputs. // You can set up and use anything in the initMaterials function. // SHADING_MODEL_SPECULAR_GLOSSINESS // If this is not defined, the material will default to metallic/roughness workflow. #define MATERIAL_HAS_NORMAL // If this is not defined, normal maps won't be enabled. #define MATERIAL_HAS_AMBIENT_OCCLUSION // If this is not defined, occlusion won't be taken into account #define MATERIAL_HAS_EMISSIVE // If this is not defined, emission won't be taken into account // MATERIAL_HAS_ANISOTROPY // If this is set, the material will support anisotropy. // MATERIAL_HAS_CLEAR_COAT // If this is set, the material will support clear coat. // HAS_ATTRIBUTE_COLOR // If this is not defined, vertex colour will not be available. #define USE_DFG_LUT // Whether to use the lookup texture for specular reflection calculation. // Requires a shader property _DFG to be present and filled. ENDCG CGINCLUDE #ifndef UNITY_PASS_SHADOWCASTER // Include common files. These will include the other files as needed. #include "Packages/s-ilent.filamented/Filamented/UnityLightingCommon.cginc" #include "Packages/s-ilent.filamented/Filamented/UnityStandardInput.cginc" #include "Packages/s-ilent.filamented/Filamented/UnityStandardConfig.cginc" #include "Packages/s-ilent.filamented/Filamented/UnityStandardCore.cginc" // Note: Unfortunately, Input is still needed due to some interdependancies with other Unity files. // This means that some properties will always be defined, even if they aren't used. // In practise, this won't affect the final compilation, but it means you'll need to watch out for the names // of some common parameters. In this case, only MOESMap and some other properties are defined here because // they are already defined in Input. // uniform sampler2D _MainTex; // uniform sampler2D _BumpMap; uniform sampler2D _MOESMap; // uniform half _BumpScale; uniform half _MetallicScale; uniform half _OcclusionScale; uniform half _SmoothnessScale; uniform half _Emission; // uniform half3 _EmissionColor; uniform half4 _UVTransform0; uniform half4 _UVTransform1; uniform half4 _UVTransform2; // Vertex functions are called from UnityStandardCore. // You can alter values here, or copy the function in and modify it. VertexOutputForwardBase vertBase (VertexInput v) { return vertForwardBase(v); } VertexOutputForwardAdd vertAdd (VertexInput v) { return vertForwardAdd(v); } // https://iquilezles.org/www/articles/biplanar/biplanar.htm // "p" point being textured // "n" surface normal at "p" // "k" controls the sharpness of the blending in the transitions areas // "s" texture sampler float4 biplanar( sampler2D sam, float3 p, float3 n, float k ) { // grab coord derivatives for texturing float3 dpdx = ddx(p); float3 dpdy = ddy(p); n = abs(n); // determine major axis (in x; yz are following axis) int3 ma = (n.x>n.y && n.x>n.z) ? int3(0,1,2) : (n.y>n.z) ? int3(1,2,0) : int3(2,0,1) ; // determine minor axis (in x; yz are following axis) int3 mi = (n.x