@woosh/meep-engine 2.33.21 → 2.33.25

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/ThreeClippingPlaneComputingBVHVisitor.js +5 -1
  9. package/core/bvh2/traversal/__detailed_box_volume_intersection.js +31 -11
  10. package/core/collection/ArrayUtils.js +1 -1
  11. package/core/collection/array/arrayQuickSort.js +9 -6
  12. package/core/collection/array/array_swap.js +22 -0
  13. package/core/collection/array/binarySearchHighIndex.js +1 -1
  14. package/core/collection/array/computeHashArray.js +22 -0
  15. package/core/collection/array/computeHashIntegerArray.js +15 -0
  16. package/core/collection/array/copyArray.js +2 -2
  17. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  18. package/core/color/Color.js +2 -1
  19. package/core/function/FunctionCompiler.js +2 -1
  20. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  21. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +10 -2
  22. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  23. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  24. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  25. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  26. package/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
  27. package/core/geom/3d/plane/plane_computeConvex3PlaneIntersection.js +13 -14
  28. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  29. package/core/geom/3d/shape/AbstractShape3D.js +38 -0
  30. package/core/geom/3d/shape/CompositeShape.js +240 -0
  31. package/core/geom/3d/shape/TransformedShape3D.js +126 -0
  32. package/core/geom/3d/shape/UnitCubeShape3D.js +24 -0
  33. package/core/geom/3d/shape/UnitSphereShape3D.js +24 -0
  34. package/core/geom/3d/shape/util/shape_to_visual_entity.js +159 -0
  35. package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
  36. package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
  37. package/core/geom/AABB2.js +1 -1
  38. package/core/geom/ConicRay.js +3 -1
  39. package/core/geom/LineSegment.js +0 -78
  40. package/core/geom/Matrix4.js +7 -8
  41. package/core/geom/Plane.js +14 -9
  42. package/core/geom/Rectangle.js +2 -1
  43. package/core/geom/Vector1.js +1 -1
  44. package/core/geom/Vector3.js +2 -1
  45. package/core/geom/Vector4.js +2 -1
  46. package/core/geom/random/randomPointInBox.js +7 -3
  47. package/core/geom/random/randomPointInPoint.js +6 -3
  48. package/core/geom/random/randomPointInSphere.js +9 -5
  49. package/core/geom/random/randomPointOnBox.js +7 -3
  50. package/core/geom/random/randomPointOnSphere.js +6 -3
  51. package/core/geom/v3_length.js +8 -3
  52. package/core/graph/graph_k_means_cluster.js +1 -1
  53. package/core/json/resolvePathByArray.js +2 -2
  54. package/core/math/MathUtils.js +0 -354
  55. package/core/math/MathUtils.spec.js +7 -1
  56. package/core/math/gaussian.js +9 -0
  57. package/core/math/hash/computeHashFloat.js +17 -0
  58. package/core/math/hash/computeHashFloatArray.js +34 -0
  59. package/core/math/hash/computeObjectHash.js +54 -0
  60. package/core/math/intersects1D.js +19 -0
  61. package/core/math/interval/NumericInterval.js +2 -2
  62. package/core/math/isValueBetween.js +10 -0
  63. package/core/math/isValueBetweenInclusive.js +10 -0
  64. package/core/math/noise/curl_noise_3dt.js +1 -1
  65. package/core/math/noise/sdnoise.js +10 -10
  66. package/core/math/overlap1D.js +19 -0
  67. package/core/math/pingpong.js +17 -0
  68. package/core/math/random/makeRangedRandom.js +19 -0
  69. package/core/math/random/randomFloatBetween.js +14 -0
  70. package/core/math/random/randomFromArray.js +19 -0
  71. package/core/math/random/randomGaussian.js +15 -0
  72. package/core/math/random/randomIntegerBetween.js +14 -0
  73. package/core/math/random/roundFair.js +15 -0
  74. package/core/math/separation1D.js +21 -0
  75. package/core/math/solveQuadratic.js +25 -0
  76. package/core/model/BoundedValue.js +1 -1
  77. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  78. package/core/model/node-graph/node/Port.js +1 -1
  79. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  80. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  81. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  82. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  83. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  84. package/core/model/stat/LinearModifier.js +1 -1
  85. package/core/primitives/array/computeIntegerArrayHash.js +1 -1
  86. package/{engine/graphics/render/forward_plus/materials → core/primitives/strings}/insert_after.js +3 -0
  87. package/core/primitives/strings/insert_after_or_replace.js +27 -0
  88. package/editor/process/symbolic/makeHelperBoxGeometry.js +44 -0
  89. package/editor/view/ecs/EntityEditor.js +2 -2
  90. package/editor/view/ecs/components/particles/ParticleEmitterController.js +2 -2
  91. package/engine/EngineHarness.js +1 -0
  92. package/engine/animation/AnimationUtils.js +5 -5
  93. package/engine/animation/curve/AnimationCurve.js +72 -0
  94. package/engine/animation/curve/Keyframe.js +27 -0
  95. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  96. package/engine/asset/Asset.js +1 -1
  97. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  98. package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
  99. package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
  100. package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
  101. package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
  102. package/engine/asset/loaders/material/computeMaterialHash.js +3 -1
  103. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  104. package/engine/ecs/EntityBuilder.js +25 -5
  105. package/engine/ecs/animation/Animation.js +2 -1
  106. package/engine/ecs/animation/InverseKinematics.js +2 -1
  107. package/engine/ecs/attachment/AttachmentBinding.js +8 -0
  108. package/engine/ecs/attachment/AttachmentSystem.js +4 -0
  109. package/engine/ecs/attachment/TransformAttachmentBinding.js +14 -44
  110. package/engine/ecs/components/Tag.js +27 -6
  111. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  112. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  113. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  114. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  115. package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
  116. package/engine/ecs/fow/FogOfWar.js +4 -0
  117. package/engine/ecs/fow/FogOfWarSystem.js +2 -0
  118. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  119. package/engine/ecs/gui/GUIElement.js +1 -1
  120. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  121. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +2 -0
  122. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  123. package/engine/ecs/system/AbstractContextSystem.js +1 -1
  124. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  125. package/engine/ecs/systems/SteeringSystem.js +1 -1
  126. package/engine/ecs/systems/TagSystem.js +17 -0
  127. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  128. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  129. package/engine/ecs/transform/Transform.js +19 -6
  130. package/engine/ecs/util/hideEntityGracefully.js +18 -0
  131. package/engine/graphics/GraphicsEngine.js +11 -23
  132. package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
  133. package/engine/graphics/composit/CompositLayer.js +17 -4
  134. package/engine/graphics/composit/CompositingStages.js +8 -0
  135. package/engine/graphics/composit/LayerCompositer.js +35 -6
  136. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  137. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  138. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  139. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  140. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  141. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  142. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  143. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  144. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
  145. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  146. package/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.js +11 -7
  147. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  148. package/engine/graphics/ecs/light/Light.js +5 -0
  149. package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +5 -1
  150. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  151. package/engine/graphics/ecs/mesh-v2/DrawMode.js +5 -0
  152. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  153. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +32 -18
  154. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  155. package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
  156. package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
  157. package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
  158. package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
  159. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  160. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  161. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  162. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  163. package/engine/graphics/micron/buildPatchwork.js +1 -1
  164. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  165. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  166. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  167. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  168. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  169. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
  170. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  171. package/engine/graphics/particles/ParticleEmitterLibrary.js +3 -0
  172. package/engine/graphics/particles/ecs/{ParticleEmitterSystem2.js → ParticleEmitterSystem.js} +17 -9
  173. package/engine/graphics/particles/particular/engine/ParticularEngine.js +12 -4
  174. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
  175. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +106 -169
  176. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +5 -0
  177. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
  178. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +141 -14
  179. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +8 -7
  180. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
  181. package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
  182. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  183. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  184. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  185. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  186. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +24 -0
  187. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +262 -71
  188. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  189. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +80 -46
  190. package/engine/graphics/particles/particular/engine/shader/debugAtlas.js +14 -0
  191. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  192. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  193. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  194. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  195. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  196. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  197. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  198. package/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +141 -0
  199. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +478 -0
  200. package/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.js +27 -0
  201. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +935 -0
  202. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  203. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  204. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  205. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  206. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  207. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  208. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  209. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  210. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  211. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  212. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  213. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
  214. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +13 -7
  215. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  216. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  217. package/engine/graphics/render/forward_plus/LightManager.js +126 -95
  218. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  219. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  220. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  221. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  222. package/engine/graphics/render/forward_plus/computeFrustumCorners.js +14 -32
  223. package/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +1 -0
  224. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +32 -0
  225. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +51 -0
  226. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +25 -0
  227. package/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +31 -120
  228. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +35 -0
  229. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +4 -5
  230. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  231. package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +10 -3
  232. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +595 -60
  233. package/engine/graphics/render/forward_plus/prototypeLightManager.js +256 -136
  234. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  235. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  236. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  237. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
  238. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  239. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  240. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  241. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  242. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  243. package/engine/graphics/render/layers/RenderLayerUtils.js +7 -4
  244. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  245. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
  246. package/engine/graphics/shaders/TerrainShader.js +4 -5
  247. package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
  248. package/engine/graphics/texture/atlas/TextureAtlas.js +2 -2
  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/composeMatrix4.js +33 -23
  258. package/engine/graphics/util/decompose_matrix_4_array.js +61 -0
  259. package/engine/grid/components/GridObstacle.js +3 -10
  260. package/engine/intelligence/behavior/ecs/BehaviorComponent.js +30 -14
  261. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  262. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  263. package/engine/knowledge/database/StaticKnowledgeDataTable.js +6 -1
  264. package/engine/navigation/ecs/components/Path.js +1 -6
  265. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  266. package/engine/reference/v2/Reference.js +6 -0
  267. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  268. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  269. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  270. package/engine/ui/notification/notificationGenerator.js +1 -1
  271. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  272. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  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 +2 -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 +6 -100
  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
@@ -5,14 +5,13 @@
5
5
  import Vector3 from "../../../core/geom/Vector3.js";
6
6
  import Quaternion from "../../../core/geom/Quaternion.js";
7
7
  import { Matrix4 } from "../../../core/geom/Matrix4.js";
8
- import { Quaternion as ThreeQuaternion } from "three";
9
- import { composeMatrix4 } from "../../graphics/util/composeMatrix4.js";
8
+ import { compose_matrix4_array } from "../../graphics/util/composeMatrix4.js";
9
+ import { decompose_matrix_4_array } from "../../graphics/util/decompose_matrix_4_array.js";
10
10
 
11
11
  const delta = new Vector3();
12
12
 
13
13
  const m4_0 = new Matrix4();
14
14
  const m4_1 = new Matrix4();
15
- const threeQuaternion = new ThreeQuaternion();
16
15
 
17
16
  export class Transform {
18
17
  /**
@@ -166,9 +165,15 @@ export class Transform {
166
165
  * @param {Matrix4} matrix
167
166
  */
168
167
  fromThreeMatrix4(matrix) {
169
- matrix.decompose(this.position, threeQuaternion, this.scale);
168
+ this.fromMatrix4(matrix.elements);
169
+ }
170
170
 
171
- this.rotation.copy(threeQuaternion);
171
+ /**
172
+ *
173
+ * @param {mat4|number[]|Float32Array} m
174
+ */
175
+ fromMatrix4(m) {
176
+ decompose_matrix_4_array(m, this.position, this.rotation, this.scale);
172
177
  }
173
178
 
174
179
  /**
@@ -176,7 +181,15 @@ export class Transform {
176
181
  * @param {Matrix4} matrix
177
182
  */
178
183
  toThreeMatrix(matrix) {
179
- composeMatrix4(matrix, this.position, this.rotation, this.scale);
184
+ this.toMatrix4(matrix.elements);
185
+ }
186
+
187
+ /**
188
+ *
189
+ * @param {number[]|Float32Array} result
190
+ */
191
+ toMatrix4(result) {
192
+ compose_matrix4_array(result, this.position, this.rotation, this.scale);
180
193
  }
181
194
  }
182
195
 
@@ -15,10 +15,23 @@ import { DelayBehavior } from "../../intelligence/behavior/util/DelayBehavior.js
15
15
  import { Light } from "../../graphics/ecs/light/Light.js";
16
16
  import { TransitionPropertyVectorXBehavior } from "../../../../model/game/story/behaviors/generic/TransitionPropertyVectorXBehavior.js";
17
17
 
18
+ /**
19
+ * @readonly
20
+ * @type {number}
21
+ */
18
22
  const SHUTDOWN_GRACE_PERIOD = 60;
19
23
 
24
+ /**
25
+ *
26
+ * @type {Map<Class|function, function(T,entity?:EntityBuilder,createEntity?:function,createEntityContext?:*):number>}
27
+ */
20
28
  const component_shutdown = new Map();
21
29
 
30
+ /**
31
+ * @template T
32
+ * @param {Class<T>} type
33
+ * @param {function(T,entity?:EntityBuilder,createEntity?:function,createEntityContext?:*):number} method
34
+ */
22
35
  function addShutdown(type, method) {
23
36
  component_shutdown.set(type, method);
24
37
  }
@@ -152,6 +165,11 @@ addShutdown(SoundEmitter, (soundEmitter, builder, createEntity, createEntityThis
152
165
  * @return {number} duration in seconds until the entity is completely hidden
153
166
  */
154
167
  export function hideEntityGracefully(builder, createEntity, createEntityThisArg) {
168
+ if (!builder.isBuilt) {
169
+ // already destroyed
170
+ return 0;
171
+ }
172
+
155
173
  let delay = 0;
156
174
 
157
175
  const components = builder.element;
@@ -40,6 +40,7 @@ import { ShadowMapRenderer } from "./shadows/ShadowMapRenderer.js";
40
40
  import { CameraViewManager } from "./render/view/CameraViewManager.js";
41
41
  import { StandardFrameBuffers } from "./StandardFrameBuffers.js";
42
42
  import { load_environment_map } from "./texture/cubemap/load_environment_map.js";
43
+ import { CompositingStages } from "./composit/CompositingStages.js";
43
44
 
44
45
  /**
45
46
  *
@@ -96,7 +97,13 @@ function GraphicsEngine(camera, entityManger) {
96
97
  preRender: new Signal(),
97
98
  postRender: new Signal(),
98
99
 
100
+ /**
101
+ * @deprecated
102
+ */
99
103
  preComposite: new Signal(),
104
+ /**
105
+ * @deprecated
106
+ */
100
107
  postComposite: new Signal(),
101
108
 
102
109
  buffersRendered: new Signal(),
@@ -345,23 +352,6 @@ GraphicsEngine.prototype.start = function () {
345
352
 
346
353
  const webGLRenderer = this.renderer = new WebGLRenderer(rendererParameters);
347
354
 
348
- let g = 0;
349
- let t = 0;
350
- webGLRenderer.info.memory = {
351
- get geometries() {
352
- return g;
353
- },
354
- set geometries(v) {
355
- g = v;
356
- },
357
- get textures() {
358
- return t;
359
- },
360
- set textures(v) {
361
- t = v;
362
- }
363
- };
364
-
365
355
  //print GPU info
366
356
  const GPU_NAME = this.getGPUName();
367
357
 
@@ -387,7 +377,7 @@ GraphicsEngine.prototype.start = function () {
387
377
  const domElement = this.domElement = webGLRenderer.domElement;
388
378
  //disable selection
389
379
  const style = domElement.style;
390
- domElement.classList.add("renderer-engine-render-canvas");
380
+ domElement.classList.add("graphics-engine-render-canvas");
391
381
  style.userSelect = style.webkitUserSelect = style.mozUserSelect = "none";
392
382
  // see : https://www.w3.org/TR/pointerevents/#the-touch-action-css-property
393
383
  style.touchAction = "none";
@@ -645,16 +635,14 @@ GraphicsEngine.prototype.render = function (renderTarget) {
645
635
  //do the opaque pass
646
636
  this.renderOpaque();
647
637
 
638
+ this.layerComposer.composite(renderer, CompositingStages.POST_OPAQUE);
639
+
648
640
  this.on.buffersRendered.send3(renderer, camera, scene);
649
641
 
650
642
  // transparent pass
651
643
  this.renderTransparent();
652
644
 
653
- this.on.preComposite.send3(renderer, camera, scene);
654
-
655
- this.layerComposer.composite(renderer);
656
-
657
- this.on.postComposite.send3(renderer, camera, scene);
645
+ this.layerComposer.composite(renderer, CompositingStages.POST_TRANSPARENT);
658
646
 
659
647
 
660
648
  //dispatch post-render event
@@ -95,11 +95,11 @@ function makeConfig(engine) {
95
95
  new TopDownCameraControllerSystem(graphics),
96
96
  new TopDownCameraLanderSystem(),
97
97
  new CameraSystem(graphics.scene, graphics),
98
- new MeshSystem(graphics, assetManager),
98
+ new MeshSystem(engine),
99
99
  new ClingToTerrainSystem(),
100
100
  new TerrainSystem(graphics, assetManager),
101
101
  new WaterSystem(graphics),
102
- new Trail2DSystem(graphics, assetManager),
102
+ new Trail2DSystem(engine),
103
103
  new Foliage2System(assetManager, graphics),
104
104
  new ViewportPositionSystem(graphics.viewport.size),
105
105
  new GridPosition2TransformSystem(),
@@ -5,6 +5,7 @@ import { blendingType2three } from "../texture/sampler/blendingType2Three.js";
5
5
  import { ScreenSpaceQuadShader } from "../shaders/ScreenSpaceQuadShader.js";
6
6
  import { BlendingType } from "../texture/sampler/BlendingType.js";
7
7
  import { FULL_SCREEN_TRIANGLE_GEOMETRY } from "../geometry/FULL_SCREEN_TRIANGLE_GEOMETRY.js";
8
+ import Signal from "../../../core/events/signal/Signal.js";
8
9
 
9
10
  /**
10
11
  *
@@ -29,11 +30,15 @@ function assignMaterialBlending(material, blending) {
29
30
  export class CompositLayer {
30
31
  /**
31
32
  *
32
- * @param {WebGLRenderTarget} renderTarget
33
+ * @param {THREE.WebGLRenderTarget} renderTarget
33
34
  * @param {BlendingType} blending
34
35
  * @param {number} renderTargetScale
35
36
  */
36
- constructor({ renderTarget, blending, renderTargetScale = 1 }) {
37
+ constructor({
38
+ renderTarget,
39
+ blending,
40
+ renderTargetScale = 1
41
+ }) {
37
42
  /**
38
43
  * Human-readable name, useful for debugging
39
44
  * @type {string}
@@ -57,9 +62,13 @@ export class CompositLayer {
57
62
  */
58
63
  this.renderTargetScale = renderTargetScale;
59
64
 
60
- const material = this.buildMaterial();
65
+ this.object = new Mesh(FULL_SCREEN_TRIANGLE_GEOMETRY, this.buildMaterial());
61
66
 
62
- this.object = new Mesh(FULL_SCREEN_TRIANGLE_GEOMETRY, material);
67
+ /**
68
+ * Which compositing stage this layer belongs to, stages are rendered independently
69
+ * @type {number}
70
+ */
71
+ this.stage = 0;
63
72
 
64
73
  this.size = new Vector2();
65
74
 
@@ -74,6 +83,10 @@ export class CompositLayer {
74
83
  * @type {number}
75
84
  */
76
85
  this.__order = 0;
86
+
87
+ this.on = {
88
+ preRender: new Signal()
89
+ };
77
90
  }
78
91
 
79
92
  /**
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @readonly
3
+ * @enum {number}
4
+ */
5
+ export const CompositingStages = {
6
+ POST_OPAQUE: 1,
7
+ POST_TRANSPARENT: 0
8
+ }
@@ -52,8 +52,6 @@ class LayerCompositer {
52
52
 
53
53
  layer.renderTarget.dispose();
54
54
 
55
- this.scene.remove(layer.object);
56
-
57
55
  return true;
58
56
  }
59
57
 
@@ -113,8 +111,6 @@ class LayerCompositer {
113
111
 
114
112
  this.layerTargets.push(layer);
115
113
 
116
- this.scene.add(layer.object);
117
-
118
114
  return true;
119
115
  }
120
116
 
@@ -138,13 +134,46 @@ class LayerCompositer {
138
134
 
139
135
  /**
140
136
  *
141
- * @param {WebGLRenderer} renderer
137
+ * @param {number} stage
138
+ * @private
142
139
  */
143
- composite(renderer) {
140
+ __prepare_scene_for_stage(stage) {
141
+ const layers = this.layerTargets;
142
+ const layer_count = layers.length;
143
+
144
+ const scene = this.scene;
145
+
146
+ let child_count = 0;
147
+
148
+ for (let i = 0; i < layer_count; i++) {
149
+ const layer = layers[i];
150
+
151
+ if (layer.stage !== stage) {
152
+ continue;
153
+ }
154
+
155
+ scene.children[child_count++] = layer.object;
156
+
157
+ layer.on.preRender.send0();
158
+ }
159
+
160
+ scene.children.length = child_count;
161
+ }
162
+
163
+ /**
164
+ *
165
+ * @param {THREE.WebGLRenderer} renderer
166
+ * @param {number} stage
167
+ */
168
+ composite(renderer, stage) {
169
+ assert.isNonNegativeInteger(stage, 'stage');
170
+
144
171
  if (!this.hasActiveLayers()) {
145
172
  return;
146
173
  }
147
174
 
175
+ this.__prepare_scene_for_stage(stage);
176
+
148
177
  const camera = this.camera;
149
178
  const scene = this.scene;
150
179
 
@@ -1,8 +1,9 @@
1
- import { computeHashFloat, computeHashIntegerArray} from "../../../../../core/math/MathUtils.js";
2
1
  import { min2 } from "../../../../../core/math/min2.js";
3
2
  import { AnimationClipFlag } from "./AnimationClipFlag.js";
4
3
  import { LoopOnce, LoopRepeat } from "three";
5
4
  import { AnimationEventTypes } from "./AnimationEventTypes.js";
5
+ import { computeHashIntegerArray } from "../../../../../core/collection/array/computeHashIntegerArray.js";
6
+ import { computeHashFloat } from "../../../../../core/math/hash/computeHashFloat.js";
6
7
 
7
8
  export class AnimationClip {
8
9
  constructor() {
@@ -1,7 +1,8 @@
1
1
  import { isArrayEqual } from "../../../../../core/collection/ArrayUtils.js";
2
- import { computeHashArray, computeHashIntegerArray } from "../../../../../core/math/MathUtils.js";
3
2
  import { computeStringHash } from "../../../../../core/primitives/strings/computeStringHash.js";
4
3
  import { invokeObjectHash } from "../../../../../core/model/object/invokeObjectHash.js";
4
+ import { computeHashArray } from "../../../../../core/collection/array/computeHashArray.js";
5
+ import { computeHashIntegerArray } from "../../../../../core/collection/array/computeHashIntegerArray.js";
5
6
 
6
7
  /**
7
8
  *
@@ -1,4 +1,5 @@
1
- import { computeHashFloat, computeHashIntegerArray } from "../../../../../core/math/MathUtils.js";
1
+ import { computeHashIntegerArray } from "../../../../../core/collection/array/computeHashIntegerArray.js";
2
+ import { computeHashFloat } from "../../../../../core/math/hash/computeHashFloat.js";
2
3
 
3
4
  export class AnimationNotification {
4
5
  constructor() {
@@ -1,6 +1,7 @@
1
- import { computeHashIntegerArray, computeObjectHash } from "../../../../../core/math/MathUtils.js";
2
1
  import { objectDeepEquals } from "../../../../../core/model/object/objectDeepEquals.js";
3
2
  import { computeStringHash } from "../../../../../core/primitives/strings/computeStringHash.js";
3
+ import { computeHashIntegerArray } from "../../../../../core/collection/array/computeHashIntegerArray.js";
4
+ import { computeObjectHash } from "../../../../../core/math/hash/computeObjectHash.js";
4
5
 
5
6
  export class AnimationNotificationDefinition {
6
7
  constructor() {
@@ -3,11 +3,12 @@ import { AnimationTransition } from "./AnimationTransition.js";
3
3
  import { AnimationStateType } from "./AnimationStateType.js";
4
4
  import { AnimationMixer } from "three";
5
5
  import { AnimationGraphFlag } from "./AnimationGraphFlag.js";
6
- import { computeHashFloat, computeHashIntegerArray } from "../../../../../../core/math/MathUtils.js";
7
6
  import { writeAnimationGraphDefinitionToJSON } from "./definition/serialization/writeAnimationGraphDefinitionToJSON.js";
8
7
  import { readAnimationGraphDefinitionFromJSON } from "./definition/serialization/readAnimationGraphDefinitionFromJSON.js";
9
8
  import { assert } from "../../../../../../core/assert.js";
10
9
  import { threeUpdateTransform } from "../../../../util/threeUpdateTransform.js";
10
+ import { computeHashIntegerArray } from "../../../../../../core/collection/array/computeHashIntegerArray.js";
11
+ import { computeHashFloat } from "../../../../../../core/math/hash/computeHashFloat.js";
11
12
 
12
13
  export class AnimationGraph {
13
14
  constructor() {
@@ -4,8 +4,9 @@ import { AnimationStateDefinition } from "./AnimationStateDefinition.js";
4
4
  import { AnimationClipDefinition } from "../../AnimationClipDefinition.js";
5
5
  import { AnimationClip } from "../../AnimationClip.js";
6
6
  import { isArrayEqual } from "../../../../../../../core/collection/ArrayUtils.js";
7
- import { computeHashArray, computeHashIntegerArray } from "../../../../../../../core/math/MathUtils.js";
8
7
  import { invokeObjectHash } from "../../../../../../../core/model/object/invokeObjectHash.js";
8
+ import { computeHashArray } from "../../../../../../../core/collection/array/computeHashArray.js";
9
+ import { computeHashIntegerArray } from "../../../../../../../core/collection/array/computeHashIntegerArray.js";
9
10
 
10
11
  export class AnimationGraphDefinition {
11
12
  constructor() {
@@ -1,5 +1,5 @@
1
1
  import { AnimationStateType } from "../AnimationStateType.js";
2
- import { computeHashIntegerArray } from "../../../../../../../core/math/MathUtils.js";
2
+ import { computeHashIntegerArray } from "../../../../../../../core/collection/array/computeHashIntegerArray.js";
3
3
 
4
4
  export class AnimationStateDefinition {
5
5
  constructor() {
@@ -1,5 +1,6 @@
1
- import { computeHashFloat, computeHashIntegerArray } from "../../../../../../../core/math/MathUtils.js";
2
1
  import { computeStringHash } from "../../../../../../../core/primitives/strings/computeStringHash.js";
2
+ import { computeHashIntegerArray } from "../../../../../../../core/collection/array/computeHashIntegerArray.js";
3
+ import { computeHashFloat } from "../../../../../../../core/math/hash/computeHashFloat.js";
3
4
 
4
5
  export class AnimationTransitionDefinition {
5
6
  constructor() {
@@ -1,7 +1,7 @@
1
- import { isValueBetweenInclusive } from "../../../../core/math/MathUtils.js";
2
1
  import { frustumFromCamera } from "./CameraSystem.js";
3
2
  import { Frustum as ThreeFrustum } from "three";
4
3
  import { v3_dot } from "../../../../core/geom/v3_dot.js";
4
+ import { isValueBetweenInclusive } from "../../../../core/math/isValueBetweenInclusive.js";
5
5
 
6
6
  const CLIPPING_EPSILON = 0.001;
7
7
 
@@ -1,7 +1,8 @@
1
1
  import { Color } from "../../../../core/color/Color.js";
2
2
  import { assert } from "../../../../core/assert.js";
3
- import { computeHashFloat, computeHashIntegerArray } from "../../../../core/math/MathUtils.js";
4
3
  import { COMPONENT_SERIALIZATION_TRANSIENT_FIELD } from "../../../ecs/storage/COMPONENT_SERIALIZATION_TRANSIENT_FIELD.js";
4
+ import { computeHashIntegerArray } from "../../../../core/collection/array/computeHashIntegerArray.js";
5
+ import { computeHashFloat } from "../../../../core/math/hash/computeHashFloat.js";
5
6
 
6
7
  export class HighlightDefinition {
7
8
  constructor() {
@@ -7,6 +7,7 @@ import { HighlightRenderGroup } from "../renderer/HighlightRenderGroup.js";
7
7
  import { ObjectPoolFactory } from "../../../../../core/model/object/ObjectPoolFactory.js";
8
8
  import { HighlightRenderElement } from "../renderer/HighlightRenderElement.js";
9
9
  import { noop } from "../../../../../core/function/Functions.js";
10
+ import { CompositingStages } from "../../../composit/CompositingStages.js";
10
11
 
11
12
  export class OutlineRenderPlugin extends EnginePlugin {
12
13
  constructor() {
@@ -99,12 +100,14 @@ export class OutlineRenderPlugin extends EnginePlugin {
99
100
 
100
101
  /**
101
102
  *
102
- * @param {WebGLRenderer} renderer
103
- * @param {Camera} camera
104
- * @param {ThreeScene} scene
105
103
  * @private
106
104
  */
107
- __render(renderer, camera, scene) {
105
+ __render() {
106
+ const engine = this.engine;
107
+ const graphics = engine.graphics;
108
+
109
+ const camera = graphics.camera;
110
+
108
111
  // collect elements
109
112
  const source_count = this.__sources.length;
110
113
 
@@ -139,11 +142,12 @@ export class OutlineRenderPlugin extends EnginePlugin {
139
142
 
140
143
  viewport_size.process(this.__set_viewport_size, this);
141
144
 
142
- graphics.on.preComposite.add(this.__render, this);
143
-
144
145
  // create compositing layer
145
146
  this.__compositing_layer = graphics.layerComposer.createLayer(this.__renderer.__renderTargetFinal, BlendingType.MultiplyAdd);
146
147
  this.__compositing_layer.name = "Silhouette Outline";
148
+ this.__compositing_layer.stage = CompositingStages.POST_TRANSPARENT;
149
+
150
+ this.__compositing_layer.on.preRender.add(this.__render, this);
147
151
 
148
152
 
149
153
  // set rendering resolution
@@ -156,7 +160,7 @@ export class OutlineRenderPlugin extends EnginePlugin {
156
160
 
157
161
  const graphics = this.engine.graphics;
158
162
 
159
- graphics.on.preComposite.remove(this.__render, this);
163
+ this.__compositing_layer.on.preRender.remove(this.__render, this);
160
164
 
161
165
  graphics.viewport.size.onChanged.remove(this.__set_viewport_size, this);
162
166
 
@@ -1,6 +1,6 @@
1
1
  import ObservedEnum from "../../../../core/model/ObservedEnum";
2
2
  import {Color} from "../../../../core/color/Color";
3
- import {Vector1} from "../../../../core/geom/Vector1";
3
+ import Vector1 from "../../../../core/geom/Vector1";
4
4
  import ObservedBoolean from "../../../../core/model/ObservedBoolean";
5
5
  import {LightType} from "./LightType";
6
6
 
@@ -103,9 +103,14 @@ export class Light {
103
103
 
104
104
  if (json.intensity !== undefined) {
105
105
  this.intensity.fromJSON(json.intensity);
106
+ } else {
107
+ this.intensity.set(1);
106
108
  }
109
+
107
110
  if (json.castShadow !== undefined) {
108
111
  this.castShadow.fromJSON(json.castShadow);
112
+ } else {
113
+ this.castShadow.set(false);
109
114
  }
110
115
 
111
116
  const actual_type = this.type.getValue();
@@ -99,7 +99,8 @@ export class ThreeLightBinding extends LightBinding {
99
99
  */
100
100
  const cache = this.__system.__three_light_cache;
101
101
 
102
- threeEnsureLightObject(this.__c_light, cache);
102
+ const c_light = this.__c_light;
103
+ threeEnsureLightObject(c_light, cache);
103
104
 
104
105
  super.link(ctx);
105
106
  }
@@ -112,6 +113,9 @@ export class ThreeLightBinding extends LightBinding {
112
113
 
113
114
  cache.release(this.__three_getLight());
114
115
 
116
+ // clear bound light
117
+ this.__c_light.__threeObject = null;
118
+
115
119
  this.__shadowmap_unlink();
116
120
 
117
121
  super.unlink(ctx);
@@ -3,13 +3,14 @@
3
3
  */
4
4
  import { AABB3 } from "../../../../core/bvh2/aabb3/AABB3.js";
5
5
  import { LeafNode } from "../../../../core/bvh2/LeafNode.js";
6
- import { computeHashFloat, computeHashIntegerArray } from "../../../../core/math/MathUtils.js";
7
6
  import { getSkeletonBoneByType } from "./SkeletonUtils.js";
8
7
  import { assert } from "../../../../core/assert.js";
9
8
  import { computeStringHash } from "../../../../core/primitives/strings/computeStringHash.js";
10
9
  import { Transform } from "../../../ecs/transform/Transform.js";
11
10
  import { updateNodeByTransformAndBBB } from "./updateNodeByTransformAndBBB.js";
12
11
  import { applyTransformToThreeObject } from "./applyTransformToThreeObject.js";
12
+ import { computeHashIntegerArray } from "../../../../core/collection/array/computeHashIntegerArray.js";
13
+ import { computeHashFloat } from "../../../../core/math/hash/computeHashFloat.js";
13
14
 
14
15
  /**
15
16
  *
@@ -0,0 +1,5 @@
1
+ export const DrawMode = {
2
+ Triangles: 0,
3
+ Lines: 2,
4
+ LineSegments: 3
5
+ };
@@ -0,0 +1,13 @@
1
+ import {BufferGeometry, Material} from "three";
2
+ import {AABB3} from "../../../../core/bvh2/aabb3/AABB3";
3
+
4
+ export class ShadedGeometry {
5
+ readonly geometry: BufferGeometry
6
+ readonly material: Material
7
+
8
+ readonly bvh: Readonly<AABB3>
9
+
10
+ from(geometry: BufferGeometry, material: Material): void
11
+
12
+ static from(geometry: BufferGeometry, material: Material): ShadedGeometry
13
+ }