@woosh/meep-engine 3.0.0 → 3.0.2

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 (719) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/editor/ecs/component/FieldDescriptor.d.ts +26 -26
  3. package/editor/ecs/component/FieldValueAdapter.d.ts +6 -6
  4. package/editor/ecs/component/TypeEditor.d.ts +24 -24
  5. package/editor/ecs/component/createFieldEditor.d.ts +8 -8
  6. package/editor/ecs/component/createObjectEditor.d.ts +13 -13
  7. package/editor/ecs/component/editors/primitive/ObjectEditor.d.ts +5 -5
  8. package/editor/ecs/component/findNearestRegisteredType.d.ts +7 -7
  9. package/editor/particles/rebuildParticleEmitter.js +8 -26
  10. package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
  11. package/editor/prototypeEditorShell.js +0 -2
  12. package/editor/tools/SelectionTool.js +1 -2
  13. package/editor/tools/TransformToolV2.js +2 -3
  14. package/editor/tools/v2/BlenderCameraOrientationGizmo.js +501 -501
  15. package/editor/tools/v2/TransformControls.js +1 -1
  16. package/editor/view/ecs/components/color/GaugeView.d.ts +12 -12
  17. package/editor/view/ecs/components/common/AutoCanvasView.d.ts +29 -29
  18. package/editor/view/ecs/components/common/LineView.d.ts +11 -11
  19. package/editor/view/ecs/components/common/NumberController.d.ts +17 -17
  20. package/editor/view/ecs/components/common/TextController.d.ts +20 -20
  21. package/editor/view/node-graph/NodeGraphCamera.d.ts +47 -47
  22. package/editor/view/node-graph/NodeGraphEditorView.d.ts +54 -54
  23. package/editor/view/node-graph/NodeGraphSelection.d.ts +55 -55
  24. package/editor/view/node-graph/NodeGraphView.d.ts +97 -97
  25. package/editor/view/node-graph/NodeView.d.ts +25 -25
  26. package/editor/view/node-graph/PortView.d.ts +22 -22
  27. package/editor/view/node-graph/actions/ConnectionCreateAction.d.ts +33 -33
  28. package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts +25 -25
  29. package/editor/view/node-graph/actions/NodeDeleteAction.d.ts +46 -46
  30. package/editor/view/node-graph/actions/NodeParameterSetAction.d.ts +33 -33
  31. package/editor/view/node-graph/actions/NodesMoveAction.d.ts +37 -37
  32. package/editor/view/node-graph/actions/SelectionSetAction.d.ts +37 -37
  33. package/editor/view/node-graph/connection_wire_geometry.d.ts +45 -45
  34. package/package.json +94 -96
  35. package/src/avif/codec/dec/avif_dec.d.ts +3 -15
  36. package/src/avif/codec/enc/avif_enc.d.ts +3 -38
  37. package/src/avif/codec/enc/avif_enc_mt.d.ts +3 -1
  38. package/src/avif/decode.d.ts +2 -66
  39. package/src/avif/decode.d.ts.map +1 -1
  40. package/src/avif/encode.d.ts +2 -27
  41. package/src/avif/encode.d.ts.map +1 -1
  42. package/src/avif/index.d.ts +2 -2
  43. package/src/avif/index.d.ts.map +1 -1
  44. package/src/avif/meta.d.ts +23 -39
  45. package/src/avif/meta.d.ts.map +1 -1
  46. package/src/avif/utils.d.ts +16 -16
  47. package/src/avif/utils.d.ts.map +1 -1
  48. package/src/core/bvh2/visual/BVHGeometry.d.ts +13 -14
  49. package/src/core/bvh2/visual/BVHGeometry.d.ts.map +1 -1
  50. package/src/core/bvh2/visual/BVHGeometry.js +131 -129
  51. package/src/core/collection/array/typed/typed_array_value_denormalize.d.ts.map +1 -1
  52. package/src/core/collection/array/typed/typed_array_value_denormalize.js +52 -47
  53. package/src/core/collection/array/typed/typed_array_value_normalize.d.ts.map +1 -1
  54. package/src/core/collection/array/typed/typed_array_value_normalize.js +51 -46
  55. package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
  56. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts +9 -2
  57. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -1
  58. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +117 -110
  59. package/src/core/geom/3d/mat4/m4_look_at.d.ts +25 -0
  60. package/src/core/geom/3d/mat4/m4_look_at.d.ts.map +1 -0
  61. package/src/core/geom/3d/mat4/m4_look_at.js +96 -0
  62. package/src/core/geom/3d/mat4/m4_make_rotation_x.d.ts +18 -0
  63. package/src/core/geom/3d/mat4/m4_make_rotation_x.d.ts.map +1 -0
  64. package/src/core/geom/3d/mat4/m4_make_rotation_x.js +47 -0
  65. package/src/core/geom/3d/mat4/m4_make_rotation_y.d.ts +18 -0
  66. package/src/core/geom/3d/mat4/m4_make_rotation_y.d.ts.map +1 -0
  67. package/src/core/geom/3d/mat4/m4_make_rotation_y.js +47 -0
  68. package/src/core/geom/3d/mat4/m4_make_rotation_z.d.ts +18 -0
  69. package/src/core/geom/3d/mat4/m4_make_rotation_z.d.ts.map +1 -0
  70. package/src/core/geom/3d/mat4/m4_make_rotation_z.js +47 -0
  71. package/src/core/geom/3d/mat4/m4_perspective.d.ts +25 -0
  72. package/src/core/geom/3d/mat4/m4_perspective.d.ts.map +1 -0
  73. package/src/core/geom/3d/mat4/m4_perspective.js +66 -0
  74. package/src/core/geom/3d/tetrahedra/graphics/build_tetrahedral_mesh_geometry.d.ts +14 -0
  75. package/src/core/geom/3d/tetrahedra/graphics/build_tetrahedral_mesh_geometry.d.ts.map +1 -0
  76. package/src/core/geom/3d/tetrahedra/graphics/build_tetrahedral_mesh_geometry.js +39 -0
  77. package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.d.ts.map +1 -1
  78. package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.js +171 -166
  79. package/src/engine/Engine.d.ts.map +1 -1
  80. package/src/engine/Engine.js +1 -2
  81. package/src/engine/EngineHarness.d.ts.map +1 -1
  82. package/src/engine/EngineHarness.js +6 -1
  83. package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts +0 -1
  84. package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts.map +1 -1
  85. package/src/engine/asset/GameAssetType.js +5 -0
  86. package/src/engine/asset/loaders/async_traverse_three_object.d.ts.map +1 -1
  87. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  88. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2045 -2052
  89. package/src/engine/ecs/fow/FogOfWarEdgeMode.d.ts +1 -1
  90. package/src/engine/ecs/fow/FogOfWarEdgeMode.js +40 -40
  91. package/src/engine/ecs/gui/hud/testHudEdgeStick.js +2 -2
  92. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  93. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +265 -269
  94. package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -15
  95. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  96. package/src/engine/ecs/terrain/ecs/Terrain.js +0 -30
  97. package/src/engine/ecs/terrain/ecs/TerrainSystem.d.ts.map +1 -1
  98. package/src/engine/ecs/terrain/ecs/TerrainSystem.js +14 -29
  99. package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.d.ts.map +1 -1
  100. package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -126
  101. package/src/engine/ecs/transform/copy_three_transform.d.ts.map +1 -1
  102. package/src/engine/graphics/ecs/animation/animator/graph/AnimationState.d.ts +2 -2
  103. package/src/engine/graphics/ecs/animation/animator/graph/AnimationState.d.ts.map +1 -1
  104. package/src/engine/graphics/ecs/animation/animator/graph/AnimationState.js +207 -207
  105. package/src/engine/graphics/ecs/animation/animator/graph/AnimationTransition.d.ts +2 -2
  106. package/src/engine/graphics/ecs/animation/animator/graph/AnimationTransition.d.ts.map +1 -1
  107. package/src/engine/graphics/ecs/animation/animator/graph/AnimationTransition.js +151 -151
  108. package/src/engine/graphics/ecs/camera/Camera.d.ts +36 -48
  109. package/src/engine/graphics/ecs/camera/Camera.d.ts.map +1 -1
  110. package/src/engine/graphics/ecs/camera/Camera.js +165 -303
  111. package/src/engine/graphics/ecs/camera/camera_active_frustum.d.ts +14 -0
  112. package/src/engine/graphics/ecs/camera/camera_active_frustum.d.ts.map +1 -0
  113. package/src/engine/graphics/ecs/camera/camera_active_frustum.js +25 -0
  114. package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +16 -0
  115. package/src/engine/graphics/ecs/camera/camera_find_active.d.ts.map +1 -0
  116. package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -0
  117. package/src/engine/graphics/ecs/camera/camera_traverse_active.d.ts +12 -0
  118. package/src/engine/graphics/ecs/camera/camera_traverse_active.d.ts.map +1 -0
  119. package/src/engine/graphics/ecs/camera/camera_traverse_active.js +18 -0
  120. package/src/engine/graphics/ecs/camera/pp/PerfectPanner.js +170 -170
  121. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +5 -1
  122. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
  123. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +296 -281
  124. package/src/engine/graphics/ecs/highlight/renderer/traverseThreeObject.d.ts.map +1 -1
  125. package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.d.ts.map +1 -1
  126. package/src/engine/graphics/ecs/mesh/copyToVector3.d.ts.map +1 -1
  127. package/src/engine/graphics/ecs/mesh/setMesh.d.ts.map +1 -1
  128. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +22 -13
  129. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts.map +1 -1
  130. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +29 -16
  131. package/src/engine/graphics/ecs/mesh-v2/render/adapters/AbstractRenderAdapter.d.ts +1 -1
  132. package/src/engine/graphics/ecs/mesh-v2/render/adapters/AbstractRenderAdapter.d.ts.map +1 -1
  133. package/src/engine/graphics/ecs/mesh-v2/three_object_to_entity_composition.d.ts.map +1 -1
  134. package/src/engine/graphics/ecs/render_layers_compute_depth_range.d.ts +1 -1
  135. package/src/engine/graphics/ecs/render_layers_compute_depth_range.js +1 -1
  136. package/src/engine/graphics/ecs/water/Water.d.ts +6 -19
  137. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  138. package/src/engine/graphics/ecs/water/Water.js +104 -215
  139. package/src/engine/graphics/geometry/AttributeData.d.ts +52 -0
  140. package/src/engine/graphics/geometry/AttributeData.d.ts.map +1 -0
  141. package/src/engine/graphics/geometry/AttributeData.js +84 -0
  142. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +1 -1
  143. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +1 -1
  144. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +1 -1
  145. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +1 -1
  146. package/src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_indexed.d.ts +5 -1
  147. package/src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_indexed.d.ts.map +1 -1
  148. package/src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_indexed.js +49 -45
  149. package/src/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.d.ts +36 -24
  150. package/src/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.d.ts.map +1 -1
  151. package/src/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.js +288 -288
  152. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_buffered_geometry.d.ts +19 -0
  153. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_buffered_geometry.d.ts.map +1 -0
  154. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_buffered_geometry.js +52 -0
  155. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_indexed_geometry.d.ts +1 -0
  156. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_indexed_geometry.d.ts.map +1 -1
  157. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_indexed_geometry.js +20 -32
  158. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_unindexed_geometry.d.ts +1 -0
  159. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_unindexed_geometry.d.ts.map +1 -1
  160. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_unindexed_geometry.js +19 -30
  161. package/src/engine/graphics/geometry/compute_geometry_polycount.d.ts.map +1 -1
  162. package/src/engine/graphics/impostors/card_cluster/FacePlaneAssignment.d.ts.map +1 -1
  163. package/src/engine/graphics/impostors/octahedral/ImpostorDescription.d.ts.map +1 -1
  164. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts +1 -14
  165. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts.map +1 -1
  166. package/src/engine/graphics/particles/particular/engine/ParticularEngine.js +229 -253
  167. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +25 -12
  168. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
  169. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1149 -1194
  170. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts +4 -8
  171. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts.map +1 -1
  172. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +472 -540
  173. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts +19 -90
  174. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts.map +1 -1
  175. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +135 -514
  176. package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +1 -1
  177. package/src/engine/graphics/render/layers/RenderLayer.js +95 -95
  178. package/src/engine/graphics/sh3/fromCubeRenderTarget.d.ts.map +1 -1
  179. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts +77 -0
  180. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts.map +1 -0
  181. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.js +507 -0
  182. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts +2 -2
  183. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts.map +1 -1
  184. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.js +161 -161
  185. package/src/engine/graphics/sh3/path_tracer/PathTracedRenderer.d.ts +6 -6
  186. package/src/engine/graphics/sh3/path_tracer/PathTracedRenderer.d.ts.map +1 -1
  187. package/src/engine/graphics/sh3/path_tracer/PathTracedRenderer.js +31 -12
  188. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts +113 -0
  189. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts.map +1 -0
  190. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.js +699 -0
  191. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts +10 -0
  192. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts.map +1 -1
  193. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +73 -63
  194. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.d.ts.map +1 -1
  195. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +10 -13
  196. package/src/engine/graphics/shadows/vsm.glsl.d.ts.map +1 -1
  197. package/src/engine/graphics/shadows/vsm.glsl.js +43 -41
  198. package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.d.ts.map +1 -1
  199. package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
  200. package/src/engine/graphics3/CameraSystem3.js +10 -1
  201. package/src/engine/graphics3/GraphicsEngine3.d.ts +3 -3
  202. package/src/engine/graphics3/GraphicsEngine3.js +3 -3
  203. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +11 -0
  204. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
  205. package/src/engine/graphics3/ParticleEmitterSystem3.js +289 -265
  206. package/src/engine/graphics3/ShadeCameraAdapter.d.ts +3 -3
  207. package/src/engine/graphics3/ShadeCameraAdapter.js +3 -3
  208. package/src/engine/graphics3/WaterSystem3.js +1 -1
  209. package/src/engine/graphics3/camera_sync_from_transform.d.ts +2 -2
  210. package/src/engine/graphics3/camera_sync_from_transform.js +2 -2
  211. package/src/engine/graphics3/shade_camera_projection_ray.js +2 -2
  212. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts +2 -2
  213. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts.map +1 -1
  214. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  215. package/src/shade/renderer/camera/Camera.d.ts +3 -5
  216. package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
  217. package/src/shade/renderer/camera/Camera.js +281 -280
  218. package/src/shade/renderer/camera/GPUCameraContext.js +233 -233
  219. package/src/shade/renderer/geometry/Geometry.d.ts.map +1 -1
  220. package/src/shade/renderer/geometry/Geometry.js +6 -5
  221. package/src/shade/renderer/geometry/primitives/make_box_geometry.d.ts.map +1 -1
  222. package/src/shade/renderer/geometry/primitives/make_box_geometry.js +6 -1
  223. package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts +19 -0
  224. package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts.map +1 -0
  225. package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.js +240 -0
  226. package/src/shade/renderer/geometry/primitives/make_plane_geometry.d.ts.map +1 -1
  227. package/src/shade/renderer/geometry/primitives/make_plane_geometry.js +6 -1
  228. package/src/shade/renderer/geometry/primitives/make_polyhedron_geometry.d.ts.map +1 -1
  229. package/src/shade/renderer/geometry/primitives/make_polyhedron_geometry.js +327 -322
  230. package/src/shade/renderer/geometry/primitives/make_torus_geometry.d.ts +13 -0
  231. package/src/shade/renderer/geometry/primitives/make_torus_geometry.d.ts.map +1 -0
  232. package/src/shade/renderer/geometry/primitives/make_torus_geometry.js +107 -0
  233. package/src/shade/renderer/geometry/primitives/make_torus_knot_geometry.d.ts +15 -0
  234. package/src/shade/renderer/geometry/primitives/make_torus_knot_geometry.d.ts.map +1 -0
  235. package/src/shade/renderer/geometry/primitives/make_torus_knot_geometry.js +165 -0
  236. package/src/shade/renderer/loader/usd/parse_usda.js +1 -1
  237. package/src/shade/renderer/loader/usd/usd_build_scene.d.ts.map +1 -1
  238. package/src/shade/renderer/loader/usd/usd_build_scene.js +658 -652
  239. package/src/shade/renderer/loader/usd/usd_compose_transform.d.ts.map +1 -1
  240. package/src/shade/renderer/loader/usd/usd_compose_transform.js +58 -23
  241. package/src/shade/renderer/particles/prototypeParticleSystem.js +450 -443
  242. package/src/shade/renderer/postprocess/gtao/generate_magic_square_noise.d.ts +5 -1
  243. package/src/shade/renderer/postprocess/gtao/generate_magic_square_noise.d.ts.map +1 -1
  244. package/src/shade/renderer/postprocess/gtao/generate_magic_square_noise.js +51 -47
  245. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  246. package/src/shade/renderer/shader/chunk/texture/chunk_texture_filter_fxaa_lite.d.ts +2 -0
  247. package/src/shade/renderer/shader/chunk/texture/chunk_texture_filter_fxaa_lite.d.ts.map +1 -1
  248. package/src/shade/renderer/shader/chunk/texture/chunk_texture_filter_fxaa_lite.js +225 -223
  249. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  250. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +7 -3
  251. package/src/view/minimap/dom/MinimapCameraView.d.ts +2 -2
  252. package/src/view/minimap/dom/MinimapCameraView.js +206 -206
  253. package/editor/Editor.d.ts +0 -162
  254. package/editor/Editor.d.ts.map +0 -1
  255. package/editor/EditorCameraNavigation.d.ts +0 -21
  256. package/editor/EditorCameraNavigation.d.ts.map +0 -1
  257. package/editor/EditorKeyMap.d.ts +0 -28
  258. package/editor/EditorKeyMap.d.ts.map +0 -1
  259. package/editor/SelectionVisualizer.d.ts +0 -49
  260. package/editor/SelectionVisualizer.d.ts.map +0 -1
  261. package/editor/actions/concrete/ActionUpdateTexture.d.ts +0 -12
  262. package/editor/actions/concrete/ActionUpdateTexture.d.ts.map +0 -1
  263. package/editor/actions/concrete/ArrayCopyAction.d.ts +0 -20
  264. package/editor/actions/concrete/ArrayCopyAction.d.ts.map +0 -1
  265. package/editor/actions/concrete/ComponentAddAction.d.ts +0 -15
  266. package/editor/actions/concrete/ComponentAddAction.d.ts.map +0 -1
  267. package/editor/actions/concrete/ComponentRemoveAction.d.ts +0 -11
  268. package/editor/actions/concrete/ComponentRemoveAction.d.ts.map +0 -1
  269. package/editor/actions/concrete/EntityCreateAction.d.ts +0 -18
  270. package/editor/actions/concrete/EntityCreateAction.d.ts.map +0 -1
  271. package/editor/actions/concrete/EntityRemoveAction.d.ts +0 -11
  272. package/editor/actions/concrete/EntityRemoveAction.d.ts.map +0 -1
  273. package/editor/actions/concrete/ModifyPatchSampler2DAction.d.ts +0 -47
  274. package/editor/actions/concrete/ModifyPatchSampler2DAction.d.ts.map +0 -1
  275. package/editor/actions/concrete/ModifyPatchTextureArray2DAction.d.ts +0 -38
  276. package/editor/actions/concrete/ModifyPatchTextureArray2DAction.d.ts.map +0 -1
  277. package/editor/actions/concrete/PaintTerrainOverlayAction.d.ts +0 -23
  278. package/editor/actions/concrete/PaintTerrainOverlayAction.d.ts.map +0 -1
  279. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts +0 -32
  280. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts.map +0 -1
  281. package/editor/actions/concrete/SelectionAddAction.d.ts +0 -19
  282. package/editor/actions/concrete/SelectionAddAction.d.ts.map +0 -1
  283. package/editor/actions/concrete/SelectionClearAction.d.ts +0 -9
  284. package/editor/actions/concrete/SelectionClearAction.d.ts.map +0 -1
  285. package/editor/actions/concrete/SelectionRemoveAction.d.ts +0 -10
  286. package/editor/actions/concrete/SelectionRemoveAction.d.ts.map +0 -1
  287. package/editor/actions/concrete/TransformModifyAction.d.ts +0 -17
  288. package/editor/actions/concrete/TransformModifyAction.d.ts.map +0 -1
  289. package/editor/actions/concrete/WriteGridValueAction.d.ts +0 -14
  290. package/editor/actions/concrete/WriteGridValueAction.d.ts.map +0 -1
  291. package/editor/camera/camera_framing.d.ts +0 -30
  292. package/editor/camera/camera_framing.d.ts.map +0 -1
  293. package/editor/clipboard.d.ts +0 -19
  294. package/editor/clipboard.d.ts.map +0 -1
  295. package/editor/ecs/EditorEntity.d.ts +0 -16
  296. package/editor/ecs/EditorEntity.d.ts.map +0 -1
  297. package/editor/ecs/EditorEntitySystem.d.ts +0 -8
  298. package/editor/ecs/EditorEntitySystem.d.ts.map +0 -1
  299. package/editor/ecs/component/editors/ColorEditor.d.ts +0 -7
  300. package/editor/ecs/component/editors/ColorEditor.d.ts.map +0 -1
  301. package/editor/ecs/component/editors/HTMLElementEditor.d.ts +0 -7
  302. package/editor/ecs/component/editors/HTMLElementEditor.d.ts.map +0 -1
  303. package/editor/ecs/component/editors/ImagePathEditor.d.ts +0 -7
  304. package/editor/ecs/component/editors/ImagePathEditor.d.ts.map +0 -1
  305. package/editor/ecs/component/editors/LargeStringEditor.d.ts +0 -16
  306. package/editor/ecs/component/editors/LargeStringEditor.d.ts.map +0 -1
  307. package/editor/ecs/component/editors/NumericIntervalEditor.d.ts +0 -7
  308. package/editor/ecs/component/editors/NumericIntervalEditor.d.ts.map +0 -1
  309. package/editor/ecs/component/editors/ObservedBooleanEditor.d.ts +0 -7
  310. package/editor/ecs/component/editors/ObservedBooleanEditor.d.ts.map +0 -1
  311. package/editor/ecs/component/editors/ObservedEnumEditor.d.ts +0 -7
  312. package/editor/ecs/component/editors/ObservedEnumEditor.d.ts.map +0 -1
  313. package/editor/ecs/component/editors/ObservedIntegerEditor.d.ts +0 -7
  314. package/editor/ecs/component/editors/ObservedIntegerEditor.d.ts.map +0 -1
  315. package/editor/ecs/component/editors/ObservedStringEditor.d.ts +0 -7
  316. package/editor/ecs/component/editors/ObservedStringEditor.d.ts.map +0 -1
  317. package/editor/ecs/component/editors/Sampler2DEditor.d.ts +0 -7
  318. package/editor/ecs/component/editors/Sampler2DEditor.d.ts.map +0 -1
  319. package/editor/ecs/component/editors/collection/ListEditor.d.ts +0 -8
  320. package/editor/ecs/component/editors/collection/ListEditor.d.ts.map +0 -1
  321. package/editor/ecs/component/editors/common/BitFlagsEditor.d.ts +0 -12
  322. package/editor/ecs/component/editors/common/BitFlagsEditor.d.ts.map +0 -1
  323. package/editor/ecs/component/editors/common/EnumEditor.d.ts +0 -8
  324. package/editor/ecs/component/editors/common/EnumEditor.d.ts.map +0 -1
  325. package/editor/ecs/component/editors/common/makeV3_editor.d.ts +0 -15
  326. package/editor/ecs/component/editors/common/makeV3_editor.d.ts.map +0 -1
  327. package/editor/ecs/component/editors/common/noEditor.d.ts +0 -3
  328. package/editor/ecs/component/editors/common/noEditor.d.ts.map +0 -1
  329. package/editor/ecs/component/editors/common/two_way_sync.d.ts +0 -22
  330. package/editor/ecs/component/editors/common/two_way_sync.d.ts.map +0 -1
  331. package/editor/ecs/component/editors/ecs/GridObstacleEditor.d.ts +0 -7
  332. package/editor/ecs/component/editors/ecs/GridObstacleEditor.d.ts.map +0 -1
  333. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts +0 -20
  334. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts.map +0 -1
  335. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts +0 -12
  336. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts.map +0 -1
  337. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts +0 -14
  338. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts.map +0 -1
  339. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts +0 -52
  340. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts.map +0 -1
  341. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts +0 -47
  342. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts.map +0 -1
  343. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts +0 -16
  344. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts.map +0 -1
  345. package/editor/ecs/component/editors/ecs/Trail2DEditor.d.ts +0 -30
  346. package/editor/ecs/component/editors/ecs/Trail2DEditor.d.ts.map +0 -1
  347. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +0 -42
  348. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +0 -1
  349. package/editor/ecs/component/editors/ecs/TransformEditor.d.ts +0 -20
  350. package/editor/ecs/component/editors/ecs/TransformEditor.d.ts.map +0 -1
  351. package/editor/ecs/component/editors/ecs/buildGridObstaclePreview.d.ts +0 -8
  352. package/editor/ecs/component/editors/ecs/buildGridObstaclePreview.d.ts.map +0 -1
  353. package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.d.ts +0 -19
  354. package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.d.ts.map +0 -1
  355. package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.d.ts +0 -39
  356. package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.d.ts.map +0 -1
  357. package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.d.ts +0 -16
  358. package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.d.ts.map +0 -1
  359. package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.d.ts +0 -19
  360. package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.d.ts.map +0 -1
  361. package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.d.ts +0 -18
  362. package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.d.ts.map +0 -1
  363. package/editor/ecs/component/editors/geom/QuaternionEditor.d.ts +0 -6
  364. package/editor/ecs/component/editors/geom/QuaternionEditor.d.ts.map +0 -1
  365. package/editor/ecs/component/editors/geom/Vector1Editor.d.ts +0 -7
  366. package/editor/ecs/component/editors/geom/Vector1Editor.d.ts.map +0 -1
  367. package/editor/ecs/component/editors/geom/Vector2Editor.d.ts +0 -6
  368. package/editor/ecs/component/editors/geom/Vector2Editor.d.ts.map +0 -1
  369. package/editor/ecs/component/editors/geom/Vector3Editor.d.ts +0 -6
  370. package/editor/ecs/component/editors/geom/Vector3Editor.d.ts.map +0 -1
  371. package/editor/ecs/component/editors/geom/Vector4Editor.d.ts +0 -6
  372. package/editor/ecs/component/editors/geom/Vector4Editor.d.ts.map +0 -1
  373. package/editor/ecs/component/editors/primitive/ArrayEditor.d.ts +0 -8
  374. package/editor/ecs/component/editors/primitive/ArrayEditor.d.ts.map +0 -1
  375. package/editor/ecs/component/editors/primitive/BooleanEditor.d.ts +0 -7
  376. package/editor/ecs/component/editors/primitive/BooleanEditor.d.ts.map +0 -1
  377. package/editor/ecs/component/editors/primitive/FunctionEditor.d.ts +0 -7
  378. package/editor/ecs/component/editors/primitive/FunctionEditor.d.ts.map +0 -1
  379. package/editor/ecs/component/editors/primitive/NumberEditor.d.ts +0 -8
  380. package/editor/ecs/component/editors/primitive/NumberEditor.d.ts.map +0 -1
  381. package/editor/ecs/component/editors/primitive/StringEditor.d.ts +0 -7
  382. package/editor/ecs/component/editors/primitive/StringEditor.d.ts.map +0 -1
  383. package/editor/ecs/component/registerEngineComponentEditors.d.ts +0 -8
  384. package/editor/ecs/component/registerEngineComponentEditors.d.ts.map +0 -1
  385. package/editor/enableEditor.d.ts +0 -14
  386. package/editor/enableEditor.d.ts.map +0 -1
  387. package/editor/library/MeshLibrary.d.ts +0 -13
  388. package/editor/library/MeshLibrary.d.ts.map +0 -1
  389. package/editor/particles/lut_ops.d.ts +0 -34
  390. package/editor/particles/lut_ops.d.ts.map +0 -1
  391. package/editor/particles/particleEditEvents.d.ts +0 -11
  392. package/editor/particles/particleEditEvents.d.ts.map +0 -1
  393. package/editor/particles/rebuildParticleEmitter.d.ts +0 -11
  394. package/editor/particles/rebuildParticleEmitter.d.ts.map +0 -1
  395. package/editor/persistence/EditorLayoutStore.d.ts +0 -30
  396. package/editor/persistence/EditorLayoutStore.d.ts.map +0 -1
  397. package/editor/persistence/SceneMetadata.d.ts +0 -38
  398. package/editor/persistence/SceneMetadata.d.ts.map +0 -1
  399. package/editor/persistence/SceneSlotManager.d.ts +0 -40
  400. package/editor/persistence/SceneSlotManager.d.ts.map +0 -1
  401. package/editor/persistence/buildNewSceneDataset.d.ts +0 -10
  402. package/editor/persistence/buildNewSceneDataset.d.ts.map +0 -1
  403. package/editor/persistence/files.d.ts +0 -24
  404. package/editor/persistence/files.d.ts.map +0 -1
  405. package/editor/persistence/scene_import.d.ts +0 -45
  406. package/editor/persistence/scene_import.d.ts.map +0 -1
  407. package/editor/persistence/scene_serialization.d.ts +0 -36
  408. package/editor/persistence/scene_serialization.d.ts.map +0 -1
  409. package/editor/persistence/string_buffer_codec.d.ts +0 -20
  410. package/editor/persistence/string_buffer_codec.d.ts.map +0 -1
  411. package/editor/process/DisableGameUIProcess.d.ts +0 -8
  412. package/editor/process/DisableGameUIProcess.d.ts.map +0 -1
  413. package/editor/process/EditorProcess.d.ts +0 -19
  414. package/editor/process/EditorProcess.d.ts.map +0 -1
  415. package/editor/process/GridDisplayProcess.d.ts +0 -16
  416. package/editor/process/GridDisplayProcess.d.ts.map +0 -1
  417. package/editor/process/ObstacleGridDisplayProcess.d.ts +0 -13
  418. package/editor/process/ObstacleGridDisplayProcess.d.ts.map +0 -1
  419. package/editor/process/ParticleEmitterRebuildProcess.d.ts +0 -66
  420. package/editor/process/ParticleEmitterRebuildProcess.d.ts.map +0 -1
  421. package/editor/process/ProcessEngine.d.ts +0 -30
  422. package/editor/process/ProcessEngine.d.ts.map +0 -1
  423. package/editor/process/SymbolicDisplayProcess.d.ts +0 -19
  424. package/editor/process/SymbolicDisplayProcess.d.ts.map +0 -1
  425. package/editor/process/symbolic/ComponentSymbolicDisplay.d.ts +0 -11
  426. package/editor/process/symbolic/ComponentSymbolicDisplay.d.ts.map +0 -1
  427. package/editor/process/symbolic/SymbolicDisplayInternalAPI.d.ts +0 -68
  428. package/editor/process/symbolic/SymbolicDisplayInternalAPI.d.ts.map +0 -1
  429. package/editor/process/symbolic/buildThreeJSHelperEntity.d.ts +0 -9
  430. package/editor/process/symbolic/buildThreeJSHelperEntity.d.ts.map +0 -1
  431. package/editor/process/symbolic/make3DSymbolicDisplay.d.ts +0 -10
  432. package/editor/process/symbolic/make3DSymbolicDisplay.d.ts.map +0 -1
  433. package/editor/process/symbolic/makeCameraSymbolicDisplay.d.ts +0 -7
  434. package/editor/process/symbolic/makeCameraSymbolicDisplay.d.ts.map +0 -1
  435. package/editor/process/symbolic/makeGridPositionSymbolDisplay.d.ts +0 -6
  436. package/editor/process/symbolic/makeGridPositionSymbolDisplay.d.ts.map +0 -1
  437. package/editor/process/symbolic/makeHelperBoxGeometry.d.ts +0 -3
  438. package/editor/process/symbolic/makeHelperBoxGeometry.d.ts.map +0 -1
  439. package/editor/process/symbolic/makeHelperBoxGeometry.js +0 -44
  440. package/editor/process/symbolic/makeHelperSphereGeometry.d.ts +0 -9
  441. package/editor/process/symbolic/makeHelperSphereGeometry.d.ts.map +0 -1
  442. package/editor/process/symbolic/makeHelperSphereGeometry.js +0 -73
  443. package/editor/process/symbolic/makeLightSymbolicDisplay.d.ts +0 -7
  444. package/editor/process/symbolic/makeLightSymbolicDisplay.d.ts.map +0 -1
  445. package/editor/process/symbolic/makeParticleEmitterSymbolicDisplay.d.ts +0 -6
  446. package/editor/process/symbolic/makeParticleEmitterSymbolicDisplay.d.ts.map +0 -1
  447. package/editor/process/symbolic/makePathSymbolicDisplay.d.ts +0 -7
  448. package/editor/process/symbolic/makePathSymbolicDisplay.d.ts.map +0 -1
  449. package/editor/process/symbolic/makePositionedIconDisplaySymbol.d.ts +0 -9
  450. package/editor/process/symbolic/makePositionedIconDisplaySymbol.d.ts.map +0 -1
  451. package/editor/process/symbolic/makeSocketsSymbolicDisplay.d.ts +0 -7
  452. package/editor/process/symbolic/makeSocketsSymbolicDisplay.d.ts.map +0 -1
  453. package/editor/process/symbolic/makeSolidArrowGeometry.d.ts +0 -26
  454. package/editor/process/symbolic/makeSolidArrowGeometry.d.ts.map +0 -1
  455. package/editor/process/symbolic/makeSoundEmitterSymbolicDisplay.d.ts +0 -6
  456. package/editor/process/symbolic/makeSoundEmitterSymbolicDisplay.d.ts.map +0 -1
  457. package/editor/process/symbolic/synchronizeTransform.d.ts +0 -12
  458. package/editor/process/symbolic/synchronizeTransform.d.ts.map +0 -1
  459. package/editor/templates/entity_templates.d.ts +0 -19
  460. package/editor/templates/entity_templates.d.ts.map +0 -1
  461. package/editor/tools/GridPaintTool.d.ts +0 -18
  462. package/editor/tools/GridPaintTool.d.ts.map +0 -1
  463. package/editor/tools/SelectionTool.d.ts +0 -26
  464. package/editor/tools/SelectionTool.d.ts.map +0 -1
  465. package/editor/tools/engine/Tool.d.ts +0 -88
  466. package/editor/tools/engine/Tool.d.ts.map +0 -1
  467. package/editor/tools/engine/ToolEngine.d.ts +0 -22
  468. package/editor/tools/engine/ToolEngine.d.ts.map +0 -1
  469. package/editor/tools/engine/ToolState.d.ts +0 -7
  470. package/editor/tools/engine/ToolState.d.ts.map +0 -1
  471. package/editor/tools/paint/TerrainHeightPaintTool.d.ts +0 -18
  472. package/editor/tools/paint/TerrainHeightPaintTool.d.ts.map +0 -1
  473. package/editor/tools/paint/TerrainPaintTool.d.ts +0 -82
  474. package/editor/tools/paint/TerrainPaintTool.d.ts.map +0 -1
  475. package/editor/tools/paint/TerrainTexturePaintTool.d.ts +0 -19
  476. package/editor/tools/paint/TerrainTexturePaintTool.d.ts.map +0 -1
  477. package/editor/view/ecs/ComponentControlView.d.ts +0 -24
  478. package/editor/view/ecs/ComponentControlView.d.ts.map +0 -1
  479. package/editor/view/ecs/EntityEditor.d.ts +0 -25
  480. package/editor/view/ecs/EntityEditor.d.ts.map +0 -1
  481. package/editor/view/ecs/HierarchicalEntityListView.d.ts +0 -25
  482. package/editor/view/ecs/HierarchicalEntityListView.d.ts.map +0 -1
  483. package/editor/view/library/MeshLibraryView.d.ts +0 -17
  484. package/editor/view/library/MeshLibraryView.d.ts.map +0 -1
  485. package/editor/view/particles/ColorLutGradientView.d.ts +0 -19
  486. package/editor/view/particles/ColorLutGradientView.d.ts.map +0 -1
  487. package/editor/view/particles/ScalarLutCurveView.d.ts +0 -19
  488. package/editor/view/particles/ScalarLutCurveView.d.ts.map +0 -1
  489. package/editor/view/prepareMeshLibrary.d.ts +0 -7
  490. package/editor/view/prepareMeshLibrary.d.ts.map +0 -1
  491. package/editor/view/shell/EditorShellView.d.ts +0 -18
  492. package/editor/view/shell/EditorShellView.d.ts.map +0 -1
  493. package/editor/view/shell/SceneTreePanelView.d.ts +0 -17
  494. package/editor/view/shell/SceneTreePanelView.d.ts.map +0 -1
  495. package/editor/view/shell/ViewportPanelView.d.ts +0 -18
  496. package/editor/view/shell/ViewportPanelView.d.ts.map +0 -1
  497. package/editor/view/tools/ToolSettingsView.d.ts +0 -22
  498. package/editor/view/tools/ToolSettingsView.d.ts.map +0 -1
  499. package/editor/view/tools/ToolView.d.ts +0 -13
  500. package/editor/view/tools/ToolView.d.ts.map +0 -1
  501. package/samples/generation/grid/GridTags.d.ts +0 -16
  502. package/samples/generation/grid/GridTags.d.ts.map +0 -1
  503. package/samples/generation/grid/MirGridLayers.d.ts +0 -8
  504. package/samples/generation/grid/MirGridLayers.d.ts.map +0 -1
  505. package/samples/generation/rules/matcher_tag_occupied.d.ts +0 -3
  506. package/samples/generation/rules/matcher_tag_occupied.d.ts.map +0 -1
  507. package/samples/generation/rules/matcher_tag_traversable.d.ts +0 -3
  508. package/samples/generation/rules/matcher_tag_traversable.d.ts.map +0 -1
  509. package/samples/generation/rules/matcher_tag_unoccupied.d.ts +0 -3
  510. package/samples/generation/rules/matcher_tag_unoccupied.d.ts.map +0 -1
  511. package/samples/terrain/main.js +0 -115
  512. package/src/avif/emscripten-types.d.ts +0 -137
  513. package/src/core/geom/3d/tetrahedra/graphics/build_tetrahedral_mesh_buffer_geometry.d.ts +0 -10
  514. package/src/core/geom/3d/tetrahedra/graphics/build_tetrahedral_mesh_buffer_geometry.d.ts.map +0 -1
  515. package/src/core/geom/3d/tetrahedra/graphics/build_tetrahedral_mesh_buffer_geometry.js +0 -25
  516. package/src/core/geom/3d/topology/three/bt_mesh_from_three_buffer_geometry.d.ts +0 -20
  517. package/src/core/geom/3d/topology/three/bt_mesh_from_three_buffer_geometry.d.ts.map +0 -1
  518. package/src/core/geom/3d/topology/three/bt_mesh_from_three_buffer_geometry.js +0 -38
  519. package/src/core/geom/3d/topology/three/bt_mesh_to_three_buffer_geometry.d.ts +0 -22
  520. package/src/core/geom/3d/topology/three/bt_mesh_to_three_buffer_geometry.d.ts.map +0 -1
  521. package/src/core/geom/3d/topology/three/bt_mesh_to_three_buffer_geometry.js +0 -50
  522. package/src/engine/asset/loaders/material/StaticMaterialCache.d.ts +0 -31
  523. package/src/engine/asset/loaders/material/StaticMaterialCache.d.ts.map +0 -1
  524. package/src/engine/asset/loaders/material/StaticMaterialCache.js +0 -82
  525. package/src/engine/asset/loaders/material/TextureAttachmensByMaterialType.d.ts +0 -6
  526. package/src/engine/asset/loaders/material/TextureAttachmensByMaterialType.d.ts.map +0 -1
  527. package/src/engine/asset/loaders/material/TextureAttachmensByMaterialType.js +0 -136
  528. package/src/engine/asset/loaders/material/TextureAttachment.d.ts +0 -23
  529. package/src/engine/asset/loaders/material/TextureAttachment.d.ts.map +0 -1
  530. package/src/engine/asset/loaders/material/TextureAttachment.js +0 -25
  531. package/src/engine/asset/loaders/material/TextureCoalescer.d.ts +0 -32
  532. package/src/engine/asset/loaders/material/TextureCoalescer.d.ts.map +0 -1
  533. package/src/engine/asset/loaders/material/TextureCoalescer.js +0 -68
  534. package/src/engine/asset/loaders/material/bitmap2sampler_gl.d.ts +0 -8
  535. package/src/engine/asset/loaders/material/bitmap2sampler_gl.d.ts.map +0 -1
  536. package/src/engine/asset/loaders/material/bitmap2sampler_gl.js +0 -25
  537. package/src/engine/asset/loaders/material/computeHashColor.d.ts +0 -6
  538. package/src/engine/asset/loaders/material/computeHashColor.d.ts.map +0 -1
  539. package/src/engine/asset/loaders/material/computeHashColor.js +0 -7
  540. package/src/engine/asset/loaders/material/computeImageBitmapEquality.d.ts +0 -15
  541. package/src/engine/asset/loaders/material/computeImageBitmapEquality.d.ts.map +0 -1
  542. package/src/engine/asset/loaders/material/computeImageBitmapEquality.js +0 -118
  543. package/src/engine/asset/loaders/material/computeImageBitmapHash.d.ts +0 -7
  544. package/src/engine/asset/loaders/material/computeImageBitmapHash.d.ts.map +0 -1
  545. package/src/engine/asset/loaders/material/computeImageBitmapHash.js +0 -41
  546. package/src/engine/asset/loaders/material/computeMaterialEquality.d.ts +0 -8
  547. package/src/engine/asset/loaders/material/computeMaterialEquality.d.ts.map +0 -1
  548. package/src/engine/asset/loaders/material/computeMaterialEquality.js +0 -131
  549. package/src/engine/asset/loaders/material/computeMaterialHash.d.ts +0 -7
  550. package/src/engine/asset/loaders/material/computeMaterialHash.d.ts.map +0 -1
  551. package/src/engine/asset/loaders/material/computeMaterialHash.js +0 -72
  552. package/src/engine/asset/loaders/material/computeTextureEquality.d.ts +0 -21
  553. package/src/engine/asset/loaders/material/computeTextureEquality.d.ts.map +0 -1
  554. package/src/engine/asset/loaders/material/computeTextureEquality.js +0 -221
  555. package/src/engine/asset/loaders/material/computeTextureEqualityById.d.ts +0 -8
  556. package/src/engine/asset/loaders/material/computeTextureEqualityById.d.ts.map +0 -1
  557. package/src/engine/asset/loaders/material/computeTextureEqualityById.js +0 -22
  558. package/src/engine/asset/loaders/material/computeTextureHash.d.ts +0 -17
  559. package/src/engine/asset/loaders/material/computeTextureHash.d.ts.map +0 -1
  560. package/src/engine/asset/loaders/material/computeTextureHash.js +0 -167
  561. package/src/engine/asset/loaders/material/planeHash.d.ts +0 -7
  562. package/src/engine/asset/loaders/material/planeHash.d.ts.map +0 -1
  563. package/src/engine/asset/loaders/material/planeHash.js +0 -10
  564. package/src/engine/asset/loaders/material/planesEqual.d.ts +0 -8
  565. package/src/engine/asset/loaders/material/planesEqual.d.ts.map +0 -1
  566. package/src/engine/asset/loaders/material/planesEqual.js +0 -9
  567. package/src/engine/asset/loaders/material/textureHashById.d.ts +0 -7
  568. package/src/engine/asset/loaders/material/textureHashById.d.ts.map +0 -1
  569. package/src/engine/asset/loaders/material/textureHashById.js +0 -12
  570. package/src/engine/asset/loaders/material/traverseMaterialTextures.d.ts +0 -16
  571. package/src/engine/asset/loaders/material/traverseMaterialTextures.d.ts.map +0 -1
  572. package/src/engine/asset/loaders/material/traverseMaterialTextures.js +0 -45
  573. package/src/engine/asset/loaders/texture/TextureAssetLoader.d.ts +0 -6
  574. package/src/engine/asset/loaders/texture/TextureAssetLoader.d.ts.map +0 -1
  575. package/src/engine/asset/loaders/texture/TextureAssetLoader.js +0 -42
  576. package/src/engine/asset/loaders/texture/cloneTexture.d.ts +0 -7
  577. package/src/engine/asset/loaders/texture/cloneTexture.d.ts.map +0 -1
  578. package/src/engine/asset/loaders/texture/cloneTexture.js +0 -13
  579. package/src/engine/asset/loaders/texture/loadStandardImageTexture.d.ts +0 -8
  580. package/src/engine/asset/loaders/texture/loadStandardImageTexture.d.ts.map +0 -1
  581. package/src/engine/asset/loaders/texture/loadStandardImageTexture.js +0 -38
  582. package/src/engine/ecs/animation/AnimationOptimizer.d.ts +0 -15
  583. package/src/engine/ecs/animation/AnimationOptimizer.d.ts.map +0 -1
  584. package/src/engine/ecs/animation/AnimationOptimizer.js +0 -132
  585. package/src/engine/ecs/fow/shader/screenSpaceFogOfWarShader.d.ts +0 -7
  586. package/src/engine/ecs/fow/shader/screenSpaceFogOfWarShader.d.ts.map +0 -1
  587. package/src/engine/ecs/fow/shader/screenSpaceFogOfWarShader.js +0 -217
  588. package/src/engine/graphics/context/WebGLContextFailureReason.d.ts +0 -9
  589. package/src/engine/graphics/context/WebGLContextFailureReason.d.ts.map +0 -1
  590. package/src/engine/graphics/context/WebGLContextFailureReason.js +0 -17
  591. package/src/engine/graphics/context/WebGLContextMonitor.d.ts +0 -106
  592. package/src/engine/graphics/context/WebGLContextMonitor.d.ts.map +0 -1
  593. package/src/engine/graphics/context/WebGLContextMonitor.js +0 -341
  594. package/src/engine/graphics/context/WebGLContextState.d.ts +0 -14
  595. package/src/engine/graphics/context/WebGLContextState.d.ts.map +0 -1
  596. package/src/engine/graphics/context/WebGLContextState.js +0 -24
  597. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraph.d.ts +0 -231
  598. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraph.d.ts.map +0 -1
  599. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +0 -813
  600. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraphSerializationAdapter.d.ts +0 -25
  601. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraphSerializationAdapter.d.ts.map +0 -1
  602. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraphSerializationAdapter.js +0 -62
  603. package/src/engine/graphics/ecs/camera/CameraSystem.d.ts +0 -74
  604. package/src/engine/graphics/ecs/camera/CameraSystem.d.ts.map +0 -1
  605. package/src/engine/graphics/ecs/camera/CameraSystem.js +0 -331
  606. package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.d.ts +0 -10
  607. package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.d.ts.map +0 -1
  608. package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.js +0 -105
  609. package/src/engine/graphics/ecs/camera/build_three_camera_object.d.ts +0 -7
  610. package/src/engine/graphics/ecs/camera/build_three_camera_object.d.ts.map +0 -1
  611. package/src/engine/graphics/ecs/camera/build_three_camera_object.js +0 -29
  612. package/src/engine/graphics/ecs/camera/frustum_from_camera.d.ts +0 -8
  613. package/src/engine/graphics/ecs/camera/frustum_from_camera.d.ts.map +0 -1
  614. package/src/engine/graphics/ecs/camera/frustum_from_camera.js +0 -20
  615. package/src/engine/graphics/ecs/camera/set_camera_aspect_ratio.d.ts +0 -9
  616. package/src/engine/graphics/ecs/camera/set_camera_aspect_ratio.d.ts.map +0 -1
  617. package/src/engine/graphics/ecs/camera/set_camera_aspect_ratio.js +0 -46
  618. package/src/engine/graphics/ecs/camera/unprojectPoint.d.ts +0 -9
  619. package/src/engine/graphics/ecs/camera/unprojectPoint.d.ts.map +0 -1
  620. package/src/engine/graphics/ecs/camera/unprojectPoint.js +0 -14
  621. package/src/engine/graphics/ecs/camera/update_camera_transform.d.ts +0 -6
  622. package/src/engine/graphics/ecs/camera/update_camera_transform.d.ts.map +0 -1
  623. package/src/engine/graphics/ecs/camera/update_camera_transform.js +0 -17
  624. package/src/engine/graphics/geometry/buffered/buffer_attribute_deinterleave.d.ts +0 -8
  625. package/src/engine/graphics/geometry/buffered/buffer_attribute_deinterleave.d.ts.map +0 -1
  626. package/src/engine/graphics/geometry/buffered/buffer_attribute_deinterleave.js +0 -41
  627. package/src/engine/graphics/geometry/buffered/buffer_attribute_denormalize.d.ts +0 -8
  628. package/src/engine/graphics/geometry/buffered/buffer_attribute_denormalize.d.ts.map +0 -1
  629. package/src/engine/graphics/geometry/buffered/buffer_attribute_denormalize.js +0 -66
  630. package/src/engine/graphics/impostors/octahedral/bake/prepare_bake_material.d.ts +0 -9
  631. package/src/engine/graphics/impostors/octahedral/bake/prepare_bake_material.d.ts.map +0 -1
  632. package/src/engine/graphics/impostors/octahedral/bake/prepare_bake_material.js +0 -114
  633. package/src/engine/graphics/material/composeCompile.d.ts +0 -8
  634. package/src/engine/graphics/material/composeCompile.d.ts.map +0 -1
  635. package/src/engine/graphics/material/composeCompile.js +0 -37
  636. package/src/engine/graphics/material/manager/AbstractMaterialTransformer.d.ts +0 -9
  637. package/src/engine/graphics/material/manager/AbstractMaterialTransformer.d.ts.map +0 -1
  638. package/src/engine/graphics/material/manager/AbstractMaterialTransformer.js +0 -10
  639. package/src/engine/graphics/material/manager/ManagedMaterial.d.ts +0 -46
  640. package/src/engine/graphics/material/manager/ManagedMaterial.d.ts.map +0 -1
  641. package/src/engine/graphics/material/manager/ManagedMaterial.js +0 -78
  642. package/src/engine/graphics/material/manager/MaterialManager.d.ts +0 -82
  643. package/src/engine/graphics/material/manager/MaterialManager.d.ts.map +0 -1
  644. package/src/engine/graphics/material/manager/MaterialManager.js +0 -215
  645. package/src/engine/graphics/material/manager/compilers/CoalesceTextures.d.ts +0 -11
  646. package/src/engine/graphics/material/manager/compilers/CoalesceTextures.d.ts.map +0 -1
  647. package/src/engine/graphics/material/manager/compilers/CoalesceTextures.js +0 -25
  648. package/src/engine/graphics/material/optimization/BUFFER_GEOMETRY_UVS.d.ts +0 -5
  649. package/src/engine/graphics/material/optimization/BUFFER_GEOMETRY_UVS.d.ts.map +0 -1
  650. package/src/engine/graphics/material/optimization/BUFFER_GEOMETRY_UVS.js +0 -10
  651. package/src/engine/graphics/material/optimization/MaterialDescriptor.d.ts +0 -15
  652. package/src/engine/graphics/material/optimization/MaterialDescriptor.d.ts.map +0 -1
  653. package/src/engine/graphics/material/optimization/MaterialDescriptor.js +0 -43
  654. package/src/engine/graphics/material/optimization/UvContext.d.ts +0 -14
  655. package/src/engine/graphics/material/optimization/UvContext.d.ts.map +0 -1
  656. package/src/engine/graphics/material/optimization/UvContext.js +0 -16
  657. package/src/engine/graphics/material/optimization/is_compliant_mesh.d.ts +0 -7
  658. package/src/engine/graphics/material/optimization/is_compliant_mesh.d.ts.map +0 -1
  659. package/src/engine/graphics/material/optimization/is_compliant_mesh.js +0 -71
  660. package/src/engine/graphics/particles/ecs/ParticleEmitterSystem.d.ts +0 -67
  661. package/src/engine/graphics/particles/ecs/ParticleEmitterSystem.d.ts.map +0 -1
  662. package/src/engine/graphics/particles/ecs/ParticleEmitterSystem.js +0 -291
  663. package/src/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.d.ts +0 -11
  664. package/src/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.d.ts.map +0 -1
  665. package/src/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +0 -497
  666. package/src/engine/graphics/particles/particular/engine/shader/MaterialRecord.d.ts +0 -40
  667. package/src/engine/graphics/particles/particular/engine/shader/MaterialRecord.d.ts.map +0 -1
  668. package/src/engine/graphics/particles/particular/engine/shader/MaterialRecord.js +0 -47
  669. package/src/engine/graphics/sh3/path_tracer/prepare_scene_gltf.d.ts +0 -21
  670. package/src/engine/graphics/sh3/path_tracer/prepare_scene_gltf.d.ts.map +0 -1
  671. package/src/engine/graphics/sh3/path_tracer/prepare_scene_gltf.js +0 -109
  672. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.d.ts +0 -7
  673. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.d.ts.map +0 -1
  674. package/src/engine/graphics/sh3/path_tracer/three_object_to_path_traced_scene.js +0 -69
  675. package/src/engine/graphics/shaders/CopyShader.d.ts +0 -16
  676. package/src/engine/graphics/shaders/CopyShader.d.ts.map +0 -1
  677. package/src/engine/graphics/shaders/CopyShader.js +0 -48
  678. package/src/engine/graphics/texture/CheckersTexture.d.ts +0 -11
  679. package/src/engine/graphics/texture/CheckersTexture.d.ts.map +0 -1
  680. package/src/engine/graphics/texture/CheckersTexture.js +0 -25
  681. package/src/engine/graphics/texture/makeOnePixelTexture.d.ts +0 -9
  682. package/src/engine/graphics/texture/makeOnePixelTexture.d.ts.map +0 -1
  683. package/src/engine/graphics/texture/makeOnePixelTexture.js +0 -21
  684. package/src/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.d.ts +0 -7
  685. package/src/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.d.ts.map +0 -1
  686. package/src/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.js +0 -40
  687. package/src/engine/graphics/texture/whitePixelTexture.d.ts +0 -6
  688. package/src/engine/graphics/texture/whitePixelTexture.d.ts.map +0 -1
  689. package/src/engine/graphics/texture/whitePixelTexture.js +0 -9
  690. package/src/engine/graphics/three/ThreeFactory.d.ts +0 -36
  691. package/src/engine/graphics/three/ThreeFactory.d.ts.map +0 -1
  692. package/src/engine/graphics/three/ThreeFactory.js +0 -70
  693. package/src/engine/graphics/three/cloneObject3D.d.ts +0 -7
  694. package/src/engine/graphics/three/cloneObject3D.d.ts.map +0 -1
  695. package/src/engine/graphics/three/cloneObject3D.js +0 -70
  696. package/src/engine/graphics/three/compare_three_objects.d.ts +0 -7
  697. package/src/engine/graphics/three/compare_three_objects.d.ts.map +0 -1
  698. package/src/engine/graphics/three/compare_three_objects.js +0 -8
  699. package/src/engine/graphics/three/expand_aabb_by_transformed_three_object.d.ts +0 -8
  700. package/src/engine/graphics/three/expand_aabb_by_transformed_three_object.d.ts.map +0 -1
  701. package/src/engine/graphics/three/expand_aabb_by_transformed_three_object.js +0 -46
  702. package/src/engine/graphics/three/material/iterate_three_material_textures.d.ts +0 -10
  703. package/src/engine/graphics/three/material/iterate_three_material_textures.d.ts.map +0 -1
  704. package/src/engine/graphics/three/material/iterate_three_material_textures.js +0 -33
  705. package/src/engine/graphics/three/three_object_replace_materials.d.ts +0 -7
  706. package/src/engine/graphics/three/three_object_replace_materials.d.ts.map +0 -1
  707. package/src/engine/graphics/three/three_object_replace_materials.js +0 -13
  708. package/src/engine/graphics/util/promiseMaterialLoaded.d.ts +0 -7
  709. package/src/engine/graphics/util/promiseMaterialLoaded.d.ts.map +0 -1
  710. package/src/engine/graphics/util/promiseMaterialLoaded.js +0 -28
  711. package/src/engine/graphics/util/promiseTextureLoaded.d.ts +0 -7
  712. package/src/engine/graphics/util/promiseTextureLoaded.d.ts.map +0 -1
  713. package/src/engine/graphics/util/promiseTextureLoaded.js +0 -31
  714. package/src/view/minimap/gl/MinimapTerrainGL.d.ts +0 -25
  715. package/src/view/minimap/gl/MinimapTerrainGL.d.ts.map +0 -1
  716. package/src/view/minimap/gl/MinimapTerrainGL.js +0 -188
  717. package/src/view/minimap/gl/buildMaterial.d.ts +0 -7
  718. package/src/view/minimap/gl/buildMaterial.d.ts.map +0 -1
  719. package/src/view/minimap/gl/buildMaterial.js +0 -94
@@ -1,652 +1,658 @@
1
- /**
2
- * Converts the unified `specsByPath` intermediate representation into
3
- * the engine's scene graph (Node3D, Mesh, StandardShadeMaterial).
4
- *
5
- * This module is format-agnostic — it consumes the same specsByPath
6
- * dictionary regardless of whether the source was USDA, USDC, or USDZ.
7
- *
8
- * @see https://openusd.org/release/glossary.html#usdglossary-prim — Prim concept
9
- * @see https://openusd.org/release/glossary.html#usdglossary-attribute — Attribute concept
10
- * @see https://openusd.org/release/api/class_usd_geom_mesh.html — UsdGeomMesh schema
11
- * @see https://openusd.org/release/api/class_usd_preview_surface.html — UsdPreviewSurface
12
- *
13
- * @module usd_build_scene
14
- */
15
-
16
- import { clamp01 } from "../../../../core/math/clamp01.js";
17
- import { mat4 } from "gl-matrix";
18
- import { Attribute } from "../../geometry/Attribute.js";
19
- import { Geometry } from "../../geometry/Geometry.js";
20
- import { meshlet_geometry_build_from_geometry } from "../../geometry/meshlet_geometry_build_from_geometry.js";
21
- import { StandardAttributes } from "../../geometry/StandardAttributes.js";
22
- import { normalize_attribute } from "../../geometry/util/normalize_attribute.js";
23
- import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
24
- import { StandardShadeMaterial } from "../../material/StandardShadeMaterial.js";
25
- import { TransparencyMode } from "../../material/TransparencyMode.js";
26
- import { Mesh } from "../../scene/Mesh.js";
27
- import { Node3D } from "../../scene/Node3D.js";
28
- import { usd_compose_transform } from "./usd_compose_transform.js";
29
- import { usd_expand_face_varying, usd_triangulate } from "./usd_triangulate.js";
30
-
31
-
32
- /**
33
- * @typedef {Object} UsdBuildOptions
34
- * @property {Map<string, Uint8Array>} [assetFiles] - Map of relative paths to file data (from USDZ)
35
- * @property {import("./UsdExtensionRegistry.js").UsdExtensionRegistry} [extensions] - Extension registry consulted per prim
36
- */
37
-
38
-
39
- /**
40
- * Build engine Node3D trees from the parsed specsByPath.
41
- *
42
- * Stage metadata (upAxis, metersPerUnit) is consumed here and baked
43
- * into a root correction transform, so the consumer receives a Y-up,
44
- * meters-scale scene.
45
- *
46
- * @param {Object.<string, { specType: number, fields: Object }>} specs_by_path
47
- * @param {UsdBuildOptions} [options]
48
- * @returns {Node3D[]} Root-level nodes
49
- */
50
- export function usd_build_scene(specs_by_path, options = {}) {
51
-
52
- const root_spec = specs_by_path["/"];
53
- const root_fields = root_spec ? root_spec.fields : {};
54
-
55
- // --- Stage metadata ---
56
- // @see https://openusd.org/release/api/class_usd_geom_set_stage_up_axis.html
57
- const up_axis = root_fields.upAxis || "Y";
58
- // @see https://openusd.org/release/api/class_usd_geom_linear_units.html
59
- const meters_per_unit = root_fields.metersPerUnit ?? 1.0;
60
-
61
- // Build a root correction matrix that converts the source coordinate
62
- // system to the engine's convention (Y-up, meters).
63
- const correction = mat4.create();
64
-
65
- if (up_axis === "Z") {
66
- // Z-up Y-up: rotate -90° around X
67
- // @see https://openusd.org/release/api/group___usd_geom_up_axis__group.html
68
- mat4.rotateX(correction, correction, -Math.PI / 2);
69
- }
70
-
71
- if (meters_per_unit !== 1.0) {
72
- // NOTE: float64 metersPerUnit → float32 scale factor.
73
- // Precision loss point for very small or very large unit ratios.
74
- const s = meters_per_unit;
75
- mat4.scale(correction, correction, [s, s, s]);
76
- }
77
-
78
- // --- Resolve materials ---
79
- const materials = build_materials(specs_by_path);
80
-
81
- // Extension registry (if provided)
82
- const registry = options.extensions || null;
83
-
84
- // --- Build prim hierarchy ---
85
- const prim_children = root_fields.primChildren || [];
86
- const roots = [];
87
-
88
- // Check if correction is non-identity
89
- const has_correction = up_axis === "Z" || meters_per_unit !== 1.0;
90
-
91
- for (const child_name of prim_children) {
92
- const child_path = "/" + child_name;
93
- const node = build_prim(child_path, specs_by_path, materials, correction, options, registry);
94
-
95
- if (node !== null) {
96
- // Bake correction into root nodes' local transforms so that
97
- // updateMatrices() propagates it correctly to global transforms
98
- if (has_correction) {
99
- const corrected = mat4.create();
100
- mat4.multiply(corrected, correction, node.transform_local.matrix);
101
- node.transform_local.fromMatrix(corrected);
102
- }
103
-
104
- roots.push(node);
105
- }
106
- }
107
-
108
- // Propagate local transforms → global transforms and compute bounds
109
- for (const root of roots) {
110
- root.updateMatrices();
111
- }
112
-
113
- return roots;
114
- }
115
-
116
-
117
- /**
118
- * Recursively build a Node3D from a prim spec.
119
- *
120
- * @param {string} path
121
- * @param {Object} specs_by_path
122
- * @param {Map<string, StandardShadeMaterial>} materials
123
- * @param {mat4} parent_world_transform
124
- * @param {UsdBuildOptions} options
125
- * @param {import("./UsdExtensionRegistry.js").UsdExtensionRegistry|null} registry
126
- * @returns {Node3D|null}
127
- */
128
- function build_prim(path, specs_by_path, materials, parent_world_transform, options, registry) {
129
-
130
- const spec = specs_by_path[path];
131
-
132
- if (!spec || spec.specType !== 6) {
133
- return null;
134
- }
135
-
136
- const fields = spec.fields;
137
- const type_name = fields.typeName || "";
138
- const prim_name = path.split("/").pop();
139
-
140
- // --- Extension hook: let registered extensions handle custom prim types ---
141
- if (registry) {
142
- for (const ext of registry.values()) {
143
- if (ext.processPrim) {
144
- const result = ext.processPrim(path, fields, { specs_by_path, materials, options });
145
-
146
- if (result !== null && result !== undefined) {
147
- return result;
148
- }
149
- }
150
- }
151
- }
152
-
153
- // Compose local transform from xformOpOrder
154
- // @see https://openusd.org/release/api/class_usd_geom_xformable.html#details
155
- const local_transform = usd_compose_transform(fields, specs_by_path, path);
156
-
157
- // Compute world transform
158
- const world_transform = mat4.create();
159
- mat4.multiply(world_transform, parent_world_transform, local_transform);
160
-
161
- // Attempt to build a Mesh if this is a UsdGeomMesh
162
- // @see https://openusd.org/release/api/class_usd_geom_mesh.html
163
- if (type_name === "Mesh") {
164
- return build_mesh_node(path, prim_name, fields, specs_by_path, materials, local_transform, world_transform, options, registry);
165
- }
166
-
167
- // Warn on unrecognized prim types that carry data we silently ignore
168
- if (type_name !== "" && type_name !== "Xform" && type_name !== "Scope" && type_name !== "Material" && type_name !== "Shader") {
169
- console.warn(`[USD] Unhandled prim type "${type_name}" at ${path}, treating as group node`);
170
- }
171
-
172
- // For Xform, Scope, and other grouping types, create a Node3D container
173
- const node = new Node3D();
174
- node.name = prim_name;
175
- node.transform_local.fromMatrix(local_transform);
176
-
177
- // Recurse into children
178
- const children = fields.primChildren || [];
179
-
180
- for (const child_name of children) {
181
- const child_path = path + "/" + child_name;
182
- const child = build_prim(child_path, specs_by_path, materials, world_transform, options, registry);
183
-
184
- if (child !== null) {
185
- node.addChild(child);
186
- }
187
- }
188
-
189
- return node;
190
- }
191
-
192
-
193
- /**
194
- * Build a Mesh node from a UsdGeomMesh prim.
195
- *
196
- * @see https://openusd.org/release/api/class_usd_geom_mesh.html
197
- *
198
- * UsdGeomMesh topology is defined by:
199
- * - `faceVertexCounts`: int[] — number of vertices per face
200
- * - `faceVertexIndices`: int[] flattened vertex indices
201
- * - `points`: point3f[] — vertex positions
202
- *
203
- * Primvars (per-vertex/per-face-varying data):
204
- * - `primvars:st` / `primvars:st:indices`: texCoord2f[] — UV coordinates
205
- * - `normals`: normal3f[] — can be vertex or faceVarying interpolation
206
- *
207
- * @param {string} path
208
- * @param {string} name
209
- * @param {Object} fields
210
- * @param {Object} specs_by_path
211
- * @param {Map<string, StandardShadeMaterial>} materials
212
- * @param {mat4} local_transform
213
- * @param {mat4} world_transform
214
- * @param {UsdBuildOptions} options
215
- * @param {import("./UsdExtensionRegistry.js").UsdExtensionRegistry|null} registry
216
- * @returns {Mesh|Node3D}
217
- */
218
- function build_mesh_node(path, name, fields, specs_by_path, materials, local_transform, world_transform, options, registry) {
219
-
220
- // --- Read topology ---
221
- const face_vertex_counts = read_attr(specs_by_path, path, "faceVertexCounts");
222
- const face_vertex_indices = read_attr(specs_by_path, path, "faceVertexIndices");
223
- const points_raw = read_attr(specs_by_path, path, "points");
224
-
225
- if (!face_vertex_counts || !face_vertex_indices || !points_raw) {
226
- // Not enough data to build a mesh — return as empty node
227
- const node = new Node3D();
228
- node.name = name;
229
- node.transform_local.fromMatrix(local_transform);
230
- return node;
231
- }
232
-
233
- // Validate that vertex indices are within bounds
234
- const vertex_count = points_raw.length / 3;
235
- for (let i = 0; i < face_vertex_indices.length; i++) {
236
- if (face_vertex_indices[i] >= vertex_count || face_vertex_indices[i] < 0) {
237
- console.warn(
238
- `[USD] faceVertexIndices[${i}] = ${face_vertex_indices[i]} is out of bounds ` +
239
- `(vertex count: ${vertex_count}) at ${path}`
240
- );
241
- break; // Only warn once per mesh
242
- }
243
- }
244
-
245
- // points may be float64 from USDA; downcast to float32
246
- // NOTE: Precision loss point — positions far from origin lose sub-mm precision
247
- const points = ensure_float32(points_raw);
248
-
249
- // --- Triangulate ---
250
- // @see https://openusd.org/release/api/class_usd_geom_mesh.html#details
251
- // USD meshes can have arbitrary polygons; we fan-triangulate them.
252
- const { indices, face_map } = usd_triangulate(face_vertex_counts, face_vertex_indices);
253
-
254
- // --- Gather per-vertex attributes ---
255
- // Any faceVarying primvar forces flat (de-indexed) topology; the flag is
256
- // tracked explicitly so every per-point attribute is re-expanded through
257
- // the triangulated indices, regardless of attribute order.
258
- let deindexed = false;
259
-
260
- // Normals
261
- // @see https://openusd.org/release/glossary.html#usdglossary-interpolation
262
- let normal_data = null;
263
- let normal_is_per_point = false;
264
-
265
- const normals_raw = read_attr(specs_by_path, path, "normals");
266
-
267
- if (normals_raw) {
268
- const normals = ensure_float32(normals_raw);
269
- const normals_interp = read_attr_interpolation(specs_by_path, path, "normals");
270
-
271
- if (normals_interp === "faceVarying") {
272
- // faceVarying: one value per face-vertex, re-index after triangulation
273
- normal_data = usd_expand_face_varying(face_vertex_counts, normals, 3);
274
- deindexed = true;
275
- } else {
276
- // vertex interpolation: one normal per point
277
- normal_data = normals;
278
- normal_is_per_point = true;
279
- }
280
- }
281
-
282
- // UVs (primvars:st)
283
- // @see https://openusd.org/release/api/class_usd_geom_primvars_a_p_i.html
284
- let uv_data = null;
285
- let uv_is_per_point = false;
286
-
287
- const st_raw = read_attr(specs_by_path, path, "primvars:st");
288
-
289
- if (st_raw) {
290
- let st = ensure_float32(st_raw);
291
- const st_indices = read_attr(specs_by_path, path, "primvars:st:indices");
292
- const st_interp = read_attr_interpolation(specs_by_path, path, "primvars:st");
293
-
294
- if (st_indices) {
295
- // Indexed UVs — expand using the UV index array
296
- st = expand_by_indices(st, st_indices, 2);
297
- }
298
-
299
- if (st_interp === "faceVarying") {
300
- uv_data = usd_expand_face_varying(face_vertex_counts, st, 2);
301
- deindexed = true;
302
- } else {
303
- uv_data = st;
304
- uv_is_per_point = true;
305
- }
306
- }
307
-
308
- // --- Assemble geometry ---
309
- const geometry = new Geometry();
310
-
311
- if (deindexed) {
312
- // Flat topology: expand positions and every per-point attribute
313
- // through the triangulated indices so all attributes agree
314
- const position_data = expand_indexed_to_flat(indices, points, 3);
315
- geometry.addAttribute(normalize_attribute(Attribute.from(position_data, 3, StandardAttributes.Position)));
316
-
317
- if (normal_data !== null) {
318
- const flat_normals = normal_is_per_point
319
- ? expand_indexed_to_flat(indices, normal_data, 3)
320
- : normal_data;
321
-
322
- geometry.addAttribute(normalize_attribute(Attribute.from(flat_normals, 3, StandardAttributes.Normal)));
323
- }
324
-
325
- if (uv_data !== null) {
326
- const flat_uvs = uv_is_per_point
327
- ? expand_indexed_to_flat(indices, uv_data, 2)
328
- : uv_data;
329
-
330
- geometry.addAttribute(normalize_attribute(Attribute.from(flat_uvs, 2, StandardAttributes.TextureCoordinates0)));
331
- }
332
- } else {
333
- // Indexed topology: all attributes are per-point
334
- geometry.addAttribute(normalize_attribute(Attribute.from(points, 3, StandardAttributes.Position)));
335
- geometry.index = Attribute.from(indices, 1, "index");
336
-
337
- if (normal_data !== null) {
338
- geometry.addAttribute(normalize_attribute(Attribute.from(normal_data, 3, StandardAttributes.Normal)));
339
- }
340
-
341
- if (uv_data !== null) {
342
- geometry.addAttribute(normalize_attribute(Attribute.from(uv_data, 2, StandardAttributes.TextureCoordinates0)));
343
- }
344
- }
345
-
346
- // --- Resolve material binding ---
347
- // @see https://openusd.org/release/api/class_usd_shade_material_binding_a_p_i.html
348
- const binding_path = path + ".material:binding";
349
- const binding_spec = specs_by_path[binding_path];
350
- let material = new StandardShadeMaterial();
351
-
352
- if (binding_spec && binding_spec.fields.targetPaths) {
353
- const mat_path = binding_spec.fields.targetPaths[0];
354
-
355
- if (materials.has(mat_path)) {
356
- material = materials.get(mat_path);
357
- } else {
358
- console.warn(`[USD] Material binding at ${path} references "${mat_path}" which was not found`);
359
- }
360
- }
361
-
362
- // Handle doubleSided
363
- // @see https://openusd.org/release/api/class_usd_geom_mesh.html
364
- // doubleSided is a per-gprim flag; the bound material is shared between
365
- // meshes and must not be mutated — clone it for this mesh instead
366
- const double_sided = read_attr(specs_by_path, path, "doubleSided");
367
- if (double_sided === true && material.draw_side !== ShadeDrawSide.Double) {
368
- material = material.clone();
369
- material.draw_side = ShadeDrawSide.Double;
370
- }
371
-
372
- // --- Build engine Mesh ---
373
- const meshlet_geo = meshlet_geometry_build_from_geometry(geometry);
374
-
375
- const mesh = new Mesh();
376
- mesh.name = name;
377
- mesh.geometry = meshlet_geo;
378
- mesh.material = material;
379
- mesh.transform_local.fromMatrix(local_transform);
380
-
381
- // Recurse into children (mesh prims can have child prims)
382
- const children = fields.primChildren || [];
383
-
384
- if (children.length > 0) {
385
- for (const child_name of children) {
386
- const child_path = path + "/" + child_name;
387
- const child = build_prim(child_path, specs_by_path, materials, world_transform, options, registry);
388
-
389
- if (child !== null) {
390
- mesh.addChild(child);
391
- }
392
- }
393
- }
394
-
395
- return mesh;
396
- }
397
-
398
-
399
- // =============================================================================
400
- // Material Building
401
- // =============================================================================
402
-
403
- /**
404
- * Build materials from UsdPreviewSurface shader prims.
405
- *
406
- * @see https://openusd.org/release/spec_usdpreviewsurface.html — UsdPreviewSurface specification
407
- *
408
- * @param {Object} specs_by_path
409
- * @returns {Map<string, StandardShadeMaterial>}
410
- */
411
- function build_materials(specs_by_path) {
412
-
413
- /** @type {Map<string, StandardShadeMaterial>} */
414
- const result = new Map();
415
-
416
- for (const path in specs_by_path) {
417
- const spec = specs_by_path[path];
418
-
419
- if (spec.specType !== 6) continue;
420
-
421
- const type_name = spec.fields.typeName;
422
-
423
- if (type_name !== "Material") continue;
424
-
425
- const material = build_material(path, specs_by_path);
426
- result.set(path, material);
427
- }
428
-
429
- return result;
430
- }
431
-
432
-
433
- /**
434
- * Build a single StandardShadeMaterial from a UsdShadeMaterial prim.
435
- *
436
- * Walks the material's shader network to find UsdPreviewSurface inputs.
437
- *
438
- * @see https://openusd.org/release/spec_usdpreviewsurface.html
439
- *
440
- * @param {string} mat_path
441
- * @param {Object} specs_by_path
442
- * @returns {StandardShadeMaterial}
443
- */
444
- function build_material(mat_path, specs_by_path) {
445
-
446
- const material = new StandardShadeMaterial();
447
- material.name = mat_path.split("/").pop();
448
-
449
- // Find the UsdPreviewSurface shader child
450
- const mat_spec = specs_by_path[mat_path];
451
- const children = mat_spec.fields.primChildren || [];
452
-
453
- for (const child_name of children) {
454
- const shader_path = mat_path + "/" + child_name;
455
- const shader_spec = specs_by_path[shader_path];
456
-
457
- if (!shader_spec || shader_spec.specType !== 6) continue;
458
- if (shader_spec.fields.typeName !== "Shader") continue;
459
-
460
- // Check info:id for UsdPreviewSurface
461
- const info_id = read_attr(specs_by_path, shader_path, "info:id");
462
-
463
- if (info_id !== "UsdPreviewSurface") continue;
464
-
465
- // --- Map UsdPreviewSurface inputs to engine material ---
466
- // @see https://openusd.org/release/spec_usdpreviewsurface.html#inputs
467
-
468
- // Diffuse color
469
- const diffuse = read_attr(specs_by_path, shader_path, "inputs:diffuseColor");
470
- if (diffuse && Array.isArray(diffuse)) {
471
- material.diffuse_color.setRGB(diffuse[0], diffuse[1], diffuse[2]);
472
- }
473
-
474
- // Metallic
475
- const metallic = read_attr(specs_by_path, shader_path, "inputs:metallic");
476
- if (typeof metallic === "number") {
477
- material.metallic_factor = clamp01(metallic);
478
- }
479
-
480
- // Roughness
481
- const roughness = read_attr(specs_by_path, shader_path, "inputs:roughness");
482
- if (typeof roughness === "number") {
483
- material.roughness_factor = clamp01(roughness);
484
- }
485
-
486
- // Opacity
487
- const opacity = read_attr(specs_by_path, shader_path, "inputs:opacity");
488
- if (typeof opacity === "number" && opacity < 1.0) {
489
- material.diffuse_color.a = clamp01(opacity);
490
- material.transparency_mode = TransparencyMode.Transparent;
491
- }
492
-
493
- // Emissive color
494
- const emissive = read_attr(specs_by_path, shader_path, "inputs:emissiveColor");
495
- if (emissive && Array.isArray(emissive)) {
496
- const intensity = Math.max(emissive[0], emissive[1], emissive[2]);
497
- if (intensity > 0) {
498
- material.emissive_factor.setRGB(emissive[0], emissive[1], emissive[2]);
499
- }
500
- }
501
-
502
- break; // Only use the first UsdPreviewSurface
503
- }
504
-
505
- return material;
506
- }
507
-
508
-
509
- // =============================================================================
510
- // Helpers
511
- // =============================================================================
512
-
513
- /**
514
- * Read an attribute's default value from specsByPath.
515
- *
516
- * @param {Object} specs_by_path
517
- * @param {string} prim_path
518
- * @param {string} attr_name
519
- * @returns {*}
520
- */
521
- function read_attr(specs_by_path, prim_path, attr_name) {
522
-
523
- const spec = specs_by_path[prim_path + "." + attr_name];
524
-
525
- if (!spec || !spec.fields) return undefined;
526
-
527
- // USD value resolution: timeSamples win over default when both are authored
528
- // @see https://openusd.org/release/glossary.html#usdglossary-valueresolution
529
- if (spec.fields.timeSamples && spec.fields.timeSamples.values.length > 0) {
530
- return spec.fields.timeSamples.values[0];
531
- }
532
-
533
- if (spec.fields.default !== undefined) {
534
- return spec.fields.default;
535
- }
536
-
537
- return undefined;
538
- }
539
-
540
-
541
- /**
542
- * Read interpolation metadata for an attribute.
543
- *
544
- * @see https://openusd.org/release/glossary.html#usdglossary-interpolation
545
- *
546
- * @param {Object} specs_by_path
547
- * @param {string} prim_path
548
- * @param {string} attr_name
549
- * @returns {string} "vertex" | "faceVarying" | "uniform" | "constant"
550
- */
551
- function read_attr_interpolation(specs_by_path, prim_path, attr_name) {
552
-
553
- const spec = specs_by_path[prim_path + "." + attr_name];
554
-
555
- if (spec && spec.fields && spec.fields.interpolation) {
556
- return spec.fields.interpolation;
557
- }
558
-
559
- // Default interpolation for most geometry attributes
560
- return "vertex";
561
- }
562
-
563
-
564
- /**
565
- * Ensure data is Float32Array. Downcasts Float64Array if needed.
566
- *
567
- * NOTE: Precision loss point — float64 → float32 conversion.
568
- *
569
- * @param {number[]|Float32Array|Float64Array} data
570
- * @returns {Float32Array}
571
- */
572
- function ensure_float32(data) {
573
-
574
- if (data instanceof Float32Array) {
575
- return data;
576
- }
577
-
578
- return new Float32Array(data);
579
- }
580
-
581
-
582
- /**
583
- * Expand indexed data using an index array.
584
- *
585
- * @param {Float32Array} data - Source data (item_size per element)
586
- * @param {number[]|Int32Array} index_array - Index into data
587
- * @param {number} item_size - Components per element
588
- * @returns {Float32Array}
589
- */
590
- function expand_by_indices(data, index_array, item_size) {
591
-
592
- const result = new Float32Array(index_array.length * item_size);
593
-
594
- for (let i = 0; i < index_array.length; i++) {
595
- const src = index_array[i] * item_size;
596
-
597
- for (let c = 0; c < item_size; c++) {
598
- result[i * item_size + c] = data[src + c];
599
- }
600
- }
601
-
602
- return result;
603
- }
604
-
605
-
606
- /**
607
- * Expand indexed vertex data to flat (un-indexed) arrays.
608
- *
609
- * @param {Uint32Array} indices
610
- * @param {Float32Array} positions - Flat positions (3 per vertex)
611
- * @param {number} item_size
612
- * @returns {Float32Array}
613
- */
614
- function expand_indexed_to_flat(indices, positions, item_size) {
615
-
616
- const result = new Float32Array(indices.length * item_size);
617
-
618
- for (let i = 0; i < indices.length; i++) {
619
- const src = indices[i] * item_size;
620
-
621
- for (let c = 0; c < item_size; c++) {
622
- result[i * item_size + c] = positions[src + c];
623
- }
624
- }
625
-
626
- return result;
627
- }
628
-
629
-
630
- /**
631
- * Replace geometry positions with expanded (un-indexed) data and
632
- * optionally set normals.
633
- *
634
- * @param {Geometry} geometry
635
- * @param {Float32Array} expanded_positions
636
- * @param {Float32Array|null} expanded_normals
637
- */
638
- function replace_geometry_positions(geometry, expanded_positions, expanded_normals) {
639
-
640
- // Remove index and replace positions
641
- geometry.index = null;
642
-
643
- const pos_attr = Attribute.from(expanded_positions, 3, StandardAttributes.Position);
644
- geometry.removeAttribute(StandardAttributes.Position);
645
- geometry.addAttribute(normalize_attribute(pos_attr));
646
-
647
- if (expanded_normals) {
648
- const normal_attr = Attribute.from(expanded_normals, 3, StandardAttributes.Normal);
649
- geometry.removeAttribute(StandardAttributes.Normal);
650
- geometry.addAttribute(normalize_attribute(normal_attr));
651
- }
652
- }
1
+ /**
2
+ * Converts the unified `specsByPath` intermediate representation into
3
+ * the engine's scene graph (Node3D, Mesh, StandardShadeMaterial).
4
+ *
5
+ * This module is format-agnostic — it consumes the same specsByPath
6
+ * dictionary regardless of whether the source was USDA, USDC, or USDZ.
7
+ *
8
+ * @see https://openusd.org/release/glossary.html#usdglossary-prim — Prim concept
9
+ * @see https://openusd.org/release/glossary.html#usdglossary-attribute — Attribute concept
10
+ * @see https://openusd.org/release/api/class_usd_geom_mesh.html — UsdGeomMesh schema
11
+ * @see https://openusd.org/release/api/class_usd_preview_surface.html — UsdPreviewSurface
12
+ *
13
+ * @module usd_build_scene
14
+ */
15
+
16
+ import { clamp01 } from "../../../../core/math/clamp01.js";
17
+ import { m4_allocate } from "../../../../core/geom/3d/mat4/m4_allocate.js";
18
+ import { m4_make_rotation_x } from "../../../../core/geom/3d/mat4/m4_make_rotation_x.js";
19
+ import { m4_make_scale } from "../../../../core/geom/3d/mat4/m4_make_scale.js";
20
+ import { m4_multiply } from "../../../../core/geom/3d/mat4/m4_multiply.js";
21
+ import { Attribute } from "../../geometry/Attribute.js";
22
+ import { Geometry } from "../../geometry/Geometry.js";
23
+ import { meshlet_geometry_build_from_geometry } from "../../geometry/meshlet_geometry_build_from_geometry.js";
24
+ import { StandardAttributes } from "../../geometry/StandardAttributes.js";
25
+ import { normalize_attribute } from "../../geometry/util/normalize_attribute.js";
26
+ import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
27
+ import { StandardShadeMaterial } from "../../material/StandardShadeMaterial.js";
28
+ import { TransparencyMode } from "../../material/TransparencyMode.js";
29
+ import { Mesh } from "../../scene/Mesh.js";
30
+ import { Node3D } from "../../scene/Node3D.js";
31
+ import { usd_compose_transform } from "./usd_compose_transform.js";
32
+ import { usd_expand_face_varying, usd_triangulate } from "./usd_triangulate.js";
33
+
34
+
35
+ /**
36
+ * @typedef {Object} UsdBuildOptions
37
+ * @property {Map<string, Uint8Array>} [assetFiles] - Map of relative paths to file data (from USDZ)
38
+ * @property {import("./UsdExtensionRegistry.js").UsdExtensionRegistry} [extensions] - Extension registry consulted per prim
39
+ */
40
+
41
+
42
+ /**
43
+ * Build engine Node3D trees from the parsed specsByPath.
44
+ *
45
+ * Stage metadata (upAxis, metersPerUnit) is consumed here and baked
46
+ * into a root correction transform, so the consumer receives a Y-up,
47
+ * meters-scale scene.
48
+ *
49
+ * @param {Object.<string, { specType: number, fields: Object }>} specs_by_path
50
+ * @param {UsdBuildOptions} [options]
51
+ * @returns {Node3D[]} Root-level nodes
52
+ */
53
+ export function usd_build_scene(specs_by_path, options = {}) {
54
+
55
+ const root_spec = specs_by_path["/"];
56
+ const root_fields = root_spec ? root_spec.fields : {};
57
+
58
+ // --- Stage metadata ---
59
+ // @see https://openusd.org/release/api/class_usd_geom_set_stage_up_axis.html
60
+ const up_axis = root_fields.upAxis || "Y";
61
+ // @see https://openusd.org/release/api/class_usd_geom_linear_units.html
62
+ const meters_per_unit = root_fields.metersPerUnit ?? 1.0;
63
+
64
+ // Build a root correction matrix that converts the source coordinate
65
+ // system to the engine's convention (Y-up, meters).
66
+ const correction = m4_allocate();
67
+
68
+ if (up_axis === "Z") {
69
+ // Z-up → Y-up: rotate -90° around X
70
+ // @see https://openusd.org/release/api/group___usd_geom_up_axis__group.html
71
+ m4_make_rotation_x(correction, -Math.PI / 2);
72
+ }
73
+
74
+ if (meters_per_unit !== 1.0) {
75
+ // NOTE: float64 metersPerUnit → float32 scale factor.
76
+ // Precision loss point for very small or very large unit ratios.
77
+ const s = meters_per_unit;
78
+
79
+ const scale = m4_make_scale(m4_allocate(), [s, s, s]);
80
+
81
+ m4_multiply(correction, correction, scale);
82
+ }
83
+
84
+ // --- Resolve materials ---
85
+ const materials = build_materials(specs_by_path);
86
+
87
+ // Extension registry (if provided)
88
+ const registry = options.extensions || null;
89
+
90
+ // --- Build prim hierarchy ---
91
+ const prim_children = root_fields.primChildren || [];
92
+ const roots = [];
93
+
94
+ // Check if correction is non-identity
95
+ const has_correction = up_axis === "Z" || meters_per_unit !== 1.0;
96
+
97
+ for (const child_name of prim_children) {
98
+ const child_path = "/" + child_name;
99
+ const node = build_prim(child_path, specs_by_path, materials, correction, options, registry);
100
+
101
+ if (node !== null) {
102
+ // Bake correction into root nodes' local transforms so that
103
+ // updateMatrices() propagates it correctly to global transforms
104
+ if (has_correction) {
105
+ const corrected = m4_allocate();
106
+ m4_multiply(corrected, correction, node.transform_local.matrix);
107
+ node.transform_local.fromMatrix(corrected);
108
+ }
109
+
110
+ roots.push(node);
111
+ }
112
+ }
113
+
114
+ // Propagate local transforms → global transforms and compute bounds
115
+ for (const root of roots) {
116
+ root.updateMatrices();
117
+ }
118
+
119
+ return roots;
120
+ }
121
+
122
+
123
+ /**
124
+ * Recursively build a Node3D from a prim spec.
125
+ *
126
+ * @param {string} path
127
+ * @param {Object} specs_by_path
128
+ * @param {Map<string, StandardShadeMaterial>} materials
129
+ * @param {mat4} parent_world_transform
130
+ * @param {UsdBuildOptions} options
131
+ * @param {import("./UsdExtensionRegistry.js").UsdExtensionRegistry|null} registry
132
+ * @returns {Node3D|null}
133
+ */
134
+ function build_prim(path, specs_by_path, materials, parent_world_transform, options, registry) {
135
+
136
+ const spec = specs_by_path[path];
137
+
138
+ if (!spec || spec.specType !== 6) {
139
+ return null;
140
+ }
141
+
142
+ const fields = spec.fields;
143
+ const type_name = fields.typeName || "";
144
+ const prim_name = path.split("/").pop();
145
+
146
+ // --- Extension hook: let registered extensions handle custom prim types ---
147
+ if (registry) {
148
+ for (const ext of registry.values()) {
149
+ if (ext.processPrim) {
150
+ const result = ext.processPrim(path, fields, { specs_by_path, materials, options });
151
+
152
+ if (result !== null && result !== undefined) {
153
+ return result;
154
+ }
155
+ }
156
+ }
157
+ }
158
+
159
+ // Compose local transform from xformOpOrder
160
+ // @see https://openusd.org/release/api/class_usd_geom_xformable.html#details
161
+ const local_transform = usd_compose_transform(fields, specs_by_path, path);
162
+
163
+ // Compute world transform
164
+ const world_transform = m4_allocate();
165
+ m4_multiply(world_transform, parent_world_transform, local_transform);
166
+
167
+ // Attempt to build a Mesh if this is a UsdGeomMesh
168
+ // @see https://openusd.org/release/api/class_usd_geom_mesh.html
169
+ if (type_name === "Mesh") {
170
+ return build_mesh_node(path, prim_name, fields, specs_by_path, materials, local_transform, world_transform, options, registry);
171
+ }
172
+
173
+ // Warn on unrecognized prim types that carry data we silently ignore
174
+ if (type_name !== "" && type_name !== "Xform" && type_name !== "Scope" && type_name !== "Material" && type_name !== "Shader") {
175
+ console.warn(`[USD] Unhandled prim type "${type_name}" at ${path}, treating as group node`);
176
+ }
177
+
178
+ // For Xform, Scope, and other grouping types, create a Node3D container
179
+ const node = new Node3D();
180
+ node.name = prim_name;
181
+ node.transform_local.fromMatrix(local_transform);
182
+
183
+ // Recurse into children
184
+ const children = fields.primChildren || [];
185
+
186
+ for (const child_name of children) {
187
+ const child_path = path + "/" + child_name;
188
+ const child = build_prim(child_path, specs_by_path, materials, world_transform, options, registry);
189
+
190
+ if (child !== null) {
191
+ node.addChild(child);
192
+ }
193
+ }
194
+
195
+ return node;
196
+ }
197
+
198
+
199
+ /**
200
+ * Build a Mesh node from a UsdGeomMesh prim.
201
+ *
202
+ * @see https://openusd.org/release/api/class_usd_geom_mesh.html
203
+ *
204
+ * UsdGeomMesh topology is defined by:
205
+ * - `faceVertexCounts`: int[] — number of vertices per face
206
+ * - `faceVertexIndices`: int[] — flattened vertex indices
207
+ * - `points`: point3f[] — vertex positions
208
+ *
209
+ * Primvars (per-vertex/per-face-varying data):
210
+ * - `primvars:st` / `primvars:st:indices`: texCoord2f[] — UV coordinates
211
+ * - `normals`: normal3f[] — can be vertex or faceVarying interpolation
212
+ *
213
+ * @param {string} path
214
+ * @param {string} name
215
+ * @param {Object} fields
216
+ * @param {Object} specs_by_path
217
+ * @param {Map<string, StandardShadeMaterial>} materials
218
+ * @param {mat4} local_transform
219
+ * @param {mat4} world_transform
220
+ * @param {UsdBuildOptions} options
221
+ * @param {import("./UsdExtensionRegistry.js").UsdExtensionRegistry|null} registry
222
+ * @returns {Mesh|Node3D}
223
+ */
224
+ function build_mesh_node(path, name, fields, specs_by_path, materials, local_transform, world_transform, options, registry) {
225
+
226
+ // --- Read topology ---
227
+ const face_vertex_counts = read_attr(specs_by_path, path, "faceVertexCounts");
228
+ const face_vertex_indices = read_attr(specs_by_path, path, "faceVertexIndices");
229
+ const points_raw = read_attr(specs_by_path, path, "points");
230
+
231
+ if (!face_vertex_counts || !face_vertex_indices || !points_raw) {
232
+ // Not enough data to build a mesh — return as empty node
233
+ const node = new Node3D();
234
+ node.name = name;
235
+ node.transform_local.fromMatrix(local_transform);
236
+ return node;
237
+ }
238
+
239
+ // Validate that vertex indices are within bounds
240
+ const vertex_count = points_raw.length / 3;
241
+ for (let i = 0; i < face_vertex_indices.length; i++) {
242
+ if (face_vertex_indices[i] >= vertex_count || face_vertex_indices[i] < 0) {
243
+ console.warn(
244
+ `[USD] faceVertexIndices[${i}] = ${face_vertex_indices[i]} is out of bounds ` +
245
+ `(vertex count: ${vertex_count}) at ${path}`
246
+ );
247
+ break; // Only warn once per mesh
248
+ }
249
+ }
250
+
251
+ // points may be float64 from USDA; downcast to float32
252
+ // NOTE: Precision loss point positions far from origin lose sub-mm precision
253
+ const points = ensure_float32(points_raw);
254
+
255
+ // --- Triangulate ---
256
+ // @see https://openusd.org/release/api/class_usd_geom_mesh.html#details
257
+ // USD meshes can have arbitrary polygons; we fan-triangulate them.
258
+ const { indices, face_map } = usd_triangulate(face_vertex_counts, face_vertex_indices);
259
+
260
+ // --- Gather per-vertex attributes ---
261
+ // Any faceVarying primvar forces flat (de-indexed) topology; the flag is
262
+ // tracked explicitly so every per-point attribute is re-expanded through
263
+ // the triangulated indices, regardless of attribute order.
264
+ let deindexed = false;
265
+
266
+ // Normals
267
+ // @see https://openusd.org/release/glossary.html#usdglossary-interpolation
268
+ let normal_data = null;
269
+ let normal_is_per_point = false;
270
+
271
+ const normals_raw = read_attr(specs_by_path, path, "normals");
272
+
273
+ if (normals_raw) {
274
+ const normals = ensure_float32(normals_raw);
275
+ const normals_interp = read_attr_interpolation(specs_by_path, path, "normals");
276
+
277
+ if (normals_interp === "faceVarying") {
278
+ // faceVarying: one value per face-vertex, re-index after triangulation
279
+ normal_data = usd_expand_face_varying(face_vertex_counts, normals, 3);
280
+ deindexed = true;
281
+ } else {
282
+ // vertex interpolation: one normal per point
283
+ normal_data = normals;
284
+ normal_is_per_point = true;
285
+ }
286
+ }
287
+
288
+ // UVs (primvars:st)
289
+ // @see https://openusd.org/release/api/class_usd_geom_primvars_a_p_i.html
290
+ let uv_data = null;
291
+ let uv_is_per_point = false;
292
+
293
+ const st_raw = read_attr(specs_by_path, path, "primvars:st");
294
+
295
+ if (st_raw) {
296
+ let st = ensure_float32(st_raw);
297
+ const st_indices = read_attr(specs_by_path, path, "primvars:st:indices");
298
+ const st_interp = read_attr_interpolation(specs_by_path, path, "primvars:st");
299
+
300
+ if (st_indices) {
301
+ // Indexed UVs — expand using the UV index array
302
+ st = expand_by_indices(st, st_indices, 2);
303
+ }
304
+
305
+ if (st_interp === "faceVarying") {
306
+ uv_data = usd_expand_face_varying(face_vertex_counts, st, 2);
307
+ deindexed = true;
308
+ } else {
309
+ uv_data = st;
310
+ uv_is_per_point = true;
311
+ }
312
+ }
313
+
314
+ // --- Assemble geometry ---
315
+ const geometry = new Geometry();
316
+
317
+ if (deindexed) {
318
+ // Flat topology: expand positions and every per-point attribute
319
+ // through the triangulated indices so all attributes agree
320
+ const position_data = expand_indexed_to_flat(indices, points, 3);
321
+ geometry.addAttribute(normalize_attribute(Attribute.from(position_data, 3, StandardAttributes.Position)));
322
+
323
+ if (normal_data !== null) {
324
+ const flat_normals = normal_is_per_point
325
+ ? expand_indexed_to_flat(indices, normal_data, 3)
326
+ : normal_data;
327
+
328
+ geometry.addAttribute(normalize_attribute(Attribute.from(flat_normals, 3, StandardAttributes.Normal)));
329
+ }
330
+
331
+ if (uv_data !== null) {
332
+ const flat_uvs = uv_is_per_point
333
+ ? expand_indexed_to_flat(indices, uv_data, 2)
334
+ : uv_data;
335
+
336
+ geometry.addAttribute(normalize_attribute(Attribute.from(flat_uvs, 2, StandardAttributes.TextureCoordinates0)));
337
+ }
338
+ } else {
339
+ // Indexed topology: all attributes are per-point
340
+ geometry.addAttribute(normalize_attribute(Attribute.from(points, 3, StandardAttributes.Position)));
341
+ geometry.index = Attribute.from(indices, 1, "index");
342
+
343
+ if (normal_data !== null) {
344
+ geometry.addAttribute(normalize_attribute(Attribute.from(normal_data, 3, StandardAttributes.Normal)));
345
+ }
346
+
347
+ if (uv_data !== null) {
348
+ geometry.addAttribute(normalize_attribute(Attribute.from(uv_data, 2, StandardAttributes.TextureCoordinates0)));
349
+ }
350
+ }
351
+
352
+ // --- Resolve material binding ---
353
+ // @see https://openusd.org/release/api/class_usd_shade_material_binding_a_p_i.html
354
+ const binding_path = path + ".material:binding";
355
+ const binding_spec = specs_by_path[binding_path];
356
+ let material = new StandardShadeMaterial();
357
+
358
+ if (binding_spec && binding_spec.fields.targetPaths) {
359
+ const mat_path = binding_spec.fields.targetPaths[0];
360
+
361
+ if (materials.has(mat_path)) {
362
+ material = materials.get(mat_path);
363
+ } else {
364
+ console.warn(`[USD] Material binding at ${path} references "${mat_path}" which was not found`);
365
+ }
366
+ }
367
+
368
+ // Handle doubleSided
369
+ // @see https://openusd.org/release/api/class_usd_geom_mesh.html
370
+ // doubleSided is a per-gprim flag; the bound material is shared between
371
+ // meshes and must not be mutated — clone it for this mesh instead
372
+ const double_sided = read_attr(specs_by_path, path, "doubleSided");
373
+ if (double_sided === true && material.draw_side !== ShadeDrawSide.Double) {
374
+ material = material.clone();
375
+ material.draw_side = ShadeDrawSide.Double;
376
+ }
377
+
378
+ // --- Build engine Mesh ---
379
+ const meshlet_geo = meshlet_geometry_build_from_geometry(geometry);
380
+
381
+ const mesh = new Mesh();
382
+ mesh.name = name;
383
+ mesh.geometry = meshlet_geo;
384
+ mesh.material = material;
385
+ mesh.transform_local.fromMatrix(local_transform);
386
+
387
+ // Recurse into children (mesh prims can have child prims)
388
+ const children = fields.primChildren || [];
389
+
390
+ if (children.length > 0) {
391
+ for (const child_name of children) {
392
+ const child_path = path + "/" + child_name;
393
+ const child = build_prim(child_path, specs_by_path, materials, world_transform, options, registry);
394
+
395
+ if (child !== null) {
396
+ mesh.addChild(child);
397
+ }
398
+ }
399
+ }
400
+
401
+ return mesh;
402
+ }
403
+
404
+
405
+ // =============================================================================
406
+ // Material Building
407
+ // =============================================================================
408
+
409
+ /**
410
+ * Build materials from UsdPreviewSurface shader prims.
411
+ *
412
+ * @see https://openusd.org/release/spec_usdpreviewsurface.html — UsdPreviewSurface specification
413
+ *
414
+ * @param {Object} specs_by_path
415
+ * @returns {Map<string, StandardShadeMaterial>}
416
+ */
417
+ function build_materials(specs_by_path) {
418
+
419
+ /** @type {Map<string, StandardShadeMaterial>} */
420
+ const result = new Map();
421
+
422
+ for (const path in specs_by_path) {
423
+ const spec = specs_by_path[path];
424
+
425
+ if (spec.specType !== 6) continue;
426
+
427
+ const type_name = spec.fields.typeName;
428
+
429
+ if (type_name !== "Material") continue;
430
+
431
+ const material = build_material(path, specs_by_path);
432
+ result.set(path, material);
433
+ }
434
+
435
+ return result;
436
+ }
437
+
438
+
439
+ /**
440
+ * Build a single StandardShadeMaterial from a UsdShadeMaterial prim.
441
+ *
442
+ * Walks the material's shader network to find UsdPreviewSurface inputs.
443
+ *
444
+ * @see https://openusd.org/release/spec_usdpreviewsurface.html
445
+ *
446
+ * @param {string} mat_path
447
+ * @param {Object} specs_by_path
448
+ * @returns {StandardShadeMaterial}
449
+ */
450
+ function build_material(mat_path, specs_by_path) {
451
+
452
+ const material = new StandardShadeMaterial();
453
+ material.name = mat_path.split("/").pop();
454
+
455
+ // Find the UsdPreviewSurface shader child
456
+ const mat_spec = specs_by_path[mat_path];
457
+ const children = mat_spec.fields.primChildren || [];
458
+
459
+ for (const child_name of children) {
460
+ const shader_path = mat_path + "/" + child_name;
461
+ const shader_spec = specs_by_path[shader_path];
462
+
463
+ if (!shader_spec || shader_spec.specType !== 6) continue;
464
+ if (shader_spec.fields.typeName !== "Shader") continue;
465
+
466
+ // Check info:id for UsdPreviewSurface
467
+ const info_id = read_attr(specs_by_path, shader_path, "info:id");
468
+
469
+ if (info_id !== "UsdPreviewSurface") continue;
470
+
471
+ // --- Map UsdPreviewSurface inputs to engine material ---
472
+ // @see https://openusd.org/release/spec_usdpreviewsurface.html#inputs
473
+
474
+ // Diffuse color
475
+ const diffuse = read_attr(specs_by_path, shader_path, "inputs:diffuseColor");
476
+ if (diffuse && Array.isArray(diffuse)) {
477
+ material.diffuse_color.setRGB(diffuse[0], diffuse[1], diffuse[2]);
478
+ }
479
+
480
+ // Metallic
481
+ const metallic = read_attr(specs_by_path, shader_path, "inputs:metallic");
482
+ if (typeof metallic === "number") {
483
+ material.metallic_factor = clamp01(metallic);
484
+ }
485
+
486
+ // Roughness
487
+ const roughness = read_attr(specs_by_path, shader_path, "inputs:roughness");
488
+ if (typeof roughness === "number") {
489
+ material.roughness_factor = clamp01(roughness);
490
+ }
491
+
492
+ // Opacity
493
+ const opacity = read_attr(specs_by_path, shader_path, "inputs:opacity");
494
+ if (typeof opacity === "number" && opacity < 1.0) {
495
+ material.diffuse_color.a = clamp01(opacity);
496
+ material.transparency_mode = TransparencyMode.Transparent;
497
+ }
498
+
499
+ // Emissive color
500
+ const emissive = read_attr(specs_by_path, shader_path, "inputs:emissiveColor");
501
+ if (emissive && Array.isArray(emissive)) {
502
+ const intensity = Math.max(emissive[0], emissive[1], emissive[2]);
503
+ if (intensity > 0) {
504
+ material.emissive_factor.setRGB(emissive[0], emissive[1], emissive[2]);
505
+ }
506
+ }
507
+
508
+ break; // Only use the first UsdPreviewSurface
509
+ }
510
+
511
+ return material;
512
+ }
513
+
514
+
515
+ // =============================================================================
516
+ // Helpers
517
+ // =============================================================================
518
+
519
+ /**
520
+ * Read an attribute's default value from specsByPath.
521
+ *
522
+ * @param {Object} specs_by_path
523
+ * @param {string} prim_path
524
+ * @param {string} attr_name
525
+ * @returns {*}
526
+ */
527
+ function read_attr(specs_by_path, prim_path, attr_name) {
528
+
529
+ const spec = specs_by_path[prim_path + "." + attr_name];
530
+
531
+ if (!spec || !spec.fields) return undefined;
532
+
533
+ // USD value resolution: timeSamples win over default when both are authored
534
+ // @see https://openusd.org/release/glossary.html#usdglossary-valueresolution
535
+ if (spec.fields.timeSamples && spec.fields.timeSamples.values.length > 0) {
536
+ return spec.fields.timeSamples.values[0];
537
+ }
538
+
539
+ if (spec.fields.default !== undefined) {
540
+ return spec.fields.default;
541
+ }
542
+
543
+ return undefined;
544
+ }
545
+
546
+
547
+ /**
548
+ * Read interpolation metadata for an attribute.
549
+ *
550
+ * @see https://openusd.org/release/glossary.html#usdglossary-interpolation
551
+ *
552
+ * @param {Object} specs_by_path
553
+ * @param {string} prim_path
554
+ * @param {string} attr_name
555
+ * @returns {string} "vertex" | "faceVarying" | "uniform" | "constant"
556
+ */
557
+ function read_attr_interpolation(specs_by_path, prim_path, attr_name) {
558
+
559
+ const spec = specs_by_path[prim_path + "." + attr_name];
560
+
561
+ if (spec && spec.fields && spec.fields.interpolation) {
562
+ return spec.fields.interpolation;
563
+ }
564
+
565
+ // Default interpolation for most geometry attributes
566
+ return "vertex";
567
+ }
568
+
569
+
570
+ /**
571
+ * Ensure data is Float32Array. Downcasts Float64Array if needed.
572
+ *
573
+ * NOTE: Precision loss point — float64 → float32 conversion.
574
+ *
575
+ * @param {number[]|Float32Array|Float64Array} data
576
+ * @returns {Float32Array}
577
+ */
578
+ function ensure_float32(data) {
579
+
580
+ if (data instanceof Float32Array) {
581
+ return data;
582
+ }
583
+
584
+ return new Float32Array(data);
585
+ }
586
+
587
+
588
+ /**
589
+ * Expand indexed data using an index array.
590
+ *
591
+ * @param {Float32Array} data - Source data (item_size per element)
592
+ * @param {number[]|Int32Array} index_array - Index into data
593
+ * @param {number} item_size - Components per element
594
+ * @returns {Float32Array}
595
+ */
596
+ function expand_by_indices(data, index_array, item_size) {
597
+
598
+ const result = new Float32Array(index_array.length * item_size);
599
+
600
+ for (let i = 0; i < index_array.length; i++) {
601
+ const src = index_array[i] * item_size;
602
+
603
+ for (let c = 0; c < item_size; c++) {
604
+ result[i * item_size + c] = data[src + c];
605
+ }
606
+ }
607
+
608
+ return result;
609
+ }
610
+
611
+
612
+ /**
613
+ * Expand indexed vertex data to flat (un-indexed) arrays.
614
+ *
615
+ * @param {Uint32Array} indices
616
+ * @param {Float32Array} positions - Flat positions (3 per vertex)
617
+ * @param {number} item_size
618
+ * @returns {Float32Array}
619
+ */
620
+ function expand_indexed_to_flat(indices, positions, item_size) {
621
+
622
+ const result = new Float32Array(indices.length * item_size);
623
+
624
+ for (let i = 0; i < indices.length; i++) {
625
+ const src = indices[i] * item_size;
626
+
627
+ for (let c = 0; c < item_size; c++) {
628
+ result[i * item_size + c] = positions[src + c];
629
+ }
630
+ }
631
+
632
+ return result;
633
+ }
634
+
635
+
636
+ /**
637
+ * Replace geometry positions with expanded (un-indexed) data and
638
+ * optionally set normals.
639
+ *
640
+ * @param {Geometry} geometry
641
+ * @param {Float32Array} expanded_positions
642
+ * @param {Float32Array|null} expanded_normals
643
+ */
644
+ function replace_geometry_positions(geometry, expanded_positions, expanded_normals) {
645
+
646
+ // Remove index and replace positions
647
+ geometry.index = null;
648
+
649
+ const pos_attr = Attribute.from(expanded_positions, 3, StandardAttributes.Position);
650
+ geometry.removeAttribute(StandardAttributes.Position);
651
+ geometry.addAttribute(normalize_attribute(pos_attr));
652
+
653
+ if (expanded_normals) {
654
+ const normal_attr = Attribute.from(expanded_normals, 3, StandardAttributes.Normal);
655
+ geometry.removeAttribute(StandardAttributes.Normal);
656
+ geometry.addAttribute(normalize_attribute(normal_attr));
657
+ }
658
+ }