EG/RenderPipelineFile/effects/roughness_only.yaml
2025-12-12 16:16:15 +08:00

40 lines
1.6 KiB
YAML

# Roughness-only PBR effect
# This effect specifically handles roughness textures correctly
# Ensures roughness texture is not confused with diffuse texture
fragment:
defines: |
#define USE_ROUGHNESS_TEXTURE_ONLY 1
#define DONT_FETCH_DEFAULT_TEXTURES 0
inout: |
uniform sampler2D p3d_Texture3; // Roughness texture only
material: |
// Only handle roughness texture, ignore others to avoid confusion
#if USE_ROUGHNESS_TEXTURE_ONLY
// Sample roughness from p3d_Texture3
float sampled_roughness = texture(p3d_Texture3, texcoord).x;
// Apply roughness: material_roughness * texture_value
// This gives Blender-like behavior
m.roughness = mInput.roughness * sampled_roughness;
// Ensure minimum roughness to avoid rendering issues
m.roughness = max(m.roughness, 0.01);
// Keep other properties from material (no texture interference)
m.basecolor = mInput.color; // Use material color, not texture
m.metallic = mInput.metallic;
m.specular_ior = mInput.specular_ior;
m.shading_model_param0 = mInput.arbitrary0;
#else
// Fallback to material values only
m.basecolor = mInput.color;
m.roughness = mInput.roughness;
m.metallic = mInput.metallic;
m.specular_ior = mInput.specular_ior;
m.shading_model_param0 = mInput.arbitrary0;
#endif