You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Autodesk Forge Viewer中THREE.MeshLambertMaterial失效问题求助

Forge Viewer中应用标准Three.js MeshLambertMaterial的问题

在Autodesk Forge Viewer(viewer3D.js 7.87.0版本)中尝试为模型应用THREE.MeshLambertMaterial,调用fragList.setMaterial(fragId, lambertMaterial)后模型直接消失,控制台抛出警告:

GL_INVALID_OPERATION: Active draw buffers with missing fragment shader outputs.

使用THREE.MeshBasicMaterial可以正常运行,但需要利用Lambert材质的着色能力。原本想使用THREE.MeshPhongMaterial,但Forge Viewer对该材质做了修改,导致标准Three.js的功能无法正常工作——比如material.envMap表现异常,控制环境贴图混合的material.combine属性无法修改。

相关代码示例:

const fragList = model.getFragmentList();
const matMan = Viewer.impl.matman();
const fragIds = Object.keys(fragList.fragments.fragId2dbId);
const lambertMaterial = new THREE.MeshLambertMaterial();
lambertMaterial.color = new THREE.Color(0xff0000);
matMan.addNonHDRMaterial("lambertMaterial", lambertMaterial);
lambertMaterial.envMap = null;
lambertMaterial.needsUpdate = true;
fragIds.forEach(fragId => fragList.setMaterial(fragId, lambertMaterial));
Viewer.impl.invalidate(true);

2023-04-20 需求说明

需要材质完全复刻Three.js文档中MeshLambertMaterial的表现,至少满足以下要求:

  • 可设置环境贴图(envmap),且贴图完整包裹整个网格
  • 材质可接收光照,但不使用IBL(基于图像的光照),可自行创建环境光或点光源
  • 材质的.combine属性需与标准Three.js MeshLambertMaterial一致
  • 支持纯色设置
  • 支持纹理贴图
  • 支持凹凸/法线贴图
  • 支持透明度贴图(alpha map)
  • 支持透明度效果

简言之,就是要具备标准THREE.MeshLambertMaterial的全部功能。

补充说明图示:
补充说明图示

Three.js文档中MeshLambertMaterial演示效果:
Three.js MeshLambertMaterial演示

内容的提问来源于stack exchange,提问作者xblz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:28:39