#product #configuration #mesh #oc #format #visual #modular

已撤回 open_configuration

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

1.3.2 2022年3月28日
1.3.1 2022年3月13日
1.3.0 2022年3月9日

#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