@woosh/meep-engine 2.33.22 → 2.33.26

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 (288) hide show
  1. package/core/bvh2/BinaryNode.js +1 -1
  2. package/core/bvh2/aabb3/AABB3.js +18 -0
  3. package/core/bvh2/aabb3/AABB3Math.js +1 -1
  4. package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
  5. package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
  6. package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
  7. package/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +5 -1
  8. package/core/bvh2/traversal/__detailed_box_volume_intersection.js +31 -11
  9. package/core/collection/ArrayUtils.js +1 -1
  10. package/core/collection/array/arrayQuickSort.js +9 -6
  11. package/core/collection/array/array_swap.js +22 -0
  12. package/core/collection/array/binarySearchHighIndex.js +1 -1
  13. package/core/collection/array/computeHashArray.js +22 -0
  14. package/core/collection/array/computeHashIntegerArray.js +15 -0
  15. package/core/collection/array/copyArray.js +2 -2
  16. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  17. package/core/color/Color.js +2 -1
  18. package/core/function/FunctionCompiler.js +2 -1
  19. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  20. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +10 -2
  21. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  22. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  23. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  24. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  25. package/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
  26. package/core/geom/3d/plane/plane_computeConvex3PlaneIntersection.js +13 -14
  27. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  28. package/core/geom/3d/shape/AbstractShape3D.js +65 -0
  29. package/core/geom/3d/shape/TransformedShape3D.js +181 -0
  30. package/core/geom/3d/shape/TransformedShape3D.spec.js +33 -0
  31. package/core/geom/3d/shape/UnionShape3D.js +255 -0
  32. package/core/geom/3d/shape/UnitCubeShape3D.js +101 -0
  33. package/core/geom/3d/shape/UnitCubeShape3D.spec.js +42 -0
  34. package/core/geom/3d/shape/UnitSphereShape3D.js +55 -0
  35. package/core/geom/3d/shape/util/compute_signed_distance_gradient_by_sampling.js +48 -0
  36. package/core/geom/3d/shape/util/shape_to_visual_entity.js +159 -0
  37. package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
  38. package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
  39. package/core/geom/AABB2.js +1 -1
  40. package/core/geom/ConicRay.js +3 -1
  41. package/core/geom/LineSegment.js +0 -78
  42. package/core/geom/Matrix4.js +7 -8
  43. package/core/geom/Plane.js +14 -9
  44. package/core/geom/Rectangle.js +2 -1
  45. package/core/geom/Vector1.js +1 -1
  46. package/core/geom/Vector3.js +2 -1
  47. package/core/geom/Vector4.js +2 -1
  48. package/core/geom/random/randomPointInBox.js +7 -3
  49. package/core/geom/random/randomPointInPoint.js +6 -3
  50. package/core/geom/random/randomPointInSphere.js +9 -5
  51. package/core/geom/random/randomPointOnBox.js +7 -3
  52. package/core/geom/random/randomPointOnSphere.js +6 -3
  53. package/core/geom/v3_length.js +8 -3
  54. package/core/graph/graph_k_means_cluster.js +1 -1
  55. package/core/json/resolvePathByArray.js +2 -2
  56. package/core/math/MathUtils.js +0 -354
  57. package/core/math/MathUtils.spec.js +7 -1
  58. package/core/math/gaussian.js +9 -0
  59. package/core/math/hash/computeHashFloat.js +17 -0
  60. package/core/math/hash/computeHashFloatArray.js +34 -0
  61. package/core/math/hash/computeObjectHash.js +54 -0
  62. package/core/math/intersects1D.js +19 -0
  63. package/core/math/interval/NumericInterval.js +2 -2
  64. package/core/math/isValueBetween.js +10 -0
  65. package/core/math/isValueBetweenInclusive.js +10 -0
  66. package/core/math/noise/curl_noise_3dt.js +1 -1
  67. package/core/math/noise/sdnoise.js +10 -10
  68. package/core/math/overlap1D.js +19 -0
  69. package/core/math/pingpong.js +17 -0
  70. package/core/math/random/makeRangedRandom.js +19 -0
  71. package/core/math/random/randomFloatBetween.js +14 -0
  72. package/core/math/random/randomFromArray.js +19 -0
  73. package/core/math/random/randomGaussian.js +15 -0
  74. package/core/math/random/randomIntegerBetween.js +14 -0
  75. package/core/math/random/roundFair.js +15 -0
  76. package/core/math/separation1D.js +21 -0
  77. package/core/math/solveQuadratic.js +25 -0
  78. package/core/model/BoundedValue.js +1 -1
  79. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  80. package/core/model/node-graph/node/Port.js +1 -1
  81. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  82. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  83. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  84. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  85. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  86. package/core/model/stat/LinearModifier.js +1 -1
  87. package/core/primitives/array/computeIntegerArrayHash.js +1 -1
  88. package/{engine/graphics/render/forward_plus/materials → core/primitives/strings}/insert_after.js +3 -0
  89. package/core/primitives/strings/insert_after_or_replace.js +27 -0
  90. package/editor/process/symbolic/makeHelperBoxGeometry.js +44 -0
  91. package/editor/view/ecs/EntityEditor.js +2 -2
  92. package/editor/view/ecs/components/particles/ParticleEmitterController.js +2 -2
  93. package/engine/EngineHarness.js +1 -0
  94. package/engine/animation/AnimationUtils.js +5 -5
  95. package/engine/animation/curve/AnimationCurve.js +72 -0
  96. package/engine/animation/curve/Keyframe.js +27 -0
  97. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  98. package/engine/asset/Asset.js +1 -1
  99. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  100. package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
  101. package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
  102. package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
  103. package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
  104. package/engine/asset/loaders/material/computeMaterialHash.js +3 -1
  105. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  106. package/engine/ecs/EntityBuilder.js +25 -5
  107. package/engine/ecs/animation/Animation.js +2 -1
  108. package/engine/ecs/animation/InverseKinematics.js +2 -1
  109. package/engine/ecs/attachment/AttachmentBinding.js +8 -0
  110. package/engine/ecs/attachment/AttachmentSystem.js +4 -0
  111. package/engine/ecs/attachment/TransformAttachmentBinding.js +14 -44
  112. package/engine/ecs/components/Tag.js +27 -6
  113. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  114. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  115. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  116. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  117. package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
  118. package/engine/ecs/fow/FogOfWar.js +4 -0
  119. package/engine/ecs/fow/FogOfWarSystem.js +2 -0
  120. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  121. package/engine/ecs/gui/GUIElement.js +1 -1
  122. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  123. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +2 -0
  124. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  125. package/engine/ecs/system/AbstractContextSystem.js +1 -1
  126. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  127. package/engine/ecs/systems/SteeringSystem.js +1 -1
  128. package/engine/ecs/systems/TagSystem.js +17 -0
  129. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  130. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  131. package/engine/ecs/transform/Transform.js +19 -6
  132. package/engine/ecs/util/hideEntityGracefully.js +18 -0
  133. package/engine/graphics/GraphicsEngine.js +11 -23
  134. package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
  135. package/engine/graphics/composit/CompositLayer.js +17 -4
  136. package/engine/graphics/composit/CompositingStages.js +8 -0
  137. package/engine/graphics/composit/LayerCompositer.js +35 -6
  138. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  139. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  140. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  141. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  142. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  143. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  144. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  145. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  146. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
  147. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  148. package/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.js +11 -7
  149. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  150. package/engine/graphics/ecs/light/Light.js +5 -0
  151. package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +5 -1
  152. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  153. package/engine/graphics/ecs/mesh-v2/DrawMode.js +5 -0
  154. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  155. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +32 -18
  156. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  157. package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
  158. package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
  159. package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
  160. package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
  161. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  162. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  163. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  164. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  165. package/engine/graphics/micron/buildPatchwork.js +1 -1
  166. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  167. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  168. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  169. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  170. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  171. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
  172. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  173. package/engine/graphics/particles/ParticleEmitterLibrary.js +3 -0
  174. package/engine/graphics/particles/ecs/{ParticleEmitterSystem2.js → ParticleEmitterSystem.js} +17 -9
  175. package/engine/graphics/particles/particular/engine/ParticularEngine.js +12 -4
  176. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
  177. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +106 -169
  178. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +5 -0
  179. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
  180. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +141 -14
  181. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +8 -7
  182. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
  183. package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
  184. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  185. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  186. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  187. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  188. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +24 -0
  189. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +262 -71
  190. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  191. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +80 -46
  192. package/engine/graphics/particles/particular/engine/shader/debugAtlas.js +14 -0
  193. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  194. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  195. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  196. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  197. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  198. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  199. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  200. package/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +141 -0
  201. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +478 -0
  202. package/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.js +27 -0
  203. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +935 -0
  204. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  205. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  206. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  207. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  208. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  209. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  210. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  211. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  212. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  213. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  214. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  215. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
  216. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +13 -7
  217. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  218. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  219. package/engine/graphics/render/forward_plus/LightManager.js +126 -95
  220. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  221. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  222. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  223. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  224. package/engine/graphics/render/forward_plus/computeFrustumCorners.js +14 -32
  225. package/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +1 -0
  226. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +32 -0
  227. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +51 -0
  228. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +25 -0
  229. package/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +31 -120
  230. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +35 -0
  231. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +4 -5
  232. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  233. package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +10 -3
  234. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +595 -60
  235. package/engine/graphics/render/forward_plus/prototypeLightManager.js +256 -136
  236. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  237. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  238. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  239. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
  240. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  241. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  242. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  243. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  244. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  245. package/engine/graphics/render/layers/RenderLayerUtils.js +7 -4
  246. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  247. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
  248. package/engine/graphics/shaders/TerrainShader.js +4 -5
  249. package/engine/graphics/shadows/ShadowMapRenderer.js +8 -2
  250. package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
  251. package/engine/graphics/texture/atlas/TextureAtlas.js +2 -2
  252. package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
  253. package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
  254. package/engine/graphics/texture/sampler/Sampler2D.js +8 -7
  255. package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
  256. package/engine/graphics/texture/sampler/scaleSampler2D.js +7 -10
  257. package/engine/graphics/trail/x/RibbonMaterialX.js +3 -3
  258. package/engine/graphics/trail/x/RibbonX.js +17 -2
  259. package/engine/graphics/trail/x/RibbonXPlugin.js +51 -1
  260. package/engine/graphics/util/composeMatrix4.js +33 -23
  261. package/engine/graphics/util/decompose_matrix_4_array.js +61 -0
  262. package/engine/grid/components/GridObstacle.js +3 -10
  263. package/engine/intelligence/behavior/ecs/BehaviorComponent.js +30 -14
  264. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  265. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  266. package/engine/knowledge/database/StaticKnowledgeDataTable.js +6 -1
  267. package/engine/navigation/ecs/components/Path.js +1 -6
  268. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  269. package/engine/reference/v2/Reference.js +6 -0
  270. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  271. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  272. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  273. package/engine/ui/notification/notificationGenerator.js +1 -1
  274. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  275. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  276. package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
  277. package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
  278. package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
  279. package/generation/theme/ThemeEngine.js +2 -2
  280. package/misc/makeMaterialIconCached.js +2 -2
  281. package/package.json +3 -3
  282. package/view/View.js +4 -2
  283. package/view/elements/image/HTMLElementCacheKey.js +2 -1
  284. package/view/elements/radial/RadialText.js +2 -1
  285. package/view/minimap/gl/MinimapMarkersGL.js +6 -100
  286. package/view/minimap/gl/buildMaterial.js +94 -0
  287. package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
  288. package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -345
@@ -0,0 +1,38 @@
1
+ const _lut_array_buffer = new ArrayBuffer(84);
2
+ /**
3
+ * Mapping from 3 plane bitfield, corresponding to intersection point of the planes
4
+ * @type {number[]}
5
+ */
6
+ export const triplanar_corner_mapping = new Uint8Array(_lut_array_buffer, 0, 43);
7
+
8
+ triplanar_corner_mapping[0b010101] = 0;
9
+ triplanar_corner_mapping[0b100101] = 1;
10
+ triplanar_corner_mapping[0b011001] = 2;
11
+ triplanar_corner_mapping[0b101001] = 3;
12
+ triplanar_corner_mapping[0b010110] = 4;
13
+ triplanar_corner_mapping[0b100110] = 5;
14
+ triplanar_corner_mapping[0b011010] = 6;
15
+ triplanar_corner_mapping[0b101010] = 7;
16
+ /**
17
+ * Mapping from 2 plane bitfield to 2 corner bitfield, corresponding to corner indices of intersecting planes
18
+ * @type {number[]}
19
+ */
20
+ export const biplanar_edge_mapping = new Uint8Array(_lut_array_buffer, 43, 41);
21
+
22
+ biplanar_edge_mapping[0b000101] = 0 | (1 << 3);
23
+ biplanar_edge_mapping[0b000110] = 4 | (5 << 3);
24
+
25
+ biplanar_edge_mapping[0b001001] = 2 | (3 << 3);
26
+ biplanar_edge_mapping[0b001010] = 6 | (7 << 3);
27
+
28
+ biplanar_edge_mapping[0b010100] = 0 | (4 << 3);
29
+ biplanar_edge_mapping[0b011000] = 2 | (6 << 3);
30
+
31
+ biplanar_edge_mapping[0b100100] = 1 | (5 << 3);
32
+ biplanar_edge_mapping[0b101000] = 3 | (7 << 3);
33
+
34
+ biplanar_edge_mapping[0b010001] = 0 | (2 << 3);
35
+ biplanar_edge_mapping[0b010010] = 4 | (6 << 3);
36
+
37
+ biplanar_edge_mapping[0b100001] = 1 | (3 << 3);
38
+ biplanar_edge_mapping[0b100010] = 5 | (7 << 3);
@@ -0,0 +1,86 @@
1
+ import { v3_distance_sqr } from "../../../../../core/geom/v3_distance_sqr.js";
2
+ import { biplanar_edge_mapping, triplanar_corner_mapping } from "./cube_mapping.js";
3
+ import { line3_computeSegmentPointDistance_sqr } from "../../../../../core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js";
4
+
5
+ /**
6
+ *
7
+ * @param {number} radius
8
+ * @param {number} light_x
9
+ * @param {number} light_y
10
+ * @param {number} light_z
11
+ * @param {number} outside_plane_count
12
+ * @param {number} outside_plane_bitfield
13
+ * @param {number[]} points
14
+ * @return {boolean}
15
+ */
16
+ export function detailed_sphere_frustum_intersection_test(
17
+ radius, light_x, light_y, light_z,
18
+ outside_plane_count, outside_plane_bitfield,
19
+ points
20
+ ) {
21
+
22
+ const radius_sqr = radius * radius;
23
+
24
+ if (outside_plane_count === 3) {
25
+ // nearest point in a corner, find the corner
26
+ const point_index = triplanar_corner_mapping[outside_plane_bitfield];
27
+
28
+ const point_address = point_index * 3;
29
+
30
+ const point_x = points[point_address];
31
+ const point_y = points[point_address + 1];
32
+ const point_z = points[point_address + 2];
33
+
34
+ const distance_to_light_sqr = v3_distance_sqr(
35
+ point_x, point_y, point_z,
36
+ light_x, light_y, light_z
37
+ );
38
+
39
+ // query_bvh_frustum_from_objects.checks_sphere_frustum_corner++;
40
+
41
+ // return distance_to_light_sqr <= radius_sqr;
42
+
43
+ if (distance_to_light_sqr > radius_sqr) {
44
+
45
+ // query_bvh_frustum_from_objects.rejection_sphere_count++;
46
+ return false;
47
+ }
48
+
49
+ } else if (outside_plane_count === 2) {
50
+ // nearest point is on an edge of two plane intersection
51
+ const edge_bitfield = biplanar_edge_mapping[outside_plane_bitfield];
52
+
53
+ // get 2 corners from edge bitfield
54
+ const corner_index_0 = edge_bitfield & 0b111;
55
+ const corner_address_0 = corner_index_0 * 3;
56
+
57
+ const corner_index_1 = (edge_bitfield >> 3) & 0b111;
58
+ const corner_address_1 = corner_index_1 * 3;
59
+
60
+ const point_0_x = points[corner_address_0];
61
+ const point_0_y = points[corner_address_0 + 1];
62
+ const point_0_z = points[corner_address_0 + 2];
63
+
64
+ const point_1_x = points[corner_address_1];
65
+ const point_1_y = points[corner_address_1 + 1];
66
+ const point_1_z = points[corner_address_1 + 2];
67
+
68
+ const distance_to_frustum_sqr = line3_computeSegmentPointDistance_sqr(
69
+ point_0_x, point_0_y, point_0_z,
70
+ point_1_x, point_1_y, point_1_z,
71
+ light_x, light_y, light_z
72
+ );
73
+
74
+ // query_bvh_frustum_from_objects.checks_sphere_frustum_edge++;
75
+
76
+ // return distance_to_frustum_sqr <= radius_sqr;
77
+
78
+ if (distance_to_frustum_sqr > radius_sqr) {
79
+
80
+ // query_bvh_frustum_from_objects.rejection_sphere_count++;
81
+ return false;
82
+ }
83
+ }
84
+
85
+ return true;
86
+ }
@@ -0,0 +1,73 @@
1
+ import { detailed_sphere_frustum_intersection_test } from "./detailed_sphere_frustum_intersection_test.js";
2
+
3
+ /**
4
+ *
5
+ * @param {number} light_x
6
+ * @param {number} light_y
7
+ * @param {number} light_z
8
+ * @param {number} radius
9
+ * @param {number[]} points
10
+ * @param {number[]|Float32Array|Float64Array} planes
11
+ * @returns {boolean}
12
+ */
13
+ export function point_light_inside_volume(
14
+ light_x, light_y, light_z, radius,
15
+ points, planes
16
+ ) {
17
+ let j = 0;
18
+ let outside_plane_count = 0;
19
+ let outside_plane_bitfield = 0;
20
+
21
+ // validate if the sphere intersects the plane-bound space
22
+
23
+ // query_bvh_frustum_from_objects.checks_sphere++;
24
+
25
+ for (; j < 6; j++) {
26
+
27
+ const plane_address = j * 4;
28
+
29
+ const plane_normal_x = planes[plane_address];
30
+ const plane_normal_y = planes[plane_address + 1];
31
+ const plane_normal_z = planes[plane_address + 2];
32
+ const plane_constant = planes[plane_address + 3];
33
+
34
+ /*
35
+ compute distance from the center of the sphere to the plane
36
+ NOTE: inlined computation of distance from point to plane
37
+ */
38
+ const distance = (plane_normal_x * light_x + plane_normal_y * light_y + plane_normal_z * light_z) + plane_constant;
39
+
40
+ // query_bvh_frustum_from_objects.checks_sphere_plane++;
41
+
42
+ if (distance < 0) {
43
+ // center of the sphere is below the plane
44
+
45
+ if (distance < -radius) {
46
+ // sphere is entirely below the plane
47
+
48
+ // query_bvh_frustum_from_objects.rejection_sphere_count++;
49
+
50
+ return false;
51
+ }
52
+
53
+ // sphere intersects the plane
54
+
55
+ outside_plane_count++;
56
+
57
+ const plane_bit_mask = 1 << j;
58
+
59
+ outside_plane_bitfield |= plane_bit_mask;
60
+ }
61
+
62
+ }
63
+
64
+ if (outside_plane_count < 2) {
65
+ return true;
66
+ } else {
67
+ return detailed_sphere_frustum_intersection_test(
68
+ radius, light_x, light_y, light_z,
69
+ outside_plane_count, outside_plane_bitfield,
70
+ points
71
+ );
72
+ }
73
+ }
@@ -0,0 +1,131 @@
1
+ import { aabb3_computeDistanceAbovePlane } from "../../../../../core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js";
2
+ import { point_light_inside_volume } from "./point_light_inside_volume.js";
3
+ import { spot_light_inside_volume } from "./spot_light_inside_volume.js";
4
+
5
+ /**
6
+ *
7
+ * @type {(BinaryNode|LeafNode)[]}
8
+ */
9
+ const stack = [];
10
+
11
+ let stackPointer = 0;
12
+
13
+ /**
14
+ * Most of the data is in flat continuous array for cache coherence
15
+ * @param {PointLightData[]} destination
16
+ * @param {number} destination_offset
17
+ * @param {BinaryNode<PointLightData>} root
18
+ * @param {number[]|Float32Array|Float64Array} planes
19
+ * @param {number[]|Float32Array|Float64Array} points
20
+ * @returns {number} number of items added to the destination, non-negative integer
21
+ */
22
+ export function query_bvh_frustum_from_objects(
23
+ destination,
24
+ destination_offset,
25
+ root, planes, points
26
+ ) {
27
+ let i = 0;
28
+ let j = 0;
29
+ // read out points
30
+ const stackOffset = stackPointer;
31
+
32
+ stack[stackPointer] = root;
33
+
34
+ stackPointer++;
35
+
36
+ stack_loop:while (stackPointer-- > stackOffset) {
37
+
38
+ // query_bvh_frustum_from_objects.iteration_count++;
39
+
40
+ const n = stack[stackPointer];
41
+
42
+ if (n.isBinaryNode === true) {
43
+
44
+ for (j = 0; j < 6; j++) {
45
+
46
+ const plane_address = j * 4;
47
+
48
+ const plane_normal_x = planes[plane_address];
49
+ const plane_normal_y = planes[plane_address + 1];
50
+ const plane_normal_z = planes[plane_address + 2];
51
+ const plane_constant = planes[plane_address + 3];
52
+
53
+ const distanceAbovePlane = aabb3_computeDistanceAbovePlane(
54
+ plane_normal_x, plane_normal_y, plane_normal_z, plane_constant,
55
+ n.x0, n.y0, n.z0,
56
+ n.x1, n.y1, n.z1
57
+ );
58
+
59
+ if (distanceAbovePlane < 0) {
60
+ // node is below the plane
61
+
62
+ // query_bvh_frustum_from_objects.rejection_count++;
63
+
64
+ continue stack_loop;
65
+ }
66
+ }
67
+
68
+
69
+ if (n.right !== null) {
70
+ stack[stackPointer] = n.right;
71
+ stackPointer++;
72
+ }
73
+
74
+ if (n.left !== null) {
75
+ stack[stackPointer] = n.left;
76
+ stackPointer++
77
+ }
78
+
79
+ } else {
80
+
81
+ // leaf node
82
+
83
+ /**
84
+ *
85
+ * @type {PointLightData}
86
+ */
87
+ const light_data = n.object;
88
+
89
+ const light = light_data.light;
90
+
91
+ if (light.isPointLight) {
92
+
93
+ const light_position = light.position;
94
+
95
+ const light_x = light_position.x;
96
+ const light_y = light_position.y;
97
+ const light_z = light_position.z;
98
+
99
+ const radius = light.radius.getValue();
100
+
101
+ if (!point_light_inside_volume(light_x, light_y, light_z, radius, points, planes)) {
102
+ continue;
103
+ }
104
+ } else if (light.isSpotLight) {
105
+ if (!spot_light_inside_volume(light, points, planes)) {
106
+ continue;
107
+ }
108
+ }
109
+
110
+ destination[destination_offset + i] = light_data;
111
+
112
+ i++;
113
+ }
114
+
115
+ }
116
+
117
+ //drop the stack frame
118
+ stackPointer = stackOffset;
119
+
120
+ return i;
121
+ }
122
+
123
+ query_bvh_frustum_from_objects.iteration_count = 0;
124
+ query_bvh_frustum_from_objects.rejection_count = 0;
125
+ query_bvh_frustum_from_objects.rejection_sphere_count = 0;
126
+ query_bvh_frustum_from_objects.plane_tests = 0;
127
+ query_bvh_frustum_from_objects.plane_tests_early_exits = 0;
128
+ query_bvh_frustum_from_objects.checks_sphere = 0;
129
+ query_bvh_frustum_from_objects.checks_sphere_plane = 0;
130
+ query_bvh_frustum_from_objects.checks_sphere_frustum_corner = 0;
131
+ query_bvh_frustum_from_objects.checks_sphere_frustum_edge = 0;
@@ -0,0 +1,129 @@
1
+ import { aabb3_computeDistanceAbovePlane } from "../../../../../core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js";
2
+ import { point_light_inside_volume } from "./point_light_inside_volume.js";
3
+ import { BVH_BINARY_NODE_SIZE, BVH_LEAF_NODE_SIZE } from "../../../../../core/bvh2/binary/2/BinaryUint32BVH.js";
4
+
5
+ /**
6
+ *
7
+ * @type {number[]}
8
+ */
9
+ const stack = [];
10
+
11
+ /**
12
+ * Most of the data is in flat continuous array for cache coherence
13
+ * @param {number[]} destination
14
+ * @param {number} destination_offset
15
+ * @param {BinaryUint32BVH} root
16
+ * @param {number[]|Uint8ClampedArray} source_data
17
+ * @param {number[]|Float32Array|Float64Array} planes
18
+ * @param {number[]|Float32Array|Float64Array} points
19
+ * @returns {number} number of items added to the destination, non-negative integer
20
+ */
21
+ export function query_bvh_frustum_from_texture(
22
+ destination,
23
+ destination_offset,
24
+ root,
25
+ source_data,
26
+ planes, points
27
+ ) {
28
+
29
+ let stackPointer = 1;
30
+ let result = 0;
31
+
32
+ /**
33
+ * After performing empirical tests, stack-based depth-first traversal turns out faster than using a queue
34
+ * @type {number}
35
+ */
36
+ stack[0] = 0;
37
+
38
+ const binary_node_count = root.getBinaryNodeCount();
39
+ const last_valid_index = binary_node_count + root.getLeafNodeCount();
40
+ const data_view = root.getDataView();
41
+
42
+ stack_loop:while (stackPointer-- > 0) {
43
+
44
+ // query_bvh_frustum_from_objects.iteration_count++;
45
+ const node_index = stack[stackPointer];
46
+
47
+ if (node_index < binary_node_count) {
48
+ // is intermediate node
49
+ const node_address = node_index * BVH_BINARY_NODE_SIZE;
50
+
51
+ const n_x0 = data_view.getFloat32(node_address);
52
+ const n_y0 = data_view.getFloat32(node_address + 4);
53
+ const n_z0 = data_view.getFloat32(node_address + 8);
54
+ const n_x1 = data_view.getFloat32(node_address + 12);
55
+ const n_y1 = data_view.getFloat32(node_address + 16);
56
+ const n_z1 = data_view.getFloat32(node_address + 20);
57
+
58
+ for (let j = 0; j < 6; j++) {
59
+
60
+ const plane_address = j * 4;
61
+
62
+ const plane_normal_x = planes[plane_address];
63
+ const plane_normal_y = planes[plane_address + 1];
64
+ const plane_normal_z = planes[plane_address + 2];
65
+ const plane_constant = planes[plane_address + 3];
66
+
67
+ const distanceAbovePlane = aabb3_computeDistanceAbovePlane(
68
+ plane_normal_x, plane_normal_y, plane_normal_z, plane_constant,
69
+ n_x0, n_y0, n_z0,
70
+ n_x1, n_y1, n_z1
71
+ );
72
+
73
+ if (distanceAbovePlane < 0) {
74
+ // node is below the plane
75
+
76
+ // query_bvh_frustum_from_objects.rejection_count++;
77
+
78
+ continue stack_loop;
79
+ }
80
+
81
+ // TODO under current scheme we can reserve 6 bit in what we push onto the stack for plane mask (allows us to skip some planar tests)
82
+ }
83
+
84
+ const left_index = (node_index << 1) + 1;
85
+ const right_index = left_index + 1;
86
+
87
+ if (left_index < last_valid_index) {
88
+ stack[stackPointer] = left_index;
89
+ stackPointer++;
90
+ }
91
+
92
+ if (right_index < last_valid_index) {
93
+ stack[stackPointer] = right_index;
94
+ stackPointer++;
95
+ }
96
+
97
+
98
+ } else {
99
+ // leaf node
100
+ const leaf_index = node_index - binary_node_count;
101
+ const node_address = leaf_index * BVH_LEAF_NODE_SIZE + binary_node_count * BVH_BINARY_NODE_SIZE;
102
+
103
+ const light_index = data_view.getUint32(node_address + 24);
104
+
105
+ const light_address = light_index * 8;
106
+
107
+ // TODO figure out light type from address
108
+
109
+
110
+ const light_x = source_data[light_address];
111
+ const light_y = source_data[light_address + 1];
112
+ const light_z = source_data[light_address + 2];
113
+
114
+ const radius = source_data[light_address + 3];
115
+
116
+ if (!point_light_inside_volume(light_x, light_y, light_z, radius, points, planes)) {
117
+ continue;
118
+ }
119
+
120
+ // write to output
121
+ destination[destination_offset + result] = light_index;
122
+
123
+ result++;
124
+ }
125
+
126
+ }
127
+
128
+ return result;
129
+ }
@@ -0,0 +1,33 @@
1
+ import { computeConePlaneSide } from "../../../../../core/geom/3d/cone/computeConePlaneSide.js";
2
+
3
+ /**
4
+ *
5
+ * @param {SpotLight} light
6
+ * @param {number[]} points
7
+ * @param {number[]|Float32Array|Float64Array} planes
8
+ * @returns {boolean}
9
+ */
10
+ export function spot_light_inside_volume(light, points, planes) {
11
+ for (let j = 0; j < 6; j++) {
12
+
13
+ const plane_address = j * 4;
14
+
15
+ const plane_normal_x = planes[plane_address];
16
+ const plane_normal_y = planes[plane_address + 1];
17
+ const plane_normal_z = planes[plane_address + 2];
18
+ const plane_constant = planes[plane_address + 3];
19
+
20
+ const side = computeConePlaneSide(
21
+ plane_normal_x, plane_normal_y, plane_normal_z, plane_constant,
22
+ light.position.x, light.position.y, light.position.z,
23
+ light.direction.x, light.direction.y, light.direction.z,
24
+ light.angle.getValue(), light.distance.getValue()
25
+ );
26
+
27
+ if (side < 0) {
28
+ return false;
29
+ }
30
+ }
31
+
32
+ return true;
33
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ *
3
+ * @param {number[]|Float32Array|Float64Array} source
4
+ * @param {number} source_index
5
+ * @param {number[]|Float32Array|Float64Array} destination
6
+ * @param {number} destination_offset
7
+ */
8
+ export function read_frustum_corner(source, source_index, destination, destination_offset) {
9
+ const address = source_index * 3;
10
+
11
+ destination[destination_offset] = source[address];
12
+ destination[destination_offset + 1] = source[address + 1];
13
+ destination[destination_offset + 2] = source[address + 2];
14
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ *
3
+ * @param {number[]} light_data
4
+ * @param {number} count
5
+ * @param {number[]|Uint32Array|Uint16Array|Uint8Array|Uint8ClampedArray} light_lookup_texture_data
6
+ * @param {number} address
7
+ * @returns {boolean}
8
+ */
9
+ export function testClusterEquality(light_data, count, light_lookup_texture_data, address) {
10
+ for (let i = 0; i < count; i++) {
11
+
12
+ const existing_light_address = light_lookup_texture_data[address + i];
13
+
14
+ const datum = light_data[i] * 2;
15
+
16
+ if (datum !== existing_light_address) {
17
+ return false;
18
+ }
19
+ }
20
+
21
+ return true;
22
+ }
@@ -1,4 +1,3 @@
1
- import Vector3 from "../../../../core/geom/Vector3.js";
2
1
  import { computePointDistanceToPlane } from "../../../../core/geom/Plane.js";
3
2
  import { plane_three_computeConvex3PlaneIntersection } from "../../../../core/geom/3d/plane/plane_computeConvex3PlaneIntersection.js";
4
3
 
@@ -10,7 +9,11 @@ import { plane_three_computeConvex3PlaneIntersection } from "../../../../core/ge
10
9
  */
11
10
  export function buildPlanarRenderLayerClipPlaneComputationMethod(traversePlanes, bias = 0) {
12
11
 
13
- const p = new Vector3();
12
+ /**
13
+ *
14
+ * @type {number[]}
15
+ */
16
+ const p = [];
14
17
 
15
18
  const adjacentPlanePairs = [
16
19
  [],
@@ -38,7 +41,7 @@ export function buildPlanarRenderLayerClipPlaneComputationMethod(traversePlanes,
38
41
  const p0 = pair[0];
39
42
  const p1 = pair[1];
40
43
 
41
- const planeIntersection = plane_three_computeConvex3PlaneIntersection(p, p0, p1, objectPlane);
44
+ const planeIntersection = plane_three_computeConvex3PlaneIntersection(p, 0, p0, p1, objectPlane);
42
45
 
43
46
  if (!planeIntersection) {
44
47
  //no intersection
@@ -48,7 +51,7 @@ export function buildPlanarRenderLayerClipPlaneComputationMethod(traversePlanes,
48
51
 
49
52
  const plane_normal = nearPlane.normal;
50
53
 
51
- const distanceToNearPlane = computePointDistanceToPlane(p.x, p.y, p.z, plane_normal.x, plane_normal.y, plane_normal.z, nearPlane.constant);
54
+ const distanceToNearPlane = computePointDistanceToPlane(p[0], p[1], p[2], plane_normal.x, plane_normal.y, plane_normal.z, nearPlane.constant);
52
55
 
53
56
  //update near and far plane distances
54
57
  if (distanceToNearPlane > 0 && distanceToNearPlane < range.near) {
@@ -2,6 +2,7 @@ import { BitSet } from "../../../../core/binary/BitSet.js";
2
2
  import Signal from "../../../../core/events/signal/Signal.js";
3
3
  import { assert } from "../../../../core/assert.js";
4
4
  import { IllegalStateException } from "../../../../core/fsm/exceptions/IllegalStateException.js";
5
+ import { arrayQuickSort } from "../../../../core/collection/array/arrayQuickSort.js";
5
6
 
6
7
  /**
7
8
  * @readonly
@@ -68,6 +69,16 @@ export class IncrementalDeltaSet {
68
69
  this.state = IncrementalDeltaSetState.Clear;
69
70
  }
70
71
 
72
+
73
+ /**
74
+ *
75
+ * @param {function(T):number} score_function
76
+ * @param {*} [score_context]
77
+ */
78
+ sort(score_function, score_context) {
79
+ arrayQuickSort(this.elements, score_function, score_context, 0, this.size - 1);
80
+ }
81
+
71
82
  /**
72
83
  *
73
84
  * @param {V} element
@@ -62,7 +62,6 @@ import { buildCanvasViewFromTexture } from "./buildCanvasViewFromTexture.js";
62
62
  import { BatchOcclusionQuery } from "./query/BatchOcclusionQuery.js";
63
63
  import HeadsUpDisplay from "../../../../ecs/gui/hud/HeadsUpDisplay.js";
64
64
  import LabelView from "../../../../../view/common/LabelView.js";
65
- import { randomFloatBetween } from "../../../../../core/math/MathUtils.js";
66
65
  import { seededRandom } from "../../../../../core/math/random/seededRandom.js";
67
66
  import { Sampler2D } from "../../../texture/sampler/Sampler2D.js";
68
67
  import { inverseLerp } from "../../../../../core/math/inverseLerp.js";
@@ -71,6 +70,7 @@ import { max2 } from "../../../../../core/math/max2.js";
71
70
  import { min2 } from "../../../../../core/math/min2.js";
72
71
  import { buildCubeURLs } from "../../../texture/cubemap/buildCubeURLs.js";
73
72
  import { mat4 } from "gl-matrix";
73
+ import { randomFloatBetween } from "../../../../../core/math/random/randomFloatBetween.js";
74
74
 
75
75
  const engineHarness = new EngineHarness();
76
76
 
@@ -112,7 +112,7 @@ function makeConfig(engine) {
112
112
  new ClingToTerrainSystem(),
113
113
  new TerrainSystem(graphics, assetManager),
114
114
  new WaterSystem(graphics),
115
- new Trail2DSystem(graphics, assetManager),
115
+ new Trail2DSystem(engine),
116
116
  new Foliage2System(assetManager, graphics),
117
117
  new ViewportPositionSystem(graphics.viewport.size),
118
118
  new GridPosition2TransformSystem(),
@@ -121,7 +121,6 @@ function fragment() {
121
121
  uniform float opacity;
122
122
 
123
123
  varying vec3 vViewPosition;
124
-
125
124
 
126
125
 
127
126
  #include <common>
@@ -364,10 +363,10 @@ function fragment() {
364
363
 
365
364
  vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
366
365
 
367
- pc_fragColor = vec4( outgoingLight, diffuseColor.a );
366
+ gl_FragColor = vec4( outgoingLight, diffuseColor.a );
368
367
 
369
368
  #if defined( TONE_MAPPING )
370
- pc_fragColor.rgb = toneMapping( pc_fragColor.rgb );
369
+ gl_FragColor.rgb = toneMapping( pc_fragColor.rgb );
371
370
  #endif
372
371
 
373
372
  //encode fragment
@@ -378,12 +377,12 @@ function fragment() {
378
377
  #else
379
378
  float fogFactor = smoothstep( fogNear, fogFar, fogDepth );
380
379
  #endif
381
- pc_fragColor.rgb = mix( pc_fragColor.rgb, fogColor, fogFactor );
380
+ gl_FragColor.rgb = mix( pc_fragColor.rgb, fogColor, fogFactor );
382
381
  #endif
383
382
 
384
383
  #ifdef PREMULTIPLIED_ALPHA
385
384
  // Get get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.
386
- pc_fragColor.rgb *= pc_fragColor.a;
385
+ gl_FragColor.rgb *= pc_fragColor.a;
387
386
  #endif
388
387
 
389
388
  #ifdef DITHERING
@@ -173,13 +173,19 @@ export class ShadowMapRenderer {
173
173
 
174
174
  if (shadow.map === null) {
175
175
 
176
- const pars = { format: RGBAFormat };
176
+ const pars = {
177
+ format: RGBAFormat,
178
+ scissorTest: false,
179
+ stencilBuffer: false
180
+ };
177
181
 
178
182
  if (!shadow.isPointLightShadow && renderer.shadowMap.type === VSMShadowMap) {
179
183
  pars.minFilter = LinearFilter;
180
184
  pars.magFilter = LinearFilter;
181
185
 
182
- shadow.mapPass = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, pars);
186
+ shadow.mapPass = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, Object.assign({
187
+ depthBuffer: false
188
+ }, pars));
183
189
 
184
190
  } else {
185
191
  pars.minFilter = NearestFilter;