// Decide if we can skip lighting when dot(n, l) <= 0.0 #if defined(SHADING_MODEL_CLOTH) #if !defined(MATERIAL_HAS_SUBSURFACE_COLOR) #define MATERIAL_CAN_SKIP_LIGHTING #endif #elif defined(SHADING_MODEL_SUBSURFACE) // Cannot skip lighting #else #define MATERIAL_CAN_SKIP_LIGHTING #endif struct MaterialInputs { vec4 baseColor; #if !defined(SHADING_MODEL_UNLIT) #if !defined(SHADING_MODEL_SPECULAR_GLOSSINESS) float roughness; #endif #if !defined(SHADING_MODEL_CLOTH) && !defined(SHADING_MODEL_SPECULAR_GLOSSINESS) float metallic; float reflectance; #endif float ambientOcclusion; #endif vec4 emissive; float clearCoat; float clearCoatRoughness; float anisotropy; vec3 anisotropyDirection; #if defined(SHADING_MODEL_SUBSURFACE) || defined(HAS_REFRACTION) float thickness; #endif #if defined(SHADING_MODEL_SUBSURFACE) float subsurfacePower; vec3 subsurfaceColor; #endif #if defined(SHADING_MODEL_CLOTH) vec3 sheenColor; #if defined(MATERIAL_HAS_SUBSURFACE_COLOR) vec3 subsurfaceColor; #endif #endif #if defined(SHADING_MODEL_SPECULAR_GLOSSINESS) vec3 specularColor; float glossiness; #endif #if defined(MATERIAL_HAS_NORMAL) vec3 normal; #endif #if defined(MATERIAL_HAS_CLEAR_COAT) && defined(MATERIAL_HAS_CLEAR_COAT_NORMAL) vec3 clearCoatNormal; #endif #if defined(MATERIAL_HAS_POST_LIGHTING_COLOR) vec4 postLightingColor; #endif #if defined(HAS_REFRACTION) #if defined(MATERIAL_HAS_ABSORPTION) vec3 absorption; #endif #if defined(MATERIAL_HAS_TRANSMISSION) float transmission; #endif #if defined(MATERIAL_HAS_IOR) float ior; #endif #if defined(MATERIAL_HAS_MICRO_THICKNESS) && (REFRACTION_TYPE == REFRACTION_TYPE_THIN) float microThickness; #endif #endif }; void initMaterial(out MaterialInputs material) { material.baseColor = vec4(1.0); #if !defined(SHADING_MODEL_UNLIT) #if !defined(SHADING_MODEL_SPECULAR_GLOSSINESS) material.roughness = 1.0; #endif #if !defined(SHADING_MODEL_CLOTH) && !defined(SHADING_MODEL_SPECULAR_GLOSSINESS) material.metallic = 0.0; material.reflectance = 0.5; #endif material.ambientOcclusion = 1.0; #endif material.emissive = vec4(0.0); #if defined(MATERIAL_HAS_CLEAR_COAT) material.clearCoat = 1.0; material.clearCoatRoughness = 0.0; #endif #if defined(MATERIAL_HAS_ANISOTROPY) material.anisotropy = 0.0; material.anisotropyDirection = vec3(1.0, 0.0, 0.0); #endif #if defined(SHADING_MODEL_SUBSURFACE) || defined(HAS_REFRACTION) material.thickness = 0.5; #endif #if defined(SHADING_MODEL_SUBSURFACE) material.subsurfacePower = 12.234; material.subsurfaceColor = vec3(1.0); #endif #if defined(SHADING_MODEL_CLOTH) material.sheenColor = sqrt(material.baseColor.rgb); #if defined(MATERIAL_HAS_SUBSURFACE_COLOR) material.subsurfaceColor = vec3(0.0); #endif #endif #if defined(SHADING_MODEL_SPECULAR_GLOSSINESS) material.glossiness = 0.0; material.specularColor = vec3(0.0); #endif #if defined(MATERIAL_HAS_NORMAL) material.normal = vec3(0.0, 0.0, 1.0); #endif #if defined(MATERIAL_HAS_CLEAR_COAT) && defined(MATERIAL_HAS_CLEAR_COAT_NORMAL) material.clearCoatNormal = vec3(0.0, 0.0, 1.0); #endif #if defined(MATERIAL_HAS_POST_LIGHTING_COLOR) material.postLightingColor = vec4(0.0); #endif #if defined(HAS_REFRACTION) #if defined(MATERIAL_HAS_ABSORPTION) material.absorption = vec3(0.0); #endif #if defined(MATERIAL_HAS_TRANSMISSION) material.transmission = 1.0; #endif #if defined(MATERIAL_HAS_IOR) material.ior = 1.5; #endif #if defined(MATERIAL_HAS_MICRO_THICKNESS) && (REFRACTION_TYPE == REFRACTION_TYPE_THIN) material.microThickness = 0.0; #endif #endif }