@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,9 +1,10 @@
1
1
  import { BitSet } from "../../../../../../core/binary/BitSet.js";
2
2
  import { max3 } from "../../../../../../core/math/max3.js";
3
- import { itemSizeFromAttributeType, typedArrayConstructorFromDataType } from "../../group/ParticleGroup.js";
4
- import { BufferAttribute, BufferGeometry, DynamicDrawUsage } from 'three';
3
+ import { BufferAttribute, BufferGeometry, StreamDrawUsage } from 'three';
5
4
  import ObservedValue from "../../../../../../core/model/ObservedValue.js";
6
5
  import { typed_array_copy } from "../../../../../../core/collection/array/typed/typed_array_copy.js";
6
+ import { assert } from "../../../../../../core/assert.js";
7
+ import { compute_typed_array_constructor_from_data_type } from "../../../../../../core/collection/table/DataType2TypedArrayConstructorMapping.js";
7
8
 
8
9
  const SHRINK_THRESHOLD = 64;
9
10
  const GROW_MIN_STEP = 32;
@@ -11,13 +12,15 @@ const GROW_MIN_STEP = 32;
11
12
  export class ParticlePool {
12
13
  /**
13
14
  *
14
- * @param {ParticleSpecification} spec
15
+ * @param {VertexDataSpec} spec
15
16
  * @constructor
16
17
  */
17
18
  constructor(spec) {
19
+ assert.equal(spec.isVertexDataSpec, true, 'spec.VertexDataSpec !== true');
20
+
18
21
  /**
19
22
  *
20
- * @type {ParticleSpecification}
23
+ * @type {VertexDataSpec}
21
24
  */
22
25
  this.spec = spec;
23
26
 
@@ -224,6 +227,41 @@ export class ParticlePool {
224
227
  }
225
228
  }
226
229
 
230
+ /**
231
+ *
232
+ * @param {AttributeSpec} spec
233
+ * @return {number}
234
+ * @private
235
+ */
236
+ __compute_attribute_byte_size(spec) {
237
+
238
+ const item_size = spec.itemSize;
239
+
240
+ const TypedArrayConstructor = compute_typed_array_constructor_from_data_type(spec.type);
241
+
242
+ const element_byte_size = TypedArrayConstructor.BYTES_PER_ELEMENT;
243
+
244
+ return item_size * element_byte_size * this.capacity;
245
+ }
246
+
247
+ /**
248
+ *
249
+ * @return {number}
250
+ * @private
251
+ */
252
+ __compute_attribute_byte_size_total() {
253
+
254
+ const spec_attributes = this.spec.attributes;
255
+ const l = spec_attributes.length;
256
+
257
+ let r = 0;
258
+ for (let i = 0; i < l; i++) {
259
+ r += this.__compute_attribute_byte_size(spec_attributes[i]);
260
+ }
261
+
262
+ return r;
263
+ }
264
+
227
265
  build() {
228
266
  const geometry = new BufferGeometry();
229
267
  geometry.dynamic = true;
@@ -234,25 +272,26 @@ export class ParticlePool {
234
272
  for (let i = 0; i < l; i++) {
235
273
 
236
274
  /**
237
- * @type {ParticleAttribute}
275
+ * @type {AttributeSpec}
238
276
  */
239
277
  const attributeSpec = spec_attributes[i];
240
278
 
241
- const itemSize = itemSizeFromAttributeType(attributeSpec.type);
242
- const TypedArrayConstructor = typedArrayConstructorFromDataType(attributeSpec.dataType);
279
+ const itemSize = attributeSpec.itemSize;
280
+ const TypedArrayConstructor = compute_typed_array_constructor_from_data_type(attributeSpec.type);
243
281
 
244
282
  const newArrayLength = itemSize * this.capacity;
245
283
  const newArray = new TypedArrayConstructor(newArrayLength);
246
284
 
247
- const attribute = this.attributes[i];
248
- if (attribute !== undefined && attribute.count !== 0) {
285
+ const old_attribute = this.attributes[i];
286
+
287
+ if (old_attribute !== undefined && old_attribute.count !== 0) {
249
288
  //copy old data
250
- typed_array_copy(attribute.array, newArray);
289
+ typed_array_copy(old_attribute.array, newArray);
251
290
  }
252
291
 
253
- const newAttribute = new BufferAttribute(newArray, itemSize);
292
+ const newAttribute = new BufferAttribute(newArray, itemSize, attributeSpec.normalized);
254
293
 
255
- newAttribute.setUsage(DynamicDrawUsage);
294
+ newAttribute.setUsage(StreamDrawUsage);
256
295
  newAttribute.name = attributeSpec.name;
257
296
 
258
297
  this.attributes[i] = newAttribute;
@@ -1,7 +1,8 @@
1
1
  import { ParticlePool } from "./ParticlePool.js";
2
- import { ParticleAttributeType, ParticleDataType, } from "../../group/ParticleGroup.js";
3
2
  import { ParticleSpecification } from "../../group/ParticleSpecification.js";
4
3
  import { ParticleAttribute } from "../../group/ParticleAttribute.js";
4
+ import { ParticleDataType } from "../../group/ParticleDataType.js";
5
+ import { ParticleAttributeType } from "../../group/ParticleAttributeType.js";
5
6
 
6
7
  /**
7
8
  *
@@ -184,4 +185,4 @@ test('read/write scalar attribute', () => {
184
185
  pool.writeAttributeScalar(1, 0, 42);
185
186
 
186
187
  expect(pool.readAttributeScalar(1, 0)).toBe(42);
187
- });
188
+ });
@@ -0,0 +1,37 @@
1
+ import { EmissionShapeType } from "./EmissionShapeType.js";
2
+ import { randomPointInPoint } from "../../../../../../core/geom/random/randomPointInPoint.js";
3
+ import { EmissionFromType } from "./EmissionFromType.js";
4
+ import { randomPointInSphere } from "../../../../../../core/geom/random/randomPointInSphere.js";
5
+ import { randomPointOnSphere } from "../../../../../../core/geom/random/randomPointOnSphere.js";
6
+ import { randomPointInBox } from "../../../../../../core/geom/random/randomPointInBox.js";
7
+ import { randomPointOnBox } from "../../../../../../core/geom/random/randomPointOnBox.js";
8
+
9
+ /**
10
+ *
11
+ * @param {EmissionFromType} emissionType
12
+ * @param {EmissionShapeType} emissionShape
13
+ * @returns {function(random: function, result:(number[]|Float32Array|Float64Array), result_offset:number):void}
14
+ */
15
+ export function computeEmissionFunction(emissionType, emissionShape) {
16
+ if (emissionShape === EmissionShapeType.Point) {
17
+ return randomPointInPoint;
18
+ } else if (emissionShape === EmissionShapeType.Sphere) {
19
+ if (emissionType === EmissionFromType.Volume) {
20
+ return randomPointInSphere;
21
+ } else if (emissionType === EmissionFromType.Shell) {
22
+ return randomPointOnSphere;
23
+ } else {
24
+ throw new TypeError('Unsupported EmissionFrom Type');
25
+ }
26
+ } else if (emissionShape === EmissionShapeType.Box) {
27
+ if (emissionType === EmissionFromType.Volume) {
28
+ return randomPointInBox;
29
+ } else if (emissionType === EmissionFromType.Shell) {
30
+ return randomPointOnBox;
31
+ } else {
32
+ throw new TypeError('Unsupported EmissionFrom Type');
33
+ }
34
+ } else {
35
+ throw new TypeError('Unsupported emission shape');
36
+ }
37
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ *
3
+ * @param {number} index
4
+ * @param {number[]|Float32Array} positionArray
5
+ * @param {Vector3} planeNormal
6
+ * @return {number}
7
+ */
8
+ export function distance_to_camera(index, positionArray, planeNormal) {
9
+ const address = index * 3;
10
+
11
+ // extract position components of the particle
12
+ const x = positionArray[address];
13
+ const y = positionArray[address + 1];
14
+ const z = positionArray[address + 2];
15
+
16
+ const planeNormalX = planeNormal.x;
17
+ const planeNormalY = planeNormal.y;
18
+ const planeNormalZ = planeNormal.z;
19
+
20
+ // compute dot product
21
+ const dot = x * planeNormalX + y * planeNormalY + z * planeNormalZ;
22
+
23
+ // use dot product instead of the actual distance to save computation. Difference is going to be constant
24
+ return dot;
25
+ }
@@ -86,10 +86,16 @@ export class ParameterLookupTableSerializationAdapter extends BinaryClassSeriali
86
86
 
87
87
  const dataLength = itemCount * value.itemSize;
88
88
 
89
- const data = new Float32Array(dataLength);
89
+ /**
90
+ * Reserve a continuous chunk of memory for faster access
91
+ * @type {ArrayBuffer}
92
+ */
93
+ const array_buffer = new ArrayBuffer((dataLength + itemCount) * 4);
94
+
95
+ const data = new Float32Array(array_buffer, itemCount * 4, dataLength);
90
96
  buffer.readFloat32Array(data, 0, dataLength);
91
97
 
92
- const positions = new Float32Array(itemCount);
98
+ const positions = new Float32Array(array_buffer, 0, itemCount);
93
99
  buffer.readFloat32Array(positions, 0, itemCount);
94
100
 
95
101
  value.write(data, positions);
@@ -1,11 +1,12 @@
1
1
  import { inverseLerp } from "../../../../../../core/math/inverseLerp.js";
2
- import { computeHashFloatArray, computeHashIntegerArray } from "../../../../../../core/math/MathUtils.js";
3
2
  import { assert } from "../../../../../../core/assert.js";
4
3
  import { max2 } from "../../../../../../core/math/max2.js";
5
4
  import { min2 } from "../../../../../../core/math/min2.js";
6
5
  import { mix } from "../../../../../../core/math/mix.js";
7
6
  import { ParameterLookupTableFlags } from "./ParameterLookupTableFlags.js";
8
7
  import { ParameterLookupTableSerializationAdapter } from "../emitter/serde/ParameterLookupTableSerializationAdapter.js";
8
+ import { computeHashIntegerArray } from "../../../../../../core/collection/array/computeHashIntegerArray.js";
9
+ import { computeHashFloatArray } from "../../../../../../core/math/hash/computeHashFloatArray.js";
9
10
 
10
11
 
11
12
  export class ParameterLookupTable {
@@ -5,8 +5,8 @@
5
5
  * @constructor
6
6
  */
7
7
  import { ParameterLookupTable } from "./ParameterLookupTable.js";
8
- import { computeHashIntegerArray } from "../../../../../../core/math/MathUtils.js";
9
8
  import { computeStringHash } from "../../../../../../core/primitives/strings/computeStringHash.js";
9
+ import { computeHashIntegerArray } from "../../../../../../core/collection/array/computeHashIntegerArray.js";
10
10
 
11
11
  export class ParameterTrack {
12
12
  constructor(name, lut) {
@@ -1,10 +1,10 @@
1
- import { computeHashIntegerArray} from "../../../../../../core/math/MathUtils.js";
2
1
  import { assert } from "../../../../../../core/assert.js";
3
2
  import { max2 } from "../../../../../../core/math/max2.js";
4
3
  import { min2 } from "../../../../../../core/math/min2.js";
5
4
  import { ParameterLookupTable } from "./ParameterLookupTable.js";
6
5
  import List from "../../../../../../core/collection/list/List.js";
7
6
  import { computeStringHash } from "../../../../../../core/primitives/strings/computeStringHash.js";
7
+ import { computeHashIntegerArray } from "../../../../../../core/collection/array/computeHashIntegerArray.js";
8
8
 
9
9
 
10
10
  export class ParticleParameter {
@@ -0,0 +1,21 @@
1
+ import { ParticleSpecification } from "../../../group/ParticleSpecification.js";
2
+ import { ParticleAttribute } from "../../../group/ParticleAttribute.js";
3
+ import { ParticleAttributeType } from "../../../group/ParticleAttributeType.js";
4
+ import { ParticleDataType } from "../../../group/ParticleDataType.js";
5
+
6
+ export const BILLBOARD_PARTICLE_ATTRIBUTE_POSITION = 0;
7
+ export const BILLBOARD_PARTICLE_ATTRIBUTE_UV = 1;
8
+ export const BILLBOARD_PARTICLE_ATTRIBUTE_SIZE = 2;
9
+ export const BILLBOARD_PARTICLE_ATTRIBUTE_VELOCITY = 3;
10
+ export const BILLBOARD_PARTICLE_ATTRIBUTE_COLOR = 5;
11
+ export const BILLBOARD_PARTICLE_ATTRIBUTE_BLEND = 6;
12
+
13
+ export const BILLBOARD_PARTICLE_SPECIFICATION = new ParticleSpecification();
14
+
15
+ BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('position', ParticleAttributeType.Vector3, ParticleDataType.Float32));
16
+ BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('atlasPatch', ParticleAttributeType.Vector4, ParticleDataType.Float32));
17
+ BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('size', ParticleAttributeType.Scalar, ParticleDataType.Float32));
18
+ BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('velocity', ParticleAttributeType.Vector3, ParticleDataType.Float32));
19
+ BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('rotation', ParticleAttributeType.Scalar, ParticleDataType.Float32));
20
+ BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('color', ParticleAttributeType.Vector4, ParticleDataType.Float32));
21
+ BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('blending', ParticleAttributeType.Scalar, ParticleDataType.Uint8));
@@ -1,25 +1,5 @@
1
1
  import { AddEquation, CustomBlending, Matrix4, OneFactor, OneMinusSrcAlphaFactor, ShaderMaterial } from "three";
2
2
  import { Vector2 as ThreeVector2 } from "three/src/math/Vector2.js";
3
- import { ParticleSpecification } from "../../../group/ParticleSpecification.js";
4
- import { ParticleAttribute } from "../../../group/ParticleAttribute.js";
5
- import { ParticleAttributeType, ParticleDataType } from "../../../group/ParticleGroup.js";
6
-
7
- export const BILLBOARD_PARTICLE_SPECIFICATION = new ParticleSpecification();
8
-
9
- BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('position', ParticleAttributeType.Vector3, ParticleDataType.Float32));
10
- BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('atlasPatch', ParticleAttributeType.Vector4, ParticleDataType.Float32));
11
- BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('size', ParticleAttributeType.Scalar, ParticleDataType.Float32));
12
- BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('velocity', ParticleAttributeType.Vector3, ParticleDataType.Float32));
13
- BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('rotation', ParticleAttributeType.Scalar, ParticleDataType.Float32));
14
- BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('color', ParticleAttributeType.Vector4, ParticleDataType.Float32));
15
- BILLBOARD_PARTICLE_SPECIFICATION.add(new ParticleAttribute('blending', ParticleAttributeType.Scalar, ParticleDataType.Uint8));
16
-
17
- export const BILLBOARD_PARTICLE_ATTRIBUTE_POSITION = 0;
18
- export const BILLBOARD_PARTICLE_ATTRIBUTE_UV = 1;
19
- export const BILLBOARD_PARTICLE_ATTRIBUTE_SIZE = 2;
20
- export const BILLBOARD_PARTICLE_ATTRIBUTE_VELOCITY = 3;
21
- export const BILLBOARD_PARTICLE_ATTRIBUTE_COLOR = 5;
22
- export const BILLBOARD_PARTICLE_ATTRIBUTE_BLEND = 6;
23
3
 
24
4
  const DEPTH_ERROR_MARGIN = 0.0001;
25
5
 
@@ -1,14 +1,6 @@
1
1
  import { EngineHarness } from "../../../../../../EngineHarness.js";
2
2
  import { ParticlePool } from "../../emitter/ParticlePool.js";
3
- import {
4
- BILLBOARD_PARTICLE_ATTRIBUTE_BLEND,
5
- BILLBOARD_PARTICLE_ATTRIBUTE_COLOR,
6
- BILLBOARD_PARTICLE_ATTRIBUTE_POSITION,
7
- BILLBOARD_PARTICLE_ATTRIBUTE_SIZE,
8
- BILLBOARD_PARTICLE_ATTRIBUTE_UV,
9
- BILLBOARD_PARTICLE_SPECIFICATION,
10
- make_particle_billboard_shader
11
- } from "./ParticleBillboardMaterial.js";
3
+ import { make_particle_billboard_shader } from "./ParticleBillboardMaterial.js";
12
4
  import { DataTexture, LinearFilter, LinearMipMapLinearFilter, Matrix4, Points } from "three";
13
5
  import { ManagedAtlas } from "../../../../../texture/atlas/ManagedTextureAtlas.js";
14
6
  import { writeSample2DDataToDataTexture } from "../../../../../texture/sampler/writeSampler2DDataToDataTexture.js";
@@ -21,6 +13,14 @@ import Mesh from "../../../../../ecs/mesh/Mesh.js";
21
13
  import Vector3 from "../../../../../../../core/geom/Vector3.js";
22
14
  import { RenderPassType } from "../../../../../render/RenderPassType.js";
23
15
  import { StandardFrameBuffers } from "../../../../../StandardFrameBuffers.js";
16
+ import {
17
+ BILLBOARD_PARTICLE_ATTRIBUTE_BLEND,
18
+ BILLBOARD_PARTICLE_ATTRIBUTE_COLOR,
19
+ BILLBOARD_PARTICLE_ATTRIBUTE_POSITION,
20
+ BILLBOARD_PARTICLE_ATTRIBUTE_SIZE,
21
+ BILLBOARD_PARTICLE_ATTRIBUTE_UV,
22
+ BILLBOARD_PARTICLE_SPECIFICATION
23
+ } from "./BILLBOARD_PARTICLE_SPECIFICATION.js";
24
24
 
25
25
 
26
26
  const engineHarness = new EngineHarness();
@@ -115,6 +115,8 @@ export class ShaderManager {
115
115
  anisotropy: 0
116
116
  });
117
117
 
118
+ this.spriteTexture.name = 'Sprite sheet';
119
+
118
120
  /**
119
121
  *
120
122
  * @type {Texture|null}
@@ -284,37 +286,14 @@ export class ShaderManager {
284
286
 
285
287
  console.warn('Recomputing hashes ... ');
286
288
 
287
- this.recordGraveyard.updateHashes();
288
- this.materialMap.updateHashes();
289
+ this.recordGraveyard.rebuild();
290
+ this.materialMap.rebuild();
289
291
  }
290
292
 
291
293
  this.materialMap.delete(bestKey);
292
294
  }
293
295
  }
294
296
 
295
- /**
296
- *
297
- * @param {MaterialRecord} entry
298
- */
299
- destroyMaterialRecord(entry) {
300
-
301
- const parameters = entry.parameters.asArray();
302
-
303
- //remove parameters from parameter sheet
304
- for (let i = 0; i < parameters.length; i++) {
305
- const particleParameter = parameters[i];
306
- this.parameterSheet.remove(particleParameter);
307
- }
308
-
309
- //unlink signal bindings
310
- entry.signalBindings.forEach(function (binding) {
311
- binding.unlink();
312
- });
313
-
314
- //decommission material
315
- entry.material.dispose();
316
- }
317
-
318
297
  /**
319
298
  *
320
299
  * @param {ParticleEmitter} emitter
@@ -369,6 +348,7 @@ export class ShaderManager {
369
348
  const cameraNear = camera.near;
370
349
  const cameraFar = camera.far;
371
350
 
351
+ // TODO use a shader uniform structure to avoid iteration
372
352
  this.materialMap.forEach(function (entry) {
373
353
  const uniforms = entry.material.uniforms;
374
354
 
@@ -386,6 +366,7 @@ export class ShaderManager {
386
366
  setDepthTexture(texture) {
387
367
  this.depthTexture = texture;
388
368
 
369
+ // TODO use a shader uniform structure to avoid iteration
389
370
  this.materialMap.forEach(function (entry) {
390
371
  const material = entry.material;
391
372
  material.uniforms.tDepth.value = texture;
@@ -400,6 +381,7 @@ export class ShaderManager {
400
381
  setViewportSize(x, y) {
401
382
  this.viewportSize.set(x, y);
402
383
 
384
+ // TODO use a shader uniform structure to avoid iteration
403
385
  this.materialMap.forEach(function (entry) {
404
386
  entry.material.uniforms.resolution.value.set(x, y);
405
387
  });
@@ -18,15 +18,12 @@ export class SimulationStepApplyForce extends AbstractSimulationStep {
18
18
  const liveParticleCount = particles.size();
19
19
 
20
20
  const layerMask = this.layer_mask;
21
- const layerCount = this.layer_count;
22
21
 
23
22
  for (let i = 0; i < liveParticleCount; i++) {
24
23
 
25
24
  const layer_position = particles.readAttributeScalar(i, PARTICLE_ATTRIBUTE_LAYER_POSITION);
26
25
 
27
- const layer_index = layer_position * layerCount;
28
-
29
- if ((layerMask & (1 << layer_index)) === 0) {
26
+ if ((layerMask & (1 << layer_position)) === 0) {
30
27
  //skip
31
28
  continue;
32
29
  }
@@ -35,7 +32,7 @@ export class SimulationStepApplyForce extends AbstractSimulationStep {
35
32
  particles.readAttributeVector3(i, PARTICLE_ATTRIBUTE_VELOCITY, velocity);
36
33
 
37
34
 
38
- const params = layer_parameters[layer_index];
35
+ const params = layer_parameters[layer_position];
39
36
 
40
37
  const force_x = params[0];
41
38
  const force_y = params[1];
@@ -29,17 +29,13 @@ export class SimulationStepCurlNoiseAcceleration extends AbstractSimulationStep
29
29
 
30
30
  const liveParticleCount = particles.size();
31
31
 
32
- const layerCount = this.layer_count;
33
-
34
32
  const layerMask = this.layer_mask;
35
33
 
36
34
  for (let i = 0; i < liveParticleCount; i++) {
37
35
 
38
36
  const layer_position = particles.readAttributeScalar(i, PARTICLE_ATTRIBUTE_LAYER_POSITION);
39
37
 
40
- const layer_index = layer_position * layerCount;
41
-
42
- if ((layerMask & (1 << layer_index)) === 0) {
38
+ if ((layerMask & (1 << layer_position)) === 0) {
43
39
  //skip
44
40
  continue;
45
41
  }
@@ -50,7 +46,7 @@ export class SimulationStepCurlNoiseAcceleration extends AbstractSimulationStep
50
46
  particles.readAttributeVector3(i, PARTICLE_ATTRIBUTE_POSITION, position);
51
47
 
52
48
 
53
- const params = layer_parameters[layer_index];
49
+ const params = layer_parameters[layer_position];
54
50
 
55
51
  const power_x = params[0];
56
52
  const power_y = params[1];
@@ -33,25 +33,20 @@ export class SimulationStepCurlNoiseVelocity extends AbstractSimulationStep {
33
33
 
34
34
  const liveParticleCount = particles.size();
35
35
 
36
- const layerCount = this.layer_count;
37
-
38
36
  const layerMask = this.layer_mask;
39
37
 
40
38
  for (let i = 0; i < liveParticleCount; i++) {
41
39
 
42
-
43
40
  const layer_position = particles.readAttributeScalar(i, PARTICLE_ATTRIBUTE_LAYER_POSITION);
44
41
 
45
- const layer_index = layer_position * layerCount;
46
-
47
- if ((layerMask & (1 << layer_index)) === 0) {
42
+ if ((layerMask & (1 << layer_position)) === 0) {
48
43
  //skip
49
44
  continue;
50
45
  }
51
46
 
52
47
  particles.readAttributeVector3(i, PARTICLE_ATTRIBUTE_POSITION, position);
53
48
 
54
- const params = layer_parameters[layer_index];
49
+ const params = layer_parameters[layer_position];
55
50
 
56
51
  const power_x = params[0];
57
52
  const power_y = params[1];
@@ -20,7 +20,6 @@ export class SimulationStepFixedPhysics extends AbstractSimulationStep {
20
20
 
21
21
  const liveParticleCount = particles.size();
22
22
 
23
- const layerCount = this.layer_count;
24
23
 
25
24
  const layerMask = this.layer_mask;
26
25
 
@@ -36,9 +35,7 @@ export class SimulationStepFixedPhysics extends AbstractSimulationStep {
36
35
 
37
36
  const layer_position = particles.readAttributeScalar(i, PARTICLE_ATTRIBUTE_LAYER_POSITION);
38
37
 
39
- const layer_index = Math.round(layer_position * layerCount);
40
-
41
- if ((layerMask & (1 << layer_index)) === 0) {
38
+ if ((layerMask & (1 << layer_position)) === 0) {
42
39
  //skip
43
40
  continue;
44
41
  }
@@ -79,7 +76,7 @@ export class SimulationStepFixedPhysics extends AbstractSimulationStep {
79
76
 
80
77
  particles.writeAttributeVector3(i, PARTICLE_ATTRIBUTE_POSITION, p_x, p_y, p_z);
81
78
 
82
- const layer = layers[layer_index];
79
+ const layer = layers[layer_position];
83
80
 
84
81
  update_parameters(i, particles, layer, normalized_age);
85
82
  }
@@ -22,7 +22,7 @@ export function update_parameters(particle_index, particles, layer, normalized_a
22
22
 
23
23
  if (param_color !== undefined) {
24
24
  param_color.track.sample(normalized_age, v4);
25
- particles.writeAttributeVector4(particle_index, PARTICLE_ATTRIBUTE_COLOR, v4[0], v4[1], v4[2], v4[3]);
25
+ particles.writeAttributeVector4(particle_index, PARTICLE_ATTRIBUTE_COLOR, v4[0] * 255, v4[1] * 255, v4[2] * 255, v4[3] * 255);
26
26
  }
27
27
 
28
28
  // update size
@@ -1,9 +1,9 @@
1
1
  import { seededRandom } from "../../../../../../core/math/random/seededRandom.js";
2
2
  import { computeMeshSurfaceArea } from "../../../../geometry/computeMeshSurfaceArea.js";
3
3
  import { ParticleEmitter } from "../emitter/ParticleEmitter.js";
4
- import { roundFair} from "../../../../../../core/math/MathUtils.js";
5
4
  import { ParticleEmitterFlag } from "../emitter/ParticleEmitterFlag.js";
6
5
  import { computeSkinnedMeshVertices } from "../../../../geometry/skining/computeSkinnedMeshVertices.js";
6
+ import { roundFair } from "../../../../../../core/math/random/roundFair.js";
7
7
 
8
8
  let buffer_points = new Float32Array();
9
9
  let buffer_indices = new Uint32Array();
@@ -2,8 +2,8 @@ import { seededRandom } from "../../../../../../core/math/random/seededRandom.js
2
2
  import { ParticleEmitterFlag } from "../emitter/ParticleEmitterFlag.js";
3
3
  import { computeMeshSurfaceArea } from "../../../../geometry/computeMeshSurfaceArea.js";
4
4
  import { ParticleEmitter } from "../emitter/ParticleEmitter.js";
5
- import { roundFair } from "../../../../../../core/math/MathUtils.js";
6
5
  import { computeSkinnedMeshVertices } from "../../../../geometry/skining/computeSkinnedMeshVertices.js";
6
+ import { roundFair } from "../../../../../../core/math/random/roundFair.js";
7
7
 
8
8
  /**
9
9
  *