@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.
- package/core/assert.js +3 -1
- package/core/bvh2/BinaryNode.js +1 -1
- package/core/bvh2/aabb3/AABB3.js +18 -0
- package/core/bvh2/aabb3/AABB3Math.js +1 -1
- package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
- package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
- package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
- package/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +5 -1
- package/core/bvh2/traversal/__detailed_box_volume_intersection.js +31 -11
- package/core/collection/ArrayUtils.js +1 -1
- package/core/collection/array/arrayQuickSort.js +9 -6
- package/core/collection/array/array_swap.js +22 -0
- package/core/collection/array/binarySearchHighIndex.js +1 -1
- package/core/collection/array/computeHashArray.js +22 -0
- package/core/collection/array/computeHashIntegerArray.js +15 -0
- package/core/collection/array/copyArray.js +2 -2
- package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
- package/core/color/Color.js +2 -1
- package/core/function/FunctionCompiler.js +2 -1
- package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
- package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +10 -2
- package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
- package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
- package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
- package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
- package/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
- package/core/geom/3d/plane/plane_computeConvex3PlaneIntersection.js +13 -14
- package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
- package/core/geom/3d/shape/AbstractShape3D.js +38 -0
- package/core/geom/3d/shape/CompositeShape.js +240 -0
- package/core/geom/3d/shape/TransformedShape3D.js +126 -0
- package/core/geom/3d/shape/UnitCubeShape3D.js +24 -0
- package/core/geom/3d/shape/UnitSphereShape3D.js +24 -0
- package/core/geom/3d/shape/util/shape_to_visual_entity.js +159 -0
- package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
- package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
- package/core/geom/AABB2.js +1 -1
- package/core/geom/ConicRay.js +3 -1
- package/core/geom/LineSegment.js +0 -78
- package/core/geom/Matrix4.js +7 -8
- package/core/geom/Plane.js +14 -9
- package/core/geom/Rectangle.js +2 -1
- package/core/geom/Vector1.js +1 -1
- package/core/geom/Vector3.js +2 -1
- package/core/geom/Vector4.js +2 -1
- package/core/geom/random/randomPointInBox.js +7 -3
- package/core/geom/random/randomPointInPoint.js +6 -3
- package/core/geom/random/randomPointInSphere.js +9 -5
- package/core/geom/random/randomPointOnBox.js +7 -3
- package/core/geom/random/randomPointOnSphere.js +6 -3
- package/core/geom/v3_length.js +8 -3
- package/core/graph/graph_k_means_cluster.js +1 -1
- package/core/json/resolvePathByArray.js +2 -2
- package/core/math/MathUtils.js +0 -354
- package/core/math/MathUtils.spec.js +7 -1
- package/core/math/gaussian.js +9 -0
- package/core/math/hash/computeHashFloat.js +17 -0
- package/core/math/hash/computeHashFloatArray.js +34 -0
- package/core/math/hash/computeObjectHash.js +54 -0
- package/core/math/intersects1D.js +19 -0
- package/core/math/interval/NumericInterval.js +2 -2
- package/core/math/isValueBetween.js +10 -0
- package/core/math/isValueBetweenInclusive.js +10 -0
- package/core/math/noise/curl_noise_3dt.js +1 -1
- package/core/math/noise/sdnoise.js +10 -10
- package/core/math/overlap1D.js +19 -0
- package/core/math/pingpong.js +17 -0
- package/core/math/random/makeRangedRandom.js +19 -0
- package/core/math/random/randomFloatBetween.js +14 -0
- package/core/math/random/randomFromArray.js +19 -0
- package/core/math/random/randomGaussian.js +15 -0
- package/core/math/random/randomIntegerBetween.js +14 -0
- package/core/math/random/roundFair.js +15 -0
- package/core/math/separation1D.js +21 -0
- package/core/math/solveQuadratic.js +25 -0
- package/core/model/BoundedValue.js +1 -1
- package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
- package/core/model/node-graph/node/Port.js +1 -1
- package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
- package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
- package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
- package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
- package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
- package/core/model/stat/LinearModifier.js +1 -1
- package/core/primitives/array/computeIntegerArrayHash.js +1 -1
- package/{engine/graphics/render/forward_plus/materials → core/primitives/strings}/insert_after.js +3 -0
- package/core/primitives/strings/insert_after_or_replace.js +27 -0
- package/editor/process/symbolic/makeHelperBoxGeometry.js +44 -0
- package/editor/view/ecs/EntityEditor.js +2 -2
- package/editor/view/ecs/components/particles/ParticleEmitterController.js +2 -2
- package/engine/EngineHarness.js +1 -0
- package/engine/animation/AnimationUtils.js +5 -5
- package/engine/animation/curve/AnimationCurve.js +72 -0
- package/engine/animation/curve/Keyframe.js +27 -0
- package/engine/animation/keyed2/AnimationTrack.js +27 -3
- package/engine/asset/Asset.js +1 -1
- package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
- package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
- package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
- package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
- package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
- package/engine/asset/loaders/material/computeMaterialHash.js +3 -1
- package/engine/asset/loaders/material/computeTextureHash.js +2 -1
- package/engine/ecs/EntityBuilder.js +25 -5
- package/engine/ecs/animation/Animation.js +2 -1
- package/engine/ecs/animation/InverseKinematics.js +2 -1
- package/engine/ecs/attachment/AttachmentBinding.js +8 -0
- package/engine/ecs/attachment/AttachmentSystem.js +4 -0
- package/engine/ecs/attachment/TransformAttachmentBinding.js +14 -44
- package/engine/ecs/components/Tag.js +27 -6
- package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
- package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
- package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
- package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
- package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
- package/engine/ecs/fow/FogOfWar.js +4 -0
- package/engine/ecs/fow/FogOfWarSystem.js +2 -0
- package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
- package/engine/ecs/gui/GUIElement.js +1 -1
- package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
- package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +2 -0
- package/engine/ecs/gui/position/ViewportPosition.js +2 -1
- package/engine/ecs/system/AbstractContextSystem.js +1 -1
- package/engine/ecs/systems/RangedAttackSystem.js +1 -1
- package/engine/ecs/systems/SteeringSystem.js +1 -1
- package/engine/ecs/systems/TagSystem.js +17 -0
- package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
- package/engine/ecs/tooltip/TooltipComponent.js +15 -0
- package/engine/ecs/transform/Transform.js +19 -6
- package/engine/ecs/util/hideEntityGracefully.js +18 -0
- package/engine/graphics/GraphicsEngine.js +11 -23
- package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
- package/engine/graphics/composit/CompositLayer.js +17 -4
- package/engine/graphics/composit/CompositingStages.js +8 -0
- package/engine/graphics/composit/LayerCompositer.js +35 -6
- package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
- package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
- package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
- package/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.js +11 -7
- package/engine/graphics/ecs/light/Light.d.ts +1 -1
- package/engine/graphics/ecs/light/Light.js +5 -0
- package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +5 -1
- package/engine/graphics/ecs/mesh/Mesh.js +2 -1
- package/engine/graphics/ecs/mesh-v2/DrawMode.js +5 -0
- package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
- package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +32 -18
- package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
- package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
- package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
- package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
- package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
- package/engine/graphics/geometry/AttributeSpec.js +105 -0
- package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
- package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
- package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
- package/engine/graphics/micron/buildPatchwork.js +1 -1
- package/engine/graphics/micron/format/MicronGeometry.js +3 -3
- package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
- package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
- package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
- package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
- package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
- package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
- package/engine/graphics/particles/ParticleEmitterLibrary.js +3 -0
- package/engine/graphics/particles/ecs/{ParticleEmitterSystem2.js → ParticleEmitterSystem.js} +17 -9
- package/engine/graphics/particles/particular/engine/ParticularEngine.js +12 -4
- package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
- package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +106 -169
- package/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +5 -0
- package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
- package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +141 -14
- package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +8 -7
- package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
- package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
- package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
- package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
- package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
- package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
- package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +24 -0
- package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +262 -71
- package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
- package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +80 -46
- package/engine/graphics/particles/particular/engine/shader/debugAtlas.js +14 -0
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
- package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +141 -0
- package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +478 -0
- package/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.js +27 -0
- package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +935 -0
- package/engine/graphics/particles/particular/group/Operation.js +18 -0
- package/engine/graphics/particles/particular/group/OperationType.js +9 -0
- package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
- package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
- package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
- package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
- package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
- package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
- package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
- package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
- package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
- package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
- package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +13 -7
- package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
- package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
- package/engine/graphics/render/forward_plus/LightManager.js +126 -95
- package/engine/graphics/render/forward_plus/PointLight.js +9 -0
- package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
- package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
- package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
- package/engine/graphics/render/forward_plus/computeFrustumCorners.js +14 -32
- package/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +1 -0
- package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +32 -0
- package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +51 -0
- package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +25 -0
- package/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +31 -120
- package/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +35 -0
- package/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +4 -5
- package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
- package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +10 -3
- package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +595 -60
- package/engine/graphics/render/forward_plus/prototypeLightManager.js +256 -136
- package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
- package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
- package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
- package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
- package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
- package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
- package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
- package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
- package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
- package/engine/graphics/render/layers/RenderLayerUtils.js +7 -4
- package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
- package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
- package/engine/graphics/shaders/TerrainShader.js +4 -5
- package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
- package/engine/graphics/texture/atlas/TextureAtlas.js +2 -2
- package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
- package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
- package/engine/graphics/texture/sampler/Sampler2D.js +8 -7
- package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
- package/engine/graphics/texture/sampler/scaleSampler2D.js +7 -10
- package/engine/graphics/trail/x/RibbonMaterialX.js +3 -3
- package/engine/graphics/trail/x/RibbonX.js +17 -2
- package/engine/graphics/trail/x/RibbonXPlugin.js +51 -1
- package/engine/graphics/util/composeMatrix4.js +33 -23
- package/engine/graphics/util/decompose_matrix_4_array.js +61 -0
- package/engine/grid/components/GridObstacle.js +3 -10
- package/engine/intelligence/behavior/ecs/BehaviorComponent.js +30 -14
- package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
- package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
- package/engine/knowledge/database/StaticKnowledgeDataTable.js +6 -1
- package/engine/navigation/ecs/components/Path.js +1 -6
- package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
- package/engine/reference/v2/Reference.js +6 -0
- package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
- package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
- package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
- package/engine/ui/notification/notificationGenerator.js +1 -1
- package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
- package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
- package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
- package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
- package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
- package/generation/theme/ThemeEngine.js +2 -2
- package/misc/makeMaterialIconCached.js +2 -2
- package/package.json +3 -3
- package/view/View.js +4 -2
- package/view/elements/image/HTMLElementCacheKey.js +2 -1
- package/view/elements/radial/RadialText.js +2 -1
- package/view/minimap/gl/MinimapMarkersGL.js +6 -100
- package/view/minimap/gl/buildMaterial.js +94 -0
- package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
- package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -345
|
@@ -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 "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
125
|
-
|
|
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
|
|
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 "
|
|
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(
|
|
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;
|
|
@@ -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
|
-
|
|
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.
|
|
54
|
-
|
|
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
|
|