THREE.GLTFLoader:未知扩展“KHR_materials_pbrSpecularGlossiness

2023-12-08

我们有一个导出 .glb 文件的应用程序,当我尝试使用以下命令将它们加载到 Three.js 中时GLTF加载器模型没有显示纹理,我收到此警告THREE.GLTFLoader: Unknown extension "KHR_materials_pbrSpecularGlossiness"。模型和纹理加载良好https://github.khronos.org/glTF-Sample-Viewer-Release/所以文件没问题。

该扩展似乎已从 Three.js 中弃用(https://github.com/mrdoob/ Three.js/pull/24950),建议是使用 gltf-extensions 或 gltf.report 转换 .glb 文件并保存新的 .glb 文件 - 这在我的情况下不太实用,是否可以调整一些内容来显示带有纹理的模型三.js?

代码足够标准:

const loader = new GLTFLoader();

loader.load(uri, function loaded(gltf) {
    const model = gltf.scene;
 
    const newMaterial = new THREE.MeshStandardMaterial({ color: 0xffffff });
    model.traverse((o) => {
        if (o.isMesh) {
            // not sure if it's relevant but if I don't .clone()
            // it removes the child and traverse crashes
            let mesh = o.clone();

            // const nextMaterial = new THREE.MeshPhysicalMaterial();
            // THREE.MeshStandardMaterial.prototype.copy.call(mesh.material, nextMaterial);
            // mesh.material = nextMaterial;

            // mesh.material.metalness = 0;

            scene.add(mesh);
        }
    });

我努力了:

  • 模型加载后更换材料
  • 点照明
  • 将金属度设置为 0

Thanks!!


较新版本的 Three.js 不包含此模型所需的规格/光泽 PBR 材质。因此这里没有快速的解决方法,模型必须转换为金属/粗糙 PBR 材质。这可能会很慢(必须重写纹理),所以如果可以的话我会离线进行。

选项 1:UI 转换

将模型加载到https://gltf.report/,接受转换材质的提示,然后将结果导出到新文件。

选项2:离线命令行转换

npm install --global @gltf-transform/cli

gltf-transform metalrough input.glb output.glb

选项 3:使用 JavaScript 进行运行时转换

If you need在运行时执行此操作,然后:

import { WebIO } from '@gltf-transform/core';
import { KHRONOS_EXTENSIONS } from '@gltf-transform/extensions';
import { metalRough } from '@gltf-transform/functions';

// Load model in glTF Transform.
const io = new WebIO().registerExtensions(KHRONOS_EXTENSIONS);
const document = await io.read('path/to/model.glb');

// Convert materials.
await document.transform(metalRough());

// Write back to GLB.
const glb = await io.writeBinary(document);

// Load model in three.js.
const loader = new GLTFLoader();
loader.parse(glb.buffer, '', (gltf) => {
  scene.add(gltf.scene);
  // ...
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

THREE.GLTFLoader:未知扩展“KHR_materials_pbrSpecularGlossiness 的相关文章

  • 使用 Three.js 在片段着色器中手动选择 mipmap 的 lod

    我正在使用 Three js 中的 glsl es 编写一个基于物理的着色器 为了添加镜面全局照明 我使用内部带有 mipmap 链的立方体贴图 dds 纹理 按照 CubeMapGen 的说明进行预先计算here http seblaga
  • THREE.JS 加载 STL 网格数组

    因此 我有一个数据库 其中包含文件引用列以及对其所需的子 STL 文件的任何引用 我可以将一两个模型加载到 THREE js 查看器中 因此所有这些都可以正常工作 但是当我加载四个左右的数组时 事情开始变得毛茸茸的 分配的网格 ID 开始变
  • 如何在 Three.js 中使用反射?

    我想在带有 Three js 的 WebGL 页面中拥有一个反射立方体表面 它应该类似于手机显示屏 反射一些光 但它仍然必须是黑色的 我创建了一个反射立方体 以及反射球体 的示例 并附有详细的注释 现场版本位于 http stemkoski
  • 获取网格顶点的最佳方法 Three.js

    我是 Three js 的新手 所以也许我不会以最佳方式解决这个问题 我创建的几何图形如下 const geo new THREE PlaneBufferGeometry 10 0 然后我对其进行旋转 geo applyMatrix new
  • 给定 3D 空间中的一条线,如何找到从它到一点的角度?

    我在 3D 空间中有两组点 我想画一条穿过两组点的中心的线 然后找到从该线到每个点的角度 从那里开始 我将根据两个角度的接近程度来确定两组中的匹配点 我知道如何找到每组点的中心 只需将它们平均在一起 并且我知道如何将它们匹配 甚至考虑到它们
  • 如何沿着简单的路径移动相机

    如何沿着简单的路径 由顶点 点数组创建 移动相机 我需要自动移动它 而不是像第一人称射击游戏那样通过键盘 鼠标事件来移动它 找了这个例子 http trijs org examples webgl geometry extrude spli
  • 在 React 中渲染 Three.js 元素?

    我正在尝试制作一个渲染 Three js 场景的 React 组件 但是 每当我尝试安装组件而不是看到正在渲染的任何类型的场景时 我只看到文本 object HTMLCanvasElement 正在显示 这是我的组件 import Reac
  • 将颜色渐变应用于网格上的材质 - Three.js

    我有一个 STL 文件加载到我的场景中 并将单一颜色应用于 phong 材质 我想要一种方法 将两种颜色应用于该网格物体的材质 并在 Z 轴上应用渐变效果 如下例所示 渐变花瓶 https i stack imgur com Ty9gq j
  • ThreeJS bufferGeometry 位置属性在应用翻译时不会更新

    我使用 STLLoader 将 stl 加载到返回 BufferGeometry 的 ThreeJS 场景中 然后我用了 myMesh position set x y z myMesh rotation setFromQuaternion
  • 在 TypeScript 中使用三个 Js + OrbitControl

    我无法得到this http www example com 在 TypeScript 中使用上述组合的示例 I have and 在我的html中和打字稿文件
  • 在 Three.js 中使用多种材质来合并几何体

    我想使用 2 个网格创建一棵松树 其中 1 个用于树干 另一个用于灌木 这就是我所做的 var pine geometry new THREE Geometry var pine texture 1 THREE ImageUtils loa
  • Three.js canvas.toDataURL 有时为空

    我正在尝试使用 html2canvas js 渲染 THREE js 场景 一些覆盖的 HTML 元素 有用大多数时候 但并非一直如此 在失败的情况下 将渲染 HTML 元素 背景 覆盖层等 但不会渲染其他元素 THREE js 场景表现得
  • 三-mtl-loader 错误:THREE.MeshPhongMaterial:.shading 已被删除 -> 对象不可见

    昨天我问了这个问题 未捕获的类型错误 THREE MTLLoader 不是构造函数 2 0 https stackoverflow com questions 47741644 uncaught typeerror three mtlloa
  • 三.js环境光意想不到的效果

    在下面的代码中 我渲染了一些立方体并使用点光源和环境光照亮它们 然而 当设置为 0xffffff 时 AmbientLight 会将侧面的颜色更改为白色 无论其指定的颜色如何 奇怪的是 点光源按预期工作 我怎样才能使环境光表现得像点光 因为
  • ThreeJS 中阴影的奇怪行为

    所以我有一个 ThreeJS 场景 并且添加了一些球体 多材质 我还添加了定向光 this light new THREE DirectionalLight 0xFFFFFF 1 this light position set 2 10 2
  • 将 USD 模型转换为 GLTF 文件格式 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直在寻找一种转换的方法 usdc usda usdz文件到 gltf使用命令行 Python 节点等等 到目前为止 一直在研究每个
  • 如何使用键盘和鼠标控制相机 - Three.js

    我在 WEB GL 中有一个带有 Three js 的 3D 环境 并且我曾经使用 Orbitcontrols js http codepen io nireno pen cAoGI http codepen io nireno pen c
  • 如何在 React Native 中渲染自定义 3D 对象

    我已经成功使用 Three js expo Three 和 expo gl 在 React Native 中配置了红色立方体的 3D 渲染 但我想让用户渲染他们自己可能拥有的自定义 3D 对象 obj 或 mtl 扩展名 但我不确定如何让他
  • 如何使用 HTML 元素阻止 THREE.js 光线投射?

    我希望页面上的 HTML 元素阻止 THREE js 光线投射 我该如何执行此操作 我遇到的问题是 当用户单击打开的 DIV 元素时 光线投射会检索场景中的对象 它会检索 DIV 后面的对象 我不想在 DIV 打开时禁用光线投射 我纯粹希望
  • 如何在 Three.js 中进入全屏?

    我已经尝试了数十种不同的方法几个小时 但没有一个有效 如下所示 document body addEventListener keydown function THREEx FullScreen request false 如何让Three

随机推荐