@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
@@ -0,0 +1,51 @@
1
+ export const FP_SHADER_CHUNK_DECODE_PARS = `
2
+ // don't rely on three.js light number define to ensure that point light calculations are available
3
+ #if NUM_POINT_LIGHTS < 1
4
+ struct PointLight {
5
+ vec3 position;
6
+ vec3 color;
7
+ float distance;
8
+ float decay;
9
+ };
10
+ #endif
11
+
12
+ // directLight is an out parameter as having it as a return value caused compiler errors on some devices
13
+ void fp_getPointDirectLightIrradiance( const in PointLight pointLight, out IncidentLight directLight, vec3 viewPosition ) {
14
+
15
+ // TODO consider moving light position transformation to view-space over to CPU
16
+ vec3 lVector = (viewMatrix*vec4(pointLight.position,1.0)).xyz + viewPosition;
17
+
18
+ directLight.direction = normalize( lVector );
19
+
20
+ float lightDistance = length( lVector );
21
+
22
+ directLight.color = pointLight.color;
23
+ directLight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );
24
+ directLight.visible = ( directLight.color != vec3( 0.0 ) );
25
+ }
26
+
27
+ float convert_depth_to_linear(in float d){
28
+ float d_n = 2.0*d - 1.0;
29
+
30
+ float f = fp_f_camera_far;
31
+ float n = fp_f_camera_near;
32
+
33
+ float fn = f*n;
34
+
35
+ float z_diff = f - n;
36
+
37
+ float denominator = (f + n - d_n * z_diff );
38
+
39
+ float z_view = (2.0*fn) / denominator;
40
+
41
+ return (z_view - n) / z_diff;
42
+ }
43
+
44
+ ivec2 address_to_data_texture_coordinates(uint address){
45
+ // Lookup texture has 128 width
46
+ uint lookup_index_x = address % 128u;
47
+ uint lookup_index_y = address >> 7;
48
+
49
+ return ivec2(int(lookup_index_x),int(lookup_index_y));
50
+ }
51
+ `;
@@ -0,0 +1,25 @@
1
+ export const FP_SHADER_CHUNK_PREAMBLE = `precision mediump usampler3D;
2
+ precision mediump usampler2D;
3
+
4
+ uniform usampler3D fp_t_light_tiles;
5
+
6
+ uniform usampler2D fp_t_light_lookup;
7
+ uniform sampler2D fp_t_light_data;
8
+
9
+ uniform vec3 fp_v3_light_cluster_resolution;
10
+
11
+ uniform float fp_f_camera_near;
12
+ uniform float fp_f_camera_far;
13
+
14
+ #define gl_FragDepthEXT gl_FragDepth
15
+ #define texture2D texture
16
+ #define textureCube texture
17
+ #define texture2DProj textureProj
18
+ #define texture2DLodEXT textureLod
19
+ #define texture2DProjLodEXT textureProjLod
20
+ #define textureCubeLodEXT textureLod
21
+ #define texture2DGradEXT textureGrad
22
+ #define texture2DProjGradEXT textureProjGrad
23
+ #define textureCubeGradEXT textureGrad
24
+
25
+ uniform vec2 fp_resolution;`;
@@ -1,4 +1,25 @@
1
- import { insert_after } from "./insert_after.js";
1
+ import { insert_after } from "../../../../../core/primitives/strings/insert_after.js";
2
+ import { insert_after_or_replace } from "../../../../../core/primitives/strings/insert_after_or_replace.js";
3
+ import { FP_SHADER_CHUNK_ACCUMULATION } from "./FP_SHADER_CHUNK_ACCUMULATION.js";
4
+ import { FP_SHADER_CHUNK_DECODE_PARS } from "./FP_SHADER_CHUNK_DECODE_PARS.js";
5
+ import { FP_INJECTION_POINT_ACCUMULATION } from "./FP_INJECTION_POINT_ACCUMULATION.js";
6
+ import { FP_SHADER_CHUNK_PREAMBLE } from "./FP_SHADER_CHUNK_PREAMBLE.js";
7
+
8
+ const three_chunk_accummulation_mark = '#include <lights_fragment_end>';
9
+
10
+ const accumulation_pars = `
11
+ vec3 clip_v = vec3( vec2(gl_FragCoord.x, gl_FragCoord.y) / fp_resolution, convert_depth_to_linear(gl_FragCoord.z));
12
+ ${FP_SHADER_CHUNK_ACCUMULATION}
13
+ `;
14
+
15
+ const preamble = `
16
+ ${FP_SHADER_CHUNK_PREAMBLE}
17
+
18
+ varying vec3 v_world_position;
19
+
20
+ out highp vec4 pc_fragColor;
21
+ #define gl_FragColor pc_fragColor
22
+ `;
2
23
 
3
24
  /**
4
25
  *
@@ -6,126 +27,16 @@ import { insert_after } from "./insert_after.js";
6
27
  * @returns {string}
7
28
  */
8
29
  export function fp_build_fragment_shader(base) {
9
- const v0 = `
10
- precision mediump usampler3D;
11
- precision mediump usampler2D;
12
-
13
- uniform usampler3D fp_t_light_tiles;
14
-
15
- uniform usampler2D fp_t_light_lookup;
16
- uniform sampler2D fp_t_light_data;
17
-
18
- uniform vec3 fp_v3_light_cluster_resolution;
19
-
20
- uniform float fp_f_camera_near;
21
- uniform float fp_f_camera_far;
22
-
23
- uniform vec2 resolution;
24
-
25
- varying vec3 v_world_position;
26
-
27
- out highp vec4 pc_fragColor;
28
- #define gl_FragColor pc_fragColor
29
-
30
- #define gl_FragDepthEXT gl_FragDepth
31
- #define texture2D texture
32
- #define textureCube texture
33
- #define texture2DProj textureProj
34
- #define texture2DLodEXT textureLod
35
- #define texture2DProjLodEXT textureProjLod
36
- #define textureCubeLodEXT textureLod
37
- #define texture2DGradEXT textureGrad
38
- #define texture2DProjGradEXT textureProjGrad
39
- #define textureCubeGradEXT textureGrad
40
- ` + base;
41
-
42
- const v1 = insert_after(v0, '#include <lights_pars_begin>', `
43
- // don't rely on three.js light number define to ensure that point light calculations are available
44
- #if NUM_POINT_LIGHTS < 1
45
- struct PointLight {
46
- vec3 position;
47
- vec3 color;
48
- float distance;
49
- float decay;
50
- };
51
- #endif
52
-
53
- // directLight is an out parameter as having it as a return value caused compiler errors on some devices
54
- void fp_getPointDirectLightIrradiance( const in PointLight pointLight, out IncidentLight directLight ) {
55
-
56
- // TODO consider moving light position transformation to view-space over to CPU
57
- vec3 lVector = (viewMatrix*vec4(pointLight.position,1.0)).xyz + vViewPosition;
58
-
59
- directLight.direction = normalize( lVector );
60
-
61
- float lightDistance = length( lVector );
62
-
63
- directLight.color = pointLight.color;
64
- directLight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );
65
- directLight.visible = ( directLight.color != vec3( 0.0 ) );
66
- }
67
-
68
- float convert_depth_to_linear(in float d){
69
- float d_n = 2.0*d - 1.0;
70
-
71
- float f = fp_f_camera_far;
72
- float n = fp_f_camera_near;
73
-
74
- float fn = f*n;
75
-
76
- float z_diff = f - n;
77
-
78
- float denominator = (f + n - d_n * z_diff );
79
-
80
- float z_view = (2.0*fn) / denominator;
81
-
82
- return (z_view - n) / z_diff;
83
- }
84
-
85
- ivec2 address_to_data_texture_coordinates(uint address){
86
- // Lookup texture has 128 width
87
- uint lookup_index_x = address % 128u;
88
- uint lookup_index_y = address >> 7;
89
-
90
- return ivec2(int(lookup_index_x),int(lookup_index_y));
91
- }
92
- `);
93
-
94
- const v2 = insert_after(v1, '#include <lights_fragment_end>', `
95
- vec3 clip_v = vec3( vec2(gl_FragCoord.x, gl_FragCoord.y) / resolution, convert_depth_to_linear(gl_FragCoord.z));
96
-
97
- ivec3 v3_cluster_resolution = textureSize(fp_t_light_tiles, 0);
98
- ivec3 v3_cluster_position = ivec3( clip_v.x * float(v3_cluster_resolution.x), clip_v.y*float(v3_cluster_resolution.y), (clip_v.z)*float(v3_cluster_resolution.z) );
99
-
100
- uvec3 cluster_metadata = texelFetch(fp_t_light_tiles, v3_cluster_position , 0).rgb;
101
-
102
- // read light data
103
- for(uint i=0u; i < cluster_metadata.y; i++){
104
- uint lookup_index = cluster_metadata.x + i;
105
-
106
- uint light_address = texelFetch(fp_t_light_lookup, address_to_data_texture_coordinates(lookup_index), 0 ).r;
107
-
108
- vec4 light_data_0 = texelFetch(fp_t_light_data, address_to_data_texture_coordinates(light_address), 0);
109
- vec4 light_data_1 = texelFetch(fp_t_light_data, address_to_data_texture_coordinates(light_address+1u), 0);
110
-
111
- vec3 light_position = light_data_0.xyz;
112
- float light_radius = light_data_0.w;
113
-
114
- vec3 light_color = light_data_1.xyz;
115
- float light_intensity = light_data_1.w;
116
-
117
- PointLight pointlight;
30
+ let result = preamble + base;
118
31
 
119
- pointlight.position = light_position;
120
- pointlight.distance = light_radius;
121
- pointlight.color = light_color*light_intensity;
122
- pointlight.decay = 1.0;
32
+ result = insert_after(result, '#include <lights_pars_begin>', FP_SHADER_CHUNK_DECODE_PARS);
123
33
 
124
- fp_getPointDirectLightIrradiance( pointlight, directLight );
125
- RE_Direct( directLight, geometry, material, reflectedLight );
126
- }
127
-
128
- `);
34
+ result = insert_after_or_replace(
35
+ result,
36
+ three_chunk_accummulation_mark,
37
+ FP_INJECTION_POINT_ACCUMULATION,
38
+ accumulation_pars
39
+ );
129
40
 
130
- return v2;
41
+ return result;
131
42
  }
@@ -0,0 +1,35 @@
1
+ import { insert_after } from "../../../../../core/primitives/strings/insert_after.js";
2
+ import { insert_after_or_replace } from "../../../../../core/primitives/strings/insert_after_or_replace.js";
3
+ import { FP_INJECTION_POINT_ACCUMULATION } from "./FP_INJECTION_POINT_ACCUMULATION.js";
4
+ import { FP_SHADER_CHUNK_ACCUMULATION } from "./FP_SHADER_CHUNK_ACCUMULATION.js";
5
+ import { FP_SHADER_CHUNK_PREAMBLE } from "./FP_SHADER_CHUNK_PREAMBLE.js";
6
+ import { FP_SHADER_CHUNK_DECODE_PARS } from "./FP_SHADER_CHUNK_DECODE_PARS.js";
7
+
8
+ const accumulation_pars = `
9
+ vec3 fp_normalized_screen_position = ((gl_Position.xyz / gl_Position.w)+vec3(1.0))*0.5;
10
+ vec3 clip_v = vec3( vec2(fp_normalized_screen_position.x, fp_normalized_screen_position.y), convert_depth_to_linear(fp_normalized_screen_position.z));
11
+ ${FP_SHADER_CHUNK_ACCUMULATION}
12
+ `;
13
+
14
+ const three_chunk_accummulation_mark = '#include <lights_fragment_end>';
15
+
16
+ /**
17
+ *
18
+ * @param {string} base
19
+ * @returns {string}
20
+ */
21
+ export function fp_build_vertex_lighting_shared(base) {
22
+
23
+ let result = FP_SHADER_CHUNK_PREAMBLE + base;
24
+
25
+ result = insert_after(result, '#include <lights_pars_begin>', FP_SHADER_CHUNK_DECODE_PARS);
26
+
27
+ result = insert_after_or_replace(
28
+ result,
29
+ three_chunk_accummulation_mark,
30
+ FP_INJECTION_POINT_ACCUMULATION,
31
+ accumulation_pars
32
+ );
33
+
34
+ return result;
35
+ }
@@ -1,4 +1,4 @@
1
- import { insert_after } from "./insert_after.js";
1
+ import { insert_after } from "../../../../../core/primitives/strings/insert_after.js";
2
2
 
3
3
  /**
4
4
  *
@@ -12,13 +12,12 @@ export function fp_build_vertex_shader(base) {
12
12
  #define attribute in
13
13
  #define varying out
14
14
  #define texture2D texture
15
+
16
+ varying vec3 v_world_position;
15
17
  ` + base;
16
18
 
17
- const v0 = insert_after(a, '#include <clipping_planes_pars_vertex>', `
18
- varying vec3 v_world_position;
19
- `);
20
19
 
21
- const v1 = insert_after(v0, '#include <worldpos_vertex>', `
20
+ const v1 = insert_after(a, '#include <worldpos_vertex>', `
22
21
  #if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )
23
22
  // worldPosition comes from 'worldpos_vertex' shader chunk
24
23
  v_world_position = worldPosition.xyz;
@@ -40,7 +40,7 @@ export class ForwardPlusRenderingPlugin extends EnginePlugin {
40
40
  async startup() {
41
41
  const lm = this.__light_manager;
42
42
 
43
- lm.setTileMapResolution(24, 14, 8);
43
+ lm.setTileMapResolution(16, 8, 10);
44
44
 
45
45
  const graphics = this.engine.graphics;
46
46
 
@@ -4,6 +4,7 @@ import { GLSL3, Vector2 } from "three";
4
4
  import { isLitMaterial } from "./isLitMaterial.js";
5
5
  import { fp_build_fragment_shader } from "../materials/fp_build_fragment_shader.js";
6
6
  import { fp_build_vertex_shader } from "../materials/fp_build_vertex_shader.js";
7
+ import { fp_build_vertex_lighting_shared } from "../materials/fp_build_vertex_lighting_shared.js";
7
8
 
8
9
  export class MaterialTransformer extends AbstractMaterialTransformer {
9
10
 
@@ -39,7 +40,7 @@ export class MaterialTransformer extends AbstractMaterialTransformer {
39
40
  type: 'f',
40
41
  value: 0
41
42
  },
42
- resolution: {
43
+ fp_resolution: {
43
44
  type: 'v2',
44
45
  value: resolution
45
46
  }
@@ -50,8 +51,14 @@ export class MaterialTransformer extends AbstractMaterialTransformer {
50
51
 
51
52
  shader.glslVersion = GLSL3;
52
53
 
53
- shader.vertexShader = fp_build_vertex_shader(shader.vertexShader);
54
- shader.fragmentShader = fp_build_fragment_shader(shader.fragmentShader);
54
+ if (shader.defines.LIGHTING_VERTEX_ONLY === true) {
55
+ // Lambertial vertex-space lighting
56
+ shader.vertexShader = fp_build_vertex_lighting_shared(shader.vertexShader);
57
+ } else {
58
+
59
+ shader.vertexShader = fp_build_vertex_shader(shader.vertexShader);
60
+ shader.fragmentShader = fp_build_fragment_shader(shader.fragmentShader);
61
+ }
55
62
  };
56
63
  }
57
64