11个稳定版本
新 1.4.3 | 2024年8月16日 |
---|---|
1.4.2 | 2024年7月23日 |
1.4.1 | 2023年7月11日 |
1.3.6 | 2023年3月27日 |
1.3.0 | 2022年3月28日 |
48 在 配置 中
325 每月下载量
在 ig-gfx-server 中使用
84KB
1.5K SLoC
OpenConfiguration 格式概述
快速入门
TypeScript/JavaScript
npm i @intelligentgraphics/openconfiguration
.NET
添加 Nuget 包
https://nuget.net.cn/packages/OpenConfiguration/
目标
OpenConfiguration (OC) 是一种开放、文档齐全且可读的文件格式,用于高效描述产品,通常但不仅限于由配置器创建。基本上,OC 描述配置快照,包括图形方面(3D)以及商业方面。最初,OC 被定义为描述此类快照,无论是完全还是增量(作为服务器端过程的成果),但 OC 的未来版本可能包含目录和/或配置信息,允许在客户端执行更多操作。
OC 的定义严格关注效率。这通过非常高效的资产格式实现,例如 OpenCTM 用于 3D 网格,另一方面是通过深入结构的产物描述,这些描述将资产作为可共享(产品内和产品间)、可缓存、可延迟加载的实体。
非目标
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:添加了 volatile 属性 Hash
- 场景:添加了重定向
- 脚本:添加了技术版本,以实现版本检查
- 场景:再次删除了源(在 1.2 中引入)。使用 ConfigurationLink 代替 - 破坏性变更
- 场景:添加了 ComProducts
- 商业:添加了数量和产品
OpenConfiguration 1.2
- 场景:添加了源
- 产品:添加了 TopView 和预览
- 产品:表示法(在1.1中引入)再次移除 - 破坏性更改
OpenConfiguration 1.1
- 产品:表示法:预览和俯视图
- 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
}
}
]
}
图形表示的主要组织是产品,它们相对于彼此放置。通常,一个产品与一个商业产品1:1对应,但有许多选项可以将多产品配置转换为OC。有时这甚至可以由用户控制。
产品具有结构定义(直到仅是材料更新为止)。结构是一个节点列表,描述了产品的一个层次场景图。然而,在语法上,它是一个平面的节点列表。节点在树中的位置通过其路径进行编码。根节点为“.”。根节点的子节点路径中没有点,例如“o1”或“e2”。根节点的孙子节点路径中恰好有一个点,例如“o1.o1”。给定节点的所有祖先节点都必须在该节点之前出现在列表中。
"几何"链接如上所述的几何字典中的条目。
"MaterialCategory"是一个概念,用于实现仅更改材料的轻量级模型更新。你可以把材料类别想象成材料到几何的一个路径。materialCategories中的键是材料类别,值是材料。对于静态材料在几何上的使用,已引入@前缀以方便。以@开头的材料类别直接指向同名材料(但没有@)。
属性"Visible"表示节点的几何是否实际渲染。
属性"Selectable"表示节点是否可以在查看器中选择,或者与其父节点一起选择,或者根本不选择。
最后,"Deformation"描述了关联网格在0.0到1.0范围内的变形,其中0定义为未变形的网格。
版权
版权(C)2020 - 2024 intelligentgraphics AG。版权所有。
依赖项
~1.6–2.6MB
~51K SLoC