@flighthq/scene-document 0.4.1-next.109.0f3397e → 0.4.1-next.200.8e568d5

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 CHANGED
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/scene-document`. The
13
13
  This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
14
14
 
15
15
  - [Flight project](https://github.com/flighthq/flight)
16
- - [Source for @flighthq/scene-document@0.4.1-next.109.0f3397e](https://github.com/flighthq/flight/tree/0f3397e51440fdd2256f732c1bbf9192286c2069/packages/scene-document)
17
- - [License](https://github.com/flighthq/flight/blob/0f3397e51440fdd2256f732c1bbf9192286c2069/LICENSE.md)
16
+ - [Source for @flighthq/scene-document@0.4.1-next.200.8e568d5](https://github.com/flighthq/flight/tree/8e568d54191966026e2e03febb7282be8abc99d0/packages/scene-document)
17
+ - [License](https://github.com/flighthq/flight/blob/8e568d54191966026e2e03febb7282be8abc99d0/LICENSE.md)
@@ -1 +1 @@
1
- {"version":3,"file":"sceneDocumentScene3DMaterialization.d.ts","sourceRoot":"","sources":["../src/sceneDocumentScene3DMaterialization.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAIV,cAAc,EAId,gCAAgC,EAGhC,sCAAsC,EACtC,qBAAqB,EACrB,oCAAoC,EACpC,4BAA4B,EAG5B,OAAO,EACP,qBAAqB,EACrB,oBAAoB,EAErB,MAAM,0BAA0B,CAAC;AAYlC,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EACzB,OAAO,EAAE,SAAS,QAAQ,CAAC,qBAAqB,CAAC,EAAE,EACnD,MAAM,EAAE,SAAS,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EACjD,OAAO,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAC9C,qBAAqB,CAOvB;AAED,wBAAgB,0CAA0C,CACxD,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAC/C,SAAS,CAAC,EAAE,QAAQ,CAAC,sCAAsC,CAAC,EAC5D,UAAU,GAAE,MAA8B,GACzC,oCAAoC,GAAG,IAAI,CAiB7C;AAED,wBAAgB,kDAAkD,CAChE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAC/C,SAAS,CAAC,EAAE,QAAQ,CAAC,sCAAsC,CAAC,EAC5D,UAAU,CAAC,EAAE,MAAM,GAClB,oCAAoC,GAAG,IAAI,CAI7C;AAED,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAC/C,UAAU,GAAE,MAA8B,GACzC,gCAAgC,GAAG,IAAI,CASzC;AAED,wBAAgB,2CAA2C,CACzD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAC/C,UAAU,CAAC,EAAE,MAAM,GAClB,gCAAgC,GAAG,IAAI,CAIzC"}
1
+ {"version":3,"file":"sceneDocumentScene3DMaterialization.d.ts","sourceRoot":"","sources":["../src/sceneDocumentScene3DMaterialization.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAEV,cAAc,EAId,gCAAgC,EAGhC,sCAAsC,EACtC,qBAAqB,EACrB,oCAAoC,EACpC,4BAA4B,EAG5B,OAAO,EAEP,qBAAqB,EACrB,oBAAoB,EAErB,MAAM,0BAA0B,CAAC;AAYlC,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EACzB,OAAO,EAAE,SAAS,QAAQ,CAAC,qBAAqB,CAAC,EAAE,EACnD,MAAM,EAAE,SAAS,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EACjD,OAAO,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAC9C,qBAAqB,CAOvB;AAED,wBAAgB,0CAA0C,CACxD,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAC/C,SAAS,CAAC,EAAE,QAAQ,CAAC,sCAAsC,CAAC,EAC5D,UAAU,GAAE,MAA8B,GACzC,oCAAoC,GAAG,IAAI,CAkB7C;AAED,wBAAgB,kDAAkD,CAChE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAC/C,SAAS,CAAC,EAAE,QAAQ,CAAC,sCAAsC,CAAC,EAC5D,UAAU,CAAC,EAAE,MAAM,GAClB,oCAAoC,GAAG,IAAI,CAI7C;AAED,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAC/C,UAAU,GAAE,MAA8B,GACzC,gCAAgC,GAAG,IAAI,CASzC;AAED,wBAAgB,2CAA2C,CACzD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAC/C,UAAU,CAAC,EAAE,MAAM,GAClB,gCAAgC,GAAG,IAAI,CAIzC"}
@@ -1,9 +1,9 @@
1
- import { createCamera3D } from '@flighthq/camera/contract';
1
+ import { createCamera3D, setCamera3DViewMatrix4FromMatrix4 } from '@flighthq/camera/contract';
2
2
  import { getEntityRuntime } from '@flighthq/entity/contract';
3
- import { createScene3DLights } from '@flighthq/lighting/contract';
4
- import { addNodeChild, getNodeChildren } from '@flighthq/node/contract';
3
+ import { acquireMatrix4, composeMatrix4FromTransform3D, createTransform3D, decomposeMatrix4ToTransform3D, inverseMatrix4, releaseMatrix4, } from '@flighthq/geometry/contract';
4
+ import { addNodeChild, getNodeChildren, getNodeWorldMatrix4 } from '@flighthq/node/contract';
5
5
  import { getRegistryTableEntry } from '@flighthq/registry/contract';
6
- import { createScene3D } from '@flighthq/scene3d/contract';
6
+ import { createScene3D, createScene3DLightsFromDocument } from '@flighthq/scene3d/contract';
7
7
  import { AmbientLightKind, DirectionalLightKind, FlightDocumentRefusalReason, Node3DTraitsKey, } from '@flighthq/types/contract';
8
8
  import { explainFlightDocumentText, parseFlightDocumentText } from './flightDocumentText';
9
9
  import { selectFlightDocumentScene } from './sceneDocumentMaterializationSelection';
@@ -34,8 +34,9 @@ export function createFlightDocumentScene3DMaterialization(document, schemas, re
34
34
  if (!adoptDocumentRoot3D(scene, documentScene.scene, schemas, resources))
35
35
  return null;
36
36
  materializeChildren(scene.root, documentScene.scene.children, schemas, resources);
37
- const cameras = materializeCameras(documentScene.cameras);
38
- const lights = materializeLights(documentScene.lights);
37
+ const materializedNodes = getMaterializedNodes(scene.root);
38
+ const cameras = materializeCameras(documentScene.cameras, materializedNodes);
39
+ const lights = materializeLights(documentScene.lights, materializedNodes);
39
40
  return { cameras, lights, scene };
40
41
  }
41
42
  export function createFlightDocumentScene3DMaterializationFromText(text, schemas, resolvers, sceneIndex) {
@@ -83,12 +84,72 @@ function checkDuplicateLights(lights, sceneIndex) {
83
84
  }
84
85
  return null;
85
86
  }
86
- function materializeCameras(cameras) {
87
- return cameras.map((cam) => createCamera3D({
88
- far: cam.far,
89
- near: cam.near,
90
- projection: cam.projection,
91
- }));
87
+ function materializeCameras(cameras, materializedNodes) {
88
+ const placement = acquireMatrix4();
89
+ const view = acquireMatrix4();
90
+ const out = [];
91
+ for (const source of cameras) {
92
+ const camera = createCamera3D({
93
+ far: source.far,
94
+ near: source.near,
95
+ projection: source.projection,
96
+ });
97
+ const boundNode = getBoundMaterializedNode(source.node, materializedNodes);
98
+ if (boundNode === null) {
99
+ composeMatrix4FromTransform3D(placement, source.transform);
100
+ if (inverseMatrix4(view, placement))
101
+ setCamera3DViewMatrix4FromMatrix4(camera, view);
102
+ }
103
+ else if (inverseMatrix4(view, getNodeWorldMatrix4(boundNode))) {
104
+ setCamera3DViewMatrix4FromMatrix4(camera, view);
105
+ }
106
+ out.push(camera);
107
+ }
108
+ releaseMatrix4(view);
109
+ releaseMatrix4(placement);
110
+ return out;
111
+ }
112
+ function getBoundMaterializedNode(index, materializedNodes) {
113
+ if (index === undefined || !Number.isInteger(index) || index < 0)
114
+ return null;
115
+ return materializedNodes[index] ?? null;
116
+ }
117
+ // Scene3DDocument binding indices address a flat node table. A Flight document stores the same logical
118
+ // population as a nested tree, so flatten it in the binary format's depth-first order, including the scene
119
+ // root at index zero. Keeping this derivation separate from node creation lets the root materializer own how
120
+ // that root is instantiated without creating a second placement model here.
121
+ function getMaterializedNodes(root) {
122
+ const out = [];
123
+ appendMaterializedNodes(out, root);
124
+ return out;
125
+ }
126
+ function appendMaterializedNodes(out, node) {
127
+ out.push(node);
128
+ for (const child of getNodeChildren(node))
129
+ appendMaterializedNodes(out, child);
130
+ }
131
+ function materializeLights(lights, materializedNodes) {
132
+ const resolvedLights = lights.map((source) => {
133
+ const boundNode = getBoundMaterializedNode(source.node, materializedNodes);
134
+ if (boundNode === null)
135
+ return { ...source };
136
+ const transform = createTransform3D();
137
+ decomposeMatrix4ToTransform3D(transform, getNodeWorldMatrix4(boundNode));
138
+ return { ...source, transform };
139
+ });
140
+ const document = {
141
+ animations: [],
142
+ cameras: [],
143
+ lights: resolvedLights,
144
+ materials: [],
145
+ meshes: [],
146
+ metadata: null,
147
+ nodes: [],
148
+ resources: [],
149
+ scenes: [],
150
+ skins: [],
151
+ };
152
+ return createScene3DLightsFromDocument(document);
92
153
  }
93
154
  function materializeChildren(parent, children, schemas, resources) {
94
155
  for (const child of children) {
@@ -102,14 +163,6 @@ function materializeChildren(parent, children, schemas, resources) {
102
163
  materializeChildren(node, child.children, schemas, resources);
103
164
  }
104
165
  }
105
- function materializeLights(lights) {
106
- const ambientEntry = lights.find((l) => l.descriptor.kind === AmbientLightKind);
107
- const directionalEntry = lights.find((l) => l.descriptor.kind === DirectionalLightKind);
108
- return createScene3DLights({
109
- ambient: ambientEntry !== undefined ? ambientEntry.descriptor : null,
110
- directional: directionalEntry !== undefined ? directionalEntry.descriptor : null,
111
- });
112
- }
113
166
  function resolveResources(descriptors, resolvers) {
114
167
  const out = {};
115
168
  if (resolvers === undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"sceneDocumentScene3DMaterialization.js","sourceRoot":"","sources":["../src/sceneDocumentScene3DMaterialization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sceneDocumentScene3DMaterialization.js","sourceRoot":"","sources":["../src/sceneDocumentScene3DMaterialization.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/scene-document",
3
- "version": "0.4.1-next.109.0f3397e",
3
+ "version": "0.4.1-next.200.8e568d5",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,14 +38,15 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/camera": "0.4.1-next.109.0f3397e",
42
- "@flighthq/geometry": "0.4.1-next.109.0f3397e",
43
- "@flighthq/lighting": "0.4.1-next.109.0f3397e",
44
- "@flighthq/node": "0.4.1-next.109.0f3397e",
45
- "@flighthq/registry": "0.4.1-next.109.0f3397e",
46
- "@flighthq/scene2d": "0.4.1-next.109.0f3397e",
47
- "@flighthq/scene3d": "0.4.1-next.109.0f3397e",
48
- "@flighthq/types": "0.4.1-next.109.0f3397e"
41
+ "@flighthq/camera": "0.4.1-next.200.8e568d5",
42
+ "@flighthq/entity": "0.4.1-next.200.8e568d5",
43
+ "@flighthq/geometry": "0.4.1-next.200.8e568d5",
44
+ "@flighthq/lighting": "0.4.1-next.200.8e568d5",
45
+ "@flighthq/node": "0.4.1-next.200.8e568d5",
46
+ "@flighthq/registry": "0.4.1-next.200.8e568d5",
47
+ "@flighthq/scene2d": "0.4.1-next.200.8e568d5",
48
+ "@flighthq/scene3d": "0.4.1-next.200.8e568d5",
49
+ "@flighthq/types": "0.4.1-next.200.8e568d5"
49
50
  },
50
51
  "devDependencies": {
51
52
  "@flighthq/camera": "*",
@@ -1,6 +1,12 @@
1
- import { createTransform3D } from '@flighthq/geometry/contract';
2
- import { createAmbientLight, createDirectionalLight } from '@flighthq/lighting/contract';
3
- import { getNodeChildren } from '@flighthq/node/contract';
1
+ import { createTransform3D, createVector3, setQuaternionFromAxisAngle } from '@flighthq/geometry/contract';
2
+ import {
3
+ createAmbientLight,
4
+ createDirectionalLight,
5
+ createHemisphereLight,
6
+ createPointLight,
7
+ createSpotLight,
8
+ } from '@flighthq/lighting/contract';
9
+ import { getNodeChildren, invalidateNodeLocalTransform } from '@flighthq/node/contract';
4
10
  import { createKeyedTable, withRegistryTableEntry } from '@flighthq/registry/contract';
5
11
  import { createDisplayObject } from '@flighthq/scene2d/contract';
6
12
  import { createNode3D, createScene3D } from '@flighthq/scene3d/contract';
@@ -13,7 +19,9 @@ import type {
13
19
  FlightDocumentScene,
14
20
  FlightDocumentScene3DMaterialization,
15
21
  FlightDocumentSchemaRegistry,
22
+ Light,
16
23
  NodeAny,
24
+ Scene3DLightsLike,
17
25
  Scene3DDocumentCamera,
18
26
  Scene3DDocumentLight,
19
27
  } from '@flighthq/types/contract';
@@ -110,6 +118,122 @@ describe('createFlightDocumentScene3DMaterialization', () => {
110
118
  expect(materialization.cameras[0].projection.kind).toBe('perspective');
111
119
  });
112
120
 
121
+ it('applies authored camera placement to the runtime view matrix', () => {
122
+ const transform = createTransform3D();
123
+ transform.position.x = 7;
124
+ const document = createTestDocument({
125
+ cameras: [
126
+ {
127
+ far: 500,
128
+ near: 0.5,
129
+ projection: { aspect: 1.77, fovY: 1.047, kind: 'perspective' },
130
+ transform,
131
+ },
132
+ ],
133
+ kind: 'Scene3D',
134
+ lights: [],
135
+ scene: { children: [], fields: {}, kind: Node3DKind },
136
+ });
137
+
138
+ const result = createFlightDocumentScene3DMaterialization(document, createTestSchemas());
139
+
140
+ expect(result?.cameras[0].view.m[12]).toBe(-7);
141
+ });
142
+
143
+ it('applies a bound depth-first node placement to the runtime camera', () => {
144
+ const transform = createTransform3D();
145
+ transform.position.x = 7;
146
+ const document = createTestDocument({
147
+ cameras: [
148
+ {
149
+ far: 500,
150
+ near: 0.5,
151
+ node: 2,
152
+ projection: { aspect: 1.77, fovY: 1.047, kind: 'perspective' },
153
+ transform,
154
+ },
155
+ ],
156
+ kind: 'Scene3D',
157
+ lights: [],
158
+ scene: {
159
+ children: [
160
+ {
161
+ children: [{ children: [], fields: { positionX: 3 }, kind: Node3DKind }],
162
+ fields: { positionX: 2 },
163
+ kind: Node3DKind,
164
+ },
165
+ ],
166
+ fields: {},
167
+ kind: Node3DKind,
168
+ },
169
+ });
170
+
171
+ const result = createFlightDocumentScene3DMaterialization(document, createTestSchemas());
172
+
173
+ expect(result?.cameras[0].view.m[12]).toBe(-5);
174
+ });
175
+
176
+ it('preserves the source-derived representable light population and authored placement', () => {
177
+ const transform = createTransform3D();
178
+ transform.position.x = 10;
179
+ transform.position.y = 20;
180
+ transform.position.z = 30;
181
+ transform.scale.x = 2;
182
+ transform.scale.y = 3;
183
+ transform.scale.z = 4;
184
+ setQuaternionFromAxisAngle(transform.rotation, createVector3(0, 1, 0), Math.PI / 2);
185
+ const authoredLights: Required<Scene3DLightsLike> = {
186
+ ambient: createAmbientLight(),
187
+ directional: createDirectionalLight({ direction: { x: 0, y: 0, z: -1 } }),
188
+ hemisphere: [createHemisphereLight()],
189
+ point: [createPointLight({ position: { x: 1, y: 0, z: 0 } })],
190
+ spot: [createSpotLight({ direction: { x: 0, y: 0, z: -1 }, position: { x: 1, y: 0, z: 0 } })],
191
+ };
192
+ const document = createTestDocument({
193
+ cameras: [],
194
+ kind: 'Scene3D',
195
+ lights: getDocumentLights(authoredLights, transform),
196
+ scene: { children: [], fields: {}, kind: Node3DKind },
197
+ });
198
+
199
+ const result = createFlightDocumentScene3DMaterialization(document, createTestSchemas());
200
+
201
+ expect(getScene3DLightKinds(result?.lights ?? null).sort()).toEqual(getScene3DLightKinds(authoredLights).sort());
202
+ expect(result?.lights.directional?.direction.x).toBeCloseTo(-1);
203
+ expect(result?.lights.directional?.direction.y).toBeCloseTo(0);
204
+ expect(result?.lights.directional?.direction.z).toBeCloseTo(0);
205
+ expect(result?.lights.point?.[0].position).toMatchObject({ x: 10, y: 20, z: 28 });
206
+ expect(result?.lights.spot?.[0].position).toMatchObject({ x: 10, y: 20, z: 28 });
207
+ expect(result?.lights.spot?.[0].direction.x).toBeCloseTo(-1);
208
+ expect(result?.lights.spot?.[0].direction.y).toBeCloseTo(0);
209
+ expect(result?.lights.spot?.[0].direction.z).toBeCloseTo(0);
210
+ });
211
+
212
+ it('applies a bound depth-first node placement to a punctual light', () => {
213
+ const transform = createTransform3D();
214
+ transform.position.x = 7;
215
+ const document = createTestDocument({
216
+ cameras: [],
217
+ kind: 'Scene3D',
218
+ lights: [{ descriptor: createPointLight(), node: 2, transform }],
219
+ scene: {
220
+ children: [
221
+ {
222
+ children: [{ children: [], fields: { positionX: 3 }, kind: Node3DKind }],
223
+ fields: { positionX: 2 },
224
+ kind: Node3DKind,
225
+ },
226
+ ],
227
+ fields: {},
228
+ kind: Node3DKind,
229
+ },
230
+ });
231
+
232
+ const result = createFlightDocumentScene3DMaterialization(document, createTestSchemas());
233
+
234
+ expect(result?.lights.point?.[0].position).toMatchObject({ x: 5, y: 0, z: 0 });
235
+ });
236
+
113
237
  it('materializes a tree with children', () => {
114
238
  const document = createTestDocument({
115
239
  cameras: [],
@@ -571,8 +695,14 @@ function createTestDocument(
571
695
 
572
696
  function createTestSchemas(): FlightDocumentSchemaRegistry {
573
697
  const node3DSchema: FlightDocumentNodeSchema = {
574
- createNode: (_fields: Readonly<FlightDocumentFields>, _resources: FlightDocumentResourceLookup) => {
575
- return createNode3D();
698
+ createNode: (fields: Readonly<FlightDocumentFields>, _resources: FlightDocumentResourceLookup) => {
699
+ const node = createNode3D();
700
+ const positionX = fields['positionX'];
701
+ if (typeof positionX === 'number') {
702
+ node.position.x = positionX;
703
+ invalidateNodeLocalTransform(node);
704
+ }
705
+ return node;
576
706
  },
577
707
  fields: [],
578
708
  kind: Node3DKind,
@@ -619,3 +749,24 @@ function rootDocument3D(
619
749
  version: 1,
620
750
  } as unknown as FlightDocument;
621
751
  }
752
+
753
+ function getDocumentLights(
754
+ source: Readonly<Required<Scene3DLightsLike>>,
755
+ transform: Readonly<Scene3DDocumentLight['transform']>,
756
+ ): Scene3DDocumentLight[] {
757
+ return getScene3DLights(source).map((descriptor) => ({ descriptor, transform }));
758
+ }
759
+
760
+ function getScene3DLightKinds(source: Readonly<Scene3DLightsLike> | null): string[] {
761
+ return source === null ? [] : getScene3DLights(source).map((light) => light.kind);
762
+ }
763
+
764
+ function getScene3DLights(source: Readonly<Scene3DLightsLike>): Readonly<Light>[] {
765
+ const lights: Readonly<Light>[] = [];
766
+ for (const value of Object.values(source)) {
767
+ if (value === null) continue;
768
+ if ('kind' in value) lights.push(value);
769
+ else lights.push(...value);
770
+ }
771
+ return lights;
772
+ }