glTF Specular seems incorrect in three.js

I’m using the specular glTF extension to decrease specular reflections on dielectric materials, but three.js seems to render it the wrong way, let me know if the mistake is on my side :

The intended use is
“The “specular” parameter allows artists to configure the strength of the specular reflection within the dielectric BRDF. A value of zero disables the specular reflection entirely.” source

Which means that uploading a glTF with a completely black specular map should show a model with its base color but with zero reflections, but what I get is a completely black model. The basecolor gets multiplied and darkened by the specular map, which to me is not correct.

For info, I use the glTF exporter from Blender that allows you to add a KHR_Specular to your model if you use this specific node group. Using Substance painter’s glTF exporter with a baked occlusion has the same effect on the color within three.js.

Is this because I’m confusing Occlusion and Specular ? Or is it a three.js issue ? Thanks for your insight!

Occlusion and Specular are quite different – occlusion decreases ambient/diffuse lighting contributions, and usually has no effect on specular reflections. A texture connected to the Occlusion socket in Blender will (if your UVs and lighting are set up right) render with material.aoMap in three.js.

Blender glTF export uses a metal/rough PBR workflow (as opposed to a spec/gloss workflow) and so dielectric reflections are mostly affected by the “Base Color” and “Roughness” sockets with a “Principled BSDF” material. When exported to three.js via glTF this becomes the .color, .map, .roughness, and .roughnessMap properties on MeshStandardMaterial.

While specular can still be configured separately on a metal/rough PBR workflow, it’s a fairly subtle effect. Moreover, Blender’s glTF exporter can’t currently export specular. You could set that afterward in three.js, by converting the MeshStandardMaterial to a MeshPhysicalMaterial and modifying the specular properties. The Gestaltor tool can also add these properties to a glTF material if you’d prefer a GUI workflow.