@opsydyn/effect-three 0.0.0-stage → 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.
Files changed (166) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/LICENSE +21 -0
  3. package/README.md +189 -2
  4. package/dist/index-01kwfekm.js +5118 -0
  5. package/dist/index-01kwfekm.js.map +40 -0
  6. package/dist/index-4045wme0.js +129 -0
  7. package/dist/index-4045wme0.js.map +10 -0
  8. package/dist/index.d.ts +12 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +1361 -0
  11. package/dist/index.js.map +14 -0
  12. package/dist/kernel/animation.d.ts +14 -0
  13. package/dist/kernel/animation.d.ts.map +1 -0
  14. package/dist/kernel/behaviours.d.ts +16 -0
  15. package/dist/kernel/behaviours.d.ts.map +1 -0
  16. package/dist/kernel/bodies.d.ts +60 -0
  17. package/dist/kernel/bodies.d.ts.map +1 -0
  18. package/dist/kernel/bodySources.d.ts +47 -0
  19. package/dist/kernel/bodySources.d.ts.map +1 -0
  20. package/dist/kernel/build.d.ts +564 -0
  21. package/dist/kernel/build.d.ts.map +1 -0
  22. package/dist/kernel/cameraMotion.d.ts +39 -0
  23. package/dist/kernel/cameraMotion.d.ts.map +1 -0
  24. package/dist/kernel/clock.d.ts +17 -0
  25. package/dist/kernel/clock.d.ts.map +1 -0
  26. package/dist/kernel/contactShadowPasses.d.ts +47 -0
  27. package/dist/kernel/contactShadowPasses.d.ts.map +1 -0
  28. package/dist/kernel/description.d.ts +1120 -0
  29. package/dist/kernel/description.d.ts.map +1 -0
  30. package/dist/kernel/diff.d.ts +90 -0
  31. package/dist/kernel/diff.d.ts.map +1 -0
  32. package/dist/kernel/environmentPresets.d.ts +30 -0
  33. package/dist/kernel/environmentPresets.d.ts.map +1 -0
  34. package/dist/kernel/equality.d.ts +64 -0
  35. package/dist/kernel/equality.d.ts.map +1 -0
  36. package/dist/kernel/frames.d.ts +55 -0
  37. package/dist/kernel/frames.d.ts.map +1 -0
  38. package/dist/kernel/index.d.ts +37 -0
  39. package/dist/kernel/index.d.ts.map +1 -0
  40. package/dist/kernel/index.js +335 -0
  41. package/dist/kernel/index.js.map +9 -0
  42. package/dist/kernel/instances.d.ts +26 -0
  43. package/dist/kernel/instances.d.ts.map +1 -0
  44. package/dist/kernel/labels.d.ts +51 -0
  45. package/dist/kernel/labels.d.ts.map +1 -0
  46. package/dist/kernel/loop.d.ts +49 -0
  47. package/dist/kernel/loop.d.ts.map +1 -0
  48. package/dist/kernel/materials.d.ts +24 -0
  49. package/dist/kernel/materials.d.ts.map +1 -0
  50. package/dist/kernel/motion.d.ts +36 -0
  51. package/dist/kernel/motion.d.ts.map +1 -0
  52. package/dist/kernel/orbit.d.ts +127 -0
  53. package/dist/kernel/orbit.d.ts.map +1 -0
  54. package/dist/kernel/overlays.d.ts +16 -0
  55. package/dist/kernel/overlays.d.ts.map +1 -0
  56. package/dist/kernel/performance.d.ts +41 -0
  57. package/dist/kernel/performance.d.ts.map +1 -0
  58. package/dist/kernel/physics.d.ts +166 -0
  59. package/dist/kernel/physics.d.ts.map +1 -0
  60. package/dist/kernel/physicsDebug.d.ts +18 -0
  61. package/dist/kernel/physicsDebug.d.ts.map +1 -0
  62. package/dist/kernel/pointer.d.ts +357 -0
  63. package/dist/kernel/pointer.d.ts.map +1 -0
  64. package/dist/kernel/renderKit.d.ts +49 -0
  65. package/dist/kernel/renderKit.d.ts.map +1 -0
  66. package/dist/kernel/renderer.d.ts +83 -0
  67. package/dist/kernel/renderer.d.ts.map +1 -0
  68. package/dist/kernel/resources.d.ts +112 -0
  69. package/dist/kernel/resources.d.ts.map +1 -0
  70. package/dist/kernel/sceneGraph.d.ts +155 -0
  71. package/dist/kernel/sceneGraph.d.ts.map +1 -0
  72. package/dist/kernel/sceneIndex.d.ts +90 -0
  73. package/dist/kernel/sceneIndex.d.ts.map +1 -0
  74. package/dist/kernel/stage.d.ts +87 -0
  75. package/dist/kernel/stage.d.ts.map +1 -0
  76. package/dist/kernel/textLayout.d.ts +29 -0
  77. package/dist/kernel/textLayout.d.ts.map +1 -0
  78. package/dist/kernel/tween.d.ts +35 -0
  79. package/dist/kernel/tween.d.ts.map +1 -0
  80. package/dist/kernel/xrInput.d.ts +107 -0
  81. package/dist/kernel/xrInput.d.ts.map +1 -0
  82. package/dist/kernel/xrLocomotion.d.ts +38 -0
  83. package/dist/kernel/xrLocomotion.d.ts.map +1 -0
  84. package/dist/runtime/FrameSource.d.ts +29 -0
  85. package/dist/runtime/FrameSource.d.ts.map +1 -0
  86. package/dist/runtime/ResourceRegistry.d.ts +18 -0
  87. package/dist/runtime/ResourceRegistry.d.ts.map +1 -0
  88. package/dist/runtime/SceneRuntime.d.ts +68 -0
  89. package/dist/runtime/SceneRuntime.d.ts.map +1 -0
  90. package/dist/runtime/SceneSchema.d.ts +2536 -0
  91. package/dist/runtime/SceneSchema.d.ts.map +1 -0
  92. package/dist/runtime/errors.d.ts +19 -0
  93. package/dist/runtime/errors.d.ts.map +1 -0
  94. package/dist/runtime/index.d.ts +11 -0
  95. package/dist/runtime/index.d.ts.map +1 -0
  96. package/dist/webgl/contactShadows.d.ts +5 -0
  97. package/dist/webgl/contactShadows.d.ts.map +1 -0
  98. package/dist/webgl/index.d.ts +11 -0
  99. package/dist/webgl/index.d.ts.map +1 -0
  100. package/dist/webgl/index.js +239 -0
  101. package/dist/webgl/index.js.map +13 -0
  102. package/dist/webgl/shaderGrid.d.ts +27 -0
  103. package/dist/webgl/shaderGrid.d.ts.map +1 -0
  104. package/dist/webgl/sky.d.ts +4 -0
  105. package/dist/webgl/sky.d.ts.map +1 -0
  106. package/dist/webgpu/contactShadows.d.ts +5 -0
  107. package/dist/webgpu/contactShadows.d.ts.map +1 -0
  108. package/dist/webgpu/index.d.ts +10 -0
  109. package/dist/webgpu/index.d.ts.map +1 -0
  110. package/dist/webgpu/index.js +216 -0
  111. package/dist/webgpu/index.js.map +13 -0
  112. package/dist/webgpu/shaderGrid.d.ts +5 -0
  113. package/dist/webgpu/shaderGrid.d.ts.map +1 -0
  114. package/dist/webgpu/sky.d.ts +4 -0
  115. package/dist/webgpu/sky.d.ts.map +1 -0
  116. package/package.json +82 -4
  117. package/src/index.ts +11 -0
  118. package/src/kernel/animation.ts +24 -0
  119. package/src/kernel/behaviours.ts +36 -0
  120. package/src/kernel/bodies.ts +338 -0
  121. package/src/kernel/bodySources.ts +203 -0
  122. package/src/kernel/build.ts +1325 -0
  123. package/src/kernel/cameraMotion.ts +202 -0
  124. package/src/kernel/clock.ts +35 -0
  125. package/src/kernel/contactShadowPasses.ts +207 -0
  126. package/src/kernel/description.ts +1197 -0
  127. package/src/kernel/diff.ts +383 -0
  128. package/src/kernel/environmentPresets.ts +38 -0
  129. package/src/kernel/equality.ts +604 -0
  130. package/src/kernel/frames.ts +124 -0
  131. package/src/kernel/index.ts +274 -0
  132. package/src/kernel/instances.ts +97 -0
  133. package/src/kernel/labels.ts +54 -0
  134. package/src/kernel/loop.ts +248 -0
  135. package/src/kernel/materials.ts +258 -0
  136. package/src/kernel/motion.ts +75 -0
  137. package/src/kernel/orbit.ts +554 -0
  138. package/src/kernel/overlays.ts +130 -0
  139. package/src/kernel/performance.ts +101 -0
  140. package/src/kernel/physics.ts +361 -0
  141. package/src/kernel/physicsDebug.ts +68 -0
  142. package/src/kernel/pointer.ts +785 -0
  143. package/src/kernel/renderKit.ts +54 -0
  144. package/src/kernel/renderer.ts +136 -0
  145. package/src/kernel/resources.ts +504 -0
  146. package/src/kernel/sceneGraph.ts +1442 -0
  147. package/src/kernel/sceneIndex.ts +219 -0
  148. package/src/kernel/stage.ts +157 -0
  149. package/src/kernel/textLayout.ts +102 -0
  150. package/src/kernel/tween.ts +80 -0
  151. package/src/kernel/xrInput.ts +230 -0
  152. package/src/kernel/xrLocomotion.ts +72 -0
  153. package/src/runtime/FrameSource.ts +41 -0
  154. package/src/runtime/ResourceRegistry.ts +24 -0
  155. package/src/runtime/SceneRuntime.ts +229 -0
  156. package/src/runtime/SceneSchema.ts +983 -0
  157. package/src/runtime/errors.ts +18 -0
  158. package/src/runtime/index.ts +10 -0
  159. package/src/webgl/contactShadows.ts +67 -0
  160. package/src/webgl/index.ts +19 -0
  161. package/src/webgl/shaderGrid.ts +196 -0
  162. package/src/webgl/sky.ts +42 -0
  163. package/src/webgpu/contactShadows.ts +83 -0
  164. package/src/webgpu/index.ts +19 -0
  165. package/src/webgpu/shaderGrid.ts +158 -0
  166. package/src/webgpu/sky.ts +35 -0
package/dist/index.js ADDED
@@ -0,0 +1,1361 @@
1
+ import {
2
+ handJoints2,
3
+ clipTime2,
4
+ clipRunning2,
5
+ createPose2,
6
+ resetPose2,
7
+ float2,
8
+ builtinBehaviours2,
9
+ spinAngle2,
10
+ writeRotation2,
11
+ buildMaterial2,
12
+ updateMaterial2,
13
+ vec3Equals2,
14
+ rotationEquals2,
15
+ shapeEquals2,
16
+ geometryRefEquals2,
17
+ instanceEquals2,
18
+ instancesEqual2,
19
+ behaviourEquals2,
20
+ animationEquals2,
21
+ transitionEquals2,
22
+ materialRefEquals2,
23
+ cameraEquals2,
24
+ renderSettingsEquals2,
25
+ effectsEqual2,
26
+ viewsEqual2,
27
+ resourcesEqual2,
28
+ overlaysEqual2,
29
+ environmentEquals2,
30
+ skyEquals2,
31
+ contactShadowsEquals2,
32
+ bodyEquals2,
33
+ physicsEquals2,
34
+ xrEquals2,
35
+ capacityFor2,
36
+ createPerformanceMonitor2,
37
+ easeProgress2,
38
+ startTween2,
39
+ applyTween2,
40
+ fixed2,
41
+ spin2,
42
+ box2,
43
+ sphere2,
44
+ plane2,
45
+ cylinder2,
46
+ torus2,
47
+ cone2,
48
+ capsule2,
49
+ ring2,
50
+ circle2,
51
+ text2,
52
+ instant2,
53
+ ease2,
54
+ basic2,
55
+ lambert2,
56
+ phong2,
57
+ standard2,
58
+ physical2,
59
+ normalMaterial2,
60
+ shadowMaterial2,
61
+ grid2,
62
+ shaderGrid2,
63
+ sharedGeometry2,
64
+ lentGeometry2,
65
+ sharedMaterial2,
66
+ group2,
67
+ headSpace2,
68
+ jointSpace2,
69
+ controllerSpace2,
70
+ anchorSpace2,
71
+ planeSpace2,
72
+ meshSpace2,
73
+ xrMeshGeometryId2,
74
+ xrMesh2,
75
+ xrAnchor2,
76
+ mesh2,
77
+ body2,
78
+ interactionGroups2,
79
+ cuboidCollider2,
80
+ ballCollider2,
81
+ capsuleCollider2,
82
+ cylinderCollider2,
83
+ coneCollider2,
84
+ velocityMotor2,
85
+ positionMotor2,
86
+ physics2,
87
+ bodyRef2,
88
+ joint2,
89
+ fixedJoint2,
90
+ sphericalJoint2,
91
+ revoluteJoint2,
92
+ prismaticJoint2,
93
+ ropeJoint2,
94
+ springJoint2,
95
+ glide2,
96
+ xr2,
97
+ instance2,
98
+ instances2,
99
+ behave2,
100
+ play2,
101
+ borrowed2,
102
+ label2,
103
+ colorRange2,
104
+ ambientLight2,
105
+ directionalLight2,
106
+ pointLight2,
107
+ spotLight2,
108
+ hemisphereLight2,
109
+ perspectiveCamera2,
110
+ orthographicCamera2,
111
+ bloom2,
112
+ vignette2,
113
+ film2,
114
+ renderSettings2,
115
+ view2,
116
+ renderTexture2,
117
+ environment2,
118
+ sunPositionFromAngles2,
119
+ sky2,
120
+ contactShadows2,
121
+ overlay2,
122
+ scene2,
123
+ emptyIndex2,
124
+ indexScene2,
125
+ changedFields2,
126
+ diff2,
127
+ createResourceStore2,
128
+ createSceneClock2,
129
+ createManualFrames2,
130
+ createGatedFrames2,
131
+ createFramePacer2,
132
+ defaultOrbit2,
133
+ orbitOptions2,
134
+ rotateCamera2,
135
+ dollyCamera2,
136
+ panCamera2,
137
+ dollyCameraToward2,
138
+ orbit2,
139
+ orbitKey2,
140
+ autoRotated2,
141
+ fitCamera2,
142
+ clipCamera2,
143
+ placeOverlays2,
144
+ interactionBits2,
145
+ colliderFor2,
146
+ describedColliders2,
147
+ collidersFor2,
148
+ colliderSignature2,
149
+ locomote2,
150
+ teleport2,
151
+ glided2,
152
+ createXrTracker2,
153
+ environmentPresets2,
154
+ environmentPresetUrl2,
155
+ stagePresets2,
156
+ stage2,
157
+ centerOffset2,
158
+ stageBounds2,
159
+ noModifiers2,
160
+ pointOnPlane2,
161
+ createPicker2,
162
+ createPointerTracker2,
163
+ createSceneLoop2,
164
+ recordingRendererFactory2,
165
+ createSceneGraph2
166
+ } from "./index-01kwfekm.js";
167
+ var __defProp = Object.defineProperty;
168
+ var __returnValue = (v) => v;
169
+ function __exportSetter(name, newValue) {
170
+ this[name] = __returnValue.bind(null, newValue);
171
+ }
172
+ var __export = (target, all) => {
173
+ for (var name in all)
174
+ __defProp(target, name, {
175
+ get: all[name],
176
+ enumerable: true,
177
+ configurable: true,
178
+ set: __exportSetter.bind(all, name)
179
+ });
180
+ };
181
+
182
+ // src/runtime/FrameSource.ts
183
+ var exports_FrameSource = {};
184
+ __export(exports_FrameSource, {
185
+ FrameSource: () => FrameSource,
186
+ fromScheduler: () => fromScheduler,
187
+ layer: () => layer
188
+ });
189
+
190
+ // src/runtime/ResourceRegistry.ts
191
+ var exports_ResourceRegistry = {};
192
+ __export(exports_ResourceRegistry, {
193
+ ResourceRegistry: () => ResourceRegistry,
194
+ layer: () => layer2
195
+ });
196
+
197
+ // src/runtime/SceneRuntime.ts
198
+ var exports_SceneRuntime = {};
199
+ __export(exports_SceneRuntime, {
200
+ make: () => make
201
+ });
202
+
203
+ // src/runtime/SceneSchema.ts
204
+ var exports_SceneSchema = {};
205
+ __export(exports_SceneSchema, {
206
+ AmbientLightNode: () => AmbientLightNode,
207
+ Animation: () => Animation,
208
+ AutoRotatedDetail: () => AutoRotatedDetail,
209
+ Axis: () => Axis,
210
+ BasicMaterial: () => BasicMaterial,
211
+ Behave: () => Behave,
212
+ Body: () => Body,
213
+ BodyRef: () => BodyRef,
214
+ BorrowedNode: () => BorrowedNode,
215
+ BoxGeometry: () => BoxGeometry,
216
+ ButtonDetail: () => ButtonDetail,
217
+ Camera: () => Camera,
218
+ CapsuleGeometry: () => CapsuleGeometry,
219
+ CircleGeometry: () => CircleGeometry,
220
+ ColliderDescription: () => ColliderDescription,
221
+ CollisionDetail: () => CollisionDetail,
222
+ ConeGeometry: () => ConeGeometry,
223
+ ContactForceDetail: () => ContactForceDetail,
224
+ ContactShadows: () => ContactShadows,
225
+ CylinderGeometry: () => CylinderGeometry,
226
+ DescriptionError: () => DescriptionError,
227
+ DirectionalLightNode: () => DirectionalLightNode,
228
+ DragDetail: () => DragDetail,
229
+ Easing: () => Easing,
230
+ Environment: () => Environment,
231
+ GeometryRef: () => GeometryRef,
232
+ Gesture: () => Gesture,
233
+ GestureDetail: () => GestureDetail,
234
+ Gestures: () => Gestures,
235
+ GridNode: () => GridNode,
236
+ HemisphereLightNode: () => HemisphereLightNode,
237
+ HitDetail: () => HitDetail,
238
+ Instance: () => Instance,
239
+ InstancesNode: () => InstancesNode,
240
+ InteractionGroups: () => InteractionGroups,
241
+ Joint: () => Joint,
242
+ JointKind: () => JointKind,
243
+ JointLimits: () => JointLimits,
244
+ JointMotor: () => JointMotor,
245
+ KeyDetail: () => KeyDetail,
246
+ LabelMeasuredDetail: () => LabelMeasuredDetail,
247
+ LabelNode: () => LabelNode,
248
+ LambertMaterial: () => LambertMaterial,
249
+ MaterialRef: () => MaterialRef,
250
+ MaterialSide: () => MaterialSide,
251
+ MeasuredDetail: () => MeasuredDetail,
252
+ MeshNode: () => MeshNode,
253
+ MissDetail: () => MissDetail,
254
+ Modifiers: () => Modifiers,
255
+ NormalMaterial: () => NormalMaterial,
256
+ OrthographicCamera: () => OrthographicCamera,
257
+ Overlay: () => Overlay,
258
+ PerformanceDetail: () => PerformanceDetail,
259
+ PerspectiveCamera: () => PerspectiveCamera,
260
+ PhongMaterial: () => PhongMaterial,
261
+ PhysicalMaterial: () => PhysicalMaterial,
262
+ Physics: () => Physics,
263
+ PlaneGeometry: () => PlaneGeometry,
264
+ PointLightNode: () => PointLightNode,
265
+ PostEffect: () => PostEffect,
266
+ Ray: () => Ray,
267
+ RenderSettings: () => RenderSettings,
268
+ RenderTexture: () => RenderTexture,
269
+ ResourceDefinitions: () => ResourceDefinitions,
270
+ Rgb: () => Rgb,
271
+ RingGeometry: () => RingGeometry,
272
+ Rotation: () => Rotation,
273
+ SceneDescription: () => SceneDescription,
274
+ SceneEvent: () => SceneEvent,
275
+ SceneNode: () => SceneNode,
276
+ ShaderGridNode: () => ShaderGridNode,
277
+ ShadowMaterial: () => ShadowMaterial,
278
+ ShapeGeometry: () => ShapeGeometry,
279
+ Sky: () => Sky,
280
+ SphereGeometry: () => SphereGeometry,
281
+ SpotLightNode: () => SpotLightNode,
282
+ StandardMaterial: () => StandardMaterial,
283
+ SurfaceMaterial: () => SurfaceMaterial,
284
+ TextGeometry: () => TextGeometry,
285
+ TorusGeometry: () => TorusGeometry,
286
+ Transition: () => Transition,
287
+ Vec3: () => Vec3,
288
+ View: () => View,
289
+ WheelDetail: () => WheelDetail,
290
+ Xr: () => Xr,
291
+ XrAnchor: () => XrAnchor,
292
+ XrButtonDetail: () => XrButtonDetail,
293
+ XrMesh: () => XrMesh,
294
+ XrMeshesDetail: () => XrMeshesDetail,
295
+ XrMovedDetail: () => XrMovedDetail,
296
+ XrPlane: () => XrPlane,
297
+ XrPlanesDetail: () => XrPlanesDetail,
298
+ XrSpace: () => XrSpace,
299
+ XrStickDetail: () => XrStickDetail,
300
+ XrSurfaceDetail: () => XrSurfaceDetail
301
+ });
302
+ // src/runtime/errors.ts
303
+ import { Data } from "effect";
304
+
305
+ class InvalidScene extends Data.TaggedError("InvalidScene") {
306
+ }
307
+
308
+ class RendererUnavailable extends Data.TaggedError("RendererUnavailable") {
309
+ }
310
+ // src/runtime/FrameSource.ts
311
+ import { Context, Effect, Layer } from "effect";
312
+ var registration = (scheduler, onFrame) => () => {
313
+ const gate = createGatedFrames2(scheduler);
314
+ const unsubscribe = gate.subscribe(onFrame);
315
+ const control = {
316
+ wake: () => gate.setOpen(true),
317
+ sleep: () => gate.setOpen(false)
318
+ };
319
+ return { control, unsubscribe };
320
+ };
321
+ var fromScheduler = (scheduler) => ({
322
+ subscribe: (onFrame) => {
323
+ const register = Effect.sync(registration(scheduler, onFrame));
324
+ return Effect.acquireRelease(register, (registered) => Effect.sync(registered.unsubscribe)).pipe(Effect.map((registered) => registered.control));
325
+ }
326
+ });
327
+
328
+ class FrameSource extends Context.Service()("effect-three/FrameSource") {
329
+ }
330
+ var layer = (scheduler) => Layer.succeed(FrameSource, fromScheduler(scheduler));
331
+ // src/runtime/ResourceRegistry.ts
332
+ import { Context as Context2, Effect as Effect2, Layer as Layer2 } from "effect";
333
+ class ResourceRegistry extends Context2.Service()("effect-three/ResourceRegistry") {
334
+ }
335
+ var acquireStore = Effect2.sync(createResourceStore2);
336
+ var toService = (store) => ({ store });
337
+ var scopedStore = Effect2.acquireRelease(acquireStore, (store) => Effect2.sync(store.dispose));
338
+ var layer2 = Layer2.effect(ResourceRegistry, scopedStore.pipe(Effect2.map(toService)));
339
+ // src/runtime/SceneRuntime.ts
340
+ import { Clock, Effect as Effect3, Exit, Match, Option, Queue, Result, Scope, Stream } from "effect";
341
+ var defaultEventCapacity = 64;
342
+ var noBehaviours = {};
343
+ var ignorePlacements = (_placements) => {
344
+ return;
345
+ };
346
+ var nanosPerMillisecond = 1e6;
347
+ var nanosPerSecond = 1e9;
348
+ var toResult = (result) => Match.valueTags(result, {
349
+ Applied: (applied) => Result.succeed(applied.ops),
350
+ Invalid: ({ error }) => Result.fail(new InvalidScene({ error }))
351
+ });
352
+ var applyViewport = (graph, renderer, viewport) => {
353
+ graph.resize(viewport.width, viewport.height);
354
+ renderer.setViewport(viewport);
355
+ };
356
+ var sceneGraph = (registry, behaviours, engines) => () => createSceneGraph2({
357
+ store: registry.store,
358
+ behaviours,
359
+ physics: engines.physics,
360
+ labels: engines.labels,
361
+ kit: engines.renderer.kit
362
+ });
363
+ var reconcileNow = (graph, sceneClock, scene) => {
364
+ graph.tick(sceneClock.elapsedSeconds());
365
+ return graph.reconcile(scene);
366
+ };
367
+ var viewportChange = (graph, renderer, viewport) => () => applyViewport(graph, renderer, viewport);
368
+ var animationChange = (sceneClock, graph, animating) => () => {
369
+ sceneClock.setAnimating(animating);
370
+ graph.setAnimating(animating);
371
+ };
372
+ var acquireGraph = (registry, behaviours, engines) => {
373
+ const create = Effect3.sync(sceneGraph(registry, behaviours, engines));
374
+ return Effect3.acquireRelease(create, (graph) => Effect3.sync(graph.dispose));
375
+ };
376
+ var acquireRenderer = (factory) => {
377
+ const create = Effect3.try({
378
+ try: factory.create,
379
+ catch: (cause) => new RendererUnavailable({ cause })
380
+ });
381
+ return Effect3.acquireRelease(create, (renderer) => Effect3.sync(renderer.dispose));
382
+ };
383
+ var awaitReady = (renderer) => Option.match(Option.fromNullishOr(renderer.ready), {
384
+ onNone: () => Effect3.void,
385
+ onSome: (ready) => Effect3.tryPromise({ try: ready, catch: (cause) => new RendererUnavailable({ cause }) })
386
+ });
387
+ var invalidationListening = (graph, onInvalidated) => () => graph.onInvalidated(onInvalidated);
388
+ var acquireInvalidation = (graph, onInvalidated) => {
389
+ const listen = Effect3.sync(invalidationListening(graph, onInvalidated));
390
+ return Effect3.acquireRelease(listen, Effect3.sync);
391
+ };
392
+ var acquireEvents = (capacity) => {
393
+ const create = Queue.sliding(capacity);
394
+ return Effect3.acquireRelease(create, Queue.shutdown);
395
+ };
396
+ function* startScene(options) {
397
+ const registry = yield* ResourceRegistry;
398
+ const frames = yield* FrameSource;
399
+ const clock = yield* Clock.Clock;
400
+ const graph = yield* acquireGraph(registry, options.behaviours ?? noBehaviours, options);
401
+ const startupOps = yield* Effect3.fromResult(toResult(graph.reconcile(options.scene)));
402
+ const renderer = yield* acquireRenderer(options.renderer);
403
+ yield* awaitReady(renderer);
404
+ applyViewport(graph, renderer, options.viewport);
405
+ const events = yield* acquireEvents(options.eventCapacity ?? defaultEventCapacity);
406
+ const sceneClock = createSceneClock2(() => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerSecond);
407
+ const loop = createSceneLoop2({
408
+ graph,
409
+ renderer,
410
+ elapsedSeconds: sceneClock.elapsedSeconds,
411
+ emit: (event) => {
412
+ Queue.offerUnsafe(events, event);
413
+ },
414
+ now: () => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerMillisecond,
415
+ placeOverlays: options.placeOverlays ?? ignorePlacements
416
+ });
417
+ yield* Effect3.addFinalizer(() => Effect3.sync(loop.dispose));
418
+ const pacer = createFramePacer2(loop);
419
+ pacer.attach(yield* frames.subscribe(pacer.frame));
420
+ yield* acquireInvalidation(graph, pacer.wake);
421
+ return {
422
+ graph,
423
+ startupOps,
424
+ update: (scene) => Effect3.suspend(() => Effect3.fromResult(toResult(reconcileNow(graph, sceneClock, scene)))),
425
+ resize: (viewport) => Effect3.sync(viewportChange(graph, renderer, viewport)),
426
+ setAnimating: (animating) => Effect3.sync(animationChange(sceneClock, graph, animating)),
427
+ advance: Effect3.sync(pacer.advance),
428
+ drawNow: pacer.advance,
429
+ pointer: loop.pointer,
430
+ xrInput: loop.xrInput,
431
+ events: Stream.fromQueue(events),
432
+ drainEvents: Queue.clear(events)
433
+ };
434
+ }
435
+ function* startAtomically(options) {
436
+ const parent = yield* Effect3.scope;
437
+ const child = yield* Scope.fork(parent);
438
+ return yield* Effect3.gen(() => startScene(options)).pipe(Scope.provide(child), Effect3.onError((cause) => Scope.close(child, Exit.failCause(cause))));
439
+ }
440
+ var make = (options) => {
441
+ const program = Effect3.gen(() => startAtomically(options));
442
+ return program.pipe(Effect3.withSpan("effect-three/SceneRuntime.make"));
443
+ };
444
+ // src/runtime/SceneSchema.ts
445
+ import { Schema } from "effect";
446
+ var NonNegative = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));
447
+ var Positive = Schema.Finite.check(Schema.isGreaterThan(0));
448
+ var UnitInterval = Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 }));
449
+ var Vec3 = Schema.Tuple([Schema.Finite, Schema.Finite, Schema.Finite]);
450
+ var Axis = Schema.Literals(["x", "y", "z"]);
451
+ var Rgb = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 16777215 }));
452
+ var Rotation = Schema.Union([
453
+ Schema.TaggedStruct("Fixed", { euler: Vec3 }),
454
+ Schema.TaggedStruct("Spin", {
455
+ axis: Axis,
456
+ radiansPerSecond: Schema.Finite,
457
+ phase: Schema.Finite
458
+ })
459
+ ]);
460
+ var BoxGeometry = Schema.TaggedStruct("Box", {
461
+ width: Positive,
462
+ height: Positive,
463
+ depth: Positive
464
+ });
465
+ var Segments = Schema.Int.check(Schema.isGreaterThanOrEqualTo(3));
466
+ var SphereGeometry = Schema.TaggedStruct("Sphere", {
467
+ radius: Positive,
468
+ widthSegments: Segments,
469
+ heightSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(2))
470
+ });
471
+ var PlaneGeometry = Schema.TaggedStruct("Plane", { width: Positive, height: Positive });
472
+ var CylinderGeometry = Schema.TaggedStruct("Cylinder", {
473
+ radiusTop: NonNegative,
474
+ radiusBottom: NonNegative,
475
+ height: Positive,
476
+ radialSegments: Segments
477
+ });
478
+ var TorusGeometry = Schema.TaggedStruct("Torus", {
479
+ radius: Positive,
480
+ tube: Positive,
481
+ radialSegments: Segments,
482
+ tubularSegments: Segments
483
+ });
484
+ var ConeGeometry = Schema.TaggedStruct("Cone", {
485
+ radius: Positive,
486
+ height: Positive,
487
+ radialSegments: Segments
488
+ });
489
+ var CapsuleGeometry = Schema.TaggedStruct("Capsule", {
490
+ radius: Positive,
491
+ height: NonNegative,
492
+ capSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),
493
+ radialSegments: Segments
494
+ });
495
+ var RingGeometry = Schema.TaggedStruct("Ring", {
496
+ innerRadius: NonNegative,
497
+ outerRadius: Positive,
498
+ thetaSegments: Segments
499
+ });
500
+ var CircleGeometry = Schema.TaggedStruct("Circle", {
501
+ radius: Positive,
502
+ segments: Segments
503
+ });
504
+ var Steps = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));
505
+ var TextGeometry = Schema.TaggedStruct("Text", {
506
+ text: Schema.String,
507
+ font: Schema.String,
508
+ size: Positive,
509
+ depth: NonNegative,
510
+ curveSegments: Steps,
511
+ bevel: Schema.NullOr(Schema.Struct({
512
+ thickness: NonNegative,
513
+ size: NonNegative,
514
+ offset: Schema.Finite,
515
+ segments: Steps
516
+ })),
517
+ center: Schema.Boolean,
518
+ letterSpacing: Schema.Finite,
519
+ lineHeight: NonNegative,
520
+ align: Schema.Literals(["left", "center", "right"])
521
+ });
522
+ var ShapeGeometry = Schema.Union([
523
+ TextGeometry,
524
+ BoxGeometry,
525
+ SphereGeometry,
526
+ PlaneGeometry,
527
+ CylinderGeometry,
528
+ TorusGeometry,
529
+ ConeGeometry,
530
+ CapsuleGeometry,
531
+ RingGeometry,
532
+ CircleGeometry
533
+ ]);
534
+ var Behave = Schema.Struct({
535
+ name: Schema.String,
536
+ params: Schema.Record(Schema.String, Schema.Finite)
537
+ });
538
+ var Easing = Schema.Literals(["linear", "easeInOutCubic", "easeOutCubic", "easeOutBack"]);
539
+ var Transition = Schema.Union([
540
+ Schema.TaggedStruct("Instant", {}),
541
+ Schema.TaggedStruct("Ease", { seconds: Positive, easing: Easing })
542
+ ]);
543
+ var MaterialSide = Schema.Literals(["front", "back", "double"]);
544
+ var TextureId = Schema.NullOr(Schema.String);
545
+ var surface = {
546
+ opacity: UnitInterval,
547
+ transparent: Schema.Boolean,
548
+ side: MaterialSide,
549
+ wireframe: Schema.Boolean
550
+ };
551
+ var shaded = { ...surface, flatShading: Schema.Boolean };
552
+ var BasicMaterial = Schema.TaggedStruct("Basic", {
553
+ color: Rgb,
554
+ map: TextureId,
555
+ ...surface
556
+ });
557
+ var LambertMaterial = Schema.TaggedStruct("Lambert", {
558
+ color: Rgb,
559
+ map: TextureId,
560
+ emissive: Rgb,
561
+ ...shaded
562
+ });
563
+ var PhongMaterial = Schema.TaggedStruct("Phong", {
564
+ color: Rgb,
565
+ map: TextureId,
566
+ emissive: Rgb,
567
+ specular: Rgb,
568
+ shininess: NonNegative,
569
+ ...shaded
570
+ });
571
+ var pbr = {
572
+ color: Rgb,
573
+ map: TextureId,
574
+ roughness: UnitInterval,
575
+ metalness: UnitInterval,
576
+ emissive: Rgb,
577
+ emissiveIntensity: NonNegative
578
+ };
579
+ var StandardMaterial = Schema.TaggedStruct("Standard", { ...pbr, ...shaded });
580
+ var PhysicalMaterial = Schema.TaggedStruct("Physical", {
581
+ ...pbr,
582
+ clearcoat: UnitInterval,
583
+ clearcoatRoughness: UnitInterval,
584
+ transmission: UnitInterval,
585
+ ior: Schema.Finite.check(Schema.isBetween({ minimum: 1, maximum: 2.333 })),
586
+ ...shaded
587
+ });
588
+ var NormalMaterial = Schema.TaggedStruct("Normal", shaded);
589
+ var ShadowMaterial = Schema.TaggedStruct("Shadow", { color: Rgb, opacity: UnitInterval });
590
+ var SurfaceMaterial = Schema.Union([
591
+ ShadowMaterial,
592
+ BasicMaterial,
593
+ LambertMaterial,
594
+ PhongMaterial,
595
+ StandardMaterial,
596
+ PhysicalMaterial,
597
+ NormalMaterial
598
+ ]);
599
+ var GeometryRef = Schema.Union([
600
+ ...ShapeGeometry.members,
601
+ Schema.TaggedStruct("SharedGeometry", { id: Schema.String }),
602
+ Schema.TaggedStruct("LentGeometry", { id: Schema.String })
603
+ ]);
604
+ var MaterialRef = Schema.Union([
605
+ ...SurfaceMaterial.members,
606
+ Schema.TaggedStruct("SharedMaterial", { id: Schema.String })
607
+ ]);
608
+ var ResourceDefinitions = Schema.Struct({
609
+ geometries: Schema.Array(Schema.Struct({ id: Schema.String, geometry: ShapeGeometry })),
610
+ materials: Schema.Array(Schema.Struct({ id: Schema.String, material: SurfaceMaterial }))
611
+ });
612
+ var Upright = { halfHeight: Positive, radius: Positive };
613
+ var ColliderDescription = Schema.Struct({
614
+ shape: Schema.Union([
615
+ Schema.TaggedStruct("Cuboid", { halfExtents: Vec3 }),
616
+ Schema.TaggedStruct("Ball", { radius: Positive }),
617
+ Schema.TaggedStruct("Capsule", Upright),
618
+ Schema.TaggedStruct("Cylinder", Upright),
619
+ Schema.TaggedStruct("Cone", Upright)
620
+ ]),
621
+ position: Vec3,
622
+ rotation: Vec3,
623
+ name: Schema.NullOr(Schema.String)
624
+ });
625
+ var Group = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 15 }));
626
+ var InteractionGroups = Schema.Struct({
627
+ memberships: Schema.Array(Group),
628
+ filters: Schema.NullOr(Schema.Array(Group))
629
+ });
630
+ var Body = Schema.Struct({
631
+ type: Schema.Literals(["dynamic", "fixed", "kinematic"]),
632
+ collider: Schema.Literals(["cuboid", "ball", "hull", "trimesh"]),
633
+ mass: Schema.NullOr(Positive),
634
+ friction: NonNegative,
635
+ restitution: NonNegative,
636
+ linearDamping: NonNegative,
637
+ angularDamping: NonNegative,
638
+ gravityScale: Schema.Finite,
639
+ ccd: Schema.Boolean,
640
+ sensor: Schema.Boolean,
641
+ linearVelocity: Vec3,
642
+ angularVelocity: Vec3,
643
+ impulse: Schema.NullOr(Schema.Struct({ id: Schema.Finite, impulse: Vec3 })),
644
+ colliders: Schema.NullOr(Schema.Array(ColliderDescription)),
645
+ contactForces: Schema.NullOr(NonNegative),
646
+ collisionGroups: Schema.NullOr(InteractionGroups),
647
+ solverGroups: Schema.NullOr(InteractionGroups)
648
+ });
649
+ var Handedness = Schema.Literals(["left", "right"]);
650
+ var XrSpace = Schema.Union([
651
+ Schema.TaggedStruct("Head", {}),
652
+ Schema.TaggedStruct("Joint", { hand: Handedness, joint: Schema.Literals(handJoints2) }),
653
+ Schema.TaggedStruct("Controller", { hand: Handedness, space: Schema.Literals(["grip", "ray"]) }),
654
+ Schema.TaggedStruct("Anchor", { id: Schema.String }),
655
+ Schema.TaggedStruct("Plane", { id: Schema.String }),
656
+ Schema.TaggedStruct("Mesh", { id: Schema.String })
657
+ ]);
658
+ var BodyRef = Schema.Struct({
659
+ key: Schema.String,
660
+ instance: Schema.NullOr(Schema.String)
661
+ });
662
+ var JointMotor = Schema.Struct({
663
+ position: Schema.Finite,
664
+ velocity: Schema.Finite,
665
+ stiffness: NonNegative,
666
+ damping: NonNegative
667
+ });
668
+ var JointLimits = Schema.Tuple([Schema.Finite, Schema.Finite]);
669
+ var JointKind = Schema.Union([
670
+ Schema.TaggedStruct("Fixed", { frameA: Vec3, frameB: Vec3 }),
671
+ Schema.TaggedStruct("Spherical", {}),
672
+ Schema.TaggedStruct("Revolute", {
673
+ axis: Vec3,
674
+ limits: Schema.NullOr(JointLimits),
675
+ motor: Schema.NullOr(JointMotor)
676
+ }),
677
+ Schema.TaggedStruct("Prismatic", {
678
+ axis: Vec3,
679
+ limits: Schema.NullOr(JointLimits),
680
+ motor: Schema.NullOr(JointMotor)
681
+ }),
682
+ Schema.TaggedStruct("Rope", { length: Schema.Finite }),
683
+ Schema.TaggedStruct("Spring", {
684
+ restLength: Schema.Finite,
685
+ stiffness: Schema.Finite,
686
+ damping: Schema.Finite
687
+ })
688
+ ]);
689
+ var Joint = Schema.Struct({
690
+ key: Schema.String,
691
+ a: BodyRef,
692
+ b: BodyRef,
693
+ anchorA: Vec3,
694
+ anchorB: Vec3,
695
+ kind: JointKind,
696
+ contacts: Schema.Boolean
697
+ });
698
+ var Physics = Schema.Struct({
699
+ gravity: Vec3,
700
+ paused: Schema.Boolean,
701
+ timeStep: Positive,
702
+ interpolate: Schema.Boolean,
703
+ debug: Schema.Boolean,
704
+ joints: Schema.Array(Joint)
705
+ });
706
+ var MeshNode = Schema.TaggedStruct("Mesh", {
707
+ key: Schema.String,
708
+ position: Vec3,
709
+ rotation: Rotation,
710
+ scale: Vec3,
711
+ transition: Transition,
712
+ behaviour: Schema.NullOr(Behave),
713
+ geometry: GeometryRef,
714
+ material: MaterialRef,
715
+ interactive: Schema.Boolean,
716
+ castShadow: Schema.Boolean,
717
+ receiveShadow: Schema.Boolean,
718
+ body: Schema.NullOr(Body)
719
+ });
720
+ var Instance = Schema.Struct({
721
+ key: Schema.String,
722
+ position: Vec3,
723
+ rotation: Vec3,
724
+ scale: Vec3,
725
+ color: Rgb
726
+ });
727
+ var InstancesNode = Schema.TaggedStruct("Instances", {
728
+ key: Schema.String,
729
+ position: Vec3,
730
+ rotation: Rotation,
731
+ scale: Vec3,
732
+ transition: Transition,
733
+ behaviour: Schema.NullOr(Behave),
734
+ geometry: GeometryRef,
735
+ material: MaterialRef,
736
+ interactive: Schema.Boolean,
737
+ castShadow: Schema.Boolean,
738
+ receiveShadow: Schema.Boolean,
739
+ instances: Schema.Array(Instance),
740
+ body: Schema.NullOr(Body)
741
+ });
742
+ var Animation = Schema.Struct({
743
+ clip: Schema.String,
744
+ speed: Schema.Finite,
745
+ loop: Schema.Boolean
746
+ });
747
+ var BorrowedNode = Schema.TaggedStruct("Borrowed", {
748
+ key: Schema.String,
749
+ id: Schema.String,
750
+ animation: Schema.NullOr(Animation),
751
+ position: Vec3,
752
+ rotation: Rotation,
753
+ scale: Vec3,
754
+ transition: Transition,
755
+ behaviour: Schema.NullOr(Behave),
756
+ interactive: Schema.Boolean,
757
+ body: Schema.NullOr(Body)
758
+ });
759
+ var LabelNode = Schema.TaggedStruct("Label", {
760
+ key: Schema.String,
761
+ position: Vec3,
762
+ rotation: Rotation,
763
+ scale: Vec3,
764
+ transition: Transition,
765
+ behaviour: Schema.NullOr(Behave),
766
+ interactive: Schema.Boolean,
767
+ text: Schema.String,
768
+ font: Schema.NullOr(Schema.String),
769
+ fontSize: Positive,
770
+ color: Rgb,
771
+ fillOpacity: NonNegative,
772
+ anchorX: Schema.Union([Schema.Literals(["left", "center", "right"]), Schema.Finite]),
773
+ anchorY: Schema.Union([
774
+ Schema.Literals(["top", "top-baseline", "middle", "bottom-baseline", "bottom"]),
775
+ Schema.Finite
776
+ ]),
777
+ maxWidth: Schema.NullOr(Positive),
778
+ lineHeight: Schema.NullOr(Positive),
779
+ letterSpacing: Schema.Finite,
780
+ textAlign: Schema.Literals(["left", "right", "center", "justify"]),
781
+ outlineWidth: NonNegative,
782
+ outlineColor: Rgb,
783
+ outlineOpacity: NonNegative,
784
+ outlineBlur: NonNegative,
785
+ colorRanges: Schema.Array(Schema.Struct({ start: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)), color: Rgb })),
786
+ curveRadius: Schema.Finite,
787
+ material: Schema.NullOr(MaterialRef)
788
+ });
789
+ var AmbientLightNode = Schema.TaggedStruct("AmbientLight", {
790
+ key: Schema.String,
791
+ color: Rgb,
792
+ intensity: NonNegative
793
+ });
794
+ var isPowerOfTwo = (size) => Number.isInteger(Math.log2(size)) || "expected a power of two";
795
+ var ShadowMapSize = Schema.Int.check(Schema.isBetween({ minimum: 16, maximum: 8192 }), Schema.makeFilter(isPowerOfTwo));
796
+ var DirectionalLightNode = Schema.TaggedStruct("DirectionalLight", {
797
+ key: Schema.String,
798
+ color: Rgb,
799
+ intensity: NonNegative,
800
+ position: Vec3,
801
+ castShadow: Schema.Boolean,
802
+ shadowMapSize: ShadowMapSize,
803
+ shadowBias: Schema.Finite,
804
+ shadowArea: Positive
805
+ });
806
+ var PointLightNode = Schema.TaggedStruct("PointLight", {
807
+ key: Schema.String,
808
+ color: Rgb,
809
+ intensity: NonNegative,
810
+ position: Vec3,
811
+ distance: NonNegative,
812
+ decay: NonNegative,
813
+ castShadow: Schema.Boolean,
814
+ shadowMapSize: ShadowMapSize,
815
+ shadowBias: Schema.Finite
816
+ });
817
+ var SpotLightNode = Schema.TaggedStruct("SpotLight", {
818
+ key: Schema.String,
819
+ color: Rgb,
820
+ intensity: NonNegative,
821
+ position: Vec3,
822
+ target: Vec3,
823
+ distance: NonNegative,
824
+ angle: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: Math.PI / 2, exclusiveMinimum: true })),
825
+ penumbra: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 })),
826
+ decay: NonNegative,
827
+ castShadow: Schema.Boolean,
828
+ shadowMapSize: ShadowMapSize,
829
+ shadowBias: Schema.Finite
830
+ });
831
+ var GridNode = Schema.TaggedStruct("Grid", {
832
+ key: Schema.String,
833
+ position: Vec3,
834
+ size: Positive,
835
+ divisions: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),
836
+ color: Rgb,
837
+ centerColor: Rgb
838
+ });
839
+ var ShaderGridNode = Schema.TaggedStruct("ShaderGrid", {
840
+ key: Schema.String,
841
+ position: Vec3,
842
+ rotation: Vec3,
843
+ size: Schema.Tuple([Positive, Positive]),
844
+ cellSize: Positive,
845
+ cellThickness: NonNegative,
846
+ cellColor: Rgb,
847
+ sectionSize: Positive,
848
+ sectionThickness: NonNegative,
849
+ sectionColor: Rgb,
850
+ infinite: Schema.Boolean,
851
+ followCamera: Schema.Boolean,
852
+ fadeDistance: Positive,
853
+ fadeStrength: NonNegative,
854
+ fadeFrom: Schema.Finite,
855
+ side: Schema.Literals(["front", "back", "double"])
856
+ });
857
+ var HemisphereLightNode = Schema.TaggedStruct("HemisphereLight", {
858
+ key: Schema.String,
859
+ color: Rgb,
860
+ groundColor: Rgb,
861
+ intensity: NonNegative,
862
+ position: Vec3
863
+ });
864
+ var SceneNode = Schema.Union([
865
+ Schema.TaggedStruct("Group", {
866
+ key: Schema.String,
867
+ position: Vec3,
868
+ rotation: Rotation,
869
+ scale: Vec3,
870
+ transition: Transition,
871
+ behaviour: Schema.NullOr(Behave),
872
+ interactive: Schema.Boolean,
873
+ children: Schema.Array(Schema.suspend(() => SceneNode)),
874
+ body: Schema.NullOr(Body),
875
+ follow: Schema.NullOr(XrSpace)
876
+ }),
877
+ MeshNode,
878
+ InstancesNode,
879
+ BorrowedNode,
880
+ LabelNode,
881
+ ShaderGridNode,
882
+ AmbientLightNode,
883
+ DirectionalLightNode,
884
+ PointLightNode,
885
+ SpotLightNode,
886
+ HemisphereLightNode,
887
+ GridNode
888
+ ]);
889
+ var CameraDamping = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0), Schema.isLessThan(1));
890
+ var PerspectiveCamera = Schema.TaggedStruct("Perspective", {
891
+ fov: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 180, exclusiveMinimum: true })),
892
+ near: Positive,
893
+ far: Positive,
894
+ position: Vec3,
895
+ lookAt: Vec3,
896
+ damping: CameraDamping,
897
+ autoRotate: Schema.Finite
898
+ });
899
+ var OrthographicCamera = Schema.TaggedStruct("Orthographic", {
900
+ zoom: Positive,
901
+ near: Positive,
902
+ far: Positive,
903
+ position: Vec3,
904
+ lookAt: Vec3,
905
+ damping: CameraDamping,
906
+ autoRotate: Schema.Finite
907
+ });
908
+ var Camera = Schema.Union([PerspectiveCamera, OrthographicCamera]);
909
+ var NonNegativeFinite = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));
910
+ var PostEffect = Schema.Union([
911
+ Schema.TaggedStruct("Bloom", {
912
+ strength: NonNegativeFinite,
913
+ radius: NonNegativeFinite,
914
+ threshold: NonNegativeFinite
915
+ }),
916
+ Schema.TaggedStruct("Vignette", { offset: NonNegativeFinite, darkness: NonNegativeFinite }),
917
+ Schema.TaggedStruct("Film", { intensity: NonNegativeFinite, grayscale: Schema.Boolean })
918
+ ]);
919
+ var RenderSettings = Schema.Struct({
920
+ effects: Schema.Array(PostEffect),
921
+ frames: Schema.Literals(["always", "demand", "never"]),
922
+ resolution: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1, exclusiveMinimum: true })),
923
+ shadows: Schema.Literals(["off", "basic", "percentage", "soft", "variance"]),
924
+ toneMapping: Schema.Literals(["none", "linear", "reinhard", "cineon", "aces", "agx", "neutral"]),
925
+ exposure: Positive,
926
+ colorSpace: Schema.Literals(["srgb", "linear"])
927
+ });
928
+ var View = Schema.Struct({
929
+ key: Schema.String,
930
+ camera: Camera,
931
+ rect: Schema.Struct({
932
+ x: Schema.Finite,
933
+ y: Schema.Finite,
934
+ width: Schema.Finite.check(Schema.isGreaterThan(0)),
935
+ height: Schema.Finite.check(Schema.isGreaterThan(0))
936
+ })
937
+ });
938
+ var RenderTexture = Schema.Struct({
939
+ id: Schema.String,
940
+ width: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),
941
+ height: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),
942
+ camera: Camera,
943
+ background: Schema.NullOr(Rgb),
944
+ children: Schema.Array(SceneNode)
945
+ });
946
+ var Overlay = Schema.Struct({
947
+ key: Schema.String,
948
+ node: Schema.NullOr(Schema.String),
949
+ position: Vec3,
950
+ center: Schema.Boolean,
951
+ distanceFactor: Schema.NullOr(Positive),
952
+ occlude: Schema.Boolean,
953
+ zIndexRange: Schema.Tuple([Schema.Int, Schema.Int]),
954
+ view: Schema.NullOr(Schema.String)
955
+ });
956
+ var Environment = Schema.Struct({
957
+ map: Schema.NullOr(Schema.String),
958
+ background: Schema.Union([Schema.Boolean, Schema.Literal("only")]),
959
+ backgroundBlurriness: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 })),
960
+ backgroundIntensity: NonNegative,
961
+ environmentIntensity: NonNegative
962
+ });
963
+ var Sky = Schema.Struct({
964
+ sunPosition: Vec3,
965
+ turbidity: NonNegative,
966
+ rayleigh: NonNegative,
967
+ mieCoefficient: NonNegative,
968
+ mieDirectionalG: UnitInterval,
969
+ clouds: UnitInterval,
970
+ distance: Positive
971
+ });
972
+ var ContactShadows = Schema.Struct({
973
+ position: Vec3,
974
+ size: Schema.Tuple([Positive, Positive]),
975
+ near: Schema.Finite,
976
+ far: Positive,
977
+ blur: NonNegative,
978
+ smooth: Schema.Boolean,
979
+ opacity: UnitInterval,
980
+ color: Rgb,
981
+ resolution: Schema.Int.check(Schema.isBetween({ minimum: 16, maximum: 4096 }))
982
+ });
983
+ var XrAnchor = Schema.Struct({ id: Schema.String, position: Vec3, rotation: Vec3 });
984
+ var Xr = Schema.Struct({
985
+ origin: Vec3,
986
+ heading: Schema.Finite,
987
+ referenceSpace: Schema.Literals(["local-floor", "local", "bounded-floor"]),
988
+ framebufferScale: Positive,
989
+ hitTest: Schema.Boolean,
990
+ showInputs: Schema.Boolean,
991
+ anchors: Schema.Array(XrAnchor),
992
+ planes: Schema.Boolean,
993
+ meshes: Schema.Boolean,
994
+ domOverlay: Schema.Boolean,
995
+ glide: Schema.NullOr(Schema.Struct({
996
+ speed: NonNegative,
997
+ turn: Schema.Literals(["smooth", "snap"]),
998
+ turnSpeed: NonNegative,
999
+ snapDegrees: NonNegative
1000
+ }))
1001
+ });
1002
+ var Gestures = Schema.Literals(["page", "scene"]);
1003
+ var SceneDescription = Schema.Struct({
1004
+ camera: Camera,
1005
+ gestures: Gestures,
1006
+ views: Schema.Array(View),
1007
+ renderTextures: Schema.Array(RenderTexture),
1008
+ overlays: Schema.Array(Overlay),
1009
+ environment: Schema.NullOr(Environment),
1010
+ sky: Schema.NullOr(Sky),
1011
+ contactShadows: Schema.NullOr(ContactShadows),
1012
+ physics: Schema.NullOr(Physics),
1013
+ xr: Schema.NullOr(Xr),
1014
+ measure: Schema.Array(Schema.String),
1015
+ render: RenderSettings,
1016
+ resources: ResourceDefinitions,
1017
+ children: Schema.Array(SceneNode)
1018
+ });
1019
+ var KeyDetail = Schema.Struct({ key: Schema.String });
1020
+ var HitDetail = Schema.Struct({
1021
+ key: Schema.String,
1022
+ instance: Schema.optionalKey(Schema.String),
1023
+ part: Schema.optionalKey(Schema.String),
1024
+ view: Schema.optionalKey(Schema.String),
1025
+ path: Schema.Array(Schema.String),
1026
+ point: Vec3,
1027
+ distance: Schema.Finite,
1028
+ normal: Vec3,
1029
+ uv: Schema.Tuple([Schema.Finite, Schema.Finite]),
1030
+ ray: Schema.Struct({ origin: Vec3, direction: Vec3 })
1031
+ });
1032
+ var ButtonDetail = Schema.Struct({ ...HitDetail.fields, button: Schema.Int });
1033
+ var WheelDetail = Schema.Struct({
1034
+ ...HitDetail.fields,
1035
+ deltaX: Schema.Finite,
1036
+ deltaY: Schema.Finite
1037
+ });
1038
+ var MissDetail = Schema.Struct({ button: Schema.Int });
1039
+ var Ray = HitDetail.fields.ray;
1040
+ var DragDetail = Schema.Struct({ key: Schema.String, button: Schema.Int, ray: Ray });
1041
+ var PerformanceDetail = Schema.Struct({
1042
+ fps: Schema.Finite,
1043
+ factor: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 }))
1044
+ });
1045
+ var Modifiers = Schema.Struct({
1046
+ shift: Schema.Boolean,
1047
+ control: Schema.Boolean,
1048
+ meta: Schema.Boolean,
1049
+ alt: Schema.Boolean
1050
+ });
1051
+ var regionFields = {
1052
+ view: Schema.optionalKey(Schema.String),
1053
+ width: Schema.Finite,
1054
+ height: Schema.Finite,
1055
+ x: Schema.Finite,
1056
+ y: Schema.Finite
1057
+ };
1058
+ var Gesture = Schema.Union([
1059
+ Schema.TaggedStruct("Drag", {
1060
+ button: Schema.Int,
1061
+ modifiers: Modifiers,
1062
+ key: Schema.optionalKey(Schema.String),
1063
+ ...regionFields,
1064
+ deltaX: Schema.Finite,
1065
+ deltaY: Schema.Finite
1066
+ }),
1067
+ Schema.TaggedStruct("Wheel", {
1068
+ modifiers: Modifiers,
1069
+ ...regionFields,
1070
+ deltaX: Schema.Finite,
1071
+ deltaY: Schema.Finite
1072
+ }),
1073
+ Schema.TaggedStruct("Pinch", {
1074
+ ...regionFields,
1075
+ scale: Schema.Finite,
1076
+ deltaX: Schema.Finite,
1077
+ deltaY: Schema.Finite
1078
+ })
1079
+ ]);
1080
+ var CollisionDetail = Schema.Struct({
1081
+ a: Schema.String,
1082
+ aInstance: Schema.optionalKey(Schema.String),
1083
+ aPart: Schema.optionalKey(Schema.String),
1084
+ b: Schema.String,
1085
+ bInstance: Schema.optionalKey(Schema.String),
1086
+ bPart: Schema.optionalKey(Schema.String),
1087
+ started: Schema.Boolean
1088
+ });
1089
+ var XrHand = Schema.Literals(["left", "right", "none"]);
1090
+ var XrStickDetail = Schema.Struct({
1091
+ hand: XrHand,
1092
+ direction: Schema.Literals(["center", "left", "right", "forward", "back"])
1093
+ });
1094
+ var XrButtonDetail = Schema.Struct({
1095
+ hand: XrHand,
1096
+ button: Schema.Literals(["trigger", "squeeze", "touchpad", "thumbstick", "primary", "secondary"]),
1097
+ pressed: Schema.Boolean
1098
+ });
1099
+ var XrMovedDetail = Schema.Struct({ origin: Vec3, heading: Schema.Finite });
1100
+ var XrSurfaceDetail = Schema.Struct({ hand: XrHand, point: Vec3, normal: Vec3 });
1101
+ var XrPlane = Schema.Struct({
1102
+ id: Schema.String,
1103
+ orientation: Schema.Literals(["horizontal", "vertical"]),
1104
+ label: Schema.String,
1105
+ position: Vec3,
1106
+ rotation: Vec3,
1107
+ polygon: Schema.Array(Vec3)
1108
+ });
1109
+ var XrPlanesDetail = Schema.Struct({ planes: Schema.Array(XrPlane) });
1110
+ var XrMesh = Schema.Struct({
1111
+ id: Schema.String,
1112
+ label: Schema.String,
1113
+ position: Vec3,
1114
+ rotation: Vec3
1115
+ });
1116
+ var XrMeshesDetail = Schema.Struct({ meshes: Schema.Array(XrMesh) });
1117
+ var ContactForceDetail = Schema.Struct({
1118
+ a: Schema.String,
1119
+ aInstance: Schema.optionalKey(Schema.String),
1120
+ aPart: Schema.optionalKey(Schema.String),
1121
+ b: Schema.String,
1122
+ bInstance: Schema.optionalKey(Schema.String),
1123
+ bPart: Schema.optionalKey(Schema.String),
1124
+ totalForce: Vec3,
1125
+ totalForceMagnitude: Schema.Finite,
1126
+ maxForceDirection: Vec3,
1127
+ maxForceMagnitude: Schema.Finite
1128
+ });
1129
+ var Rect = Schema.Tuple([Schema.Finite, Schema.Finite, Schema.Finite, Schema.Finite]);
1130
+ var LabelMeasuredDetail = Schema.Struct({
1131
+ key: Schema.String,
1132
+ block: Rect,
1133
+ visible: Rect
1134
+ });
1135
+ var MeasuredDetail = Schema.Struct({ key: Schema.String, min: Vec3, max: Vec3 });
1136
+ var AutoRotatedDetail = Schema.Struct({
1137
+ view: Schema.optionalKey(Schema.String),
1138
+ position: Vec3
1139
+ });
1140
+ var GestureDetail = Schema.Struct({ gesture: Gesture });
1141
+ var SceneEvent = Schema.Union([
1142
+ Schema.TaggedStruct("PointerEnter", HitDetail.fields),
1143
+ Schema.TaggedStruct("PointerLeave", KeyDetail.fields),
1144
+ Schema.TaggedStruct("PointerMove", HitDetail.fields),
1145
+ Schema.TaggedStruct("PointerDown", ButtonDetail.fields),
1146
+ Schema.TaggedStruct("PointerUp", ButtonDetail.fields),
1147
+ Schema.TaggedStruct("Click", ButtonDetail.fields),
1148
+ Schema.TaggedStruct("DoubleClick", ButtonDetail.fields),
1149
+ Schema.TaggedStruct("ContextMenu", HitDetail.fields),
1150
+ Schema.TaggedStruct("Wheel", WheelDetail.fields),
1151
+ Schema.TaggedStruct("PointerMissed", MissDetail.fields),
1152
+ Schema.TaggedStruct("Drag", DragDetail.fields),
1153
+ Schema.TaggedStruct("DragEnd", DragDetail.fields),
1154
+ Schema.TaggedStruct("Gesture", GestureDetail.fields),
1155
+ Schema.TaggedStruct("AutoRotated", AutoRotatedDetail.fields),
1156
+ Schema.TaggedStruct("Collision", CollisionDetail.fields),
1157
+ Schema.TaggedStruct("Measured", MeasuredDetail.fields),
1158
+ Schema.TaggedStruct("LabelMeasured", LabelMeasuredDetail.fields),
1159
+ Schema.TaggedStruct("ContactForce", ContactForceDetail.fields),
1160
+ Schema.TaggedStruct("XrStick", XrStickDetail.fields),
1161
+ Schema.TaggedStruct("XrButton", XrButtonDetail.fields),
1162
+ Schema.TaggedStruct("XrSurface", XrSurfaceDetail.fields),
1163
+ Schema.TaggedStruct("XrMoved", XrMovedDetail.fields),
1164
+ Schema.TaggedStruct("XrPlanes", XrPlanesDetail.fields),
1165
+ Schema.TaggedStruct("XrMeshes", XrMeshesDetail.fields),
1166
+ Schema.TaggedStruct("PerformanceChanged", PerformanceDetail.fields)
1167
+ ]);
1168
+ var DescriptionError = Schema.Union([
1169
+ Schema.TaggedStruct("DuplicateKey", { key: Schema.String }),
1170
+ Schema.TaggedStruct("DuplicateResourceId", {
1171
+ resource: Schema.Literals(["geometry", "material"]),
1172
+ id: Schema.String
1173
+ }),
1174
+ Schema.TaggedStruct("UnknownSharedGeometry", { nodeKey: Schema.String, id: Schema.String }),
1175
+ Schema.TaggedStruct("UnknownSharedMaterial", { nodeKey: Schema.String, id: Schema.String }),
1176
+ Schema.TaggedStruct("DuplicateInstanceKey", { nodeKey: Schema.String, key: Schema.String }),
1177
+ Schema.TaggedStruct("UnknownBehaviour", { nodeKey: Schema.String, name: Schema.String }),
1178
+ Schema.TaggedStruct("DuplicateViewKey", { key: Schema.String }),
1179
+ Schema.TaggedStruct("DuplicateOverlayKey", { key: Schema.String }),
1180
+ Schema.TaggedStruct("UnknownOverlayNode", { key: Schema.String, node: Schema.String }),
1181
+ Schema.TaggedStruct("UnknownOverlayView", { key: Schema.String, view: Schema.String }),
1182
+ Schema.TaggedStruct("UnknownMeasuredNode", { key: Schema.String }),
1183
+ Schema.TaggedStruct("DuplicateJointKey", { key: Schema.String }),
1184
+ Schema.TaggedStruct("UnknownJointBody", { joint: Schema.String, body: Schema.String }),
1185
+ Schema.TaggedStruct("DuplicateRenderTextureId", { id: Schema.String })
1186
+ ]);
1187
+ export {
1188
+ exports_FrameSource as FrameSource,
1189
+ InvalidScene,
1190
+ RendererUnavailable,
1191
+ exports_ResourceRegistry as ResourceRegistry,
1192
+ exports_SceneRuntime as SceneRuntime,
1193
+ exports_SceneSchema as SceneSchema,
1194
+ ambientLight2 as ambientLight,
1195
+ anchorSpace2 as anchorSpace,
1196
+ animationEquals2 as animationEquals,
1197
+ applyTween2 as applyTween,
1198
+ autoRotated2 as autoRotated,
1199
+ ballCollider2 as ballCollider,
1200
+ basic2 as basic,
1201
+ behave2 as behave,
1202
+ behaviourEquals2 as behaviourEquals,
1203
+ bloom2 as bloom,
1204
+ body2 as body,
1205
+ bodyEquals2 as bodyEquals,
1206
+ bodyRef2 as bodyRef,
1207
+ borrowed2 as borrowed,
1208
+ box2 as box,
1209
+ buildMaterial2 as buildMaterial,
1210
+ builtinBehaviours2 as builtinBehaviours,
1211
+ cameraEquals2 as cameraEquals,
1212
+ capacityFor2 as capacityFor,
1213
+ capsule2 as capsule,
1214
+ capsuleCollider2 as capsuleCollider,
1215
+ centerOffset2 as centerOffset,
1216
+ changedFields2 as changedFields,
1217
+ circle2 as circle,
1218
+ clipCamera2 as clipCamera,
1219
+ clipRunning2 as clipRunning,
1220
+ clipTime2 as clipTime,
1221
+ colliderFor2 as colliderFor,
1222
+ colliderSignature2 as colliderSignature,
1223
+ collidersFor2 as collidersFor,
1224
+ colorRange2 as colorRange,
1225
+ cone2 as cone,
1226
+ coneCollider2 as coneCollider,
1227
+ contactShadows2 as contactShadows,
1228
+ contactShadowsEquals2 as contactShadowsEquals,
1229
+ controllerSpace2 as controllerSpace,
1230
+ createFramePacer2 as createFramePacer,
1231
+ createGatedFrames2 as createGatedFrames,
1232
+ createManualFrames2 as createManualFrames,
1233
+ createPerformanceMonitor2 as createPerformanceMonitor,
1234
+ createPicker2 as createPicker,
1235
+ createPointerTracker2 as createPointerTracker,
1236
+ createPose2 as createPose,
1237
+ createResourceStore2 as createResourceStore,
1238
+ createSceneClock2 as createSceneClock,
1239
+ createSceneGraph2 as createSceneGraph,
1240
+ createSceneLoop2 as createSceneLoop,
1241
+ createXrTracker2 as createXrTracker,
1242
+ cuboidCollider2 as cuboidCollider,
1243
+ cylinder2 as cylinder,
1244
+ cylinderCollider2 as cylinderCollider,
1245
+ defaultOrbit2 as defaultOrbit,
1246
+ describedColliders2 as describedColliders,
1247
+ diff2 as diff,
1248
+ directionalLight2 as directionalLight,
1249
+ dollyCamera2 as dollyCamera,
1250
+ dollyCameraToward2 as dollyCameraToward,
1251
+ ease2 as ease,
1252
+ easeProgress2 as easeProgress,
1253
+ effectsEqual2 as effectsEqual,
1254
+ emptyIndex2 as emptyIndex,
1255
+ environment2 as environment,
1256
+ environmentEquals2 as environmentEquals,
1257
+ environmentPresetUrl2 as environmentPresetUrl,
1258
+ environmentPresets2 as environmentPresets,
1259
+ film2 as film,
1260
+ fitCamera2 as fitCamera,
1261
+ fixed2 as fixed,
1262
+ fixedJoint2 as fixedJoint,
1263
+ float2 as float,
1264
+ geometryRefEquals2 as geometryRefEquals,
1265
+ glide2 as glide,
1266
+ glided2 as glided,
1267
+ grid2 as grid,
1268
+ group2 as group,
1269
+ handJoints2 as handJoints,
1270
+ headSpace2 as headSpace,
1271
+ hemisphereLight2 as hemisphereLight,
1272
+ indexScene2 as indexScene,
1273
+ instance2 as instance,
1274
+ instanceEquals2 as instanceEquals,
1275
+ instances2 as instances,
1276
+ instancesEqual2 as instancesEqual,
1277
+ instant2 as instant,
1278
+ interactionBits2 as interactionBits,
1279
+ interactionGroups2 as interactionGroups,
1280
+ joint2 as joint,
1281
+ jointSpace2 as jointSpace,
1282
+ label2 as label,
1283
+ lambert2 as lambert,
1284
+ lentGeometry2 as lentGeometry,
1285
+ locomote2 as locomote,
1286
+ materialRefEquals2 as materialRefEquals,
1287
+ mesh2 as mesh,
1288
+ meshSpace2 as meshSpace,
1289
+ noModifiers2 as noModifiers,
1290
+ normalMaterial2 as normalMaterial,
1291
+ orbit2 as orbit,
1292
+ orbitKey2 as orbitKey,
1293
+ orbitOptions2 as orbitOptions,
1294
+ orthographicCamera2 as orthographicCamera,
1295
+ overlay2 as overlay,
1296
+ overlaysEqual2 as overlaysEqual,
1297
+ panCamera2 as panCamera,
1298
+ perspectiveCamera2 as perspectiveCamera,
1299
+ phong2 as phong,
1300
+ physical2 as physical,
1301
+ physics2 as physics,
1302
+ physicsEquals2 as physicsEquals,
1303
+ placeOverlays2 as placeOverlays,
1304
+ plane2 as plane,
1305
+ planeSpace2 as planeSpace,
1306
+ play2 as play,
1307
+ pointLight2 as pointLight,
1308
+ pointOnPlane2 as pointOnPlane,
1309
+ positionMotor2 as positionMotor,
1310
+ prismaticJoint2 as prismaticJoint,
1311
+ recordingRendererFactory2 as recordingRendererFactory,
1312
+ renderSettings2 as renderSettings,
1313
+ renderSettingsEquals2 as renderSettingsEquals,
1314
+ renderTexture2 as renderTexture,
1315
+ resetPose2 as resetPose,
1316
+ resourcesEqual2 as resourcesEqual,
1317
+ revoluteJoint2 as revoluteJoint,
1318
+ ring2 as ring,
1319
+ ropeJoint2 as ropeJoint,
1320
+ rotateCamera2 as rotateCamera,
1321
+ rotationEquals2 as rotationEquals,
1322
+ scene2 as scene,
1323
+ shaderGrid2 as shaderGrid,
1324
+ shadowMaterial2 as shadowMaterial,
1325
+ shapeEquals2 as shapeEquals,
1326
+ sharedGeometry2 as sharedGeometry,
1327
+ sharedMaterial2 as sharedMaterial,
1328
+ sky2 as sky,
1329
+ skyEquals2 as skyEquals,
1330
+ sphere2 as sphere,
1331
+ sphericalJoint2 as sphericalJoint,
1332
+ spin2 as spin,
1333
+ spinAngle2 as spinAngle,
1334
+ spotLight2 as spotLight,
1335
+ springJoint2 as springJoint,
1336
+ stage2 as stage,
1337
+ stageBounds2 as stageBounds,
1338
+ stagePresets2 as stagePresets,
1339
+ standard2 as standard,
1340
+ startTween2 as startTween,
1341
+ sunPositionFromAngles2 as sunPositionFromAngles,
1342
+ teleport2 as teleport,
1343
+ text2 as text,
1344
+ torus2 as torus,
1345
+ transitionEquals2 as transitionEquals,
1346
+ updateMaterial2 as updateMaterial,
1347
+ vec3Equals2 as vec3Equals,
1348
+ velocityMotor2 as velocityMotor,
1349
+ view2 as view,
1350
+ viewsEqual2 as viewsEqual,
1351
+ vignette2 as vignette,
1352
+ writeRotation2 as writeRotation,
1353
+ xr2 as xr,
1354
+ xrAnchor2 as xrAnchor,
1355
+ xrEquals2 as xrEquals,
1356
+ xrMesh2 as xrMesh,
1357
+ xrMeshGeometryId2 as xrMeshGeometryId
1358
+ };
1359
+
1360
+ //# debugId=4A51874F0CADE91E64756E2164756E21
1361
+ //# sourceMappingURL=index.js.map