Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
e4ea9a4
Feature metadata draft
lilleyse Feb 19, 2021
1b225c9
New draft for version 1.0.0
lilleyse Feb 21, 2021
351136f
Add examples section
lilleyse Feb 22, 2021
1f16409
Updates from review
lilleyse Feb 22, 2021
b873edb
Fix min/max schema
lilleyse Feb 22, 2021
c6a3624
Peer review edits
lilleyse Feb 22, 2021
3935e9f
Resolve TODOs
lilleyse Feb 23, 2021
649d67b
Wording
lilleyse Feb 23, 2021
af2b0d2
Insert Wetzel output
ptrgags Feb 23, 2021
c453bf6
Wetzel output revisions
lilleyse Feb 23, 2021
c7c4a1d
Add last figure
lilleyse Feb 24, 2021
21b410f
Addressed review feedback
lilleyse Feb 24, 2021
e4c93b3
Fix schema TOC indentation
lilleyse Feb 24, 2021
1eb04ad
Don't make class required in case the model does not have metadata
lilleyse Feb 24, 2021
4dbd915
Schema wording tweaks
lilleyse Feb 24, 2021
3131bd4
Change bufferView type back to integer
lilleyse Feb 24, 2021
391235c
Update extensions/2.0/Vendor/EXT_feature_metadata/1.0.0/schema/featur…
lilleyse Feb 24, 2021
34d52ea
Update links to Cesium 3D Metadata spec
lilleyse Feb 24, 2021
fbb345a
Update date
lilleyse Feb 24, 2021
9c11809
Minor updates
lilleyse Feb 24, 2021
a192bd1
Update links to EXT_mesh_gpu_instancing
lilleyse Feb 24, 2021
7d454aa
Reorder classes/enums
lilleyse Feb 25, 2021
e079b86
Wording
lilleyse Feb 25, 2021
afe7355
Tweaks
lilleyse Feb 25, 2021
c46d566
Update README.md
lilleyse Apr 27, 2021
79937fd
Clarify enum binary properties
lilleyse Jun 21, 2021
9537e61
Fix year
lilleyse Jul 31, 2021
25d100f
Change number to integer in JSON schema
lilleyse Aug 25, 2021
173fba2
Remove landing page
lilleyse Aug 30, 2021
2912d17
Add revision history section
lilleyse Aug 30, 2021
926f53a
Remove version number and links to versions
lilleyse Aug 30, 2021
c27ce9f
Don't use non-standard not.required mechanism.
kring May 5, 2021
f7b6146
Specify item type of statistic arrays.
kring May 5, 2021
e6d1d7a
Add item types to class properties schema.
kring May 5, 2021
eab0096
Avoid duplicate title.
kring May 14, 2021
f34bd1a
Fix links to 3D Tiles Next extensions
lilleyse Aug 31, 2021
fd7af90
Describe binary data storage, remove prefix from FEATURE_ID_#, and de…
donmccurdy Sep 3, 2021
06d4514
Update other occurences of FEATURE_ID_# and binary data storage.
donmccurdy Sep 3, 2021
149fe9b
Update extensions/2.0/Vendor/EXT_feature_metadata/README.md
donmccurdy Sep 7, 2021
2f3457d
Clean up TODOs.
donmccurdy Sep 7, 2021
dd38617
EXT_feature_metadata: Remove statistics, rename constant->offset and …
donmccurdy Sep 8, 2021
8d3f5f4
EXT_feature_metadata: Clarify scope and examples.
donmccurdy Sep 9, 2021
65f0bf0
Minor grammar tweak
ptrgags Sep 9, 2021
490eca1
Remove markdown generated from JSON schema. Flatten nested extensions.
donmccurdy Sep 7, 2021
80404cf
Clean up.
donmccurdy Sep 8, 2021
cd1502d
EXT_feature_metadata: Use disjoint enums for 'type' and 'componentType'.
donmccurdy Sep 14, 2021
e0560c2
EXT_feature_metadata: Clarify VECN and MATN dimensions.
donmccurdy Sep 15, 2021
cd26d4e
EXT_feature_metadata: Simplify feature texture definition.
donmccurdy Sep 8, 2021
b7e0af1
EXT_feature_metadata: featureIds refactor
donmccurdy Sep 13, 2021
c7151a4
EXT_feature_metadata: Updates for primitive extension schema.
donmccurdy Sep 14, 2021
abf4a5a
typo fix
donmccurdy Sep 14, 2021
9111ea8
EXT_feature_metadata: Add 'featureTables' to node extension.
donmccurdy Sep 14, 2021
1ead605
EXT_feature_metadata: Fix typo in feature texture example.
donmccurdy Sep 14, 2021
56cf980
EXT_feature_metadata: Clarify channel index numbering and required pr…
donmccurdy Sep 14, 2021
469a8e3
EXT_feature_metadata: Add 'noData' property.
donmccurdy Sep 15, 2021
8b27b43
EXT_feature_metadata: Allow feature IDs outside [0, count - 1] as no-…
donmccurdy Sep 15, 2021
53cd729
EXT_feature_metadata: Disallow NaN, +Inf, -Inf.
donmccurdy Sep 15, 2021
f14f703
EXT_feature_metadata: Clarify ENUM noData values.
donmccurdy Sep 15, 2021
fc60b45
EXT_feature_metadata: Apply wording feedback.
donmccurdy Sep 16, 2021
c55b1a2
EXT_feature_metadata: Clarify 'noData' length requirements.
donmccurdy Sep 16, 2021
ef113b5
EXT_feature_metadata: Add 'required' boolean.
donmccurdy Sep 20, 2021
008bab9
EXT_feature_metadata: Wording & clarity in class.property schema file.
donmccurdy Sep 20, 2021
16ed8b8
EXT_feature_metadata: featureTables/featureTextures --> propertyTable…
donmccurdy Sep 20, 2021
ea7479e
EXT_feature_metadata: Remove unneeded disambiguation.
donmccurdy Sep 22, 2021
6845f9c
Rename EXT_feature_metadata → EXT_mesh_features
donmccurdy Sep 24, 2021
8e4fde4
EXT_mesh_features: Rename remaining schema files.
donmccurdy Sep 27, 2021
3dae113
Merge pull request #20 from donmccurdy/ext-feature-metadata-v2.8
ptrgags Sep 27, 2021
3fd0830
EXT_feature_metadata: Restrict string IDs to /a-zA-Z_/, include names…
donmccurdy Sep 22, 2021
fbc7956
Merge pull request #18 from donmccurdy/ext-feature-metadata-v2.5
ptrgags Sep 27, 2021
de35cf3
Merge branch 'main' into 3d-tiles-next
lilleyse Oct 3, 2021
4c49601
Document changes about noData
ptrgags Oct 11, 2021
35c9ba6
PR feedback
ptrgags Oct 11, 2021
9a0ef43
EXT_feature_metadata: Restore original EXT_feature_metadata for archive.
donmccurdy Oct 11, 2021
be50478
Add update about property type changes
ptrgags Oct 11, 2021
0e8d1bb
Merge pull request #23 from donmccurdy/restore-ext-feature-metadata
ptrgags Oct 11, 2021
4ff20df
Merge pull request #24 from CesiumGS/3d-tiles-next-rev
ptrgags Oct 11, 2021
39ba2fd
Remove trailing periods in changelog for consistency
ptrgags Oct 11, 2021
5e5cc98
Merge pull request #22 from CesiumGS/mesh-features-changelog
ptrgags Oct 11, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,691 changes: 1,691 additions & 0 deletions extensions/2.0/Vendor/EXT_feature_metadata/README.md

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"$schema": "http://json-schema.org/draft-04/schema",
"title": "EXT_feature_metadata extension for EXT_mesh_gpu_instancing",
"type": "object",
"description": "An object describing per-instance feature IDs to be used as indices to property arrays in the feature table.",
"properties": {
"featureIdAttributes": {
"type": "array",
"description": "An array of objects mapping per-instance feature IDs to property arrays in a feature table.",
"items": {
"$ref": "../featureIdAttribute.schema.json"
},
"minItems": 1
},
"extensions": {},
"extras": {}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Class property",
"type": "object",
"description": "A class property.",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "The name of the property, e.g. for display purposes."
},
"description": {
"type": "string",
"minLength": 1,
"description": "The description of the property."
},
"type": {
"type": "string",
"enum": [
"INT8",
"UINT8",
"INT16",
"UINT16",
"INT32",
"UINT32",
"INT64",
"UINT64",
"FLOAT32",
"FLOAT64",
"BOOLEAN",
"STRING",
"ENUM",
"ARRAY"
],
"description": "The property type. If `ENUM` is used, then `enumType` must also be specified. If `ARRAY` is used, then `componentType` must also be specified. `ARRAY` is a fixed-length array when `componentCount` is defined, and variable-length otherwise."
},
"enumType": {
"type": "string",
"description": "An enum ID as declared in the `enums` dictionary. This value must be specified when `type` or `componentType` is `ENUM`."
},
"componentType": {
"enum": [
"INT8",
"UINT8",
"INT16",
"UINT16",
"INT32",
"UINT32",
"INT64",
"UINT64",
"FLOAT32",
"FLOAT64",
"BOOLEAN",
"STRING",
"ENUM"
],
"description": "When `type` is `ARRAY` this indicates the type of each component of the array. If `ENUM` is used, then `enumType` must also be specified."
},
"componentCount": {
"type": "integer",
"minimum": 2,
"description": "The number of components per element for `ARRAY` elements."
},
"normalized": {
"type": "boolean",
"description": "Specifies whether integer values are normalized. This applies both when `type` is an integer type, or when `type` is `ARRAY` with a `componentType` that is an integer type. For unsigned integer types, values are normalized between `[0.0, 1.0]`. For signed integer types, values are normalized between `[-1.0, 1.0]`. For all other types, this property is ignored.",
"default": false
},
"max": {
"type": [
"number",
"array"
],
"items": {
"type": "number"
},
"description": "Maximum allowed values for property values. Only applicable for numeric types and fixed-length arrays of numeric types. For numeric types this is a single number. For fixed-length arrays this is an array with `componentCount` number of elements. The `normalized` property has no effect on these values: they always correspond to the integer values."
},
"min": {
"type": [
"number",
"array"
],
"items": {
"type": "number"
},
"description": "Minimum allowed values for property values. Only applicable for numeric types and fixed-length arrays of numeric types. For numeric types this is a single number. For fixed-length arrays this is an array with `componentCount` number of elements. The `normalized` property has no effect on these values: they always correspond to the integer values."
},
"default": {
"type": [
"boolean",
"number",
"string",
"array"
],
"description": "A default value to use when the property value is not defined. If used, `optional` must be set to true. The type of the default value must match the property definition: For `BOOLEAN` use `true` or `false`. For `STRING` use a JSON string. For a numeric type use a JSON number. For `ENUM` use the enum `name`, not the integer value. For `ARRAY` use a JSON array containing values matching the `componentType`."
},
"optional": {
"type": "boolean",
"description": "If true, this property is optional.",
"default": false
},
"semantic": {
"type": "string",
"minLength": 1,
"description": "An identifier that describes how this property should be interpreted. The semantic cannot be used by other properties in the class."
},
"extensions": {},
"extras": {}
},
"dependencies": {
"componentCount": [
"componentType"
],
"default": [
"optional"
]
},
"required": [
"type"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Class",
"type": "object",
"description": "A class containing a set of properties.",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "The name of the class, e.g. for display purposes."
},
"description": {
"type": "string",
"minLength": 1,
"description": "The description of the class."
},
"properties": {
"type": "object",
"description": "A dictionary, where each key is a property ID and each value is an object defining the property.",
"minProperties": 1,
"additionalProperties": {
"$ref": "class.property.schema.json"
}
},
"extensions": {},
"extras": {}
}
}
46 changes: 46 additions & 0 deletions extensions/2.0/Vendor/EXT_feature_metadata/schema/enum.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Enum",
"type": "object",
"description": "An object defining the values of an enum.",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "The name of the enum, e.g. for display purposes."
},
"description": {
"type": "string",
"minLength": 1,
"description": "The description of the enum."
},
"valueType": {
"type": "string",
"default": "UINT16",
"enum": [
"INT8",
"UINT8",
"INT16",
"UINT16",
"INT32",
"UINT32",
"INT64",
"UINT64"
],
"description": "The type of the integer enum value."
},
"values": {
"type": "array",
"description": "An array of enum values. Duplicate names or duplicate integer values are not allowed.",
"items": {
"$ref": "enum.value.schema.json"
},
"minItems": 1
},
"extensions": {},
"extras": {}
},
"required": [
"values"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Enum value",
"type": "object",
"description": "An enum value.",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "The name of the enum value."
},
"description": {
"type": "string",
"minLength": 1,
"description": "The description of the enum value."
},
"value": {
"type": "integer",
"description": "The integer enum value."
},
"extensions": {},
"extras": {}
},
"required": [
"name",
"value"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Feature IDs",
"type": "object",
"description": "Feature IDs to be used as indices to property arrays in the feature table.",
"properties": {
"attribute": {
"type": "string",
"pattern": "^_FEATURE_ID_([1-9]\\d*|0)$",
"description": "The name of the attribute containing feature IDs."
},
"constant": {
"type": "integer",
"minimum": 0,
"default": 0,
"description": "Sets a constant feature ID when the attribute property is omitted."
},
"divisor": {
"type": "integer",
"minimum": 0,
"default": 0,
"description": "The rate at which feature IDs increment. If `divisor` is 0 then `constant` is used. If `divisor` is non-zero the feature ID increments once per `divisor` sets of elements, starting at `constant`. For example, if `constant` is 0 and `divisor` is 1 the feature IDs are [0, 1, 2, ...]; if `constant` is 2 and `divisor` is 3 the feature IDs are [2, 2, 2, 3, 3, 3, 4, 4, 4, ...]"
},
"extensions": {},
"extras": {}
},
"not": {
"anyOf": [
{
"required": [
"attribute",
"constant"
]
},
{
"required": [
"attribute",
"divisor"
]
}
]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Feature ID Attribute",
"type": "object",
"description": "An object mapping feature IDs to a feature table.",
"properties": {
"featureTable": {
"type": "string",
"description": "The ID of the feature table in the model's root `EXT_feature_metadata.featureTables` dictionary."
},
"featureIds": {
"allOf": [ { "$ref": "featureIdAttribute.featureIds.schema.json" } ],
"description": "An object describing feature IDs to be used as indices to property arrays in the feature table. Feature IDs must be whole numbers in the range `[0, count - 1]` (inclusive), where `count` is the total number of features in the feature table."
},
"extensions": {},
"extras": {}
},
"required": [
"featureTable",
"featureIds"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Feature ID Texture",
"type": "object",
"description": "An object describing a texture used for storing per-texel feature IDs.",
"properties": {
"featureTable": {
"type": "string",
"description": "The ID of the feature table in the model's root `EXT_feature_metadata.featureTables` dictionary."
},
"featureIds": {
"allOf": [ { "$ref": "textureAccessor.schema.json" } ],
"description": "A description of the texture and channel to use for feature IDs. The `channels` property must have a single channel. Furthermore, feature IDs must be whole numbers in the range `[0, count - 1]` (inclusive), where `count` is the total number of features in the feature table. Texel values must be read as integers. Texture filtering should be disabled when fetching feature IDs."
},
"extensions": {},
"extras": {}
},
"required": [
"featureTable",
"featureIds"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Feature Table Property",
"type": "object",
"description": "An array of binary property values.",
"properties": {
"bufferView": {
"allOf": [ { "$ref": "glTFid.schema.json" } ],
"description": "The index of the buffer view containing property values. The data type of property values is determined by the property definition: When `type` is `BOOLEAN` values are packed into a bitfield. When `type` is `STRING` values are stored as byte sequences and decoded as UTF-8 strings. When `type` is a numeric type values are stored as the provided `type`. When `type` is `ENUM` values are stored as the enum's `valueType`. Each enum value in the buffer must match one of the allowed values in the enum definition. When `type` is `ARRAY` elements are packed tightly together and the data type is based on the `componentType` following the same rules as above. `arrayOffsetBufferView` is required for variable-size arrays and `stringOffsetBufferView` is required for strings (for variable-length arrays of strings, both are required). The buffer view `byteOffset` must be aligned to a multiple of 8 bytes. If the buffer view's `buffer` is the GLB-stored `BIN` chunk, the byte offset is measured relative to the beginning of the GLB. Otherwise, it is measured relative to the beginning of the buffer."
},
"offsetType": {
"type": "string",
"default": "UINT32",
"enum": [
"UINT8",
"UINT16",
"UINT32",
"UINT64"
],
"description": "The type of values in `arrayOffsetBufferView` and `stringOffsetBufferView`."
},
"arrayOffsetBufferView": {
"allOf": [ { "$ref": "glTFid.schema.json" } ],
"description": "The index of the buffer view containing offsets for variable-length arrays. The number of offsets is equal to the feature table `count` plus one. The offsets represent the start positions of each array, with the last offset representing the position after the last array. The array length is computed using the difference between the current offset and the subsequent offset. If `componentType` is `STRING` the offsets index into the string offsets array (stored in `stringOffsetBufferView`), otherwise they index into the property array (stored in `bufferView`). The data type of these offsets is determined by `offsetType`. The buffer view `byteOffset` must be aligned to a multiple of 8 bytes in the same manner as the main `bufferView`"
},
"stringOffsetBufferView": {
"allOf": [ { "$ref": "glTFid.schema.json" } ],
"description": "The index of the buffer view containing offsets for strings. The number of offsets is equal to the number of string components plus one. The offsets represent the byte offsets of each string in the main `bufferView`, with the last offset representing the byte offset after the last string. The string byte length is computed using the difference between the current offset and the subsequent offset. The data type of these offsets is determined by `offsetType`. The buffer view `byteOffset` must be aligned to a multiple of 8 bytes in the same manner as the main `bufferView`."
},
"extensions": {},
"extras": {}
},
"required": [
"bufferView"
]
}
Loading