@plastic-software/three 0.175.14 → 0.179.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +22 -8
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +57 -38
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +679 -300
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -2
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +213 -30
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +4 -3
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +22 -19
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +149 -13
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +22 -19
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +12 -10
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -196,7 +196,7 @@ class NodeBuilder {
|
|
|
196
196
|
/**
|
|
197
197
|
* A reference to the current fog node.
|
|
198
198
|
*
|
|
199
|
-
* @type {?
|
|
199
|
+
* @type {?Node}
|
|
200
200
|
* @default null
|
|
201
201
|
*/
|
|
202
202
|
this.fogNode = null;
|
|
@@ -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
|
|
|
@@ -1707,23 +1747,6 @@ class NodeBuilder {
|
|
|
1707
1747
|
|
|
1708
1748
|
}
|
|
1709
1749
|
|
|
1710
|
-
/**
|
|
1711
|
-
* Returns the array length.
|
|
1712
|
-
*
|
|
1713
|
-
* @param {Node} node - The node.
|
|
1714
|
-
* @return {?number} The array length.
|
|
1715
|
-
*/
|
|
1716
|
-
getArrayCount( node ) {
|
|
1717
|
-
|
|
1718
|
-
let count = null;
|
|
1719
|
-
|
|
1720
|
-
if ( node.isArrayNode ) count = node.count;
|
|
1721
|
-
else if ( node.isVarNode && node.node.isArrayNode ) count = node.node.count;
|
|
1722
|
-
|
|
1723
|
-
return count;
|
|
1724
|
-
|
|
1725
|
-
}
|
|
1726
|
-
|
|
1727
1750
|
/**
|
|
1728
1751
|
* Returns an instance of {@link NodeVar} for the given variable node.
|
|
1729
1752
|
*
|
|
@@ -1738,8 +1761,9 @@ class NodeBuilder {
|
|
|
1738
1761
|
getVarFromNode( node, name = null, type = node.getNodeType( this ), shaderStage = this.shaderStage, readOnly = false ) {
|
|
1739
1762
|
|
|
1740
1763
|
const nodeData = this.getDataFromNode( node, shaderStage );
|
|
1764
|
+
const subBuildVariable = this.getSubBuildProperty( 'variable', nodeData.subBuilds );
|
|
1741
1765
|
|
|
1742
|
-
let nodeVar = nodeData
|
|
1766
|
+
let nodeVar = nodeData[ subBuildVariable ];
|
|
1743
1767
|
|
|
1744
1768
|
if ( nodeVar === undefined ) {
|
|
1745
1769
|
|
|
@@ -1758,7 +1782,15 @@ class NodeBuilder {
|
|
|
1758
1782
|
|
|
1759
1783
|
//
|
|
1760
1784
|
|
|
1761
|
-
|
|
1785
|
+
if ( subBuildVariable !== 'variable' ) {
|
|
1786
|
+
|
|
1787
|
+
name = this.getSubBuildProperty( name, nodeData.subBuilds );
|
|
1788
|
+
|
|
1789
|
+
}
|
|
1790
|
+
|
|
1791
|
+
//
|
|
1792
|
+
|
|
1793
|
+
const count = node.getArrayCount( this );
|
|
1762
1794
|
|
|
1763
1795
|
nodeVar = new NodeVar( name, type, readOnly, count );
|
|
1764
1796
|
|
|
@@ -1770,7 +1802,7 @@ class NodeBuilder {
|
|
|
1770
1802
|
|
|
1771
1803
|
this.registerDeclaration( nodeVar );
|
|
1772
1804
|
|
|
1773
|
-
nodeData
|
|
1805
|
+
nodeData[ subBuildVariable ] = nodeVar;
|
|
1774
1806
|
|
|
1775
1807
|
}
|
|
1776
1808
|
|
|
@@ -1831,13 +1863,16 @@ class NodeBuilder {
|
|
|
1831
1863
|
* @param {(VaryingNode|PropertyNode)} node - The varying node.
|
|
1832
1864
|
* @param {?string} name - The varying's name.
|
|
1833
1865
|
* @param {string} [type=node.getNodeType( this )] - The varying's type.
|
|
1866
|
+
* @param {?string} interpolationType - The interpolation type of the varying.
|
|
1867
|
+
* @param {?string} interpolationSampling - The interpolation sampling type of the varying.
|
|
1834
1868
|
* @return {NodeVar} The node varying.
|
|
1835
1869
|
*/
|
|
1836
|
-
getVaryingFromNode( node, name = null, type = node.getNodeType( this ) ) {
|
|
1870
|
+
getVaryingFromNode( node, name = null, type = node.getNodeType( this ), interpolationType = null, interpolationSampling = null ) {
|
|
1837
1871
|
|
|
1838
1872
|
const nodeData = this.getDataFromNode( node, 'any' );
|
|
1873
|
+
const subBuildVarying = this.getSubBuildProperty( 'varying', nodeData.subBuilds );
|
|
1839
1874
|
|
|
1840
|
-
let nodeVarying = nodeData
|
|
1875
|
+
let nodeVarying = nodeData[ subBuildVarying ];
|
|
1841
1876
|
|
|
1842
1877
|
if ( nodeVarying === undefined ) {
|
|
1843
1878
|
|
|
@@ -1846,13 +1881,23 @@ class NodeBuilder {
|
|
|
1846
1881
|
|
|
1847
1882
|
if ( name === null ) name = 'nodeVarying' + index;
|
|
1848
1883
|
|
|
1849
|
-
|
|
1884
|
+
//
|
|
1885
|
+
|
|
1886
|
+
if ( subBuildVarying !== 'varying' ) {
|
|
1887
|
+
|
|
1888
|
+
name = this.getSubBuildProperty( name, nodeData.subBuilds );
|
|
1889
|
+
|
|
1890
|
+
}
|
|
1891
|
+
|
|
1892
|
+
//
|
|
1893
|
+
|
|
1894
|
+
nodeVarying = new NodeVarying( name, type, interpolationType, interpolationSampling );
|
|
1850
1895
|
|
|
1851
1896
|
varyings.push( nodeVarying );
|
|
1852
1897
|
|
|
1853
1898
|
this.registerDeclaration( nodeVarying );
|
|
1854
1899
|
|
|
1855
|
-
nodeData
|
|
1900
|
+
nodeData[ subBuildVarying ] = nodeVarying;
|
|
1856
1901
|
|
|
1857
1902
|
}
|
|
1858
1903
|
|
|
@@ -1883,8 +1928,6 @@ class NodeBuilder {
|
|
|
1883
1928
|
|
|
1884
1929
|
}
|
|
1885
1930
|
|
|
1886
|
-
declarations[ name ] = node;
|
|
1887
|
-
|
|
1888
1931
|
if ( index > 1 ) {
|
|
1889
1932
|
|
|
1890
1933
|
node.name = name;
|
|
@@ -1893,6 +1936,8 @@ class NodeBuilder {
|
|
|
1893
1936
|
|
|
1894
1937
|
}
|
|
1895
1938
|
|
|
1939
|
+
declarations[ name ] = node;
|
|
1940
|
+
|
|
1896
1941
|
}
|
|
1897
1942
|
|
|
1898
1943
|
/**
|
|
@@ -2171,6 +2216,28 @@ class NodeBuilder {
|
|
|
2171
2216
|
|
|
2172
2217
|
}
|
|
2173
2218
|
|
|
2219
|
+
/**
|
|
2220
|
+
* Executes the node in a specific build stage.
|
|
2221
|
+
*
|
|
2222
|
+
* @param {Node} node - The node to execute.
|
|
2223
|
+
* @param {string} buildStage - The build stage to execute the node in.
|
|
2224
|
+
* @param {Node|string|null} output - Expected output type. For example 'vec3'.
|
|
2225
|
+
* @return {Node|string|null} The result of the node build.
|
|
2226
|
+
*/
|
|
2227
|
+
flowBuildStage( node, buildStage, output = null ) {
|
|
2228
|
+
|
|
2229
|
+
const previousBuildStage = this.getBuildStage();
|
|
2230
|
+
|
|
2231
|
+
this.setBuildStage( buildStage );
|
|
2232
|
+
|
|
2233
|
+
const result = node.build( this, output );
|
|
2234
|
+
|
|
2235
|
+
this.setBuildStage( previousBuildStage );
|
|
2236
|
+
|
|
2237
|
+
return result;
|
|
2238
|
+
|
|
2239
|
+
}
|
|
2240
|
+
|
|
2174
2241
|
/**
|
|
2175
2242
|
* Runs the node flow through all the steps of creation, 'setup', 'analyze', 'generate'.
|
|
2176
2243
|
*
|
|
@@ -2281,27 +2348,53 @@ class NodeBuilder {
|
|
|
2281
2348
|
* @param {Node} node - The node to execute.
|
|
2282
2349
|
* @param {?string} output - Expected output type. For example 'vec3'.
|
|
2283
2350
|
* @param {?string} propertyName - The property name to assign the result.
|
|
2284
|
-
* @return {Object}
|
|
2351
|
+
* @return {Object|Node|null} The code flow or node.build() result.
|
|
2285
2352
|
*/
|
|
2286
2353
|
flowNodeFromShaderStage( shaderStage, node, output = null, propertyName = null ) {
|
|
2287
2354
|
|
|
2355
|
+
const previousTab = this.tab;
|
|
2356
|
+
const previousCache = this.cache;
|
|
2288
2357
|
const previousShaderStage = this.shaderStage;
|
|
2358
|
+
const previousContext = this.context;
|
|
2289
2359
|
|
|
2290
2360
|
this.setShaderStage( shaderStage );
|
|
2291
2361
|
|
|
2292
|
-
const
|
|
2362
|
+
const context = { ...this.context };
|
|
2363
|
+
delete context.nodeBlock;
|
|
2364
|
+
|
|
2365
|
+
this.cache = this.globalCache;
|
|
2366
|
+
this.tab = '\t';
|
|
2367
|
+
this.context = context;
|
|
2293
2368
|
|
|
2294
|
-
|
|
2369
|
+
let result = null;
|
|
2295
2370
|
|
|
2296
|
-
|
|
2371
|
+
if ( this.buildStage === 'generate' ) {
|
|
2297
2372
|
|
|
2298
|
-
|
|
2373
|
+
const flowData = this.flowChildNode( node, output );
|
|
2374
|
+
|
|
2375
|
+
if ( propertyName !== null ) {
|
|
2376
|
+
|
|
2377
|
+
flowData.code += `${ this.tab + propertyName } = ${ flowData.result };\n`;
|
|
2378
|
+
|
|
2379
|
+
}
|
|
2380
|
+
|
|
2381
|
+
this.flowCode[ shaderStage ] = this.flowCode[ shaderStage ] + flowData.code;
|
|
2382
|
+
|
|
2383
|
+
result = flowData;
|
|
2299
2384
|
|
|
2300
|
-
|
|
2385
|
+
} else {
|
|
2386
|
+
|
|
2387
|
+
result = node.build( this );
|
|
2388
|
+
|
|
2389
|
+
}
|
|
2301
2390
|
|
|
2302
2391
|
this.setShaderStage( previousShaderStage );
|
|
2303
2392
|
|
|
2304
|
-
|
|
2393
|
+
this.cache = previousCache;
|
|
2394
|
+
this.tab = previousTab;
|
|
2395
|
+
this.context = previousContext;
|
|
2396
|
+
|
|
2397
|
+
return result;
|
|
2305
2398
|
|
|
2306
2399
|
}
|
|
2307
2400
|
|
|
@@ -2487,6 +2580,145 @@ class NodeBuilder {
|
|
|
2487
2580
|
|
|
2488
2581
|
}
|
|
2489
2582
|
|
|
2583
|
+
/**
|
|
2584
|
+
* Returns the current sub-build layer.
|
|
2585
|
+
*
|
|
2586
|
+
* @return {SubBuildNode} The current sub-build layers.
|
|
2587
|
+
*/
|
|
2588
|
+
get subBuild() {
|
|
2589
|
+
|
|
2590
|
+
return this.subBuildLayers[ this.subBuildLayers.length - 1 ] || null;
|
|
2591
|
+
|
|
2592
|
+
}
|
|
2593
|
+
|
|
2594
|
+
/**
|
|
2595
|
+
* Adds a sub-build layer to the node builder.
|
|
2596
|
+
*
|
|
2597
|
+
* @param {SubBuildNode} subBuild - The sub-build layer to add.
|
|
2598
|
+
*/
|
|
2599
|
+
addSubBuild( subBuild ) {
|
|
2600
|
+
|
|
2601
|
+
this.subBuildLayers.push( subBuild );
|
|
2602
|
+
|
|
2603
|
+
}
|
|
2604
|
+
|
|
2605
|
+
/**
|
|
2606
|
+
* Removes the last sub-build layer from the node builder.
|
|
2607
|
+
*
|
|
2608
|
+
* @return {SubBuildNode} The removed sub-build layer.
|
|
2609
|
+
*/
|
|
2610
|
+
removeSubBuild() {
|
|
2611
|
+
|
|
2612
|
+
return this.subBuildLayers.pop();
|
|
2613
|
+
|
|
2614
|
+
}
|
|
2615
|
+
|
|
2616
|
+
/**
|
|
2617
|
+
* Returns the closest sub-build layer for the given data.
|
|
2618
|
+
*
|
|
2619
|
+
* @param {Node|Set|Array} data - The data to get the closest sub-build layer from.
|
|
2620
|
+
* @return {?string} The closest sub-build name or null if none found.
|
|
2621
|
+
*/
|
|
2622
|
+
getClosestSubBuild( data ) {
|
|
2623
|
+
|
|
2624
|
+
let subBuilds;
|
|
2625
|
+
|
|
2626
|
+
if ( data && data.isNode ) {
|
|
2627
|
+
|
|
2628
|
+
if ( data.isShaderCallNodeInternal ) {
|
|
2629
|
+
|
|
2630
|
+
subBuilds = data.shaderNode.subBuilds;
|
|
2631
|
+
|
|
2632
|
+
} else if ( data.isStackNode ) {
|
|
2633
|
+
|
|
2634
|
+
subBuilds = [ data.subBuild ];
|
|
2635
|
+
|
|
2636
|
+
} else {
|
|
2637
|
+
|
|
2638
|
+
subBuilds = this.getDataFromNode( data, 'any' ).subBuilds;
|
|
2639
|
+
|
|
2640
|
+
}
|
|
2641
|
+
|
|
2642
|
+
} else if ( data instanceof Set ) {
|
|
2643
|
+
|
|
2644
|
+
subBuilds = [ ...data ];
|
|
2645
|
+
|
|
2646
|
+
} else {
|
|
2647
|
+
|
|
2648
|
+
subBuilds = data;
|
|
2649
|
+
|
|
2650
|
+
}
|
|
2651
|
+
|
|
2652
|
+
if ( ! subBuilds ) return null;
|
|
2653
|
+
|
|
2654
|
+
const subBuildLayers = this.subBuildLayers;
|
|
2655
|
+
|
|
2656
|
+
for ( let i = subBuilds.length - 1; i >= 0; i -- ) {
|
|
2657
|
+
|
|
2658
|
+
const subBuild = subBuilds[ i ];
|
|
2659
|
+
|
|
2660
|
+
if ( subBuildLayers.includes( subBuild ) ) {
|
|
2661
|
+
|
|
2662
|
+
return subBuild;
|
|
2663
|
+
|
|
2664
|
+
}
|
|
2665
|
+
|
|
2666
|
+
}
|
|
2667
|
+
|
|
2668
|
+
return null;
|
|
2669
|
+
|
|
2670
|
+
}
|
|
2671
|
+
|
|
2672
|
+
|
|
2673
|
+
/**
|
|
2674
|
+
* Returns the output node of a sub-build layer.
|
|
2675
|
+
*
|
|
2676
|
+
* @param {Node} node - The node to get the output from.
|
|
2677
|
+
* @return {string} The output node name.
|
|
2678
|
+
*/
|
|
2679
|
+
getSubBuildOutput( node ) {
|
|
2680
|
+
|
|
2681
|
+
return this.getSubBuildProperty( 'outputNode', node );
|
|
2682
|
+
|
|
2683
|
+
}
|
|
2684
|
+
|
|
2685
|
+
/**
|
|
2686
|
+
* Returns the sub-build property name for the given property and node.
|
|
2687
|
+
*
|
|
2688
|
+
* @param {string} [property=''] - The property name.
|
|
2689
|
+
* @param {?Node} [node=null] - The node to get the sub-build from.
|
|
2690
|
+
* @return {string} The sub-build property name.
|
|
2691
|
+
*/
|
|
2692
|
+
getSubBuildProperty( property = '', node = null ) {
|
|
2693
|
+
|
|
2694
|
+
let subBuild;
|
|
2695
|
+
|
|
2696
|
+
if ( node !== null ) {
|
|
2697
|
+
|
|
2698
|
+
subBuild = this.getClosestSubBuild( node );
|
|
2699
|
+
|
|
2700
|
+
} else {
|
|
2701
|
+
|
|
2702
|
+
subBuild = this.subBuildFn;
|
|
2703
|
+
|
|
2704
|
+
}
|
|
2705
|
+
|
|
2706
|
+
let result;
|
|
2707
|
+
|
|
2708
|
+
if ( subBuild ) {
|
|
2709
|
+
|
|
2710
|
+
result = property ? ( subBuild + '_' + property ) : subBuild;
|
|
2711
|
+
|
|
2712
|
+
} else {
|
|
2713
|
+
|
|
2714
|
+
result = property;
|
|
2715
|
+
|
|
2716
|
+
}
|
|
2717
|
+
|
|
2718
|
+
return result;
|
|
2719
|
+
|
|
2720
|
+
}
|
|
2721
|
+
|
|
2490
2722
|
/**
|
|
2491
2723
|
* Central build method which controls the build for the given object.
|
|
2492
2724
|
*
|
|
@@ -2516,7 +2748,7 @@ class NodeBuilder {
|
|
|
2516
2748
|
|
|
2517
2749
|
}
|
|
2518
2750
|
|
|
2519
|
-
// setup() -> stage 1: create possible new nodes and
|
|
2751
|
+
// setup() -> stage 1: create possible new nodes and/or return an output reference node
|
|
2520
2752
|
// analyze() -> stage 2: analyze nodes to possible optimization and validation
|
|
2521
2753
|
// generate() -> stage 3: generate shader
|
|
2522
2754
|
|
|
@@ -2649,7 +2881,9 @@ class NodeBuilder {
|
|
|
2649
2881
|
|
|
2650
2882
|
if ( fromTypeLength > toTypeLength ) {
|
|
2651
2883
|
|
|
2652
|
-
|
|
2884
|
+
snippet = toType === 'bool' ? `all( ${ snippet } )` : `${ snippet }.${ 'xyz'.slice( 0, toTypeLength ) }`;
|
|
2885
|
+
|
|
2886
|
+
return this.format( snippet, this.getTypeFromLength( toTypeLength, this.getComponentType( fromType ) ), toType );
|
|
2653
2887
|
|
|
2654
2888
|
}
|
|
2655
2889
|
|
|
@@ -2689,20 +2923,10 @@ class NodeBuilder {
|
|
|
2689
2923
|
|
|
2690
2924
|
}
|
|
2691
2925
|
|
|
2692
|
-
// Deprecated
|
|
2693
|
-
|
|
2694
2926
|
/**
|
|
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}
|
|
2927
|
+
* Prevents the node builder from being used as an iterable in TSL.Fn(), avoiding potential runtime errors.
|
|
2700
2928
|
*/
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
throw new Error( `THREE.NodeBuilder: createNodeMaterial() was deprecated. Use new ${ type }() instead.` );
|
|
2704
|
-
|
|
2705
|
-
}
|
|
2929
|
+
*[ Symbol.iterator ]() { }
|
|
2706
2930
|
|
|
2707
2931
|
}
|
|
2708
2932
|
|
|
@@ -138,10 +138,13 @@ export function* getNodeChildren( node, toJSON = false ) {
|
|
|
138
138
|
|
|
139
139
|
yield { property, childNode: object };
|
|
140
140
|
|
|
141
|
-
} else if (
|
|
141
|
+
} else if ( object && Object.getPrototypeOf( object ) === Object.prototype ) {
|
|
142
142
|
|
|
143
143
|
for ( const subProperty in object ) {
|
|
144
144
|
|
|
145
|
+
// Ignore private properties.
|
|
146
|
+
if ( subProperty.startsWith( '_' ) === true ) continue;
|
|
147
|
+
|
|
145
148
|
const child = object[ subProperty ];
|
|
146
149
|
|
|
147
150
|
if ( child && ( child.isNode === true || toJSON && typeof child.toJSON === 'function' ) ) {
|
|
@@ -236,6 +239,48 @@ export function getLengthFromType( type ) {
|
|
|
236
239
|
|
|
237
240
|
}
|
|
238
241
|
|
|
242
|
+
/**
|
|
243
|
+
* Returns the gpu memory length for the given data type.
|
|
244
|
+
*
|
|
245
|
+
* @method
|
|
246
|
+
* @param {string} type - The data type.
|
|
247
|
+
* @return {number} The length.
|
|
248
|
+
*/
|
|
249
|
+
export function getMemoryLengthFromType( type ) {
|
|
250
|
+
|
|
251
|
+
if ( /float|int|uint/.test( type ) ) return 1;
|
|
252
|
+
if ( /vec2/.test( type ) ) return 2;
|
|
253
|
+
if ( /vec3/.test( type ) ) return 3;
|
|
254
|
+
if ( /vec4/.test( type ) ) return 4;
|
|
255
|
+
if ( /mat2/.test( type ) ) return 4;
|
|
256
|
+
if ( /mat3/.test( type ) ) return 12;
|
|
257
|
+
if ( /mat4/.test( type ) ) return 16;
|
|
258
|
+
|
|
259
|
+
console.error( 'THREE.TSL: Unsupported type:', type );
|
|
260
|
+
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Returns the byte boundary for the given data type.
|
|
265
|
+
*
|
|
266
|
+
* @method
|
|
267
|
+
* @param {string} type - The data type.
|
|
268
|
+
* @return {number} The byte boundary.
|
|
269
|
+
*/
|
|
270
|
+
export function getByteBoundaryFromType( type ) {
|
|
271
|
+
|
|
272
|
+
if ( /float|int|uint/.test( type ) ) return 4;
|
|
273
|
+
if ( /vec2/.test( type ) ) return 8;
|
|
274
|
+
if ( /vec3/.test( type ) ) return 16;
|
|
275
|
+
if ( /vec4/.test( type ) ) return 16;
|
|
276
|
+
if ( /mat2/.test( type ) ) return 8;
|
|
277
|
+
if ( /mat3/.test( type ) ) return 48;
|
|
278
|
+
if ( /mat4/.test( type ) ) return 64;
|
|
279
|
+
|
|
280
|
+
console.error( 'THREE.TSL: Unsupported type:', type );
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
|
|
239
284
|
/**
|
|
240
285
|
* Returns the data type for the given value.
|
|
241
286
|
*
|
|
@@ -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;
|