@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.
- package/core/assert.js +3 -1
- package/core/bvh2/BinaryNode.js +1 -1
- package/core/bvh2/aabb3/AABB3.js +18 -0
- package/core/bvh2/aabb3/AABB3Math.js +1 -1
- package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
- package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
- package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
- package/core/bvh2/traversal/__detailed_box_volume_intersection.js +11 -8
- package/core/collection/ArrayUtils.js +1 -1
- package/core/collection/HashMap.js +66 -22
- package/core/collection/array/arrayQuickSort.js +9 -6
- package/core/collection/array/array_swap.js +22 -0
- package/core/collection/array/computeHashArray.js +22 -0
- package/core/collection/array/computeHashIntegerArray.js +15 -0
- package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
- package/core/color/Color.js +2 -1
- package/core/function/FunctionCompiler.js +2 -1
- package/core/geom/3d/CircleMath.js +4 -4
- package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
- package/core/geom/3d/cone/computeConeBoundingBox.js +4 -4
- package/core/geom/3d/{compute_bounding_cone_of_2_cones.js → cone/compute_bounding_cone_of_2_cones.js} +3 -3
- package/core/geom/3d/{compute_bounding_cone_of_2_cones.spec.js → cone/compute_bounding_cone_of_2_cones.spec.js} +1 -1
- package/core/geom/3d/frustum/array_setFromProjectionMatrix.js +1 -1
- package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +11 -3
- package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
- package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
- package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
- package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
- package/core/geom/3d/{encode_unit3_hemioct.js → normal/hemioct/encode_unit3_hemioct.js} +0 -0
- package/core/geom/3d/{unit_hemioct.spec.js → normal/hemioct/unit_hemioct.spec.js} +1 -1
- package/core/geom/3d/normal/lamber_azimuth/transform.js +61 -0
- package/core/geom/3d/normal/spherical/sphere_map_transform.js +77 -0
- package/core/geom/3d/{lerp_planes_to_array.js → plane/lerp_planes_to_array.js} +1 -3
- package/core/geom/3d/plane/plane3_lerp.js +3 -1
- package/core/geom/3d/plane/plane3_slerp.js +4 -1
- package/core/geom/3d/{plane_computeConvex3PlaneIntersection.js → plane/plane_computeConvex3PlaneIntersection.js} +14 -16
- package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
- package/core/geom/3d/shape/AbstractShape3D.js +29 -0
- package/core/geom/3d/shape/CompositeShape.js +60 -0
- package/core/geom/3d/shape/TransformedShape3D.js +70 -0
- package/core/geom/3d/shape/UnitCubeShape3D.js +13 -0
- package/core/geom/3d/shape/UnitSphereShape3D.js +16 -0
- package/core/geom/3d/topology/TopoTriangle.js +1 -1
- package/core/geom/3d/topology/TopoVertex.js +1 -1
- package/core/geom/3d/topology/bounds/computeTraingleClusterNormalBoundingCone.js +2 -2
- package/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +1 -1
- package/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +1 -1
- package/core/geom/3d/triangle/computeTrianglePlaneSide.js +1 -1
- package/core/geom/3d/triangle/computeTriangleRayIntersection.js +1 -1
- package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
- package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
- package/core/geom/AABB2.js +1 -1
- package/core/geom/ConicRay.js +3 -1
- package/core/geom/LineSegment.js +1 -77
- package/core/geom/Matrix4.js +8 -8
- package/core/geom/Plane.js +15 -10
- package/core/geom/Quaternion.js +2 -1
- package/core/geom/Rectangle.js +2 -1
- package/core/geom/Vector1.js +1 -1
- package/core/geom/Vector3.d.ts +2 -0
- package/core/geom/Vector3.js +35 -159
- package/core/geom/Vector3.spec.js +2 -1
- package/core/geom/Vector4.js +2 -1
- package/core/geom/random/randomPointInBox.js +7 -3
- package/core/geom/random/randomPointInPoint.js +6 -3
- package/core/geom/random/randomPointInSphere.js +6 -3
- package/core/geom/random/randomPointOnBox.js +7 -3
- package/core/geom/random/randomPointOnSphere.js +6 -3
- package/core/geom/v3_angle_between.js +31 -0
- package/core/geom/v3_distance.js +16 -0
- package/core/geom/v3_distance_sqr.js +17 -0
- package/core/geom/v3_dot.js +13 -0
- package/core/geom/v3_length.js +10 -0
- package/core/geom/v3_length_sqr.js +10 -0
- package/core/geom/v3_lerp.js +21 -0
- package/core/geom/v3_slerp.js +48 -0
- package/core/graph/graph_k_means_cluster.js +1 -1
- package/core/math/MathUtils.js +0 -354
- package/core/math/MathUtils.spec.js +7 -1
- package/core/math/gaussian.js +9 -0
- package/core/math/hash/computeHashFloat.js +17 -0
- package/core/math/hash/computeHashFloatArray.js +34 -0
- package/core/math/hash/computeObjectHash.js +54 -0
- package/core/math/intersects1D.js +19 -0
- package/core/math/interval/NumericInterval.js +2 -2
- package/core/math/isValueBetween.js +10 -0
- package/core/math/isValueBetweenInclusive.js +10 -0
- package/core/math/noise/curl_noise_3dt.js +1 -1
- package/core/math/noise/sdnoise.js +10 -10
- package/core/math/overlap1D.js +19 -0
- package/core/math/pingpong.js +17 -0
- package/core/math/random/makeRangedRandom.js +19 -0
- package/core/math/random/randomFloatBetween.js +14 -0
- package/core/math/random/randomFromArray.js +19 -0
- package/core/math/random/randomGaussian.js +15 -0
- package/core/math/random/randomIntegerBetween.js +14 -0
- package/core/math/random/roundFair.js +15 -0
- package/core/math/separation1D.js +21 -0
- package/core/math/solveQuadratic.js +25 -0
- package/core/model/BoundedValue.js +1 -1
- package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
- package/core/model/node-graph/node/Port.js +1 -1
- package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
- package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
- package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
- package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
- package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
- package/core/model/stat/LinearModifier.js +1 -1
- package/core/primitives/array/computeIntegerArrayHash.js +6 -1
- package/engine/animation/curve/AnimationCurve.js +72 -0
- package/engine/animation/curve/Keyframe.js +27 -0
- package/engine/animation/keyed2/AnimationTrack.js +27 -3
- package/engine/asset/Asset.js +1 -1
- package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
- package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
- package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
- package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
- package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
- package/engine/asset/loaders/material/computeMaterialHash.js +4 -3
- package/engine/asset/loaders/material/computeTextureEquality.js +13 -5
- package/engine/asset/loaders/material/computeTextureHash.js +2 -1
- package/engine/ecs/animation/Animation.js +2 -1
- package/engine/ecs/animation/InverseKinematics.js +2 -1
- package/engine/ecs/animation/OneBoneSurfaceAlignmentSolver.js +3 -1
- package/engine/ecs/animation/TwoBoneInverseKinematicsSolver.js +3 -1
- package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
- package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
- package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
- package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
- package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
- package/engine/ecs/fow/FogOfWar.js +2 -3
- package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
- package/engine/ecs/gui/GUIElement.js +1 -1
- package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
- package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +1 -1
- package/engine/ecs/gui/position/ViewportPosition.js +2 -1
- package/engine/ecs/systems/RangedAttackSystem.js +1 -1
- package/engine/ecs/systems/SteeringSystem.js +3 -2
- package/engine/ecs/terrain/ecs/Terrain.js +6 -0
- package/engine/ecs/terrain/ecs/layers/TerrainLayers.js +5 -0
- package/engine/ecs/terrain/ecs/splat/SplatMapping.js +5 -0
- package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
- package/engine/ecs/tooltip/TooltipComponent.js +15 -0
- package/engine/ecs/util/hideEntityGracefully.js +18 -0
- package/engine/graphics/GraphicsEngine.js +1 -0
- package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
- package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
- package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +2 -2
- package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
- package/engine/graphics/ecs/highlight/renderer/OutlineRenderer.js +0 -53
- package/engine/graphics/ecs/light/Light.d.ts +1 -1
- package/engine/graphics/ecs/light/Light.js +3 -0
- package/engine/graphics/ecs/mesh/Mesh.js +2 -1
- package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
- package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
- package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
- package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
- package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
- package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
- package/engine/graphics/geometry/AttributeSpec.js +105 -0
- package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
- package/engine/graphics/geometry/bvh/buffered/BVHGeometryRaycaster.js +2 -1
- package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
- package/engine/graphics/micron/build/clustering/computeFaceCurvatureScore.js +1 -1
- package/engine/graphics/micron/build/clustering/compute_face_connection_weight.js +1 -1
- package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
- package/engine/graphics/micron/build/hierarchy/computePatchMergeScore.js +1 -1
- package/engine/graphics/micron/build/hierarchy/patch_combine.js +1 -1
- package/engine/graphics/micron/buildPatchwork.js +1 -1
- package/engine/graphics/micron/format/MicronGeometry.js +3 -3
- package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
- package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
- package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
- package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
- package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
- package/engine/graphics/micron/render/refinement/is_patch_facing_back.js +2 -2
- package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
- package/engine/graphics/particles/particular/engine/ParticularEngine.js +4 -2
- package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
- package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +92 -144
- package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
- package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +51 -12
- package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +3 -2
- package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
- package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
- package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
- package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
- package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
- package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
- package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +21 -0
- package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +0 -20
- package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
- package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +7 -25
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
- package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +384 -0
- package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +558 -0
- package/engine/graphics/particles/particular/group/Operation.js +18 -0
- package/engine/graphics/particles/particular/group/OperationType.js +9 -0
- package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
- package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
- package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
- package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
- package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
- package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
- package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
- package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
- package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
- package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
- package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +1 -1
- package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
- package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
- package/engine/graphics/render/forward_plus/LightManager.js +126 -95
- package/engine/graphics/render/forward_plus/PointLight.js +9 -0
- package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
- package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
- package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
- package/engine/graphics/render/forward_plus/computeFrustumCorners.js +15 -33
- package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
- package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +12 -2
- package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +6 -6
- package/engine/graphics/render/forward_plus/prototypeLightManager.js +231 -136
- package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
- package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
- package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
- package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
- package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
- package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
- package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
- package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
- package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
- package/engine/graphics/render/layers/RenderLayerUtils.js +8 -5
- package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
- package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
- package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
- package/engine/graphics/texture/atlas/TextureAtlas.js +18 -14
- package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
- package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
- package/engine/graphics/texture/sampler/Sampler2D.js +8 -7
- package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
- package/engine/graphics/texture/sampler/scaleSampler2D.js +7 -10
- package/engine/graphics/trail/x/RibbonMaterialX.js +3 -3
- package/engine/graphics/trail/x/RibbonX.js +17 -2
- package/engine/graphics/trail/x/RibbonXPlugin.js +51 -1
- package/engine/graphics/util/projectSphere.js +1 -1
- package/engine/grid/components/GridObstacle.js +3 -10
- package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
- package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
- package/engine/navigation/ecs/components/Path.js +3 -2
- package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
- package/engine/reference/v2/Reference.js +6 -0
- package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
- package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
- package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
- package/engine/ui/notification/notificationGenerator.js +1 -1
- package/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +3 -2
- package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
- package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
- package/generation/markers/GridCellActionPlaceMarker.js +13 -1
- package/generation/markers/MarkerNode.js +6 -0
- package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
- package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
- package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
- package/generation/theme/ThemeEngine.js +5 -2
- package/misc/makeMaterialIconCached.js +2 -2
- package/package.json +3 -3
- package/view/View.js +4 -2
- package/view/elements/image/HTMLElementCacheKey.js +2 -1
- package/view/elements/radial/RadialText.js +2 -1
- package/view/minimap/gl/MinimapMarkersGL.js +19 -101
- package/view/minimap/gl/buildMaterial.js +94 -0
- package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
- 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 {
|
|
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 {
|
|
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 {
|
|
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 {
|
|
275
|
+
* @type {AttributeSpec}
|
|
238
276
|
*/
|
|
239
277
|
const attributeSpec = spec_attributes[i];
|
|
240
278
|
|
|
241
|
-
const itemSize =
|
|
242
|
-
const TypedArrayConstructor =
|
|
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
|
|
248
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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));
|
package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js
CHANGED
|
@@ -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.
|
|
288
|
-
this.materialMap.
|
|
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
|
-
|
|
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[
|
|
35
|
+
const params = layer_parameters[layer_position];
|
|
39
36
|
|
|
40
37
|
const force_x = params[0];
|
|
41
38
|
const force_y = params[1];
|
package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js
CHANGED
|
@@ -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
|
-
|
|
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[
|
|
49
|
+
const params = layer_parameters[layer_position];
|
|
54
50
|
|
|
55
51
|
const power_x = params[0];
|
|
56
52
|
const power_y = params[1];
|
package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js
CHANGED
|
@@ -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
|
-
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
*
|