最近,@yorgunkirmizi 讨论了纹理、着色器、纹理坐标以及所有此类内容在 IFC 中的工作原理。 我们在破译什么是可能的、什么是不可能的方面已经取得了一些重大进展,所以我想我应该打开这个线程,以便其他人也可以参与其中,或者至少密切关注进展。
推荐:用 NSDT设计器 快速搭建可编程3D场景。
据我们所知,纹理是 IFC 中最著名但不受支持的方面之一。 FZKViewer 有一些初步的纹理支持,例如,对于其中一种纹理类型,Jakob Beetz 已设法使其显示在原始对象上。 BlenderBIM 附加组件支持外部参考,这对于获得任意复杂的纹理、材质和照明来说有点作弊,因为它推迟了 IFC 外部的纹理定义。 因此,我们希望做得更好并为其提供适当的支持,其中还包括为行业其他公司提供测试用例,以便他们也能迎头赶上。
为了进行对比,让我们从如何使用表面颜色设计表示样式开始:
IfcShapeRepresentation --> IfcFacetedBrep <-- IfcStyledItem --> IfcSurfaceStyle --> IfcSurfaceStyleShading
IfcSurfaceStyleShading 包括基本视口颜色、漫反射分量、镜面反射分量和一些传输数据。 将其视为带有一些闪回的原则着色器,仍然允许选择“phong”作为着色器类型。
对于纹理,我们不使用 IfcSurfaceStyleShading,而是使用 IfcSurfaceStyleWithTextures。 然后,我们可以堆叠一系列 IfcSurfaceTexture 纹理。 将此堆栈视为组合起来创建颜色混合、漫反射贴图、高光贴图、凹凸贴图等的各种节点。
IfcShapeRepresentation --> IfcFacetedBrep <-- IfcStyledItem --> IfcSurfaceStyle --> IfcSurfaceStyleWithTextures -> IfcSurfaceTexture (L[1:?])
IfcSurfaceTexture 共有三种类型:Blobs、Images和Pixels。 这是引用原始图像数据的三种不同方法。 嵌入的 blob、指向图像的 URI 或像素 RGB 数组。 无论您选择哪种成像参考,所有 IfcSurfaceTexture 都具有相同的能力,可以在堆栈中与各种效果和参考纹理坐标相结合。
理论上,参数似乎有足够的灵活性来记录任何纹理系统,例如 Cycles 或 Eevee 节点,或建立您自己的约定。 然而,IFC 的纹理功能源自 ISO/IES 19775-1.2:2008 X3D 架构和基础组件第 2 版第 1 部分。因此默认设置是支持着色器在 X3D 中的工作方式。 简而言之:要了解 IFC 中的纹理,您首先需要了解着色器在 X3D 中的工作原理。
需要先阅读一些文档:
- 阅读有关上述类别的所有 IFC 文档。 特别是 IfcSurfaceTexture。 不过,在阅读此列表中的其余文档之前,你还无法完全理解 IfcSurfaceTexture 的工作原理。
- X3D 规范,请参阅第 18 条“纹理组件”,然后阅读整个部分,重点关注“多重纹理”节点。
- 在你认为了解 MultiTexture 节点的工作原理之后,请通过阅读 此页面 来验证你对它的了解。 这是知识的金矿。
- 此 存储库 包含每种不同着色组合的测试用例的示例 X3D 代码
- 这个 演示查看器 理论上可以让你重新创建演示文件。 我得到的结果与基准屏幕截图不同,因此我向作者寻求帮助。
- 感谢@Gorgious 发现了 这个宝石,Blender 已经有了一个 X3D 导入器/导出器。 然而,据我所知,它们不支持 MultiTexture,而这是理解纹理在 IFC 中如何工作的难题的关键。 然而,它确实涵盖了我们可以重用的像素纹理和 UV 贴图的代码。
@yorgunkirmizi 和我一直在进行这项练习:
- 了解 X3D 规范和测试用例
- 在 Blender 中重新创建测试用例,以了解这个看似过时的标准如何反映在更现代的渲染引擎中。 我们将为每个基本情况创建节点树,描述什么是可能的,什么是不可能的。
- 将这些测试用例转换为 IFC 测试用例,展示如何在 IFC 中重新创建 X3D 定义和 Blender 材质节点树。
- 确定现有 IFC 纹理的不足之处,以及 X3D 世界中现有的解决方案是否有帮助。
创建设计人员可能使用的典型基本材质设置,例如基本漫反射贴图、PBR 工作流程中的所有贴图,并显示它们如何在 IFC 中表示。 - 清楚地记录它的不足之处。 我想到的明显场景是程序纹理、黑体色温、RGB 曲线和 SSS。 其中一些可以通过简单地描述新约定(例如,只需添加 SSSMAP 并完成!)来相当容易地支持,以使其达到更新的标准。 对于其他人,我们可能会退回到外部定义,或者定义渲染引擎特定的约定。
- 写代码! 使其发生! 纹理! 是的!
我们刚刚完成第 2 步,并开始第 3 步。
原文链接:IFC纹理及着色器 — BimAnt