IFC纹理及着色器

最近,@yorgunkirmizi 讨论了纹理、着色器、纹理坐标以及所有此类内容在 IFC 中的工作原理。 我们在破译什么是可能的、什么是不可能的方面已经取得了一些重大进展,所以我想我应该打开这个线程,以便其他人也可以参与其中,或者至少密切关注进展。

据我们所知,纹理是 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 和我一直在进行这项练习:

  1. 了解 X3D 规范和测试用例
  2. 在 Blender 中重新创建测试用例,以了解这个看似过时的标准如何反映在更现代的渲染引擎中。 我们将为每个基本情况创建节点树,描述什么是可能的,什么是不可能的。
  3. 将这些测试用例转换为 IFC 测试用例,展示如何在 IFC 中重新创建 X3D 定义和 Blender 材质节点树。
  4. 确定现有 IFC 纹理的不足之处,以及 X3D 世界中现有的解决方案是否有帮助。
  5. 创建设计人员可能使用的典型基本材质设置,例如基本漫反射贴图、PBR 工作流程中的所有贴图,并显示它们如何在 IFC 中表示。
  6. 清楚地记录它的不足之处。 我想到的明显场景是程序纹理、黑体色温、RGB 曲线和 SSS。 其中一些可以通过简单地描述新约定(例如,只需添加 SSSMAP 并完成!)来相当容易地支持,以使其达到更新的标准。 对于其他人,我们可能会退回到外部定义,或者定义渲染引擎特定的约定。
  7. 写代码! 使其发生! 纹理! 是的!

我们刚刚完成第 2 步,并开始第 3 步。


原文链接:Understanding how textures and shaders work in IFC

BimAnt翻译整理,转载请标明出处