@gnsx/three 0.185.16 → 0.186.0
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/build/three.cjs +10 -82600
- package/build/three.core.js +1309 -807
- package/build/three.module.js +439 -338
- package/build/three.tsl.js +74 -44
- package/build/three.webgpu.js +6036 -2184
- package/build/three.webgpu.nodes.js +6020 -2184
- package/examples/jsm/Addons.js +6 -6
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +44 -20
- package/examples/jsm/controls/OrbitControls.js +9 -0
- package/examples/jsm/controls/TrackballControls.js +109 -4
- package/examples/jsm/csm/CSMShadowNode.js +13 -0
- package/examples/jsm/exporters/GLTFExporter.js +23 -7
- package/examples/jsm/exporters/USDZExporter.js +2 -2
- package/examples/jsm/generators/CityGenerator.js +377 -45
- package/examples/jsm/generators/ForestGenerator.js +12 -12
- package/examples/jsm/generators/TerrainGenerator.js +49 -37
- package/examples/jsm/generators/TreeGenerator.js +70 -76
- package/examples/jsm/generators/city/BenchGenerator.js +127 -0
- package/examples/jsm/generators/city/CarGenerator.js +479 -0
- package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
- package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
- package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
- package/examples/jsm/generators/city/PersonGenerator.js +447 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
- package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
- package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
- package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
- package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
- package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
- package/examples/jsm/gpgpu/CountingSort.js +271 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
- package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
- package/examples/jsm/inspector/Extension.js +94 -0
- package/examples/jsm/inspector/Inspector.js +145 -41
- package/examples/jsm/inspector/RendererInspector.js +100 -52
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
- package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
- package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
- package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
- package/examples/jsm/inspector/tabs/Memory.js +0 -2
- package/examples/jsm/inspector/tabs/Settings.js +4 -0
- package/examples/jsm/inspector/tabs/Timeline.js +223 -171
- package/examples/jsm/inspector/tabs/Viewer.js +515 -21
- package/examples/jsm/inspector/ui/List.js +15 -9
- package/examples/jsm/inspector/ui/Profiler.js +170 -14
- package/examples/jsm/inspector/ui/Style.js +269 -23
- package/examples/jsm/inspector/ui/Tab.js +2 -0
- package/examples/jsm/inspector/ui/Values.js +14 -2
- package/examples/jsm/interactive/HTMLMesh.js +19 -3
- package/examples/jsm/lighting/LightProbeGrid.js +484 -889
- package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
- package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
- package/examples/jsm/lights/SunLight.js +95 -0
- package/examples/jsm/lights/SunLightNode.js +56 -0
- package/examples/jsm/lights/SunLightShadow.js +319 -0
- package/examples/jsm/lights/SunShadowNode.js +312 -0
- package/examples/jsm/loaders/3DMLoader.js +150 -49
- package/examples/jsm/loaders/3MFLoader.js +202 -1
- package/examples/jsm/loaders/FBXLoader.js +81 -5
- package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
- package/examples/jsm/loaders/GLTFLoader.js +79 -14
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
- package/examples/jsm/loaders/KSPLATLoader.js +463 -0
- package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/SPLATLoader.js +139 -0
- package/examples/jsm/loaders/SPZLoader.js +561 -0
- package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
- package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
- package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
- package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
- package/examples/jsm/loaders/usd/USDAParser.js +15 -2
- package/examples/jsm/loaders/usd/USDCParser.js +1 -4
- package/examples/jsm/loaders/usd/USDComposer.js +80 -42
- package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
- package/examples/jsm/misc/RollerCoaster.js +2 -2
- package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
- package/examples/jsm/misc/Sculptor.js +1679 -0
- package/examples/jsm/misc/SculptorMesh.js +1504 -0
- package/examples/jsm/misc/SculptorTools.js +1180 -0
- package/examples/jsm/misc/SculptorUtils.js +345 -0
- package/examples/jsm/misc/TubePainter.js +28 -16
- package/examples/jsm/misc/VolumeSlice.js +24 -24
- package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
- package/examples/jsm/objects/GaussianSplat.js +1039 -0
- package/examples/jsm/objects/Sky.js +66 -45
- package/examples/jsm/objects/SkyMesh.js +70 -51
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/GTAOPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +5 -5
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -2
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
- package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +2 -1
- package/examples/jsm/transpiler/AST.js +21 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
- package/examples/jsm/transpiler/TSLEncoder.js +82 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
- package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
- package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
- package/examples/jsm/tsl/display/BloomNode.js +55 -30
- package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
- package/examples/jsm/tsl/display/FSR1Node.js +8 -4
- package/examples/jsm/tsl/display/GTAONode.js +199 -86
- package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
- package/examples/jsm/tsl/display/GodraysNode.js +5 -2
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
- package/examples/jsm/tsl/display/LensflareNode.js +5 -2
- package/examples/jsm/tsl/display/OITPassNode.js +352 -0
- package/examples/jsm/tsl/display/OutlineNode.js +2 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
- package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
- package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
- package/examples/jsm/tsl/display/SMAANode.js +22 -61
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
- package/examples/jsm/tsl/display/SSAONode.js +436 -0
- package/examples/jsm/tsl/display/SSGINode.js +5 -2
- package/examples/jsm/tsl/display/SSRNode.js +7 -2
- package/examples/jsm/tsl/display/SSSNode.js +5 -2
- package/examples/jsm/tsl/display/SharpenNode.js +5 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
- package/examples/jsm/tsl/display/TAAUNode.js +22 -125
- package/examples/jsm/tsl/display/TRAANode.js +16 -142
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
- package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
- package/examples/jsm/tsl/display/hashBlur.js +3 -2
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
- package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
- package/examples/jsm/tsl/utils/Raymarching.js +5 -5
- package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
- package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
- package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
- package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
- package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
- package/package.json +9 -16
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +73 -43
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -0
- package/src/animation/AnimationClip.js +15 -2
- package/src/animation/AnimationObjectGroup.js +18 -6
- package/src/animation/AnimationUtils.js +26 -0
- package/src/animation/KeyframeTrack.js +37 -0
- package/src/constants.js +23 -1
- package/src/core/BufferAttribute.js +3 -2
- package/src/core/BufferGeometry.js +1 -1
- package/src/core/InterleavedBuffer.js +5 -1
- package/src/core/Object3D.js +40 -12
- package/src/core/Raycaster.js +4 -0
- package/src/core/RenderTarget.js +99 -9
- package/src/core/RenderTarget3D.js +12 -8
- package/src/extras/Controls.js +0 -8
- package/src/extras/PMREMGenerator.js +99 -205
- package/src/geometries/TorusGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +2 -0
- package/src/helpers/AxesHelper.js +2 -0
- package/src/helpers/Box3Helper.js +2 -0
- package/src/helpers/BoxHelper.js +2 -0
- package/src/helpers/CameraHelper.js +2 -0
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/GridHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PlaneHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/PolarGridHelper.js +2 -0
- package/src/helpers/SkeletonHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +2 -0
- package/src/lights/Light.js +0 -10
- package/src/lights/LightShadow.js +43 -12
- package/src/lights/SpotLightShadow.js +18 -0
- package/src/loaders/BufferGeometryLoader.js +5 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ObjectLoader.js +8 -5
- package/src/materials/Material.js +80 -57
- package/src/materials/MeshPhysicalMaterial.js +32 -0
- package/src/materials/nodes/Line2NodeMaterial.js +17 -8
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
- package/src/materials/nodes/NodeMaterial.js +19 -13
- package/src/materials/nodes/PointsNodeMaterial.js +2 -1
- package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
- package/src/math/Frustum.js +9 -0
- package/src/math/FrustumArray.js +1 -1
- package/src/math/MathUtils.js +5 -3
- package/src/math/Matrix4.js +2 -9
- package/src/math/Plane.js +30 -1
- package/src/math/Quaternion.js +0 -10
- package/src/math/Ray.js +95 -45
- package/src/math/Triangle.js +0 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +0 -4
- package/src/math/interpolants/BezierInterpolant.js +36 -23
- package/src/nodes/Nodes.js +2 -0
- package/src/nodes/TSL.js +11 -3
- package/src/nodes/accessors/Batch.js +85 -13
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/Instance.js +19 -18
- package/src/nodes/accessors/MaterialNode.js +9 -0
- package/src/nodes/accessors/ModelNode.js +85 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
- package/src/nodes/accessors/ReferenceElementNode.js +72 -0
- package/src/nodes/accessors/ReferenceNode.js +1 -70
- package/src/nodes/accessors/Skinning.js +124 -12
- package/src/nodes/accessors/StorageTextureNode.js +7 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +51 -21
- package/src/nodes/accessors/TextureSizeNode.js +4 -2
- package/src/nodes/accessors/UniformArrayNode.js +30 -5
- package/src/nodes/code/CodeNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +12 -2
- package/src/nodes/core/ArrayNode.js +2 -2
- package/src/nodes/core/ContextNode.js +57 -4
- package/src/nodes/core/IndexNode.js +69 -4
- package/src/nodes/core/InspectorNode.js +2 -2
- package/src/nodes/core/MRTNode.js +44 -2
- package/src/nodes/core/Node.js +6 -3
- package/src/nodes/core/NodeBuilder.js +65 -50
- package/src/nodes/core/NodeFrame.js +11 -3
- package/src/nodes/core/NodeUtils.js +88 -0
- package/src/nodes/core/PropertyNode.js +8 -0
- package/src/nodes/core/StackNode.js +0 -1
- package/src/nodes/core/StructNode.js +4 -3
- package/src/nodes/core/UniformGroupNode.js +3 -2
- package/src/nodes/core/UniformNode.js +26 -12
- package/src/nodes/core/VarNode.js +0 -1
- package/src/nodes/display/BumpMapNode.js +2 -2
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/PassNode.js +76 -15
- package/src/nodes/display/ScreenNode.js +22 -65
- package/src/nodes/fog/Fog.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
- package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
- package/src/nodes/functions/BSDF/LTC.js +1 -1
- package/src/nodes/functions/PhongLightingModel.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +83 -25
- package/src/nodes/functions/ToonLightingModel.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
- package/src/nodes/gpgpu/BarrierNode.js +13 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +20 -17
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
- package/src/nodes/lighting/EnvironmentNode.js +40 -4
- package/src/nodes/lighting/LightsNode.js +20 -4
- package/src/nodes/lighting/ShadowBaseNode.js +158 -1
- package/src/nodes/lighting/ShadowFilterNode.js +2 -106
- package/src/nodes/lighting/ShadowNode.js +22 -91
- package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
- package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
- package/src/nodes/materialx/MaterialXCore.js +37 -0
- package/src/nodes/materialx/MaterialXNodes.js +64 -72
- package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
- package/src/nodes/math/BitcountNode.js +24 -4
- package/src/nodes/math/MathNode.js +4 -4
- package/src/nodes/math/MathUtils.js +15 -4
- package/src/nodes/math/OperatorNode.js +2 -2
- package/src/nodes/math/PackFloatNode.js +29 -1
- package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
- package/src/nodes/math/UnpackFloatNode.js +30 -2
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +31 -74
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLCore.js +1 -31
- package/src/nodes/utils/EventNode.js +75 -0
- package/src/nodes/utils/LoopNode.js +54 -13
- package/src/nodes/utils/PostProcessingUtils.js +23 -2
- package/src/nodes/utils/RTTNode.js +97 -32
- package/src/nodes/utils/ReflectorNode.js +8 -4
- package/src/nodes/utils/RotateNode.js +85 -8
- package/src/nodes/utils/SpriteUtils.js +58 -23
- package/src/objects/BatchedMesh.js +6 -0
- package/src/objects/InstancedMesh.js +1 -1
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +12 -0
- package/src/objects/Mesh.js +12 -0
- package/src/objects/Points.js +12 -0
- package/src/objects/Sprite.js +12 -0
- package/src/renderers/WebGLRenderer.js +93 -27
- package/src/renderers/common/Animation.js +12 -2
- package/src/renderers/common/Backend.js +38 -10
- package/src/renderers/common/BindGroup.js +0 -1
- package/src/renderers/common/Bindings.js +50 -4
- package/src/renderers/common/BundleGroup.js +4 -0
- package/src/renderers/common/ClippingContext.js +11 -1
- package/src/renderers/common/Color4.js +9 -0
- package/src/renderers/common/Constants.js +0 -5
- package/src/renderers/common/DirectRenderPipeline.js +233 -0
- package/src/renderers/common/Geometries.js +24 -3
- package/src/renderers/common/Info.js +3 -3
- package/src/renderers/common/InspectorBase.js +37 -8
- package/src/renderers/common/Lighting.js +11 -4
- package/src/renderers/common/Pipelines.js +6 -4
- package/src/renderers/common/QuadMesh.js +16 -2
- package/src/renderers/common/RenderContext.js +8 -0
- package/src/renderers/common/RenderList.js +53 -19
- package/src/renderers/common/RenderLists.js +58 -11
- package/src/renderers/common/RenderObject.js +14 -0
- package/src/renderers/common/RenderObjects.js +14 -9
- package/src/renderers/common/RenderPipeline.js +52 -44
- package/src/renderers/common/Renderer.js +226 -55
- package/src/renderers/common/Storage3DTexture.js +16 -0
- package/src/renderers/common/Textures.js +3 -3
- package/src/renderers/common/XRManager.js +79 -72
- package/src/renderers/common/extras/PMREMGenerator.js +76 -144
- package/src/renderers/common/nodes/NodeManager.js +144 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
- package/src/renderers/shaders/DFGLUTData.js +2 -1
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +16 -0
- package/src/renderers/webgl/WebGLAnimation.js +2 -2
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +74 -4
- package/src/renderers/webgl/WebGLMaterials.js +6 -0
- package/src/renderers/webgl/WebGLOutput.js +36 -24
- package/src/renderers/webgl/WebGLProgram.js +3 -0
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLRenderLists.js +6 -10
- package/src/renderers/webgl/WebGLShadowMap.js +47 -44
- package/src/renderers/webgl/WebGLTextures.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
- package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
- package/src/renderers/webgpu/WebGPUBackend.js +513 -145
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
- package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
- package/src/renderers/webxr/WebXRManager.js +25 -2
- package/src/scenes/Scene.js +3 -3
- package/src/textures/CompressedArrayTexture.js +16 -0
- package/src/textures/Data3DTexture.js +16 -0
- package/src/textures/DataArrayTexture.js +16 -0
- package/src/textures/DepthTexture.js +3 -3
- package/src/textures/Texture.js +3 -3
- package/src/textures/{Source.js → TextureSource.js} +39 -8
- package/src/utils.js +6 -79
- package/build/three.core.min.js +0 -6
- package/build/three.module.min.js +0 -6
- package/build/three.tsl.min.js +0 -6
- package/build/three.webgpu.min.js +0 -6
- package/build/three.webgpu.nodes.min.js +0 -6
- package/examples/jsm/libs/ecsy.module.js +0 -1792
- package/examples/jsm/loaders/LottieLoader.js +0 -130
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
package/src/math/Matrix4.js
CHANGED
|
@@ -229,7 +229,7 @@ class Matrix4 {
|
|
|
229
229
|
}
|
|
230
230
|
|
|
231
231
|
/**
|
|
232
|
-
* Extracts the basis of this matrix into the three
|
|
232
|
+
* Extracts the basis vectors of this matrix into the three vectors provided.
|
|
233
233
|
*
|
|
234
234
|
* @param {Vector3} xAxis - The basis's x axis.
|
|
235
235
|
* @param {Vector3} yAxis - The basis's y axis.
|
|
@@ -621,8 +621,6 @@ class Matrix4 {
|
|
|
621
621
|
/**
|
|
622
622
|
* Computes and returns the determinant of this matrix.
|
|
623
623
|
*
|
|
624
|
-
* Based on the method outlined [here](http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.html).
|
|
625
|
-
*
|
|
626
624
|
* @return {number} The determinant.
|
|
627
625
|
*/
|
|
628
626
|
determinant() {
|
|
@@ -788,7 +786,7 @@ class Matrix4 {
|
|
|
788
786
|
}
|
|
789
787
|
|
|
790
788
|
/**
|
|
791
|
-
*
|
|
789
|
+
* Scales each of the first three columns of this matrix by the corresponding component of the given vector.
|
|
792
790
|
*
|
|
793
791
|
* @param {Vector3} v - The scale vector.
|
|
794
792
|
* @return {Matrix4} A reference to this matrix.
|
|
@@ -938,17 +936,12 @@ class Matrix4 {
|
|
|
938
936
|
* Sets this matrix as a rotational transformation around the given axis by
|
|
939
937
|
* the given angle.
|
|
940
938
|
*
|
|
941
|
-
* This is a somewhat controversial but mathematically sound alternative to
|
|
942
|
-
* rotating via Quaternions. See the discussion [here](https://www.gamedev.net/articles/programming/math-and-physics/do-we-really-need-quaternions-r1199).
|
|
943
|
-
*
|
|
944
939
|
* @param {Vector3} axis - The normalized rotation axis.
|
|
945
940
|
* @param {number} angle - The rotation in radians.
|
|
946
941
|
* @return {Matrix4} A reference to this matrix.
|
|
947
942
|
*/
|
|
948
943
|
makeRotationAxis( axis, angle ) {
|
|
949
944
|
|
|
950
|
-
// Based on http://www.gamedev.net/reference/articles/article1199.asp
|
|
951
|
-
|
|
952
945
|
const c = Math.cos( angle );
|
|
953
946
|
const s = Math.sin( angle );
|
|
954
947
|
const t = 1 - c;
|
package/src/math/Plane.js
CHANGED
|
@@ -7,7 +7,7 @@ const _normalMatrix = /*@__PURE__*/ new Matrix3();
|
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* A two dimensional surface that extends infinitely in 3D space, represented
|
|
10
|
-
* in [Hessian normal form](
|
|
10
|
+
* in [Hessian normal form](https://mathworld.wolfram.com/HessianNormalForm.html)
|
|
11
11
|
* by a unit length normal vector and a constant.
|
|
12
12
|
*/
|
|
13
13
|
class Plane {
|
|
@@ -363,6 +363,35 @@ class Plane {
|
|
|
363
363
|
|
|
364
364
|
}
|
|
365
365
|
|
|
366
|
+
/**
|
|
367
|
+
* Returns a serialized structure of the plane.
|
|
368
|
+
*
|
|
369
|
+
* @return {Object} Serialized structure with fields representing the object state.
|
|
370
|
+
*/
|
|
371
|
+
toJSON() {
|
|
372
|
+
|
|
373
|
+
return {
|
|
374
|
+
normal: this.normal.toArray(),
|
|
375
|
+
constant: this.constant
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Sets the plane properties from the given JSON.
|
|
382
|
+
*
|
|
383
|
+
* @param {Object} json - The serialized json to set the plane from.
|
|
384
|
+
* @return {Plane} A reference to this plane.
|
|
385
|
+
*/
|
|
386
|
+
fromJSON( json ) {
|
|
387
|
+
|
|
388
|
+
this.normal.fromArray( json.normal );
|
|
389
|
+
this.constant = json.constant;
|
|
390
|
+
|
|
391
|
+
return this;
|
|
392
|
+
|
|
393
|
+
}
|
|
394
|
+
|
|
366
395
|
}
|
|
367
396
|
|
|
368
397
|
export { Plane };
|
package/src/math/Quaternion.js
CHANGED
|
@@ -302,10 +302,6 @@ class Quaternion {
|
|
|
302
302
|
|
|
303
303
|
const x = euler._x, y = euler._y, z = euler._z, order = euler._order;
|
|
304
304
|
|
|
305
|
-
// http://www.mathworks.com/matlabcentral/fileexchange/
|
|
306
|
-
// 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/
|
|
307
|
-
// content/SpinCalc.m
|
|
308
|
-
|
|
309
305
|
const cos = Math.cos;
|
|
310
306
|
const sin = Math.sin;
|
|
311
307
|
|
|
@@ -381,8 +377,6 @@ class Quaternion {
|
|
|
381
377
|
*/
|
|
382
378
|
setFromAxisAngle( axis, angle ) {
|
|
383
379
|
|
|
384
|
-
// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm
|
|
385
|
-
|
|
386
380
|
const halfAngle = angle / 2, s = Math.sin( halfAngle );
|
|
387
381
|
|
|
388
382
|
this._x = axis.x * s;
|
|
@@ -404,8 +398,6 @@ class Quaternion {
|
|
|
404
398
|
*/
|
|
405
399
|
setFromRotationMatrix( m ) {
|
|
406
400
|
|
|
407
|
-
// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm
|
|
408
|
-
|
|
409
401
|
// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
|
|
410
402
|
|
|
411
403
|
const te = m.elements,
|
|
@@ -693,8 +685,6 @@ class Quaternion {
|
|
|
693
685
|
*/
|
|
694
686
|
multiplyQuaternions( a, b ) {
|
|
695
687
|
|
|
696
|
-
// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm
|
|
697
|
-
|
|
698
688
|
const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;
|
|
699
689
|
const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;
|
|
700
690
|
|
package/src/math/Ray.js
CHANGED
|
@@ -5,10 +5,6 @@ const _segCenter = /*@__PURE__*/ new Vector3();
|
|
|
5
5
|
const _segDir = /*@__PURE__*/ new Vector3();
|
|
6
6
|
const _diff = /*@__PURE__*/ new Vector3();
|
|
7
7
|
|
|
8
|
-
const _edge1 = /*@__PURE__*/ new Vector3();
|
|
9
|
-
const _edge2 = /*@__PURE__*/ new Vector3();
|
|
10
|
-
const _normal = /*@__PURE__*/ new Vector3();
|
|
11
|
-
|
|
12
8
|
/**
|
|
13
9
|
* A ray that emits from an origin in a certain direction. The class is used by
|
|
14
10
|
* {@link Raycaster} to assist with raycasting. Raycasting is used for
|
|
@@ -310,6 +306,8 @@ class Ray {
|
|
|
310
306
|
*/
|
|
311
307
|
intersectSphere( sphere, target ) {
|
|
312
308
|
|
|
309
|
+
if ( sphere.radius < 0 ) return null; // handle empty spheres, see #31187
|
|
310
|
+
|
|
313
311
|
_vector.subVectors( sphere.center, this.origin );
|
|
314
312
|
const tca = _vector.dot( this.direction );
|
|
315
313
|
const d2 = _vector.dot( _vector ) - tca * tca;
|
|
@@ -539,76 +537,128 @@ class Ray {
|
|
|
539
537
|
*/
|
|
540
538
|
intersectTriangle( a, b, c, backfaceCulling, target ) {
|
|
541
539
|
|
|
542
|
-
//
|
|
540
|
+
// Watertight ray/triangle intersection. Reference: Woop, Benthin, Wald,
|
|
541
|
+
// "Watertight Ray/Triangle Intersection", JCGT vol. 2 no. 1 (2013), Appendix A.
|
|
542
|
+
// https://jcgt.org/published/0002/01/05/
|
|
543
|
+
|
|
544
|
+
const origin = this.origin;
|
|
545
|
+
const direction = this.direction;
|
|
546
|
+
|
|
547
|
+
const dx = direction.x;
|
|
548
|
+
const dy = direction.y;
|
|
549
|
+
const dz = direction.z;
|
|
550
|
+
|
|
551
|
+
// triangle vertices relative to the ray origin
|
|
543
552
|
|
|
544
|
-
|
|
553
|
+
const aox = a.x - origin.x, aoy = a.y - origin.y, aoz = a.z - origin.z;
|
|
554
|
+
const box = b.x - origin.x, boy = b.y - origin.y, boz = b.z - origin.z;
|
|
555
|
+
const cox = c.x - origin.x, coy = c.y - origin.y, coz = c.z - origin.z;
|
|
545
556
|
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
557
|
+
// Use the dimension where the ray direction is maximal as the projection
|
|
558
|
+
// axis (kz) and read every component already permuted into (kx, ky, kz).
|
|
559
|
+
// kx and ky are swapped when the direction's kz component is negative, to
|
|
560
|
+
// preserve the winding order of triangles.
|
|
549
561
|
|
|
550
|
-
|
|
551
|
-
// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by
|
|
552
|
-
// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))
|
|
553
|
-
// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))
|
|
554
|
-
// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)
|
|
555
|
-
let DdN = this.direction.dot( _normal );
|
|
556
|
-
let sign;
|
|
562
|
+
const adx = Math.abs( dx ), ady = Math.abs( dy ), adz = Math.abs( dz );
|
|
557
563
|
|
|
558
|
-
|
|
564
|
+
let dkx, dky, dkz;
|
|
565
|
+
let akx, aky, akz, bkx, bky, bkz, ckx, cky, ckz;
|
|
559
566
|
|
|
560
|
-
|
|
561
|
-
|
|
567
|
+
if ( adx >= ady && adx >= adz ) {
|
|
568
|
+
|
|
569
|
+
dkz = dx; akz = aox; bkz = box; ckz = cox;
|
|
570
|
+
|
|
571
|
+
if ( dx >= 0 ) {
|
|
572
|
+
|
|
573
|
+
dkx = dy; dky = dz;
|
|
574
|
+
akx = aoy; aky = aoz; bkx = boy; bky = boz; ckx = coy; cky = coz;
|
|
575
|
+
|
|
576
|
+
} else {
|
|
562
577
|
|
|
563
|
-
|
|
578
|
+
dkx = dz; dky = dy;
|
|
579
|
+
akx = aoz; aky = aoy; bkx = boz; bky = boy; ckx = coz; cky = coy;
|
|
564
580
|
|
|
565
|
-
|
|
566
|
-
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
} else if ( ady >= adz ) {
|
|
584
|
+
|
|
585
|
+
dkz = dy; akz = aoy; bkz = boy; ckz = coy;
|
|
586
|
+
|
|
587
|
+
if ( dy >= 0 ) {
|
|
588
|
+
|
|
589
|
+
dkx = dz; dky = dx;
|
|
590
|
+
akx = aoz; aky = aox; bkx = boz; bky = box; ckx = coz; cky = cox;
|
|
591
|
+
|
|
592
|
+
} else {
|
|
593
|
+
|
|
594
|
+
dkx = dx; dky = dz;
|
|
595
|
+
akx = aox; aky = aoz; bkx = box; bky = boz; ckx = cox; cky = coz;
|
|
596
|
+
|
|
597
|
+
}
|
|
567
598
|
|
|
568
599
|
} else {
|
|
569
600
|
|
|
570
|
-
|
|
601
|
+
dkz = dz; akz = aoz; bkz = boz; ckz = coz;
|
|
571
602
|
|
|
572
|
-
|
|
603
|
+
if ( dz >= 0 ) {
|
|
573
604
|
|
|
574
|
-
|
|
575
|
-
|
|
605
|
+
dkx = dx; dky = dy;
|
|
606
|
+
akx = aox; aky = aoy; bkx = box; bky = boy; ckx = cox; cky = coy;
|
|
576
607
|
|
|
577
|
-
|
|
578
|
-
if ( DdQxE2 < 0 ) {
|
|
608
|
+
} else {
|
|
579
609
|
|
|
580
|
-
|
|
610
|
+
dkx = dy; dky = dx;
|
|
611
|
+
akx = aoy; aky = aox; bkx = boy; bky = box; ckx = coy; cky = cox;
|
|
612
|
+
|
|
613
|
+
}
|
|
581
614
|
|
|
582
615
|
}
|
|
583
616
|
|
|
584
|
-
|
|
617
|
+
// a zero direction has no maximal axis and cannot intersect
|
|
585
618
|
|
|
586
|
-
|
|
587
|
-
if ( DdE1xQ < 0 ) {
|
|
619
|
+
if ( dkz === 0 ) return null;
|
|
588
620
|
|
|
589
|
-
|
|
621
|
+
// shear constants that align the ray with the +kz axis
|
|
590
622
|
|
|
591
|
-
|
|
623
|
+
const sx = dkx / dkz, sy = dky / dkz, sz = 1 / dkz;
|
|
592
624
|
|
|
593
|
-
//
|
|
594
|
-
if ( DdQxE2 + DdE1xQ > DdN ) {
|
|
625
|
+
// sheared and scaled vertices
|
|
595
626
|
|
|
596
|
-
|
|
627
|
+
const ax = akx - sx * akz, ay = aky - sy * akz;
|
|
628
|
+
const bx = bkx - sx * bkz, by = bky - sy * bkz;
|
|
629
|
+
const cx = ckx - sx * ckz, cy = cky - sy * ckz;
|
|
597
630
|
|
|
598
|
-
|
|
631
|
+
// scaled barycentric coordinates (signed edge functions); the shear makes a
|
|
632
|
+
// shared edge evaluate identically for both adjacent triangles, so the ray
|
|
633
|
+
// can never fall between them
|
|
599
634
|
|
|
600
|
-
|
|
601
|
-
const
|
|
635
|
+
const u = cx * by - cy * bx;
|
|
636
|
+
const v = ax * cy - ay * cx;
|
|
637
|
+
const w = bx * ay - by * ax;
|
|
602
638
|
|
|
603
|
-
|
|
604
|
-
if ( QdN < 0 ) {
|
|
639
|
+
if ( backfaceCulling ) {
|
|
605
640
|
|
|
606
|
-
return null;
|
|
641
|
+
if ( u < 0 || v < 0 || w < 0 ) return null;
|
|
642
|
+
|
|
643
|
+
} else {
|
|
644
|
+
|
|
645
|
+
if ( ( u < 0 || v < 0 || w < 0 ) && ( u > 0 || v > 0 || w > 0 ) ) return null;
|
|
607
646
|
|
|
608
647
|
}
|
|
609
648
|
|
|
610
|
-
|
|
611
|
-
|
|
649
|
+
const det = u + v + w;
|
|
650
|
+
|
|
651
|
+
// ray is co-planar with the triangle
|
|
652
|
+
|
|
653
|
+
if ( det === 0 ) return null;
|
|
654
|
+
|
|
655
|
+
// scaled hit distance; t = tScaled / det must lie in front of the origin
|
|
656
|
+
|
|
657
|
+
const tScaled = sz * ( u * akz + v * bkz + w * ckz );
|
|
658
|
+
|
|
659
|
+
if ( det > 0 ? tScaled < 0 : tScaled > 0 ) return null;
|
|
660
|
+
|
|
661
|
+
return this.at( tScaled / det, target );
|
|
612
662
|
|
|
613
663
|
}
|
|
614
664
|
|
package/src/math/Triangle.js
CHANGED
package/src/math/Vector3.js
CHANGED
|
@@ -516,8 +516,8 @@ class Vector3 {
|
|
|
516
516
|
}
|
|
517
517
|
|
|
518
518
|
/**
|
|
519
|
-
* Transforms
|
|
520
|
-
*
|
|
519
|
+
* Transforms this vector by the upper left 3x3 sub-matrix of the given 4x4 matrix,
|
|
520
|
+
* and normalizes the result.
|
|
521
521
|
*
|
|
522
522
|
* @param {Matrix4} m - The matrix.
|
|
523
523
|
* @return {Vector3} A reference to this vector.
|
package/src/math/Vector4.js
CHANGED
|
@@ -493,8 +493,6 @@ class Vector4 {
|
|
|
493
493
|
*/
|
|
494
494
|
setAxisAngleFromQuaternion( q ) {
|
|
495
495
|
|
|
496
|
-
// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm
|
|
497
|
-
|
|
498
496
|
// q is assumed to be normalized
|
|
499
497
|
|
|
500
498
|
this.w = 2 * Math.acos( q.w );
|
|
@@ -528,8 +526,6 @@ class Vector4 {
|
|
|
528
526
|
*/
|
|
529
527
|
setAxisAngleFromRotationMatrix( m ) {
|
|
530
528
|
|
|
531
|
-
// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm
|
|
532
|
-
|
|
533
529
|
// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
|
|
534
530
|
|
|
535
531
|
let angle, x, y, z; // variables for result
|
|
@@ -65,42 +65,55 @@ class BezierInterpolant extends Interpolant {
|
|
|
65
65
|
const c1x = inTangents[ inTangentOffset ];
|
|
66
66
|
const c1y = inTangents[ inTangentOffset + 1 ];
|
|
67
67
|
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
let s2, s3, oneMinusS, oneMinusS2, oneMinusS3;
|
|
68
|
+
// Find the curve parameter s where the Bezier X(s) matches t, then evaluate Y(s)
|
|
69
|
+
const s = solveBezierParameter( t, t0, c0x, c1x, t1 );
|
|
71
70
|
|
|
72
|
-
|
|
71
|
+
result[ i ] = cubicBezier( s, v0, c0y, c1y, v1 );
|
|
73
72
|
|
|
74
|
-
|
|
75
|
-
s3 = s2 * s;
|
|
76
|
-
oneMinusS = 1 - s;
|
|
77
|
-
oneMinusS2 = oneMinusS * oneMinusS;
|
|
78
|
-
oneMinusS3 = oneMinusS2 * oneMinusS;
|
|
73
|
+
}
|
|
79
74
|
|
|
80
|
-
|
|
81
|
-
const bx = oneMinusS3 * t0 + 3 * oneMinusS2 * s * c0x + 3 * oneMinusS * s2 * c1x + s3 * t1;
|
|
75
|
+
return result;
|
|
82
76
|
|
|
83
|
-
|
|
84
|
-
if ( Math.abs( error ) < 1e-10 ) break;
|
|
77
|
+
}
|
|
85
78
|
|
|
86
|
-
|
|
87
|
-
const dbx = 3 * oneMinusS2 * ( c0x - t0 ) + 6 * oneMinusS * s * ( c1x - c0x ) + 3 * s2 * ( t1 - c1x );
|
|
88
|
-
if ( Math.abs( dbx ) < 1e-10 ) break;
|
|
79
|
+
}
|
|
89
80
|
|
|
90
|
-
|
|
91
|
-
s = Math.max( 0, Math.min( 1, s ) );
|
|
81
|
+
function cubicBezier( s, p0, p1, p2, p3 ) {
|
|
92
82
|
|
|
93
|
-
|
|
83
|
+
const k = 1 - s;
|
|
94
84
|
|
|
95
|
-
|
|
96
|
-
result[ i ] = oneMinusS3 * v0 + 3 * oneMinusS2 * s * c0y + 3 * oneMinusS * s2 * c1y + s3 * v1;
|
|
85
|
+
return k * k * k * p0 + 3 * k * k * s * p1 + 3 * k * s * s * p2 + s * s * s * p3;
|
|
97
86
|
|
|
98
|
-
|
|
87
|
+
}
|
|
99
88
|
|
|
100
|
-
|
|
89
|
+
function cubicBezierSlope( s, p0, p1, p2, p3 ) {
|
|
90
|
+
|
|
91
|
+
const k = 1 - s;
|
|
92
|
+
|
|
93
|
+
return 3 * k * k * ( p1 - p0 ) + 6 * k * s * ( p2 - p1 ) + 3 * s * s * ( p3 - p2 );
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Solves cubicBezier( s, x0, x1, x2, x3 ) = x for s in [0,1] using Newton-Raphson
|
|
98
|
+
|
|
99
|
+
function solveBezierParameter( x, x0, x1, x2, x3 ) {
|
|
100
|
+
|
|
101
|
+
let s = ( x - x0 ) / ( x3 - x0 );
|
|
102
|
+
|
|
103
|
+
for ( let i = 0; i < 8; i ++ ) {
|
|
104
|
+
|
|
105
|
+
const error = cubicBezier( s, x0, x1, x2, x3 ) - x;
|
|
106
|
+
if ( Math.abs( error ) < 1e-10 ) break;
|
|
107
|
+
|
|
108
|
+
const slope = cubicBezierSlope( s, x0, x1, x2, x3 );
|
|
109
|
+
if ( Math.abs( slope ) < 1e-10 ) break;
|
|
110
|
+
|
|
111
|
+
s = Math.max( 0, Math.min( 1, s - error / slope ) );
|
|
101
112
|
|
|
102
113
|
}
|
|
103
114
|
|
|
115
|
+
return s;
|
|
116
|
+
|
|
104
117
|
}
|
|
105
118
|
|
|
106
119
|
export { BezierInterpolant };
|
package/src/nodes/Nodes.js
CHANGED
|
@@ -55,6 +55,7 @@ export { default as ModelNode } from './accessors/ModelNode.js';
|
|
|
55
55
|
export { default as Object3DNode } from './accessors/Object3DNode.js';
|
|
56
56
|
export { default as PointUVNode } from './accessors/PointUVNode.js';
|
|
57
57
|
export { default as ReferenceBaseNode } from './accessors/ReferenceBaseNode.js';
|
|
58
|
+
export { default as ReferenceElementNode } from './accessors/ReferenceElementNode.js';
|
|
58
59
|
export { default as ReferenceNode } from './accessors/ReferenceNode.js';
|
|
59
60
|
export { default as RendererReferenceNode } from './accessors/RendererReferenceNode.js';
|
|
60
61
|
export { default as StorageBufferNode } from './accessors/StorageBufferNode.js';
|
|
@@ -136,6 +137,7 @@ export { default as ConditionalNode } from './math/ConditionalNode.js';
|
|
|
136
137
|
export { default as MathNode } from './math/MathNode.js';
|
|
137
138
|
export { default as OperatorNode } from './math/OperatorNode.js';
|
|
138
139
|
export { default as PackFloatNode } from './math/PackFloatNode.js';
|
|
140
|
+
export { default as Packed4x8IntegerNode } from './math/Packed4x8IntegerNode.js';
|
|
139
141
|
export { default as UnpackFloatNode } from './math/UnpackFloatNode.js';
|
|
140
142
|
|
|
141
143
|
// parsers
|
package/src/nodes/TSL.js
CHANGED
|
@@ -25,6 +25,7 @@ export * from './math/BitcountNode.js';
|
|
|
25
25
|
export * from './math/Hash.js';
|
|
26
26
|
export * from './math/MathUtils.js';
|
|
27
27
|
export * from './math/PackFloatNode.js';
|
|
28
|
+
export * from './math/Packed4x8IntegerNode.js';
|
|
28
29
|
export * from './math/UnpackFloatNode.js';
|
|
29
30
|
export * from './math/TriNoise3D.js';
|
|
30
31
|
|
|
@@ -49,6 +50,7 @@ export * from './utils/RTTNode.js';
|
|
|
49
50
|
export * from './utils/PostProcessingUtils.js';
|
|
50
51
|
export * from './utils/SampleNode.js';
|
|
51
52
|
export * from './utils/EventNode.js';
|
|
53
|
+
export * from './utils/StorageArrayElementNode.js';
|
|
52
54
|
|
|
53
55
|
// three.js shading language
|
|
54
56
|
export * from './tsl/TSLBase.js';
|
|
@@ -58,6 +60,8 @@ export * from './accessors/AccessorsUtils.js';
|
|
|
58
60
|
export * from './accessors/Arrays.js';
|
|
59
61
|
export * from './accessors/UniformArrayNode.js';
|
|
60
62
|
export * from './accessors/Bitangent.js';
|
|
63
|
+
export * from './accessors/ClippingNode.js';
|
|
64
|
+
export * from './accessors/TangentUtils.js';
|
|
61
65
|
export * from './accessors/BufferAttributeNode.js';
|
|
62
66
|
export * from './accessors/BufferNode.js';
|
|
63
67
|
export * from './accessors/BuiltinNode.js';
|
|
@@ -140,14 +144,13 @@ export * from './accessors/Lights.js';
|
|
|
140
144
|
export * from './lighting/LightsNode.js';
|
|
141
145
|
export * from './lighting/LightingContextNode.js';
|
|
142
146
|
export * from './lighting/ShadowBaseNode.js';
|
|
143
|
-
export
|
|
144
|
-
export
|
|
147
|
+
export { shadow } from './lighting/ShadowNode.js';
|
|
148
|
+
export { BasicShadowFilter, PCFShadowFilter, VSMShadowFilter } from './lighting/ShadowFilterNode.js';
|
|
145
149
|
export * from './lighting/PointShadowNode.js';
|
|
146
150
|
export * from './lighting/PointLightNode.js';
|
|
147
151
|
|
|
148
152
|
// pmrem
|
|
149
153
|
export * from './pmrem/PMREMNode.js';
|
|
150
|
-
export * from './pmrem/PMREMUtils.js';
|
|
151
154
|
|
|
152
155
|
// procedural
|
|
153
156
|
export * from './procedural/Checker.js';
|
|
@@ -161,11 +164,16 @@ export * from './materialx/MaterialXNodes.js';
|
|
|
161
164
|
// functions
|
|
162
165
|
export { default as BRDF_GGX } from './functions/BSDF/BRDF_GGX.js';
|
|
163
166
|
export { default as BRDF_Lambert } from './functions/BSDF/BRDF_Lambert.js';
|
|
167
|
+
export { default as BRDF_Sheen } from './functions/BSDF/BRDF_Sheen.js';
|
|
164
168
|
export { default as D_GGX } from './functions/BSDF/D_GGX.js';
|
|
169
|
+
export { default as D_GGX_Anisotropic } from './functions/BSDF/D_GGX_Anisotropic.js';
|
|
165
170
|
export { default as DFGLUT } from './functions/BSDF/DFGLUT.js';
|
|
171
|
+
export { default as EnvironmentBRDF } from './functions/BSDF/EnvironmentBRDF.js';
|
|
166
172
|
export { default as F_Schlick } from './functions/BSDF/F_Schlick.js';
|
|
167
173
|
export { default as Schlick_to_F0 } from './functions/BSDF/Schlick_to_F0.js';
|
|
168
174
|
export { default as V_GGX_SmithCorrelated } from './functions/BSDF/V_GGX_SmithCorrelated.js';
|
|
175
|
+
export { default as V_GGX_SmithCorrelated_Anisotropic } from './functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js';
|
|
176
|
+
export { LTC_Evaluate, LTC_Evaluate_Volume, LTC_Uv } from './functions/BSDF/LTC.js';
|
|
169
177
|
|
|
170
178
|
export * from './lighting/LightUtils.js';
|
|
171
179
|
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
|
|
2
2
|
import { normalLocal } from './Normal.js';
|
|
3
|
-
import { positionLocal } from './Position.js';
|
|
3
|
+
import { positionLocal, positionPrevious } from './Position.js';
|
|
4
4
|
import { vec3, mat3, mat4, int, ivec2, float, Fn } from '../tsl/TSLBase.js';
|
|
5
5
|
import { textureLoad } from './TextureNode.js';
|
|
6
6
|
import { textureSize } from './TextureSizeNode.js';
|
|
7
7
|
import { tangentLocal } from './Tangent.js';
|
|
8
8
|
import { instanceIndex, drawIndex } from '../core/IndexNode.js';
|
|
9
9
|
import { varyingProperty } from '../core/PropertyNode.js';
|
|
10
|
+
import { OnAfterObjectUpdate } from '../utils/EventNode.js';
|
|
11
|
+
import { DataTexture } from '../../textures/DataTexture.js';
|
|
12
|
+
|
|
13
|
+
const _previousBatchingMatrices = /*@__PURE__*/ new WeakMap();
|
|
10
14
|
|
|
11
15
|
/**
|
|
12
16
|
* TSL function that retrieves the batching color for a given instance ID from a colors texture.
|
|
@@ -41,6 +45,61 @@ const getIndirectIndex = /*@__PURE__*/ Fn( ( [ indirectTexture, id ] ) => {
|
|
|
41
45
|
|
|
42
46
|
} );
|
|
43
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Creates the node that reads a batching matrix from the given matrices texture.
|
|
50
|
+
*
|
|
51
|
+
* @param {Texture} matricesTexture - The matrices texture.
|
|
52
|
+
* @param {Node<uint>} id - The indirect instance ID.
|
|
53
|
+
* @returns {Node<mat4>} The matrix node.
|
|
54
|
+
*/
|
|
55
|
+
function createBatchingMatrixNode( matricesTexture, id ) {
|
|
56
|
+
|
|
57
|
+
const size = int( textureSize( textureLoad( matricesTexture ), 0 ).x ).toConst();
|
|
58
|
+
const j = float( id ).mul( 4 ).toInt().toConst();
|
|
59
|
+
|
|
60
|
+
const x = j.mod( size ).toConst();
|
|
61
|
+
const y = j.div( size ).toConst();
|
|
62
|
+
|
|
63
|
+
return mat4(
|
|
64
|
+
textureLoad( matricesTexture, ivec2( x, y ) ),
|
|
65
|
+
textureLoad( matricesTexture, ivec2( x.add( 1 ), y ) ),
|
|
66
|
+
textureLoad( matricesTexture, ivec2( x.add( 2 ), y ) ),
|
|
67
|
+
textureLoad( matricesTexture, ivec2( x.add( 3 ), y ) )
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Retrieves or initializes the previous frame batching matrix node for motion vectors.
|
|
74
|
+
* Uses a WeakMap to cache previous frame matrices textures and their TSL nodes.
|
|
75
|
+
*
|
|
76
|
+
* @param {BatchedMesh} batchMesh - The batched mesh.
|
|
77
|
+
* @param {Node<uint>} id - The indirect instance ID.
|
|
78
|
+
* @returns {Node<mat4>} The previous frame batching matrix node.
|
|
79
|
+
*/
|
|
80
|
+
function getPreviousNode( batchMesh, id ) {
|
|
81
|
+
|
|
82
|
+
let data = _previousBatchingMatrices.get( batchMesh );
|
|
83
|
+
|
|
84
|
+
if ( data === undefined ) {
|
|
85
|
+
|
|
86
|
+
const { image, format, type } = batchMesh._matricesTexture;
|
|
87
|
+
|
|
88
|
+
const previousMatricesTexture = new DataTexture( image.data.slice(), image.width, image.height, format, type );
|
|
89
|
+
|
|
90
|
+
data = {
|
|
91
|
+
previousMatricesTexture,
|
|
92
|
+
node: createBatchingMatrixNode( previousMatricesTexture, id )
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
_previousBatchingMatrices.set( batchMesh, data );
|
|
96
|
+
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return data.node;
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
44
103
|
/**
|
|
45
104
|
* TSL object representing a varying property for the batching color vector.
|
|
46
105
|
*
|
|
@@ -48,6 +107,13 @@ const getIndirectIndex = /*@__PURE__*/ Fn( ( [ indirectTexture, id ] ) => {
|
|
|
48
107
|
*/
|
|
49
108
|
export const batchColor = /*@__PURE__*/ varyingProperty( 'vec4', 'vBatchColor' );
|
|
50
109
|
|
|
110
|
+
/**
|
|
111
|
+
* TSL object representing a varying property for the batch indirect index (instance ID).
|
|
112
|
+
*
|
|
113
|
+
* @type {VaryingNode<uint>}
|
|
114
|
+
*/
|
|
115
|
+
export const batchIndirectIndex = /*@__PURE__*/ varyingProperty( 'uint', 'vBatchIndirectId' );
|
|
116
|
+
|
|
51
117
|
/**
|
|
52
118
|
* TSL function representing the vertex shader batching setup.
|
|
53
119
|
* Applies the batch transformation matrix to positionLocal, normalLocal, and tangentLocal.
|
|
@@ -63,19 +129,9 @@ export const batch = /*@__PURE__*/ Fn( ( [ batchMesh ], builder ) => {
|
|
|
63
129
|
|
|
64
130
|
const indirectId = getIndirectIndex( batchMesh._indirectTexture, int( batchingIdNode ) );
|
|
65
131
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const size = int( textureSize( textureLoad( matricesTexture ), 0 ).x ).toConst();
|
|
69
|
-
const j = float( indirectId ).mul( 4 ).toInt().toConst();
|
|
132
|
+
batchIndirectIndex.assign( indirectId );
|
|
70
133
|
|
|
71
|
-
const
|
|
72
|
-
const y = j.div( size ).toConst();
|
|
73
|
-
const batchingMatrix = mat4(
|
|
74
|
-
textureLoad( matricesTexture, ivec2( x, y ) ),
|
|
75
|
-
textureLoad( matricesTexture, ivec2( x.add( 1 ), y ) ),
|
|
76
|
-
textureLoad( matricesTexture, ivec2( x.add( 2 ), y ) ),
|
|
77
|
-
textureLoad( matricesTexture, ivec2( x.add( 3 ), y ) )
|
|
78
|
-
);
|
|
134
|
+
const batchingMatrix = createBatchingMatrixNode( batchMesh._matricesTexture, indirectId );
|
|
79
135
|
|
|
80
136
|
const colorsTexture = batchMesh._colorsTexture;
|
|
81
137
|
|
|
@@ -91,6 +147,22 @@ export const batch = /*@__PURE__*/ Fn( ( [ batchMesh ], builder ) => {
|
|
|
91
147
|
|
|
92
148
|
positionLocal.assign( batchingMatrix.mul( positionLocal ) );
|
|
93
149
|
|
|
150
|
+
if ( builder.needsPreviousData() ) {
|
|
151
|
+
|
|
152
|
+
OnAfterObjectUpdate( ( { object } ) => {
|
|
153
|
+
|
|
154
|
+
const previousBatchData = _previousBatchingMatrices.get( object );
|
|
155
|
+
|
|
156
|
+
previousBatchData.previousMatricesTexture.image.data.set( object._matricesTexture.image.data );
|
|
157
|
+
previousBatchData.previousMatricesTexture.needsUpdate = true;
|
|
158
|
+
|
|
159
|
+
} );
|
|
160
|
+
|
|
161
|
+
const previousBatchingMatrixNode = getPreviousNode( batchMesh, indirectId );
|
|
162
|
+
positionPrevious.assign( previousBatchingMatrixNode.mul( positionPrevious ).xyz );
|
|
163
|
+
|
|
164
|
+
}
|
|
165
|
+
|
|
94
166
|
const transformedNormal = normalLocal.div( vec3( bm[ 0 ].dot( bm[ 0 ] ), bm[ 1 ].dot( bm[ 1 ] ), bm[ 2 ].dot( bm[ 2 ] ) ) );
|
|
95
167
|
|
|
96
168
|
const batchingNormal = bm.mul( transformedNormal ).xyz;
|
|
@@ -440,4 +440,4 @@ export const instancedBufferAttribute = ( array, type = null, stride = 0, offset
|
|
|
440
440
|
*/
|
|
441
441
|
export const instancedDynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => createBufferAttribute( array, type, stride, offset, DynamicDrawUsage, true );
|
|
442
442
|
|
|
443
|
-
addMethodChaining( 'toAttribute', ( bufferNode ) => bufferAttribute( bufferNode.value ) );
|
|
443
|
+
addMethodChaining( 'toAttribute', ( bufferNode ) => bufferAttribute( bufferNode.value, bufferNode.bufferType ) );
|
|
@@ -60,4 +60,4 @@ export default BuiltinNode;
|
|
|
60
60
|
* @param {string} name - The name of the built-in shader variable.
|
|
61
61
|
* @returns {BuiltinNode}
|
|
62
62
|
*/
|
|
63
|
-
export const builtin = nodeProxy( BuiltinNode ).setParameterLength( 1 );
|
|
63
|
+
export const builtin = /*@__PURE__*/ nodeProxy( BuiltinNode ).setParameterLength( 1 );
|