@plastic-software/three 0.174.0 → 0.175.1
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 +10744 -1476
- package/build/three.core.js +9633 -1096
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +918 -189
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1432 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +58 -1
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +6 -5
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLProgram.js +25 -5
- package/src/renderers/webgl/WebGLPrograms.js +21 -7
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
package/src/nodes/tsl/TSLCore.js
CHANGED
|
@@ -17,12 +17,12 @@ export function addMethodChaining( name, nodeElement ) {
|
|
|
17
17
|
|
|
18
18
|
if ( NodeElements.has( name ) ) {
|
|
19
19
|
|
|
20
|
-
console.warn( `Redefinition of method chaining ${ name }
|
|
20
|
+
console.warn( `THREE.TSL: Redefinition of method chaining '${ name }'.` );
|
|
21
21
|
return;
|
|
22
22
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
if ( typeof nodeElement !== 'function' ) throw new Error( `Node element ${ name } is not a function` );
|
|
25
|
+
if ( typeof nodeElement !== 'function' ) throw new Error( `THREE.TSL: Node element ${ name } is not a function` );
|
|
26
26
|
|
|
27
27
|
NodeElements.set( name, nodeElement );
|
|
28
28
|
|
|
@@ -213,11 +213,38 @@ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, setti
|
|
|
213
213
|
|
|
214
214
|
const assignNode = ( node ) => nodeObject( settings !== null ? Object.assign( node, settings ) : node );
|
|
215
215
|
|
|
216
|
+
let fn, name = scope, minParams, maxParams;
|
|
217
|
+
|
|
218
|
+
function verifyParamsLimit( params ) {
|
|
219
|
+
|
|
220
|
+
let tslName;
|
|
221
|
+
|
|
222
|
+
if ( name ) tslName = /[a-z]/i.test( name ) ? name + '()' : name;
|
|
223
|
+
else tslName = NodeClass.type;
|
|
224
|
+
|
|
225
|
+
if ( minParams !== undefined && params.length < minParams ) {
|
|
226
|
+
|
|
227
|
+
console.error( `THREE.TSL: "${ tslName }" parameter length is less than minimum required.` );
|
|
228
|
+
|
|
229
|
+
return params.concat( new Array( minParams - params.length ).fill( 0 ) );
|
|
230
|
+
|
|
231
|
+
} else if ( maxParams !== undefined && params.length > maxParams ) {
|
|
232
|
+
|
|
233
|
+
console.error( `THREE.TSL: "${ tslName }" parameter length exceeds limit.` );
|
|
234
|
+
|
|
235
|
+
return params.slice( 0, maxParams );
|
|
236
|
+
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return params;
|
|
240
|
+
|
|
241
|
+
}
|
|
242
|
+
|
|
216
243
|
if ( scope === null ) {
|
|
217
244
|
|
|
218
|
-
|
|
245
|
+
fn = ( ...params ) => {
|
|
219
246
|
|
|
220
|
-
return assignNode( new NodeClass( ...nodeArray( params ) ) );
|
|
247
|
+
return assignNode( new NodeClass( ...nodeArray( verifyParamsLimit( params ) ) ) );
|
|
221
248
|
|
|
222
249
|
};
|
|
223
250
|
|
|
@@ -225,22 +252,41 @@ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, setti
|
|
|
225
252
|
|
|
226
253
|
factor = nodeObject( factor );
|
|
227
254
|
|
|
228
|
-
|
|
255
|
+
fn = ( ...params ) => {
|
|
229
256
|
|
|
230
|
-
return assignNode( new NodeClass( scope, ...nodeArray( params ), factor ) );
|
|
257
|
+
return assignNode( new NodeClass( scope, ...nodeArray( verifyParamsLimit( params ) ), factor ) );
|
|
231
258
|
|
|
232
259
|
};
|
|
233
260
|
|
|
234
261
|
} else {
|
|
235
262
|
|
|
236
|
-
|
|
263
|
+
fn = ( ...params ) => {
|
|
237
264
|
|
|
238
|
-
return assignNode( new NodeClass( scope, ...nodeArray( params ) ) );
|
|
265
|
+
return assignNode( new NodeClass( scope, ...nodeArray( verifyParamsLimit( params ) ) ) );
|
|
239
266
|
|
|
240
267
|
};
|
|
241
268
|
|
|
242
269
|
}
|
|
243
270
|
|
|
271
|
+
fn.setParameterLength = ( ...params ) => {
|
|
272
|
+
|
|
273
|
+
if ( params.length === 1 ) minParams = maxParams = params[ 0 ];
|
|
274
|
+
else if ( params.length === 2 ) [ minParams, maxParams ] = params;
|
|
275
|
+
|
|
276
|
+
return fn;
|
|
277
|
+
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
fn.setName = ( value ) => {
|
|
281
|
+
|
|
282
|
+
name = value;
|
|
283
|
+
|
|
284
|
+
return fn;
|
|
285
|
+
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
return fn;
|
|
289
|
+
|
|
244
290
|
};
|
|
245
291
|
|
|
246
292
|
const ShaderNodeImmutable = function ( NodeClass, ...params ) {
|
|
@@ -514,7 +560,35 @@ export const nodeArray = ( val, altType = null ) => new ShaderNodeArray( val, al
|
|
|
514
560
|
export const nodeProxy = ( ...params ) => new ShaderNodeProxy( ...params );
|
|
515
561
|
export const nodeImmutable = ( ...params ) => new ShaderNodeImmutable( ...params );
|
|
516
562
|
|
|
517
|
-
|
|
563
|
+
let fnId = 0;
|
|
564
|
+
|
|
565
|
+
export const Fn = ( jsFunc, layout = null ) => {
|
|
566
|
+
|
|
567
|
+
let nodeType = null;
|
|
568
|
+
|
|
569
|
+
if ( layout !== null ) {
|
|
570
|
+
|
|
571
|
+
if ( typeof layout === 'object' ) {
|
|
572
|
+
|
|
573
|
+
nodeType = layout.return;
|
|
574
|
+
|
|
575
|
+
} else {
|
|
576
|
+
|
|
577
|
+
if ( typeof layout === 'string' ) {
|
|
578
|
+
|
|
579
|
+
nodeType = layout;
|
|
580
|
+
|
|
581
|
+
} else {
|
|
582
|
+
|
|
583
|
+
console.error( 'THREE.TSL: Invalid layout type.' );
|
|
584
|
+
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
layout = null;
|
|
588
|
+
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
}
|
|
518
592
|
|
|
519
593
|
const shaderNode = new ShaderNode( jsFunc, nodeType );
|
|
520
594
|
|
|
@@ -556,6 +630,35 @@ export const Fn = ( jsFunc, nodeType ) => {
|
|
|
556
630
|
|
|
557
631
|
};
|
|
558
632
|
|
|
633
|
+
if ( layout !== null ) {
|
|
634
|
+
|
|
635
|
+
if ( typeof layout.inputs !== 'object' ) {
|
|
636
|
+
|
|
637
|
+
const fullLayout = {
|
|
638
|
+
name: 'fn' + fnId ++,
|
|
639
|
+
type: nodeType,
|
|
640
|
+
inputs: []
|
|
641
|
+
};
|
|
642
|
+
|
|
643
|
+
for ( const name in layout ) {
|
|
644
|
+
|
|
645
|
+
if ( name === 'return' ) continue;
|
|
646
|
+
|
|
647
|
+
fullLayout.inputs.push( {
|
|
648
|
+
name: name,
|
|
649
|
+
type: layout[ name ]
|
|
650
|
+
} );
|
|
651
|
+
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
layout = fullLayout;
|
|
655
|
+
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
fn.setLayout( layout );
|
|
659
|
+
|
|
660
|
+
}
|
|
661
|
+
|
|
559
662
|
return fn;
|
|
560
663
|
|
|
561
664
|
};
|
|
@@ -565,12 +668,12 @@ export const Fn = ( jsFunc, nodeType ) => {
|
|
|
565
668
|
* @function
|
|
566
669
|
* @deprecated since r168. Use {@link Fn} instead.
|
|
567
670
|
*
|
|
568
|
-
* @param
|
|
671
|
+
* @param {...any} params
|
|
569
672
|
* @returns {Function}
|
|
570
673
|
*/
|
|
571
674
|
export const tslFn = ( ...params ) => { // @deprecated, r168
|
|
572
675
|
|
|
573
|
-
console.warn( 'TSL
|
|
676
|
+
console.warn( 'THREE.TSL: tslFn() has been renamed to Fn().' );
|
|
574
677
|
return Fn( ...params );
|
|
575
678
|
|
|
576
679
|
};
|
|
@@ -667,7 +770,7 @@ addMethodChaining( 'toMat4', mat4 );
|
|
|
667
770
|
|
|
668
771
|
// basic nodes
|
|
669
772
|
|
|
670
|
-
export const element = /*@__PURE__*/ nodeProxy( ArrayElementNode );
|
|
773
|
+
export const element = /*@__PURE__*/ nodeProxy( ArrayElementNode ).setParameterLength( 2 );
|
|
671
774
|
export const convert = ( node, types ) => nodeObject( new ConvertNode( nodeObject( node ), types ) );
|
|
672
775
|
export const split = ( node, channels ) => nodeObject( new SplitNode( nodeObject( node ), channels ) );
|
|
673
776
|
|
|
@@ -63,8 +63,10 @@ class ArrayElementNode extends Node { // @TODO: If extending from TempNode it br
|
|
|
63
63
|
|
|
64
64
|
generate( builder ) {
|
|
65
65
|
|
|
66
|
+
const indexType = this.indexNode.getNodeType( builder );
|
|
67
|
+
|
|
66
68
|
const nodeSnippet = this.node.build( builder );
|
|
67
|
-
const indexSnippet = this.indexNode.build( builder, 'uint' );
|
|
69
|
+
const indexSnippet = this.indexNode.build( builder, ! builder.isVector( indexType ) && builder.isInteger( indexType ) ? indexType : 'uint' );
|
|
68
70
|
|
|
69
71
|
return `${ nodeSnippet }[ ${ indexSnippet } ]`;
|
|
70
72
|
|
|
@@ -42,7 +42,7 @@ class CubeMapNode extends TempNode {
|
|
|
42
42
|
* A reference to the internal cube texture.
|
|
43
43
|
*
|
|
44
44
|
* @private
|
|
45
|
-
* @type {CubeTexture}
|
|
45
|
+
* @type {?CubeTexture}
|
|
46
46
|
* @default null
|
|
47
47
|
*/
|
|
48
48
|
this._cubeTexture = null;
|
|
@@ -53,7 +53,7 @@ class CubeMapNode extends TempNode {
|
|
|
53
53
|
* @private
|
|
54
54
|
* @type {CubeTextureNode}
|
|
55
55
|
*/
|
|
56
|
-
this._cubeTextureNode = cubeTexture();
|
|
56
|
+
this._cubeTextureNode = cubeTexture( null );
|
|
57
57
|
|
|
58
58
|
const defaultTexture = new CubeTexture();
|
|
59
59
|
defaultTexture.isRenderTargetTexture = true;
|
|
@@ -234,4 +234,4 @@ function mapTextureMapping( texture, mapping ) {
|
|
|
234
234
|
* @param {Node} envNode - The node representing the environment map.
|
|
235
235
|
* @returns {CubeMapNode}
|
|
236
236
|
*/
|
|
237
|
-
export const cubeMapNode = /*@__PURE__*/ nodeProxy( CubeMapNode );
|
|
237
|
+
export const cubeMapNode = /*@__PURE__*/ nodeProxy( CubeMapNode ).setParameterLength( 1 );
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import TempNode from '../core/TempNode.js';
|
|
2
|
+
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
3
|
+
|
|
4
|
+
class DebugNode extends TempNode {
|
|
5
|
+
|
|
6
|
+
static get type() {
|
|
7
|
+
|
|
8
|
+
return 'DebugNode';
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
constructor( node, callback = null ) {
|
|
13
|
+
|
|
14
|
+
super();
|
|
15
|
+
|
|
16
|
+
this.node = node;
|
|
17
|
+
this.callback = callback;
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getNodeType( builder ) {
|
|
22
|
+
|
|
23
|
+
return this.node.getNodeType( builder );
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
setup( builder ) {
|
|
28
|
+
|
|
29
|
+
return this.node.build( builder );
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
analyze( builder ) {
|
|
34
|
+
|
|
35
|
+
return this.node.build( builder );
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
generate( builder ) {
|
|
40
|
+
|
|
41
|
+
const callback = this.callback;
|
|
42
|
+
const snippet = this.node.build( builder );
|
|
43
|
+
|
|
44
|
+
let code = '';
|
|
45
|
+
code += '// #--- TSL Debug ---#\n';
|
|
46
|
+
code += builder.flow.code.replace( /^\t/mg, '' ) + '\n';
|
|
47
|
+
code += '/* ... */ ' + snippet + ' /* ... */\n';
|
|
48
|
+
code += '// #-----------------#\n';
|
|
49
|
+
|
|
50
|
+
if ( callback !== null ) {
|
|
51
|
+
|
|
52
|
+
callback( code );
|
|
53
|
+
|
|
54
|
+
} else {
|
|
55
|
+
|
|
56
|
+
console.log( code );
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return snippet;
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export default DebugNode;
|
|
67
|
+
|
|
68
|
+
export const debug = ( node, callback = null ) => nodeObject( new DebugNode( nodeObject( node ), callback ) );
|
|
69
|
+
|
|
70
|
+
addMethodChaining( 'debug', debug );
|
|
@@ -59,7 +59,7 @@ export default EquirectUVNode;
|
|
|
59
59
|
*
|
|
60
60
|
* @tsl
|
|
61
61
|
* @function
|
|
62
|
-
* @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
|
|
62
|
+
* @param {?Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
|
|
63
63
|
* @returns {EquirectUVNode}
|
|
64
64
|
*/
|
|
65
|
-
export const equirectUV = /*@__PURE__*/ nodeProxy( EquirectUVNode );
|
|
65
|
+
export const equirectUV = /*@__PURE__*/ nodeProxy( EquirectUVNode ).setParameterLength( 0, 1 );
|
|
@@ -56,17 +56,42 @@ class JoinNode extends TempNode {
|
|
|
56
56
|
generate( builder, output ) {
|
|
57
57
|
|
|
58
58
|
const type = this.getNodeType( builder );
|
|
59
|
+
const maxLength = builder.getTypeLength( type );
|
|
60
|
+
|
|
59
61
|
const nodes = this.nodes;
|
|
60
62
|
|
|
61
63
|
const primitiveType = builder.getComponentType( type );
|
|
62
64
|
|
|
63
65
|
const snippetValues = [];
|
|
64
66
|
|
|
67
|
+
let length = 0;
|
|
68
|
+
|
|
65
69
|
for ( const input of nodes ) {
|
|
66
70
|
|
|
67
|
-
|
|
71
|
+
if ( length >= maxLength ) {
|
|
72
|
+
|
|
73
|
+
console.error( `THREE.TSL: Length of parameters exceeds maximum length of function '${ type }()' type.` );
|
|
74
|
+
break;
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
let inputType = input.getNodeType( builder );
|
|
79
|
+
let inputTypeLength = builder.getTypeLength( inputType );
|
|
80
|
+
let inputSnippet;
|
|
81
|
+
|
|
82
|
+
if ( length + inputTypeLength > maxLength ) {
|
|
83
|
+
|
|
84
|
+
console.error( `THREE.TSL: Length of '${ type }()' data exceeds maximum length of output type.` );
|
|
85
|
+
|
|
86
|
+
inputTypeLength = maxLength - length;
|
|
87
|
+
inputType = builder.getTypeFromLength( inputTypeLength );
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
length += inputTypeLength;
|
|
92
|
+
inputSnippet = input.build( builder, inputType );
|
|
68
93
|
|
|
69
|
-
const inputPrimitiveType = builder.getComponentType(
|
|
94
|
+
const inputPrimitiveType = builder.getComponentType( inputType );
|
|
70
95
|
|
|
71
96
|
if ( inputPrimitiveType !== primitiveType ) {
|
|
72
97
|
|
|
@@ -25,6 +25,16 @@ import { nodeObject, nodeArray } from '../tsl/TSLBase.js';
|
|
|
25
25
|
* ```js
|
|
26
26
|
* Loop( { start: 10 }, () => {} );
|
|
27
27
|
* ```
|
|
28
|
+
* It is possible to execute with boolean values, similar to the `while` syntax.
|
|
29
|
+
* ```js
|
|
30
|
+
* const value = float( 0 ).toVar();
|
|
31
|
+
*
|
|
32
|
+
* Loop( value.lessThan( 10 ), () => {
|
|
33
|
+
*
|
|
34
|
+
* value.addAssign( 1 );
|
|
35
|
+
*
|
|
36
|
+
* } );
|
|
37
|
+
* ```
|
|
28
38
|
* The module also provides `Break()` and `Continue()` TSL expression for loop control.
|
|
29
39
|
* @augments Node
|
|
30
40
|
*/
|
|
@@ -133,15 +143,25 @@ class LoopNode extends Node {
|
|
|
133
143
|
|
|
134
144
|
const param = params[ i ];
|
|
135
145
|
|
|
136
|
-
let start = null, end = null, name = null, type = null, condition = null, update = null;
|
|
146
|
+
let isWhile = false, start = null, end = null, name = null, type = null, condition = null, update = null;
|
|
137
147
|
|
|
138
148
|
if ( param.isNode ) {
|
|
139
149
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
150
|
+
if ( param.getNodeType( builder ) === 'bool' ) {
|
|
151
|
+
|
|
152
|
+
isWhile = true;
|
|
153
|
+
type = 'bool';
|
|
154
|
+
end = param.build( builder, type );
|
|
155
|
+
|
|
156
|
+
} else {
|
|
157
|
+
|
|
158
|
+
type = 'int';
|
|
159
|
+
name = this.getVarName( i );
|
|
160
|
+
start = '0';
|
|
161
|
+
end = param.build( builder, type );
|
|
162
|
+
condition = '<';
|
|
163
|
+
|
|
164
|
+
}
|
|
145
165
|
|
|
146
166
|
} else {
|
|
147
167
|
|
|
@@ -187,41 +207,51 @@ class LoopNode extends Node {
|
|
|
187
207
|
|
|
188
208
|
}
|
|
189
209
|
|
|
190
|
-
|
|
210
|
+
let loopSnippet;
|
|
191
211
|
|
|
192
|
-
|
|
212
|
+
if ( isWhile ) {
|
|
193
213
|
|
|
194
|
-
|
|
195
|
-
const endSnippet = internalParam.end;
|
|
214
|
+
loopSnippet = `while ( ${ end } )`;
|
|
196
215
|
|
|
197
|
-
|
|
198
|
-
let conditionalSnippet = '';
|
|
199
|
-
let updateSnippet = '';
|
|
216
|
+
} else {
|
|
200
217
|
|
|
201
|
-
|
|
218
|
+
const internalParam = { start, end, condition };
|
|
202
219
|
|
|
203
|
-
|
|
220
|
+
//
|
|
204
221
|
|
|
205
|
-
|
|
206
|
-
|
|
222
|
+
const startSnippet = internalParam.start;
|
|
223
|
+
const endSnippet = internalParam.end;
|
|
207
224
|
|
|
208
|
-
|
|
225
|
+
let declarationSnippet = '';
|
|
226
|
+
let conditionalSnippet = '';
|
|
227
|
+
let updateSnippet = '';
|
|
228
|
+
|
|
229
|
+
if ( ! update ) {
|
|
230
|
+
|
|
231
|
+
if ( type === 'int' || type === 'uint' ) {
|
|
232
|
+
|
|
233
|
+
if ( condition.includes( '<' ) ) update = '++';
|
|
234
|
+
else update = '--';
|
|
209
235
|
|
|
210
|
-
|
|
211
|
-
|
|
236
|
+
} else {
|
|
237
|
+
|
|
238
|
+
if ( condition.includes( '<' ) ) update = '+= 1.';
|
|
239
|
+
else update = '-= 1.';
|
|
240
|
+
|
|
241
|
+
}
|
|
212
242
|
|
|
213
243
|
}
|
|
214
244
|
|
|
215
|
-
|
|
245
|
+
declarationSnippet += builder.getVar( type, name ) + ' = ' + startSnippet;
|
|
216
246
|
|
|
217
|
-
|
|
247
|
+
conditionalSnippet += name + ' ' + condition + ' ' + endSnippet;
|
|
248
|
+
updateSnippet += name + ' ' + update;
|
|
218
249
|
|
|
219
|
-
|
|
220
|
-
updateSnippet += name + ' ' + update;
|
|
250
|
+
loopSnippet = `for ( ${ declarationSnippet }; ${ conditionalSnippet }; ${ updateSnippet } )`;
|
|
221
251
|
|
|
222
|
-
|
|
252
|
+
}
|
|
223
253
|
|
|
224
|
-
builder.addFlowCode( ( i === 0 ? '\n' : '' ) + builder.tab +
|
|
254
|
+
builder.addFlowCode( ( i === 0 ? '\n' : '' ) + builder.tab + loopSnippet + ' {\n\n' ).addFlowTab();
|
|
225
255
|
|
|
226
256
|
}
|
|
227
257
|
|
|
@@ -282,12 +312,12 @@ export const Break = () => expression( 'break' ).append();
|
|
|
282
312
|
* @function
|
|
283
313
|
* @deprecated since r168. Use {@link Loop} instead.
|
|
284
314
|
*
|
|
285
|
-
* @param
|
|
315
|
+
* @param {...any} params
|
|
286
316
|
* @returns {LoopNode}
|
|
287
317
|
*/
|
|
288
318
|
export const loop = ( ...params ) => { // @deprecated, r168
|
|
289
319
|
|
|
290
|
-
console.warn( 'TSL
|
|
320
|
+
console.warn( 'THREE.TSL: loop() has been renamed to Loop().' );
|
|
291
321
|
return Loop( ...params );
|
|
292
322
|
|
|
293
323
|
};
|
|
@@ -100,4 +100,4 @@ export default MaxMipLevelNode;
|
|
|
100
100
|
* @param {TextureNode} textureNode - The texture node to compute the max mip level for.
|
|
101
101
|
* @returns {MaxMipLevelNode}
|
|
102
102
|
*/
|
|
103
|
-
export const maxMipLevel = /*@__PURE__*/ nodeProxy( MaxMipLevelNode );
|
|
103
|
+
export const maxMipLevel = /*@__PURE__*/ nodeProxy( MaxMipLevelNode ).setParameterLength( 1 );
|
|
@@ -76,8 +76,8 @@ class ReflectorNode extends TextureNode {
|
|
|
76
76
|
* A reference to the internal reflector base node which holds the actual implementation.
|
|
77
77
|
*
|
|
78
78
|
* @private
|
|
79
|
-
* @type {
|
|
80
|
-
* @default
|
|
79
|
+
* @type {ReflectorBaseNode}
|
|
80
|
+
* @default ReflectorBaseNode
|
|
81
81
|
*/
|
|
82
82
|
this._reflectorBaseNode = parameters.reflector || new ReflectorBaseNode( this, parameters );
|
|
83
83
|
|
|
@@ -101,11 +101,11 @@ export default RemapNode;
|
|
|
101
101
|
* @param {Node} node - The node that should be remapped.
|
|
102
102
|
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
103
103
|
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
104
|
-
* @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
105
|
-
* @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
104
|
+
* @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
105
|
+
* @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
106
106
|
* @returns {RemapNode}
|
|
107
107
|
*/
|
|
108
|
-
export const remap = /*@__PURE__*/ nodeProxy( RemapNode, null, null, { doClamp: false } );
|
|
108
|
+
export const remap = /*@__PURE__*/ nodeProxy( RemapNode, null, null, { doClamp: false } ).setParameterLength( 3, 5 );
|
|
109
109
|
|
|
110
110
|
/**
|
|
111
111
|
* TSL function for creating a remap node, but with enabled clamping.
|
|
@@ -115,11 +115,11 @@ export const remap = /*@__PURE__*/ nodeProxy( RemapNode, null, null, { doClamp:
|
|
|
115
115
|
* @param {Node} node - The node that should be remapped.
|
|
116
116
|
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
117
117
|
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
118
|
-
* @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
119
|
-
* @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
118
|
+
* @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
119
|
+
* @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
120
120
|
* @returns {RemapNode}
|
|
121
121
|
*/
|
|
122
|
-
export const remapClamp = /*@__PURE__*/ nodeProxy( RemapNode );
|
|
122
|
+
export const remapClamp = /*@__PURE__*/ nodeProxy( RemapNode ).setParameterLength( 3, 5 );
|
|
123
123
|
|
|
124
124
|
addMethodChaining( 'remap', remap );
|
|
125
125
|
addMethodChaining( 'remapClamp', remapClamp );
|
|
@@ -100,4 +100,4 @@ export default RotateNode;
|
|
|
100
100
|
* on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
101
101
|
* @returns {RotateNode}
|
|
102
102
|
*/
|
|
103
|
-
export const rotate = /*@__PURE__*/ nodeProxy( RotateNode );
|
|
103
|
+
export const rotate = /*@__PURE__*/ nodeProxy( RotateNode ).setParameterLength( 2 );
|
|
@@ -83,8 +83,8 @@ export default SpriteSheetUVNode;
|
|
|
83
83
|
* @tsl
|
|
84
84
|
* @function
|
|
85
85
|
* @param {Node<vec2>} countNode - The node that defines the number of sprites in the x and y direction (e.g 6x6).
|
|
86
|
-
* @param {Node<vec2>} [uvNode=uv()] - The uv node.
|
|
87
|
-
* @param {Node<float>} [frameNode=float()] - The node that defines the current frame/sprite.
|
|
86
|
+
* @param {?Node<vec2>} [uvNode=uv()] - The uv node.
|
|
87
|
+
* @param {?Node<float>} [frameNode=float()] - The node that defines the current frame/sprite.
|
|
88
88
|
* @returns {SpriteSheetUVNode}
|
|
89
89
|
*/
|
|
90
|
-
export const spritesheetUV = /*@__PURE__*/ nodeProxy( SpriteSheetUVNode );
|
|
90
|
+
export const spritesheetUV = /*@__PURE__*/ nodeProxy( SpriteSheetUVNode ).setParameterLength( 3 );
|
|
@@ -140,4 +140,4 @@ export default StorageArrayElementNode;
|
|
|
140
140
|
* @param {Node} indexNode - The index node that defines the element access.
|
|
141
141
|
* @returns {StorageArrayElementNode}
|
|
142
142
|
*/
|
|
143
|
-
export const storageElement = /*@__PURE__*/ nodeProxy( StorageArrayElementNode );
|
|
143
|
+
export const storageElement = /*@__PURE__*/ nodeProxy( StorageArrayElementNode ).setParameterLength( 2 );
|
|
@@ -46,7 +46,7 @@ class TriplanarTexturesNode extends Node {
|
|
|
46
46
|
/**
|
|
47
47
|
* Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
48
48
|
*
|
|
49
|
-
* @type {Node}
|
|
49
|
+
* @type {?Node}
|
|
50
50
|
* @default null
|
|
51
51
|
*/
|
|
52
52
|
this.textureYNode = textureYNode;
|
|
@@ -54,7 +54,7 @@ class TriplanarTexturesNode extends Node {
|
|
|
54
54
|
/**
|
|
55
55
|
* Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
56
56
|
*
|
|
57
|
-
* @type {Node}
|
|
57
|
+
* @type {?Node}
|
|
58
58
|
* @default null
|
|
59
59
|
*/
|
|
60
60
|
this.textureZNode = textureZNode;
|
|
@@ -130,7 +130,7 @@ export default TriplanarTexturesNode;
|
|
|
130
130
|
* @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
|
|
131
131
|
* @returns {TriplanarTexturesNode}
|
|
132
132
|
*/
|
|
133
|
-
export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode );
|
|
133
|
+
export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode ).setParameterLength( 1, 6 );
|
|
134
134
|
|
|
135
135
|
/**
|
|
136
136
|
* TSL function for creating a triplanar textures node.
|
|
@@ -446,7 +446,7 @@ class BatchedMesh extends Mesh {
|
|
|
446
446
|
/**
|
|
447
447
|
* Validates the instance defined by the given ID.
|
|
448
448
|
*
|
|
449
|
-
* @param {number} instanceId - The
|
|
449
|
+
* @param {number} instanceId - The instance to validate.
|
|
450
450
|
*/
|
|
451
451
|
validateInstanceId( instanceId ) {
|
|
452
452
|
|
|
@@ -462,7 +462,7 @@ class BatchedMesh extends Mesh {
|
|
|
462
462
|
/**
|
|
463
463
|
* Validates the geometry defined by the given ID.
|
|
464
464
|
*
|
|
465
|
-
* @param {number} geometryId - The
|
|
465
|
+
* @param {number} geometryId - The geometry to validate.
|
|
466
466
|
*/
|
|
467
467
|
validateGeometryId( geometryId ) {
|
|
468
468
|
|
|
@@ -705,7 +705,7 @@ class BatchedMesh extends Mesh {
|
|
|
705
705
|
* is not enough space reserved for geometry. Calling this will change all instances that are
|
|
706
706
|
* rendering that geometry.
|
|
707
707
|
*
|
|
708
|
-
* @param {number} geometryId - The ID of the
|
|
708
|
+
* @param {number} geometryId - The ID of the geometry that should be replaced with the given geometry.
|
|
709
709
|
* @param {BufferGeometry} geometry - The new geometry.
|
|
710
710
|
* @return {number} The geometry ID.
|
|
711
711
|
*/
|
|
@@ -818,7 +818,7 @@ class BatchedMesh extends Mesh {
|
|
|
818
818
|
* Deletes the geometry defined by the given ID from this batch. Any instances referencing
|
|
819
819
|
* this geometry will also be removed as a side effect.
|
|
820
820
|
*
|
|
821
|
-
* @param {number} geometryId - The ID of the
|
|
821
|
+
* @param {number} geometryId - The ID of the geometry to remove from the batch.
|
|
822
822
|
* @return {BatchedMesh} A reference to this batched mesh.
|
|
823
823
|
*/
|
|
824
824
|
deleteGeometry( geometryId ) {
|
|
@@ -71,7 +71,7 @@ class InstancedMesh extends Mesh {
|
|
|
71
71
|
* {@link Texture#needsUpdate} flag to true if you modify instanced data
|
|
72
72
|
* via {@link InstancedMesh#setMorphAt}.
|
|
73
73
|
*
|
|
74
|
-
* @type {?
|
|
74
|
+
* @type {?DataTexture}
|
|
75
75
|
* @default null
|
|
76
76
|
*/
|
|
77
77
|
this.morphTexture = null;
|
|
@@ -321,7 +321,7 @@ class InstancedMesh extends Mesh {
|
|
|
321
321
|
* {@link InstancedMesh#instanceMatrix} to `true` after updating all the colors.
|
|
322
322
|
*
|
|
323
323
|
* @param {number} index - The instance index.
|
|
324
|
-
* @param {Matrix4} matrix - The
|
|
324
|
+
* @param {Matrix4} matrix - The local transformation.
|
|
325
325
|
*/
|
|
326
326
|
setMatrixAt( index, matrix ) {
|
|
327
327
|
|
package/src/objects/LOD.js
CHANGED
|
@@ -245,7 +245,7 @@ class LOD extends Object3D {
|
|
|
245
245
|
* Updates the LOD by computing which LOD level should be visible according
|
|
246
246
|
* to the current distance of the given camera.
|
|
247
247
|
*
|
|
248
|
-
* @param {Camera} camera - The camera the scene is
|
|
248
|
+
* @param {Camera} camera - The camera the scene is rendered with.
|
|
249
249
|
*/
|
|
250
250
|
update( camera ) {
|
|
251
251
|
|
package/src/objects/Skeleton.js
CHANGED
|
@@ -310,7 +310,7 @@ class Skeleton {
|
|
|
310
310
|
* Setups the skeleton by the given JSON and bones.
|
|
311
311
|
*
|
|
312
312
|
* @param {Object} json - The skeleton as serialized JSON.
|
|
313
|
-
* @param {
|
|
313
|
+
* @param {Object<string, Bone>} bones - An array of bones.
|
|
314
314
|
* @return {Skeleton} A reference of this instance.
|
|
315
315
|
*/
|
|
316
316
|
fromJSON( json, bones ) {
|