@woosh/meep-engine 2.33.23 → 2.33.27

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 (302) hide show
  1. package/core/binary/BitSet.js +151 -167
  2. package/core/binary/BitSet.spec.js +99 -1
  3. package/core/binary/ValidatingBitSetWrapper.js +81 -0
  4. package/core/bvh2/BinaryNode.js +1 -1
  5. package/core/bvh2/aabb3/AABB3.js +21 -10
  6. package/core/bvh2/aabb3/AABB3Math.js +1 -1
  7. package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
  8. package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
  9. package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
  10. package/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +5 -1
  11. package/core/bvh2/traversal/__detailed_box_volume_intersection.js +22 -5
  12. package/core/cache/Cache.d.ts +4 -2
  13. package/core/cache/Cache.js +5 -2
  14. package/core/collection/ArrayUtils.js +1 -1
  15. package/core/collection/HashMap.d.ts +9 -2
  16. package/core/collection/HashSet.d.ts +7 -2
  17. package/core/collection/HashSet.js +7 -2
  18. package/core/collection/array/arrayQuickSort.js +9 -6
  19. package/core/collection/array/array_swap.js +22 -0
  20. package/core/collection/array/binarySearchHighIndex.js +1 -1
  21. package/core/collection/array/computeHashArray.js +22 -0
  22. package/core/collection/array/computeHashIntegerArray.js +15 -0
  23. package/core/collection/array/copyArray.js +2 -2
  24. package/core/collection/array/typed/typed_array_copy.js +1 -1
  25. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  26. package/core/color/Color.js +2 -1
  27. package/core/function/FunctionCompiler.js +2 -1
  28. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  29. package/core/geom/3d/frustum/array_setFromProjectionMatrix.js +3 -3
  30. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
  31. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  32. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  33. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  34. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  35. package/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
  36. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  37. package/core/geom/3d/shape/AbstractShape3D.js +65 -0
  38. package/core/geom/3d/shape/TransformedShape3D.js +181 -0
  39. package/core/geom/3d/shape/TransformedShape3D.spec.js +33 -0
  40. package/core/geom/3d/shape/UnionShape3D.js +255 -0
  41. package/core/geom/3d/shape/UnitCubeShape3D.js +101 -0
  42. package/core/geom/3d/shape/UnitCubeShape3D.spec.js +42 -0
  43. package/core/geom/3d/shape/UnitSphereShape3D.js +55 -0
  44. package/core/geom/3d/shape/util/compute_signed_distance_gradient_by_sampling.js +48 -0
  45. package/core/geom/3d/shape/util/shape_to_visual_entity.js +159 -0
  46. package/core/geom/AABB2.js +1 -1
  47. package/core/geom/ConicRay.js +3 -1
  48. package/core/geom/LineSegment.js +0 -78
  49. package/core/geom/Matrix4.js +7 -8
  50. package/core/geom/Rectangle.js +2 -1
  51. package/core/geom/Vector1.js +1 -1
  52. package/core/geom/Vector3.js +2 -1
  53. package/core/geom/Vector4.js +2 -1
  54. package/core/geom/random/randomPointInBox.js +7 -3
  55. package/core/geom/random/randomPointInPoint.js +6 -3
  56. package/core/geom/random/randomPointInSphere.js +9 -5
  57. package/core/geom/random/randomPointOnBox.js +7 -3
  58. package/core/geom/random/randomPointOnSphere.js +6 -3
  59. package/core/geom/v3_length.js +8 -3
  60. package/core/graph/graph_k_means_cluster.js +1 -1
  61. package/core/json/resolvePathByArray.js +2 -2
  62. package/core/math/MathUtils.js +0 -354
  63. package/core/math/MathUtils.spec.js +7 -1
  64. package/core/math/gaussian.js +9 -0
  65. package/core/math/hash/computeHashFloat.js +17 -0
  66. package/core/math/hash/computeHashFloatArray.js +34 -0
  67. package/core/math/hash/computeObjectHash.js +54 -0
  68. package/core/math/intersects1D.js +19 -0
  69. package/core/math/interval/NumericInterval.js +2 -2
  70. package/core/math/isValueBetween.js +10 -0
  71. package/core/math/isValueBetweenInclusive.js +10 -0
  72. package/core/math/noise/curl_noise_3dt.js +1 -1
  73. package/core/math/noise/sdnoise.js +10 -10
  74. package/core/math/overlap1D.js +19 -0
  75. package/core/math/pingpong.js +17 -0
  76. package/core/math/random/makeRangedRandom.js +19 -0
  77. package/core/math/random/randomFloatBetween.js +14 -0
  78. package/core/math/random/randomFromArray.js +19 -0
  79. package/core/math/random/randomGaussian.js +15 -0
  80. package/core/math/random/randomIntegerBetween.js +14 -0
  81. package/core/math/random/roundFair.js +15 -0
  82. package/core/math/separation1D.js +21 -0
  83. package/core/math/solveQuadratic.js +25 -0
  84. package/core/model/BoundedValue.js +1 -1
  85. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  86. package/core/model/node-graph/node/Port.js +1 -1
  87. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  88. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  89. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  90. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  91. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  92. package/core/model/stat/LinearModifier.js +1 -1
  93. package/core/parser/simple/Token.d.ts +13 -0
  94. package/core/parser/simple/Token.js +61 -27
  95. package/{engine/graphics/render/forward_plus/materials → core/primitives/strings}/insert_after.js +3 -0
  96. package/core/primitives/strings/insert_after_or_replace.js +27 -0
  97. package/editor/process/symbolic/makeHelperBoxGeometry.js +44 -0
  98. package/editor/tools/FoliagePaintTool.js +4 -4
  99. package/editor/view/ecs/EntityEditor.js +2 -2
  100. package/editor/view/ecs/components/particles/ParticleEmitterController.js +2 -2
  101. package/engine/EngineHarness.js +1 -0
  102. package/engine/animation/AnimationUtils.js +5 -5
  103. package/engine/animation/curve/AnimationCurve.js +72 -0
  104. package/engine/animation/curve/Keyframe.js +27 -0
  105. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  106. package/engine/asset/Asset.js +1 -1
  107. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  108. package/engine/asset/loaders/GLTFAssetLoader.js +62 -1
  109. package/engine/asset/loaders/image/ImageDecoderWorker.js +4 -3
  110. package/engine/asset/loaders/image/ImageRGBADataAsset.js +10 -2
  111. package/engine/asset/loaders/image/ImageRGBADataLoader.js +3 -3
  112. package/engine/asset/loaders/image/codec/NativeImageDecoder.js +2 -1
  113. package/engine/asset/loaders/image/png/PNG.js +113 -6
  114. package/engine/asset/loaders/image/png/PNGReader.js +5 -0
  115. package/engine/asset/loaders/material/bitmap2sampler_gl.js +1 -1
  116. package/engine/asset/loaders/material/computeImageBitmapEquality.js +6 -1
  117. package/engine/asset/loaders/material/computeMaterialHash.js +3 -1
  118. package/engine/asset/loaders/material/computeTextureEquality.js +40 -49
  119. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  120. package/engine/ecs/EntityBuilder.js +25 -5
  121. package/engine/ecs/EntityComponentDataset.js +1 -1
  122. package/engine/ecs/animation/Animation.js +2 -1
  123. package/engine/ecs/animation/InverseKinematics.js +2 -1
  124. package/engine/ecs/attachment/AttachmentBinding.js +8 -0
  125. package/engine/ecs/attachment/AttachmentSystem.js +4 -0
  126. package/engine/ecs/attachment/TransformAttachmentBinding.js +14 -44
  127. package/engine/ecs/components/Tag.js +27 -6
  128. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  129. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  130. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  131. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  132. package/engine/ecs/foliage/InstancedFoliage.js +277 -266
  133. package/engine/ecs/foliage/ecs/Foliage2System.js +7 -7
  134. package/engine/ecs/foliage/ecs/InstancedMeshComponent.js +37 -0
  135. package/engine/ecs/foliage/ecs/{Foliage2.js → InstancedMeshLayer.js} +3 -45
  136. package/engine/ecs/foliage/ecs/InstancedMeshSerializationAdapter.js +6 -5
  137. package/engine/ecs/foliage/ecs/InstancedMeshUtils.js +7 -6
  138. package/engine/ecs/fow/FogOfWar.js +4 -0
  139. package/engine/ecs/fow/FogOfWarSystem.js +2 -0
  140. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  141. package/engine/ecs/gui/GUIElement.js +1 -1
  142. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  143. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +2 -0
  144. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  145. package/engine/ecs/storage/binary/BinarySerializationRegistry.js +1 -1
  146. package/engine/ecs/system/AbstractContextSystem.js +1 -1
  147. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  148. package/engine/ecs/systems/SteeringSystem.js +1 -1
  149. package/engine/ecs/systems/TagSystem.js +17 -0
  150. package/engine/ecs/terrain/ecs/layers/TerrainLayer.js +12 -16
  151. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  152. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  153. package/engine/ecs/transform/Transform.js +19 -6
  154. package/engine/graphics/GraphicsEngine.js +11 -6
  155. package/engine/graphics/composit/CompositLayer.js +17 -4
  156. package/engine/graphics/composit/CompositingStages.js +8 -0
  157. package/engine/graphics/composit/LayerCompositer.js +35 -6
  158. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  159. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  160. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  161. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  162. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  163. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  164. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  165. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  166. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
  167. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  168. package/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.js +11 -7
  169. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  170. package/engine/graphics/ecs/light/Light.js +5 -0
  171. package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +5 -1
  172. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  173. package/engine/graphics/ecs/mesh-v2/DrawMode.js +5 -0
  174. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  175. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +32 -18
  176. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  177. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  178. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  179. package/engine/graphics/geometry/instancing/InstancedMeshGroup.js +14 -72
  180. package/engine/graphics/geometry/instancing/rewriteMaterial.js +70 -0
  181. package/engine/graphics/material/manager/MaterialManager.js +2 -1
  182. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  183. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  184. package/engine/graphics/micron/buildPatchwork.js +1 -1
  185. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  186. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  187. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  188. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  189. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  190. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +11 -9
  191. package/engine/graphics/micron/render/instanced/ThreeInstancedAdapter.js +0 -2
  192. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  193. package/engine/graphics/particles/ParticleEmitterLibrary.js +3 -0
  194. package/engine/graphics/particles/ecs/{ParticleEmitterSystem2.js → ParticleEmitterSystem.js} +17 -9
  195. package/engine/graphics/particles/particular/engine/ParticularEngine.js +8 -2
  196. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +80 -16
  197. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +71 -77
  198. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +5 -0
  199. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +2 -1
  200. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +141 -14
  201. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +8 -7
  202. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +1 -1
  203. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  204. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  205. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  206. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  207. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +24 -0
  208. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +262 -71
  209. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  210. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +81 -48
  211. package/engine/graphics/particles/particular/engine/shader/debugAtlas.js +14 -0
  212. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  213. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  214. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  215. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  216. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  217. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  218. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  219. package/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +141 -0
  220. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +478 -0
  221. package/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.js +27 -0
  222. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +938 -0
  223. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  224. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  225. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  226. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  227. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  228. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  229. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  230. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  231. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  232. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  233. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  234. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +16 -11
  235. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  236. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  237. package/engine/graphics/render/forward_plus/LightManager.js +117 -94
  238. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  239. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  240. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  241. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  242. package/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +1 -0
  243. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +32 -0
  244. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +51 -0
  245. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +25 -0
  246. package/engine/graphics/render/forward_plus/materials/FPlusDebugMaterial.js +3 -3
  247. package/engine/graphics/render/forward_plus/materials/ForwardPlusThreeMaterial.js +1 -1
  248. package/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +31 -120
  249. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +35 -0
  250. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +4 -5
  251. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  252. package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +10 -3
  253. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +594 -59
  254. package/engine/graphics/render/forward_plus/prototypeLightManager.js +208 -89
  255. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  256. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  257. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  258. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +74 -0
  259. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  260. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  261. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  262. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  263. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  264. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  265. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +1 -1
  266. package/engine/graphics/shaders/TerrainShader.js +4 -5
  267. package/engine/graphics/shadows/ShadowMapRenderer.js +8 -2
  268. package/engine/graphics/texture/atlas/ManagedTextureAtlas.js +12 -1
  269. package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
  270. package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
  271. package/engine/graphics/texture/sampler/Sampler2D.js +3 -1
  272. package/engine/graphics/texture/sampler/convertTexture2Sampler2D.js +1 -1
  273. package/engine/graphics/texture/sampler/copy_Sampler2D_channel_data.js +66 -0
  274. package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
  275. package/engine/graphics/util/composeMatrix4.js +33 -23
  276. package/engine/graphics/util/decompose_matrix_4_array.js +61 -0
  277. package/engine/grid/components/GridObstacle.js +1 -1
  278. package/engine/intelligence/behavior/ecs/BehaviorComponent.js +30 -14
  279. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  280. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  281. package/engine/knowledge/database/StaticKnowledgeDataTable.js +6 -1
  282. package/engine/navigation/ecs/components/Path.js +1 -6
  283. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  284. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  285. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  286. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  287. package/engine/ui/notification/notificationGenerator.js +1 -1
  288. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  289. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  290. package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
  291. package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
  292. package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
  293. package/generation/theme/ThemeEngine.js +1 -1
  294. package/misc/makeMaterialIconCached.js +2 -2
  295. package/package.json +1 -1
  296. package/view/elements/image/HTMLElementCacheKey.js +2 -1
  297. package/view/elements/radial/RadialText.js +2 -1
  298. package/view/minimap/gl/MinimapMarkersGL.js +6 -100
  299. package/view/minimap/gl/MinimapWorldGL.js +12 -5
  300. package/view/minimap/gl/buildMaterial.js +94 -0
  301. package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
  302. package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -357
@@ -0,0 +1,18 @@
1
+ /**
2
+ *
3
+ * @param {OperationType} operator
4
+ * @param {Array} operands
5
+ * @constructor
6
+ */
7
+ export function Operation(operator, operands) {
8
+ /**
9
+ *
10
+ * @type {OperationType}
11
+ */
12
+ this.operator = operator;
13
+ /**
14
+ *
15
+ * @type {Array}
16
+ */
17
+ this.operands = operands;
18
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ *
3
+ * @enum {number}
4
+ */
5
+ export const OperationType = {
6
+ Remove: 0,
7
+ Add: 1,
8
+ WriteAttribute: 2
9
+ };
@@ -3,6 +3,7 @@
3
3
  * @param {string} name
4
4
  * @param {ParticleAttributeType} attributeType
5
5
  * @param {ParticleDataType} dataType
6
+ * @deprecated use {@link AttributeSpec} instead
6
7
  * @constructor
7
8
  */
8
9
  export function ParticleAttribute(name, attributeType, dataType) {
@@ -21,4 +22,4 @@ export function ParticleAttribute(name, attributeType, dataType) {
21
22
  * @type {ParticleDataType}
22
23
  */
23
24
  this.dataType = dataType;
24
- }
25
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ *
3
+ * @enum {number}
4
+ */
5
+ const ParticleAttributeType = {
6
+ Scalar: 1,
7
+ Vector2: 2,
8
+ Vector3: 3,
9
+ Vector4: 4
10
+ };
11
+ export { ParticleAttributeType };
@@ -0,0 +1,10 @@
1
+ /**
2
+ *
3
+ * @enum {number}
4
+ */
5
+ const ParticleDataType = {
6
+ Float32: 0,
7
+ Float64: 1,
8
+ Uint8: 2
9
+ };
10
+ export { ParticleDataType };
@@ -11,95 +11,13 @@ import {
11
11
  InstancedBufferGeometry
12
12
  } from "three";
13
13
  import ObservedValue from "../../../../../core/model/ObservedValue.js";
14
+ import { typedArrayConstructorFromDataType } from "./typedArrayConstructorFromDataType.js";
15
+ import { itemSizeFromAttributeType } from "./itemSizeFromAttributeType.js";
16
+ import { OperationType } from "./OperationType.js";
17
+ import { Operation } from "./Operation.js";
18
+ import { optimizeCommandQueue } from "./optimizeCommandQueue.js";
14
19
 
15
20
 
16
- /**
17
- *
18
- * @enum {number}
19
- */
20
- const ParticleDataType = {
21
- Float32: 0,
22
- Float64: 1,
23
- Uint8: 2
24
- };
25
-
26
- /**
27
- *
28
- * @enum {number}
29
- */
30
- const ParticleAttributeType = {
31
- Scalar: 1,
32
- Vector2: 2,
33
- Vector3: 3,
34
- Vector4: 4
35
- };
36
-
37
- /**
38
- *
39
- * @enum {number}
40
- */
41
- const OperationType = {
42
- Remove: 0,
43
- Add: 1,
44
- WriteAttribute: 2
45
- };
46
-
47
- /**
48
- *
49
- * @param {OperationType} operator
50
- * @param {Array} operands
51
- * @constructor
52
- */
53
- function Operation(operator, operands) {
54
- /**
55
- *
56
- * @type {OperationType}
57
- */
58
- this.operator = operator;
59
- /**
60
- *
61
- * @type {Array}
62
- */
63
- this.operands = operands;
64
- }
65
-
66
- /**
67
- *
68
- * @param {ParticleAttributeType} type
69
- */
70
- export function itemSizeFromAttributeType(type) {
71
- switch (type) {
72
- case ParticleAttributeType.Scalar:
73
- return 1;
74
- case ParticleAttributeType.Vector2:
75
- return 2;
76
- case ParticleAttributeType.Vector3:
77
- return 3;
78
- case ParticleAttributeType.Vector4:
79
- return 4;
80
- default:
81
- throw new Error(`Unsupported attribute type: ${type}`);
82
- }
83
- }
84
-
85
- /**
86
- *
87
- * @param {ParticleDataType} type
88
- * @returns {*}
89
- */
90
- export function typedArrayConstructorFromDataType(type) {
91
- switch (type) {
92
- case ParticleDataType.Float32:
93
- return Float32Array;
94
- case ParticleDataType.Float64:
95
- return Float64Array;
96
- case ParticleDataType.Uint8:
97
- return Uint8Array;
98
- default:
99
- throw new Error(`Unsupported type: ${type}`);
100
- }
101
- }
102
-
103
21
  /**
104
22
  *
105
23
  * @param {ParticleSpecification} spec
@@ -264,161 +182,7 @@ ParticleGroup.prototype.update = function () {
264
182
  };
265
183
 
266
184
  ParticleGroup.prototype.optimizeCommandQueue = function () {
267
- const queue = this.commandQueue;
268
-
269
- /**
270
- * TODO this is pretty slow and should be optimized
271
- * @param {Array.<Operation>} queue
272
- */
273
- function cutRedundantOperations(queue) {
274
- const queueLength = queue.length;
275
- loop_Main: for (let i = queueLength - 1; i >= 0; i--) {
276
- const opA = queue[i];
277
- if (opA.operator === OperationType.Add) {
278
- //nothing to do
279
- continue;
280
- }
281
- const operandsA = opA.operands;
282
- if (opA.operator === OperationType.Remove) {
283
- //hunt and delete operations before this remove that affect deleted references
284
- for (let k = 0, kl = operandsA.length; k < kl; k++) {
285
- const refA = operandsA[k];
286
-
287
- //walk the queue back and remove all previous operations on these references
288
- loop_B: for (let j = i - 1; j >= 0; j--) {
289
- const opB = queue[j];
290
- const operandsB = opB.operands;
291
- const operatorB = opB.operator;
292
- if (operatorB === OperationType.WriteAttribute) {
293
- const refB = operandsB[0];
294
- if (refA === refB) {
295
- //cut operation
296
- queue.splice(j, 1);
297
- i--;
298
- }
299
- } else if (operatorB === OperationType.Add) {
300
- for (let m = 0, ml = operandsB.length; m < ml; m++) {
301
- const refB = operandsB[m];
302
- if (refA === refB) {
303
- let jump = 0;
304
- //delete operation and add operation cancel each other out
305
- if (kl > 1) {
306
- operandsA.splice(k, 1);
307
- kl--;
308
- k--;
309
- } else {
310
- queue.splice(i, 1);
311
- i--;
312
- jump |= 2;
313
- }
314
-
315
- if (ml > 1) {
316
- operandsB.splice(m, 1);
317
- m--;
318
- ml--;
319
- } else {
320
- //cut operation from the queue
321
- queue.splice(j, 1);
322
- i--;
323
- jump |= 1;
324
- }
325
-
326
- if ((jump & 2) !== 0) {
327
- continue loop_Main;
328
- } else if (jump !== 0) {
329
- continue loop_B;
330
- }
331
- }
332
- }
333
- }
334
- }
335
- }
336
- } else if (opA.operator === OperationType.WriteAttribute) {
337
- //find other operations that modify the same attribute, any previous operations are redundant at this point
338
- const refA = operandsA[0];
339
- const attributeIndexA = operandsA[1];
340
- //walk the queue back and remove all previous operations on these references
341
- for (let j = i - 1; j >= 0; j--) {
342
- const opB = queue[j];
343
- if (opB.operator !== OperationType.WriteAttribute) {
344
- //ignore
345
- continue;
346
- }
347
-
348
- const operandsB = opB.operands;
349
- if (operandsB[0] === refA && operandsB[1] === attributeIndexA) {
350
- //operation will be overwritten anyway, cut it
351
- queue.splice(j, 1);
352
- i--;
353
- }
354
- }
355
- }
356
- }
357
- }
358
-
359
- /**
360
- *
361
- * @param {Array.<Operation>} queue
362
- */
363
- function groupOperations(queue) {
364
- let l = queue.length;
365
- for (let i = 0; i < l; i++) {
366
- const opA = queue[i];
367
- const operatorA = opA.operator;
368
- const operandsA = opA.operands;
369
- if (operatorA === OperationType.Add || operatorA === OperationType.Remove) {
370
- for (let j = i + 1; j < l; j++) {
371
- const opB = queue[j];
372
- if (opB.operator === operatorA) {
373
- const operandsB = opB.operands;
374
- const numOperands = operandsB.length;
375
-
376
- for (let k = 0; k < numOperands; k++) {
377
- const refB = operandsB[k];
378
- if (operandsA.indexOf(refB) === -1) {
379
- operandsA.push(refB);
380
- }
381
- }
382
-
383
- queue.splice(j, 1);
384
- j--;
385
- l--;
386
- }
387
- }
388
- }
389
- }
390
- }
391
-
392
- /**
393
- * @param {Array.<Operation>} queue
394
- */
395
- function sortOperations(queue) {
396
- queue.sort(function (a, b) {
397
- const operatorA = a.operator;
398
- const operatorB = b.operator;
399
-
400
- //it's important that Add and Remove operations are sorted to the front of the queue, before Write operations
401
- if (operatorA < operatorB) {
402
- return -1;
403
- } else if (operatorB > operatorA) {
404
- return 1;
405
- }
406
-
407
- if (operatorA !== OperationType.WriteAttribute) {
408
- return 0;
409
- }
410
-
411
- const attributeIndexA = a.operands[1];
412
- const attributeIndexB = b.operands[1];
413
-
414
- //sort write operations by buffer index
415
- return attributeIndexB - attributeIndexA;
416
- });
417
- }
418
-
419
- cutRedundantOperations(queue);
420
- groupOperations(queue);
421
- sortOperations(queue);
185
+ optimizeCommandQueue(this.commandQueue);
422
186
  };
423
187
 
424
188
  /**
@@ -869,7 +633,5 @@ ParticleGroup.prototype.setSize = function (newSize) {
869
633
  };
870
634
 
871
635
  export {
872
- ParticleGroup,
873
- ParticleAttributeType,
874
- ParticleDataType
636
+ ParticleGroup
875
637
  };
@@ -1,6 +1,8 @@
1
- import { ParticleAttributeType, ParticleDataType, ParticleGroup, } from "./ParticleGroup.js";
1
+ import { ParticleGroup, } from "./ParticleGroup.js";
2
2
  import { ParticleSpecification } from "./ParticleSpecification.js";
3
3
  import { ParticleAttribute } from "./ParticleAttribute.js";
4
+ import { ParticleDataType } from "./ParticleDataType.js";
5
+ import { ParticleAttributeType } from "./ParticleAttributeType.js";
4
6
 
5
7
  test("After calling grow(1) size is increased by 1", () => {
6
8
  const spec = new ParticleSpecification();
@@ -1,9 +1,7 @@
1
- import { ParticleGroup } from "./ParticleGroup.js";
2
-
3
-
4
1
  /**
5
2
  *
6
3
  * @constructor
4
+ * @deprecated use {@link VertexDataSpec} instead
7
5
  */
8
6
  export function ParticleSpecification() {
9
7
  /**
@@ -13,6 +11,25 @@ export function ParticleSpecification() {
13
11
  this.attributes = [];
14
12
  }
15
13
 
14
+ /**
15
+ *
16
+ * @param {string} name
17
+ * @return {undefined|ParticleAttribute}
18
+ */
19
+ ParticleSpecification.prototype.getByName = function (name) {
20
+ const attributes = this.attributes;
21
+ const n = attributes.length;
22
+ for (let i = 0; i < n; i++) {
23
+ const attribute = attributes[i];
24
+
25
+ if (attribute.name === name) {
26
+ return attribute;
27
+ }
28
+ }
29
+
30
+ return undefined;
31
+ };
32
+
16
33
  /**
17
34
  *
18
35
  * @param {ParticleAttribute} attribute
@@ -20,9 +37,7 @@ export function ParticleSpecification() {
20
37
  */
21
38
  ParticleSpecification.prototype.add = function (attribute) {
22
39
  //check uniqueness of name
23
- if (this.attributes.some(function (a) {
24
- return a.name === attribute.name;
25
- })) {
40
+ if (this.getByName(attribute.name) !== undefined) {
26
41
  throw new Error(`Attribute named '${attribute.name}' already exists`);
27
42
  }
28
43
 
@@ -31,11 +46,3 @@ ParticleSpecification.prototype.add = function (attribute) {
31
46
  //for chaining, return self
32
47
  return this;
33
48
  };
34
-
35
- /**
36
- *
37
- * @return {ParticleGroup}
38
- */
39
- ParticleSpecification.prototype.build = function () {
40
- return new ParticleGroup(this);
41
- };
@@ -0,0 +1,20 @@
1
+ import { ParticleAttributeType } from "./ParticleAttributeType.js";
2
+
3
+ /**
4
+ *
5
+ * @param {ParticleAttributeType} type
6
+ */
7
+ export function itemSizeFromAttributeType(type) {
8
+ switch (type) {
9
+ case ParticleAttributeType.Scalar:
10
+ return 1;
11
+ case ParticleAttributeType.Vector2:
12
+ return 2;
13
+ case ParticleAttributeType.Vector3:
14
+ return 3;
15
+ case ParticleAttributeType.Vector4:
16
+ return 4;
17
+ default:
18
+ throw new Error(`Unsupported attribute type: ${type}`);
19
+ }
20
+ }
@@ -0,0 +1,162 @@
1
+ import { OperationType } from "./OperationType.js";
2
+
3
+ /**
4
+ *
5
+ * @param {Operation[]} queue
6
+ */
7
+ export function optimizeCommandQueue(queue) {
8
+
9
+ /**
10
+ * TODO this is pretty slow and should be optimized
11
+ * @param {Array.<Operation>} queue
12
+ */
13
+ function cutRedundantOperations(queue) {
14
+ const queueLength = queue.length;
15
+ loop_Main: for (let i = queueLength - 1; i >= 0; i--) {
16
+ const opA = queue[i];
17
+ if (opA.operator === OperationType.Add) {
18
+ //nothing to do
19
+ continue;
20
+ }
21
+ const operandsA = opA.operands;
22
+ if (opA.operator === OperationType.Remove) {
23
+ //hunt and delete operations before this remove that affect deleted references
24
+ for (let k = 0, kl = operandsA.length; k < kl; k++) {
25
+ const refA = operandsA[k];
26
+
27
+ //walk the queue back and remove all previous operations on these references
28
+ loop_B: for (let j = i - 1; j >= 0; j--) {
29
+ const opB = queue[j];
30
+ const operandsB = opB.operands;
31
+ const operatorB = opB.operator;
32
+ if (operatorB === OperationType.WriteAttribute) {
33
+ const refB = operandsB[0];
34
+ if (refA === refB) {
35
+ //cut operation
36
+ queue.splice(j, 1);
37
+ i--;
38
+ }
39
+ } else if (operatorB === OperationType.Add) {
40
+ for (let m = 0, ml = operandsB.length; m < ml; m++) {
41
+ const refB = operandsB[m];
42
+ if (refA === refB) {
43
+ let jump = 0;
44
+ //delete operation and add operation cancel each other out
45
+ if (kl > 1) {
46
+ operandsA.splice(k, 1);
47
+ kl--;
48
+ k--;
49
+ } else {
50
+ queue.splice(i, 1);
51
+ i--;
52
+ jump |= 2;
53
+ }
54
+
55
+ if (ml > 1) {
56
+ operandsB.splice(m, 1);
57
+ m--;
58
+ ml--;
59
+ } else {
60
+ //cut operation from the queue
61
+ queue.splice(j, 1);
62
+ i--;
63
+ jump |= 1;
64
+ }
65
+
66
+ if ((jump & 2) !== 0) {
67
+ continue loop_Main;
68
+ } else if (jump !== 0) {
69
+ continue loop_B;
70
+ }
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
76
+ } else if (opA.operator === OperationType.WriteAttribute) {
77
+ //find other operations that modify the same attribute, any previous operations are redundant at this point
78
+ const refA = operandsA[0];
79
+ const attributeIndexA = operandsA[1];
80
+ //walk the queue back and remove all previous operations on these references
81
+ for (let j = i - 1; j >= 0; j--) {
82
+ const opB = queue[j];
83
+ if (opB.operator !== OperationType.WriteAttribute) {
84
+ //ignore
85
+ continue;
86
+ }
87
+
88
+ const operandsB = opB.operands;
89
+ if (operandsB[0] === refA && operandsB[1] === attributeIndexA) {
90
+ //operation will be overwritten anyway, cut it
91
+ queue.splice(j, 1);
92
+ i--;
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+
99
+ /**
100
+ *
101
+ * @param {Array.<Operation>} queue
102
+ */
103
+ function groupOperations(queue) {
104
+ let l = queue.length;
105
+ for (let i = 0; i < l; i++) {
106
+ const opA = queue[i];
107
+ const operatorA = opA.operator;
108
+ const operandsA = opA.operands;
109
+ if (operatorA === OperationType.Add || operatorA === OperationType.Remove) {
110
+ for (let j = i + 1; j < l; j++) {
111
+ const opB = queue[j];
112
+ if (opB.operator === operatorA) {
113
+ const operandsB = opB.operands;
114
+ const numOperands = operandsB.length;
115
+
116
+ for (let k = 0; k < numOperands; k++) {
117
+ const refB = operandsB[k];
118
+ if (operandsA.indexOf(refB) === -1) {
119
+ operandsA.push(refB);
120
+ }
121
+ }
122
+
123
+ queue.splice(j, 1);
124
+ j--;
125
+ l--;
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
131
+
132
+ /**
133
+ * @param {Array.<Operation>} queue
134
+ */
135
+ function sortOperations(queue) {
136
+ queue.sort(function (a, b) {
137
+ const operatorA = a.operator;
138
+ const operatorB = b.operator;
139
+
140
+ //it's important that Add and Remove operations are sorted to the front of the queue, before Write operations
141
+ if (operatorA < operatorB) {
142
+ return -1;
143
+ } else if (operatorB > operatorA) {
144
+ return 1;
145
+ }
146
+
147
+ if (operatorA !== OperationType.WriteAttribute) {
148
+ return 0;
149
+ }
150
+
151
+ const attributeIndexA = a.operands[1];
152
+ const attributeIndexB = b.operands[1];
153
+
154
+ //sort write operations by buffer index
155
+ return attributeIndexB - attributeIndexA;
156
+ });
157
+ }
158
+
159
+ cutRedundantOperations(queue);
160
+ groupOperations(queue);
161
+ sortOperations(queue);
162
+ }
@@ -0,0 +1,19 @@
1
+ import { ParticleDataType } from "./ParticleDataType.js";
2
+
3
+ /**
4
+ *
5
+ * @param {ParticleDataType} type
6
+ * @returns {*}
7
+ */
8
+ export function typedArrayConstructorFromDataType(type) {
9
+ switch (type) {
10
+ case ParticleDataType.Float32:
11
+ return Float32Array;
12
+ case ParticleDataType.Float64:
13
+ return Float64Array;
14
+ case ParticleDataType.Uint8:
15
+ return Uint8Array;
16
+ default:
17
+ throw new Error(`Unsupported type: ${type}`);
18
+ }
19
+ }
@@ -1,4 +1,3 @@
1
- import { max2 } from "../../../../../../core/math/max2.js";
2
1
  import { EnginePlugin } from "../../../../../plugin/EnginePlugin.js";
3
2
  import {
4
3
  LinearFilter,
@@ -14,6 +13,7 @@ import { BlendingType } from "../../../../texture/sampler/BlendingType.js";
14
13
  import { DepthLimitedBlur } from "../DepthLimitedBlur.js";
15
14
  import { renderScreenSpace } from "../../../utils/renderScreenSpace.js";
16
15
  import { StandardFrameBuffers } from "../../../../StandardFrameBuffers.js";
16
+ import { CompositingStages } from "../../../../composit/CompositingStages.js";
17
17
 
18
18
  export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
19
19
  constructor() {
@@ -50,7 +50,7 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
50
50
  * @type {boolean}
51
51
  * @private
52
52
  */
53
- this.__use_normals = true;
53
+ this.__use_normals = false;
54
54
 
55
55
  /**
56
56
  * Resolution scale at which AO is to be rendered. Higher scale will lead to sharper and better looking results
@@ -160,9 +160,9 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
160
160
  uniforms.bias.value = 0.5;
161
161
  uniforms.intensity.value = 0.18;
162
162
 
163
- const depth_range = far - near;
164
-
165
- uniforms.scale.value = 5 * max2(1, depth_range / 30);
163
+ // scale is divided by camera far in the shader, we unbias it here
164
+ // TODO remove this term from the shader
165
+ uniforms.scale.value = far * 0.25;
166
166
 
167
167
  uniforms.kernelRadius.value = 30;
168
168
  uniforms.minResolution.value = 0;
@@ -184,12 +184,14 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
184
184
 
185
185
  /**
186
186
  *
187
- * @param {WebGLRenderer} renderer
188
- * @param {Camera} camera
189
- * @param {Scene} scene
190
187
  * @private
191
188
  */
192
- __render(renderer, camera, scene) {
189
+ __render() {
190
+ const engine = this.engine;
191
+ const graphics = engine.graphics;
192
+
193
+ const renderer = graphics.renderer;
194
+
193
195
  this.__prepare_draw();
194
196
 
195
197
  const __old_state_rt = renderer.getRenderTarget();
@@ -295,6 +297,9 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
295
297
  this.__composit_layer = graphics.layerComposer.createLayer({}, BlendingType.Multiply);
296
298
  this.__composit_layer.name = 'Ambient Occlusion';
297
299
 
300
+ // apply ambient occlusion on opaque pass, otherwise it would occlude transparent geometry
301
+ this.__composit_layer.stage = CompositingStages.POST_OPAQUE;
302
+
298
303
  const material = this.__material;
299
304
  const uniforms = material.uniforms;
300
305
 
@@ -309,7 +314,7 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
309
314
  this.setNormalBufferUsage(true);
310
315
  }
311
316
 
312
- graphics.on.preComposite.add(this.__render, this);
317
+ this.__composit_layer.on.preRender.add(this.__render, this);
313
318
  graphics.viewport.size.onChanged.add(this.__update_render_target_size, this);
314
319
 
315
320
  this.__update_render_target_size();
@@ -330,7 +335,7 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
330
335
  // remove the layer
331
336
  graphics.layerComposer.remove(this.__composit_layer);
332
337
 
333
- graphics.on.preComposite.remove(this.__render, this);
338
+ this.__composit_layer.on.preRender.remove(this.__render, this);
334
339
  graphics.viewport.size.onChanged.add(this.__update_render_target_size, this);
335
340
 
336
341
  return super.shutdown();