#define STANDARD #ifdef PHYSICAL #define IOR #define SPECULAR #endif uniform vec3 diffuse; uniform vec3 emissive; uniform float roughness; uniform float metalness; uniform float opacity; #ifdef IOR uniform float ior; #endif #ifdef SPECULAR uniform float specularIntensity; uniform vec3 specularColor; #ifdef USE_SPECULARINTENSITYMAP uniform sampler2D specularIntensityMap; #endif #ifdef USE_SPECULARCOLORMAP uniform sampler2D specularColorMap; #endif #endif #ifdef USE_CLEARCOAT uniform float clearcoat; uniform float clearcoatRoughness; #endif #ifdef USE_IRIDESCENCE uniform float iridescence; uniform float iridescenceIOR; uniform float iridescenceThicknessMinimum; uniform float iridescenceThicknessMaximum; #endif #ifdef USE_SHEEN uniform vec3 sheenColor; uniform float sheenRoughness; #ifdef USE_SHEENCOLORMAP uniform sampler2D sheenColorMap; #endif #ifdef USE_SHEENROUGHNESSMAP uniform sampler2D sheenRoughnessMap; #endif #endif varying vec3 vViewPosition; #include // /planes/MAT/meshStandardBuilder_INSTANCES/globals2 uniform vec2 resolution; // /planes/MAT/meshStandardBuilder_INSTANCES/param1 uniform float v_POLY_param_swipeStart; // /planes/MAT/meshStandardBuilder_INSTANCES/param2 uniform float v_POLY_param_swipeEnd; #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct SSSModel { bool isActive; vec3 color; float thickness; float power; float scale; float distortion; float ambient; float attenuation; }; void RE_Direct_Scattering( const in IncidentLight directLight, const in GeometricContext geometry, const in SSSModel sssModel, inout ReflectedLight reflectedLight ){ vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion)); float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale; vec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness)); reflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color; } void main() { #include vec4 diffuseColor = vec4( diffuse, opacity ); // /planes/MAT/meshStandardBuilder_INSTANCES/globals2 vec2 v_POLY_globals2_resolution = resolution; vec4 v_POLY_globals2_gl_FragCoord = gl_FragCoord; // /planes/MAT/meshStandardBuilder_INSTANCES/param1 float v_POLY_param1_val = v_POLY_param_swipeStart; // /planes/MAT/meshStandardBuilder_INSTANCES/param2 float v_POLY_param2_val = v_POLY_param_swipeEnd; // /planes/MAT/meshStandardBuilder_INSTANCES/constant4 vec3 v_POLY_constant4_val = vec3(2.9, 2.9, 2.9); // /planes/MAT/meshStandardBuilder_INSTANCES/constant3 vec3 v_POLY_constant3_val = vec3(0.4666666666666667, 0.6078431372549019, 0.7137254901960784); // /planes/MAT/meshStandardBuilder_INSTANCES/vec4ToFloat1 float v_POLY_vec4ToFloat1_y = v_POLY_globals2_gl_FragCoord.y; // /planes/MAT/meshStandardBuilder_INSTANCES/vec2ToFloat1 float v_POLY_vec2ToFloat1_y = v_POLY_globals2_resolution.y; // /planes/MAT/meshStandardBuilder_INSTANCES/mult1 vec3 v_POLY_mult1_product = (v_POLY_constant4_val * v_POLY_constant3_val * vec3(1.0, 1.0, 1.0)); // /planes/MAT/meshStandardBuilder_INSTANCES/divide1 float v_POLY_divide1_divide = (v_POLY_vec4ToFloat1_y / v_POLY_vec2ToFloat1_y / 1.0); // /planes/MAT/meshStandardBuilder_INSTANCES/compare1 bool v_POLY_compare1_val = (v_POLY_divide1_divide < v_POLY_param1_val); // /planes/MAT/meshStandardBuilder_INSTANCES/compare2 bool v_POLY_compare2_val = (v_POLY_divide1_divide > v_POLY_param2_val); // /planes/MAT/meshStandardBuilder_INSTANCES/and1 bool v_POLY_and1_and = v_POLY_compare1_val && v_POLY_compare2_val; // /planes/MAT/meshStandardBuilder_INSTANCES/twoWaySwitch1 vec3 v_POLY_twoWaySwitch1_val; if(v_POLY_and1_and){ v_POLY_twoWaySwitch1_val = v_POLY_mult1_product; } else { v_POLY_twoWaySwitch1_val = v_POLY_constant4_val; } // /planes/MAT/meshStandardBuilder_INSTANCES/output1 diffuseColor.xyz = v_POLY_twoWaySwitch1_val; float POLY_metalness = 1.0; float POLY_roughness = 1.0; vec3 POLY_emissive = vec3(1.0, 1.0, 1.0); SSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 ); ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); vec3 totalEmissiveRadiance = emissive * POLY_emissive; #include #include #include #include #include float roughnessFactor = roughness * POLY_roughness; #ifdef USE_ROUGHNESSMAP vec4 texelRoughness = texture2D( roughnessMap, vUv ); // reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture roughnessFactor *= texelRoughness.g; #endif float metalnessFactor = metalness * POLY_metalness; #ifdef USE_METALNESSMAP vec4 texelMetalness = texture2D( metalnessMap, vUv ); // reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture metalnessFactor *= texelMetalness.b; #endif #include #include #include #include #include #include #include if(POLY_SSSModel.isActive){ RE_Direct_Scattering(directLight, geometry, POLY_SSSModel, reflectedLight); } #include #include #include vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; #include vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; #ifdef USE_SHEEN float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular; #endif #ifdef USE_CLEARCOAT float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) ); vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat; #endif #include #include #include #include #include #include }