pbrt-v3 icon indicating copy to clipboard operation
pbrt-v3 copied to clipboard

Translucent roughness: Only for specular but not diffuse?

Open bhouston opened this issue 9 years ago • 1 comments

The simplified pseudo code for the "translucent" material is this:

bsdfs.add( new LambertianReflection( reflectance * diffuse ) );
bsdfs.add( new LambertianTransmission( transmittance * diffuse ) );

var microfacetDistribution = new TrowbridgeReitzDistribution( roughness, roughness );
var fresnel = new FresnelDielectric( 1, 1.5 );
bsdfs.add( new MicrofacetReflection( reflectance * specular, microfacetDistribution, fresnel ) );
bsdfs.add( new MicrofacetTransmission( transmittance * specular, microfacetDistribution, 1.0, 1.5 ) );

You can see that roughess is only used for the specular. But if one assumes a microfacet model of the surface for specular, shouldn't one similarly assume microsurface model for the diffuse?

Second issue, doesn't this lead to a microfacet model conflict: Oren-Nayar model is derived from the older Cook-Torrence / Beckmann microfacet distribution. But the specular model here is based on the more modern Trowbridge-Reitz microfacet distribution. Thus there may be a roughness parameterization conflict between these two models as it is -- although it also may be so slight it doesn't matter, or maybe diffuse roughness in this case has no perceptible result?

bhouston avatar Sep 24 '15 07:09 bhouston

Ah, interesting. I agree it'd probably make sense to use the roughness for both the specular and diffuse models, though, as you point out, it's not obvious how to relate those two.

mmp avatar Sep 26 '15 20:09 mmp