@woosh/meep-engine 2.33.20 → 2.33.24

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 (285) hide show
  1. package/core/assert.js +3 -1
  2. package/core/bvh2/BinaryNode.js +1 -1
  3. package/core/bvh2/aabb3/AABB3.js +18 -0
  4. package/core/bvh2/aabb3/AABB3Math.js +1 -1
  5. package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
  6. package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
  7. package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
  8. package/core/bvh2/traversal/__detailed_box_volume_intersection.js +11 -8
  9. package/core/collection/ArrayUtils.js +1 -1
  10. package/core/collection/HashMap.js +66 -22
  11. package/core/collection/array/arrayQuickSort.js +9 -6
  12. package/core/collection/array/array_swap.js +22 -0
  13. package/core/collection/array/computeHashArray.js +22 -0
  14. package/core/collection/array/computeHashIntegerArray.js +15 -0
  15. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  16. package/core/color/Color.js +2 -1
  17. package/core/function/FunctionCompiler.js +2 -1
  18. package/core/geom/3d/CircleMath.js +4 -4
  19. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  20. package/core/geom/3d/cone/computeConeBoundingBox.js +4 -4
  21. package/core/geom/3d/{compute_bounding_cone_of_2_cones.js → cone/compute_bounding_cone_of_2_cones.js} +3 -3
  22. package/core/geom/3d/{compute_bounding_cone_of_2_cones.spec.js → cone/compute_bounding_cone_of_2_cones.spec.js} +1 -1
  23. package/core/geom/3d/frustum/array_setFromProjectionMatrix.js +1 -1
  24. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +11 -3
  25. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  26. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  27. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  28. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  29. package/core/geom/3d/{encode_unit3_hemioct.js → normal/hemioct/encode_unit3_hemioct.js} +0 -0
  30. package/core/geom/3d/{unit_hemioct.spec.js → normal/hemioct/unit_hemioct.spec.js} +1 -1
  31. package/core/geom/3d/normal/lamber_azimuth/transform.js +61 -0
  32. package/core/geom/3d/normal/spherical/sphere_map_transform.js +77 -0
  33. package/core/geom/3d/{lerp_planes_to_array.js → plane/lerp_planes_to_array.js} +1 -3
  34. package/core/geom/3d/plane/plane3_lerp.js +3 -1
  35. package/core/geom/3d/plane/plane3_slerp.js +4 -1
  36. package/core/geom/3d/{plane_computeConvex3PlaneIntersection.js → plane/plane_computeConvex3PlaneIntersection.js} +14 -16
  37. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  38. package/core/geom/3d/shape/AbstractShape3D.js +29 -0
  39. package/core/geom/3d/shape/CompositeShape.js +60 -0
  40. package/core/geom/3d/shape/TransformedShape3D.js +70 -0
  41. package/core/geom/3d/shape/UnitCubeShape3D.js +13 -0
  42. package/core/geom/3d/shape/UnitSphereShape3D.js +16 -0
  43. package/core/geom/3d/topology/TopoTriangle.js +1 -1
  44. package/core/geom/3d/topology/TopoVertex.js +1 -1
  45. package/core/geom/3d/topology/bounds/computeTraingleClusterNormalBoundingCone.js +2 -2
  46. package/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +1 -1
  47. package/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +1 -1
  48. package/core/geom/3d/triangle/computeTrianglePlaneSide.js +1 -1
  49. package/core/geom/3d/triangle/computeTriangleRayIntersection.js +1 -1
  50. package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
  51. package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
  52. package/core/geom/AABB2.js +1 -1
  53. package/core/geom/ConicRay.js +3 -1
  54. package/core/geom/LineSegment.js +1 -77
  55. package/core/geom/Matrix4.js +8 -8
  56. package/core/geom/Plane.js +15 -10
  57. package/core/geom/Quaternion.js +2 -1
  58. package/core/geom/Rectangle.js +2 -1
  59. package/core/geom/Vector1.js +1 -1
  60. package/core/geom/Vector3.d.ts +2 -0
  61. package/core/geom/Vector3.js +35 -159
  62. package/core/geom/Vector3.spec.js +2 -1
  63. package/core/geom/Vector4.js +2 -1
  64. package/core/geom/random/randomPointInBox.js +7 -3
  65. package/core/geom/random/randomPointInPoint.js +6 -3
  66. package/core/geom/random/randomPointInSphere.js +6 -3
  67. package/core/geom/random/randomPointOnBox.js +7 -3
  68. package/core/geom/random/randomPointOnSphere.js +6 -3
  69. package/core/geom/v3_angle_between.js +31 -0
  70. package/core/geom/v3_distance.js +16 -0
  71. package/core/geom/v3_distance_sqr.js +17 -0
  72. package/core/geom/v3_dot.js +13 -0
  73. package/core/geom/v3_length.js +10 -0
  74. package/core/geom/v3_length_sqr.js +10 -0
  75. package/core/geom/v3_lerp.js +21 -0
  76. package/core/geom/v3_slerp.js +48 -0
  77. package/core/graph/graph_k_means_cluster.js +1 -1
  78. package/core/math/MathUtils.js +0 -354
  79. package/core/math/MathUtils.spec.js +7 -1
  80. package/core/math/gaussian.js +9 -0
  81. package/core/math/hash/computeHashFloat.js +17 -0
  82. package/core/math/hash/computeHashFloatArray.js +34 -0
  83. package/core/math/hash/computeObjectHash.js +54 -0
  84. package/core/math/intersects1D.js +19 -0
  85. package/core/math/interval/NumericInterval.js +2 -2
  86. package/core/math/isValueBetween.js +10 -0
  87. package/core/math/isValueBetweenInclusive.js +10 -0
  88. package/core/math/noise/curl_noise_3dt.js +1 -1
  89. package/core/math/noise/sdnoise.js +10 -10
  90. package/core/math/overlap1D.js +19 -0
  91. package/core/math/pingpong.js +17 -0
  92. package/core/math/random/makeRangedRandom.js +19 -0
  93. package/core/math/random/randomFloatBetween.js +14 -0
  94. package/core/math/random/randomFromArray.js +19 -0
  95. package/core/math/random/randomGaussian.js +15 -0
  96. package/core/math/random/randomIntegerBetween.js +14 -0
  97. package/core/math/random/roundFair.js +15 -0
  98. package/core/math/separation1D.js +21 -0
  99. package/core/math/solveQuadratic.js +25 -0
  100. package/core/model/BoundedValue.js +1 -1
  101. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  102. package/core/model/node-graph/node/Port.js +1 -1
  103. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  104. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  105. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  106. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  107. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  108. package/core/model/stat/LinearModifier.js +1 -1
  109. package/core/primitives/array/computeIntegerArrayHash.js +6 -1
  110. package/engine/animation/curve/AnimationCurve.js +72 -0
  111. package/engine/animation/curve/Keyframe.js +27 -0
  112. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  113. package/engine/asset/Asset.js +1 -1
  114. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  115. package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
  116. package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
  117. package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
  118. package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
  119. package/engine/asset/loaders/material/computeMaterialHash.js +4 -3
  120. package/engine/asset/loaders/material/computeTextureEquality.js +13 -5
  121. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  122. package/engine/ecs/animation/Animation.js +2 -1
  123. package/engine/ecs/animation/InverseKinematics.js +2 -1
  124. package/engine/ecs/animation/OneBoneSurfaceAlignmentSolver.js +3 -1
  125. package/engine/ecs/animation/TwoBoneInverseKinematicsSolver.js +3 -1
  126. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  127. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  128. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  129. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  130. package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
  131. package/engine/ecs/fow/FogOfWar.js +2 -3
  132. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  133. package/engine/ecs/gui/GUIElement.js +1 -1
  134. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  135. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +1 -1
  136. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  137. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  138. package/engine/ecs/systems/SteeringSystem.js +3 -2
  139. package/engine/ecs/terrain/ecs/Terrain.js +6 -0
  140. package/engine/ecs/terrain/ecs/layers/TerrainLayers.js +5 -0
  141. package/engine/ecs/terrain/ecs/splat/SplatMapping.js +5 -0
  142. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  143. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  144. package/engine/ecs/util/hideEntityGracefully.js +18 -0
  145. package/engine/graphics/GraphicsEngine.js +1 -0
  146. package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
  147. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  148. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  149. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  150. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  151. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  152. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  153. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  154. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  155. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +2 -2
  156. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  157. package/engine/graphics/ecs/highlight/renderer/OutlineRenderer.js +0 -53
  158. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  159. package/engine/graphics/ecs/light/Light.js +3 -0
  160. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  161. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  162. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  163. package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
  164. package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
  165. package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
  166. package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
  167. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  168. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  169. package/engine/graphics/geometry/bvh/buffered/BVHGeometryRaycaster.js +2 -1
  170. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  171. package/engine/graphics/micron/build/clustering/computeFaceCurvatureScore.js +1 -1
  172. package/engine/graphics/micron/build/clustering/compute_face_connection_weight.js +1 -1
  173. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  174. package/engine/graphics/micron/build/hierarchy/computePatchMergeScore.js +1 -1
  175. package/engine/graphics/micron/build/hierarchy/patch_combine.js +1 -1
  176. package/engine/graphics/micron/buildPatchwork.js +1 -1
  177. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  178. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  179. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  180. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  181. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  182. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
  183. package/engine/graphics/micron/render/refinement/is_patch_facing_back.js +2 -2
  184. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  185. package/engine/graphics/particles/particular/engine/ParticularEngine.js +4 -2
  186. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
  187. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +92 -144
  188. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
  189. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +51 -12
  190. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +3 -2
  191. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
  192. package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
  193. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  194. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  195. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  196. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  197. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +21 -0
  198. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +0 -20
  199. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  200. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +7 -25
  201. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  202. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  203. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  204. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  205. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  206. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  207. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  208. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +384 -0
  209. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +558 -0
  210. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  211. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  212. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  213. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  214. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  215. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  216. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  217. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  218. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  219. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  220. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  221. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
  222. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +1 -1
  223. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  224. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  225. package/engine/graphics/render/forward_plus/LightManager.js +126 -95
  226. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  227. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  228. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  229. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  230. package/engine/graphics/render/forward_plus/computeFrustumCorners.js +15 -33
  231. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  232. package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +12 -2
  233. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +6 -6
  234. package/engine/graphics/render/forward_plus/prototypeLightManager.js +231 -136
  235. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  236. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  237. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  238. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
  239. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  240. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  241. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  242. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  243. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  244. package/engine/graphics/render/layers/RenderLayerUtils.js +8 -5
  245. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  246. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
  247. package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
  248. package/engine/graphics/texture/atlas/TextureAtlas.js +18 -14
  249. package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
  250. package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
  251. package/engine/graphics/texture/sampler/Sampler2D.js +8 -7
  252. package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
  253. package/engine/graphics/texture/sampler/scaleSampler2D.js +7 -10
  254. package/engine/graphics/trail/x/RibbonMaterialX.js +3 -3
  255. package/engine/graphics/trail/x/RibbonX.js +17 -2
  256. package/engine/graphics/trail/x/RibbonXPlugin.js +51 -1
  257. package/engine/graphics/util/projectSphere.js +1 -1
  258. package/engine/grid/components/GridObstacle.js +3 -10
  259. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  260. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  261. package/engine/navigation/ecs/components/Path.js +3 -2
  262. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  263. package/engine/reference/v2/Reference.js +6 -0
  264. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  265. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  266. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  267. package/engine/ui/notification/notificationGenerator.js +1 -1
  268. package/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +3 -2
  269. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  270. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  271. package/generation/markers/GridCellActionPlaceMarker.js +13 -1
  272. package/generation/markers/MarkerNode.js +6 -0
  273. package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
  274. package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
  275. package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
  276. package/generation/theme/ThemeEngine.js +5 -2
  277. package/misc/makeMaterialIconCached.js +2 -2
  278. package/package.json +3 -3
  279. package/view/View.js +4 -2
  280. package/view/elements/image/HTMLElementCacheKey.js +2 -1
  281. package/view/elements/radial/RadialText.js +2 -1
  282. package/view/minimap/gl/MinimapMarkersGL.js +19 -101
  283. package/view/minimap/gl/buildMaterial.js +94 -0
  284. package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
  285. package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -345
@@ -1,7 +1,8 @@
1
- import { computeHashArray, computeHashIntegerArray } from "../../../core/math/MathUtils.js";
2
1
  import { isArrayEqual } from "../../../core/collection/ArrayUtils.js";
3
2
  import { KeyValuePair } from "../../../core/collection/KeyValuePair.js";
4
3
  import { computeStringHash } from "../../../core/primitives/strings/computeStringHash.js";
4
+ import { computeHashArray } from "../../../core/collection/array/computeHashArray.js";
5
+ import { computeHashIntegerArray } from "../../../core/collection/array/computeHashIntegerArray.js";
5
6
 
6
7
  /**
7
8
  *
@@ -1,7 +1,8 @@
1
1
  import View from "../../View.js";
2
2
  import SVG, { svgCircularPath } from "../../SVG.js";
3
- import { isValueBetween, PI2 } from "../../../core/math/MathUtils.js";
3
+ import { PI2 } from "../../../core/math/MathUtils.js";
4
4
  import { assert } from "../../../core/assert.js";
5
+ import { isValueBetween } from "../../../core/math/isValueBetween.js";
5
6
 
6
7
  let idCount = 0;
7
8
 
@@ -1,19 +1,6 @@
1
- import {
2
- DataTexture,
3
- LinearMipMapLinearFilter,
4
- NearestFilter,
5
- NormalBlending,
6
- Points,
7
- RGBAFormat,
8
- ShaderMaterial,
9
- Vector2 as ThreeVector2
10
- } from 'three';
1
+ import { DataTexture, Points } from 'three';
11
2
  import { AssetManager } from "../../../engine/asset/AssetManager.js";
12
3
  import { ManagedAtlas } from "../../../engine/graphics/texture/atlas/ManagedTextureAtlas.js";
13
- import {
14
- ParticleAttributeType,
15
- ParticleDataType,
16
- } from "../../../engine/graphics/particles/particular/group/ParticleGroup.js";
17
4
  import { EntityObserver } from "../../../engine/ecs/EntityObserver.js";
18
5
  import { Transform } from "../../../engine/ecs/transform/Transform.js";
19
6
  import MinimapMarker from "../../../../model/game/ecs/component/minimap/MinimapMarker.js";
@@ -24,91 +11,10 @@ import { ParticleSpecification } from "../../../engine/graphics/particles/partic
24
11
  import { ParticleAttribute } from "../../../engine/graphics/particles/particular/group/ParticleAttribute.js";
25
12
  import Vector2 from "../../../core/geom/Vector2.js";
26
13
  import { writeSample2DDataToDataTexture } from "../../../engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.js";
27
-
28
- /**
29
- *
30
- * @return {ShaderMaterial}
31
- */
32
- function buildMaterial() {
33
- function vertexShader() {
34
- return `
35
- attribute float size;
36
- attribute vec4 aPatch;
37
-
38
- varying vec4 vPatch;
39
-
40
- uniform vec2 resolution;
41
-
42
- vec2 extractScale2D(mat4 matrix){
43
- float sx = length(matrix[0].xy);
44
- float sz = length(matrix[2].xy);
45
-
46
- return vec2(sx, sz);
47
- }
48
-
49
- void main() {
50
- vPatch = aPatch;
51
- vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
52
-
53
- //extract scale
54
- vec2 scale = extractScale2D(projectionMatrix);
55
-
56
- float radius = size / 2.0;
57
-
58
- gl_Position = projectionMatrix * mvPosition;
59
- gl_PointSize = resolution.y * radius * max(scale.x, scale.y);
60
- }`;
61
- }
62
-
63
- function fragmentShader() {
64
- return `
65
- uniform sampler2D atlas;
66
-
67
- varying vec4 vPatch;
68
- void main() {
69
- vec2 uv = gl_PointCoord*vPatch.zw + vPatch.xy;
70
- vec4 texel = texture2D( atlas, uv );
71
-
72
- if(texel.a == 0.0){
73
- discard;
74
- }
75
-
76
- gl_FragColor = texel;
77
- }`;
78
- }
79
-
80
-
81
- const dataTexture = new DataTexture(new Uint8Array(4), 1, 1, RGBAFormat);
82
- dataTexture.flipY = false;
83
- dataTexture.generateMipmaps = true;
84
- dataTexture.minFilter = LinearMipMapLinearFilter;
85
- dataTexture.magFilter = NearestFilter;
86
-
87
- const uniforms = {
88
- atlas: {
89
- type: 't',
90
- value: dataTexture
91
- },
92
- resolution: {
93
- type: 'v2',
94
- value: new ThreeVector2()
95
- }
96
- };
97
-
98
- const material = new ShaderMaterial({
99
- uniforms,
100
- vertexShader: vertexShader(),
101
- fragmentShader: fragmentShader(),
102
- blending: NormalBlending,
103
- lights: false,
104
- fog: false,
105
- depthTest: false,
106
- transparent: true,
107
- vertexColors: false
108
- });
109
-
110
- return material;
111
- }
14
+ import { ParticleDataType } from "../../../engine/graphics/particles/particular/group/ParticleDataType.js";
15
+ import { ParticleAttributeType } from "../../../engine/graphics/particles/particular/group/ParticleAttributeType.js";
16
+ import { buildMaterial } from "./buildMaterial.js";
17
+ import { ParticleGroup } from "../../../engine/graphics/particles/particular/group/ParticleGroup.js";
112
18
 
113
19
  /**
114
20
  *
@@ -164,7 +70,7 @@ export class MinimapMarkersGL extends MinimapWorldLayer {
164
70
  *
165
71
  * @type {ParticleGroup}
166
72
  */
167
- const particles = this.particles = particleSpecification.build();
73
+ const particles = this.particles = new ParticleGroup(particleSpecification);
168
74
 
169
75
  this.entityObserver = new EntityObserver([Transform, MinimapMarker], addElement, removeElement);
170
76
 
@@ -297,8 +203,17 @@ export class MinimapMarkersGL extends MinimapWorldLayer {
297
203
  }
298
204
 
299
205
 
206
+ /**
207
+ *
208
+ * @return {DataTexture}
209
+ * @private
210
+ */
211
+ __getAtlasTexture() {
212
+ return this.material.uniforms.atlas.value;
213
+ }
214
+
300
215
  handleAtlasUpdate() {
301
- writeSample2DDataToDataTexture(this.atlasManager.atlas.sampler, this.material.uniforms.atlas.value);
216
+ writeSample2DDataToDataTexture(this.atlasManager.atlas.sampler, this.__getAtlasTexture());
302
217
 
303
218
  this.updateSprites();
304
219
 
@@ -391,6 +306,9 @@ export class MinimapMarkersGL extends MinimapWorldLayer {
391
306
  //clear out data arrays
392
307
  this.particles.reset();
393
308
 
309
+ // release atlas GPU memory
310
+ this.__getAtlasTexture().dispose();
311
+
394
312
  //execute shutdown hooks
395
313
  this.shutdownHooks.forEach(function (hook) {
396
314
  hook();
@@ -0,0 +1,94 @@
1
+ import {
2
+ DataTexture,
3
+ LinearMipMapLinearFilter,
4
+ NearestFilter,
5
+ NormalBlending,
6
+ RGBAFormat,
7
+ ShaderMaterial,
8
+ Vector2 as ThreeVector2
9
+ } from "three";
10
+
11
+ /**
12
+ *
13
+ * @return {ShaderMaterial}
14
+ */
15
+ export function buildMaterial() {
16
+ function vertexShader() {
17
+ return `
18
+ attribute float size;
19
+ attribute vec4 aPatch;
20
+
21
+ varying vec4 vPatch;
22
+
23
+ uniform vec2 resolution;
24
+
25
+ vec2 extractScale2D(mat4 matrix){
26
+ float sx = length(matrix[0].xy);
27
+ float sz = length(matrix[2].xy);
28
+
29
+ return vec2(sx, sz);
30
+ }
31
+
32
+ void main() {
33
+ vPatch = aPatch;
34
+ vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
35
+
36
+ //extract scale
37
+ vec2 scale = extractScale2D(projectionMatrix);
38
+
39
+ float radius = size / 2.0;
40
+
41
+ gl_Position = projectionMatrix * mvPosition;
42
+ gl_PointSize = resolution.y * radius * max(scale.x, scale.y);
43
+ }`;
44
+ }
45
+
46
+ function fragmentShader() {
47
+ return `
48
+ uniform sampler2D atlas;
49
+
50
+ varying vec4 vPatch;
51
+ void main() {
52
+ vec2 uv = gl_PointCoord*vPatch.zw + vPatch.xy;
53
+ vec4 texel = texture2D( atlas, uv );
54
+
55
+ if(texel.a == 0.0){
56
+ discard;
57
+ }
58
+
59
+ gl_FragColor = texel;
60
+ }`;
61
+ }
62
+
63
+
64
+ const dataTexture = new DataTexture(new Uint8Array(4), 1, 1, RGBAFormat);
65
+ dataTexture.flipY = false;
66
+ dataTexture.generateMipmaps = true;
67
+ dataTexture.minFilter = LinearMipMapLinearFilter;
68
+ dataTexture.magFilter = NearestFilter;
69
+
70
+ const uniforms = {
71
+ atlas: {
72
+ type: 't',
73
+ value: dataTexture
74
+ },
75
+ resolution: {
76
+ type: 'v2',
77
+ value: new ThreeVector2()
78
+ }
79
+ };
80
+
81
+ const material = new ShaderMaterial({
82
+ uniforms,
83
+ vertexShader: vertexShader(),
84
+ fragmentShader: fragmentShader(),
85
+ blending: NormalBlending,
86
+ lights: false,
87
+ fog: false,
88
+ depthTest: false,
89
+ transparent: true,
90
+ vertexColors: false
91
+ });
92
+
93
+ return material;
94
+ }
@@ -1,71 +0,0 @@
1
- import { DataType } from "../../../../core/collection/table/DataType.js";
2
- import { computeStringHash } from "../../../../core/primitives/strings/computeStringHash.js";
3
- import { DataTypeByteSizes } from "../../../../core/collection/table/DataTypeByteSizes.js";
4
-
5
- export class MicronGeometryBufferAttributeSpec {
6
- constructor() {
7
- /**
8
- *
9
- * @type {string}
10
- */
11
- this.name = "";
12
- /**
13
- *
14
- * @type {DataType}
15
- */
16
- this.type = DataType.Float32;
17
- /**
18
- *
19
- * @type {number}
20
- */
21
- this.itemSize = 1;
22
-
23
- /**
24
- * Normalized values will be automatically converted to float32 in the shader
25
- * This gives good optimization opportunities for things like normal vectors
26
- * @type {boolean}
27
- */
28
- this.normalized = false;
29
- }
30
-
31
- hash() {
32
- return computeStringHash(this.name);
33
- }
34
-
35
- /**
36
- *
37
- * @param {MicronGeometryBufferAttributeSpec} other
38
- * @returns {boolean}
39
- */
40
- equals(other) {
41
- return this.type === other.type
42
- && this.itemSize === other.itemSize
43
- && this.normalized === other.normalized
44
- && this.name === other.name
45
- ;
46
- }
47
-
48
- /**
49
- *
50
- * @returns {number}
51
- */
52
- getByteSize() {
53
- return this.itemSize * DataTypeByteSizes[this.type];
54
- }
55
-
56
- /**
57
- *
58
- * @param {MicronGeometryBufferAttributeSpec} a
59
- * @param {MicronGeometryBufferAttributeSpec} b
60
- * @return {number}
61
- */
62
- static byName(a, b) {
63
- return a.name.localeCompare(b.name);
64
- }
65
- }
66
-
67
- /**
68
- * @readonly
69
- * @type {boolean}
70
- */
71
- MicronGeometryBufferAttributeSpec.prototype.isMicronGeometryBufferAttributeSpec = true;
@@ -1,345 +0,0 @@
1
- import { v3_distance_sqr } from "../../../../core/geom/Vector3.js";
2
- import { line3_computeSegmentPointDistance_sqr } from "../../../../core/geom/LineSegment.js";
3
- import { computeConePlaneSide } from "../../../../core/geom/3d/cone/computeConePlaneSide.js";
4
- import { aabb3_computeDistanceAbovePlane } from "../../../../core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js";
5
-
6
- /**
7
- *
8
- * @type {(BinaryNode|LeafNode)[]}
9
- */
10
- const stack = [];
11
-
12
- let stackPointer = 0;
13
-
14
- const _lut_array_buffer = new ArrayBuffer(84);
15
-
16
- /**
17
- * Mapping from 3 plane bitfield, corresponding to intersection point of the planes
18
- * @type {number[]}
19
- */
20
- const triplanar_corner_mapping = new Uint8Array(_lut_array_buffer, 0, 43);
21
-
22
- triplanar_corner_mapping[0b010101] = 0;
23
- triplanar_corner_mapping[0b100101] = 1;
24
- triplanar_corner_mapping[0b011001] = 2;
25
- triplanar_corner_mapping[0b101001] = 3;
26
- triplanar_corner_mapping[0b010110] = 4;
27
- triplanar_corner_mapping[0b100110] = 5;
28
- triplanar_corner_mapping[0b011010] = 6;
29
- triplanar_corner_mapping[0b101010] = 7;
30
-
31
- function analytical_triplanar_corner_mapping(field) {
32
- return ((field << 1) & 0b100) | ((field >> 2) & 0b10) | ((field >> 5) & 0b1);
33
- }
34
-
35
- /**
36
- * Mapping from 2 plane bitfield to 2 corner bitfield, corresponding to corner indices of intersecting planes
37
- * @type {number[]}
38
- */
39
- const biplanar_edge_mapping = new Uint8Array(_lut_array_buffer, 43, 41);
40
-
41
- biplanar_edge_mapping[0b000101] = 0 | (1 << 3);
42
- biplanar_edge_mapping[0b000110] = 4 | (5 << 3);
43
-
44
- biplanar_edge_mapping[0b001001] = 2 | (3 << 3);
45
- biplanar_edge_mapping[0b001010] = 6 | (7 << 3);
46
-
47
- biplanar_edge_mapping[0b010100] = 0 | (4 << 3);
48
- biplanar_edge_mapping[0b011000] = 2 | (6 << 3);
49
-
50
- biplanar_edge_mapping[0b100100] = 1 | (5 << 3);
51
- biplanar_edge_mapping[0b101000] = 3 | (7 << 3);
52
-
53
- biplanar_edge_mapping[0b010001] = 0 | (2 << 3);
54
- biplanar_edge_mapping[0b010010] = 4 | (6 << 3);
55
-
56
- biplanar_edge_mapping[0b100001] = 1 | (3 << 3);
57
- biplanar_edge_mapping[0b100010] = 5 | (7 << 3);
58
-
59
- /**
60
- *
61
- * @param {number} radius
62
- * @param {number} light_x
63
- * @param {number} light_y
64
- * @param {number} light_z
65
- * @param {number} outside_plane_count
66
- * @param {number} outside_plane_bitfield
67
- * @param {number[]} points
68
- * @return {boolean}
69
- */
70
- function detailed_sphere_frustum_intersection_test(radius, light_x, light_y, light_z, outside_plane_count, outside_plane_bitfield, points) {
71
-
72
- const radius_sqr = radius * radius;
73
-
74
- if (outside_plane_count === 3) {
75
- // nearest point in a corner, find the corner
76
- const point_index = analytical_triplanar_corner_mapping(outside_plane_bitfield);
77
-
78
- const point_address = point_index * 3;
79
-
80
- const point_x = points[point_address];
81
- const point_y = points[point_address + 1];
82
- const point_z = points[point_address + 2];
83
-
84
- const distance_to_light_sqr = v3_distance_sqr(
85
- point_x, point_y, point_z,
86
- light_x, light_y, light_z
87
- );
88
-
89
- // queryBVH_Frustum.checks_sphere_frustum_corner++;
90
-
91
- // return distance_to_light_sqr <= radius_sqr;
92
-
93
- if (distance_to_light_sqr > radius_sqr) {
94
-
95
- // queryBVH_Frustum.rejection_sphere_count++;
96
- return false;
97
- }
98
-
99
- } else if (outside_plane_count === 2) {
100
- // nearest point is on an edge of two plane intersection
101
- const edge_bitfield = biplanar_edge_mapping[outside_plane_bitfield];
102
-
103
- // get 2 corners from edge bitfield
104
- const corner_index_0 = edge_bitfield & 0b111;
105
- const corner_address_0 = corner_index_0 * 3;
106
-
107
- const corner_index_1 = (edge_bitfield >> 3) & 0b111;
108
- const corner_address_1 = corner_index_1 * 3;
109
-
110
- const point_0_x = points[corner_address_0];
111
- const point_0_y = points[corner_address_0 + 1];
112
- const point_0_z = points[corner_address_0 + 2];
113
-
114
- const point_1_x = points[corner_address_1];
115
- const point_1_y = points[corner_address_1 + 1];
116
- const point_1_z = points[corner_address_1 + 2];
117
-
118
- const distance_to_frustum_sqr = line3_computeSegmentPointDistance_sqr(
119
- point_0_x, point_0_y, point_0_z,
120
- point_1_x, point_1_y, point_1_z,
121
- light_x, light_y, light_z
122
- );
123
-
124
- // queryBVH_Frustum.checks_sphere_frustum_edge++;
125
-
126
- // return distance_to_frustum_sqr <= radius_sqr;
127
-
128
- if (distance_to_frustum_sqr > radius_sqr) {
129
-
130
- // queryBVH_Frustum.rejection_sphere_count++;
131
- return false;
132
- }
133
- }
134
-
135
- return true;
136
- }
137
-
138
- /**
139
- *
140
- * @param {PointLight} light
141
- * @param {number[]} points
142
- * @param {number[]|Float32Array|Float64Array} planes
143
- * @returns {boolean}
144
- */
145
- function point_light_inside_volume(light, points, planes) {
146
- let j = 0;
147
- let outside_plane_count = 0;
148
- let outside_plane_bitfield = 0;
149
-
150
- // validate if the sphere intersects the plane-bound space
151
-
152
- const light_position = light.position;
153
-
154
- const light_x = light_position.x;
155
- const light_y = light_position.y;
156
- const light_z = light_position.z;
157
-
158
- const radius = light.radius.getValue();
159
-
160
- // queryBVH_Frustum.checks_sphere++;
161
-
162
- for (; j < 6; j++) {
163
-
164
- const plane_address = j * 4;
165
-
166
- const plane_normal_x = planes[plane_address];
167
- const plane_normal_y = planes[plane_address + 1];
168
- const plane_normal_z = planes[plane_address + 2];
169
- const plane_constant = planes[plane_address + 3];
170
-
171
- /*
172
- compute distance from the center of the sphere to the plane
173
- NOTE: inlined computation of distance from point to plane
174
- */
175
- const distance = (plane_normal_x * light_x + plane_normal_y * light_y + plane_normal_z * light_z) + plane_constant;
176
-
177
- // queryBVH_Frustum.checks_sphere_plane++;
178
-
179
- if (distance < 0) {
180
- // center of the sphere is below the plane
181
-
182
- if (distance < -radius) {
183
- // sphere is entirely below the plane
184
-
185
- // queryBVH_Frustum.rejection_sphere_count++;
186
-
187
- return false;
188
- }
189
-
190
- // sphere intersects the plane
191
-
192
- outside_plane_count++;
193
-
194
- const plane_bit_mask = 1 << j;
195
-
196
- outside_plane_bitfield |= plane_bit_mask;
197
- }
198
-
199
- }
200
-
201
- if (outside_plane_count < 2) {
202
- return true;
203
- } else {
204
- return detailed_sphere_frustum_intersection_test(radius, light_x, light_y, light_z, outside_plane_count, outside_plane_bitfield, points);
205
- }
206
- }
207
-
208
- /**
209
- *
210
- * @param {SpotLight} light
211
- * @param {number[]} points
212
- * @param {number[]|Float32Array|Float64Array} planes
213
- * @returns {boolean}
214
- */
215
- function spot_light_inside_volume(light, points, planes) {
216
- for (let j = 0; j < 6; j++) {
217
-
218
- const plane_address = j * 4;
219
-
220
- const plane_normal_x = planes[plane_address];
221
- const plane_normal_y = planes[plane_address + 1];
222
- const plane_normal_z = planes[plane_address + 2];
223
- const plane_constant = planes[plane_address + 3];
224
-
225
- const side = computeConePlaneSide(
226
- plane_normal_x, plane_normal_y, plane_normal_z, plane_constant,
227
- light.position.x, light.position.y, light.position.z,
228
- light.direction.x, light.direction.y, light.direction.z,
229
- light.angle.getValue(), light.distance.getValue()
230
- );
231
-
232
- if (side < 0) {
233
- return false;
234
- }
235
- }
236
-
237
- return true;
238
- }
239
-
240
- /**
241
- * Most of the data is in flat continuous array for cache coherence
242
- * @param {PointLightData[]} destination
243
- * @param {number} destination_offset
244
- * @param {BinaryNode<PointLightData>} root
245
- * @param {number[]|Float32Array|Float64Array} planes
246
- * @param {number[]|Float32Array|Float64Array} points
247
- * @returns {number} number of items added to the destination, non-negative integer
248
- */
249
- export function queryBVH_Frustum(destination, destination_offset, root, planes, points) {
250
- let i = 0;
251
- let j = 0;
252
- // read out points
253
- const stackOffset = stackPointer;
254
-
255
- stack[stackPointer] = root;
256
-
257
- stackPointer++;
258
-
259
- stack_loop:while (stackPointer-- > stackOffset) {
260
-
261
- queryBVH_Frustum.iteration_count++;
262
-
263
- const n = stack[stackPointer];
264
-
265
- if (n.isBinaryNode === true) {
266
-
267
- for (j = 0; j < 6; j++) {
268
-
269
- const plane_address = j * 4;
270
-
271
- const plane_normal_x = planes[plane_address];
272
- const plane_normal_y = planes[plane_address + 1];
273
- const plane_normal_z = planes[plane_address + 2];
274
- const plane_constant = planes[plane_address + 3];
275
-
276
- const distanceAbovePlane = aabb3_computeDistanceAbovePlane(
277
- plane_normal_x, plane_normal_y, plane_normal_z, plane_constant,
278
- n.x0, n.y0, n.z0,
279
- n.x1, n.y1, n.z1
280
- );
281
-
282
- if (distanceAbovePlane < 0) {
283
- // node is below the plane
284
-
285
- queryBVH_Frustum.rejection_count++;
286
-
287
- continue stack_loop;
288
- }
289
- }
290
-
291
-
292
- if (n.right !== null) {
293
- stack[stackPointer] = n.right;
294
- stackPointer++;
295
- }
296
-
297
- if (n.left !== null) {
298
- stack[stackPointer] = n.left;
299
- stackPointer++
300
- }
301
-
302
- } else {
303
-
304
- // leaf node
305
-
306
- /**
307
- *
308
- * @type {PointLightData}
309
- */
310
- const light_data = n.object;
311
-
312
- const light = light_data.light;
313
-
314
- if (light.isPointLight) {
315
- if (!point_light_inside_volume(light, points, planes)) {
316
- continue;
317
- }
318
- } else if (light.isSpotLight) {
319
- if (!spot_light_inside_volume(light, points, planes)) {
320
- continue;
321
- }
322
- }
323
-
324
- destination[destination_offset + i] = light_data;
325
-
326
- i++;
327
- }
328
-
329
- }
330
-
331
- //drop the stack frame
332
- stackPointer = stackOffset;
333
-
334
- return i;
335
- }
336
-
337
- queryBVH_Frustum.iteration_count = 0;
338
- queryBVH_Frustum.rejection_count = 0;
339
- queryBVH_Frustum.rejection_sphere_count = 0;
340
- queryBVH_Frustum.plane_tests = 0;
341
- queryBVH_Frustum.plane_tests_early_exits = 0;
342
- queryBVH_Frustum.checks_sphere = 0;
343
- queryBVH_Frustum.checks_sphere_plane = 0;
344
- queryBVH_Frustum.checks_sphere_frustum_corner = 0;
345
- queryBVH_Frustum.checks_sphere_frustum_edge = 0;