# Extended PBR effect with support for additional texture types # This effect supports metallic, emission, AO, detail, and gloss textures fragment: defines: | #define USE_EXTENDED_TEXTURES 1 inout: | uniform sampler2D p3d_Texture5; // Metallic texture uniform sampler2D p3d_Texture6; // Emission texture uniform sampler2D p3d_Texture7; // AO texture uniform sampler2D p3d_Texture8; // Alpha texture uniform sampler2D p3d_Texture9; // Detail texture uniform sampler2D p3d_Texture10; // Gloss texture material: | #if USE_EXTENDED_TEXTURES // Metallic texture (p3d_Texture5) float sampled_metallic = texture(p3d_Texture5, texcoord).x; m.metallic = mInput.metallic * sampled_metallic; // Emission texture (p3d_Texture6) vec3 sampled_emission = texture(p3d_Texture6, texcoord).xyz; if (mInput.shading_model == SHADING_MODEL_EMISSIVE) { m.basecolor += sampled_emission * 2.0; // Boost emission intensity } // AO texture (p3d_Texture7) - multiply with base color float sampled_ao = texture(p3d_Texture7, texcoord).x; m.basecolor *= sampled_ao; // Alpha texture (p3d_Texture8) - for transparency float sampled_alpha = texture(p3d_Texture8, texcoord).x; if (mInput.shading_model == SHADING_MODEL_TRANSPARENT) { // Apply alpha testing if (sampled_alpha < 0.5) discard; } // Detail texture (p3d_Texture9) - blend with base color vec3 sampled_detail = texture(p3d_Texture9, texcoord * 4.0).xyz; // Tiled detail m.basecolor = mix(m.basecolor, m.basecolor * sampled_detail, 0.5); // Gloss texture (p3d_Texture10) - affects roughness float sampled_gloss = texture(p3d_Texture10, texcoord).x; m.roughness = m.roughness * (1.0 - sampled_gloss); // Gloss is inverse of roughness #else // Standard behavior when extended textures are not used m.metallic = mInput.metallic; #endif