OpenConfiguration 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package OpenConfiguration --version 1.0.0
                    
NuGet\Install-Package OpenConfiguration -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OpenConfiguration" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OpenConfiguration" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="OpenConfiguration" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OpenConfiguration --version 1.0.0
                    
#r "nuget: OpenConfiguration, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OpenConfiguration@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OpenConfiguration&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=OpenConfiguration&version=1.0.0
                    
Install as a Cake Tool

Overview of the OpenConfiguration Format

Goals

OpenConfiguration (OC) is an open, well-documented and human-readable file format for the efficient description of products, usually but not necessarily created by a configurator. Basically, OCs describe configuration snapshots, both the graphical side (3D) as well as the commercial side. Initially, OC was defined to describe such snapshots, either completely or incrementally---as result of server-side processes--but future versions of OC may embed catalog and/or configuration information allowing more things to be done at the client side.

OC was defined with a strict focus on efficiency. This is achieved on the one hand by very efficient asset formats, such as OpenCTM for 3D meshes, on the other hand deeply structured product descriptions that reference assets as shareable (both intra and inter product), cacheable, lazy-loadable entities.

Non-Goals

OC is NOT a graphical exchange format like FBX or glTF containing plenty of obscure features to be written and read by modeling programs like Blender.

History

OpenConfiguration 1.1 - Minor Update

  • Product: Representations: Preview and Top View
  • ig Geometry: new asset collider (format + asset)
  • ig Geometry Parameter: Render Order
  • ig Geometry Parameters: Normal Map Tiling and Strength
  • Component: new attribute tag

OpenConfiguration 1.0 - Initial Version

Basic Structure (Scene.ts)

An OC contains a list of products, a dictionary of geometries and a dictionary of materials.

A Product has a tree structure consisting of components. Components contain optional attributes such as geometry, transform, material category, etc (see Component.ts/cs).

The semantics of the tree is as follows:

  • A component always inherits the transform of it's parent.

  • A component inherits the material category of it's parent only if there's no category assigned to it directly.

  • The tree is defined by the component's path values. "." is the root, and "o1" ... "oN" root children. "o2.o1" again is a child of "o2" and so on and so on.

Introduction by a little example (examples/simplecube)

OC is a JSON format, so existing tools like editors and validators can be used for development.

This paragraph explains the complete simple-cube example to get you going.

{
	"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"
	},

The initial part defines some global properties, especially the "format" string to be expected in a valid OC file. Creator is a freeform text for personal usage, status is losely based on HTTP error codes and is 200 for files properly delivered by the server. Hashes are optional and used to invalidate caching in a viewer if needed.

	"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"
			}
		}
	},

Scripts can be attached for viewer interactions and animations. The scripts are provided to implement animations and refer to a virtual scene-graph API, to be specified later on.

Geometries is a dictionary of geometric entities. Inside there is another dictionary of different optional representations. "ig" is usually used for mesh-based viewers. mesh and meshFormat describe the actual mesh.

Currently supported mesh formats are OBJ, OpenCTM, FBX and OGRE Binary. A viewer incompatible with one ore more of the formats should refuse to load the OC and show an appropriate message to the user.

OpenCTM files describe triangle/mesh data including 2 UV sets for texturing. The first set ("Diffuse") is used for tile-able material textures (see below). The second set ("Object") is not tileable (i.e. every triangle gets its own part of the actual texture) and used for a GeoNormalMap.

The Normalmap adds fine details to the whole geometry (cf. GeoNormalMap) and is rendered using the second UV set of the OpenCTM. It is NOT tileable.

For fast overview purposes, "preview" can link a coarse geometry.

	"materials": {
		"IG.Reference.Bricks": {
			"ig": {
				"diffuse": {
					"color": {
						"red": 0.62750000000000006,
						"green": 0.36860000000000004,
						"blue": 0.4431
					},
					"map": {
						"mapFormat": "JPEG",
						"map": "IG.Reference.Bricks.tex/standard.jpg"
					}
				},
				"shininess": 0.0,
				"alpha": {
					"value": 1.0
				}
			}
		}
	},

Materials are described in a dictionary. Each Material can have different representations. The ig description is based on a classical Phong model with its respective properties. For simple or resource limited viewers, this also serves as a starting or fallback point.

Beyond this simple example, there are some advanced properties (e.g. roughness maps) and taxonomies defined. Taxonomies define materials and leave the renderer great freedom how to implement them.

	"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
			}
		}
	]
}

Products are a list of article with some basic commercial information. Structure is a list of nodes, describing a scenegraph for a product. It is a flat list of nodes. The position of a node in the tree is encoded in its path. The root is ".". Children of the root have a path without dots, eg "o1" or "e2". Grandchildren of the root have exactly one dot, e.g. "o1.o56" All ancestors of a given node have to be in the list before them.

Geometry links an entry in the geometries dictionary as described above.

MaterialCategory links an entry in the materialCategories dirctionary or (if starting with an "@") links directly to an entry of the materials dictionary above.

MaterialCategories can be used to give more then one node a certain material, e.g. all 4 feet nodes of a table could have
"materialCategory":"feetColor" and the materialsCategories could have a suitable entry like "feetColor":"Example.Materials.OakWood".

Visible indicates if the geometry of a node is actually rendered. Selectable indicates if the node can be selected in a viewer or together with its parents or not at all.

Deformation is the initial state (0...1) of possibly attached deformation lattices. The 0 in this example is the default value i.e. "leave mesh as given".

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp3.1 is compatible. 
.NET Framework net452 is compatible.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.7.0 183 7/7/2025
1.6.0 186 5/21/2025
1.5.0 150 2/3/2025
1.4.0 308 6/9/2023
1.3.4 290 3/27/2023
1.3.3 296 3/10/2023
1.3.2 475 1/23/2023
1.3.1 569 8/27/2022
1.3.0 545 3/28/2022
1.2.6 373 1/5/2022
1.2.5 349 12/30/2021
1.2.0 333 12/28/2021
1.1.2 385 12/16/2021
1.1.0 5,387 11/23/2021
1.0.0 5,060 11/23/2021

Initial release