super-three 0.176.0 → 0.177.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 +7631 -6743
- package/build/three.core.js +7496 -6758
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +172 -22
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +14 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +3948 -1678
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +3941 -1678
- 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 -0
- package/examples/jsm/capabilities/WebGPU.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +14 -3
- 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 +1 -0
- 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 +1 -0
- 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 +5 -4
- 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 +24 -22
- 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 +58 -1
- 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 +5 -6
- 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/GLSLDecoder.js +1 -2
- package/examples/jsm/transpiler/TSLEncoder.js +52 -8
- package/examples/jsm/transpiler/Transpiler.js +2 -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/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 +2 -27
- 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 +3 -2
- 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 +13 -5
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -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 +1 -1
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Object3D.js +22 -21
- 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/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/ImageBitmapLoader.js +21 -5
- 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/NodeMaterial.js +81 -18
- 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/FrustumArray.js +253 -0
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +1 -0
- package/src/nodes/accessors/Bitangent.js +31 -9
- 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 +26 -6
- package/src/nodes/accessors/Object3DNode.js +6 -7
- 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/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +14 -3
- package/src/nodes/accessors/TextureNode.js +59 -8
- 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/CacheNode.js +14 -0
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +68 -19
- package/src/nodes/core/NodeBuilder.js +100 -12
- 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 +127 -2
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/VarNode.js +11 -2
- package/src/nodes/core/VaryingNode.js +40 -21
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/PassNode.js +8 -11
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- 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/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +25 -7
- 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 +172 -240
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/lib/mx_noise.js +1 -1
- package/src/nodes/math/MathNode.js +56 -20
- package/src/nodes/math/OperatorNode.js +109 -82
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLCore.js +140 -49
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/LoopNode.js +64 -17
- package/src/nodes/utils/ReflectorNode.js +67 -4
- 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 +21 -10
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +11 -0
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +12 -1
- package/src/renderers/common/Renderer.js +116 -8
- 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 +154 -25
- package/src/renderers/common/extras/PMREMGenerator.js +29 -22
- 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/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLTextures.js +143 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +170 -34
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -7
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +42 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +442 -127
- 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 +75 -27
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +34 -4
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +44 -49
- 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
|
@@ -9,6 +9,10 @@ import { NodeUpdateType } from '../core/constants.js';
|
|
|
9
9
|
|
|
10
10
|
import { IntType, NearestFilter, UnsignedIntType } from '../../constants.js';
|
|
11
11
|
|
|
12
|
+
import { Texture } from '../../textures/Texture.js';
|
|
13
|
+
|
|
14
|
+
const EmptyTexture = /*@__PURE__*/ new Texture();
|
|
15
|
+
|
|
12
16
|
/**
|
|
13
17
|
* This type of uniform node represents a 2D texture.
|
|
14
18
|
*
|
|
@@ -25,12 +29,12 @@ class TextureNode extends UniformNode {
|
|
|
25
29
|
/**
|
|
26
30
|
* Constructs a new texture node.
|
|
27
31
|
*
|
|
28
|
-
* @param {Texture} value - The texture.
|
|
32
|
+
* @param {Texture} [value=EmptyTexture] - The texture.
|
|
29
33
|
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
30
34
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
31
35
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
32
36
|
*/
|
|
33
|
-
constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
|
|
37
|
+
constructor( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) {
|
|
34
38
|
|
|
35
39
|
super( value );
|
|
36
40
|
|
|
@@ -266,7 +270,7 @@ class TextureNode extends UniformNode {
|
|
|
266
270
|
setUpdateMatrix( value ) {
|
|
267
271
|
|
|
268
272
|
this.updateMatrix = value;
|
|
269
|
-
this.updateType = value ? NodeUpdateType.
|
|
273
|
+
this.updateType = value ? NodeUpdateType.OBJECT : NodeUpdateType.NONE;
|
|
270
274
|
|
|
271
275
|
return this;
|
|
272
276
|
|
|
@@ -328,7 +332,7 @@ class TextureNode extends UniformNode {
|
|
|
328
332
|
|
|
329
333
|
if ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {
|
|
330
334
|
|
|
331
|
-
uvNode = builder.context.getUV( this );
|
|
335
|
+
uvNode = builder.context.getUV( this, builder );
|
|
332
336
|
|
|
333
337
|
}
|
|
334
338
|
|
|
@@ -564,7 +568,7 @@ class TextureNode extends UniformNode {
|
|
|
564
568
|
|
|
565
569
|
const map = textureNode.value;
|
|
566
570
|
|
|
567
|
-
if ( map && map.generateMipmaps === false || map.minFilter === NearestFilter || map.magFilter === NearestFilter ) {
|
|
571
|
+
if ( textureNode.generateMipmaps === false && ( map && map.generateMipmaps === false || map.minFilter === NearestFilter || map.magFilter === NearestFilter ) ) {
|
|
568
572
|
|
|
569
573
|
console.warn( 'THREE.TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture.' );
|
|
570
574
|
|
|
@@ -720,6 +724,9 @@ class TextureNode extends UniformNode {
|
|
|
720
724
|
|
|
721
725
|
const newNode = new this.constructor( this.value, this.uvNode, this.levelNode, this.biasNode );
|
|
722
726
|
newNode.sampler = this.sampler;
|
|
727
|
+
newNode.depthNode = this.depthNode;
|
|
728
|
+
newNode.compareNode = this.compareNode;
|
|
729
|
+
newNode.gradNode = this.gradNode;
|
|
723
730
|
|
|
724
731
|
return newNode;
|
|
725
732
|
|
|
@@ -734,20 +741,64 @@ export default TextureNode;
|
|
|
734
741
|
*
|
|
735
742
|
* @tsl
|
|
736
743
|
* @function
|
|
737
|
-
* @param {Texture} value - The texture.
|
|
744
|
+
* @param {?Texture} value - The texture.
|
|
738
745
|
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
739
746
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
740
747
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
741
748
|
* @returns {TextureNode}
|
|
742
749
|
*/
|
|
743
|
-
|
|
750
|
+
const textureBase = /*@__PURE__*/ nodeProxy( TextureNode ).setParameterLength( 1, 4 ).setName( 'texture' );
|
|
751
|
+
|
|
752
|
+
/**
|
|
753
|
+
* TSL function for creating a texture node or sample a texture node already existing.
|
|
754
|
+
*
|
|
755
|
+
* @tsl
|
|
756
|
+
* @function
|
|
757
|
+
* @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
|
|
758
|
+
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
759
|
+
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
760
|
+
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
761
|
+
* @returns {TextureNode}
|
|
762
|
+
*/
|
|
763
|
+
export const texture = ( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) => {
|
|
764
|
+
|
|
765
|
+
let textureNode;
|
|
766
|
+
|
|
767
|
+
if ( value && value.isTextureNode === true ) {
|
|
768
|
+
|
|
769
|
+
textureNode = nodeObject( value.clone() );
|
|
770
|
+
textureNode.referenceNode = value.getSelf(); // Ensure the reference is set to the original node
|
|
771
|
+
|
|
772
|
+
if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
|
|
773
|
+
if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
|
|
774
|
+
if ( biasNode !== null ) textureNode.biasNode = nodeObject( biasNode );
|
|
775
|
+
|
|
776
|
+
} else {
|
|
777
|
+
|
|
778
|
+
textureNode = textureBase( value, uvNode, levelNode, biasNode );
|
|
779
|
+
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
return textureNode;
|
|
783
|
+
|
|
784
|
+
};
|
|
785
|
+
|
|
786
|
+
/**
|
|
787
|
+
* TSL function for creating a uniform texture node.
|
|
788
|
+
*
|
|
789
|
+
* @tsl
|
|
790
|
+
* @function
|
|
791
|
+
* @param {?Texture} value - The texture.
|
|
792
|
+
* @returns {TextureNode}
|
|
793
|
+
*/
|
|
794
|
+
export const uniformTexture = ( value = EmptyTexture ) => texture( value );
|
|
744
795
|
|
|
745
796
|
/**
|
|
746
797
|
* TSL function for creating a texture node that fetches/loads texels without interpolation.
|
|
747
798
|
*
|
|
748
799
|
* @tsl
|
|
749
800
|
* @function
|
|
750
|
-
* @param {Texture} value - The texture.
|
|
801
|
+
* @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
|
|
751
802
|
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
752
803
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
753
804
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
@@ -18,9 +18,9 @@ class VertexColorNode extends AttributeNode {
|
|
|
18
18
|
/**
|
|
19
19
|
* Constructs a new vertex color node.
|
|
20
20
|
*
|
|
21
|
-
* @param {number}
|
|
21
|
+
* @param {number} index - The attribute index.
|
|
22
22
|
*/
|
|
23
|
-
constructor( index
|
|
23
|
+
constructor( index ) {
|
|
24
24
|
|
|
25
25
|
super( null, 'vec4' );
|
|
26
26
|
|
|
@@ -104,7 +104,7 @@ export default VertexColorNode;
|
|
|
104
104
|
*
|
|
105
105
|
* @tsl
|
|
106
106
|
* @function
|
|
107
|
-
* @param {number} index - The attribute index.
|
|
107
|
+
* @param {number} [index=0] - The attribute index.
|
|
108
108
|
* @returns {VertexColorNode}
|
|
109
109
|
*/
|
|
110
|
-
export const vertexColor = ( index ) => nodeObject( new VertexColorNode( index ) );
|
|
110
|
+
export const vertexColor = ( index = 0 ) => nodeObject( new VertexColorNode( index ) );
|
|
@@ -36,6 +36,14 @@ class CodeNode extends Node {
|
|
|
36
36
|
*/
|
|
37
37
|
this.isCodeNode = true;
|
|
38
38
|
|
|
39
|
+
/**
|
|
40
|
+
* This flag is used for global cache.
|
|
41
|
+
*
|
|
42
|
+
* @type {boolean}
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
this.global = true;
|
|
46
|
+
|
|
39
47
|
/**
|
|
40
48
|
* The native code.
|
|
41
49
|
*
|
|
@@ -62,17 +70,6 @@ class CodeNode extends Node {
|
|
|
62
70
|
|
|
63
71
|
}
|
|
64
72
|
|
|
65
|
-
/**
|
|
66
|
-
* The method is overwritten so it always returns `true`.
|
|
67
|
-
*
|
|
68
|
-
* @return {boolean} Whether this node is global or not.
|
|
69
|
-
*/
|
|
70
|
-
isGlobal() {
|
|
71
|
-
|
|
72
|
-
return true;
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
73
|
/**
|
|
77
74
|
* Sets the includes of this code node.
|
|
78
75
|
*
|
|
@@ -40,6 +40,15 @@ class AssignNode extends TempNode {
|
|
|
40
40
|
*/
|
|
41
41
|
this.sourceNode = sourceNode;
|
|
42
42
|
|
|
43
|
+
/**
|
|
44
|
+
* This flag can be used for type testing.
|
|
45
|
+
*
|
|
46
|
+
* @type {boolean}
|
|
47
|
+
* @readonly
|
|
48
|
+
* @default true
|
|
49
|
+
*/
|
|
50
|
+
this.isAssignNode = true;
|
|
51
|
+
|
|
43
52
|
}
|
|
44
53
|
|
|
45
54
|
/**
|
|
@@ -84,15 +93,25 @@ class AssignNode extends TempNode {
|
|
|
84
93
|
|
|
85
94
|
}
|
|
86
95
|
|
|
87
|
-
|
|
96
|
+
setup( builder ) {
|
|
88
97
|
|
|
89
98
|
const { targetNode, sourceNode } = this;
|
|
90
99
|
|
|
100
|
+
const properties = builder.getNodeProperties( this );
|
|
101
|
+
properties.sourceNode = sourceNode;
|
|
102
|
+
properties.targetNode = targetNode.context( { assign: true } );
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
generate( builder, output ) {
|
|
107
|
+
|
|
108
|
+
const { targetNode, sourceNode } = builder.getNodeProperties( this );
|
|
109
|
+
|
|
91
110
|
const needsSplitAssign = this.needsSplitAssign( builder );
|
|
92
111
|
|
|
93
112
|
const targetType = targetNode.getNodeType( builder );
|
|
94
113
|
|
|
95
|
-
const target = targetNode.
|
|
114
|
+
const target = targetNode.build( builder );
|
|
96
115
|
const source = sourceNode.build( builder, targetType );
|
|
97
116
|
|
|
98
117
|
const sourceType = sourceNode.getNodeType( builder );
|
|
@@ -118,11 +137,14 @@ class AssignNode extends TempNode {
|
|
|
118
137
|
|
|
119
138
|
builder.addLineFlowCode( `${ sourceProperty } = ${ source }`, this );
|
|
120
139
|
|
|
121
|
-
const
|
|
140
|
+
const splitNode = targetNode.node;
|
|
141
|
+
const splitTargetNode = splitNode.node.context( { assign: true } );
|
|
142
|
+
|
|
143
|
+
const targetRoot = splitTargetNode.build( builder );
|
|
122
144
|
|
|
123
|
-
for ( let i = 0; i <
|
|
145
|
+
for ( let i = 0; i < splitNode.components.length; i ++ ) {
|
|
124
146
|
|
|
125
|
-
const component =
|
|
147
|
+
const component = splitNode.components[ i ];
|
|
126
148
|
|
|
127
149
|
builder.addLineFlowCode( `${ targetRoot }.${ component } = ${ sourceProperty }[ ${ i } ]`, this );
|
|
128
150
|
|
|
@@ -161,7 +161,7 @@ export default AttributeNode;
|
|
|
161
161
|
* @tsl
|
|
162
162
|
* @function
|
|
163
163
|
* @param {string} name - The name of the attribute.
|
|
164
|
-
* @param {string} [nodeType] - The node type.
|
|
164
|
+
* @param {?string} [nodeType=null] - The node type.
|
|
165
165
|
* @returns {AttributeNode}
|
|
166
166
|
*/
|
|
167
|
-
export const attribute = ( name, nodeType ) => nodeObject( new AttributeNode( name, nodeType ) );
|
|
167
|
+
export const attribute = ( name, nodeType = null ) => nodeObject( new AttributeNode( name, nodeType ) );
|
|
@@ -97,4 +97,18 @@ export default CacheNode;
|
|
|
97
97
|
*/
|
|
98
98
|
export const cache = ( node, parent ) => nodeObject( new CacheNode( nodeObject( node ), parent ) );
|
|
99
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Assigns a namespace to the given node by updating its context.
|
|
102
|
+
*
|
|
103
|
+
* Important for TSL functions that use `.once( namespace )` to ensure that the namespace will run twice,
|
|
104
|
+
* once when the node is build in the specific namespace and once when the node is built in the others namespace.
|
|
105
|
+
*
|
|
106
|
+
* This is useful for nodes like `positionWorld` that need to be re-updated if used in `material.positionNode` and outside of it in the same material.
|
|
107
|
+
*
|
|
108
|
+
* @param {Object} node - The node to which the namespace will be assigned.
|
|
109
|
+
* @param {string} namespace - The namespace to be assigned to the node.
|
|
110
|
+
* @returns {Object} The updated node with the new namespace in its context.
|
|
111
|
+
*/
|
|
112
|
+
export const namespace = ( node, namespace ) => node.context( { namespace } );
|
|
113
|
+
|
|
100
114
|
addMethodChaining( 'cache', cache );
|
|
@@ -80,8 +80,14 @@ class ContextNode extends Node {
|
|
|
80
80
|
|
|
81
81
|
analyze( builder ) {
|
|
82
82
|
|
|
83
|
+
const previousContext = builder.getContext();
|
|
84
|
+
|
|
85
|
+
builder.setContext( { ...builder.context, ...this.value } );
|
|
86
|
+
|
|
83
87
|
this.node.build( builder );
|
|
84
88
|
|
|
89
|
+
builder.setContext( previousContext );
|
|
90
|
+
|
|
85
91
|
}
|
|
86
92
|
|
|
87
93
|
setup( builder ) {
|
|
@@ -90,12 +96,10 @@ class ContextNode extends Node {
|
|
|
90
96
|
|
|
91
97
|
builder.setContext( { ...builder.context, ...this.value } );
|
|
92
98
|
|
|
93
|
-
|
|
99
|
+
this.node.build( builder );
|
|
94
100
|
|
|
95
101
|
builder.setContext( previousContext );
|
|
96
102
|
|
|
97
|
-
return node;
|
|
98
|
-
|
|
99
103
|
}
|
|
100
104
|
|
|
101
105
|
generate( builder, output ) {
|
package/src/nodes/core/Node.js
CHANGED
|
@@ -4,6 +4,11 @@ import { getNodeChildren, getCacheKey, hash } from './NodeUtils.js';
|
|
|
4
4
|
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
5
5
|
import { MathUtils } from '../../math/MathUtils.js';
|
|
6
6
|
|
|
7
|
+
const _parentBuildStage = {
|
|
8
|
+
analyze: 'setup',
|
|
9
|
+
generate: 'analyze'
|
|
10
|
+
};
|
|
11
|
+
|
|
7
12
|
let _nodeId = 0;
|
|
8
13
|
|
|
9
14
|
/**
|
|
@@ -87,6 +92,14 @@ class Node extends EventDispatcher {
|
|
|
87
92
|
*/
|
|
88
93
|
this.global = false;
|
|
89
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Create a list of parents for this node during the build process.
|
|
97
|
+
*
|
|
98
|
+
* @type {boolean}
|
|
99
|
+
* @default false
|
|
100
|
+
*/
|
|
101
|
+
this.parents = false;
|
|
102
|
+
|
|
90
103
|
/**
|
|
91
104
|
* This flag can be used for type testing.
|
|
92
105
|
*
|
|
@@ -248,7 +261,7 @@ class Node extends EventDispatcher {
|
|
|
248
261
|
/**
|
|
249
262
|
* By default this method returns the value of the {@link Node#global} flag. This method
|
|
250
263
|
* can be overwritten in derived classes if an analytical way is required to determine the
|
|
251
|
-
* global
|
|
264
|
+
* global cache referring to the current shader-stage.
|
|
252
265
|
*
|
|
253
266
|
* @param {NodeBuilder} builder - The current node builder.
|
|
254
267
|
* @return {boolean} Whether this node is global or not.
|
|
@@ -498,11 +511,21 @@ class Node extends EventDispatcher {
|
|
|
498
511
|
* This stage analyzes the node hierarchy and ensures descendent nodes are built.
|
|
499
512
|
*
|
|
500
513
|
* @param {NodeBuilder} builder - The current node builder.
|
|
514
|
+
* @param {?Node} output - The target output node.
|
|
501
515
|
*/
|
|
502
|
-
analyze( builder ) {
|
|
516
|
+
analyze( builder, output = null ) {
|
|
503
517
|
|
|
504
518
|
const usageCount = builder.increaseUsage( this );
|
|
505
519
|
|
|
520
|
+
if ( this.parents === true ) {
|
|
521
|
+
|
|
522
|
+
const nodeData = builder.getDataFromNode( this, 'any' );
|
|
523
|
+
nodeData.stages = nodeData.stages || {};
|
|
524
|
+
nodeData.stages[ builder.shaderStage ] = nodeData.stages[ builder.shaderStage ] || [];
|
|
525
|
+
nodeData.stages[ builder.shaderStage ].push( output );
|
|
526
|
+
|
|
527
|
+
}
|
|
528
|
+
|
|
506
529
|
if ( usageCount === 1 ) {
|
|
507
530
|
|
|
508
531
|
// node flow children
|
|
@@ -513,7 +536,7 @@ class Node extends EventDispatcher {
|
|
|
513
536
|
|
|
514
537
|
if ( childNode && childNode.isNode === true ) {
|
|
515
538
|
|
|
516
|
-
childNode.build( builder );
|
|
539
|
+
childNode.build( builder, this );
|
|
517
540
|
|
|
518
541
|
}
|
|
519
542
|
|
|
@@ -586,12 +609,14 @@ class Node extends EventDispatcher {
|
|
|
586
609
|
}
|
|
587
610
|
|
|
588
611
|
/**
|
|
589
|
-
* This method performs the build of a node. The behavior
|
|
590
|
-
*
|
|
612
|
+
* This method performs the build of a node. The behavior and return value depend on the current build stage:
|
|
613
|
+
* - **setup**: Prepares the node and its children for the build process. This process can also create new nodes. Returns the node itself or a variant.
|
|
614
|
+
* - **analyze**: Analyzes the node hierarchy for optimizations in the code generation stage. Returns `null`.
|
|
615
|
+
* - **generate**: Generates the shader code for the node. Returns the generated shader string.
|
|
591
616
|
*
|
|
592
617
|
* @param {NodeBuilder} builder - The current node builder.
|
|
593
|
-
* @param {
|
|
594
|
-
* @return {
|
|
618
|
+
* @param {string|Node|null} [output=null] - Can be used to define the output type.
|
|
619
|
+
* @return {Node|string|null} The result of the build process, depending on the build stage.
|
|
595
620
|
*/
|
|
596
621
|
build( builder, output = null ) {
|
|
597
622
|
|
|
@@ -603,6 +628,30 @@ class Node extends EventDispatcher {
|
|
|
603
628
|
|
|
604
629
|
}
|
|
605
630
|
|
|
631
|
+
//
|
|
632
|
+
|
|
633
|
+
const nodeData = builder.getDataFromNode( this );
|
|
634
|
+
nodeData.buildStages = nodeData.buildStages || {};
|
|
635
|
+
nodeData.buildStages[ builder.buildStage ] = true;
|
|
636
|
+
|
|
637
|
+
const parentBuildStage = _parentBuildStage[ builder.buildStage ];
|
|
638
|
+
|
|
639
|
+
if ( parentBuildStage && nodeData.buildStages[ parentBuildStage ] !== true ) {
|
|
640
|
+
|
|
641
|
+
// force parent build stage (setup or analyze)
|
|
642
|
+
|
|
643
|
+
const previousBuildStage = builder.getBuildStage();
|
|
644
|
+
|
|
645
|
+
builder.setBuildStage( parentBuildStage );
|
|
646
|
+
|
|
647
|
+
this.build( builder );
|
|
648
|
+
|
|
649
|
+
builder.setBuildStage( previousBuildStage );
|
|
650
|
+
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
//
|
|
654
|
+
|
|
606
655
|
builder.addNode( this );
|
|
607
656
|
builder.addChain( this );
|
|
608
657
|
|
|
@@ -626,9 +675,7 @@ class Node extends EventDispatcher {
|
|
|
626
675
|
//const stackNodesBeforeSetup = builder.stack.nodes.length;
|
|
627
676
|
|
|
628
677
|
properties.initialized = true;
|
|
629
|
-
|
|
630
|
-
const outputNode = this.setup( builder ); // return a node or null
|
|
631
|
-
const isNodeOutput = outputNode && outputNode.isNode === true;
|
|
678
|
+
properties.outputNode = this.setup( builder ) || properties.outputNode || null;
|
|
632
679
|
|
|
633
680
|
/*if ( isNodeOutput && builder.stack.nodes.length !== stackNodesBeforeSetup ) {
|
|
634
681
|
|
|
@@ -641,25 +688,27 @@ class Node extends EventDispatcher {
|
|
|
641
688
|
|
|
642
689
|
if ( childNode && childNode.isNode === true ) {
|
|
643
690
|
|
|
644
|
-
childNode.
|
|
691
|
+
if ( childNode.parents === true ) {
|
|
645
692
|
|
|
646
|
-
|
|
693
|
+
const childProperties = builder.getNodeProperties( childNode );
|
|
694
|
+
childProperties.parents = childProperties.parents || [];
|
|
695
|
+
childProperties.parents.push( this );
|
|
647
696
|
|
|
648
|
-
|
|
697
|
+
}
|
|
649
698
|
|
|
650
|
-
|
|
699
|
+
childNode.build( builder );
|
|
651
700
|
|
|
652
|
-
|
|
701
|
+
}
|
|
653
702
|
|
|
654
703
|
}
|
|
655
704
|
|
|
656
|
-
properties.outputNode = outputNode;
|
|
657
|
-
|
|
658
705
|
}
|
|
659
706
|
|
|
707
|
+
result = properties.outputNode;
|
|
708
|
+
|
|
660
709
|
} else if ( buildStage === 'analyze' ) {
|
|
661
710
|
|
|
662
|
-
this.analyze( builder );
|
|
711
|
+
this.analyze( builder, output );
|
|
663
712
|
|
|
664
713
|
} else if ( buildStage === 'generate' ) {
|
|
665
714
|
|
|
@@ -848,7 +897,7 @@ class Node extends EventDispatcher {
|
|
|
848
897
|
type,
|
|
849
898
|
meta,
|
|
850
899
|
metadata: {
|
|
851
|
-
version: 4.
|
|
900
|
+
version: 4.7,
|
|
852
901
|
type: 'Node',
|
|
853
902
|
generator: 'Node.toJSON'
|
|
854
903
|
}
|
|
@@ -1831,9 +1831,11 @@ class NodeBuilder {
|
|
|
1831
1831
|
* @param {(VaryingNode|PropertyNode)} node - The varying node.
|
|
1832
1832
|
* @param {?string} name - The varying's name.
|
|
1833
1833
|
* @param {string} [type=node.getNodeType( this )] - The varying's type.
|
|
1834
|
+
* @param {?string} interpolationType - The interpolation type of the varying.
|
|
1835
|
+
* @param {?string} interpolationSampling - The interpolation sampling type of the varying.
|
|
1834
1836
|
* @return {NodeVar} The node varying.
|
|
1835
1837
|
*/
|
|
1836
|
-
getVaryingFromNode( node, name = null, type = node.getNodeType( this ) ) {
|
|
1838
|
+
getVaryingFromNode( node, name = null, type = node.getNodeType( this ), interpolationType = null, interpolationSampling = null ) {
|
|
1837
1839
|
|
|
1838
1840
|
const nodeData = this.getDataFromNode( node, 'any' );
|
|
1839
1841
|
|
|
@@ -1846,7 +1848,7 @@ class NodeBuilder {
|
|
|
1846
1848
|
|
|
1847
1849
|
if ( name === null ) name = 'nodeVarying' + index;
|
|
1848
1850
|
|
|
1849
|
-
nodeVarying = new NodeVarying( name, type );
|
|
1851
|
+
nodeVarying = new NodeVarying( name, type, interpolationType, interpolationSampling );
|
|
1850
1852
|
|
|
1851
1853
|
varyings.push( nodeVarying );
|
|
1852
1854
|
|
|
@@ -1860,6 +1862,58 @@ class NodeBuilder {
|
|
|
1860
1862
|
|
|
1861
1863
|
}
|
|
1862
1864
|
|
|
1865
|
+
/**
|
|
1866
|
+
* Returns the current namespace for the node builder.
|
|
1867
|
+
*
|
|
1868
|
+
* @return {string} The current namespace.
|
|
1869
|
+
*/
|
|
1870
|
+
get namespace() {
|
|
1871
|
+
|
|
1872
|
+
return this.context.namespace;
|
|
1873
|
+
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
/**
|
|
1877
|
+
* Returns the output namespace for the node builder, which is used for the current output node.
|
|
1878
|
+
*
|
|
1879
|
+
* @return {string} The output namespace.
|
|
1880
|
+
*/
|
|
1881
|
+
getOutputNamespace() {
|
|
1882
|
+
|
|
1883
|
+
return this.getNamespace( 'outputNode' );
|
|
1884
|
+
|
|
1885
|
+
}
|
|
1886
|
+
|
|
1887
|
+
/**
|
|
1888
|
+
* Returns the namespace for the given property.
|
|
1889
|
+
*
|
|
1890
|
+
* If the property name is not set, it returns the namespace only.
|
|
1891
|
+
* If the namespace is not set, it returns the property name.
|
|
1892
|
+
* If the namespace is set, it returns the namespace concatenated with the property name.
|
|
1893
|
+
*
|
|
1894
|
+
* @param {string} [property=''] - The property name.
|
|
1895
|
+
* @return {string} The namespace for the property.
|
|
1896
|
+
*/
|
|
1897
|
+
getNamespace( property = '' ) {
|
|
1898
|
+
|
|
1899
|
+
const ns = this.namespace;
|
|
1900
|
+
|
|
1901
|
+
let nsName;
|
|
1902
|
+
|
|
1903
|
+
if ( ns ) {
|
|
1904
|
+
|
|
1905
|
+
nsName = property ? ( ns + '_' + property ) : ns;
|
|
1906
|
+
|
|
1907
|
+
} else {
|
|
1908
|
+
|
|
1909
|
+
nsName = property;
|
|
1910
|
+
|
|
1911
|
+
}
|
|
1912
|
+
|
|
1913
|
+
return nsName;
|
|
1914
|
+
|
|
1915
|
+
}
|
|
1916
|
+
|
|
1863
1917
|
/**
|
|
1864
1918
|
* Registers a node declaration in the current shader stage.
|
|
1865
1919
|
*
|
|
@@ -1883,8 +1937,6 @@ class NodeBuilder {
|
|
|
1883
1937
|
|
|
1884
1938
|
}
|
|
1885
1939
|
|
|
1886
|
-
declarations[ name ] = node;
|
|
1887
|
-
|
|
1888
1940
|
if ( index > 1 ) {
|
|
1889
1941
|
|
|
1890
1942
|
node.name = name;
|
|
@@ -1893,6 +1945,8 @@ class NodeBuilder {
|
|
|
1893
1945
|
|
|
1894
1946
|
}
|
|
1895
1947
|
|
|
1948
|
+
declarations[ name ] = node;
|
|
1949
|
+
|
|
1896
1950
|
}
|
|
1897
1951
|
|
|
1898
1952
|
/**
|
|
@@ -2281,27 +2335,53 @@ class NodeBuilder {
|
|
|
2281
2335
|
* @param {Node} node - The node to execute.
|
|
2282
2336
|
* @param {?string} output - Expected output type. For example 'vec3'.
|
|
2283
2337
|
* @param {?string} propertyName - The property name to assign the result.
|
|
2284
|
-
* @return {Object}
|
|
2338
|
+
* @return {Object|Node|null} The code flow or node.build() result.
|
|
2285
2339
|
*/
|
|
2286
2340
|
flowNodeFromShaderStage( shaderStage, node, output = null, propertyName = null ) {
|
|
2287
2341
|
|
|
2342
|
+
const previousTab = this.tab;
|
|
2343
|
+
const previousCache = this.cache;
|
|
2288
2344
|
const previousShaderStage = this.shaderStage;
|
|
2345
|
+
const previousContext = this.context;
|
|
2289
2346
|
|
|
2290
2347
|
this.setShaderStage( shaderStage );
|
|
2291
2348
|
|
|
2292
|
-
const
|
|
2349
|
+
const context = { ...this.context };
|
|
2350
|
+
delete context.nodeBlock;
|
|
2293
2351
|
|
|
2294
|
-
|
|
2352
|
+
this.cache = this.globalCache;
|
|
2353
|
+
this.tab = '\t';
|
|
2354
|
+
this.context = context;
|
|
2295
2355
|
|
|
2296
|
-
|
|
2356
|
+
let result = null;
|
|
2297
2357
|
|
|
2298
|
-
|
|
2358
|
+
if ( this.buildStage === 'generate' ) {
|
|
2359
|
+
|
|
2360
|
+
const flowData = this.flowChildNode( node, output );
|
|
2361
|
+
|
|
2362
|
+
if ( propertyName !== null ) {
|
|
2363
|
+
|
|
2364
|
+
flowData.code += `${ this.tab + propertyName } = ${ flowData.result };\n`;
|
|
2365
|
+
|
|
2366
|
+
}
|
|
2367
|
+
|
|
2368
|
+
this.flowCode[ shaderStage ] = this.flowCode[ shaderStage ] + flowData.code;
|
|
2369
|
+
|
|
2370
|
+
result = flowData;
|
|
2371
|
+
|
|
2372
|
+
} else {
|
|
2373
|
+
|
|
2374
|
+
result = node.build( this );
|
|
2299
2375
|
|
|
2300
|
-
|
|
2376
|
+
}
|
|
2301
2377
|
|
|
2302
2378
|
this.setShaderStage( previousShaderStage );
|
|
2303
2379
|
|
|
2304
|
-
|
|
2380
|
+
this.cache = previousCache;
|
|
2381
|
+
this.tab = previousTab;
|
|
2382
|
+
this.context = previousContext;
|
|
2383
|
+
|
|
2384
|
+
return result;
|
|
2305
2385
|
|
|
2306
2386
|
}
|
|
2307
2387
|
|
|
@@ -2649,7 +2729,9 @@ class NodeBuilder {
|
|
|
2649
2729
|
|
|
2650
2730
|
if ( fromTypeLength > toTypeLength ) {
|
|
2651
2731
|
|
|
2652
|
-
|
|
2732
|
+
snippet = toType === 'bool' ? `all( ${ snippet } )` : `${ snippet }.${ 'xyz'.slice( 0, toTypeLength ) }`;
|
|
2733
|
+
|
|
2734
|
+
return this.format( snippet, this.getTypeFromLength( toTypeLength, this.getComponentType( fromType ) ), toType );
|
|
2653
2735
|
|
|
2654
2736
|
}
|
|
2655
2737
|
|
|
@@ -2689,6 +2771,11 @@ class NodeBuilder {
|
|
|
2689
2771
|
|
|
2690
2772
|
}
|
|
2691
2773
|
|
|
2774
|
+
/**
|
|
2775
|
+
* Prevents the node builder from being used as an iterable in TSL.Fn(), avoiding potential runtime errors.
|
|
2776
|
+
*/
|
|
2777
|
+
*[ Symbol.iterator ]() { }
|
|
2778
|
+
|
|
2692
2779
|
// Deprecated
|
|
2693
2780
|
|
|
2694
2781
|
/**
|
|
@@ -2704,6 +2791,7 @@ class NodeBuilder {
|
|
|
2704
2791
|
|
|
2705
2792
|
}
|
|
2706
2793
|
|
|
2794
|
+
|
|
2707
2795
|
}
|
|
2708
2796
|
|
|
2709
2797
|
export default NodeBuilder;
|