13轻量化发布导出材质贴图的常见问题

admin 于 2024/07/02 13:04 最后修改

1、问题描述

轻量化发布以后部分贴图无法生成轻量化

2、问题原因

1. 不支持导出 “贴花” 图片

1695693773658-986.png

1695693785124-965.png1695693793235-536.png

贴花导出后将是一个灰色边框,图片并不会输出。原因是它本质上并不是材质贴图,

而且截止目前最新版本(Revit 2022),Revit API 也未提供其相关参数的访问接口。

建议尽量避免使用贴花,而是使用传统的纹理贴图的方式附加图片资源。

2. 不支持导出 RPC 族构件图片

1695697271195-679.png

1695697742450-643.png

RPC 族构件是基于被称为 RPC 组件的特殊族,其内部图片及 UV 数据的 API 接口

也未公开。对于此类构件只能导出它的 “基础纸板”。

建议建模时尽量避免使用 RPC 族,而是使用一些 “真正的” 模型族来表达植物、行

人和车辆这些内容。

3. 不支持导出非 “图像” 类型的材质

1695697759803-146.png

只有当材质定义使用“图像”方式设定的纹理贴图才能被正确导出;

而其它的非 “图像” 类型的材质,原理上属于 Shader 贴图,受限于无法找到在终

端图形平台的正确表达及信息传递方法,所以无法导出。

4. 材质定义信息紊乱的情况

常见于某些在早期 Revit 版本上建模,后来用较新的 Revit 版本升级过的 rvt 模

型,可能是由于 Revit 内部的 bug,导致升级过程中材质定义信息紊乱,导出过程中程

序无法正确读取到其材质定义导致不能输出贴图;

若 Revit 版本大于 2018.1,最新版本的 Engine 已经可以正确识别并处理此类问

题,在导出过程中自动修复并正确处理。

如果您的 Revit 或 Engine 的版本较老,您也可以通过手工操作来修正此类数据问

题,方法是将材质定义中的“使用渲染外观”选项选中即可,如下图:

1695697781564-208.png

5. 使用 “按类别” 方式设置材质的情况

在 Revit 建模有一种为构件设置关联材质的方法,即使用 “按类别” 的方式来设置

绑定构件的材质,为构件的材质绑定提供了极大的灵活性。

1695697798488-357.png

1695697816124-414.png

其基本方法为:

(1)首先为构件及构件内子元素设置对应的 “类别” 和“子类别”,并把材质属性设

置为“按类别”;

(2)然后在 Revit 的 管理/对象样式 中为每个“类别”和“子类别”指定材质信息;

(3)最后 Revit 在显示构件时根据之前的设置找到构件及子构件内子元素对应的材

质,动态关联并渲染输出;

但在导出数据的过程中,由于无法获取到构件内子元素的“子类别”信息,导出程序

无法找到对应关联的材质,导致无法正确获取并输出构件内子元素“按类别”方式设置的

材质;

建议:“按类别”方式设置材质的方法,与模型导出功能不兼容,建议慎用。

6. 导出 3D Tiles 时, 对于带有凹凸贴图的材质,不同构件显示亮度不一致的问题

原因分析:3D Tiles 底层数据使用 glTF 格式作为模型载体,但 glTF 并不支持凹

凸贴图,如果为材质定义了 “凹凸贴图”,导出程序会尝试将“凹凸贴图”转换为“法线贴

图”,来模拟凹凸效果。但“法线贴图”对环境光线比较敏感,如果不同构件上的贴图摆放

方向不同,比如有些横着贴有些竖着贴,就会导致在 显示时出现不同的明

暗效果;

解决思路:

(1) 可以到材质定义中取消“凹凸贴图”,虽然输出少了凹凸效果但解决了明暗差异

问题,如下图:

1695698032123-417.png

7. 贴图类型组合与 glTF 格式规范不兼容的情况

若导出的数据格式为 glTF/glb 或 3D Tiles,受 glTF 格式规范中 PBR 定义限制,

当前支持的贴图类型组合为以下 5 种,若您的贴图定义不在这 5 种范围内则会自动适

配调整到这五种组合之一(glTF 原生并不支持凹凸纹理,Engine 会自动将其转换为法

线纹理)。

⚫ 普通纹理(diffuse)

⚫ 普通纹理(diffuse) + 凹凸纹理(bump)

⚫ Alpha 纹理(alpha)

⚫ Alpha 纹理(alpha) + 凹凸纹理(bump)

⚫ 凹凸纹理(bump)

若您的材质定义中的贴图类型组合不在这 5 种情况之内,可能会导致导出的视觉

效果和 Revit 中的效果有差异;

3、解决步骤

如果纹理贴图未如您预期导出展示,您可以按照以下思路来排查解决。

1. 如果您使用的软件 版本较老,请先升级到最新版本后重试;

2. 判断是否属于前文中不支持导出贴图的几种情形,如果是的话则需要您先调整修改

模型;

3. 导出模型时,视觉样式是否选中了 “纹理” 或 “真实”,如选择不正确可更正后重新

导出;

4. 验证下是否能在 Revit 中看到模型上的贴图,如果 Revit 中都看不到贴图说明材

质定义有问题,或者材质图片文件未正确部署,排除问题后再导出;

注 1:如果模型使用了非系统内置的贴图,可向建模单位获取贴图文件,并按照原

始贴图文件路径进行拷贝部署;

注 2:若已经有贴图文件,但不知道原始贴图文件路径或者无法按原始贴图文件路

径部署(比如本地没有对应的磁盘盘符分区),也可直接把贴图文件拷到贝 rvt 模型的

同一个文件夹里,这时虽然 Revit 中还是看不到贴图,但 Engine 已经可以正确识别并

导出贴图。(这种情况下不可将 rvt 模型直接放到磁盘根目录,否则会因为系统权限原

因导致 Engine 无法找到贴图)

5. 若导出的格式为 3D Tiles,在内置预览器一切正常,但发布到 Web Server 下却看

不到贴图。

对于这种情况可以选择导出时不勾选 “WebP 纹理压缩”重新导出,或者为 Web

Server 配置增加设置 MIME(.webp image/webp);

6. 若感觉在 Cesium 中模型显示的亮度不准确,可以拖动 Cesium 底部的时间轴来

调整阳光角度,可改善模型显示的光照效果;

7. 如果以上步骤都未解决问题,考虑可能是 Engine 的程序问题,可以准备一个能重

现问题的模型发给我们测试,绝大部分情况下 3-5 个工作日内可完成修正更新。