Forgeviewer 对 glb 文件的照明

问题描述 投票:0回答:1

我正在使用 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);

任何关于如何改善照明并使模型显得更亮的建议将不胜感激。

我还注意到,模型上有一种灯光效果,当它们旋转或向光移动时,它们会显得呈灰色。下面的图像显示了新模型加载到场景后我所看到的内容: (https://i.stack.imgur.com/KMiBv.png)

如您所见,模型非常暗,中间有亮光。指甲材质颜色是鲜红色,但看起来几乎是黑色的。

我不确定为什么会发生这种情况或如何控制它。看起来可能与灯光或模型的材质有关,但我还没有找到调整这些因素以获得所需外观的方法。

任何关于为什么会发生这种情况的见解,或有关如何解决它的建议,也将非常受欢迎。

我尝试了几种解决方案来解决照明问题:

  1. 更改灯光预设:我尝试使用 Autodesk Forge Viewer 提供的不同灯光预设,但模型的外观没有明显变化。
  2. 调整光线强度:我尝试增加相机光线的强度,但这并没有让模型显得更亮。
  3. 添加额外的灯光:我向场景中添加了额外的 THREE.AmbientLight 和 THREE.HemisphereLight 对象,但模型仍然显得很暗。

我注意到的一件事是,当我将鼠标悬停在查看器中的模型上时,它会突出显示并以更明亮的色调显示,更接近我想要的效果。但是,我还没有找到一种方法将此效果永久应用到整个模型。

three.js autodesk-forge autodesk-viewer gltf lighting
1个回答
0
投票

仅从屏幕截图中很难判断,但这可能是 GLB 模型使用的材质与查看器中实现的 PBR 系统“不兼容”的问题,或者模型可能包含一些意外的法线。

顺便说一句,添加自定义灯光来覆盖场景可能不会产生任何效果,因为我认为观看者不会使用这些灯光来照亮实际的设计元素。

我建议您在将 glTF/glb 加载到查看器之前尝试调整其材质参数。或者,您可以将 glTF/glb 作为普通

THREE.Mesh
对象加载到覆盖场景之一中,并使用普通 Three.js 灯将其照亮。

如果这些都没有帮助,您可能还想考虑通过

aps (dot) help (at) autodesk (dot) com
与我们共享其中一个文件,以便我们也可以在我们这边调试它。

© www.soinside.com 2019 - 2024. All rights reserved.