2个稳定版本
1.4.3 | 2024年8月16日 |
---|---|
1.4.2 | 2024年7月23日 |
#67 在 #visual
每月240次下载
在 2 个crate中(通过 openconfiguration)使用
16KB
122 行
OpenConfiguration 格式概述
快速入门
Typescript/JavaScript
npm i @intelligentgraphics/openconfiguration
.NET
添加Nuget包
https://nuget.net.cn/packages/OpenConfiguration/
目标
OpenConfiguration (OC) 是一种开放、文档完善且易于阅读的文件格式,用于高效地描述产品,通常但不仅限于由配置器创建。基本上,OC 描述配置快照,包括图形方面(3D)和商业方面。最初,OC 定义用于描述此类快照,无论是完全还是增量(作为服务器端过程的输出),但 OC 的未来版本可能嵌入目录和/或配置信息,允许在客户端进行更多操作。
OC 定义时非常注重效率。这通过非常高效的资产格式实现,例如用于 3D 网格的 OpenCTM,另一方面是深度结构化的产品描述,这些描述将资产作为可共享的(产品内和产品间)、可缓存的、可延迟加载的实体。
非目标
OC 不是一个像 FBX 或 glTF 这样的图形交换格式,它包含大量复杂的功能,这些功能需要建模程序(如 Blender)编写和读取。
历史
OpenConfiguration 1.4
- ig 材质:alphaMode: 标准 | RGBA
- ig 几何形状:新的网格格式 GLB
- 场景:新的属性包
- ig 几何形状:新的参数复杂性
- ig 材质:新的元材质参数 IgnoreStandardMaps
- [.NET] 为系统 JSON 序列化器添加了数据成员修饰符(与 Newtonsoft.Json 不同)
- 附件点:添加了标签
- ig 材质:光泽度现在是可选的
- 组件:变形现在是可选的
OpenConfiguration 1.3
- 产品:添加了 MasterData
- [.NET] TopView:修复了属性 Z 中的拼写错误
- [.NET] Core.XImage:添加了可变的属性 Hash
- 场景:添加了重定向
- 脚本:添加了技术版本,用于实现版本检查
- 场景:再次删除了源(在 1.2 中引入)。使用 ConfigurationLink 代替 - 破坏性更改
- 场景:添加了 ComProducts
- 商业:添加了数量和产品
OpenConfiguration 1.2
- 场景:添加了源
- 产品:添加了TopView和Preview
- 产品:移除表示(1.1版中引入)- 破坏性更改
OpenConfiguration 1.1
- 产品:表示:Preview和Top View
- ig几何:新的资产碰撞器(格式 + 资产)
- ig几何参数:渲染顺序
- ig几何参数:法线贴图平铺和强度
- 组件:新的属性标签
OpenConfiguration 1.0
基本结构(Scene.ts)
OC包含产品列表、几何字典和材料字典。
产品有一个由组件组成的树形结构。组件包含可选属性,如几何形状、变换、材料类别等(见Component.ts/cs)。
树的语义如下
-
组件始终继承其父组件的变换。
-
只有当没有直接分配类别时,组件才会继承其父组件的材料类别。
-
树由组件的路径值定义。"."是根,"o1" ... "oN"是根的子节点。"o2.o1"又是"o2"的子节点,以此类推。
以下通过一个小例子进行介绍(examples/simplecube)
OC是JSON格式,因此可以像编辑器、验证器这样的现有工具用于开发。
本段将解释完整的简单立方体示例,以便您开始使用。
{
"format": "OpenConfiguration_1.0",
"creator": "IG.Data.GFX.Formats IGXC To OC Converter",
"status": {
"code": 200
},
"hashes": {
"IG.Reference.Cube2.geo/standard.ctm": "ed085dd38a0d2639d97bb0802932d8b2",
"IG.Reference.Cube2.geo/normals_std.png": "66da0bbb3659bb39e02cd556b0539f0d",
"IG.Reference.Bricks.tex/standard.jpg": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
初始部分定义了一些全局属性,特别是预期在有效OC文件中的"format"字符串。Creator是用于个人使用的自由文本,status基于HTTP错误代码,对于服务器正确交付的文件为200。哈希值是可选的,并在需要时用于在查看器中使缓存无效。
"scripts": [
],
"geometries": {
"IG.Reference.Cube2": {
"ig": {
"previewFormat": null,
"preview": null,
"meshFormat": "OpenCTM",
"mesh": "IG.Reference.Cube2.geo/standard.ctm",
"normalMapFormat": "PNG",
"normalMap": "IG.Reference.Cube2.geo/normals_std.png"
}
}
},
可以附加脚本以进行查看器交互和动画。脚本用于实现动画并引用虚拟场景图API,将在稍后指定。
几何形状是一个几何实体的字典。其中包含另一个字典,用于不同的可选表示。"ig"通常用于基于网格的查看器。mesh和meshFormat描述了实际的网格。
当前支持的网格格式是OBJ、OpenCTM、FBX和OGRE二进制。与这些格式之一或多个不兼容的查看器应拒绝加载OC并向用户显示适当的消息。主网格格式和后备选项,以及质量级别通常在运行时在客户端和服务器之间协商。
OpenCTM文件描述三角形/网格数据,包括多达2个UV集用于纹理。标记为"Diffuse"的集用于可平铺的材料纹理(见下文)。标记为"Object"的集不可平铺(即每个三角形都得到实际纹理的一部分)并用于与几何形状相关的法线贴图,通常添加几何细节。
为了快速概述,"preview"可以链接一个粗略的几何形状。
"materials": {
"IG.Reference.Bricks": {
"ig": {
"diffuse": {
"color": {
"red": 0.6275,
"green": 0.3686,
"blue": 0.4431
},
"map": {
"mapFormat": "JPEG",
"map": "IG.Reference.Bricks.tex/standard.jpg"
}
},
"shininess": 0.0,
"alpha": {
"value": 1.0
}
}
}
},
材料在字典中描述。每个材料都可以有不同的表示。ig描述基于经典的Phong模型及其相应的属性。对于简单或资源有限的查看器,这也充当起始点或后备选项。
除了这个简单示例之外,还有一些高级(PBR)属性(例如粗糙度贴图)和分类法定义。分类法定义材料,并给渲染器很大的自由度来实施它们。
"products": [{
"state": {
"geometricHash": "#1596707789",
"visualHash": "#-1085120996"
},
"materialCategories": {
},
"categories": [],
"structure": [{
"path": ".",
"visible": true,
"selectable": "Self",
"deformation": 0.0
}, {
"path": "o1",
"visible": true,
"geometry": "IG.Reference.Cube2",
"deformation": 0.0,
"materialCategory": "@IG.Reference.Bricks"
}
],
"status": {
"code": 200
}
}
]
}
图形表示的主要组织是产品,它们相互放置。通常,一个产品与一个商业产品一一对应,但有许多选项可以将多产品配置转换为OC。有时这甚至可以由用户控制。
产品有一个结构定义(直到它仅是材料更新)。结构是一系列节点,描述了一个产品的分层场景图。语法上,它是一个节点的平面列表。节点在树中的位置编码在其路径中。根是"。"。根的子节点没有点,例如"o1"或"e2"。根的孙子节点恰好有一个点,例如"o1.o1"。给定节点的所有祖先节点必须在那个节点之前在列表中。
“几何”链接到上述描述的几何字典中的条目。
“材质类别”是一个概念,用于实现仅更改材质的轻量级模型更新。您可以将材质类别视为材质到几何的路径。materialCategories中的键是材质类别,值是材质。对于在几何上静态使用的材质,已经引入了@前缀以方便使用。以@开头的材质类别直接指向同名材质(但不包含@)。
属性“可见”表示节点几何是否实际渲染。
属性“可选择”表示节点是否可以在查看器中选中,或者与其父节点一起选中,或者根本不可选。
最后,“变形”描述了关联网格从0.0到1.0范围内的变形,其中0定义为未变形的网格。
版权
版权所有(C)2020 - 2024 intelligentgraphics AG。保留所有权利。
依赖项
~315–780KB
~19K SLoC