@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
@@ -23,10 +23,10 @@ export function shader_rewrite_standard(shader, uniforms, spec, column_count) {
23
23
  vx_lb_preamble.add('precision mediump isampler2D;');
24
24
 
25
25
  vx_lb_preamble.add('attribute float micron_patch_address;');
26
- vx_lb_preamble.add('attribute float micron_instance_id;');
27
26
  vx_lb_preamble.add('attribute mat4 micron_patch_transform;');
28
27
 
29
28
  if (DEBUG_PATCHES) {
29
+ // vx_lb_preamble.add('attribute float micron_instance_id;');
30
30
  vx_lb_preamble.add('varying float v_micron_patch_address;');
31
31
  vx_lb_preamble.add('varying float v_vertex_id;');
32
32
  vx_lb_preamble.add('varying float v_micron_instance_id;');
@@ -62,7 +62,7 @@ export function shader_rewrite_standard(shader, uniforms, spec, column_count) {
62
62
  DEBUG_PATCHES ? `
63
63
  v_micron_patch_address = micron_patch_address;
64
64
  v_vertex_id = float(gl_VertexID);
65
- v_micron_instance_id = float(micron_instance_id);
65
+ // v_micron_instance_id = float(micron_instance_id);
66
66
  ` : ''
67
67
  }
68
68
  int micron_patch_slot_column = micron_patch_address_int % ${column_count};
@@ -187,17 +187,17 @@ export function shader_rewrite_standard(shader, uniforms, spec, column_count) {
187
187
  }
188
188
 
189
189
  // shader.defines.USE_COLOR = true;
190
-
190
+ //
191
191
  // rewrittenVertexShader = rewrittenVertexShader.replace(
192
192
  // '#include <color_vertex>',
193
193
  // `
194
194
  // #include <color_vertex>
195
- // vColor = vec3(1.0);
196
- // //vColor.xyz = vec3(
197
- // // sin(float(micron_patch_address)*123.1),
198
- // // sin(float(micron_patch_address)*11.7),
199
- // // sin(float(micron_patch_address)*932.183)
200
- // // );
195
+ // //vColor = vec3(1.0);
196
+ // vColor.xyz = vec3(
197
+ // sin(float(micron_patch_address)*123.1),
198
+ // sin(float(micron_patch_address)*11.7),
199
+ // sin(float(micron_patch_address)*932.183)
200
+ // );
201
201
  // `
202
202
  // );
203
203
 
@@ -229,16 +229,16 @@ export function shader_rewrite_standard(shader, uniforms, spec, column_count) {
229
229
 
230
230
  shader.fragmentShader = shader.fragmentShader.replace(
231
231
  '#include <dithering_fragment>',
232
- // `gl_FragColor.rgb = vec3(
233
- // sin(v_micron_patch_address*123.1)*0.5 + 0.5,
234
- // sin(v_micron_patch_address*11.7)*0.5 + 0.5,
235
- // sin(v_micron_patch_address*932.183)*0.5 + 0.5
236
- // );`
237
232
  `gl_FragColor.rgb = vec3(
238
- sin(v_micron_instance_id*123.1)*0.5 + 0.5,
239
- sin(v_micron_instance_id*11.7)*0.5 + 0.5,
240
- sin(v_micron_instance_id*932.183)*0.5 + 0.5
233
+ sin(v_micron_patch_address*123.1)*0.5 + 0.5,
234
+ sin(v_micron_patch_address*11.7)*0.5 + 0.5,
235
+ sin(v_micron_patch_address*932.183)*0.5 + 0.5
241
236
  );`
237
+ // `gl_FragColor.rgb = vec3(
238
+ // sin(v_micron_instance_id*123.1)*0.5 + 0.5,
239
+ // sin(v_micron_instance_id*11.7)*0.5 + 0.5,
240
+ // sin(v_micron_instance_id*932.183)*0.5 + 0.5
241
+ // );`
242
242
  // `gl_FragColor.rgb = vec3(
243
243
  // v_vertex_id*0.0026041666666666665,
244
244
  // 1.0,
@@ -1,5 +1,7 @@
1
1
  import { BitSet } from "../../../../../core/binary/BitSet.js";
2
- import { aabb3_array_intersects_frustum_array } from "../../../../../core/bvh2/aabb3/aabb3_array_intersects_frustum_array.js";
2
+ import {
3
+ aabb3_array_intersects_frustum_array
4
+ } from "../../../../../core/bvh2/aabb3/aabb3_array_intersects_frustum_array.js";
3
5
  import { aabb3_estimate_projected_area2 } from "../../../../../core/geom/3d/aabb/aabb3_estimate_projected_area2.js";
4
6
 
5
7
 
@@ -39,7 +41,8 @@ export function get_geometry_patch_cut(
39
41
 
40
42
  const geometry_id = geometry.id;
41
43
 
42
- let output_patch_cursor = destination.patch_count;
44
+ const destination_patch_address = destination.patch_count;
45
+ let output_patch_cursor = destination_patch_address;
43
46
 
44
47
  let i;
45
48
  let stack_cursor = 1;
@@ -114,5 +117,14 @@ export function get_geometry_patch_cut(
114
117
 
115
118
  }
116
119
 
117
- destination.patch_count = output_patch_cursor;
120
+ // this is to make sure geometry container has enough space
121
+ // NOTE: capacity grows after attempted patch writes, so some data will be missing, which means we must re-do the work
122
+ if (!destination.ensureCapacity(output_patch_cursor)) {
123
+ // redo the work
124
+ get_geometry_patch_cut(destination, spec, geometry, instance_id, transform);
125
+ } else {
126
+
127
+ destination.patch_count = output_patch_cursor;
128
+
129
+ }
118
130
  }
@@ -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 { simplifyTopoMesh } from "../../../core/geom/3d/topology/simplify/simplifyTopoMesh.js";
3
3
  import { topoMeshToBufferGeometry } from "../../../core/geom/3d/topology/topoMeshToBufferGeometry.js";
4
4
 
@@ -140,6 +140,11 @@ ParticularEngine.prototype.advanceEmitter = function (emitter, timeDelta) {
140
140
 
141
141
  const step = steps[type];
142
142
 
143
+ if (step === undefined) {
144
+ // no step definition
145
+ continue;
146
+ }
147
+
143
148
  step.emitter = emitter;
144
149
  step.timeDelta = timeDelta;
145
150
  step.particles = emitter.particles;
@@ -14,6 +14,8 @@ import { EmissionShapeType } from "./EmissionShapeType.js";
14
14
  import { computeHashIntegerArray } from "../../../../../../core/collection/array/computeHashIntegerArray.js";
15
15
  import { computeHashFloat } from "../../../../../../core/math/hash/computeHashFloat.js";
16
16
 
17
+ const aabb3 = new AABB3(0, 0, 0, 0, 0, 0);
18
+
17
19
  function ParticleLayer() {
18
20
  /**
19
21
  *
@@ -30,24 +32,26 @@ function ParticleLayer() {
30
32
 
31
33
  /**
32
34
  * Determines a range of particle life expectancy
35
+ * @readonly
33
36
  * @type {NumericInterval}
34
37
  */
35
38
  this.particleLife = new NumericInterval(1, 1);
36
39
 
37
40
  /**
38
- *
41
+ * @readonly
39
42
  * @type {NumericInterval}
40
43
  */
41
44
  this.particleSize = new NumericInterval(0.1, 0.2);
42
45
 
43
46
  /**
44
- *
47
+ * @readonly
45
48
  * @type {NumericInterval}
46
49
  */
47
50
  this.particleRotation = new NumericInterval(0, 0);
48
51
 
49
52
  /**
50
53
  * Rotation speed of individual particles in Rad/s
54
+ * @readonly
51
55
  * @type {NumericInterval}
52
56
  */
53
57
  this.particleRotationSpeed = new NumericInterval(0, 0);
@@ -77,31 +81,31 @@ function ParticleLayer() {
77
81
  this.emissionImmediate = 0;
78
82
 
79
83
  /**
80
- *
84
+ * @readonly
81
85
  * @type {ParameterTrackSet}
82
86
  */
83
87
  this.parameterTracks = new ParameterTrackSet();
84
88
 
85
89
  /**
86
- *
90
+ * @readonly
87
91
  * @type {Vector3}
88
92
  */
89
93
  this.position = new Vector3(0, 0, 0);
90
94
 
91
95
  /**
92
- *
96
+ * @readonly
93
97
  * @type {Vector3}
94
98
  */
95
99
  this.scale = new Vector3(1, 1, 1);
96
100
 
97
101
  /**
98
- *
102
+ * @readonly
99
103
  * @type {ConicRay}
100
104
  */
101
105
  this.particleVelocityDirection = new ConicRay();
102
106
 
103
107
  /**
104
- *
108
+ * @readonly
105
109
  * @type {NumericInterval}
106
110
  */
107
111
  this.particleSpeed = new NumericInterval(0, 0);
@@ -120,14 +124,19 @@ function ParticleLayer() {
120
124
 
121
125
  /**
122
126
  * Simulation steps that are to be applied
127
+ * @readonly
123
128
  * @type {List<SimulationStepDefinition>}
124
129
  */
125
130
  this.steps = new List();
126
131
 
132
+ /**
133
+ * transient property
134
+ * @type {number}
135
+ */
127
136
  this.scaledSpriteHalfSize = -1;
128
137
 
129
138
  /**
130
- *
139
+ * @readonly
131
140
  * @type {AABB3}
132
141
  */
133
142
  this.baseBoundingBox = new AABB3(0, 0, 0, 0, 0, 0);
@@ -159,7 +168,6 @@ ParticleLayer.prototype.computeScaledSpriteHalfSize = function () {
159
168
  return maxParticleSize / 2;
160
169
  };
161
170
 
162
- const aabb3 = new AABB3(0, 0, 0, 0, 0, 0);
163
171
 
164
172
  /**
165
173
  * Bounding box without taking sprite size into account
@@ -1,26 +1,28 @@
1
- import { Group } from "three";
2
-
3
1
  /**
4
2
  * Abstract base class for a particle renderer
5
3
  */
6
4
  export class ParticleRenderer {
7
5
 
6
+
8
7
  constructor() {
9
8
 
10
9
 
11
- /**
12
- * Base object where data is added
13
- * @type {Group}
14
- */
15
- this.mesh = new Group();
10
+ }
11
+
12
+ build_start() {
13
+
14
+ }
15
+
16
+ build_end() {
16
17
 
17
18
  }
18
19
 
19
20
  /**
20
- * Render collection of particle layers
21
- * @param {ParticlePool[]} pools
21
+ *
22
+ * @param {ParticleLayer} layer
22
23
  */
23
- render(pools) {
24
+ add(layer) {
24
25
 
25
26
  }
27
+
26
28
  }
@@ -314,11 +314,16 @@ function make_fragment_shader() {
314
314
 
315
315
  struct LambertMaterial {
316
316
  vec3 diffuseColor;
317
+ float opacity;
317
318
  };
318
319
 
319
320
  void RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {
320
- float dotNL = saturate( dot( geometry.normal, directLight.direction ) );
321
+ float unsaturated_direction_dot = dot( geometry.normal, directLight.direction );
322
+
323
+ float dotNL = saturate( unsaturated_direction_dot );
324
+
321
325
  vec3 irradiance = dotNL * directLight.color;
326
+
322
327
  reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
323
328
  }
324
329
 
@@ -373,7 +378,7 @@ function make_fragment_shader() {
373
378
 
374
379
  vec3 transformedNormal = construct_spherical_normal_from_point_coord(gl_PointCoord.xy);
375
380
 
376
- LambertMaterial material = LambertMaterial(texel.rgb);
381
+ LambertMaterial material = LambertMaterial(texel.rgb, texel.a);
377
382
  ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
378
383
 
379
384
  ${CHUNK_LAMBERT_LIGHTING}
@@ -0,0 +1,27 @@
1
+ import { ParticlePool } from "../../emitter/ParticlePool.js";
2
+ import { PARTICULAR_PARTICLE_SPECIFICATION } from "../../emitter/PARTICULAR_PARTICLE_SPECIFICATION.js";
3
+
4
+ export class SoftBillboardParticlePool {
5
+ __pool = new ParticlePool(PARTICULAR_PARTICLE_SPECIFICATION);
6
+
7
+ get particle_count() {
8
+ // TODO implement
9
+ }
10
+
11
+ /**
12
+ *
13
+ * @param {ParticleLayer} layer
14
+ */
15
+ add(layer) {
16
+ // TODO implement
17
+
18
+ }
19
+
20
+ sort() {
21
+ // TODO implement
22
+ }
23
+
24
+ dispose() {
25
+ // TODO implement
26
+ }
27
+ }
@@ -0,0 +1,80 @@
1
+ import { ParticleRenderer } from "../ParticleRenderer.js";
2
+ import { ShaderManager } from "../../shader/ShaderManager.js";
3
+
4
+ export class SoftBillboardParticleRenderer extends ParticleRenderer {
5
+ /**
6
+ *
7
+ * @type {Map<Material, SoftBillboardParticlePool>}
8
+ * @private
9
+ */
10
+ __pools = new Map();
11
+ /**
12
+ *
13
+ * @private
14
+ * @type {ShaderManager}
15
+ */
16
+ __shaders;
17
+
18
+ /**
19
+ *
20
+ * @param {Engine} engine
21
+ */
22
+ constructor(engine) {
23
+ super();
24
+
25
+
26
+ this.__shaders = new ShaderManager(engine.assetManager, engine.graphics.getMaterialManager());
27
+ }
28
+
29
+ build_start() {
30
+
31
+ }
32
+
33
+ build_end() {
34
+
35
+
36
+ }
37
+
38
+ /**
39
+ *
40
+ * @param {ParticleLayer} layer
41
+ * @returns {SoftBillboardParticlePool}
42
+ * @private
43
+ */
44
+ __obtain_pool(layer) {
45
+
46
+ }
47
+
48
+ /**
49
+ *
50
+ * @param {ParticleLayer} layer
51
+ */
52
+ add(layer) {
53
+ // TODO test frustum visibility
54
+
55
+ const pool = this.__obtain_pool(layer);
56
+
57
+ pool.add(layer);
58
+ }
59
+
60
+ __sort() {
61
+ for (const [mat, pool] of this.__pools) {
62
+ pool.sort();
63
+ }
64
+
65
+ // TODO sort pools themselves
66
+ }
67
+
68
+ /**
69
+ * Release resources
70
+ */
71
+ dispose() {
72
+ for (const [mat, pool] of this.__pools) {
73
+ pool.dispose();
74
+ }
75
+
76
+ this.__pools.clear();
77
+
78
+ this.__shaders.dispose();
79
+ }
80
+ }
@@ -219,17 +219,22 @@ export class ShaderManager {
219
219
 
220
220
  this.materialMap.forEach(function (entry) {
221
221
 
222
- entry.emitters.forEach(function (emitter) {
222
+ const emitters = entry.emitters;
223
+ const emitter_count = emitters.length;
224
+
225
+ for (let i = 0; i < emitter_count; i++) {
226
+ const emitter = emitters[i];
223
227
  //mark sprites for an update
224
228
  emitter.setFlag(ParticleEmitterFlag.SpritesNeedUpdate);
225
- });
229
+ }
230
+
226
231
  });
227
232
 
228
233
  // console.timeEnd("ShaderManager.updateSpriteTexture");
229
234
  }
230
235
 
231
236
  /**
232
- *
237
+ * @private
233
238
  * @returns {Material}
234
239
  * @param {ParticleEmitter} emitter
235
240
  */
@@ -249,7 +254,7 @@ export class ShaderManager {
249
254
 
250
255
  const ref = this.__material_manager.obtain(shader);
251
256
 
252
- // TODO track referecen and release it eventually
257
+ // TODO track reference and release it eventually
253
258
 
254
259
  return ref.getValue();
255
260
  }
@@ -424,6 +429,13 @@ export class ShaderManager {
424
429
 
425
430
  this.__common_uniforms.resolution.value.set(x, y);
426
431
  }
432
+
433
+ /**
434
+ * Dispose of any used resources
435
+ */
436
+ dispose() {
437
+ // TODO implement
438
+ }
427
439
  }
428
440
 
429
441
  /**
@@ -6,7 +6,6 @@ import ShaderChunks from './lib/ShaderChunks.js';
6
6
 
7
7
  function vertex() {
8
8
  return `
9
-
10
9
  #define PHYSICAL
11
10
  #define STANDARD
12
11
 
@@ -86,7 +85,6 @@ function vertex() {
86
85
 
87
86
  function fragment() {
88
87
  return `
89
-
90
88
  #define PHYSICAL
91
89
  #define STANDARD
92
90
 
@@ -305,6 +303,8 @@ function fragment() {
305
303
 
306
304
  ${ShaderChunks.clouds_pars_fragment}
307
305
 
306
+ out highp vec4 pc_fragColor;
307
+
308
308
  void main() {
309
309
  vec4 splatDiffuseColor = computeSplatMix(vUv);
310
310
 
@@ -363,30 +363,30 @@ function fragment() {
363
363
 
364
364
  vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
365
365
 
366
- gl_FragColor = vec4( outgoingLight, diffuseColor.a );
366
+ pc_fragColor = vec4( outgoingLight, diffuseColor.a );
367
367
 
368
368
  #if defined( TONE_MAPPING )
369
- gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );
369
+ pc_fragColor.rgb = toneMapping( pc_fragColor.rgb );
370
370
  #endif
371
371
 
372
372
  //encode fragment
373
- gl_FragColor = linearToOutputTexel( gl_FragColor );
373
+ pc_fragColor = linearToOutputTexel( pc_fragColor );
374
374
  #ifdef USE_FOG
375
375
  #ifdef FOG_EXP2
376
376
  float fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );
377
377
  #else
378
378
  float fogFactor = smoothstep( fogNear, fogFar, fogDepth );
379
379
  #endif
380
- gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );
380
+ pc_fragColor.rgb = mix( pc_fragColor.rgb, fogColor, fogFactor );
381
381
  #endif
382
382
 
383
383
  #ifdef PREMULTIPLIED_ALPHA
384
384
  // Get get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.
385
- gl_FragColor.rgb *= gl_FragColor.a;
385
+ pc_fragColor.rgb *= pc_fragColor.a;
386
386
  #endif
387
387
 
388
388
  #ifdef DITHERING
389
- gl_FragColor.rgb = dithering( gl_FragColor.rgb );
389
+ pc_fragColor.rgb = dithering( pc_fragColor.rgb );
390
390
  #endif
391
391
  }
392
392
  `;
@@ -21,7 +21,8 @@ export class TextureAtlasDebugger {
21
21
  left: "0",
22
22
  zIndex: 1000,
23
23
  border: "1px solid red",
24
- pointerEvents: 'none'
24
+ pointerEvents: 'none',
25
+ background: 'rgba(0,0,0,0.8)'
25
26
  });
26
27
 
27
28
  const ctx = this.vAtlasContent.el.getContext('2d');