@ue-shed/protocol 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/contracts/cameras/map-tile/v1/README.md +44 -0
- package/contracts/cameras/map-tile/v1/capture-request.schema.json +68 -0
- package/contracts/cameras/map-tile/v1/capture-response.schema.json +115 -0
- package/contracts/cameras/map-tile/v1/fixtures/capture-request-valid.json +32 -0
- package/contracts/cameras/map-tile/v1/fixtures/capture-response-valid.json +24 -0
- package/contracts/cameras/map-tile/v1/fixtures/manifest-invalid-complete.json +41 -0
- package/contracts/cameras/map-tile/v1/fixtures/manifest-invalid-grid.json +44 -0
- package/contracts/cameras/map-tile/v1/fixtures/manifest-valid.json +60 -0
- package/contracts/cameras/map-tile/v1/fixtures/plan-valid.json +27 -0
- package/contracts/cameras/map-tile/v1/manifest.schema.json +162 -0
- package/contracts/cameras/map-tile/v1/plan.schema.json +176 -0
- package/contracts/cameras/provisioning/v1/README.md +5 -3
- package/contracts/cameras/provisioning/v1/fixtures/provision-request-valid.json +11 -2
- package/contracts/cameras/provisioning/v1/provision-request.schema.json +131 -50
- package/contracts/cameras/v1/README.md +6 -3
- package/contracts/editor-world/v1/README.md +10 -0
- package/contracts/editor-world/v1/request.schema.json +16 -0
- package/contracts/editor-world/v1/response.schema.json +93 -0
- package/dist/authoring.d.ts +6 -1
- package/dist/authoring.d.ts.map +1 -1
- package/dist/companion.d.ts +14 -0
- package/dist/companion.d.ts.map +1 -1
- package/dist/companion.js +7 -0
- package/dist/companion.js.map +1 -1
- package/dist/editor-play-session.d.ts +4 -1
- package/dist/editor-play-session.d.ts.map +1 -1
- package/dist/editor-play-session.js.map +1 -1
- package/dist/editor-world-control.d.ts +179 -0
- package/dist/editor-world-control.d.ts.map +1 -0
- package/dist/editor-world-control.js +47 -0
- package/dist/editor-world-control.js.map +1 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/uasset-io.d.ts +6 -1
- package/dist/uasset-io.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,7 +18,8 @@ import {
|
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
The root entry point includes the core capability and connection schemas plus the authoring, camera,
|
|
21
|
-
companion,
|
|
21
|
+
companion, editor play-session, and editor world-control contracts. Internal source modules are not
|
|
22
|
+
public subpaths.
|
|
22
23
|
|
|
23
24
|
The `contracts/` directory in the package contains the language-neutral JSON Schema authorities and
|
|
24
25
|
conformance fixtures. These files are shipped for protocol implementors, but JavaScript consumers
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Map tile capture contract v1
|
|
2
|
+
|
|
3
|
+
These checked-in JSON Schemas are the language-neutral authority for generic top-down map capture.
|
|
4
|
+
They are a sibling to, and do not change, `ue-shed-review-capture` v1.
|
|
5
|
+
|
|
6
|
+
`plan.schema.json` describes an external Map Capture Plan. `capture-request.schema.json` and
|
|
7
|
+
`capture-response.schema.json` describe a bounded editor operation named
|
|
8
|
+
`ue-shed-map-tile-capture`. `manifest.schema.json` describes neutral host-published
|
|
9
|
+
`ue-shed-map-tile-pyramid` evidence. All are major 1, minor 0.
|
|
10
|
+
|
|
11
|
+
Rows progress from world max-X toward min-X. Columns progress from world min-Y toward max-Y. The
|
|
12
|
+
orientation is explicit and versioned. A level halves units-per-pixel and doubles rows and columns;
|
|
13
|
+
capture Z does not define detail. The editor renders `gutterPixels` beyond each edge at the same
|
|
14
|
+
units-per-pixel and crops back to `tilePixelSize` before PNG encoding. Consumers use clamp-to-edge
|
|
15
|
+
sampling inside each published tile.
|
|
16
|
+
|
|
17
|
+
`captureBackend` is an optional execution hint, not part of the portable plan. Its default
|
|
18
|
+
`scene_capture_tiles` behavior remains the v1 tile operation. The experimental
|
|
19
|
+
`viewport_high_resolution` value requires one complete zoom level of at most 64 tiles; Unreal
|
|
20
|
+
renders that level through the active Level Editor viewport's High Resolution Screenshot path and
|
|
21
|
+
then cuts the resulting image into the requested tiles.
|
|
22
|
+
|
|
23
|
+
The editor accepts no output path. It stages only below `Saved/UEShed/MapTileStaging`, reports every
|
|
24
|
+
tile outcome and map package dirty state, and restores transient state before returning. The host
|
|
25
|
+
must validate staging containment, hash artifacts, and atomically publish only a manifest whose
|
|
26
|
+
state is `complete` and whose tile inventory is exhaustive. Partial and cancelled attempts remain
|
|
27
|
+
diagnostic evidence and are never discoverable as completed runs.
|
|
28
|
+
|
|
29
|
+
The `full_fidelity` render profile explicitly restores the active project's renderer features on
|
|
30
|
+
the tiled SceneCapture. `seam_stable` keeps project lighting and post processing while disabling
|
|
31
|
+
tile-local exposure, temporal accumulation, and screen-space lighting traces; it renders at 2x and
|
|
32
|
+
spatially downsamples to the declared tile size. `scene_capture_defaults` is the comparison
|
|
33
|
+
baseline: it leaves Unreal's SceneCapture renderer defaults unchanged while keeping the same tile
|
|
34
|
+
framing, gutter, warm-up, and publication path. These distinctions apply to `scene_capture_tiles`;
|
|
35
|
+
the experimental viewport backend does not use the transient SceneCapture renderer. `observation`
|
|
36
|
+
remains the reduced-effects profile.
|
|
37
|
+
|
|
38
|
+
The v1 editor capability requires the expected map to already be open. A headless launcher may open
|
|
39
|
+
that map explicitly before connecting. Interactive hosts must refuse a map switch when dirty
|
|
40
|
+
packages could be discarded. Map-session switching/restoration is deliberately outside this Remote
|
|
41
|
+
Control payload rather than giving it hidden editor authority.
|
|
42
|
+
|
|
43
|
+
Change this contract in authority order: JSON Schema and fixtures, conformant Effect codecs,
|
|
44
|
+
UEShedCameras C++ producer with trusted UE 5.7 evidence, then consumers.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://ue-shed.dev/contracts/cameras/map-tile/v1/capture-request.schema.json",
|
|
4
|
+
"title": "UE Shed bounded map tile capture request v1.0",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"capture",
|
|
9
|
+
"contract",
|
|
10
|
+
"correlationId",
|
|
11
|
+
"expectedMapPath",
|
|
12
|
+
"gutterPixels",
|
|
13
|
+
"operationId",
|
|
14
|
+
"planId",
|
|
15
|
+
"runId",
|
|
16
|
+
"tilePixelSize",
|
|
17
|
+
"tiles"
|
|
18
|
+
],
|
|
19
|
+
"properties": {
|
|
20
|
+
"capture": { "$ref": "plan.schema.json#/$defs/capturePolicy" },
|
|
21
|
+
"captureBackend": {
|
|
22
|
+
"enum": ["scene_capture_tiles", "viewport_high_resolution"]
|
|
23
|
+
},
|
|
24
|
+
"contract": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"additionalProperties": false,
|
|
27
|
+
"required": ["name", "version"],
|
|
28
|
+
"properties": {
|
|
29
|
+
"name": { "const": "ue-shed-map-tile-capture" },
|
|
30
|
+
"version": { "$ref": "plan.schema.json#/$defs/version" }
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"correlationId": { "$ref": "plan.schema.json#/$defs/id" },
|
|
34
|
+
"expectedMapPath": { "type": "string", "pattern": "^/[A-Za-z0-9_./-]+$" },
|
|
35
|
+
"gutterPixels": { "type": "integer", "minimum": 0, "maximum": 32 },
|
|
36
|
+
"operationId": { "$ref": "plan.schema.json#/$defs/id" },
|
|
37
|
+
"planId": { "$ref": "plan.schema.json#/$defs/id" },
|
|
38
|
+
"runId": { "$ref": "plan.schema.json#/$defs/id" },
|
|
39
|
+
"tilePixelSize": { "type": "integer", "minimum": 64, "maximum": 4096 },
|
|
40
|
+
"tiles": {
|
|
41
|
+
"type": "array",
|
|
42
|
+
"minItems": 1,
|
|
43
|
+
"maxItems": 64,
|
|
44
|
+
"items": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"additionalProperties": false,
|
|
47
|
+
"required": ["key", "unitsPerPixel", "worldBounds"],
|
|
48
|
+
"properties": {
|
|
49
|
+
"key": { "$ref": "#/$defs/tileKey" },
|
|
50
|
+
"unitsPerPixel": { "type": "number", "exclusiveMinimum": 0 },
|
|
51
|
+
"worldBounds": { "$ref": "plan.schema.json#/$defs/bounds" }
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"$defs": {
|
|
57
|
+
"tileKey": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"additionalProperties": false,
|
|
60
|
+
"required": ["zoom", "row", "column"],
|
|
61
|
+
"properties": {
|
|
62
|
+
"zoom": { "type": "integer", "minimum": 0 },
|
|
63
|
+
"row": { "type": "integer", "minimum": 0 },
|
|
64
|
+
"column": { "type": "integer", "minimum": 0 }
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://ue-shed.dev/contracts/cameras/map-tile/v1/capture-response.schema.json",
|
|
4
|
+
"title": "UE Shed bounded map tile capture response v1.0",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"contract",
|
|
9
|
+
"correlationId",
|
|
10
|
+
"dirtyState",
|
|
11
|
+
"durationMs",
|
|
12
|
+
"operationId",
|
|
13
|
+
"results",
|
|
14
|
+
"status",
|
|
15
|
+
"tileCounts"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"actualMapPath": { "type": "string", "pattern": "^/[A-Za-z0-9_./-]+$" },
|
|
19
|
+
"contract": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"additionalProperties": false,
|
|
22
|
+
"required": ["name", "version"],
|
|
23
|
+
"properties": {
|
|
24
|
+
"name": { "const": "ue-shed-map-tile-capture" },
|
|
25
|
+
"version": { "$ref": "plan.schema.json#/$defs/version" }
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"correlationId": { "$ref": "plan.schema.json#/$defs/id" },
|
|
29
|
+
"dirtyState": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"additionalProperties": false,
|
|
32
|
+
"required": ["before", "after"],
|
|
33
|
+
"properties": { "before": { "type": "boolean" }, "after": { "type": "boolean" } }
|
|
34
|
+
},
|
|
35
|
+
"durationMs": { "type": "number", "minimum": 0 },
|
|
36
|
+
"failure": { "$ref": "#/$defs/failure" },
|
|
37
|
+
"operationId": { "$ref": "plan.schema.json#/$defs/id" },
|
|
38
|
+
"results": {
|
|
39
|
+
"type": "array",
|
|
40
|
+
"maxItems": 64,
|
|
41
|
+
"items": {
|
|
42
|
+
"oneOf": [
|
|
43
|
+
{
|
|
44
|
+
"type": "object",
|
|
45
|
+
"additionalProperties": false,
|
|
46
|
+
"required": [
|
|
47
|
+
"bytes",
|
|
48
|
+
"captureDurationMs",
|
|
49
|
+
"height",
|
|
50
|
+
"key",
|
|
51
|
+
"stagedPath",
|
|
52
|
+
"status",
|
|
53
|
+
"width"
|
|
54
|
+
],
|
|
55
|
+
"properties": {
|
|
56
|
+
"bytes": { "type": "integer", "minimum": 1 },
|
|
57
|
+
"captureDurationMs": { "type": "number", "minimum": 0 },
|
|
58
|
+
"height": { "type": "integer", "minimum": 1 },
|
|
59
|
+
"key": { "$ref": "capture-request.schema.json#/$defs/tileKey" },
|
|
60
|
+
"stagedPath": { "type": "string", "minLength": 1 },
|
|
61
|
+
"status": { "const": "captured" },
|
|
62
|
+
"width": { "type": "integer", "minimum": 1 }
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"type": "object",
|
|
67
|
+
"additionalProperties": false,
|
|
68
|
+
"required": ["failure", "key", "status"],
|
|
69
|
+
"properties": {
|
|
70
|
+
"failure": { "$ref": "#/$defs/failure" },
|
|
71
|
+
"key": { "$ref": "capture-request.schema.json#/$defs/tileKey" },
|
|
72
|
+
"status": { "const": "failed" }
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"status": { "enum": ["completed", "partial", "cancelled", "failed"] },
|
|
79
|
+
"tileCounts": {
|
|
80
|
+
"type": "object",
|
|
81
|
+
"additionalProperties": false,
|
|
82
|
+
"required": ["failed", "requested", "succeeded"],
|
|
83
|
+
"properties": {
|
|
84
|
+
"failed": { "type": "integer", "minimum": 0 },
|
|
85
|
+
"requested": { "type": "integer", "minimum": 0 },
|
|
86
|
+
"succeeded": { "type": "integer", "minimum": 0 }
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"$defs": {
|
|
91
|
+
"failure": {
|
|
92
|
+
"type": "object",
|
|
93
|
+
"additionalProperties": false,
|
|
94
|
+
"required": ["code", "message", "recovery", "retrySafe"],
|
|
95
|
+
"properties": {
|
|
96
|
+
"code": {
|
|
97
|
+
"enum": [
|
|
98
|
+
"cancelled",
|
|
99
|
+
"capture_failed",
|
|
100
|
+
"data_layer_policy_unsupported",
|
|
101
|
+
"dirty_state_changed",
|
|
102
|
+
"encoding_failed",
|
|
103
|
+
"invalid_request",
|
|
104
|
+
"map_mismatch",
|
|
105
|
+
"streaming_not_ready",
|
|
106
|
+
"write_failed"
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
"message": { "type": "string", "minLength": 1, "maxLength": 1024 },
|
|
110
|
+
"recovery": { "type": "string", "minLength": 1, "maxLength": 1024 },
|
|
111
|
+
"retrySafe": { "type": "boolean" }
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"capture": {
|
|
3
|
+
"dataLayers": { "mode": "unchanged" },
|
|
4
|
+
"orientation": { "pitch": -90, "roll": 0, "yaw": 0 },
|
|
5
|
+
"render": {
|
|
6
|
+
"effects": { "fog": false, "volumetricFog": false },
|
|
7
|
+
"lodDistanceScaleByZoom": [4, 2, 1],
|
|
8
|
+
"lodPolicy": "per_level_distance_scale",
|
|
9
|
+
"profile": "full_fidelity"
|
|
10
|
+
},
|
|
11
|
+
"z": 5000
|
|
12
|
+
},
|
|
13
|
+
"captureBackend": "scene_capture_tiles",
|
|
14
|
+
"contract": {
|
|
15
|
+
"name": "ue-shed-map-tile-capture",
|
|
16
|
+
"version": { "major": 1, "minor": 0 }
|
|
17
|
+
},
|
|
18
|
+
"correlationId": "fixture-correlation",
|
|
19
|
+
"expectedMapPath": "/Game/Fixture/Cameras/L_CameraLoad",
|
|
20
|
+
"gutterPixels": 2,
|
|
21
|
+
"operationId": "fixture-operation",
|
|
22
|
+
"planId": "fixture-overview",
|
|
23
|
+
"runId": "fixture-run",
|
|
24
|
+
"tilePixelSize": 256,
|
|
25
|
+
"tiles": [
|
|
26
|
+
{
|
|
27
|
+
"key": { "zoom": 0, "row": 0, "column": 0 },
|
|
28
|
+
"unitsPerPixel": 4,
|
|
29
|
+
"worldBounds": { "minX": 1024, "minY": -1024, "maxX": 2048, "maxY": 0 }
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"actualMapPath": "/Game/Fixture/Cameras/L_CameraLoad",
|
|
3
|
+
"contract": {
|
|
4
|
+
"name": "ue-shed-map-tile-capture",
|
|
5
|
+
"version": { "major": 1, "minor": 0 }
|
|
6
|
+
},
|
|
7
|
+
"correlationId": "fixture-correlation",
|
|
8
|
+
"dirtyState": { "before": false, "after": false },
|
|
9
|
+
"durationMs": 27.5,
|
|
10
|
+
"operationId": "fixture-operation",
|
|
11
|
+
"results": [
|
|
12
|
+
{
|
|
13
|
+
"bytes": 1234,
|
|
14
|
+
"captureDurationMs": 20.25,
|
|
15
|
+
"height": 256,
|
|
16
|
+
"key": { "zoom": 0, "row": 0, "column": 0 },
|
|
17
|
+
"stagedPath": "C:/Project/Saved/UEShed/MapTileStaging/fixture-run/Z00/R000_C000.png",
|
|
18
|
+
"status": "captured",
|
|
19
|
+
"width": 256
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"status": "completed",
|
|
23
|
+
"tileCounts": { "failed": 0, "requested": 1, "succeeded": 1 }
|
|
24
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"addressing": {
|
|
3
|
+
"children": "z+1: (2r,2c),(2r,2c+1),(2r+1,2c),(2r+1,2c+1)",
|
|
4
|
+
"parent": "z-1: (floor(r/2),floor(c/2))",
|
|
5
|
+
"path": "Z{zoom:02}/R{row:03}_C{column:03}.png"
|
|
6
|
+
},
|
|
7
|
+
"capturePolicy": {
|
|
8
|
+
"dataLayers": { "mode": "unchanged" },
|
|
9
|
+
"orientation": { "pitch": -90, "roll": 0, "yaw": 0 },
|
|
10
|
+
"render": {
|
|
11
|
+
"effects": { "fog": false, "volumetricFog": false },
|
|
12
|
+
"lodDistanceScaleByZoom": [4, 2, 1],
|
|
13
|
+
"lodPolicy": "per_level_distance_scale",
|
|
14
|
+
"profile": "full_fidelity"
|
|
15
|
+
},
|
|
16
|
+
"z": 5000
|
|
17
|
+
},
|
|
18
|
+
"completedAt": "2026-08-12T08:00:01.000Z",
|
|
19
|
+
"contract": { "name": "ue-shed-map-tile-pyramid", "version": { "major": 1, "minor": 0 } },
|
|
20
|
+
"failures": [],
|
|
21
|
+
"grid": {
|
|
22
|
+
"orientation": { "name": "rows_max_x_to_min_x_columns_min_y_to_max_y", "version": 1 },
|
|
23
|
+
"origin": { "x": 256, "y": 0 },
|
|
24
|
+
"requestedBounds": { "minX": 0, "minY": 0, "maxX": 256, "maxY": 256 },
|
|
25
|
+
"snappedBounds": { "minX": 0, "minY": 0, "maxX": 256, "maxY": 256 }
|
|
26
|
+
},
|
|
27
|
+
"gutter": {
|
|
28
|
+
"pixels": 2,
|
|
29
|
+
"rule": "render_overdraw_then_crop",
|
|
30
|
+
"textureAddress": "clamp_to_edge"
|
|
31
|
+
},
|
|
32
|
+
"levels": [{ "columns": 1, "rows": 1, "tileWorldSize": 256, "unitsPerPixel": 1, "zoom": 0 }],
|
|
33
|
+
"planId": "fixture-overview",
|
|
34
|
+
"project": { "id": "ue-shed-fixture", "mapPath": "/Game/Fixture/Cameras/L_CameraLoad" },
|
|
35
|
+
"provenance": { "producer": "fixture-editor", "tool": "ue-shed", "toolVersion": "0.1.0" },
|
|
36
|
+
"runId": "fixture-run",
|
|
37
|
+
"startedAt": "2026-08-12T08:00:00.000Z",
|
|
38
|
+
"state": "complete",
|
|
39
|
+
"tilePixelSize": 256,
|
|
40
|
+
"tiles": []
|
|
41
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"addressing": {
|
|
3
|
+
"children": "z+1: (2r,2c),(2r,2c+1),(2r+1,2c),(2r+1,2c+1)",
|
|
4
|
+
"parent": "z-1: (floor(r/2),floor(c/2))",
|
|
5
|
+
"path": "Z{zoom:02}/R{row:03}_C{column:03}.png"
|
|
6
|
+
},
|
|
7
|
+
"capturePolicy": {
|
|
8
|
+
"dataLayers": { "mode": "unchanged" },
|
|
9
|
+
"orientation": { "pitch": -90, "roll": 0, "yaw": 0 },
|
|
10
|
+
"render": {
|
|
11
|
+
"effects": { "fog": false, "volumetricFog": false },
|
|
12
|
+
"lodDistanceScaleByZoom": [4, 2, 1],
|
|
13
|
+
"lodPolicy": "per_level_distance_scale",
|
|
14
|
+
"profile": "full_fidelity"
|
|
15
|
+
},
|
|
16
|
+
"z": 5000
|
|
17
|
+
},
|
|
18
|
+
"completedAt": "2026-08-12T08:00:01.000Z",
|
|
19
|
+
"contract": { "name": "ue-shed-map-tile-pyramid", "version": { "major": 1, "minor": 0 } },
|
|
20
|
+
"failures": [],
|
|
21
|
+
"grid": {
|
|
22
|
+
"orientation": { "name": "rows_max_x_to_min_x_columns_min_y_to_max_y", "version": 1 },
|
|
23
|
+
"origin": { "x": 256, "y": 0 },
|
|
24
|
+
"requestedBounds": { "minX": 0, "minY": 0, "maxX": 256, "maxY": 256 },
|
|
25
|
+
"snappedBounds": { "minX": 0, "minY": 0, "maxX": 256, "maxY": 256 }
|
|
26
|
+
},
|
|
27
|
+
"gutter": {
|
|
28
|
+
"pixels": 2,
|
|
29
|
+
"rule": "render_overdraw_then_crop",
|
|
30
|
+
"textureAddress": "clamp_to_edge"
|
|
31
|
+
},
|
|
32
|
+
"levels": [
|
|
33
|
+
{ "columns": 1, "rows": 1, "tileWorldSize": 256, "unitsPerPixel": 1, "zoom": 0 },
|
|
34
|
+
{ "columns": 3, "rows": 2, "tileWorldSize": 128, "unitsPerPixel": 0.5, "zoom": 1 }
|
|
35
|
+
],
|
|
36
|
+
"planId": "fixture-overview",
|
|
37
|
+
"project": { "id": "ue-shed-fixture", "mapPath": "/Game/Fixture/Cameras/L_CameraLoad" },
|
|
38
|
+
"provenance": { "producer": "fixture-editor", "tool": "ue-shed", "toolVersion": "0.1.0" },
|
|
39
|
+
"runId": "fixture-run",
|
|
40
|
+
"startedAt": "2026-08-12T08:00:00.000Z",
|
|
41
|
+
"state": "complete",
|
|
42
|
+
"tilePixelSize": 256,
|
|
43
|
+
"tiles": []
|
|
44
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"addressing": {
|
|
3
|
+
"children": "z+1: (2r,2c),(2r,2c+1),(2r+1,2c),(2r+1,2c+1)",
|
|
4
|
+
"parent": "z-1: (floor(r/2),floor(c/2))",
|
|
5
|
+
"path": "Z{zoom:02}/R{row:03}_C{column:03}.png"
|
|
6
|
+
},
|
|
7
|
+
"capturePolicy": {
|
|
8
|
+
"dataLayers": { "mode": "unchanged" },
|
|
9
|
+
"orientation": { "pitch": -90, "roll": 0, "yaw": 0 },
|
|
10
|
+
"render": {
|
|
11
|
+
"effects": { "fog": false, "volumetricFog": false },
|
|
12
|
+
"lodDistanceScaleByZoom": [4, 2, 1],
|
|
13
|
+
"lodPolicy": "per_level_distance_scale",
|
|
14
|
+
"profile": "full_fidelity"
|
|
15
|
+
},
|
|
16
|
+
"z": 5000
|
|
17
|
+
},
|
|
18
|
+
"completedAt": "2026-08-12T08:00:01.000Z",
|
|
19
|
+
"contract": {
|
|
20
|
+
"name": "ue-shed-map-tile-pyramid",
|
|
21
|
+
"version": { "major": 1, "minor": 0 }
|
|
22
|
+
},
|
|
23
|
+
"failures": [],
|
|
24
|
+
"grid": {
|
|
25
|
+
"orientation": {
|
|
26
|
+
"name": "rows_max_x_to_min_x_columns_min_y_to_max_y",
|
|
27
|
+
"version": 1
|
|
28
|
+
},
|
|
29
|
+
"origin": { "x": 256, "y": 0 },
|
|
30
|
+
"requestedBounds": { "minX": 0, "minY": 0, "maxX": 256, "maxY": 256 },
|
|
31
|
+
"snappedBounds": { "minX": 0, "minY": 0, "maxX": 256, "maxY": 256 }
|
|
32
|
+
},
|
|
33
|
+
"gutter": {
|
|
34
|
+
"pixels": 2,
|
|
35
|
+
"rule": "render_overdraw_then_crop",
|
|
36
|
+
"textureAddress": "clamp_to_edge"
|
|
37
|
+
},
|
|
38
|
+
"levels": [{ "columns": 1, "rows": 1, "tileWorldSize": 256, "unitsPerPixel": 1, "zoom": 0 }],
|
|
39
|
+
"planId": "fixture-overview",
|
|
40
|
+
"project": {
|
|
41
|
+
"id": "ue-shed-fixture",
|
|
42
|
+
"mapPath": "/Game/Fixture/Cameras/L_CameraLoad"
|
|
43
|
+
},
|
|
44
|
+
"provenance": { "producer": "fixture-editor", "tool": "ue-shed", "toolVersion": "0.1.0" },
|
|
45
|
+
"runId": "fixture-run",
|
|
46
|
+
"startedAt": "2026-08-12T08:00:00.000Z",
|
|
47
|
+
"state": "complete",
|
|
48
|
+
"tilePixelSize": 256,
|
|
49
|
+
"tiles": [
|
|
50
|
+
{
|
|
51
|
+
"bytes": 1234,
|
|
52
|
+
"hash": "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
|
|
53
|
+
"height": 256,
|
|
54
|
+
"key": { "zoom": 0, "row": 0, "column": 0 },
|
|
55
|
+
"relativePath": "Z00/R000_C000.png",
|
|
56
|
+
"width": 256,
|
|
57
|
+
"worldBounds": { "minX": 0, "minY": 0, "maxX": 256, "maxY": 256 }
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"capture": {
|
|
3
|
+
"dataLayers": { "mode": "unchanged" },
|
|
4
|
+
"orientation": { "pitch": -90, "roll": 0, "yaw": 0 },
|
|
5
|
+
"render": {
|
|
6
|
+
"effects": { "fog": false, "volumetricFog": false },
|
|
7
|
+
"lodDistanceScaleByZoom": [4, 2, 1],
|
|
8
|
+
"lodPolicy": "per_level_distance_scale",
|
|
9
|
+
"profile": "full_fidelity"
|
|
10
|
+
},
|
|
11
|
+
"z": 5000
|
|
12
|
+
},
|
|
13
|
+
"contract": {
|
|
14
|
+
"name": "ue-shed-map-capture-plan",
|
|
15
|
+
"version": { "major": 1, "minor": 0 }
|
|
16
|
+
},
|
|
17
|
+
"gutterPixels": 2,
|
|
18
|
+
"id": "fixture-overview",
|
|
19
|
+
"levels": { "coarsestUnitsPerPixel": 4, "count": 3 },
|
|
20
|
+
"output": { "imageFormat": "png", "publication": "local_immutable" },
|
|
21
|
+
"project": {
|
|
22
|
+
"id": "ue-shed-fixture",
|
|
23
|
+
"mapPath": "/Game/Fixture/Cameras/L_CameraLoad"
|
|
24
|
+
},
|
|
25
|
+
"requestedBounds": { "minX": -1500, "minY": -600, "maxX": 1100, "maxY": 1500 },
|
|
26
|
+
"tilePixelSize": 256
|
|
27
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://ue-shed.dev/contracts/cameras/map-tile/v1/manifest.schema.json",
|
|
4
|
+
"title": "UE Shed neutral map tile pyramid manifest v1.0",
|
|
5
|
+
"description": "Cross-field grid and exhaustive-completion invariants are additionally enforced by conformant producers and decoders.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"addressing",
|
|
10
|
+
"capturePolicy",
|
|
11
|
+
"completedAt",
|
|
12
|
+
"contract",
|
|
13
|
+
"failures",
|
|
14
|
+
"grid",
|
|
15
|
+
"gutter",
|
|
16
|
+
"levels",
|
|
17
|
+
"planId",
|
|
18
|
+
"project",
|
|
19
|
+
"provenance",
|
|
20
|
+
"runId",
|
|
21
|
+
"startedAt",
|
|
22
|
+
"state",
|
|
23
|
+
"tilePixelSize",
|
|
24
|
+
"tiles"
|
|
25
|
+
],
|
|
26
|
+
"properties": {
|
|
27
|
+
"addressing": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"additionalProperties": false,
|
|
30
|
+
"required": ["children", "parent", "path"],
|
|
31
|
+
"properties": {
|
|
32
|
+
"children": { "const": "z+1: (2r,2c),(2r,2c+1),(2r+1,2c),(2r+1,2c+1)" },
|
|
33
|
+
"parent": { "const": "z-1: (floor(r/2),floor(c/2))" },
|
|
34
|
+
"path": { "const": "Z{zoom:02}/R{row:03}_C{column:03}.png" }
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"capturePolicy": { "$ref": "plan.schema.json#/$defs/capturePolicy" },
|
|
38
|
+
"completedAt": { "$ref": "#/$defs/timestamp" },
|
|
39
|
+
"contract": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"additionalProperties": false,
|
|
42
|
+
"required": ["name", "version"],
|
|
43
|
+
"properties": {
|
|
44
|
+
"name": { "const": "ue-shed-map-tile-pyramid" },
|
|
45
|
+
"version": { "$ref": "plan.schema.json#/$defs/version" }
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"failures": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"items": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"additionalProperties": false,
|
|
53
|
+
"required": ["failure", "key"],
|
|
54
|
+
"properties": {
|
|
55
|
+
"failure": { "$ref": "capture-response.schema.json#/$defs/failure" },
|
|
56
|
+
"key": { "$ref": "capture-request.schema.json#/$defs/tileKey" }
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"grid": {
|
|
61
|
+
"type": "object",
|
|
62
|
+
"additionalProperties": false,
|
|
63
|
+
"required": ["orientation", "origin", "requestedBounds", "snappedBounds"],
|
|
64
|
+
"properties": {
|
|
65
|
+
"orientation": {
|
|
66
|
+
"type": "object",
|
|
67
|
+
"additionalProperties": false,
|
|
68
|
+
"required": ["name", "version"],
|
|
69
|
+
"properties": {
|
|
70
|
+
"name": { "const": "rows_max_x_to_min_x_columns_min_y_to_max_y" },
|
|
71
|
+
"version": { "const": 1 }
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"origin": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"additionalProperties": false,
|
|
77
|
+
"required": ["x", "y"],
|
|
78
|
+
"properties": { "x": { "type": "number" }, "y": { "type": "number" } }
|
|
79
|
+
},
|
|
80
|
+
"requestedBounds": { "$ref": "plan.schema.json#/$defs/bounds" },
|
|
81
|
+
"snappedBounds": { "$ref": "plan.schema.json#/$defs/bounds" }
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"gutter": {
|
|
85
|
+
"type": "object",
|
|
86
|
+
"additionalProperties": false,
|
|
87
|
+
"required": ["pixels", "rule", "textureAddress"],
|
|
88
|
+
"properties": {
|
|
89
|
+
"pixels": { "type": "integer", "minimum": 0, "maximum": 32 },
|
|
90
|
+
"rule": { "const": "render_overdraw_then_crop" },
|
|
91
|
+
"textureAddress": { "const": "clamp_to_edge" }
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"levels": {
|
|
95
|
+
"type": "array",
|
|
96
|
+
"minItems": 1,
|
|
97
|
+
"maxItems": 24,
|
|
98
|
+
"items": {
|
|
99
|
+
"type": "object",
|
|
100
|
+
"additionalProperties": false,
|
|
101
|
+
"required": ["columns", "rows", "tileWorldSize", "unitsPerPixel", "zoom"],
|
|
102
|
+
"properties": {
|
|
103
|
+
"columns": { "type": "integer", "minimum": 1 },
|
|
104
|
+
"rows": { "type": "integer", "minimum": 1 },
|
|
105
|
+
"tileWorldSize": { "type": "number", "exclusiveMinimum": 0 },
|
|
106
|
+
"unitsPerPixel": { "type": "number", "exclusiveMinimum": 0 },
|
|
107
|
+
"zoom": { "type": "integer", "minimum": 0 }
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"planId": { "$ref": "plan.schema.json#/$defs/id" },
|
|
112
|
+
"project": { "$ref": "plan.schema.json#/$defs/project" },
|
|
113
|
+
"provenance": {
|
|
114
|
+
"type": "object",
|
|
115
|
+
"additionalProperties": false,
|
|
116
|
+
"required": ["producer", "tool", "toolVersion"],
|
|
117
|
+
"properties": {
|
|
118
|
+
"producer": { "type": "string", "minLength": 1, "maxLength": 1024 },
|
|
119
|
+
"tool": { "const": "ue-shed" },
|
|
120
|
+
"toolVersion": { "type": "string", "minLength": 1, "maxLength": 1024 }
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"runId": { "$ref": "plan.schema.json#/$defs/id" },
|
|
124
|
+
"startedAt": { "$ref": "#/$defs/timestamp" },
|
|
125
|
+
"state": { "enum": ["complete", "partial", "cancelled"] },
|
|
126
|
+
"tilePixelSize": { "type": "integer", "minimum": 64, "maximum": 4096 },
|
|
127
|
+
"tiles": {
|
|
128
|
+
"type": "array",
|
|
129
|
+
"items": {
|
|
130
|
+
"type": "object",
|
|
131
|
+
"additionalProperties": false,
|
|
132
|
+
"required": [
|
|
133
|
+
"bytes",
|
|
134
|
+
"hash",
|
|
135
|
+
"height",
|
|
136
|
+
"key",
|
|
137
|
+
"relativePath",
|
|
138
|
+
"width",
|
|
139
|
+
"worldBounds"
|
|
140
|
+
],
|
|
141
|
+
"properties": {
|
|
142
|
+
"bytes": { "type": "integer", "minimum": 1 },
|
|
143
|
+
"hash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
|
|
144
|
+
"height": { "type": "integer", "minimum": 1 },
|
|
145
|
+
"key": { "$ref": "capture-request.schema.json#/$defs/tileKey" },
|
|
146
|
+
"relativePath": {
|
|
147
|
+
"type": "string",
|
|
148
|
+
"pattern": "^Z[0-9]{2,}/R[0-9]{3,}_C[0-9]{3,}\\.png$"
|
|
149
|
+
},
|
|
150
|
+
"width": { "type": "integer", "minimum": 1 },
|
|
151
|
+
"worldBounds": { "$ref": "plan.schema.json#/$defs/bounds" }
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"$defs": {
|
|
157
|
+
"timestamp": {
|
|
158
|
+
"type": "string",
|
|
159
|
+
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\\.[0-9]{3})?Z$"
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|