@plastic-software/three 0.175.13 → 0.178.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/README.md +3 -3
- package/build/three.cjs +7747 -6792
- package/build/three.core.js +7371 -6576
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +190 -30
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +19 -11
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +4989 -2235
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +5082 -2469
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -1
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +18 -4
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +49 -35
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +12 -10
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +2 -1
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +7 -0
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +1 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +1 -0
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +1 -0
- package/examples/jsm/loaders/USDZLoader.js +1 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/Timer.js +2 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +1 -0
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +20 -17
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +139 -12
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +4 -3
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +5 -2
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +1 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +1 -1
- package/src/Three.TSL.js +18 -10
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/SkeletonHelper.js +1 -1
- package/src/lights/LightShadow.js +14 -0
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +2 -2
- package/src/loaders/ImageBitmapLoader.js +25 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +105 -19
- package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +6 -1
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +2 -3
- package/src/nodes/TSL.js +5 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +31 -4
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +102 -16
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +14 -3
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +59 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +69 -20
- package/src/nodes/core/NodeBuilder.js +248 -29
- package/src/nodes/core/NodeUtils.js +42 -0
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +129 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/VarNode.js +11 -2
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +18 -19
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +14 -14
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +78 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/lib/mx_noise.js +1 -1
- package/src/nodes/math/ConditionalNode.js +0 -19
- package/src/nodes/math/MathNode.js +68 -21
- package/src/nodes/math/OperatorNode.js +108 -98
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +160 -65
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +13 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +16 -4
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +25 -11
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Storage3DTexture.js +79 -0
- package/src/renderers/common/StorageArrayTexture.js +63 -0
- package/src/renderers/common/Textures.js +15 -21
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +157 -27
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLPrograms.js +4 -2
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +144 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +451 -128
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +2 -1
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/Source.js +22 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +1 -1
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
package/src/nodes/tsl/TSLCore.js
CHANGED
|
@@ -85,7 +85,7 @@ const shaderNodeHandler = {
|
|
|
85
85
|
|
|
86
86
|
prop = parseSwizzleAndSort( prop.slice( 3 ).toLowerCase() );
|
|
87
87
|
|
|
88
|
-
return ( value ) => nodeObject( new SetNode( node, prop, value ) );
|
|
88
|
+
return ( value ) => nodeObject( new SetNode( node, prop, nodeObject( value ) ) );
|
|
89
89
|
|
|
90
90
|
} else if ( /^flip[XYZWRGBASTPQ]{1,4}$/.test( prop ) === true ) {
|
|
91
91
|
|
|
@@ -175,7 +175,7 @@ const ShaderNodeObject = function ( obj, altType = null ) {
|
|
|
175
175
|
|
|
176
176
|
} else if ( type === 'shader' ) {
|
|
177
177
|
|
|
178
|
-
return Fn( obj );
|
|
178
|
+
return obj.isFn ? obj : Fn( obj );
|
|
179
179
|
|
|
180
180
|
}
|
|
181
181
|
|
|
@@ -304,6 +304,8 @@ class ShaderCallNodeInternal extends Node {
|
|
|
304
304
|
this.shaderNode = shaderNode;
|
|
305
305
|
this.inputNodes = inputNodes;
|
|
306
306
|
|
|
307
|
+
this.isShaderCallNodeInternal = true;
|
|
308
|
+
|
|
307
309
|
}
|
|
308
310
|
|
|
309
311
|
getNodeType( builder ) {
|
|
@@ -323,10 +325,22 @@ class ShaderCallNodeInternal extends Node {
|
|
|
323
325
|
const { shaderNode, inputNodes } = this;
|
|
324
326
|
|
|
325
327
|
const properties = builder.getNodeProperties( shaderNode );
|
|
326
|
-
|
|
328
|
+
|
|
329
|
+
const subBuild = builder.getClosestSubBuild( shaderNode.subBuilds ) || '';
|
|
330
|
+
const subBuildProperty = subBuild || 'default';
|
|
331
|
+
|
|
332
|
+
if ( properties[ subBuildProperty ] ) {
|
|
333
|
+
|
|
334
|
+
return properties[ subBuildProperty ];
|
|
335
|
+
|
|
336
|
+
}
|
|
327
337
|
|
|
328
338
|
//
|
|
329
339
|
|
|
340
|
+
const previousSubBuildFn = builder.subBuildFn;
|
|
341
|
+
|
|
342
|
+
builder.subBuildFn = subBuild;
|
|
343
|
+
|
|
330
344
|
let result = null;
|
|
331
345
|
|
|
332
346
|
if ( shaderNode.layout ) {
|
|
@@ -364,9 +378,11 @@ class ShaderCallNodeInternal extends Node {
|
|
|
364
378
|
|
|
365
379
|
}
|
|
366
380
|
|
|
381
|
+
builder.subBuildFn = previousSubBuildFn;
|
|
382
|
+
|
|
367
383
|
if ( shaderNode.once ) {
|
|
368
384
|
|
|
369
|
-
properties
|
|
385
|
+
properties[ subBuildProperty ] = result;
|
|
370
386
|
|
|
371
387
|
}
|
|
372
388
|
|
|
@@ -374,41 +390,86 @@ class ShaderCallNodeInternal extends Node {
|
|
|
374
390
|
|
|
375
391
|
}
|
|
376
392
|
|
|
393
|
+
setupOutput( builder ) {
|
|
394
|
+
|
|
395
|
+
builder.addStack();
|
|
396
|
+
|
|
397
|
+
builder.stack.outputNode = this.call( builder );
|
|
398
|
+
|
|
399
|
+
return builder.removeStack();
|
|
400
|
+
|
|
401
|
+
}
|
|
402
|
+
|
|
377
403
|
getOutputNode( builder ) {
|
|
378
404
|
|
|
379
405
|
const properties = builder.getNodeProperties( this );
|
|
406
|
+
const subBuildOutput = builder.getSubBuildOutput( this );
|
|
380
407
|
|
|
381
|
-
|
|
408
|
+
properties[ subBuildOutput ] = properties[ subBuildOutput ] || this.setupOutput( builder );
|
|
409
|
+
properties[ subBuildOutput ].subBuild = builder.getClosestSubBuild( this );
|
|
382
410
|
|
|
383
|
-
|
|
411
|
+
return properties[ subBuildOutput ];
|
|
384
412
|
|
|
385
|
-
|
|
413
|
+
}
|
|
386
414
|
|
|
387
|
-
|
|
415
|
+
build( builder, output = null ) {
|
|
388
416
|
|
|
389
|
-
|
|
417
|
+
let result = null;
|
|
390
418
|
|
|
391
|
-
|
|
419
|
+
const buildStage = builder.getBuildStage();
|
|
420
|
+
const properties = builder.getNodeProperties( this );
|
|
392
421
|
|
|
393
|
-
|
|
422
|
+
const subBuildOutput = builder.getSubBuildOutput( this );
|
|
423
|
+
const outputNode = this.getOutputNode( builder );
|
|
394
424
|
|
|
395
|
-
|
|
425
|
+
if ( buildStage === 'setup' ) {
|
|
396
426
|
|
|
397
|
-
|
|
427
|
+
const subBuildInitialized = builder.getSubBuildProperty( 'initialized', this );
|
|
398
428
|
|
|
399
|
-
|
|
429
|
+
if ( properties[ subBuildInitialized ] !== true ) {
|
|
400
430
|
|
|
401
|
-
|
|
431
|
+
properties[ subBuildInitialized ] = true;
|
|
402
432
|
|
|
403
|
-
|
|
433
|
+
properties[ subBuildOutput ] = this.getOutputNode( builder );
|
|
434
|
+
properties[ subBuildOutput ].build( builder );
|
|
404
435
|
|
|
405
|
-
|
|
436
|
+
// If the shaderNode has subBuilds, add them to the chaining nodes
|
|
437
|
+
// so they can be built later in the build process.
|
|
406
438
|
|
|
407
|
-
|
|
439
|
+
if ( this.shaderNode.subBuilds ) {
|
|
408
440
|
|
|
409
|
-
|
|
441
|
+
for ( const node of builder.chaining ) {
|
|
442
|
+
|
|
443
|
+
const nodeData = builder.getDataFromNode( node, 'any' );
|
|
444
|
+
nodeData.subBuilds = nodeData.subBuilds || new Set();
|
|
445
|
+
|
|
446
|
+
for ( const subBuild of this.shaderNode.subBuilds ) {
|
|
447
|
+
|
|
448
|
+
nodeData.subBuilds.add( subBuild );
|
|
449
|
+
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
//builder.getDataFromNode( node ).subBuilds = nodeData.subBuilds;
|
|
453
|
+
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
result = properties[ subBuildOutput ];
|
|
410
461
|
|
|
411
|
-
|
|
462
|
+
} else if ( buildStage === 'analyze' ) {
|
|
463
|
+
|
|
464
|
+
outputNode.build( builder, output );
|
|
465
|
+
|
|
466
|
+
} else if ( buildStage === 'generate' ) {
|
|
467
|
+
|
|
468
|
+
result = outputNode.build( builder, output ) || '';
|
|
469
|
+
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
return result;
|
|
412
473
|
|
|
413
474
|
}
|
|
414
475
|
|
|
@@ -493,20 +554,6 @@ const getConstNode = ( value, type ) => {
|
|
|
493
554
|
|
|
494
555
|
};
|
|
495
556
|
|
|
496
|
-
const safeGetNodeType = ( node ) => {
|
|
497
|
-
|
|
498
|
-
try {
|
|
499
|
-
|
|
500
|
-
return node.getNodeType();
|
|
501
|
-
|
|
502
|
-
} catch ( _ ) {
|
|
503
|
-
|
|
504
|
-
return undefined;
|
|
505
|
-
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
};
|
|
509
|
-
|
|
510
557
|
const ConvertType = function ( type, cacheMap = null ) {
|
|
511
558
|
|
|
512
559
|
return ( ...params ) => {
|
|
@@ -526,7 +573,7 @@ const ConvertType = function ( type, cacheMap = null ) {
|
|
|
526
573
|
if ( params.length === 1 ) {
|
|
527
574
|
|
|
528
575
|
const node = getConstNode( params[ 0 ], type );
|
|
529
|
-
if (
|
|
576
|
+
if ( node.nodeType === type ) return nodeObject( node );
|
|
530
577
|
return nodeObject( new ConvertNode( node, type ) );
|
|
531
578
|
|
|
532
579
|
}
|
|
@@ -598,7 +645,9 @@ export const Fn = ( jsFunc, layout = null ) => {
|
|
|
598
645
|
|
|
599
646
|
nodeObjects( params );
|
|
600
647
|
|
|
601
|
-
|
|
648
|
+
const isArrayAsParameter = params[ 0 ] && ( params[ 0 ].isNode || Object.getPrototypeOf( params[ 0 ] ) !== Object.prototype );
|
|
649
|
+
|
|
650
|
+
if ( isArrayAsParameter ) {
|
|
602
651
|
|
|
603
652
|
inputs = [ ...params ];
|
|
604
653
|
|
|
@@ -608,11 +657,21 @@ export const Fn = ( jsFunc, layout = null ) => {
|
|
|
608
657
|
|
|
609
658
|
}
|
|
610
659
|
|
|
611
|
-
|
|
660
|
+
const fnCall = shaderNode.call( inputs );
|
|
661
|
+
|
|
662
|
+
if ( nodeType === 'void' ) fnCall.toStack();
|
|
663
|
+
|
|
664
|
+
return fnCall;
|
|
612
665
|
|
|
613
666
|
};
|
|
614
667
|
|
|
615
668
|
fn.shaderNode = shaderNode;
|
|
669
|
+
fn.id = shaderNode.id;
|
|
670
|
+
|
|
671
|
+
fn.isFn = true;
|
|
672
|
+
|
|
673
|
+
fn.getNodeType = ( ...params ) => shaderNode.getNodeType( ...params );
|
|
674
|
+
fn.getCacheKey = ( ...params ) => shaderNode.getCacheKey( ...params );
|
|
616
675
|
|
|
617
676
|
fn.setLayout = ( layout ) => {
|
|
618
677
|
|
|
@@ -622,9 +681,10 @@ export const Fn = ( jsFunc, layout = null ) => {
|
|
|
622
681
|
|
|
623
682
|
};
|
|
624
683
|
|
|
625
|
-
fn.once = () => {
|
|
684
|
+
fn.once = ( subBuilds = null ) => {
|
|
626
685
|
|
|
627
686
|
shaderNode.once = true;
|
|
687
|
+
shaderNode.subBuilds = subBuilds;
|
|
628
688
|
|
|
629
689
|
return fn;
|
|
630
690
|
|
|
@@ -663,31 +723,6 @@ export const Fn = ( jsFunc, layout = null ) => {
|
|
|
663
723
|
|
|
664
724
|
};
|
|
665
725
|
|
|
666
|
-
/**
|
|
667
|
-
* @tsl
|
|
668
|
-
* @function
|
|
669
|
-
* @deprecated since r168. Use {@link Fn} instead.
|
|
670
|
-
*
|
|
671
|
-
* @param {...any} params
|
|
672
|
-
* @returns {Function}
|
|
673
|
-
*/
|
|
674
|
-
export const tslFn = ( ...params ) => { // @deprecated, r168
|
|
675
|
-
|
|
676
|
-
console.warn( 'THREE.TSL: tslFn() has been renamed to Fn().' );
|
|
677
|
-
return Fn( ...params );
|
|
678
|
-
|
|
679
|
-
};
|
|
680
|
-
|
|
681
|
-
//
|
|
682
|
-
|
|
683
|
-
addMethodChaining( 'toGlobal', ( node ) => {
|
|
684
|
-
|
|
685
|
-
node.global = true;
|
|
686
|
-
|
|
687
|
-
return node;
|
|
688
|
-
|
|
689
|
-
} );
|
|
690
|
-
|
|
691
726
|
//
|
|
692
727
|
|
|
693
728
|
export const setCurrentStack = ( stack ) => {
|
|
@@ -704,9 +739,44 @@ export const setCurrentStack = ( stack ) => {
|
|
|
704
739
|
|
|
705
740
|
export const getCurrentStack = () => currentStack;
|
|
706
741
|
|
|
742
|
+
/**
|
|
743
|
+
* Represent a conditional node using if/else statements.
|
|
744
|
+
*
|
|
745
|
+
* ```js
|
|
746
|
+
* If( condition, function )
|
|
747
|
+
* .ElseIf( condition, function )
|
|
748
|
+
* .Else( function )
|
|
749
|
+
* ```
|
|
750
|
+
* @tsl
|
|
751
|
+
* @function
|
|
752
|
+
* @param {...any} params - The parameters for the conditional node.
|
|
753
|
+
* @returns {StackNode} The conditional node.
|
|
754
|
+
*/
|
|
707
755
|
export const If = ( ...params ) => currentStack.If( ...params );
|
|
708
756
|
|
|
709
|
-
|
|
757
|
+
/**
|
|
758
|
+
* Represent a conditional node using switch/case statements.
|
|
759
|
+
*
|
|
760
|
+
* ```js
|
|
761
|
+
* Switch( value )
|
|
762
|
+
* .Case( 1, function )
|
|
763
|
+
* .Case( 2, 3, 4, function )
|
|
764
|
+
* .Default( function )
|
|
765
|
+
* ```
|
|
766
|
+
* @tsl
|
|
767
|
+
* @function
|
|
768
|
+
* @param {...any} params - The parameters for the conditional node.
|
|
769
|
+
* @returns {StackNode} The conditional node.
|
|
770
|
+
*/
|
|
771
|
+
export const Switch = ( ...params ) => currentStack.Switch( ...params );
|
|
772
|
+
|
|
773
|
+
/**
|
|
774
|
+
* Add the given node to the current stack.
|
|
775
|
+
*
|
|
776
|
+
* @param {Node} node - The node to add.
|
|
777
|
+
* @returns {Node} The node that was added to the stack.
|
|
778
|
+
*/
|
|
779
|
+
export function Stack( node ) {
|
|
710
780
|
|
|
711
781
|
if ( currentStack ) currentStack.add( node );
|
|
712
782
|
|
|
@@ -714,7 +784,7 @@ export function append( node ) {
|
|
|
714
784
|
|
|
715
785
|
}
|
|
716
786
|
|
|
717
|
-
addMethodChaining( '
|
|
787
|
+
addMethodChaining( 'toStack', Stack );
|
|
718
788
|
|
|
719
789
|
// types
|
|
720
790
|
|
|
@@ -776,3 +846,28 @@ export const split = ( node, channels ) => nodeObject( new SplitNode( nodeObject
|
|
|
776
846
|
|
|
777
847
|
addMethodChaining( 'element', element );
|
|
778
848
|
addMethodChaining( 'convert', convert );
|
|
849
|
+
|
|
850
|
+
// deprecated
|
|
851
|
+
|
|
852
|
+
/**
|
|
853
|
+
* @tsl
|
|
854
|
+
* @function
|
|
855
|
+
* @deprecated since r176. Use {@link Stack} instead.
|
|
856
|
+
*
|
|
857
|
+
* @param {Node} node - The node to add.
|
|
858
|
+
* @returns {Function}
|
|
859
|
+
*/
|
|
860
|
+
export const append = ( node ) => { // @deprecated, r176
|
|
861
|
+
|
|
862
|
+
console.warn( 'THREE.TSL: append() has been renamed to Stack().' );
|
|
863
|
+
return Stack( node );
|
|
864
|
+
|
|
865
|
+
};
|
|
866
|
+
|
|
867
|
+
addMethodChaining( 'append', ( node ) => { // @deprecated, r176
|
|
868
|
+
|
|
869
|
+
console.warn( 'THREE.TSL: .append() has been renamed to .toStack().' );
|
|
870
|
+
return Stack( node );
|
|
871
|
+
|
|
872
|
+
} );
|
|
873
|
+
|
|
@@ -41,15 +41,18 @@ class DebugNode extends TempNode {
|
|
|
41
41
|
const callback = this.callback;
|
|
42
42
|
const snippet = this.node.build( builder );
|
|
43
43
|
|
|
44
|
+
const title = '--- TSL debug - ' + builder.shaderStage + ' shader ---';
|
|
45
|
+
const border = '-'.repeat( title.length );
|
|
46
|
+
|
|
44
47
|
let code = '';
|
|
45
|
-
code += '//
|
|
48
|
+
code += '// #' + title + '#\n';
|
|
46
49
|
code += builder.flow.code.replace( /^\t/mg, '' ) + '\n';
|
|
47
50
|
code += '/* ... */ ' + snippet + ' /* ... */\n';
|
|
48
|
-
code += '//
|
|
51
|
+
code += '// #' + border + '#\n';
|
|
49
52
|
|
|
50
53
|
if ( callback !== null ) {
|
|
51
54
|
|
|
52
|
-
callback( code );
|
|
55
|
+
callback( builder, code );
|
|
53
56
|
|
|
54
57
|
} else {
|
|
55
58
|
|
|
@@ -65,6 +68,15 @@ class DebugNode extends TempNode {
|
|
|
65
68
|
|
|
66
69
|
export default DebugNode;
|
|
67
70
|
|
|
71
|
+
/**
|
|
72
|
+
* TSL function for creating a debug node.
|
|
73
|
+
*
|
|
74
|
+
* @tsl
|
|
75
|
+
* @function
|
|
76
|
+
* @param {Node} node - The node to debug.
|
|
77
|
+
* @param {?Function} [callback=null] - Optional callback function to handle the debug output.
|
|
78
|
+
* @returns {DebugNode}
|
|
79
|
+
*/
|
|
68
80
|
export const debug = ( node, callback = null ) => nodeObject( new DebugNode( nodeObject( node ), callback ) );
|
|
69
81
|
|
|
70
82
|
addMethodChaining( 'debug', debug );
|
|
@@ -10,7 +10,7 @@ import { addMethodChaining } from '../tsl/TSLCore.js';
|
|
|
10
10
|
* @param {?ConditionalNode} conditional - An optional conditional node. It allows to decide whether the discard should be executed or not.
|
|
11
11
|
* @return {Node} The `discard` expression.
|
|
12
12
|
*/
|
|
13
|
-
export const Discard = ( conditional ) => ( conditional ? select( conditional, expression( 'discard' ) ) : expression( 'discard' ) ).
|
|
13
|
+
export const Discard = ( conditional ) => ( conditional ? select( conditional, expression( 'discard' ) ) : expression( 'discard' ) ).toStack();
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Represents a `return` shader operation in TSL.
|
|
@@ -19,6 +19,6 @@ export const Discard = ( conditional ) => ( conditional ? select( conditional, e
|
|
|
19
19
|
* @function
|
|
20
20
|
* @return {ExpressionNode} The `return` expression.
|
|
21
21
|
*/
|
|
22
|
-
export const Return = () => expression( 'return' ).
|
|
22
|
+
export const Return = () => expression( 'return' ).toStack();
|
|
23
23
|
|
|
24
24
|
addMethodChaining( 'discard', Discard );
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { positionWorldDirection } from '../accessors/Position.js';
|
|
2
|
+
import { Fn, vec2 } from '../tsl/TSLBase.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* TSL function for creating an equirect uv node.
|
|
6
|
+
*
|
|
7
|
+
* Can be used to compute texture coordinates for projecting an
|
|
8
|
+
* equirectangular texture onto a mesh for using it as the scene's
|
|
9
|
+
* background.
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* scene.backgroundNode = texture( equirectTexture, equirectUV() );
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @tsl
|
|
16
|
+
* @function
|
|
17
|
+
* @param {?Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
|
|
18
|
+
* @returns {Node<vec2>}
|
|
19
|
+
*/
|
|
20
|
+
export const equirectUV = /*@__PURE__*/ Fn( ( [ dir = positionWorldDirection ] ) => {
|
|
21
|
+
|
|
22
|
+
const u = dir.z.atan( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
|
|
23
|
+
const v = dir.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
|
|
24
|
+
|
|
25
|
+
return vec2( u, v );
|
|
26
|
+
|
|
27
|
+
} );
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { expression } from '../code/ExpressionNode.js';
|
|
3
|
-
import { nodeObject, nodeArray } from '../tsl/TSLBase.js';
|
|
3
|
+
import { nodeObject, nodeArray, Fn } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* This module offers a variety of ways to implement loops in TSL. In it's basic form it's:
|
|
@@ -101,9 +101,17 @@ class LoopNode extends Node {
|
|
|
101
101
|
|
|
102
102
|
const stack = builder.addStack(); // TODO: cache() it
|
|
103
103
|
|
|
104
|
-
properties.returnsNode = this.params[ this.params.length - 1 ]( inputs,
|
|
104
|
+
properties.returnsNode = this.params[ this.params.length - 1 ]( inputs, builder );
|
|
105
105
|
properties.stackNode = stack;
|
|
106
106
|
|
|
107
|
+
const baseParam = this.params[ 0 ];
|
|
108
|
+
|
|
109
|
+
if ( baseParam.isNode !== true && typeof baseParam.update === 'function' ) {
|
|
110
|
+
|
|
111
|
+
properties.updateNode = Fn( this.params[ 0 ].update )( inputs );
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
107
115
|
builder.removeStack();
|
|
108
116
|
|
|
109
117
|
return properties;
|
|
@@ -222,30 +230,69 @@ class LoopNode extends Node {
|
|
|
222
230
|
const startSnippet = internalParam.start;
|
|
223
231
|
const endSnippet = internalParam.end;
|
|
224
232
|
|
|
225
|
-
let
|
|
226
|
-
|
|
227
|
-
|
|
233
|
+
let updateSnippet;
|
|
234
|
+
|
|
235
|
+
const deltaOperator = () => condition.includes( '<' ) ? '+=' : '-=';
|
|
236
|
+
|
|
237
|
+
if ( update !== undefined && update !== null ) {
|
|
238
|
+
|
|
239
|
+
switch ( typeof update ) {
|
|
240
|
+
|
|
241
|
+
case 'function':
|
|
242
|
+
|
|
243
|
+
const flow = builder.flowStagesNode( properties.updateNode, 'void' );
|
|
244
|
+
const snippet = flow.code.replace( /\t|;/g, '' );
|
|
245
|
+
|
|
246
|
+
updateSnippet = snippet;
|
|
247
|
+
|
|
248
|
+
break;
|
|
249
|
+
|
|
250
|
+
case 'number':
|
|
251
|
+
|
|
252
|
+
updateSnippet = name + ' ' + deltaOperator() + ' ' + builder.generateConst( type, update );
|
|
253
|
+
|
|
254
|
+
break;
|
|
255
|
+
|
|
256
|
+
case 'string':
|
|
257
|
+
|
|
258
|
+
updateSnippet = name + ' ' + update;
|
|
259
|
+
|
|
260
|
+
break;
|
|
261
|
+
|
|
262
|
+
default:
|
|
263
|
+
|
|
264
|
+
if ( update.isNode ) {
|
|
228
265
|
|
|
229
|
-
|
|
266
|
+
updateSnippet = name + ' ' + deltaOperator() + ' ' + update.build( builder );
|
|
267
|
+
|
|
268
|
+
} else {
|
|
269
|
+
|
|
270
|
+
console.error( 'THREE.TSL: \'Loop( { update: ... } )\' is not a function, string or number.' );
|
|
271
|
+
|
|
272
|
+
updateSnippet = 'break /* invalid update */';
|
|
273
|
+
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
} else {
|
|
230
279
|
|
|
231
280
|
if ( type === 'int' || type === 'uint' ) {
|
|
232
281
|
|
|
233
|
-
|
|
234
|
-
else update = '--';
|
|
282
|
+
update = condition.includes( '<' ) ? '++' : '--';
|
|
235
283
|
|
|
236
284
|
} else {
|
|
237
285
|
|
|
238
|
-
|
|
239
|
-
else update = '-= 1.';
|
|
286
|
+
update = deltaOperator() + ' 1.';
|
|
240
287
|
|
|
241
288
|
}
|
|
242
289
|
|
|
243
|
-
|
|
290
|
+
updateSnippet = name + ' ' + update;
|
|
244
291
|
|
|
245
|
-
|
|
292
|
+
}
|
|
246
293
|
|
|
247
|
-
|
|
248
|
-
|
|
294
|
+
const declarationSnippet = builder.getVar( type, name ) + ' = ' + startSnippet;
|
|
295
|
+
const conditionalSnippet = name + ' ' + condition + ' ' + endSnippet;
|
|
249
296
|
|
|
250
297
|
loopSnippet = `for ( ${ declarationSnippet }; ${ conditionalSnippet }; ${ updateSnippet } )`;
|
|
251
298
|
|
|
@@ -285,7 +332,7 @@ export default LoopNode;
|
|
|
285
332
|
* @param {...any} params - A list of parameters.
|
|
286
333
|
* @returns {LoopNode}
|
|
287
334
|
*/
|
|
288
|
-
export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) ).
|
|
335
|
+
export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) ).toStack();
|
|
289
336
|
|
|
290
337
|
/**
|
|
291
338
|
* TSL function for creating a `Continue()` expression.
|
|
@@ -294,7 +341,7 @@ export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params
|
|
|
294
341
|
* @function
|
|
295
342
|
* @returns {ExpressionNode}
|
|
296
343
|
*/
|
|
297
|
-
export const Continue = () => expression( 'continue' ).
|
|
344
|
+
export const Continue = () => expression( 'continue' ).toStack();
|
|
298
345
|
|
|
299
346
|
/**
|
|
300
347
|
* TSL function for creating a `Break()` expression.
|
|
@@ -303,21 +350,4 @@ export const Continue = () => expression( 'continue' ).append();
|
|
|
303
350
|
* @function
|
|
304
351
|
* @returns {ExpressionNode}
|
|
305
352
|
*/
|
|
306
|
-
export const Break = () => expression( 'break' ).
|
|
307
|
-
|
|
308
|
-
// Deprecated
|
|
309
|
-
|
|
310
|
-
/**
|
|
311
|
-
* @tsl
|
|
312
|
-
* @function
|
|
313
|
-
* @deprecated since r168. Use {@link Loop} instead.
|
|
314
|
-
*
|
|
315
|
-
* @param {...any} params
|
|
316
|
-
* @returns {LoopNode}
|
|
317
|
-
*/
|
|
318
|
-
export const loop = ( ...params ) => { // @deprecated, r168
|
|
319
|
-
|
|
320
|
-
console.warn( 'THREE.TSL: loop() has been renamed to Loop().' );
|
|
321
|
-
return Loop( ...params );
|
|
322
|
-
|
|
323
|
-
};
|
|
353
|
+
export const Break = () => expression( 'break' ).toStack();
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { normalView } from '../accessors/Normal.js';
|
|
2
|
+
import { positionViewDirection } from '../accessors/Position.js';
|
|
3
|
+
import { Fn, vec2, vec3 } from '../tsl/TSLBase.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* TSL function for creating a matcap uv node.
|
|
7
|
+
*
|
|
8
|
+
* Can be used to compute texture coordinates for projecting a
|
|
9
|
+
* matcap onto a mesh. Used by {@link MeshMatcapNodeMaterial}.
|
|
10
|
+
*
|
|
11
|
+
* @tsl
|
|
12
|
+
* @function
|
|
13
|
+
* @returns {Node<vec2>} The matcap UV coordinates.
|
|
14
|
+
*/
|
|
15
|
+
export const matcapUV = /*@__PURE__*/ Fn( () => {
|
|
16
|
+
|
|
17
|
+
const x = vec3( positionViewDirection.z, 0, positionViewDirection.x.negate() ).normalize();
|
|
18
|
+
const y = positionViewDirection.cross( x );
|
|
19
|
+
|
|
20
|
+
return vec2( x.dot( normalView ), y.dot( normalView ) ).mul( 0.495 ).add( 0.5 ); // 0.495 to remove artifacts caused by undersized matcap disks
|
|
21
|
+
|
|
22
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] )().toVar( 'matcapUV' );
|
|
@@ -131,7 +131,7 @@ class RTTNode extends TextureNode {
|
|
|
131
131
|
* @readonly
|
|
132
132
|
* @default true
|
|
133
133
|
*/
|
|
134
|
-
get
|
|
134
|
+
get autoResize() {
|
|
135
135
|
|
|
136
136
|
return this.width === null;
|
|
137
137
|
|
|
@@ -188,13 +188,21 @@ class RTTNode extends TextureNode {
|
|
|
188
188
|
|
|
189
189
|
//
|
|
190
190
|
|
|
191
|
-
if ( this.
|
|
192
|
-
|
|
193
|
-
this.pixelRatio = renderer.getPixelRatio();
|
|
191
|
+
if ( this.autoResize === true ) {
|
|
194
192
|
|
|
193
|
+
const pixelRatio = renderer.getPixelRatio();
|
|
195
194
|
const size = renderer.getSize( _size );
|
|
196
195
|
|
|
197
|
-
|
|
196
|
+
const effectiveWidth = size.width * pixelRatio;
|
|
197
|
+
const effectiveHeight = size.height * pixelRatio;
|
|
198
|
+
|
|
199
|
+
if ( effectiveWidth !== this.renderTarget.width || effectiveHeight !== this.renderTarget.height ) {
|
|
200
|
+
|
|
201
|
+
this.renderTarget.setSize( effectiveWidth, effectiveHeight );
|
|
202
|
+
|
|
203
|
+
this.textureNeedsUpdate = true;
|
|
204
|
+
|
|
205
|
+
}
|
|
198
206
|
|
|
199
207
|
}
|
|
200
208
|
|