I am facing shader error 0 - validate false error, some GLB’s load correctly and with some it display’s an this error
Below is a code snippet-
gltf.scene.traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.material.userData.originalMap = child.material.map;
child.material.onBeforeCompile = function (shader) {
console.log('Child material45', child.material);
if (child.material) {
console.log("On compile");
shader.fragmentShader = 'uniform int r;\n' + shader.fragmentShader.replace(/}$/, `if(r == 1){
gl_FragColor.rgb = texture2D(roughnessMap, vUv).ggg;
}else if(r ==2){
gl_FragColor.rgb = texture2D(metalnessMap, vUv).bbb;
}else if(r == 3){
gl_FragColor.rgb = texture2D(aoMap, vUv).rrr;
}}`,
shader.uniforms.r = {});
Object.defineProperty(shader.uniforms.r, "value", {
get() {
return child.material.r;
}
});
child.material.r = 0;
}
}
}
if (typeof guiB != 'undefined') {
const element = document.getElementById('my-gui-texture');
element.remove();
}
textureVariants();
selB.onChange(function (value) {
gltf.scene.traverse(function (child) {
if (child instanceof THREE.Mesh) {
if (value === 'normalMap') {
if (child.material.normalMap) {
child.material.map = child.material.normalMap;
child.material.r = 0;
console.log('Normal map exist');
}
}
if (value === 'alphaMap') {
if (child.material.alphaMap) {
child.material.map = child.material.alphaMap;
child.material.r = 0;
console.log('Alpha map exist');
}
}
if (value === 'aoMap') {
if (child.material.aoMap) {
child.geometry.setAttribute('uv2', new THREE.BufferAttribute(child.geometry.attributes.uv.array, 2));
child.material.map = child.material.aoMap;
child.material.r = 3;
console.log('AO map exist');
}
}
if (value === 'emissiveMap') {
if (child.material.emissiveMap) {
child.material.map = child.material.emissiveMap;
child.material.r = 0;
console.log('Emissive map exist');
}
}
if (value === 'roughnessMap') {
if (child.material.roughnessMap) {
child.material.map = child.material.roughnessMap;
child.material.r = 1;
console.log('Roughness map exist');
}
}
if (value === 'metalnessMap') {
if (child.material.metalnessMap) {
child.material.map = child.material.metalnessMap;
child.material.r = 2;
console.log('Metalness map exist');
}
}
if (value === 'None') {
child.material.map = child.material.userData.originalMap;
child.material.r = 0;
}
else {
console.log('normal map not working333');
}