#configuration #exchange #oc #modular #visual #open-configuration #openconfiguration

openconfiguration_derive

OpenConfiguration (OC) 是一种模块化、高效且灵活的单向交换视觉电子商务配置的方法

2个稳定版本

1.4.3 2024年8月16日
1.4.2 2024年7月23日

#67#visual

Download history 136/week @ 2024-07-20 41/week @ 2024-07-27 14/week @ 2024-08-03 114/week @ 2024-08-10 63/week @ 2024-08-17

每月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