@plastic-software/three 0.175.13 → 0.178.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/build/three.cjs +7747 -6792
- package/build/three.core.js +7371 -6576
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +190 -30
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +19 -11
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +4989 -2235
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +5082 -2469
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -1
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +18 -4
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +49 -35
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +12 -10
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +2 -1
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +7 -0
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +1 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +1 -0
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +1 -0
- package/examples/jsm/loaders/USDZLoader.js +1 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/Timer.js +2 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +1 -0
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +20 -17
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +139 -12
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +4 -3
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +5 -2
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +1 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +1 -1
- package/src/Three.TSL.js +18 -10
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/SkeletonHelper.js +1 -1
- package/src/lights/LightShadow.js +14 -0
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +2 -2
- package/src/loaders/ImageBitmapLoader.js +25 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +105 -19
- package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +6 -1
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +2 -3
- package/src/nodes/TSL.js +5 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +31 -4
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +102 -16
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +14 -3
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +59 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +69 -20
- package/src/nodes/core/NodeBuilder.js +248 -29
- package/src/nodes/core/NodeUtils.js +42 -0
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +129 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/VarNode.js +11 -2
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +18 -19
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +14 -14
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +78 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/lib/mx_noise.js +1 -1
- package/src/nodes/math/ConditionalNode.js +0 -19
- package/src/nodes/math/MathNode.js +68 -21
- package/src/nodes/math/OperatorNode.js +108 -98
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +160 -65
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +13 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +16 -4
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +25 -11
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Storage3DTexture.js +79 -0
- package/src/renderers/common/StorageArrayTexture.js +63 -0
- package/src/renderers/common/Textures.js +15 -21
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +157 -27
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLPrograms.js +4 -2
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +144 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +451 -128
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +2 -1
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/Source.js +22 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +1 -1
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
package/src/nodes/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
|
|
|
@@ -686,7 +735,7 @@ class Node extends EventDispatcher {
|
|
|
686
735
|
|
|
687
736
|
console.warn( 'THREE.Node: Recursion detected.', this );
|
|
688
737
|
|
|
689
|
-
result = '';
|
|
738
|
+
result = '/* Recursion detected. */';
|
|
690
739
|
|
|
691
740
|
}
|
|
692
741
|
|
|
@@ -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
|
}
|
|
@@ -419,6 +419,30 @@ class NodeBuilder {
|
|
|
419
419
|
*/
|
|
420
420
|
this.buildStage = null;
|
|
421
421
|
|
|
422
|
+
/**
|
|
423
|
+
* The sub-build layers.
|
|
424
|
+
*
|
|
425
|
+
* @type {Array<SubBuildNode>}
|
|
426
|
+
* @default []
|
|
427
|
+
*/
|
|
428
|
+
this.subBuildLayers = [];
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* The current stack of nodes.
|
|
432
|
+
*
|
|
433
|
+
* @type {?StackNode}
|
|
434
|
+
* @default null
|
|
435
|
+
*/
|
|
436
|
+
this.currentStack = null;
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* The current sub-build TSL function(Fn).
|
|
440
|
+
*
|
|
441
|
+
* @type {?string}
|
|
442
|
+
* @default null
|
|
443
|
+
*/
|
|
444
|
+
this.subBuildFn = null;
|
|
445
|
+
|
|
422
446
|
}
|
|
423
447
|
|
|
424
448
|
/**
|
|
@@ -1577,7 +1601,23 @@ class NodeBuilder {
|
|
|
1577
1601
|
|
|
1578
1602
|
if ( nodeData[ shaderStage ] === undefined ) nodeData[ shaderStage ] = {};
|
|
1579
1603
|
|
|
1580
|
-
|
|
1604
|
+
//
|
|
1605
|
+
|
|
1606
|
+
let data = nodeData[ shaderStage ];
|
|
1607
|
+
|
|
1608
|
+
const subBuilds = nodeData.any ? nodeData.any.subBuilds : null;
|
|
1609
|
+
const subBuild = this.getClosestSubBuild( subBuilds );
|
|
1610
|
+
|
|
1611
|
+
if ( subBuild ) {
|
|
1612
|
+
|
|
1613
|
+
if ( data.subBuildsCache === undefined ) data.subBuildsCache = {};
|
|
1614
|
+
|
|
1615
|
+
data = data.subBuildsCache[ subBuild ] || ( data.subBuildsCache[ subBuild ] = {} );
|
|
1616
|
+
data.subBuilds = subBuilds;
|
|
1617
|
+
|
|
1618
|
+
}
|
|
1619
|
+
|
|
1620
|
+
return data;
|
|
1581
1621
|
|
|
1582
1622
|
}
|
|
1583
1623
|
|
|
@@ -1738,8 +1778,9 @@ class NodeBuilder {
|
|
|
1738
1778
|
getVarFromNode( node, name = null, type = node.getNodeType( this ), shaderStage = this.shaderStage, readOnly = false ) {
|
|
1739
1779
|
|
|
1740
1780
|
const nodeData = this.getDataFromNode( node, shaderStage );
|
|
1781
|
+
const subBuildVariable = this.getSubBuildProperty( 'variable', nodeData.subBuilds );
|
|
1741
1782
|
|
|
1742
|
-
let nodeVar = nodeData
|
|
1783
|
+
let nodeVar = nodeData[ subBuildVariable ];
|
|
1743
1784
|
|
|
1744
1785
|
if ( nodeVar === undefined ) {
|
|
1745
1786
|
|
|
@@ -1758,6 +1799,14 @@ class NodeBuilder {
|
|
|
1758
1799
|
|
|
1759
1800
|
//
|
|
1760
1801
|
|
|
1802
|
+
if ( subBuildVariable !== 'variable' ) {
|
|
1803
|
+
|
|
1804
|
+
name = this.getSubBuildProperty( name, nodeData.subBuilds );
|
|
1805
|
+
|
|
1806
|
+
}
|
|
1807
|
+
|
|
1808
|
+
//
|
|
1809
|
+
|
|
1761
1810
|
const count = this.getArrayCount( node );
|
|
1762
1811
|
|
|
1763
1812
|
nodeVar = new NodeVar( name, type, readOnly, count );
|
|
@@ -1770,7 +1819,7 @@ class NodeBuilder {
|
|
|
1770
1819
|
|
|
1771
1820
|
this.registerDeclaration( nodeVar );
|
|
1772
1821
|
|
|
1773
|
-
nodeData
|
|
1822
|
+
nodeData[ subBuildVariable ] = nodeVar;
|
|
1774
1823
|
|
|
1775
1824
|
}
|
|
1776
1825
|
|
|
@@ -1831,13 +1880,16 @@ class NodeBuilder {
|
|
|
1831
1880
|
* @param {(VaryingNode|PropertyNode)} node - The varying node.
|
|
1832
1881
|
* @param {?string} name - The varying's name.
|
|
1833
1882
|
* @param {string} [type=node.getNodeType( this )] - The varying's type.
|
|
1883
|
+
* @param {?string} interpolationType - The interpolation type of the varying.
|
|
1884
|
+
* @param {?string} interpolationSampling - The interpolation sampling type of the varying.
|
|
1834
1885
|
* @return {NodeVar} The node varying.
|
|
1835
1886
|
*/
|
|
1836
|
-
getVaryingFromNode( node, name = null, type = node.getNodeType( this ) ) {
|
|
1887
|
+
getVaryingFromNode( node, name = null, type = node.getNodeType( this ), interpolationType = null, interpolationSampling = null ) {
|
|
1837
1888
|
|
|
1838
1889
|
const nodeData = this.getDataFromNode( node, 'any' );
|
|
1890
|
+
const subBuildVarying = this.getSubBuildProperty( 'varying', nodeData.subBuilds );
|
|
1839
1891
|
|
|
1840
|
-
let nodeVarying = nodeData
|
|
1892
|
+
let nodeVarying = nodeData[ subBuildVarying ];
|
|
1841
1893
|
|
|
1842
1894
|
if ( nodeVarying === undefined ) {
|
|
1843
1895
|
|
|
@@ -1846,13 +1898,23 @@ class NodeBuilder {
|
|
|
1846
1898
|
|
|
1847
1899
|
if ( name === null ) name = 'nodeVarying' + index;
|
|
1848
1900
|
|
|
1849
|
-
|
|
1901
|
+
//
|
|
1902
|
+
|
|
1903
|
+
if ( subBuildVarying !== 'varying' ) {
|
|
1904
|
+
|
|
1905
|
+
name = this.getSubBuildProperty( name, nodeData.subBuilds );
|
|
1906
|
+
|
|
1907
|
+
}
|
|
1908
|
+
|
|
1909
|
+
//
|
|
1910
|
+
|
|
1911
|
+
nodeVarying = new NodeVarying( name, type, interpolationType, interpolationSampling );
|
|
1850
1912
|
|
|
1851
1913
|
varyings.push( nodeVarying );
|
|
1852
1914
|
|
|
1853
1915
|
this.registerDeclaration( nodeVarying );
|
|
1854
1916
|
|
|
1855
|
-
nodeData
|
|
1917
|
+
nodeData[ subBuildVarying ] = nodeVarying;
|
|
1856
1918
|
|
|
1857
1919
|
}
|
|
1858
1920
|
|
|
@@ -1883,8 +1945,6 @@ class NodeBuilder {
|
|
|
1883
1945
|
|
|
1884
1946
|
}
|
|
1885
1947
|
|
|
1886
|
-
declarations[ name ] = node;
|
|
1887
|
-
|
|
1888
1948
|
if ( index > 1 ) {
|
|
1889
1949
|
|
|
1890
1950
|
node.name = name;
|
|
@@ -1893,6 +1953,8 @@ class NodeBuilder {
|
|
|
1893
1953
|
|
|
1894
1954
|
}
|
|
1895
1955
|
|
|
1956
|
+
declarations[ name ] = node;
|
|
1957
|
+
|
|
1896
1958
|
}
|
|
1897
1959
|
|
|
1898
1960
|
/**
|
|
@@ -2281,27 +2343,53 @@ class NodeBuilder {
|
|
|
2281
2343
|
* @param {Node} node - The node to execute.
|
|
2282
2344
|
* @param {?string} output - Expected output type. For example 'vec3'.
|
|
2283
2345
|
* @param {?string} propertyName - The property name to assign the result.
|
|
2284
|
-
* @return {Object}
|
|
2346
|
+
* @return {Object|Node|null} The code flow or node.build() result.
|
|
2285
2347
|
*/
|
|
2286
2348
|
flowNodeFromShaderStage( shaderStage, node, output = null, propertyName = null ) {
|
|
2287
2349
|
|
|
2350
|
+
const previousTab = this.tab;
|
|
2351
|
+
const previousCache = this.cache;
|
|
2288
2352
|
const previousShaderStage = this.shaderStage;
|
|
2353
|
+
const previousContext = this.context;
|
|
2289
2354
|
|
|
2290
2355
|
this.setShaderStage( shaderStage );
|
|
2291
2356
|
|
|
2292
|
-
const
|
|
2357
|
+
const context = { ...this.context };
|
|
2358
|
+
delete context.nodeBlock;
|
|
2293
2359
|
|
|
2294
|
-
|
|
2360
|
+
this.cache = this.globalCache;
|
|
2361
|
+
this.tab = '\t';
|
|
2362
|
+
this.context = context;
|
|
2295
2363
|
|
|
2296
|
-
|
|
2364
|
+
let result = null;
|
|
2297
2365
|
|
|
2298
|
-
|
|
2366
|
+
if ( this.buildStage === 'generate' ) {
|
|
2367
|
+
|
|
2368
|
+
const flowData = this.flowChildNode( node, output );
|
|
2299
2369
|
|
|
2300
|
-
|
|
2370
|
+
if ( propertyName !== null ) {
|
|
2371
|
+
|
|
2372
|
+
flowData.code += `${ this.tab + propertyName } = ${ flowData.result };\n`;
|
|
2373
|
+
|
|
2374
|
+
}
|
|
2375
|
+
|
|
2376
|
+
this.flowCode[ shaderStage ] = this.flowCode[ shaderStage ] + flowData.code;
|
|
2377
|
+
|
|
2378
|
+
result = flowData;
|
|
2379
|
+
|
|
2380
|
+
} else {
|
|
2381
|
+
|
|
2382
|
+
result = node.build( this );
|
|
2383
|
+
|
|
2384
|
+
}
|
|
2301
2385
|
|
|
2302
2386
|
this.setShaderStage( previousShaderStage );
|
|
2303
2387
|
|
|
2304
|
-
|
|
2388
|
+
this.cache = previousCache;
|
|
2389
|
+
this.tab = previousTab;
|
|
2390
|
+
this.context = previousContext;
|
|
2391
|
+
|
|
2392
|
+
return result;
|
|
2305
2393
|
|
|
2306
2394
|
}
|
|
2307
2395
|
|
|
@@ -2487,6 +2575,145 @@ class NodeBuilder {
|
|
|
2487
2575
|
|
|
2488
2576
|
}
|
|
2489
2577
|
|
|
2578
|
+
/**
|
|
2579
|
+
* Returns the current sub-build layer.
|
|
2580
|
+
*
|
|
2581
|
+
* @return {SubBuildNode} The current sub-build layers.
|
|
2582
|
+
*/
|
|
2583
|
+
get subBuild() {
|
|
2584
|
+
|
|
2585
|
+
return this.subBuildLayers[ this.subBuildLayers.length - 1 ] || null;
|
|
2586
|
+
|
|
2587
|
+
}
|
|
2588
|
+
|
|
2589
|
+
/**
|
|
2590
|
+
* Adds a sub-build layer to the node builder.
|
|
2591
|
+
*
|
|
2592
|
+
* @param {SubBuildNode} subBuild - The sub-build layer to add.
|
|
2593
|
+
*/
|
|
2594
|
+
addSubBuild( subBuild ) {
|
|
2595
|
+
|
|
2596
|
+
this.subBuildLayers.push( subBuild );
|
|
2597
|
+
|
|
2598
|
+
}
|
|
2599
|
+
|
|
2600
|
+
/**
|
|
2601
|
+
* Removes the last sub-build layer from the node builder.
|
|
2602
|
+
*
|
|
2603
|
+
* @return {SubBuildNode} The removed sub-build layer.
|
|
2604
|
+
*/
|
|
2605
|
+
removeSubBuild() {
|
|
2606
|
+
|
|
2607
|
+
return this.subBuildLayers.pop();
|
|
2608
|
+
|
|
2609
|
+
}
|
|
2610
|
+
|
|
2611
|
+
/**
|
|
2612
|
+
* Returns the closest sub-build layer for the given data.
|
|
2613
|
+
*
|
|
2614
|
+
* @param {Node|Set|Array} data - The data to get the closest sub-build layer from.
|
|
2615
|
+
* @return {?string} The closest sub-build name or null if none found.
|
|
2616
|
+
*/
|
|
2617
|
+
getClosestSubBuild( data ) {
|
|
2618
|
+
|
|
2619
|
+
let subBuilds;
|
|
2620
|
+
|
|
2621
|
+
if ( data && data.isNode ) {
|
|
2622
|
+
|
|
2623
|
+
if ( data.isShaderCallNodeInternal ) {
|
|
2624
|
+
|
|
2625
|
+
subBuilds = data.shaderNode.subBuilds;
|
|
2626
|
+
|
|
2627
|
+
} else if ( data.isStackNode ) {
|
|
2628
|
+
|
|
2629
|
+
subBuilds = [ data.subBuild ];
|
|
2630
|
+
|
|
2631
|
+
} else {
|
|
2632
|
+
|
|
2633
|
+
subBuilds = this.getDataFromNode( data, 'any' ).subBuilds;
|
|
2634
|
+
|
|
2635
|
+
}
|
|
2636
|
+
|
|
2637
|
+
} else if ( data instanceof Set ) {
|
|
2638
|
+
|
|
2639
|
+
subBuilds = [ ...data ];
|
|
2640
|
+
|
|
2641
|
+
} else {
|
|
2642
|
+
|
|
2643
|
+
subBuilds = data;
|
|
2644
|
+
|
|
2645
|
+
}
|
|
2646
|
+
|
|
2647
|
+
if ( ! subBuilds ) return null;
|
|
2648
|
+
|
|
2649
|
+
const subBuildLayers = this.subBuildLayers;
|
|
2650
|
+
|
|
2651
|
+
for ( let i = subBuilds.length - 1; i >= 0; i -- ) {
|
|
2652
|
+
|
|
2653
|
+
const subBuild = subBuilds[ i ];
|
|
2654
|
+
|
|
2655
|
+
if ( subBuildLayers.includes( subBuild ) ) {
|
|
2656
|
+
|
|
2657
|
+
return subBuild;
|
|
2658
|
+
|
|
2659
|
+
}
|
|
2660
|
+
|
|
2661
|
+
}
|
|
2662
|
+
|
|
2663
|
+
return null;
|
|
2664
|
+
|
|
2665
|
+
}
|
|
2666
|
+
|
|
2667
|
+
|
|
2668
|
+
/**
|
|
2669
|
+
* Returns the output node of a sub-build layer.
|
|
2670
|
+
*
|
|
2671
|
+
* @param {Node} node - The node to get the output from.
|
|
2672
|
+
* @return {string} The output node name.
|
|
2673
|
+
*/
|
|
2674
|
+
getSubBuildOutput( node ) {
|
|
2675
|
+
|
|
2676
|
+
return this.getSubBuildProperty( 'outputNode', node );
|
|
2677
|
+
|
|
2678
|
+
}
|
|
2679
|
+
|
|
2680
|
+
/**
|
|
2681
|
+
* Returns the sub-build property name for the given property and node.
|
|
2682
|
+
*
|
|
2683
|
+
* @param {string} [property=''] - The property name.
|
|
2684
|
+
* @param {?Node} [node=null] - The node to get the sub-build from.
|
|
2685
|
+
* @return {string} The sub-build property name.
|
|
2686
|
+
*/
|
|
2687
|
+
getSubBuildProperty( property = '', node = null ) {
|
|
2688
|
+
|
|
2689
|
+
let subBuild;
|
|
2690
|
+
|
|
2691
|
+
if ( node !== null ) {
|
|
2692
|
+
|
|
2693
|
+
subBuild = this.getClosestSubBuild( node );
|
|
2694
|
+
|
|
2695
|
+
} else {
|
|
2696
|
+
|
|
2697
|
+
subBuild = this.subBuildFn;
|
|
2698
|
+
|
|
2699
|
+
}
|
|
2700
|
+
|
|
2701
|
+
let result;
|
|
2702
|
+
|
|
2703
|
+
if ( subBuild ) {
|
|
2704
|
+
|
|
2705
|
+
result = property ? ( subBuild + '_' + property ) : subBuild;
|
|
2706
|
+
|
|
2707
|
+
} else {
|
|
2708
|
+
|
|
2709
|
+
result = property;
|
|
2710
|
+
|
|
2711
|
+
}
|
|
2712
|
+
|
|
2713
|
+
return result;
|
|
2714
|
+
|
|
2715
|
+
}
|
|
2716
|
+
|
|
2490
2717
|
/**
|
|
2491
2718
|
* Central build method which controls the build for the given object.
|
|
2492
2719
|
*
|
|
@@ -2649,7 +2876,9 @@ class NodeBuilder {
|
|
|
2649
2876
|
|
|
2650
2877
|
if ( fromTypeLength > toTypeLength ) {
|
|
2651
2878
|
|
|
2652
|
-
|
|
2879
|
+
snippet = toType === 'bool' ? `all( ${ snippet } )` : `${ snippet }.${ 'xyz'.slice( 0, toTypeLength ) }`;
|
|
2880
|
+
|
|
2881
|
+
return this.format( snippet, this.getTypeFromLength( toTypeLength, this.getComponentType( fromType ) ), toType );
|
|
2653
2882
|
|
|
2654
2883
|
}
|
|
2655
2884
|
|
|
@@ -2689,20 +2918,10 @@ class NodeBuilder {
|
|
|
2689
2918
|
|
|
2690
2919
|
}
|
|
2691
2920
|
|
|
2692
|
-
// Deprecated
|
|
2693
|
-
|
|
2694
2921
|
/**
|
|
2695
|
-
*
|
|
2696
|
-
* @deprecated since r168. Use `new NodeMaterial()` instead, with targeted node material name.
|
|
2697
|
-
*
|
|
2698
|
-
* @param {string} [type='NodeMaterial'] - The node material type.
|
|
2699
|
-
* @throws {Error}
|
|
2922
|
+
* Prevents the node builder from being used as an iterable in TSL.Fn(), avoiding potential runtime errors.
|
|
2700
2923
|
*/
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
throw new Error( `THREE.NodeBuilder: createNodeMaterial() was deprecated. Use new ${ type }() instead.` );
|
|
2704
|
-
|
|
2705
|
-
}
|
|
2924
|
+
*[ Symbol.iterator ]() { }
|
|
2706
2925
|
|
|
2707
2926
|
}
|
|
2708
2927
|
|
|
@@ -236,6 +236,48 @@ export function getLengthFromType( type ) {
|
|
|
236
236
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
|
+
/**
|
|
240
|
+
* Returns the gpu memory length for the given data type.
|
|
241
|
+
*
|
|
242
|
+
* @method
|
|
243
|
+
* @param {string} type - The data type.
|
|
244
|
+
* @return {number} The length.
|
|
245
|
+
*/
|
|
246
|
+
export function getMemoryLengthFromType( type ) {
|
|
247
|
+
|
|
248
|
+
if ( /float|int|uint/.test( type ) ) return 1;
|
|
249
|
+
if ( /vec2/.test( type ) ) return 2;
|
|
250
|
+
if ( /vec3/.test( type ) ) return 3;
|
|
251
|
+
if ( /vec4/.test( type ) ) return 4;
|
|
252
|
+
if ( /mat2/.test( type ) ) return 4;
|
|
253
|
+
if ( /mat3/.test( type ) ) return 12;
|
|
254
|
+
if ( /mat4/.test( type ) ) return 16;
|
|
255
|
+
|
|
256
|
+
console.error( 'THREE.TSL: Unsupported type:', type );
|
|
257
|
+
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Returns the byte boundary for the given data type.
|
|
262
|
+
*
|
|
263
|
+
* @method
|
|
264
|
+
* @param {string} type - The data type.
|
|
265
|
+
* @return {number} The byte boundary.
|
|
266
|
+
*/
|
|
267
|
+
export function getByteBoundaryFromType( type ) {
|
|
268
|
+
|
|
269
|
+
if ( /float|int|uint/.test( type ) ) return 4;
|
|
270
|
+
if ( /vec2/.test( type ) ) return 8;
|
|
271
|
+
if ( /vec3/.test( type ) ) return 16;
|
|
272
|
+
if ( /vec4/.test( type ) ) return 16;
|
|
273
|
+
if ( /mat2/.test( type ) ) return 8;
|
|
274
|
+
if ( /mat3/.test( type ) ) return 48;
|
|
275
|
+
if ( /mat4/.test( type ) ) return 64;
|
|
276
|
+
|
|
277
|
+
console.error( 'THREE.TSL: Unsupported type:', type );
|
|
278
|
+
|
|
279
|
+
}
|
|
280
|
+
|
|
239
281
|
/**
|
|
240
282
|
* Returns the data type for the given value.
|
|
241
283
|
*
|
|
@@ -15,8 +15,10 @@ class NodeVarying extends NodeVar {
|
|
|
15
15
|
*
|
|
16
16
|
* @param {string} name - The name of the varying.
|
|
17
17
|
* @param {string} type - The type of the varying.
|
|
18
|
+
* @param {?string} interpolationType - The interpolation type of the varying.
|
|
19
|
+
* @param {?string} interpolationSampling - The interpolation sampling type of the varying.
|
|
18
20
|
*/
|
|
19
|
-
constructor( name, type ) {
|
|
21
|
+
constructor( name, type, interpolationType = null, interpolationSampling = null ) {
|
|
20
22
|
|
|
21
23
|
super( name, type );
|
|
22
24
|
|
|
@@ -38,6 +40,22 @@ class NodeVarying extends NodeVar {
|
|
|
38
40
|
*/
|
|
39
41
|
this.isNodeVarying = true;
|
|
40
42
|
|
|
43
|
+
/**
|
|
44
|
+
* The interpolation type of the varying data.
|
|
45
|
+
*
|
|
46
|
+
* @type {?string}
|
|
47
|
+
* @default null
|
|
48
|
+
*/
|
|
49
|
+
this.interpolationType = interpolationType;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The interpolation sampling type of varying data.
|
|
53
|
+
*
|
|
54
|
+
* @type {?string}
|
|
55
|
+
* @default null
|
|
56
|
+
*/
|
|
57
|
+
this.interpolationSampling = interpolationSampling;
|
|
58
|
+
|
|
41
59
|
}
|
|
42
60
|
|
|
43
61
|
}
|
|
@@ -58,6 +58,14 @@ class PropertyNode extends Node {
|
|
|
58
58
|
*/
|
|
59
59
|
this.isPropertyNode = true;
|
|
60
60
|
|
|
61
|
+
/**
|
|
62
|
+
* This flag is used for global cache.
|
|
63
|
+
*
|
|
64
|
+
* @type {boolean}
|
|
65
|
+
* @default true
|
|
66
|
+
*/
|
|
67
|
+
this.global = true;
|
|
68
|
+
|
|
61
69
|
}
|
|
62
70
|
|
|
63
71
|
getHash( builder ) {
|
|
@@ -66,18 +74,6 @@ class PropertyNode extends Node {
|
|
|
66
74
|
|
|
67
75
|
}
|
|
68
76
|
|
|
69
|
-
/**
|
|
70
|
-
* The method is overwritten so it always returns `true`.
|
|
71
|
-
*
|
|
72
|
-
* @param {NodeBuilder} builder - The current node builder.
|
|
73
|
-
* @return {boolean} Whether this node is global or not.
|
|
74
|
-
*/
|
|
75
|
-
isGlobal( /*builder*/ ) {
|
|
76
|
-
|
|
77
|
-
return true;
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
77
|
generate( builder ) {
|
|
82
78
|
|
|
83
79
|
let nodeVar;
|