IFC纹理及着色器研究

这篇具有很好参考价值的文章主要介绍了IFC纹理及着色器研究。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

IFC纹理及着色器研究,着色器,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文章来源地址https://www.toymoban.com/news/detail-638569.html

到了这里,关于IFC纹理及着色器研究的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【纹理展开和纹理映射】

    这篇文章是用OpenGL来完成纹理映射,用Blender完成纹理展开的。 Projective Urban Texturing 在Blender中导入或创建您想要纹理化的3D模型,并设置好相机位置和投影方式。 在Blender中对3D模型进行UV展开,生成一个空白的纹理地图,并保存为图片文件。 在OpenGL中加载3D模型和空白的纹理

    2024年02月06日
    浏览(35)
  • DirectX3D 虚拟现实项目 三维物体的光照及着色(五个不同着色效果的旋转茶壶)

    本篇文章是中国农业大学虚拟现实课程的一次作业内容,需要对五个茶壶模型使用不同的光照进行着色和渲染,然后旋转展示。 本人的代码也是在其他人的代码的基础上修改来的,主要用于服务下一届,没有商业用途,侵删。 代码包括CPP文件代码和FX(着色器文件)代码两部

    2024年02月05日
    浏览(56)
  • opengl 学习着色器

            着色器是使用一种叫GLSL的类C语言写成的。GLSL着色器编码顺序:声明版本==》定义输入输出==》uniform==》main函数。每个着色器的入口点是main函数,在main函数中我们处理所有的输入变量,并将结果输出到输出变量中。如下图:         顶点着色器的每个输入变量

    2024年02月22日
    浏览(39)
  • 着色器语言GLSL学习

    注意:位置坐标大小可能大于1,小于0,因此要将其转化为0-1之间 clamp(num, min, max):将num值约束在(min, max)之间,小于min,值为min,大于max,值为max,在min-max之间,值为num step(n, x):当xn, 返回0;否则返回1 设长度为r,则可列出如下公式 由于光照的运算需要放在视图空间下,所

    2024年01月21日
    浏览(37)
  • 离散数学·图的着色

    k -着色 —— 用k个颜色上色的 色数 —— 最少需要的颜色数 k -色图 —— 最少需要的色 的图 χ(……) —— 相应 色数 χ(G) 点色数 =1 —— 为零图 全是孤立点 χ(K n )=n χ(G)=2 —— G为非零图二部图 二部图:一个图的点集可以分为2个互不相交的点集A,B的并,并且在G中的每一条边

    2024年02月12日
    浏览(35)
  • Blender卡通着色入门

    当想到 Blender 和 3D 设计时,你的想法可能会转向风格化渲染或照片级渲染和 VFX。 但是,你是否知道 Blender 还可以创建可与 2D 动漫风格和漫画书类似的图形? 推荐:用 [NSDT编辑器 快速搭建可编程3D场景 卡通着色(Toon Shading)也称为赛璐璐着色(Cel Shading)。 这两个术语都表

    2024年02月11日
    浏览(35)
  • 简单着色器编写(上)

    在我的第一篇OpenGL文章中,我已经成功的画出了一个三角形,默认是白色的,那么该怎么把它换一个颜色呢? 先给出完整的代码。 不同于之前,这里我使用了新的方法来画三角形。 下面是新的三角形画法: 仅靠这些还不能在屏幕上显示出一个三角形,还要继续添加OpenGL渲染

    2024年02月11日
    浏览(30)
  • 简单着色器编写(中上)

    这篇我们来介绍函数部分,也就是下面这些: 下面来逐步解释每一行代码: static unsigned int CompileShader(unsigned int type,const std::string source) static :这个表示函数是静态的,意味着它属于类或命名空间,而不是特定的对象实例。它可以通过类名或命名空间名直接调用,而无

    2024年02月11日
    浏览(30)
  • 简单着色器编写(下)

    函数部分介绍完了,最后来介绍一下main函数中的部分。 std::string vertexShader =     \\\"#version 330 coren\\\"     \\\"n\\\"     \\\"layout(location=0)in vec4 position;\\\"     \\\"n\\\"     \\\"void main()n\\\"     \\\"{n\\\"     \\\"  gl_Position = position;n\\\"     \\\"}n\\\"; std::string fragmentShader =     \\\"#version 330 coren\\\"     \\\"n\\\"     \\\"layout

    2024年02月11日
    浏览(29)
  • 简单着色器编写(中下)

    这篇我们来介绍另一部分函数。 static unsigned int CreateShader(const std::string vertexShader, const std::string fragmentShader) static :这个表示函数是静态的,属于类或命名空间,而不是特定的对象实例。它可以通过类名或命名空间名直接调用,而无需创建对象。 unsigned int :这是函数的

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包