@plastic-software/three 0.175.14 → 0.179.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 +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- 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 +2 -1
- 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 +22 -8
- 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 +57 -38
- 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 +679 -300
- 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 +48 -8
- 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 +11 -2
- 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/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- 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 +211 -22
- 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 +213 -30
- 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 +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- 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/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- 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/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 +4 -3
- 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 +22 -19
- 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 +149 -13
- 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 +14 -12
- 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 +22 -19
- 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 +12 -10
- 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 +15 -3
- 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 +227 -88
- 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 +9 -7
- 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 +9 -36
- 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 → TRAANode.js} +184 -174
- 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 +5 -4
- 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 +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -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/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -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/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- 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 +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- 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/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- 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 +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- 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 +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- 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 +110 -24
- 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 +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- 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 +71 -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/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- 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 +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- 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 +16 -16
- 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 +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- 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 +91 -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/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -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 +20 -6
- 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 +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- 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 +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- 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 +505 -143
- 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 +129 -96
- 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 +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- 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
|
@@ -61,6 +61,10 @@ const shaderNodeHandler = {
|
|
|
61
61
|
|
|
62
62
|
return node.isStackNode ? ( ...params ) => nodeObj.add( nodeElement( ...params ) ) : ( ...params ) => nodeElement( nodeObj, ...params );
|
|
63
63
|
|
|
64
|
+
} else if ( prop === 'toVarIntent' ) {
|
|
65
|
+
|
|
66
|
+
return () => nodeObj;
|
|
67
|
+
|
|
64
68
|
} else if ( prop === 'self' ) {
|
|
65
69
|
|
|
66
70
|
return node;
|
|
@@ -85,7 +89,7 @@ const shaderNodeHandler = {
|
|
|
85
89
|
|
|
86
90
|
prop = parseSwizzleAndSort( prop.slice( 3 ).toLowerCase() );
|
|
87
91
|
|
|
88
|
-
return ( value ) => nodeObject( new SetNode( node, prop, value ) );
|
|
92
|
+
return ( value ) => nodeObject( new SetNode( node, prop, nodeObject( value ) ) );
|
|
89
93
|
|
|
90
94
|
} else if ( /^flip[XYZWRGBASTPQ]{1,4}$/.test( prop ) === true ) {
|
|
91
95
|
|
|
@@ -175,7 +179,7 @@ const ShaderNodeObject = function ( obj, altType = null ) {
|
|
|
175
179
|
|
|
176
180
|
} else if ( type === 'shader' ) {
|
|
177
181
|
|
|
178
|
-
return Fn( obj );
|
|
182
|
+
return obj.isFn ? obj : Fn( obj );
|
|
179
183
|
|
|
180
184
|
}
|
|
181
185
|
|
|
@@ -211,7 +215,28 @@ const ShaderNodeArray = function ( array, altType = null ) {
|
|
|
211
215
|
|
|
212
216
|
const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, settings = null ) {
|
|
213
217
|
|
|
214
|
-
|
|
218
|
+
function assignNode( node ) {
|
|
219
|
+
|
|
220
|
+
if ( settings !== null ) {
|
|
221
|
+
|
|
222
|
+
node = nodeObject( Object.assign( node, settings ) );
|
|
223
|
+
|
|
224
|
+
if ( settings.intent === true ) {
|
|
225
|
+
|
|
226
|
+
node = node.toVarIntent();
|
|
227
|
+
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
} else {
|
|
231
|
+
|
|
232
|
+
node = nodeObject( node );
|
|
233
|
+
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return node;
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
}
|
|
215
240
|
|
|
216
241
|
let fn, name = scope, minParams, maxParams;
|
|
217
242
|
|
|
@@ -304,6 +329,8 @@ class ShaderCallNodeInternal extends Node {
|
|
|
304
329
|
this.shaderNode = shaderNode;
|
|
305
330
|
this.inputNodes = inputNodes;
|
|
306
331
|
|
|
332
|
+
this.isShaderCallNodeInternal = true;
|
|
333
|
+
|
|
307
334
|
}
|
|
308
335
|
|
|
309
336
|
getNodeType( builder ) {
|
|
@@ -323,10 +350,22 @@ class ShaderCallNodeInternal extends Node {
|
|
|
323
350
|
const { shaderNode, inputNodes } = this;
|
|
324
351
|
|
|
325
352
|
const properties = builder.getNodeProperties( shaderNode );
|
|
326
|
-
|
|
353
|
+
|
|
354
|
+
const subBuild = builder.getClosestSubBuild( shaderNode.subBuilds ) || '';
|
|
355
|
+
const subBuildProperty = subBuild || 'default';
|
|
356
|
+
|
|
357
|
+
if ( properties[ subBuildProperty ] ) {
|
|
358
|
+
|
|
359
|
+
return properties[ subBuildProperty ];
|
|
360
|
+
|
|
361
|
+
}
|
|
327
362
|
|
|
328
363
|
//
|
|
329
364
|
|
|
365
|
+
const previousSubBuildFn = builder.subBuildFn;
|
|
366
|
+
|
|
367
|
+
builder.subBuildFn = subBuild;
|
|
368
|
+
|
|
330
369
|
let result = null;
|
|
331
370
|
|
|
332
371
|
if ( shaderNode.layout ) {
|
|
@@ -357,16 +396,46 @@ class ShaderCallNodeInternal extends Node {
|
|
|
357
396
|
|
|
358
397
|
} else {
|
|
359
398
|
|
|
399
|
+
let inputs = inputNodes;
|
|
400
|
+
|
|
401
|
+
if ( Array.isArray( inputs ) ) {
|
|
402
|
+
|
|
403
|
+
// If inputs is an array, we need to convert it to a Proxy
|
|
404
|
+
// so we can call TSL functions using the syntax `Fn( ( { r, g, b } ) => { ... } )`
|
|
405
|
+
// and call through `fn( 0, 1, 0 )` or `fn( { r: 0, g: 1, b: 0 } )`
|
|
406
|
+
|
|
407
|
+
let index = 0;
|
|
408
|
+
|
|
409
|
+
inputs = new Proxy( inputs, {
|
|
410
|
+
get: ( target, property, receiver ) => {
|
|
411
|
+
|
|
412
|
+
if ( target[ property ] === undefined ) {
|
|
413
|
+
|
|
414
|
+
return target[ index ++ ];
|
|
415
|
+
|
|
416
|
+
} else {
|
|
417
|
+
|
|
418
|
+
return Reflect.get( target, property, receiver );
|
|
419
|
+
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
}
|
|
423
|
+
} );
|
|
424
|
+
|
|
425
|
+
}
|
|
426
|
+
|
|
360
427
|
const jsFunc = shaderNode.jsFunc;
|
|
361
|
-
const outputNode =
|
|
428
|
+
const outputNode = inputs !== null || jsFunc.length > 1 ? jsFunc( inputs || [], builder ) : jsFunc( builder );
|
|
362
429
|
|
|
363
430
|
result = nodeObject( outputNode );
|
|
364
431
|
|
|
365
432
|
}
|
|
366
433
|
|
|
434
|
+
builder.subBuildFn = previousSubBuildFn;
|
|
435
|
+
|
|
367
436
|
if ( shaderNode.once ) {
|
|
368
437
|
|
|
369
|
-
properties
|
|
438
|
+
properties[ subBuildProperty ] = result;
|
|
370
439
|
|
|
371
440
|
}
|
|
372
441
|
|
|
@@ -374,41 +443,86 @@ class ShaderCallNodeInternal extends Node {
|
|
|
374
443
|
|
|
375
444
|
}
|
|
376
445
|
|
|
446
|
+
setupOutput( builder ) {
|
|
447
|
+
|
|
448
|
+
builder.addStack();
|
|
449
|
+
|
|
450
|
+
builder.stack.outputNode = this.call( builder );
|
|
451
|
+
|
|
452
|
+
return builder.removeStack();
|
|
453
|
+
|
|
454
|
+
}
|
|
455
|
+
|
|
377
456
|
getOutputNode( builder ) {
|
|
378
457
|
|
|
379
458
|
const properties = builder.getNodeProperties( this );
|
|
459
|
+
const subBuildOutput = builder.getSubBuildOutput( this );
|
|
380
460
|
|
|
381
|
-
|
|
461
|
+
properties[ subBuildOutput ] = properties[ subBuildOutput ] || this.setupOutput( builder );
|
|
462
|
+
properties[ subBuildOutput ].subBuild = builder.getClosestSubBuild( this );
|
|
382
463
|
|
|
383
|
-
|
|
464
|
+
return properties[ subBuildOutput ];
|
|
384
465
|
|
|
385
|
-
|
|
466
|
+
}
|
|
386
467
|
|
|
387
|
-
|
|
468
|
+
build( builder, output = null ) {
|
|
388
469
|
|
|
389
|
-
|
|
470
|
+
let result = null;
|
|
390
471
|
|
|
391
|
-
|
|
472
|
+
const buildStage = builder.getBuildStage();
|
|
473
|
+
const properties = builder.getNodeProperties( this );
|
|
392
474
|
|
|
393
|
-
|
|
475
|
+
const subBuildOutput = builder.getSubBuildOutput( this );
|
|
476
|
+
const outputNode = this.getOutputNode( builder );
|
|
394
477
|
|
|
395
|
-
|
|
478
|
+
if ( buildStage === 'setup' ) {
|
|
396
479
|
|
|
397
|
-
|
|
480
|
+
const subBuildInitialized = builder.getSubBuildProperty( 'initialized', this );
|
|
398
481
|
|
|
399
|
-
|
|
482
|
+
if ( properties[ subBuildInitialized ] !== true ) {
|
|
400
483
|
|
|
401
|
-
|
|
484
|
+
properties[ subBuildInitialized ] = true;
|
|
402
485
|
|
|
403
|
-
|
|
486
|
+
properties[ subBuildOutput ] = this.getOutputNode( builder );
|
|
487
|
+
properties[ subBuildOutput ].build( builder );
|
|
404
488
|
|
|
405
|
-
|
|
489
|
+
// If the shaderNode has subBuilds, add them to the chaining nodes
|
|
490
|
+
// so they can be built later in the build process.
|
|
406
491
|
|
|
407
|
-
|
|
492
|
+
if ( this.shaderNode.subBuilds ) {
|
|
408
493
|
|
|
409
|
-
|
|
494
|
+
for ( const node of builder.chaining ) {
|
|
495
|
+
|
|
496
|
+
const nodeData = builder.getDataFromNode( node, 'any' );
|
|
497
|
+
nodeData.subBuilds = nodeData.subBuilds || new Set();
|
|
498
|
+
|
|
499
|
+
for ( const subBuild of this.shaderNode.subBuilds ) {
|
|
500
|
+
|
|
501
|
+
nodeData.subBuilds.add( subBuild );
|
|
502
|
+
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
//builder.getDataFromNode( node ).subBuilds = nodeData.subBuilds;
|
|
506
|
+
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
result = properties[ subBuildOutput ];
|
|
514
|
+
|
|
515
|
+
} else if ( buildStage === 'analyze' ) {
|
|
516
|
+
|
|
517
|
+
outputNode.build( builder, output );
|
|
518
|
+
|
|
519
|
+
} else if ( buildStage === 'generate' ) {
|
|
410
520
|
|
|
411
|
-
|
|
521
|
+
result = outputNode.build( builder, output ) || '';
|
|
522
|
+
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
return result;
|
|
412
526
|
|
|
413
527
|
}
|
|
414
528
|
|
|
@@ -493,20 +607,6 @@ const getConstNode = ( value, type ) => {
|
|
|
493
607
|
|
|
494
608
|
};
|
|
495
609
|
|
|
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
610
|
const ConvertType = function ( type, cacheMap = null ) {
|
|
511
611
|
|
|
512
612
|
return ( ...params ) => {
|
|
@@ -519,20 +619,20 @@ const ConvertType = function ( type, cacheMap = null ) {
|
|
|
519
619
|
|
|
520
620
|
if ( params.length === 1 && cacheMap !== null && cacheMap.has( params[ 0 ] ) ) {
|
|
521
621
|
|
|
522
|
-
return
|
|
622
|
+
return nodeObjectIntent( cacheMap.get( params[ 0 ] ) );
|
|
523
623
|
|
|
524
624
|
}
|
|
525
625
|
|
|
526
626
|
if ( params.length === 1 ) {
|
|
527
627
|
|
|
528
628
|
const node = getConstNode( params[ 0 ], type );
|
|
529
|
-
if (
|
|
530
|
-
return
|
|
629
|
+
if ( node.nodeType === type ) return nodeObjectIntent( node );
|
|
630
|
+
return nodeObjectIntent( new ConvertNode( node, type ) );
|
|
531
631
|
|
|
532
632
|
}
|
|
533
633
|
|
|
534
634
|
const nodes = params.map( param => getConstNode( param ) );
|
|
535
|
-
return
|
|
635
|
+
return nodeObjectIntent( new JoinNode( nodes, type ) );
|
|
536
636
|
|
|
537
637
|
};
|
|
538
638
|
|
|
@@ -555,10 +655,12 @@ export function ShaderNode( jsFunc, nodeType ) {
|
|
|
555
655
|
}
|
|
556
656
|
|
|
557
657
|
export const nodeObject = ( val, altType = null ) => /* new */ ShaderNodeObject( val, altType );
|
|
658
|
+
export const nodeObjectIntent = ( val, altType = null ) => /* new */ nodeObject( val, altType ).toVarIntent();
|
|
558
659
|
export const nodeObjects = ( val, altType = null ) => new ShaderNodeObjects( val, altType );
|
|
559
660
|
export const nodeArray = ( val, altType = null ) => new ShaderNodeArray( val, altType );
|
|
560
|
-
export const nodeProxy = (
|
|
561
|
-
export const nodeImmutable = ( ...params ) => new ShaderNodeImmutable( ...params );
|
|
661
|
+
export const nodeProxy = ( NodeClass, scope = null, factor = null, settings = null ) => new ShaderNodeProxy( NodeClass, scope, factor, settings );
|
|
662
|
+
export const nodeImmutable = ( NodeClass, ...params ) => new ShaderNodeImmutable( NodeClass, ...params );
|
|
663
|
+
export const nodeProxyIntent = ( NodeClass, scope = null, factor = null, settings = {} ) => new ShaderNodeProxy( NodeClass, scope, factor, { intent: true, ...settings } );
|
|
562
664
|
|
|
563
665
|
let fnId = 0;
|
|
564
666
|
|
|
@@ -598,7 +700,9 @@ export const Fn = ( jsFunc, layout = null ) => {
|
|
|
598
700
|
|
|
599
701
|
nodeObjects( params );
|
|
600
702
|
|
|
601
|
-
|
|
703
|
+
const isArrayAsParameter = params[ 0 ] && ( params[ 0 ].isNode || Object.getPrototypeOf( params[ 0 ] ) !== Object.prototype );
|
|
704
|
+
|
|
705
|
+
if ( isArrayAsParameter ) {
|
|
602
706
|
|
|
603
707
|
inputs = [ ...params ];
|
|
604
708
|
|
|
@@ -608,11 +712,21 @@ export const Fn = ( jsFunc, layout = null ) => {
|
|
|
608
712
|
|
|
609
713
|
}
|
|
610
714
|
|
|
611
|
-
|
|
715
|
+
const fnCall = shaderNode.call( inputs );
|
|
716
|
+
|
|
717
|
+
if ( nodeType === 'void' ) fnCall.toStack();
|
|
718
|
+
|
|
719
|
+
return fnCall.toVarIntent();
|
|
612
720
|
|
|
613
721
|
};
|
|
614
722
|
|
|
615
723
|
fn.shaderNode = shaderNode;
|
|
724
|
+
fn.id = shaderNode.id;
|
|
725
|
+
|
|
726
|
+
fn.isFn = true;
|
|
727
|
+
|
|
728
|
+
fn.getNodeType = ( ...params ) => shaderNode.getNodeType( ...params );
|
|
729
|
+
fn.getCacheKey = ( ...params ) => shaderNode.getCacheKey( ...params );
|
|
616
730
|
|
|
617
731
|
fn.setLayout = ( layout ) => {
|
|
618
732
|
|
|
@@ -622,9 +736,10 @@ export const Fn = ( jsFunc, layout = null ) => {
|
|
|
622
736
|
|
|
623
737
|
};
|
|
624
738
|
|
|
625
|
-
fn.once = () => {
|
|
739
|
+
fn.once = ( subBuilds = null ) => {
|
|
626
740
|
|
|
627
741
|
shaderNode.once = true;
|
|
742
|
+
shaderNode.subBuilds = subBuilds;
|
|
628
743
|
|
|
629
744
|
return fn;
|
|
630
745
|
|
|
@@ -663,31 +778,6 @@ export const Fn = ( jsFunc, layout = null ) => {
|
|
|
663
778
|
|
|
664
779
|
};
|
|
665
780
|
|
|
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
781
|
//
|
|
692
782
|
|
|
693
783
|
export const setCurrentStack = ( stack ) => {
|
|
@@ -704,9 +794,44 @@ export const setCurrentStack = ( stack ) => {
|
|
|
704
794
|
|
|
705
795
|
export const getCurrentStack = () => currentStack;
|
|
706
796
|
|
|
797
|
+
/**
|
|
798
|
+
* Represent a conditional node using if/else statements.
|
|
799
|
+
*
|
|
800
|
+
* ```js
|
|
801
|
+
* If( condition, function )
|
|
802
|
+
* .ElseIf( condition, function )
|
|
803
|
+
* .Else( function )
|
|
804
|
+
* ```
|
|
805
|
+
* @tsl
|
|
806
|
+
* @function
|
|
807
|
+
* @param {...any} params - The parameters for the conditional node.
|
|
808
|
+
* @returns {StackNode} The conditional node.
|
|
809
|
+
*/
|
|
707
810
|
export const If = ( ...params ) => currentStack.If( ...params );
|
|
708
811
|
|
|
709
|
-
|
|
812
|
+
/**
|
|
813
|
+
* Represent a conditional node using switch/case statements.
|
|
814
|
+
*
|
|
815
|
+
* ```js
|
|
816
|
+
* Switch( value )
|
|
817
|
+
* .Case( 1, function )
|
|
818
|
+
* .Case( 2, 3, 4, function )
|
|
819
|
+
* .Default( function )
|
|
820
|
+
* ```
|
|
821
|
+
* @tsl
|
|
822
|
+
* @function
|
|
823
|
+
* @param {...any} params - The parameters for the conditional node.
|
|
824
|
+
* @returns {StackNode} The conditional node.
|
|
825
|
+
*/
|
|
826
|
+
export const Switch = ( ...params ) => currentStack.Switch( ...params );
|
|
827
|
+
|
|
828
|
+
/**
|
|
829
|
+
* Add the given node to the current stack.
|
|
830
|
+
*
|
|
831
|
+
* @param {Node} node - The node to add.
|
|
832
|
+
* @returns {Node} The node that was added to the stack.
|
|
833
|
+
*/
|
|
834
|
+
export function Stack( node ) {
|
|
710
835
|
|
|
711
836
|
if ( currentStack ) currentStack.add( node );
|
|
712
837
|
|
|
@@ -714,7 +839,7 @@ export function append( node ) {
|
|
|
714
839
|
|
|
715
840
|
}
|
|
716
841
|
|
|
717
|
-
addMethodChaining( '
|
|
842
|
+
addMethodChaining( 'toStack', Stack );
|
|
718
843
|
|
|
719
844
|
// types
|
|
720
845
|
|
|
@@ -776,3 +901,28 @@ export const split = ( node, channels ) => nodeObject( new SplitNode( nodeObject
|
|
|
776
901
|
|
|
777
902
|
addMethodChaining( 'element', element );
|
|
778
903
|
addMethodChaining( 'convert', convert );
|
|
904
|
+
|
|
905
|
+
// deprecated
|
|
906
|
+
|
|
907
|
+
/**
|
|
908
|
+
* @tsl
|
|
909
|
+
* @function
|
|
910
|
+
* @deprecated since r176. Use {@link Stack} instead.
|
|
911
|
+
*
|
|
912
|
+
* @param {Node} node - The node to add.
|
|
913
|
+
* @returns {Function}
|
|
914
|
+
*/
|
|
915
|
+
export const append = ( node ) => { // @deprecated, r176
|
|
916
|
+
|
|
917
|
+
console.warn( 'THREE.TSL: append() has been renamed to Stack().' );
|
|
918
|
+
return Stack( node );
|
|
919
|
+
|
|
920
|
+
};
|
|
921
|
+
|
|
922
|
+
addMethodChaining( 'append', ( node ) => { // @deprecated, r176
|
|
923
|
+
|
|
924
|
+
console.warn( 'THREE.TSL: .append() has been renamed to .toStack().' );
|
|
925
|
+
return Stack( node );
|
|
926
|
+
|
|
927
|
+
} );
|
|
928
|
+
|
|
@@ -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
|
|
|
68
|
-
|
|
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
|
+
*/
|
|
80
|
+
export const debug = ( node, callback = null ) => nodeObject( new DebugNode( nodeObject( node ), callback ) ).toStack();
|
|
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
|
+
} );
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
+
import { nodeObject } from '../tsl/TSLCore.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* EventNode is a node that executes a callback during specific update phases.
|
|
7
|
+
*
|
|
8
|
+
* @augments Node
|
|
9
|
+
*/
|
|
10
|
+
class EventNode extends Node {
|
|
11
|
+
|
|
12
|
+
static get type() {
|
|
13
|
+
|
|
14
|
+
return 'EventNode';
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Creates an EventNode.
|
|
20
|
+
*
|
|
21
|
+
* @param {string} eventType - The type of event
|
|
22
|
+
* @param {Function} callback - The callback to execute on update.
|
|
23
|
+
*/
|
|
24
|
+
constructor( eventType, callback ) {
|
|
25
|
+
|
|
26
|
+
super( 'void' );
|
|
27
|
+
|
|
28
|
+
this.eventType = eventType;
|
|
29
|
+
this.callback = callback;
|
|
30
|
+
|
|
31
|
+
if ( eventType === EventNode.OBJECT ) {
|
|
32
|
+
|
|
33
|
+
this.updateType = NodeUpdateType.OBJECT;
|
|
34
|
+
|
|
35
|
+
} else if ( eventType === EventNode.MATERIAL ) {
|
|
36
|
+
|
|
37
|
+
this.updateType = NodeUpdateType.RENDER;
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
update( frame ) {
|
|
44
|
+
|
|
45
|
+
this.callback( frame );
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
EventNode.OBJECT = 'object';
|
|
52
|
+
EventNode.MATERIAL = 'material';
|
|
53
|
+
|
|
54
|
+
export default EventNode;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Helper to create an EventNode and add it to the stack.
|
|
58
|
+
*
|
|
59
|
+
* @param {string} type - The event type.
|
|
60
|
+
* @param {Function} callback - The callback function.
|
|
61
|
+
* @returns {EventNode}
|
|
62
|
+
*/
|
|
63
|
+
const createEvent = ( type, callback ) => nodeObject( new EventNode( type, callback ) ).toStack();
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Creates an event that triggers a function every time an object (Mesh|Sprite) is rendered.
|
|
67
|
+
*
|
|
68
|
+
* The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
|
|
69
|
+
*
|
|
70
|
+
* @param {Function} callback - The callback function.
|
|
71
|
+
* @returns {EventNode}
|
|
72
|
+
*/
|
|
73
|
+
export const OnObjectUpdate = ( callback ) => createEvent( EventNode.OBJECT, callback );
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Creates an event that triggers a function when the first object that uses the material is rendered.
|
|
77
|
+
*
|
|
78
|
+
* The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
|
|
79
|
+
*
|
|
80
|
+
* @param {Function} callback - The callback function.
|
|
81
|
+
* @returns {EventNode}
|
|
82
|
+
*/
|
|
83
|
+
export const OnMaterialUpdate = ( callback ) => createEvent( EventNode.MATERIAL, callback );
|