@jfk-solutions/demo3d-file-format 1.7.0 → 1.9.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.
Files changed (86) hide show
  1. package/README.md +289 -1
  2. package/dist/examples/export-embedded-viewer-standalone.html +193 -0
  3. package/dist/examples/three-render-smoke-standalone.html +4997 -0
  4. package/dist/index.d.ts +9 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +8 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/model.d.ts +20 -3
  9. package/dist/model.d.ts.map +1 -1
  10. package/dist/model.js +89 -11
  11. package/dist/model.js.map +1 -1
  12. package/dist/parser.d.ts.map +1 -1
  13. package/dist/parser.js +135 -9
  14. package/dist/parser.js.map +1 -1
  15. package/dist/raw3d-animation.d.ts +63 -0
  16. package/dist/raw3d-animation.d.ts.map +1 -0
  17. package/dist/raw3d-animation.js +200 -0
  18. package/dist/raw3d-animation.js.map +1 -0
  19. package/dist/raw3d-effects.d.ts +66 -0
  20. package/dist/raw3d-effects.d.ts.map +1 -0
  21. package/dist/raw3d-effects.js +172 -0
  22. package/dist/raw3d-effects.js.map +1 -0
  23. package/dist/raw3d-skinning.d.ts +8 -0
  24. package/dist/raw3d-skinning.d.ts.map +1 -0
  25. package/dist/raw3d-skinning.js +37 -0
  26. package/dist/raw3d-skinning.js.map +1 -0
  27. package/dist/raw3d.d.ts +84 -4
  28. package/dist/raw3d.d.ts.map +1 -1
  29. package/dist/raw3d.js +111 -9
  30. package/dist/raw3d.js.map +1 -1
  31. package/dist/rigid-interpolation.d.ts +16 -0
  32. package/dist/rigid-interpolation.d.ts.map +1 -0
  33. package/dist/rigid-interpolation.js +52 -0
  34. package/dist/rigid-interpolation.js.map +1 -0
  35. package/dist/three/backend.d.ts +13 -0
  36. package/dist/three/backend.d.ts.map +1 -0
  37. package/dist/three/backend.js +9 -0
  38. package/dist/three/backend.js.map +1 -0
  39. package/dist/three/effects.d.ts +7 -0
  40. package/dist/three/effects.d.ts.map +1 -0
  41. package/dist/three/effects.js +127 -0
  42. package/dist/three/effects.js.map +1 -0
  43. package/dist/three/index.d.ts +5 -1
  44. package/dist/three/index.d.ts.map +1 -1
  45. package/dist/three/index.js +35 -1
  46. package/dist/three/index.js.map +1 -1
  47. package/dist/three/native-lighting.d.ts +5 -0
  48. package/dist/three/native-lighting.d.ts.map +1 -0
  49. package/dist/three/native-lighting.js +86 -0
  50. package/dist/three/native-lighting.js.map +1 -0
  51. package/dist/three/parallax.d.ts +5 -0
  52. package/dist/three/parallax.d.ts.map +1 -0
  53. package/dist/three/parallax.js +63 -0
  54. package/dist/three/parallax.js.map +1 -0
  55. package/dist/three/presentation.d.ts +31 -0
  56. package/dist/three/presentation.d.ts.map +1 -0
  57. package/dist/three/presentation.js +137 -0
  58. package/dist/three/presentation.js.map +1 -0
  59. package/dist/three/raw3d.d.ts +27 -0
  60. package/dist/three/raw3d.d.ts.map +1 -1
  61. package/dist/three/raw3d.js +536 -25
  62. package/dist/three/raw3d.js.map +1 -1
  63. package/dist/three/renderer.d.ts.map +1 -1
  64. package/dist/three/renderer.js +3 -0
  65. package/dist/three/renderer.js.map +1 -1
  66. package/dist/three/skinning.d.ts +11 -0
  67. package/dist/three/skinning.d.ts.map +1 -0
  68. package/dist/three/skinning.js +92 -0
  69. package/dist/three/skinning.js.map +1 -0
  70. package/dist/three/tsl.d.ts +60 -0
  71. package/dist/three/tsl.d.ts.map +1 -0
  72. package/dist/three/tsl.js +3 -0
  73. package/dist/three/tsl.js.map +1 -0
  74. package/dist/three/webgpu-native.d.ts +3 -0
  75. package/dist/three/webgpu-native.d.ts.map +1 -0
  76. package/dist/three/webgpu-native.js +58 -0
  77. package/dist/three/webgpu-native.js.map +1 -0
  78. package/dist/three/webgpu-relief.d.ts +3 -0
  79. package/dist/three/webgpu-relief.d.ts.map +1 -0
  80. package/dist/three/webgpu-relief.js +61 -0
  81. package/dist/three/webgpu-relief.js.map +1 -0
  82. package/dist/xml.d.ts +4 -1
  83. package/dist/xml.d.ts.map +1 -1
  84. package/dist/xml.js +14 -3
  85. package/dist/xml.js.map +1 -1
  86. package/package.json +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { Raw3DProject } from "./raw3d.js";
2
+ import type { Demo3DXmlElement } from "./xml.js";
3
+ import { Raw3DEffects, type Raw3DEffectState } from "./raw3d-effects.js";
4
+ import { type Raw3DQuaternion } from "./rigid-interpolation.js";
5
+ /** Values verified against the Emulate3D 2026 Raw SDK enum. */
6
+ export declare enum Raw3DInterpolationMode {
7
+ Default = 0,
8
+ None = 1,
9
+ Linear = 2,
10
+ DualQuaternion = 3
11
+ }
12
+ export type Raw3DAnimationValue = number | boolean;
13
+ export interface Raw3DAnimationTrack {
14
+ readonly kind: string;
15
+ readonly nodeIndex: number;
16
+ readonly name?: string;
17
+ readonly materialIndex: number;
18
+ readonly times: readonly number[];
19
+ readonly values: readonly Raw3DAnimationValue[];
20
+ readonly xml: Demo3DXmlElement;
21
+ }
22
+ export interface Raw3DAnimationWarning {
23
+ readonly code: string;
24
+ readonly message: string;
25
+ readonly xml: Demo3DXmlElement;
26
+ }
27
+ export interface Raw3DNodeState {
28
+ location: [number, number, number];
29
+ rotation: [number, number, number];
30
+ quaternion: Raw3DQuaternion;
31
+ scale: [number, number, number];
32
+ visible: boolean;
33
+ deleted: boolean;
34
+ parentIndex?: number;
35
+ meshIndex?: number;
36
+ layerIndex?: number;
37
+ interpolationMode: Raw3DInterpolationMode;
38
+ interactionMode?: number;
39
+ highlight: number;
40
+ hasBeenOptimized: boolean;
41
+ userData?: string;
42
+ clientOwner?: string;
43
+ isBillboard: boolean;
44
+ isDecal: boolean;
45
+ readonly materialProperties: Record<number, Record<string, number>>;
46
+ }
47
+ /** Pure, seekable animation data. No renderer, clock, DOM or Three.js dependency. */
48
+ export declare class Raw3DAnimation {
49
+ readonly tracks: readonly Raw3DAnimationTrack[];
50
+ readonly warnings: readonly Raw3DAnimationWarning[];
51
+ readonly duration: number;
52
+ readonly effects: Raw3DEffects;
53
+ private readonly byNode;
54
+ private readonly rigidTimes;
55
+ private readonly nodes;
56
+ constructor(project: Raw3DProject);
57
+ sample(time: number): ReadonlyMap<number, Raw3DNodeState>;
58
+ sampleFrame(time: number): Raw3DEffectState & {
59
+ readonly nodes: ReadonlyMap<number, Raw3DNodeState>;
60
+ };
61
+ sampleNode(nodeIndex: number, time: number): Raw3DNodeState;
62
+ }
63
+ //# sourceMappingURL=raw3d-animation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw3d-animation.d.ts","sourceRoot":"","sources":["../src/raw3d-animation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ import { Raw3DEffects, isRaw3DEffectChannel } from "./raw3d-effects.js";
2
+ import { interpolateRaw3DDualQuaternion, raw3DQuaternionFromRotation, raw3DRotationFromQuaternion } from "./rigid-interpolation.js";
3
+ /** Values verified against the Emulate3D 2026 Raw SDK enum. */
4
+ export var Raw3DInterpolationMode;
5
+ (function (Raw3DInterpolationMode) {
6
+ Raw3DInterpolationMode[Raw3DInterpolationMode["Default"] = 0] = "Default";
7
+ Raw3DInterpolationMode[Raw3DInterpolationMode["None"] = 1] = "None";
8
+ Raw3DInterpolationMode[Raw3DInterpolationMode["Linear"] = 2] = "Linear";
9
+ Raw3DInterpolationMode[Raw3DInterpolationMode["DualQuaternion"] = 3] = "DualQuaternion";
10
+ })(Raw3DInterpolationMode || (Raw3DInterpolationMode = {}));
11
+ const continuous = new Set(["X", "Y", "Z", "RX", "RY", "RZ", "SX", "SY", "SZ"]);
12
+ const discrete = new Set(["Visible", "Delete", "Parent", "Mesh", "Layer", "InterpolationMode", "InteractionMode", "Highlight", "HasBeenOptimized"]);
13
+ const materialProperties = new Set(["Diffuse", "U", "V", "ScaleU", "ScaleV", "Reflectivity", "Transparency", "Luminosity", "NormalScale", "PointSize", "Texture", "NormalMap", "NormalTexture", "NormalDepth", "StreamableTexture"]);
14
+ const discreteMaterialProperties = new Set(["Diffuse", "Texture", "NormalMap", "NormalTexture", "StreamableTexture"]);
15
+ const attribute = (xml, name) => xml.attributes.find(a => a.localName === name)?.value;
16
+ const tokens = (text) => text?.trim().split(/\s+/).filter(Boolean) ?? [];
17
+ const triple = (values, fallback) => [values[0] ?? fallback, values[1] ?? fallback, values[2] ?? fallback];
18
+ /** Pure, seekable animation data. No renderer, clock, DOM or Three.js dependency. */
19
+ export class Raw3DAnimation {
20
+ tracks;
21
+ warnings;
22
+ duration;
23
+ effects;
24
+ byNode = new Map();
25
+ rigidTimes = new Map();
26
+ nodes;
27
+ constructor(project) {
28
+ this.effects = new Raw3DEffects(project, project.animationOptions);
29
+ this.nodes = new Map(project.nodes.map(node => [node.index, node]));
30
+ const tracks = [], warnings = [];
31
+ let duration = 0;
32
+ for (const xml of project.root.child("Updates")?.children ?? []) {
33
+ const times = tokens(attribute(xml, "Time")).map(Number);
34
+ if (times.some((time, i) => !Number.isFinite(time) || time < 0 || (i > 0 && time < times[i - 1])))
35
+ throw new Error(`Invalid RAW3D ${xml.localName} key times.`);
36
+ duration = Math.max(duration, times.at(-1) ?? 0);
37
+ const kind = xml.localName, name = attribute(xml, "Name");
38
+ if (isRaw3DEffectChannel(kind))
39
+ continue;
40
+ if (!continuous.has(kind) && !discrete.has(kind) && !(kind === "Material" && materialProperties.has(name ?? ""))) {
41
+ warnings.push({ code: "RAW3D_ANIMATION_CHANNEL_UNSUPPORTED", message: `Unsupported RAW3D animation channel ${kind}${name ? `:${name}` : ""}.`, xml });
42
+ continue;
43
+ }
44
+ const nodeIndex = Number(attribute(xml, "Node") ?? NaN);
45
+ const materialIndex = Number(attribute(xml, "Index") ?? 0);
46
+ if (!Number.isInteger(nodeIndex) || !this.nodes.has(nodeIndex))
47
+ throw new Error(`Invalid RAW3D ${kind} node index ${nodeIndex}.`);
48
+ if (!Number.isInteger(materialIndex) || materialIndex < 0)
49
+ throw new Error("Invalid RAW3D material slot.");
50
+ const boolean = kind === "Visible" || kind === "Delete" || kind === "HasBeenOptimized";
51
+ const values = tokens(attribute(xml, "Value")).map(value => {
52
+ if (boolean) {
53
+ if (!/^(true|false|0|1)$/i.test(value))
54
+ throw new Error(`Invalid RAW3D ${kind} boolean.`);
55
+ return /^(true|1)$/i.test(value);
56
+ }
57
+ if (name === "Diffuse") {
58
+ if (!/^(?:0x)?[a-f\d]{1,8}$/i.test(value))
59
+ throw new Error("Invalid RAW3D diffuse ARGB value.");
60
+ return Number.parseInt(value.replace(/^0x/i, ""), 16);
61
+ }
62
+ return Number(value);
63
+ });
64
+ if (!times.length || times.length !== values.length || values.some(value => typeof value === "number" && !Number.isFinite(value)))
65
+ throw new Error(`Invalid RAW3D ${kind} key values.`);
66
+ if (kind === "InterpolationMode" && values.some(value => !Number.isInteger(value) || Number(value) < 0 || Number(value) > 3))
67
+ throw new Error("Unsupported RAW3D interpolation mode.");
68
+ if (kind === "Material" && ["Texture", "NormalMap", "NormalTexture", "StreamableTexture"].includes(name ?? "") && values.some(value => !Number.isInteger(value)))
69
+ throw new Error("Invalid RAW3D texture reference.");
70
+ if (["Parent", "Mesh", "Layer", "InteractionMode", "Highlight"].includes(kind) && values.some(value => !Number.isInteger(value)))
71
+ throw new Error(`Invalid RAW3D ${kind} integer value.`);
72
+ const track = { kind, name, nodeIndex, materialIndex, times, values, xml };
73
+ tracks.push(track);
74
+ const group = this.byNode.get(nodeIndex) ?? [];
75
+ group.push(track);
76
+ this.byNode.set(nodeIndex, group);
77
+ }
78
+ for (const [node, group] of this.byNode) {
79
+ this.rigidTimes.set(node, [...new Set(group.filter(track => ["X", "Y", "Z", "RX", "RY", "RZ"].includes(track.kind)).flatMap(track => [...track.times]))].sort((a, b) => a - b));
80
+ }
81
+ this.tracks = tracks;
82
+ this.warnings = [...warnings, ...this.effects.warnings];
83
+ this.duration = duration;
84
+ }
85
+ sample(time) {
86
+ if (!Number.isFinite(time))
87
+ throw new RangeError("Animation time must be finite.");
88
+ return new Map([...this.nodes.keys()].map(index => [index, this.sampleNode(index, Math.max(0, time))]));
89
+ }
90
+ sampleFrame(time) {
91
+ return { nodes: this.sample(time), ...this.effects.sample(time) };
92
+ }
93
+ sampleNode(nodeIndex, time) {
94
+ if (!Number.isFinite(time))
95
+ throw new RangeError("Animation time must be finite.");
96
+ const node = this.nodes.get(nodeIndex);
97
+ if (!node)
98
+ throw new RangeError(`RAW3D node ${nodeIndex} is missing.`);
99
+ time = Math.max(0, time);
100
+ const tracks = this.byNode.get(nodeIndex) ?? [];
101
+ const state = {
102
+ location: triple(node.location, 0), rotation: triple(node.rotation, 0), scale: triple(node.scale, 1),
103
+ quaternion: raw3DQuaternionFromRotation(node.rotation), visible: node.visible, deleted: false,
104
+ parentIndex: node.parentIndex, meshIndex: node.meshIndex, layerIndex: node.layerIndex,
105
+ interpolationMode: node.interpolationMode, interactionMode: node.interactionMode,
106
+ highlight: node.highlight, hasBeenOptimized: node.hasBeenOptimized, materialProperties: {},
107
+ userData: node.userData, clientOwner: node.clientOwner, isBillboard: node.isBillboard, isDecal: node.isDecal
108
+ };
109
+ Object.assign(state, this.effects.sampleNode(nodeIndex, time));
110
+ for (const track of tracks.filter(track => track.kind === "InterpolationMode")) {
111
+ state.interpolationMode = (sampleTrack(track, time, false) ?? state.interpolationMode);
112
+ }
113
+ for (const track of tracks) {
114
+ const value = sampleTrack(track, time, state.interpolationMode !== Raw3DInterpolationMode.None);
115
+ if (value === undefined)
116
+ continue;
117
+ const numeric = Number(value), axis = "XYZ".indexOf(track.kind.at(-1));
118
+ if (track.kind.length === 1 && axis >= 0)
119
+ state.location[axis] = numeric;
120
+ else if (track.kind.startsWith("R") && axis >= 0)
121
+ state.rotation[axis] = numeric;
122
+ else if (track.kind.startsWith("S") && axis >= 0)
123
+ state.scale[axis] = numeric;
124
+ else
125
+ switch (track.kind) {
126
+ case "Visible":
127
+ state.visible = Boolean(value);
128
+ break;
129
+ case "Delete":
130
+ state.deleted = Boolean(value);
131
+ break;
132
+ case "Parent":
133
+ state.parentIndex = numeric < 0 ? undefined : numeric;
134
+ break;
135
+ case "Mesh":
136
+ state.meshIndex = numeric < 0 ? undefined : numeric;
137
+ break;
138
+ case "Layer":
139
+ state.layerIndex = numeric < 0 ? undefined : numeric;
140
+ break;
141
+ case "InteractionMode":
142
+ state.interactionMode = numeric;
143
+ break;
144
+ case "Highlight":
145
+ state.highlight = numeric;
146
+ break;
147
+ case "HasBeenOptimized":
148
+ state.hasBeenOptimized = Boolean(value);
149
+ break;
150
+ case "Material":
151
+ (state.materialProperties[track.materialIndex] ??= {})[track.name] = numeric;
152
+ break;
153
+ }
154
+ }
155
+ state.quaternion = raw3DQuaternionFromRotation(state.rotation);
156
+ if (state.interpolationMode === Raw3DInterpolationMode.DualQuaternion) {
157
+ const rigidTracks = tracks.filter(track => ["X", "Y", "Z", "RX", "RY", "RZ"].includes(track.kind));
158
+ const times = this.rigidTimes.get(nodeIndex) ?? [];
159
+ const rightIndex = times.findIndex(value => value > time);
160
+ const left = times[rightIndex < 0 ? times.length - 1 : rightIndex - 1], right = times[rightIndex];
161
+ if (left !== undefined && right !== undefined) {
162
+ const pose = (at) => {
163
+ const position = triple(node.location, 0), rotation = triple(node.rotation, 0);
164
+ for (const track of rigidTracks) {
165
+ const value = sampleTrack(track, at, true);
166
+ if (value !== undefined)
167
+ (track.kind.startsWith("R") ? rotation : position)["XYZ".indexOf(track.kind.at(-1))] = Number(value);
168
+ }
169
+ return { position, quaternion: raw3DQuaternionFromRotation(rotation) };
170
+ };
171
+ const result = interpolateRaw3DDualQuaternion(pose(left), pose(right), (time - left) / (right - left));
172
+ state.location = [...result.position];
173
+ state.quaternion = result.quaternion;
174
+ state.rotation = [...raw3DRotationFromQuaternion(result.quaternion)];
175
+ }
176
+ }
177
+ return state;
178
+ }
179
+ }
180
+ function sampleTrack(track, time, interpolate) {
181
+ if (time < track.times[0])
182
+ return undefined;
183
+ let low = 0, high = track.times.length;
184
+ while (low < high) {
185
+ const middle = (low + high) >>> 1;
186
+ if (track.times[middle] <= time)
187
+ low = middle + 1;
188
+ else
189
+ high = middle;
190
+ }
191
+ const index = low - 1, value = track.values[index];
192
+ const linear = continuous.has(track.kind) || (track.kind === "Material" && !discreteMaterialProperties.has(track.name));
193
+ if (!interpolate || !linear || index === track.times.length - 1)
194
+ return value;
195
+ let delta = Number(track.values[index + 1]) - Number(value);
196
+ if (track.kind.startsWith("R"))
197
+ delta = Math.atan2(Math.sin(delta), Math.cos(delta));
198
+ return Number(value) + delta * (time - track.times[index]) / (track.times[index + 1] - track.times[index]);
199
+ }
200
+ //# sourceMappingURL=raw3d-animation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw3d-animation.js","sourceRoot":"","sources":["../src/raw3d-animation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { Raw3DProject } from "./raw3d.js";
2
+ import type { Demo3DXmlElement } from "./xml.js";
3
+ import type { Raw3DAnimationWarning } from "./raw3d-animation.js";
4
+ export interface Raw3DLightState {
5
+ enabled: boolean;
6
+ type: number;
7
+ attenuationRange: number;
8
+ attenuationConstant: number;
9
+ attenuationLinear: number;
10
+ attenuationQuadratic: number;
11
+ spotlightFalloff: number;
12
+ spotlightInnerAngle: number;
13
+ spotlightOuterAngle: number;
14
+ castsShadows: boolean;
15
+ materialProperties: Record<string, number>;
16
+ }
17
+ export interface Raw3DUIState {
18
+ name: string;
19
+ id?: string;
20
+ visible: boolean;
21
+ checked: boolean;
22
+ }
23
+ export interface Raw3DSceneState {
24
+ showDefaultFloor: boolean;
25
+ allowTeleportOnDefaultFloor: boolean;
26
+ useDefaultLighting: boolean;
27
+ ambientLightColor: [number, number, number];
28
+ }
29
+ export interface Raw3DEffectState {
30
+ readonly lights: ReadonlyMap<number, Raw3DLightState>;
31
+ readonly buttons: ReadonlyMap<number, Raw3DUIState>;
32
+ readonly scene: Raw3DSceneState;
33
+ }
34
+ export interface Raw3DEffectTrack {
35
+ readonly kind: string;
36
+ readonly target: "node" | "light" | "scene" | "ui";
37
+ readonly index: number;
38
+ readonly property: string;
39
+ readonly times: readonly number[];
40
+ readonly values: readonly (number | boolean | string)[];
41
+ readonly xml: Demo3DXmlElement;
42
+ }
43
+ export interface Raw3DStringKeyRequest {
44
+ readonly xml: Demo3DXmlElement;
45
+ readonly nodeIndex: number;
46
+ readonly property: string;
47
+ readonly times: readonly number[];
48
+ readonly encoded: string;
49
+ }
50
+ export interface Raw3DAnimationOptions {
51
+ /** Supply authoritative keys, for example from a sidecar, without guessing native string boundaries. */
52
+ readonly resolveStringKeys?: (request: Raw3DStringKeyRequest) => readonly string[] | undefined;
53
+ }
54
+ export declare const isRaw3DEffectChannel: (kind: string) => boolean;
55
+ /** Native non-transform updates, independent of presentation and interaction. */
56
+ export declare class Raw3DEffects {
57
+ private readonly project;
58
+ readonly tracks: readonly Raw3DEffectTrack[];
59
+ readonly warnings: readonly Raw3DAnimationWarning[];
60
+ constructor(project: Raw3DProject, options?: Raw3DAnimationOptions);
61
+ sampleNode(index: number, time: number): Record<string, number | boolean | string>;
62
+ sample(time: number): Raw3DEffectState;
63
+ }
64
+ /** Native distance/cone attenuation, usable by renderers other than Three.js. */
65
+ export declare function evaluateRaw3DLightAttenuation(light: Raw3DLightState, distance: number, cosine?: number): number;
66
+ //# sourceMappingURL=raw3d-effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw3d-effects.d.ts","sourceRoot":"","sources":["../src/raw3d-effects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ const mappings = {
2
+ UserData: ["node", "userData", "string"], ClientOwner: ["node", "clientOwner", "string"],
3
+ IsBillboard: ["node", "isBillboard", "boolean"], IsDecal: ["node", "isDecal", "boolean"],
4
+ H: ["node", "highlight", "integer"], Optimized: ["node", "hasBeenOptimized", "boolean"],
5
+ LightType: ["light", "type", "integer"], LightEnabled: ["light", "enabled", "boolean"],
6
+ LightAR: ["light", "attenuationRange", "number"], LightAC: ["light", "attenuationConstant", "number"],
7
+ LightAL: ["light", "attenuationLinear", "number"], LightAQ: ["light", "attenuationQuadratic", "number"],
8
+ LightSF: ["light", "spotlightFalloff", "number"], LightSIA: ["light", "spotlightInnerAngle", "number"],
9
+ LightSOA: ["light", "spotlightOuterAngle", "number"], LightCS: ["light", "castsShadows", "boolean"],
10
+ LightMaterial: ["light", "material:Diffuse", "hex"],
11
+ SceneShowDefaultFloor: ["scene", "showDefaultFloor", "boolean"],
12
+ SceneAllowTeleportOnDefaultFloor: ["scene", "allowTeleportOnDefaultFloor", "boolean"],
13
+ SceneUseDefaultLighting: ["scene", "useDefaultLighting", "boolean"],
14
+ ALR: ["scene", "ambient:0", "number"], ALG: ["scene", "ambient:1", "number"], ALB: ["scene", "ambient:2", "number"],
15
+ UIVisible: ["ui", "visible", "boolean"], UIChecked: ["ui", "checked", "boolean"],
16
+ UpdateUIVisible: ["ui", "visible", "boolean"], UpdateUIChecked: ["ui", "checked", "boolean"]
17
+ };
18
+ export const isRaw3DEffectChannel = (kind) => kind in mappings;
19
+ const attribute = (xml, name) => xml.attributes.find(a => a.localName === name)?.value;
20
+ const tokens = (value) => value.trim().split(/\s+/).filter(Boolean);
21
+ /** Native non-transform updates, independent of presentation and interaction. */
22
+ export class Raw3DEffects {
23
+ project;
24
+ tracks;
25
+ warnings;
26
+ constructor(project, options = {}) {
27
+ this.project = project;
28
+ const tracks = [], warnings = [];
29
+ const targets = {
30
+ node: new Set(project.nodes.map(node => node.index)),
31
+ light: new Set(project.lights.map((light, index) => light.index ?? index)),
32
+ ui: new Set(project.buttons.map(button => button.index)), scene: new Set([0])
33
+ };
34
+ for (const xml of project.root.child("Updates")?.children ?? []) {
35
+ const mapping = mappings[xml.localName];
36
+ if (!mapping)
37
+ continue;
38
+ const [target, initialProperty, format] = mapping;
39
+ const index = target === "scene" ? 0 : Number(attribute(xml, { node: "Node", light: "Light", ui: "UIButton" }[target]) ?? NaN);
40
+ if (!Number.isInteger(index) || !targets[target].has(index))
41
+ throw new Error(`Invalid RAW3D ${xml.localName} target ${index}.`);
42
+ const times = tokens(attribute(xml, "Time") ?? "").map(Number);
43
+ if (!times.length || times.some((time, i) => !Number.isFinite(time) || time < 0 || (i > 0 && time < times[i - 1])))
44
+ throw new Error(`Invalid RAW3D ${xml.localName} times.`);
45
+ const encoded = attribute(xml, "Value") ?? "";
46
+ let raw = format === "string" && times.length === 1 ? [encoded] : tokens(encoded);
47
+ if (format === "string") {
48
+ const explicit = xml.child("Values")?.childrenNamed("Value").map(value => value.text);
49
+ let resolved = explicit ?? options.resolveStringKeys?.({ xml, nodeIndex: index, property: initialProperty, times, encoded });
50
+ if (attribute(xml, "ValueEncoding") === "json" && !explicit && !resolved)
51
+ resolved = JSON.parse(encoded);
52
+ if (resolved !== undefined) {
53
+ if (!Array.isArray(resolved) || resolved.length !== times.length || !resolved.every(value => typeof value === "string"))
54
+ throw new Error(`Invalid resolved RAW3D ${xml.localName} string keys.`);
55
+ raw = resolved;
56
+ }
57
+ }
58
+ if (format === "string" && raw.length !== times.length) {
59
+ warnings.push({ code: "RAW3D_STRING_KEYS_AMBIGUOUS", message: `RAW3D ${xml.localName} string boundaries cannot be recovered from the native space-separated Value attribute.`, xml });
60
+ continue;
61
+ }
62
+ const values = raw.map(value => {
63
+ if (format === "string")
64
+ return value;
65
+ if (format === "boolean") {
66
+ if (!/^(true|false|0|1)$/i.test(value))
67
+ throw new Error(`Invalid RAW3D ${xml.localName} boolean.`);
68
+ return /^(true|1)$/i.test(value);
69
+ }
70
+ if (format === "hex" && !/^(?:0x)?[a-f\d]{1,8}$/i.test(value))
71
+ throw new Error(`Invalid RAW3D ${xml.localName} ARGB value.`);
72
+ const number = format === "hex" ? Number.parseInt(value.replace(/^0x/i, ""), 16) : Number(value);
73
+ if (!Number.isFinite(number) || (format === "integer" && !Number.isInteger(number)))
74
+ throw new Error(`Invalid RAW3D ${xml.localName} value.`);
75
+ return number;
76
+ });
77
+ if (values.length !== times.length)
78
+ throw new Error(`Invalid RAW3D ${xml.localName} value count.`);
79
+ tracks.push({ kind: xml.localName, target, index, property: initialProperty, times, values, xml });
80
+ }
81
+ this.tracks = tracks;
82
+ this.warnings = warnings;
83
+ }
84
+ sampleNode(index, time) {
85
+ const state = {};
86
+ for (const track of this.tracks)
87
+ if (track.target === "node" && track.index === index) {
88
+ const value = sample(track, time);
89
+ if (value !== undefined)
90
+ state[track.property] = value;
91
+ }
92
+ return state;
93
+ }
94
+ sample(time) {
95
+ if (!Number.isFinite(time))
96
+ throw new RangeError("Animation time must be finite.");
97
+ time = Math.max(0, time);
98
+ const lights = new Map(this.project.lights.map((light, index) => [light.index ?? index, {
99
+ enabled: light.enabled, type: { ambient: 0, point: 1, spot: 2, directional: 3 }[light.type.toLowerCase()] ?? Number(light.type),
100
+ attenuationRange: light.attenuationRange, attenuationConstant: light.attenuationConstant,
101
+ attenuationLinear: light.attenuationLinear, attenuationQuadratic: light.attenuationQuadratic,
102
+ spotlightFalloff: light.spotlightFalloff, spotlightInnerAngle: light.spotlightInnerAngle, spotlightOuterAngle: light.spotlightOuterAngle,
103
+ castsShadows: light.castsShadows, materialProperties: {}
104
+ }]));
105
+ const buttons = new Map(this.project.buttons.map(button => [button.index, { name: button.name, id: button.id, visible: button.visible, checked: button.checked }]));
106
+ const properties = this.project.sceneProperties;
107
+ const scene = {
108
+ showDefaultFloor: properties?.showDefaultFloor ?? true,
109
+ allowTeleportOnDefaultFloor: properties?.allowTeleportOnDefaultFloor ?? true,
110
+ useDefaultLighting: properties?.useDefaultLighting ?? true,
111
+ ambientLightColor: [0, 1, 2].map(i => properties?.ambientLightColor[i] ?? 0)
112
+ };
113
+ for (const track of this.tracks) {
114
+ if (track.target === "node")
115
+ continue;
116
+ const value = sample(track, time);
117
+ if (value === undefined)
118
+ continue;
119
+ if (track.target === "light") {
120
+ const state = lights.get(track.index);
121
+ if (track.property.startsWith("material:"))
122
+ state.materialProperties[track.property.slice(9)] = Number(value);
123
+ else
124
+ Object.assign(state, { [track.property]: value });
125
+ }
126
+ else if (track.target === "ui")
127
+ Object.assign(buttons.get(track.index), { [track.property]: value });
128
+ else if (track.property.startsWith("ambient:"))
129
+ scene.ambientLightColor[Number(track.property.slice(8))] = Number(value);
130
+ else
131
+ Object.assign(scene, { [track.property]: value });
132
+ }
133
+ return { lights, buttons, scene };
134
+ }
135
+ }
136
+ /** Native distance/cone attenuation, usable by renderers other than Three.js. */
137
+ export function evaluateRaw3DLightAttenuation(light, distance, cosine = 1) {
138
+ if (!Number.isFinite(distance) || distance < 0 || !Number.isFinite(cosine))
139
+ throw new RangeError("Light distance and cone cosine must be finite.");
140
+ if (light.type === 3 || light.type === 0)
141
+ return 1;
142
+ if (light.attenuationRange > 0 && distance > light.attenuationRange)
143
+ return 0;
144
+ let attenuation = 1 / Math.max(.000001, light.attenuationConstant + distance * light.attenuationLinear + distance * distance * light.attenuationQuadratic);
145
+ if (light.type === 2) {
146
+ const inner = Math.cos(light.spotlightInnerAngle / 2), outer = Math.cos(light.spotlightOuterAngle / 2);
147
+ if (cosine < outer)
148
+ return 0;
149
+ const factor = inner - outer > .000001 ? Math.max(0, Math.min(1, (cosine - outer) / (inner - outer))) : cosine >= outer ? 1 : 0;
150
+ attenuation *= Math.pow(factor, Math.max(.000001, light.spotlightFalloff));
151
+ }
152
+ return attenuation;
153
+ }
154
+ function sample(track, time) {
155
+ if (time < track.times[0])
156
+ return undefined;
157
+ let low = 0, high = track.times.length;
158
+ while (low < high) {
159
+ const middle = (low + high) >>> 1;
160
+ if (track.times[middle] <= time)
161
+ low = middle + 1;
162
+ else
163
+ high = middle;
164
+ }
165
+ const i = low - 1, current = track.values[i];
166
+ const next = track.values[i + 1];
167
+ if (typeof current === "number" && typeof next === "number" && (track.property.startsWith("attenuation") || track.property.startsWith("spotlight") || track.property.startsWith("ambient:"))) {
168
+ return current + (next - current) * (time - track.times[i]) / (track.times[i + 1] - track.times[i]);
169
+ }
170
+ return current;
171
+ }
172
+ //# sourceMappingURL=raw3d-effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw3d-effects.js","sourceRoot":"","sources":["../src/raw3d-effects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Raw3DMesh, Raw3DProject } from "./raw3d.js";
2
+ export interface Raw3DSkinInfluence {
3
+ readonly boneIndex: number;
4
+ readonly weight: number;
5
+ }
6
+ /** Decode the native per-bone vertex-index and float-weight buffers without a renderer. */
7
+ export declare function decodeRaw3DSkinInfluences(mesh: Raw3DMesh, project: Raw3DProject): readonly (readonly Raw3DSkinInfluence[])[];
8
+ //# sourceMappingURL=raw3d-skinning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw3d-skinning.d.ts","sourceRoot":"","sources":["../src/raw3d-skinning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IAAG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAE3F,2FAA2F;AAC3F,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC,SAAS,kBAAkB,EAAE,CAAC,EAAE,CA2B5H"}