Hi guys!
I have a question related to different materials and how they react to light.
I’ve created this scene where I have four cubes, each of them from four different materials (Phong, Lambert, Standard and Physical). I am measuring the color of a pixel in each of these materials.
In the scene I have one directional light on top with intensity = 1. I would expect the color in these four materials to be the same, assuming they are well configured.
In the LambertMaterial and the PhysicalMaterial everything is working as expected, the light reflected is 1:
const material2 = new THREE.MeshLambertMaterial( {
side: THREE.FrontSide,
reflectivity: 0.0,
color: new THREE.Color(0xffffff),
})
const material4 = new THREE.MeshPhysicalMaterial( {
side: THREE.FrontSide,
clearcoat: 0.0,
reflectivity: 0.0,
sheen: 0.0,
specularIntensity: 0.0,
color: new THREE.Color(0xffffff),
})
With the Standard one, I get slightly different results:
Instead of 1 I get 1.0100404024124146
const material3 = new THREE.MeshStandardMaterial( {
side: THREE.FrontSide,
roughness: 1,
emissiveIntensity: 0,
metalness: 0,
color: new THREE.Color(0xffffff),
})
With this configuration, I observe that the result is the same as if I used a Physical material without setting the reflectivity/specularIntensity to 0 . That means, as if the Standard material had some reflectivity/specularIntensity set by default.
Is that the expected behavior? Is there any way I could configure the Standard material to have no reflectivity/specularIntensity?
Lastly, the same applies to the PhongMaterial, is this an expected result?
const material1 = new THREE.MeshPhongMaterial( {
side: THREE.FrontSide,
reflectivity: 0.0,
emissiveIntensity: 0.0,
shininess: 0.0,
specular: new THREE.Color(0x000000),
color: new THREE.Color(0xffffff),
})
You can find the code here: https://jsfiddle.net/javiersanjuan/xahgpczq/
Thanks a lot!