我正在使用 React 和 TypeScript 开发一个项目,其中使用了 Autodesk Forge Viewer。在此项目中,我在运行时将 GLB 文件加载到场景中。我注意到加载模型上的颜色显得很暗,我一直在努力纠正这个问题。
这是我用来将附加模型加载到场景中的代码的简化版本:
const data = await client.getGlb(glbRequest);
await viewer.loadExtension("Autodesk.glTF");
const glbBytes = Uint8Array.from(window.atob(data), (c) => c.charCodeAt(0));
const blob = new Blob([glbBytes], {type: "model/gltf-binary"});
const url = URL.createObjectURL(blob);
viewer.loadModel(url, {fileLoader: (Autodesk.Viewing as any).FileLoaderManager.getFileLoaderForExtension("glb")});
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, async function adjustLights() {
viewer.removeEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, adjustLights);
viewer.setLightPreset(0);
const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
directionalLight.position.set(0, 1, 0);
viewer.impl.createOverlayScene('customLighting');
viewer.impl.addOverlay('customLighting', directionalLight);
viewer.impl.invalidate(true);
});
viewer.unloadModel(viewer.model);
任何关于如何改善照明并使模型显得更亮的建议将不胜感激。
我还注意到,模型上有一种灯光效果,当它们旋转或向光移动时,它们会显得呈灰色。下面的图像显示了新模型加载到场景后我所看到的内容: ()
如您所见,模型非常暗,中间有亮光。指甲材质颜色是鲜红色,但看起来几乎是黑色的。
我不确定为什么会发生这种情况或如何控制它。看起来可能与灯光或模型的材质有关,但我还没有找到调整这些因素以获得所需外观的方法。
任何关于为什么会发生这种情况的见解,或有关如何解决它的建议,也将非常受欢迎。
我尝试了几种解决方案来解决照明问题:
我注意到的一件事是,当我将鼠标悬停在查看器中的模型上时,它会突出显示并以更明亮的色调显示,更接近我想要的效果。但是,我还没有找到一种方法将此效果永久应用到整个模型。
仅从屏幕截图中很难判断,但这可能是 GLB 模型使用的材质与查看器中实现的 PBR 系统“不兼容”的问题,或者模型可能包含一些意外的法线。
顺便说一句,添加自定义灯光来覆盖场景可能不会产生任何效果,因为我认为观看者不会使用这些灯光来照亮实际的设计元素。
我建议您在将 glTF/glb 加载到查看器之前尝试调整其材质参数。或者,您可以将 glTF/glb 作为普通
THREE.Mesh
对象加载到覆盖场景之一中,并使用普通 Three.js 灯将其照亮。
如果这些都没有帮助,您可能还想考虑通过
aps (dot) help (at) autodesk (dot) com
与我们共享其中一个文件,以便我们也可以在我们这边调试它。