@woosh/meep-engine 2.37.18 → 2.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/core/assert.js +1 -1
  2. package/core/binary/float2uint8.js +8 -0
  3. package/core/binary/uint82float.js +8 -0
  4. package/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +6 -4
  5. package/core/collection/array/array_get_index_in_range.js +16 -0
  6. package/core/collection/array/typed/isTypedArray.js +20 -0
  7. package/core/collection/array/typedArrayToDataType.js +1 -0
  8. package/{engine/navigation/grid → core/collection/heap}/BinaryHeap.js +6 -1
  9. package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.js +3 -2
  10. package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.spec.js +3 -3
  11. package/core/collection/heap/Uin32Heap.spec.js +59 -0
  12. package/core/collection/heap/Uint32Heap.js +385 -0
  13. package/core/collection/list/List.d.ts +1 -1
  14. package/core/collection/table/RowFirstTable.js +34 -0
  15. package/core/collection/table/RowFirstTable.spec.js +59 -1
  16. package/core/color/Color.js +83 -1
  17. package/core/color/YCbCr_to_rgb_uint24.js +3 -4
  18. package/core/color/hsv2rgb.js +4 -3
  19. package/core/color/linear_to_sRGB.js +4 -5
  20. package/core/color/rgb2hex.js +1 -1
  21. package/core/color/rgb2uint24.js +6 -4
  22. package/core/color/rgb_to_YCbCr_uint24.js +11 -13
  23. package/core/events/signal/Signal.d.ts +11 -9
  24. package/core/events/signal/Signal.spec.js +16 -0
  25. package/core/geom/2d/quad-tree/qt_collect_by_circle.js +67 -0
  26. package/core/geom/3d/topology/computeTopoMeshVertexDuplicates.js +9 -6
  27. package/core/geom/3d/topology/expandConnectivityByLocality.js +5 -5
  28. package/core/geom/3d/topology/query/query_edge_is_boundary.js +7 -0
  29. package/core/geom/3d/topology/query/query_edge_is_manifold.js +13 -0
  30. package/core/geom/3d/topology/query/query_edge_is_manifold_or_boundary.js +11 -0
  31. package/core/geom/3d/topology/query/query_edge_is_wire.js +13 -0
  32. package/core/geom/3d/topology/query/query_edge_other_vertex.js +20 -0
  33. package/core/geom/3d/topology/query/query_edge_share_vert.js +9 -0
  34. package/core/geom/3d/topology/query/query_face_get_other_edges.js +39 -0
  35. package/core/geom/3d/topology/query/query_face_next_vertex.js +19 -0
  36. package/core/geom/3d/topology/query/query_face_prev_vertex.js +18 -0
  37. package/core/geom/3d/topology/query/query_vertex_in_edge.js +14 -0
  38. package/core/geom/3d/topology/query/query_vertex_pair_share_face.js +24 -0
  39. package/core/geom/3d/topology/query/query_vertices_in_edge.js +19 -0
  40. package/core/geom/3d/topology/simplify/collapseEdge.spec.js +3 -5
  41. package/core/geom/3d/topology/simplify/collapse_all_degenerate_edges.js +8 -10
  42. package/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +12 -2
  43. package/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +277 -0
  44. package/core/geom/3d/topology/simplify/edge_collapse_quadratic.js +126 -0
  45. package/core/geom/3d/topology/simplify/prototypeMeshSimplification.js +502 -0
  46. package/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +37 -5
  47. package/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js +86 -1
  48. package/core/geom/3d/topology/simplify/simplifyTopoMesh.js +4 -4
  49. package/core/geom/3d/topology/simplify/simplifyTopoMesh2.js +119 -0
  50. package/core/geom/3d/topology/simplify/tm_edge_collapse_is_degenerate_flip.js +81 -0
  51. package/core/geom/3d/topology/{TopoEdge.js → struct/TopoEdge.js} +47 -20
  52. package/core/geom/3d/topology/{TopoEdge.spec.js → struct/TopoEdge.spec.js} +0 -0
  53. package/core/geom/3d/topology/{TopoMesh.js → struct/TopoMesh.js} +20 -41
  54. package/core/geom/3d/topology/{TopoTriangle.js → struct/TopoTriangle.js} +15 -25
  55. package/core/geom/3d/topology/{TopoVertex.js → struct/TopoVertex.js} +21 -4
  56. package/core/geom/3d/topology/{TopoVertex.spec.js → struct/TopoVertex.spec.js} +0 -0
  57. package/core/geom/3d/topology/tm_edge_kill.js +24 -0
  58. package/core/geom/3d/topology/tm_edge_splice.js +42 -0
  59. package/core/geom/3d/topology/tm_face_area.js +18 -0
  60. package/core/geom/3d/topology/tm_face_kill.js +12 -0
  61. package/core/geom/3d/topology/tm_face_normal.js +14 -0
  62. package/core/geom/3d/topology/tm_kill_only_edge.js +35 -0
  63. package/core/geom/3d/topology/tm_kill_only_face.js +12 -0
  64. package/core/geom/3d/topology/tm_kill_only_vert.js +14 -0
  65. package/core/geom/3d/topology/tm_vert_kill.js +19 -0
  66. package/core/geom/3d/topology/tm_vert_splice.js +64 -0
  67. package/core/geom/3d/topology/tm_vertex_compute_normal.js +42 -0
  68. package/core/geom/3d/topology/topoMeshToBufferGeometry.js +18 -4
  69. package/core/geom/3d/topology/weld_duplicate_vertices.js +63 -0
  70. package/core/geom/Quaternion.d.ts +21 -1
  71. package/core/geom/Quaternion.js +279 -200
  72. package/core/geom/Quaternion.spec.js +71 -2
  73. package/core/geom/Vector2.js +3 -3
  74. package/core/geom/Vector3.d.ts +2 -0
  75. package/core/geom/Vector3.js +31 -7
  76. package/core/geom/Vector3.schema.json +16 -0
  77. package/core/geom/Vector4.js +16 -0
  78. package/core/geom/packing/MaxRectangles.js +1 -1
  79. package/core/graph/cluster_mesh_metis.js +16 -0
  80. package/core/graph/coarsen_graph.js +1 -1
  81. package/core/graph/graph_k_means_cluster.js +1 -1
  82. package/core/json/JsonUtils.js +2 -20
  83. package/core/math/bell_membership_function.js +19 -0
  84. package/core/math/exp2.js +8 -0
  85. package/core/math/interval/NumericInterval.js +17 -0
  86. package/core/math/physics/brdf/brdf_burley.js +25 -0
  87. package/core/math/physics/bsdf/bsdf_schlick.js +22 -0
  88. package/core/math/physics/irradiance/interpolate_irradiance_linear.js +18 -0
  89. package/{engine/sound/ecs/emitter/attenuate/attenuateSoundLogarithmic.js → core/math/physics/irradiance/interpolate_irradiance_lograrithmic.js} +2 -2
  90. package/{engine/sound/ecs/emitter/attenuate/attenuateSoundSmith.js → core/math/physics/irradiance/interpolate_irradiance_smith.js} +1 -1
  91. package/core/math/random/seededRandom.js +2 -31
  92. package/core/math/random/seededRandom_Mulberry32.js +31 -0
  93. package/core/math/random/seededRandom_sine.js +33 -0
  94. package/core/model/ObservedEnum.js +8 -0
  95. package/editor/Editor.js +97 -1
  96. package/editor/actions/concrete/ModifyPatchSampler2DAction.js +118 -0
  97. package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +30 -0
  98. package/editor/actions/concrete/PatchTerrainHeightAction.js +13 -105
  99. package/editor/ecs/component/FieldDescriptor.js +34 -0
  100. package/editor/ecs/component/FieldValueAdapter.js +20 -0
  101. package/editor/ecs/component/TypeEditor.js +33 -0
  102. package/editor/ecs/component/TypeSchema.d.ts +38 -0
  103. package/editor/ecs/component/createFieldEditor.js +90 -0
  104. package/editor/ecs/component/createObjectEditor.js +266 -60
  105. package/editor/ecs/component/editors/ColorEditor.js +39 -0
  106. package/editor/ecs/component/editors/HTMLElementEditor.js +17 -0
  107. package/editor/ecs/component/editors/ImagePathEditor.js +50 -0
  108. package/editor/ecs/component/editors/NumericIntervalEditor.js +86 -0
  109. package/editor/ecs/component/editors/ObservedBooleanEditor.js +13 -0
  110. package/editor/ecs/component/editors/ObservedEnumEditor.js +32 -0
  111. package/editor/ecs/component/editors/ObservedIntegerEditor.js +43 -0
  112. package/editor/ecs/component/editors/ObservedStringEditor.js +51 -0
  113. package/editor/ecs/component/editors/Sampler2DEditor.js +107 -0
  114. package/editor/ecs/component/editors/collection/ListEditor.js +83 -0
  115. package/editor/ecs/component/editors/common/BitFlagsEditor.js +80 -0
  116. package/editor/ecs/component/editors/common/EnumEditor.js +41 -0
  117. package/editor/ecs/component/editors/common/makeV3_editor.js +85 -0
  118. package/editor/ecs/component/editors/common/noEditor.js +9 -0
  119. package/editor/ecs/component/editors/ecs/GridObstacleEditor.js +17 -0
  120. package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.js +16 -0
  121. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +44 -0
  122. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +17 -0
  123. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +58 -0
  124. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +54 -0
  125. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +21 -0
  126. package/editor/ecs/component/editors/ecs/Trail2DEditor.js +33 -0
  127. package/editor/ecs/component/editors/ecs/TransformEditor.js +23 -0
  128. package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.js +21 -0
  129. package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.js +89 -0
  130. package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.js +18 -0
  131. package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.js +22 -0
  132. package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.js +20 -0
  133. package/editor/ecs/component/editors/geom/QuaternionEditor.js +56 -0
  134. package/editor/ecs/component/editors/geom/Vector1Editor.js +57 -0
  135. package/editor/ecs/component/editors/geom/Vector2Editor.js +11 -0
  136. package/editor/ecs/component/editors/geom/Vector3Editor.js +13 -0
  137. package/editor/ecs/component/editors/geom/Vector4Editor.js +12 -0
  138. package/editor/ecs/component/editors/primitive/ArrayEditor.js +46 -0
  139. package/editor/ecs/component/editors/primitive/BooleanEditor.js +27 -0
  140. package/editor/ecs/component/editors/primitive/FunctionEditor.js +29 -0
  141. package/editor/ecs/component/editors/primitive/NumberEditor.js +60 -0
  142. package/editor/ecs/component/editors/primitive/ObjectEditor.js +12 -0
  143. package/editor/ecs/component/editors/primitive/StringEditor.js +31 -0
  144. package/editor/ecs/component/editors/three/BufferGeometryEditor.js +28 -0
  145. package/editor/ecs/component/editors/three/MaterialEditor.js +27 -0
  146. package/editor/ecs/component/editors/three/MeshEditor.js +35 -0
  147. package/editor/ecs/component/editors/three/TextureEditor.js +32 -0
  148. package/editor/ecs/component/findNearestRegisteredType.js +59 -0
  149. package/editor/ecs/component/prototypeObjectEditor.js +379 -0
  150. package/editor/tools/SelectionTool.js +1 -1
  151. package/editor/tools/paint/TerrainHeightPaintTool.js +88 -68
  152. package/editor/tools/paint/TerrainPaintTool.js +2 -1
  153. package/editor/tools/paint/TerrainTexturePaintTool.js +8 -73
  154. package/editor/view/EditorView.js +1 -1
  155. package/editor/view/ecs/ComponentControlView.js +2 -30
  156. package/editor/view/ecs/EntityEditor.js +61 -139
  157. package/editor/view/ecs/components/GridObstacleController.js +4 -4
  158. package/editor/view/ecs/components/TerrainController.js +1 -1
  159. package/editor/view/ecs/components/common/NumberController.js +19 -7
  160. package/editor/view/node-graph/NodeGraphView.js +2 -2
  161. package/editor/view/node-graph/NodeView.js +7 -9
  162. package/engine/animation/keyed2/AnimationTrack.js +1 -1
  163. package/engine/asset/AssetManager.d.ts +1 -1
  164. package/engine/asset/AssetManager.js +390 -388
  165. package/engine/asset/loaders/gltf/extensions/MSFT_texture_dds.js +14 -2
  166. package/engine/ecs/components/TagEditor.js +15 -0
  167. package/engine/ecs/fow/FogOfWarEditor.js +13 -0
  168. package/engine/ecs/parent/ParentEntitySystem.js +57 -0
  169. package/engine/ecs/terrain/ecs/OffsetScaleTransform2D.d.ts +6 -0
  170. package/engine/ecs/terrain/ecs/Terrain.js +44 -43
  171. package/engine/ecs/terrain/ecs/TerrainSystem.js +2 -2
  172. package/engine/ecs/terrain/ecs/layers/TerrainLayer.js +1 -1
  173. package/engine/ecs/terrain/ecs/splat/SplatMapping.js +26 -28
  174. package/engine/ecs/terrain/overlay/TerrainOverlay.js +71 -66
  175. package/engine/ecs/terrain/tiles/TerrainTileManager.js +23 -0
  176. package/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +1 -1
  177. package/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.js +13 -7
  178. package/engine/ecs/terrain/util/tensionOptimizeUV.js +1 -1
  179. package/engine/ecs/transform/Transform.d.ts +2 -0
  180. package/engine/ecs/transform/Transform.editor.schema.json +16 -0
  181. package/engine/ecs/transform/Transform.js +3 -0
  182. package/engine/graphics/ecs/highlight/HighlightEditor.js +17 -0
  183. package/engine/graphics/ecs/light/Light.js +0 -47
  184. package/engine/graphics/ecs/light/LightSerializationAdapter.js +50 -0
  185. package/engine/graphics/ecs/mesh/MeshEditor.js +28 -0
  186. package/engine/graphics/ecs/mesh-v2/DrawMode.js +2 -1
  187. package/engine/graphics/ecs/mesh-v2/aggregate/prototypeSGMesh.js +3 -3
  188. package/engine/graphics/ecs/mesh-v2/build_three_object.js +3 -1
  189. package/engine/graphics/ecs/mesh-v2/sg_compute_hierarchy_bounding_box_by_parent_entity.js +31 -0
  190. package/engine/graphics/ecs/mesh-v2/sg_hierarchy_compute_bounding_box_via_parent_entity.d.ts +4 -0
  191. package/engine/graphics/ecs/sprite/Sprite.js +11 -0
  192. package/engine/graphics/ecs/sprite/SpriteSystemPE.js +133 -0
  193. package/engine/graphics/ecs/sprite/prototypeSpriteSystem.js +1570 -0
  194. package/engine/graphics/micron/build/PatchRepresentation.js +7 -3
  195. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +18 -8
  196. package/engine/graphics/micron/build/clustering/build_clustering_2.js +1 -1
  197. package/engine/graphics/micron/build/clustering/build_leaf_patches.js +2 -2
  198. package/engine/graphics/micron/build/clustering/build_leaf_patches_metis.js +1 -1
  199. package/engine/graphics/micron/build/hierarchy/buildAbstractPatchHierarchy.js +21 -3
  200. package/engine/graphics/micron/build/hierarchy/merge_patches.js +96 -43
  201. package/engine/graphics/micron/build/hierarchy/qvdr_build_simplified_clusters.js +11 -5
  202. package/engine/graphics/micron/format/VirtualGeometry.js +46 -3
  203. package/engine/graphics/micron/format/micron_build_proxy_geometry.js +4 -2
  204. package/engine/graphics/micron/prototypeVirtualGeometry.js +47 -10
  205. package/engine/graphics/micron/render/instanced/shader/shader_rewrite_standard.js +17 -17
  206. package/engine/graphics/micron/render/refinement/get_geometry_patch_cut.js +15 -3
  207. package/engine/graphics/micron/simplifyGeometry.js +1 -1
  208. package/engine/graphics/particles/particular/engine/ParticularEngine.js +5 -0
  209. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +17 -9
  210. package/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +12 -10
  211. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +7 -2
  212. package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +27 -0
  213. package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +80 -0
  214. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +16 -4
  215. package/engine/graphics/shaders/TerrainShader.js +8 -8
  216. package/engine/graphics/texture/atlas/TextureAtlasDebugger.js +2 -1
  217. package/engine/graphics/texture/sampler/Sampler2D.js +206 -201
  218. package/engine/graphics/texture/sampler/Sampler2D.spec.js +34 -35
  219. package/engine/graphics/texture/sampler/bicubic.js +59 -0
  220. package/engine/graphics/texture/sampler/downsampleSample2D.spec.js +2 -2
  221. package/engine/graphics/texture/sampler/genericResampleSampler2D.js +0 -2
  222. package/engine/graphics/texture/sampler/prototypeSamplerFiltering.js +146 -0
  223. package/engine/graphics/texture/sampler/{downsampleSampler2D.js → sampler2D_scale_down_linear.js} +8 -4
  224. package/engine/graphics/texture/sampler/sampler2_d_scale_down_lanczos.js +140 -0
  225. package/engine/graphics/texture/sampler/scaleSampler2D.js +3 -3
  226. package/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.js +1 -1
  227. package/engine/graphics/util/ScaleObject3ToBox.js +14 -1
  228. package/engine/graphics/util/makeMeshPreviewScene.js +2 -1
  229. package/engine/grid/components/GridObstacle.js +0 -44
  230. package/engine/grid/components/GridObstacleSerializationAdapter.js +46 -0
  231. package/engine/input/devices/PointerDevice.d.ts +1 -1
  232. package/engine/input/devices/PointerDevice.js +17 -2
  233. package/engine/input/ecs/util/TerrainCameraTargetSampler.js +2 -2
  234. package/engine/navigation/ecs/components/Path.d.ts +2 -0
  235. package/engine/navigation/ecs/components/Path.js +6 -1
  236. package/engine/navigation/ecs/components/computeNonuniformCatmullRomSplineSample.js +117 -0
  237. package/engine/navigation/grid/AStar.js +1 -1
  238. package/engine/navigation/grid/GridField.js +3 -2
  239. package/engine/platform/GetURLHash.js +27 -0
  240. package/engine/platform/WebEnginePlatform.js +1 -22
  241. package/engine/sound/ecs/emitter/SoundEmitter.js +10 -6
  242. package/engine/ui/DraggableAspect.js +2 -2
  243. package/generation/GridGenerator.js +7 -6
  244. package/generation/example/SampleGenerator0.js +39 -35
  245. package/generation/example/filters/SampleGroundMoistureFilter.js +58 -17
  246. package/generation/example/generators/interactive/mir_generator_place_buff_objects.js +7 -6
  247. package/generation/example/generators/mir_generator_place_bases.js +7 -3
  248. package/generation/example/generators/mir_generator_place_road_decorators.js +3 -3
  249. package/generation/example/generators/mir_generator_place_starting_point.js +3 -2
  250. package/generation/example/themes/SampleTheme0.js +11 -7
  251. package/generation/filtering/numeric/CellFilterLiteralFloat.js +5 -0
  252. package/generation/filtering/numeric/complex/CellFilterDilate.js +36 -0
  253. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +15 -5
  254. package/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +53 -1
  255. package/generation/filtering/numeric/math/CellFilterMax2.js +3 -0
  256. package/generation/filtering/numeric/math/CellFilterMembershipGeneralizedBell.js +55 -0
  257. package/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +42 -0
  258. package/generation/filtering/numeric/sampling/CellFilterSampleLayerCubic.js +36 -0
  259. package/generation/filtering/numeric/sampling/CellFilterSampleLayerLinear.js +41 -0
  260. package/generation/grid/GridData.d.ts +5 -1
  261. package/generation/grid/GridData.js +35 -36
  262. package/generation/grid/MarkerMatchCounter.js +5 -3
  263. package/generation/grid/generation/discrete/GridTaskConnectRooms.js +1 -1
  264. package/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +1 -1
  265. package/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.js +1 -1
  266. package/generation/grid/generation/road/GridTaskGenerateRoads.js +1 -1
  267. package/generation/markers/GridActionRuleSet.js +15 -32
  268. package/generation/markers/GridCellActionPlaceMarker.js +12 -8
  269. package/generation/markers/debug/visualizeMarkers.js +56 -36
  270. package/generation/markers/emitter/MarkerNodeEmitterFromAction.js +8 -8
  271. package/generation/markers/prototypeGridCellActionPlaceMarker.js +209 -0
  272. package/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +1 -5
  273. package/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.spec.js +2 -2
  274. package/generation/placement/GridCellPlacementRule.js +31 -25
  275. package/generation/theme/ThemeEngine.js +1 -1
  276. package/package.json +1 -1
  277. package/samples/terrain/from_image.js +7 -3
  278. package/samples/terrain/main.js +1 -1
  279. package/view/View.js +23 -1
  280. package/view/common/LabelView.js +1 -1
  281. package/view/compose3x3transform.js +32 -8
  282. package/view/controller/dat/DatGuiUtils.js +1 -1
  283. package/view/elements/DropDownSelectionView.js +11 -3
  284. package/view/elements/image/ImageView.js +3 -1
  285. package/core/model/ObservedReal.js +0 -55
  286. package/editor/ecs/component/ObjectEditor.js +0 -0
  287. package/engine/graphics/particles/particular/engine/renderers/SoftBillboardParticleRenderer.js +0 -7
  288. package/engine/sound/ecs/emitter/attenuate/attenuateSoundLinear.js +0 -11
  289. package/generation/filtering/numeric/CellFilterReadGridLayer.js +0 -73
@@ -1,14 +1,18 @@
1
- import { TopoMesh } from "../../../../core/geom/3d/topology/TopoMesh.js";
1
+ import { TopoMesh } from "../../../../core/geom/3d/topology/struct/TopoMesh.js";
2
2
  import { MicronGeometryPatch } from "../format/MicronGeometryPatch.js";
3
3
  import { fill_patch_geometry_data } from "./fill_patch_geometry_data.js";
4
4
  import { AABB3 } from "../../../../core/bvh2/aabb3/AABB3.js";
5
5
  import { assert } from "../../../../core/assert.js";
6
- import { computeTraingleClusterNormalBoundingCone } from "../../../../core/geom/3d/topology/bounds/computeTraingleClusterNormalBoundingCone.js";
6
+ import {
7
+ computeTraingleClusterNormalBoundingCone
8
+ } from "../../../../core/geom/3d/topology/bounds/computeTraingleClusterNormalBoundingCone.js";
7
9
  import { noop } from "../../../../core/function/Functions.js";
8
10
  import { ConicRay } from "../../../../core/geom/ConicRay.js";
9
11
  import { vec4 } from "gl-matrix";
10
12
  import { computeTopoMeshBoundiningBox } from "../../../../core/geom/3d/topology/bounds/computeTopoMeshBoundiningBox.js";
11
- import { computeTopoMeshBoundingSphere } from "../../../../core/geom/3d/topology/bounds/computeTopoMeshBoundingSphere.js";
13
+ import {
14
+ computeTopoMeshBoundingSphere
15
+ } from "../../../../core/geom/3d/topology/bounds/computeTopoMeshBoundingSphere.js";
12
16
  import { meshopt_optimizeVertexCache } from "../../geometry/optimization/VertexCacheOptimizer.js";
13
17
  import { array_copy } from "../../../../core/collection/array/copyArray.js";
14
18
 
@@ -1,4 +1,4 @@
1
- import { TopoMesh } from "../../../../core/geom/3d/topology/TopoMesh.js";
1
+ import { TopoMesh } from "../../../../core/geom/3d/topology/struct/TopoMesh.js";
2
2
  import { PatchRepresentation } from "./PatchRepresentation.js";
3
3
  import { MicronGeometry } from "../format/MicronGeometry.js";
4
4
  import { buildAbstractPatchHierarchy } from "./hierarchy/buildAbstractPatchHierarchy.js";
@@ -8,14 +8,16 @@ import { DataType } from "../../../../core/collection/table/DataType.js";
8
8
  import { MicronGeometryPatch } from "../format/MicronGeometryPatch.js";
9
9
  import { build_clustering_info } from "./debug/build_clustering_info.js";
10
10
  import { build_graph_info } from "./debug/build_graph_info.js";
11
- import { expandConnectivityByLocality } from "../../../../core/geom/3d/topology/expandConnectivityByLocality.js";
12
11
  import { build_geometry_info } from "./build_geometry_info.js";
13
12
  import { build_leaf_patches_metis } from "./clustering/build_leaf_patches_metis.js";
14
13
  import { compute_buffer_geometry_byte_size } from "../../geometry/buffered/compute_buffer_geometry_byte_size.js";
15
14
  import { deinterleaveBufferGeometry } from "../../geometry/buffered/deinterleaveBufferGeometry.js";
16
- import { AABB3 } from "../../../../core/bvh2/aabb3/AABB3.js";
17
- import { aabb3_from_v3_array } from "../../../../core/bvh2/aabb3/aabb3_from_v3_array.js";
18
15
  import { update_topo_face_normals } from "../../../../core/geom/3d/topology/update_topo_face_normals.js";
16
+ import {
17
+ collapse_all_degenerate_edges
18
+ } from "../../../../core/geom/3d/topology/simplify/collapse_all_degenerate_edges.js";
19
+ import { mergeVertices } from "three/examples/jsm/utils/BufferGeometryUtils.js";
20
+ import { debugValidateMesh } from "../../../../core/geom/3d/topology/debugValidateMesh.js";
19
21
 
20
22
  /**
21
23
  * Returns current time in milliseconds
@@ -124,7 +126,10 @@ const PRINT_VERBOSE_STATS = false;
124
126
  * @returns {Promise<MicronGeometry>}
125
127
  */
126
128
  export async function buildMicronGeometryFromBufferGeometry(input) {
127
- const source_geometry = deinterleaveBufferGeometry(input);
129
+ let source_geometry = deinterleaveBufferGeometry(input);
130
+
131
+ // merge vertices to create better connectivity
132
+ source_geometry = mergeVertices(source_geometry);
128
133
 
129
134
  // build topology representation
130
135
  const topoMesh = new TopoMesh();
@@ -138,10 +143,15 @@ export async function buildMicronGeometryFromBufferGeometry(input) {
138
143
  topoMesh.build(vertex_position_array, face_index_array);
139
144
 
140
145
  // compute aabb
141
- const geometry_aabb = new AABB3();
142
- aabb3_from_v3_array(geometry_aabb, vertex_position_array, vertex_position_array.length);
146
+ // const geometry_aabb = new AABB3();
147
+ // aabb3_from_v3_array(geometry_aabb, vertex_position_array, vertex_position_array.length);
148
+
149
+ // weld_duplicate_vertices(topoMesh, geometry_aabb);
150
+
151
+ debugValidateMesh(topoMesh);
143
152
 
144
- expandConnectivityByLocality(topoMesh, geometry_aabb);
153
+ // expandConnectivityByLocality(topoMesh, geometry_aabb);
154
+ collapse_all_degenerate_edges(topoMesh.getEdges(), topoMesh);
145
155
 
146
156
  // ensure faces have normals for mesh simplification
147
157
  update_topo_face_normals(Array.from(topoMesh.getFaces()), topoMesh.getFaces().size);
@@ -1,4 +1,4 @@
1
- import FastBinaryHeap from "../../../../navigation/grid/FastBinaryHeap.js";
1
+ import FastBinaryHeap from "../../../../../core/collection/heap/FastBinaryHeap.js";
2
2
  import { mn_graph_collapse_weighted_edge } from "../../../../../core/graph/mn_graph_collapse_weighted_edge.js";
3
3
  import { build_face_graph_from_mesh } from "../../../../../core/graph/build_face_graph_from_mesh.js";
4
4
 
@@ -1,7 +1,7 @@
1
1
  import { computeMeshSurfaceArea } from "../../../geometry/computeMeshSurfaceArea.js";
2
2
  import { BitSet } from "../../../../../core/binary/BitSet.js";
3
3
  import { computeOpenFaceFreedom } from "./computeOpenFaceFreedom.js";
4
- import FastBinaryHeap from "../../../../navigation/grid/FastBinaryHeap.js";
4
+ import FastBinaryHeap from "../../../../../core/collection/heap/FastBinaryHeap.js";
5
5
  import { PatchRepresentation } from "../PatchRepresentation.js";
6
6
  import { MICRON_PATCH_SIZE_MAX } from "../MICRON_PATCH_SIZE_MAX.js";
7
7
  import { populateOpenFaceNeighboursForPatch } from "./populateOpenFaceNeighboursForPatch.js";
@@ -9,7 +9,7 @@ import { update_topo_face_normals } from "../../../../../core/geom/3d/topology/u
9
9
  import { computeBorderLengthChange } from "./computeBorderLengthChange.js";
10
10
  import { sign } from "../../../../../core/math/sign.js";
11
11
  import { vec3 } from "gl-matrix";
12
- import { TopoMesh } from "../../../../../core/geom/3d/topology/TopoMesh.js";
12
+ import { TopoMesh } from "../../../../../core/geom/3d/topology/struct/TopoMesh.js";
13
13
 
14
14
  const scratch_set = new Set();
15
15
 
@@ -1,7 +1,7 @@
1
1
  import { cluster_mesh_metis } from "../../../../../core/graph/cluster_mesh_metis.js";
2
2
  import { MICRON_PATCH_SIZE_MAX } from "../MICRON_PATCH_SIZE_MAX.js";
3
3
  import { PatchRepresentation } from "../PatchRepresentation.js";
4
- import { TopoMesh } from "../../../../../core/geom/3d/topology/TopoMesh.js";
4
+ import { TopoMesh } from "../../../../../core/geom/3d/topology/struct/TopoMesh.js";
5
5
  import { assign_patch_neighbours_from_topology } from "./assign_patch_neighbours_from_topology.js";
6
6
 
7
7
  /**
@@ -6,7 +6,9 @@ import { build_merge_graph } from "./build_merge_graph.js";
6
6
  import { assign_patch_neighbours_from_topology } from "../clustering/assign_patch_neighbours_from_topology.js";
7
7
  import { assert } from "../../../../../core/assert.js";
8
8
  import { graph_create_off_mesh_links } from "../../../../../core/graph/build_face_graph_from_mesh.js";
9
- import { build_vertex_quadratics } from "../../../../../core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js";
9
+ import {
10
+ build_vertex_quadratics
11
+ } from "../../../../../core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js";
10
12
 
11
13
  /**
12
14
  *
@@ -34,6 +36,11 @@ function merge_graph_level(graph, n) {
34
36
  * @type {number}
35
37
  */
36
38
  const DEFAULT_MERGE_COUNT = 4;
39
+ /**
40
+ * Maximum number of patches that can be merged together
41
+ * @type {number}
42
+ */
43
+ const LIMIT_MERGE_COUNT = 64;
37
44
 
38
45
  /**
39
46
  *
@@ -76,11 +83,12 @@ async function assemble_graph(nodes) {
76
83
  for (let i = 0; i < __node_count.value; i++) {
77
84
  const patch = __nodes[i];
78
85
 
79
- build_vertex_quadratics(patch.topology_snapshot, vertex_quadratics);
86
+ build_vertex_quadratics({ mesh: patch.topology_snapshot, quadratics: vertex_quadratics });
80
87
  }
81
88
 
82
89
 
83
90
  main_loop: while (__node_count.value > 1) {
91
+
84
92
  // assemble nodes into a graph
85
93
  const leaf_cluster_weight_graph = build_merge_graph(__nodes);
86
94
 
@@ -89,7 +97,7 @@ async function assemble_graph(nodes) {
89
97
  graph_create_off_mesh_links(leaf_cluster_weight_graph);
90
98
  }
91
99
 
92
- // merge graph nodes up to 4 nodes per cluster
100
+ // merge graph nodes up to X nodes per cluster
93
101
  merge_graph_level(leaf_cluster_weight_graph, merge_count);
94
102
 
95
103
  // assemble multi-nodes
@@ -113,6 +121,16 @@ async function assemble_graph(nodes) {
113
121
  await Promise.all(__promises);
114
122
 
115
123
  if (__node_count.value >= old_node_count) {
124
+
125
+ if (leaf_cluster_weight_graph.getNodeCount() <= 1) {
126
+ // graph is already merged to the maximum level
127
+ throw new Error(`Simplification failed, graph already at maximum coarseness`);
128
+ }
129
+
130
+ if (merge_count >= LIMIT_MERGE_COUNT) {
131
+ throw new Error(`Exceeded merge limit(=${LIMIT_MERGE_COUNT}), attempting to merge too many patches together`);
132
+ }
133
+
116
134
  // failed to do any merging, increase merge scope
117
135
  merge_count *= 2;
118
136
 
@@ -1,14 +1,15 @@
1
1
  //
2
2
 
3
- import { TopoMesh } from "../../../../../core/geom/3d/topology/TopoMesh.js";
3
+ import { TopoMesh } from "../../../../../core/geom/3d/topology/struct/TopoMesh.js";
4
4
  import { MICRON_PATCH_SIZE_MAX } from "../MICRON_PATCH_SIZE_MAX.js";
5
5
  import { compute_set_of_shared_vertices } from "./build_intermediate_patch_topology.js";
6
6
  import { max2 } from "../../../../../core/math/max2.js";
7
- import FastBinaryHeap from "../../../../navigation/grid/FastBinaryHeap.js";
8
- import { collapse_edges, extract_edge_cost } from "../../../../../core/geom/3d/topology/simplify/simplifyTopoMesh.js";
9
- import { build_edge_collapse_candidates } from "../../../../../core/geom/3d/topology/simplify/build_edge_collapse_candidates.js";
10
- import { collapse_all_degenerate_edges } from "../../../../../core/geom/3d/topology/simplify/collapse_all_degenerate_edges.js";
11
- import { deep_copy_vertex_quadratics } from "../../../../../core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js";
7
+ import {
8
+ collapse_all_degenerate_edges
9
+ } from "../../../../../core/geom/3d/topology/simplify/collapse_all_degenerate_edges.js";
10
+ import {
11
+ deep_copy_vertex_quadratics
12
+ } from "../../../../../core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js";
12
13
  import { SquareMatrix } from "../../../../../core/graph/SquareMatrix.js";
13
14
  import { DataType } from "../../../../../core/collection/table/DataType.js";
14
15
  import { matrix_eigenvalues_in_place } from "../../../../../core/graph/eigen/eigen.js";
@@ -23,9 +24,19 @@ import { patch_build_parent } from "./patch_combine.js";
23
24
  import { array_copy } from "../../../../../core/collection/array/copyArray.js";
24
25
  import { ceilPowerOfTwo } from "../../../../../core/binary/operations/ceilPowerOfTwo.js";
25
26
  import { isPowerOfTwo } from "../../../../../core/math/isPowerOrTwo.js";
26
- import { computeTopoMeshBoundiningBox } from "../../../../../core/geom/3d/topology/bounds/computeTopoMeshBoundiningBox.js";
27
+ import {
28
+ computeTopoMeshBoundiningBox
29
+ } from "../../../../../core/geom/3d/topology/bounds/computeTopoMeshBoundiningBox.js";
27
30
  import { AABB3 } from "../../../../../core/bvh2/aabb3/AABB3.js";
28
- import { computeTopoMeshBoundingSphere } from "../../../../../core/geom/3d/topology/bounds/computeTopoMeshBoundingSphere.js";
31
+ import {
32
+ computeTopoMeshBoundingSphere
33
+ } from "../../../../../core/geom/3d/topology/bounds/computeTopoMeshBoundingSphere.js";
34
+ import { Uint32Heap } from "../../../../../core/collection/heap/Uint32Heap.js";
35
+ import {
36
+ edge_collapse_populate_heap,
37
+ edge_collapse_reduce_face_count
38
+ } from "../../../../../core/geom/3d/topology/simplify/simplifyTopoMesh2.js";
39
+ import { cluster_mesh_metis } from "../../../../../core/graph/cluster_mesh_metis.js";
29
40
 
30
41
  /**
31
42
  *
@@ -201,7 +212,7 @@ function build_graph_node_index_map(graph) {
201
212
  * @param {number} per_cluster_triangle_limit
202
213
  * @returns {TopoMesh[]}
203
214
  */
204
- function recursive_split_mesh_partition(mesh, k, per_cluster_triangle_limit) {
215
+ async function recursive_split_mesh_partition(mesh, k, per_cluster_triangle_limit) {
205
216
  if (!isPowerOfTwo(k)) {
206
217
  throw new Error(`k must be power of two, instead was '${k}'`);
207
218
  }
@@ -216,7 +227,7 @@ function recursive_split_mesh_partition(mesh, k, per_cluster_triangle_limit) {
216
227
  for (let j = 0; j < meshes.length; j++) {
217
228
  const topoMesh = meshes[j];
218
229
 
219
- const split = partition_mesh(topoMesh, 2, merge_target);
230
+ const split = await partition_mesh(topoMesh, 2, merge_target);
220
231
 
221
232
  Array.prototype.push.apply(output_meshes, split);
222
233
  }
@@ -227,6 +238,69 @@ function recursive_split_mesh_partition(mesh, k, per_cluster_triangle_limit) {
227
238
  return meshes;
228
239
  }
229
240
 
241
+ /**
242
+ *
243
+ * @param {TopoMesh} mesh
244
+ * @param {number} k
245
+ * @param {number} per_cluster_triangle_limit
246
+ * @returns {TopoMesh[]}
247
+ */
248
+ async function partition_mesh_advanced(mesh, k, per_cluster_triangle_limit) {
249
+ const metis_result = await partition_mesh_metis(mesh, k, per_cluster_triangle_limit);
250
+
251
+ if (metis_result !== undefined) {
252
+ return metis_result;
253
+ }
254
+
255
+ // fallback
256
+ return recursive_split_mesh_partition(mesh, k, per_cluster_triangle_limit);
257
+ }
258
+
259
+ /**
260
+ *
261
+ * @param {TopoMesh} mesh
262
+ * @param {number} k
263
+ * @param {number} per_cluster_triangle_limit
264
+ * @returns {TopoMesh[]|undefined} Either returns the desired partitioning, or undefined in case of failure
265
+ */
266
+ async function partition_mesh_metis(mesh, k, per_cluster_triangle_limit) {
267
+
268
+ const input_face_count = mesh.getFaces().size;
269
+ const face_array = Array.from(mesh.getFaces());
270
+
271
+ const partitioning = new Uint32Array(input_face_count);
272
+
273
+ const cluster_count = await cluster_mesh_metis(partitioning, mesh, per_cluster_triangle_limit);
274
+
275
+ if (cluster_count !== k) {
276
+ return undefined;
277
+ }
278
+
279
+
280
+ const result = [];
281
+ const vertexMaps = [];
282
+
283
+ for (let i = 0; i < cluster_count; i++) {
284
+ result[i] = new TopoMesh();
285
+ vertexMaps[i] = new Map();
286
+ }
287
+
288
+ for (let i = 0; i < input_face_count; i++) {
289
+
290
+ const triangle = face_array[i];
291
+
292
+ const partition_index = partitioning[i];
293
+
294
+ const patition_mesh = result[partition_index];
295
+ const vertexMap = vertexMaps[partition_index];
296
+
297
+ patition_mesh.addFaceCopy(triangle, vertexMap)
298
+
299
+ }
300
+
301
+ return result;
302
+ }
303
+
230
304
  /**
231
305
  *
232
306
  * @param {TopoMesh} mesh
@@ -374,38 +448,19 @@ async function many_to_many_merge(
374
448
  // simplify topology
375
449
  if (num_desired_faces_to_remove > 0) {
376
450
 
377
- /**
378
- *
379
- * @type {BinaryHeap<EdgeCollapseCandidate>}
380
- */
381
- const open_set = new FastBinaryHeap(extract_edge_cost);
382
-
383
- /**
384
- *
385
- * @type {Map<TopoEdge, EdgeCollapseCandidate>}
386
- */
387
- const edge_to_collapse_map = new Map();
388
-
389
- build_edge_collapse_candidates(
390
- merged_mesh,
391
- open_set,
392
- edge_to_collapse_map,
393
- vertex_quadratics,
394
- restricted_vertices
395
- );
396
-
397
- // execute mesh simplification
398
-
399
- collapse_edges(
400
- num_desired_faces_to_remove,
401
- open_set,
402
- merged_mesh,
403
- edge_to_collapse_map,
404
- vertex_quadratics,
405
- restricted_vertices
406
- );
451
+ const heap = new Uint32Heap(merged_mesh.getEdges().size);
452
+ const edge_lookup = new Map();
453
+
454
+ // debugValidateMesh(merged_mesh);
455
+
456
+ edge_collapse_populate_heap(merged_mesh.getEdges(), restricted_vertices, heap, vertex_quadratics, edge_lookup);
457
+ edge_collapse_reduce_face_count(merged_mesh, num_desired_faces_to_remove, heap, edge_lookup, restricted_vertices, vertex_quadratics);
458
+
459
+ // debugValidateMesh(merged_mesh);
460
+
407
461
  collapse_all_degenerate_edges(merged_mesh.getEdges(), merged_mesh);
408
462
 
463
+ // debugValidateMesh(merged_mesh);
409
464
 
410
465
  const merged_mesh_face_count = merged_mesh.getFaces().size;
411
466
 
@@ -464,13 +519,11 @@ async function many_to_many_merge(
464
519
  // const group_per_pixel_error = Math.sqrt(largest_squared_error);
465
520
 
466
521
  // split topology into desired number of pieces
467
- const pieces = recursive_split_mesh_partition(merged_mesh, actual_up_count, MICRON_PATCH_SIZE_MAX);
522
+ const pieces = await partition_mesh_advanced(merged_mesh, actual_up_count, MICRON_PATCH_SIZE_MAX);
468
523
 
469
524
  for (let i = 0; i < actual_up_count; i++) {
470
525
  const rep = patch_build_parent(nodes);
471
526
 
472
- // TODO we can be more deliberate in child assignment, partitions can be such that a new patch doesn't overlap with one of the original children
473
-
474
527
  const piece_mesh = pieces[i];
475
528
 
476
529
  rep.topology_snapshot = piece_mesh;
@@ -1,13 +1,19 @@
1
1
  import { array_push_if_unique } from "../../../../../core/collection/array/array_push_if_unique.js";
2
- import FastBinaryHeap from "../../../../navigation/grid/FastBinaryHeap.js";
3
- import { build_vertex_quadratics } from "../../../../../core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js";
2
+ import FastBinaryHeap from "../../../../../core/collection/heap/FastBinaryHeap.js";
3
+ import {
4
+ build_vertex_quadratics
5
+ } from "../../../../../core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js";
4
6
  import { compute_set_of_border_vertex_indices } from "./build_intermediate_patch_topology.js";
5
7
  import { compute_patches_shared_vertices } from "./compute_patches_shared_vertices.js";
6
8
  import { max2 } from "../../../../../core/math/max2.js";
7
9
  import { MICRON_PATCH_SIZE_MAX } from "../MICRON_PATCH_SIZE_MAX.js";
8
10
  import { collapse_edges, extract_edge_cost } from "../../../../../core/geom/3d/topology/simplify/simplifyTopoMesh.js";
9
- import { build_edge_collapse_candidates } from "../../../../../core/geom/3d/topology/simplify/build_edge_collapse_candidates.js";
10
- import { collapse_all_degenerate_edges } from "../../../../../core/geom/3d/topology/simplify/collapse_all_degenerate_edges.js";
11
+ import {
12
+ build_edge_collapse_candidates
13
+ } from "../../../../../core/geom/3d/topology/simplify/build_edge_collapse_candidates.js";
14
+ import {
15
+ collapse_all_degenerate_edges
16
+ } from "../../../../../core/geom/3d/topology/simplify/collapse_all_degenerate_edges.js";
11
17
  import { compute_set_intersection } from "../../../../../core/collection/set/compute_set_intersection.js";
12
18
 
13
19
  /**
@@ -334,7 +340,7 @@ export function build_simplified_clusters(root, mesh) {
334
340
  */
335
341
  const vertex_quadratics = new Map();
336
342
 
337
- build_vertex_quadratics(mesh, vertex_quadratics);
343
+ build_vertex_quadratics({ mesh: mesh, quadratics: vertex_quadratics });
338
344
 
339
345
  let total_relaxed_vertex_count = 0;
340
346
  let rejection_count_shared_vertices = 0;
@@ -1,12 +1,33 @@
1
1
  import { MicronGeometryPatchOccurrence } from "./MicronGeometryPatchOccurance.js";
2
+ import { max3 } from "../../../../core/math/max3.js";
3
+
4
+ const DEFAULT_CAPACITY = 10000;
5
+ /**
6
+ *
7
+ * @type {number}
8
+ */
9
+ const CAPACITY_GROW_FACTOR = 1.2;
10
+ /**
11
+ *
12
+ * @type {number}
13
+ */
14
+ const CAPACITY_GROW_MIN_STEP = 64;
15
+
16
+ /**
17
+ * Number of words making up a single patch element
18
+ * @type {number}
19
+ */
20
+ const PATCH_WORD_COUNT = 3;
2
21
 
3
22
  export class VirtualGeometry {
4
23
  constructor() {
24
+ this.__capacity = DEFAULT_CAPACITY;
5
25
  /**
6
26
  * pack patch instance as [INSTANCE_ID, GEOMETRY_ID, PATCH_ID]
7
27
  * @type {number[]}
8
28
  */
9
- this.patches = new Uint32Array(300000);
29
+ this.patches = new Uint32Array(this.__capacity * PATCH_WORD_COUNT);
30
+
10
31
 
11
32
  /**
12
33
  *
@@ -36,6 +57,28 @@ export class VirtualGeometry {
36
57
  this.stats_source_byte_size = 0;
37
58
  }
38
59
 
60
+ ensureCapacity(patch_count) {
61
+ if (this.__capacity < patch_count) {
62
+ const new_capacity = Math.ceil(max3(
63
+ patch_count,
64
+ patch_count * CAPACITY_GROW_FACTOR,
65
+ patch_count + CAPACITY_GROW_MIN_STEP
66
+ ));
67
+
68
+ const new_array = new Uint32Array(new_capacity * PATCH_WORD_COUNT);
69
+
70
+ new_array.set(this.patches);
71
+
72
+ this.patches = new_array;
73
+
74
+ this.__capacity = new_capacity;
75
+
76
+ return false;
77
+ }
78
+
79
+ return true;
80
+ }
81
+
39
82
  resetStats() {
40
83
  this.stats_instance_count = 0;
41
84
  this.stats_source_triangle_count = 0;
@@ -53,7 +96,7 @@ export class VirtualGeometry {
53
96
  const patches = this.patches;
54
97
 
55
98
  for (let i = 0; i < patch_count; i++) {
56
- const i3 = i * 3;
99
+ const i3 = i * PATCH_WORD_COUNT;
57
100
 
58
101
  const geometry_id = patches[i3 + 1];
59
102
  const patch_id = patches[i3 + 2];
@@ -77,7 +120,7 @@ export class VirtualGeometry {
77
120
  const patch_count = this.patch_count;
78
121
  const patches = this.patches;
79
122
  for (let i = 0; i < patch_count; i++) {
80
- const i3 = i * 3;
123
+ const i3 = i * PATCH_WORD_COUNT;
81
124
 
82
125
  const geometry_id = patches[i3 + 1];
83
126
  const patch_id = patches[i3 + 2];
@@ -1,9 +1,11 @@
1
1
  //
2
2
 
3
- import BinaryHeap from "../../../navigation/grid/FastBinaryHeap.js";
3
+ import BinaryHeap from "../../../../core/collection/heap/FastBinaryHeap.js";
4
4
  import { BufferAttribute, BufferGeometry } from "three";
5
5
  import { UintArrayForCount } from "../../../../core/collection/array/typed/uint_array_for_count.js";
6
- import { compute_typed_array_constructor_from_data_type } from "../../../../core/collection/table/DataType2TypedArrayConstructorMapping.js";
6
+ import {
7
+ compute_typed_array_constructor_from_data_type
8
+ } from "../../../../core/collection/table/DataType2TypedArrayConstructorMapping.js";
7
9
  import { BitSet } from "../../../../core/binary/BitSet.js";
8
10
  import { min2 } from "../../../../core/math/min2.js";
9
11
  import { max2 } from "../../../../core/math/max2.js";
@@ -46,9 +46,13 @@ import { StaticMaterialCache } from "../../asset/loaders/material/StaticMaterial
46
46
  import convertSampler2D2Canvas from "../texture/sampler/Sampler2D2Canvas.js";
47
47
  import { CanvasView } from "../../../view/elements/CanvasView.js";
48
48
  import { Sampler2D } from "../texture/sampler/Sampler2D.js";
49
- import { downsampleSampler2D } from "../texture/sampler/downsampleSampler2D.js";
49
+ import { sampler2D_scale_down_linear } from "../texture/sampler/sampler2D_scale_down_linear.js";
50
50
  import { ShadowMapRenderer } from "../shadows/ShadowMapRenderer.js";
51
51
  import { mat4 } from "gl-matrix";
52
+ import { seededRandom } from "../../../core/math/random/seededRandom.js";
53
+ import { Color } from "../../../core/color/Color.js";
54
+
55
+ document.body.style.margin = 0;
52
56
 
53
57
  const background = new TextureLoader().load('data/textures/utility/checkers_white_grey_256x256.png');
54
58
  background.repeat.set(50, 30);
@@ -129,7 +133,7 @@ function debug_shadow_map() {
129
133
 
130
134
  const resampled = Sampler2D.uint8(4, 512, 512);
131
135
 
132
- downsampleSampler2D(sampler, resampled);
136
+ sampler2D_scale_down_linear(sampler, resampled);
133
137
 
134
138
  convertSampler2D2Canvas(resampled, 1, 0, cv.el);
135
139
 
@@ -148,7 +152,7 @@ const orbitControls = new OrbitControls(camera, container);
148
152
 
149
153
  animate();
150
154
 
151
- async function micron_add_object(object) {
155
+ async function micron_add_object(object, random_color = false) {
152
156
  object.traverse(t => {
153
157
  t.castShadow = true;
154
158
  t.receiveShadow = true;
@@ -179,6 +183,26 @@ async function micron_add_object(object) {
179
183
  }
180
184
  });
181
185
 
186
+ if (random_color) {
187
+ const random = seededRandom(7);
188
+
189
+ const color = new Color();
190
+
191
+ object.traverse(t => {
192
+ if (t.isMesh && t.material !== null) {
193
+
194
+
195
+ color.setHSV(random(), 1, 1);
196
+
197
+ t.material = new MeshStandardMaterial({
198
+ color: color.toUint()
199
+ });
200
+
201
+ }
202
+ });
203
+ }
204
+
205
+
182
206
  object.traverse(t => {
183
207
  if (t.isMesh && t.material !== null) {
184
208
 
@@ -279,6 +303,7 @@ function init() {
279
303
  wireframe: false,
280
304
  side: FrontSide,
281
305
  color: 0xffffff
306
+ // color: 0x000000
282
307
  });
283
308
 
284
309
  //
@@ -310,7 +335,7 @@ function init() {
310
335
  build_stats();
311
336
 
312
337
  function sample_square() {
313
- const geometry = new PlaneBufferGeometry(1, 1, 30, 30);
338
+ const geometry = new PlaneBufferGeometry(1, 1, 100, 100);
314
339
 
315
340
  const m = new Matrix4();
316
341
 
@@ -351,6 +376,15 @@ function init() {
351
376
  });
352
377
  }
353
378
 
379
+ function sample_isiflow_floor() {
380
+ const loader = new PLYLoader();
381
+ loader.load("moicon/isiflow_Oct_15_21/0/floor_01.ply", function (geometry) {
382
+
383
+ createScene(geometry, cubeMaterial1, 1.5);
384
+
385
+ });
386
+ }
387
+
354
388
  function sample_lucy_28m() {
355
389
  const loader = new PLYLoader();
356
390
  loader.load("data/models/stanford/lucy.ply", function (geometry) {
@@ -409,7 +443,7 @@ function init() {
409
443
  t.receiveShadow = true;
410
444
  })
411
445
 
412
- const r = await micron_add_object(object);
446
+ const r = await micron_add_object(object, false);
413
447
  // scene.add(object);
414
448
 
415
449
 
@@ -463,16 +497,13 @@ function init() {
463
497
 
464
498
  // sample_gltf_sponza();
465
499
  // gltf_sample('data/models/RTS_Buildings_Humans/18/Building_R_18_out/Building_R_18.gltf');
466
- sample_lucy();
467
500
  // sample_dragon();
468
501
  // sample_gltf_hapro_2();
469
502
  // sample_gltf_hapro_1();
470
503
  // sample_gltf_broken_isiflow();
471
- // gltf_grid('data/models/moicon/Kople/EVCharger1.gltf');
472
504
  // gltf_grid('data/models/RTS_Buildings_Humans/18/Building_R_18_out/Building_R_18.gltf');
473
505
  // gltf_sample('moicon/08-clickable-assets/model.gltf');
474
506
  // gltf_sample('moicon/05-ground-floor/model.gltf');
475
- // gltf_sample('data/models/moicon/isiflow_Oct_15_21/0/model.gltf');
476
507
  // gltf_sample('moicon/29_Dec_2021_Nammo/1/model.gltf');
477
508
  // gltf_sample('moicon/29_Dec_2021_Nammo/1-onematerial/model.gltf');
478
509
  // gltf_sample('moicon/29_Dec_2021_Nammo/2/model.gltf');
@@ -484,8 +515,14 @@ function init() {
484
515
  // gltf_sample('moicon/03_Jan_22_Demo/worker_test/model.gltf');
485
516
  // gltf_sample('moicon/A4/A4/model.gltf');
486
517
  // gltf_sample('moicon/06_04_hapro/08-clickable-assets-new/model.gltf');
487
- // gltf_sample('moicon/ztest_object_many_pieces/model.gltf');
488
518
  // gltf_grid('moicon/ztest_object_many_pieces/model.gltf', 3, 3);
519
+ gltf_sample('moicon/ztest_object_many_pieces/model.gltf');
520
+ // gltf_grid('data/models/moicon/Kople/EVCharger1.gltf');
521
+ // gltf_sample('data/models/moicon/Kople/EVCharger1.gltf');
522
+ // gltf_sample('data/models/moicon/isiflow_Oct_15_21/0/model.gltf');
523
+ // sample_lucy();
524
+ // sample_square();
525
+ // sample_isiflow_floor();
489
526
 
490
527
  document.addEventListener("mousemove", onDocumentMouseMove);
491
528
 
@@ -557,7 +594,7 @@ function createScene(geometry, m1, scale) {
557
594
  geometry.computeVertexNormals();
558
595
 
559
596
 
560
- const grid_size = 100;
597
+ const grid_size = 1;
561
598
  const grid_spacing = 2000;
562
599
 
563
600
  for (let i = 0; i < grid_size; i++) {