1.3.2 |
|
---|---|
1.3.1 |
|
1.3.0 |
|
#50 in #product
52KB
516 行
OpenConfiguration
目标
OpenConfiguration (OC) 是一种开放、文档齐全且易于阅读的文件格式,用于高效描述产品,通常但并非一定由配置器创建。基本上,OC 描述配置快照,包括图形方面(3D)以及商业方面。最初,OC 被定义为描述此类快照,无论是完全还是增量(作为服务器端进程的结果),但 OC 的未来版本可能会嵌入目录和/或配置信息,允许在客户端执行更多操作。
OC 的定义严格关注效率。这在一方面是通过非常高效的资产格式实现的,例如用于 3D 网格的 OpenCTM,另一方面是通过深层结构化的产品描述,这些描述将资产作为可共享(既在产品内部又在产品之间)、可缓存、可延迟加载的实体进行引用。
非目标
OC 不是一个像 FBX 或 glTF 这样的图形交换格式,它包含大量晦涩的功能,用于由建模程序(如 Blender)编写和阅读。
历史
OpenConfiguration 1.3
- 产品:添加了 MasterData
- [.NET] TopView:修复了属性 Z 中的拼写错误
OpenConfiguration 1.2.6
- [.NET] Core.XImage:添加了易变的属性 Hash
- 场景:添加了重定向
OpenConfiguration 1.2.5
- 脚本:添加了技术版本,以实现版本检查
- 场景:再次删除了源(在 1.2 中引入)。请使用 ConfigurationLink 代替 - 破坏性更改
- 场景:添加了 ComProducts
- 商业:添加了数量和产品
OpenConfiguration 1.2
- 场景:添加了源
- 产品:添加了 TopView 和预览
- 产品:再次删除了表示(在 1.1 中引入) - 破坏性更改
OpenConfiguration 1.1
- 产品:表示:预览和 Top View
- ig Geometry:添加了新的资产碰撞体(格式 + 资产)
- ig Geometry 参数:渲染顺序
- ig Geometry 参数:法线贴图平铺和强度
- 组件:添加了新的属性标签
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,稍后将指定。
Geometries 是几何实体的字典。其中包含不同可选表示的另一个字典。"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 描述基于经典的光照模型及其相应属性。对于简单或资源有限的查看器,这也作为起点或后备选项。
除了这个简单示例之外,还有一些高级(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"。给定节点的所有祖先节点必须在该节点之前在列表中。
"Geometry" 链接到上面描述的几何体字典中的条目。
"MaterialCategory" 是一个概念,用于实现仅更改材料的轻量级模型更新。您可以将材料类别视为材料到几何体的路径。materialCategories 中的键是一个材料类别,值是一个材料。对于静态材料在几何体上的使用,已引入 @ 前缀以方便起见。以 @ 开头的材料类别直接指向具有相同名称(但不带有 @)的材料。
属性 "Visible" 表示节点几何体是否实际渲染。
属性 "Selectable" 表示节点是否可以在查看器中或与其父节点一起选择,或者根本不能选择。
最后,“变形”描述了关联网格在0.0到1.0范围内的变形,其中0定义为未变形的网格。
版权
版权所有 (C) 2020 - 2022 intelligentgraphics AG。保留所有权利。
依赖项
~0.7–1.5MB
~33K SLoC