@needle-tools/three 0.169.20-experimental.0 → 0.183.2-canary.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/LICENSE +1 -1
- package/README.md +5 -6
- package/build/three.cjs +54184 -56703
- package/build/three.core.js +59506 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +11645 -73000
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +648 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +53912 -51652
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +53888 -51806
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +5 -15
- package/examples/jsm/animation/AnimationClipCreator.js +58 -6
- package/examples/jsm/animation/CCDIKSolver.js +152 -45
- package/examples/jsm/capabilities/WebGL.js +28 -29
- package/examples/jsm/capabilities/WebGPU.js +19 -17
- package/examples/jsm/controls/ArcballControls.js +474 -178
- package/examples/jsm/controls/DragControls.js +100 -58
- package/examples/jsm/controls/FirstPersonControls.js +116 -6
- package/examples/jsm/controls/FlyControls.js +50 -2
- package/examples/jsm/controls/MapControls.js +96 -8
- package/examples/jsm/controls/OrbitControls.js +496 -57
- package/examples/jsm/controls/PointerLockControls.js +115 -22
- package/examples/jsm/controls/TrackballControls.js +166 -14
- package/examples/jsm/controls/TransformControls.js +336 -26
- package/examples/jsm/csm/CSM.js +232 -18
- package/examples/jsm/csm/CSMFrustum.js +61 -4
- package/examples/jsm/csm/CSMHelper.js +50 -0
- package/examples/jsm/csm/CSMShader.js +13 -1
- package/examples/jsm/csm/CSMShadowNode.js +599 -0
- package/examples/jsm/curves/CurveExtras.js +303 -31
- package/examples/jsm/curves/NURBSCurve.js +91 -16
- package/examples/jsm/curves/NURBSSurface.js +52 -6
- package/examples/jsm/curves/NURBSUtils.js +102 -112
- package/examples/jsm/curves/NURBSVolume.js +24 -4
- package/examples/jsm/effects/AnaglyphEffect.js +134 -7
- package/examples/jsm/effects/AsciiEffect.js +69 -22
- package/examples/jsm/effects/OutlineEffect.js +61 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +30 -0
- package/examples/jsm/effects/StereoEffect.js +31 -0
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/DebugEnvironment.js +50 -0
- package/examples/jsm/environments/RoomEnvironment.js +83 -42
- package/examples/jsm/exporters/DRACOExporter.js +56 -14
- package/examples/jsm/exporters/EXRExporter.js +40 -9
- package/examples/jsm/exporters/GLTFExporter.js +502 -169
- package/examples/jsm/exporters/OBJExporter.js +21 -1
- package/examples/jsm/exporters/PLYExporter.js +44 -12
- package/examples/jsm/exporters/STLExporter.js +27 -5
- package/examples/jsm/exporters/USDZExporter.js +781 -291
- package/examples/jsm/geometries/BoxLineGeometry.js +23 -0
- package/examples/jsm/geometries/ConvexGeometry.js +19 -0
- package/examples/jsm/geometries/DecalGeometry.js +91 -30
- package/examples/jsm/geometries/ParametricFunctions.js +100 -0
- package/examples/jsm/geometries/ParametricGeometry.js +38 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
- package/examples/jsm/geometries/TeapotGeometry.js +23 -38
- package/examples/jsm/geometries/TextGeometry.js +48 -29
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelper.js +36 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +38 -1
- package/examples/jsm/helpers/OctreeHelper.js +36 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
- package/examples/jsm/helpers/TextureHelper.js +28 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
- package/examples/jsm/helpers/ViewHelper.js +181 -9
- package/examples/jsm/inspector/Inspector.js +487 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Parameters.js +348 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +1975 -0
- package/examples/jsm/inspector/ui/Style.js +1613 -0
- package/examples/jsm/inspector/ui/Tab.js +233 -0
- package/examples/jsm/inspector/ui/Values.js +439 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +43 -12
- package/examples/jsm/interactive/InteractiveGroup.js +170 -52
- package/examples/jsm/interactive/SelectionBox.js +106 -9
- package/examples/jsm/interactive/SelectionHelper.js +76 -30
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +76 -58
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +42 -0
- package/examples/jsm/lights/LightProbeGenerator.js +44 -7
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +50 -14
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +16 -0
- package/examples/jsm/lines/Line2.js +41 -4
- package/examples/jsm/lines/LineGeometry.js +80 -2
- package/examples/jsm/lines/LineMaterial.js +105 -5
- package/examples/jsm/lines/LineSegments2.js +54 -4
- package/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
- package/examples/jsm/lines/Wireframe.js +41 -4
- package/examples/jsm/lines/WireframeGeometry2.js +27 -2
- package/examples/jsm/lines/webgpu/Line2.js +28 -2
- package/examples/jsm/lines/webgpu/LineSegments2.js +59 -24
- package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
- package/examples/jsm/loaders/3DMLoader.js +78 -6
- package/examples/jsm/loaders/3MFLoader.js +148 -7
- package/examples/jsm/loaders/AMFLoader.js +34 -14
- package/examples/jsm/loaders/BVHLoader.js +59 -12
- package/examples/jsm/loaders/ColladaLoader.js +61 -4027
- package/examples/jsm/loaders/DDSLoader.js +68 -1
- package/examples/jsm/loaders/DRACOLoader.js +146 -22
- package/examples/jsm/loaders/EXRLoader.js +255 -34
- package/examples/jsm/loaders/FBXLoader.js +80 -42
- package/examples/jsm/loaders/FontLoader.js +83 -6
- package/examples/jsm/loaders/GCodeLoader.js +71 -14
- package/examples/jsm/loaders/GLTFLoader.js +381 -263
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/IESLoader.js +42 -0
- package/examples/jsm/loaders/KMZLoader.js +39 -6
- package/examples/jsm/loaders/KTX2Loader.js +124 -48
- package/examples/jsm/loaders/KTXLoader.js +31 -10
- package/examples/jsm/loaders/LDrawLoader.js +192 -145
- package/examples/jsm/loaders/LUT3dlLoader.js +47 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +46 -9
- package/examples/jsm/loaders/LUTImageLoader.js +79 -38
- package/examples/jsm/loaders/LWOLoader.js +54 -59
- package/examples/jsm/loaders/LottieLoader.js +54 -1
- package/examples/jsm/loaders/MD2Loader.js +37 -1
- package/examples/jsm/loaders/MDDLoader.js +57 -12
- package/examples/jsm/loaders/MTLLoader.js +60 -35
- package/examples/jsm/loaders/MaterialXLoader.js +268 -34
- package/examples/jsm/loaders/NRRDLoader.js +40 -8
- package/examples/jsm/loaders/OBJLoader.js +51 -2
- package/examples/jsm/loaders/PCDLoader.js +173 -21
- package/examples/jsm/loaders/PDBLoader.js +41 -2
- package/examples/jsm/loaders/PLYLoader.js +70 -39
- package/examples/jsm/loaders/PVRLoader.js +25 -6
- package/examples/jsm/loaders/RGBELoader.js +6 -438
- package/examples/jsm/loaders/STLLoader.js +48 -38
- package/examples/jsm/loaders/SVGLoader.js +119 -25
- package/examples/jsm/loaders/TDSLoader.js +92 -74
- package/examples/jsm/loaders/TGALoader.js +23 -2
- package/examples/jsm/loaders/TIFFLoader.js +23 -0
- package/examples/jsm/loaders/TTFLoader.js +50 -3
- package/examples/jsm/loaders/USDLoader.js +279 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -858
- package/examples/jsm/loaders/UltraHDRLoader.js +338 -166
- package/examples/jsm/loaders/VOXLoader.js +688 -87
- package/examples/jsm/loaders/VRMLLoader.js +121 -12
- package/examples/jsm/loaders/VTKLoader.js +77 -25
- package/examples/jsm/loaders/XYZLoader.js +36 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +77 -77
- package/examples/jsm/loaders/usd/USDAParser.js +822 -0
- package/examples/jsm/loaders/usd/USDCParser.js +1852 -0
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/Capsule.js +91 -14
- package/examples/jsm/math/ColorConverter.js +22 -0
- package/examples/jsm/math/ColorSpaces.js +74 -2
- package/examples/jsm/math/ConvexHull.js +517 -93
- package/examples/jsm/math/ImprovedNoise.js +32 -15
- package/examples/jsm/math/Lut.js +113 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +78 -13
- package/examples/jsm/math/OBB.js +141 -29
- package/examples/jsm/math/Octree.js +283 -7
- package/examples/jsm/math/SimplexNoise.js +68 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +96 -20
- package/examples/jsm/misc/Gyroscope.js +12 -0
- package/examples/jsm/misc/MD2Character.js +117 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +175 -11
- package/examples/jsm/misc/MorphAnimMesh.js +44 -0
- package/examples/jsm/misc/MorphBlendMesh.js +103 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +100 -54
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
- package/examples/jsm/misc/RollerCoaster.js +57 -0
- package/examples/jsm/misc/TubePainter.js +437 -40
- package/examples/jsm/misc/Volume.js +123 -76
- package/examples/jsm/misc/VolumeSlice.js +95 -49
- package/examples/jsm/modifiers/CurveModifier.js +66 -38
- package/examples/jsm/modifiers/CurveModifierGPU.js +42 -19
- package/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +24 -10
- package/examples/jsm/modifiers/TessellateModifier.js +35 -2
- package/examples/jsm/objects/GroundedSkybox.js +25 -6
- package/examples/jsm/objects/Lensflare.js +94 -2
- package/examples/jsm/objects/LensflareMesh.js +64 -10
- package/examples/jsm/objects/MarchingCubes.js +90 -5
- package/examples/jsm/objects/Reflector.js +76 -2
- package/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
- package/examples/jsm/objects/Refractor.js +62 -0
- package/examples/jsm/objects/ShadowMesh.js +54 -4
- package/examples/jsm/objects/Sky.js +106 -16
- package/examples/jsm/objects/SkyMesh.js +211 -38
- package/examples/jsm/objects/Water.js +49 -8
- package/examples/jsm/objects/Water2.js +49 -7
- package/examples/jsm/objects/Water2Mesh.js +50 -9
- package/examples/jsm/objects/WaterMesh.js +136 -43
- package/examples/jsm/physics/AmmoPhysics.js +60 -7
- package/examples/jsm/physics/JoltPhysics.js +65 -12
- package/examples/jsm/physics/RapierPhysics.js +217 -21
- package/examples/jsm/postprocessing/AfterimagePass.js +110 -29
- package/examples/jsm/postprocessing/BloomPass.js +128 -26
- package/examples/jsm/postprocessing/BokehPass.js +99 -22
- package/examples/jsm/postprocessing/ClearPass.js +54 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +59 -10
- package/examples/jsm/postprocessing/EffectComposer.js +140 -6
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +54 -5
- package/examples/jsm/postprocessing/GTAOPass.js +202 -57
- package/examples/jsm/postprocessing/GlitchPass.js +86 -34
- package/examples/jsm/postprocessing/HalftonePass.js +65 -10
- package/examples/jsm/postprocessing/LUTPass.js +38 -8
- package/examples/jsm/postprocessing/MaskPass.js +91 -0
- package/examples/jsm/postprocessing/OutlinePass.js +272 -135
- package/examples/jsm/postprocessing/OutputPass.js +65 -14
- package/examples/jsm/postprocessing/Pass.js +100 -4
- package/examples/jsm/postprocessing/RenderPass.js +94 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +120 -21
- package/examples/jsm/postprocessing/SAOPass.js +128 -55
- package/examples/jsm/postprocessing/SMAAPass.js +106 -75
- package/examples/jsm/postprocessing/SSAARenderPass.js +118 -35
- package/examples/jsm/postprocessing/SSAOPass.js +173 -60
- package/examples/jsm/postprocessing/SSRPass.js +268 -53
- package/examples/jsm/postprocessing/SavePass.js +69 -16
- package/examples/jsm/postprocessing/ShaderPass.js +65 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +79 -24
- package/examples/jsm/postprocessing/TexturePass.js +72 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +168 -59
- package/examples/jsm/renderers/CSS2DRenderer.js +98 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +111 -7
- package/examples/jsm/renderers/Projector.js +288 -32
- package/examples/jsm/renderers/SVGRenderer.js +323 -61
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +3 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +5 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
- package/examples/jsm/shaders/AfterimageShader.js +8 -3
- package/examples/jsm/shaders/BasicShader.js +8 -1
- package/examples/jsm/shaders/BleachBypassShader.js +10 -3
- package/examples/jsm/shaders/BlendShader.js +8 -1
- package/examples/jsm/shaders/BokehShader.js +9 -3
- package/examples/jsm/shaders/BokehShader2.js +11 -4
- package/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
- package/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
- package/examples/jsm/shaders/ColorifyShader.js +8 -1
- package/examples/jsm/shaders/ConvolutionShader.js +9 -38
- package/examples/jsm/shaders/CopyShader.js +8 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +10 -3
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
- package/examples/jsm/shaders/DigitalGlitch.js +10 -7
- package/examples/jsm/shaders/DotScreenShader.js +8 -3
- package/examples/jsm/shaders/ExposureShader.js +8 -1
- package/examples/jsm/shaders/FXAAShader.js +233 -221
- package/examples/jsm/shaders/FilmShader.js +13 -0
- package/examples/jsm/shaders/FocusShader.js +8 -3
- package/examples/jsm/shaders/FreiChenShader.js +10 -3
- package/examples/jsm/shaders/GTAOShader.js +55 -45
- package/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
- package/examples/jsm/shaders/HalftoneShader.js +24 -4
- package/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
- package/examples/jsm/shaders/HueSaturationShader.js +10 -3
- package/examples/jsm/shaders/KaleidoShader.js +11 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +8 -4
- package/examples/jsm/shaders/LuminosityShader.js +8 -2
- package/examples/jsm/shaders/MirrorShader.js +10 -4
- package/examples/jsm/shaders/NormalMapShader.js +7 -2
- package/examples/jsm/shaders/OutputShader.js +19 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +30 -17
- package/examples/jsm/shaders/RGBShiftShader.js +8 -1
- package/examples/jsm/shaders/SAOShader.js +27 -5
- package/examples/jsm/shaders/SMAAShader.js +24 -1
- package/examples/jsm/shaders/SSAOShader.js +37 -6
- package/examples/jsm/shaders/SSRShader.js +32 -6
- package/examples/jsm/shaders/SepiaShader.js +8 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +9 -3
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
- package/examples/jsm/shaders/TechnicolorShader.js +10 -4
- package/examples/jsm/shaders/ToonShader.js +29 -6
- package/examples/jsm/shaders/TriangleBlurShader.js +9 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -6
- package/examples/jsm/shaders/VelocityShader.js +8 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +9 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
- package/examples/jsm/shaders/VignetteShader.js +8 -3
- package/examples/jsm/shaders/VolumeShader.js +11 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +11 -0
- package/examples/jsm/textures/FlakesTexture.js +14 -0
- package/examples/jsm/transpiler/AST.js +436 -31
- package/examples/jsm/transpiler/GLSLDecoder.js +380 -135
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -1
- package/examples/jsm/transpiler/TSLEncoder.js +363 -97
- package/examples/jsm/transpiler/Transpiler.js +50 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +244 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +11 -4
- package/examples/jsm/tsl/display/BloomNode.js +534 -0
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
- package/examples/jsm/tsl/display/FXAANode.js +365 -0
- package/examples/jsm/tsl/display/FilmNode.js +101 -0
- package/examples/jsm/tsl/display/GTAONode.js +571 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +389 -0
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +279 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +762 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +768 -0
- package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +120 -49
- package/examples/jsm/tsl/display/SSGINode.js +642 -0
- package/examples/jsm/tsl/display/SSRNode.js +656 -0
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +9 -2
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +61 -19
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
- package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +48 -12
- package/examples/jsm/tsl/display/TRAANode.js +726 -0
- package/examples/jsm/tsl/display/TransitionNode.js +141 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +54 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
- package/examples/jsm/tsl/math/Bayer.js +73 -0
- 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 +70 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +91 -29
- package/examples/jsm/utils/CameraUtils.js +15 -6
- package/examples/jsm/utils/GeometryCompressionUtils.js +23 -30
- package/examples/jsm/utils/GeometryUtils.js +32 -27
- package/examples/jsm/utils/LDrawUtils.js +14 -5
- package/examples/jsm/utils/SceneOptimizer.js +458 -0
- package/examples/jsm/utils/SceneUtils.js +53 -3
- package/examples/jsm/utils/ShadowMapViewer.js +72 -33
- package/examples/jsm/utils/ShadowMapViewerGPU.js +61 -29
- package/examples/jsm/utils/SkeletonUtils.js +48 -0
- package/examples/jsm/utils/SortUtils.js +17 -5
- package/examples/jsm/utils/UVsDebug.js +12 -4
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +16 -0
- package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +20 -2
- package/examples/jsm/utils/WorkerPool.js +67 -2
- package/examples/jsm/webxr/ARButton.js +19 -0
- package/examples/jsm/webxr/OculusHandModel.js +84 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
- package/examples/jsm/webxr/Text2D.js +20 -6
- package/examples/jsm/webxr/VRButton.js +31 -0
- package/examples/jsm/webxr/XRButton.js +23 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +94 -3
- package/examples/jsm/webxr/XREstimatedLight.js +35 -4
- package/examples/jsm/webxr/XRHandMeshModel.js +37 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +96 -6
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
- package/examples/jsm/webxr/XRPlanes.js +18 -0
- package/package.json +29 -37
- package/src/Three.Core.js +198 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +641 -0
- package/src/Three.WebGPU.Nodes.js +14 -186
- package/src/Three.WebGPU.js +16 -186
- package/src/Three.js +2 -197
- package/src/animation/AnimationAction.js +263 -31
- package/src/animation/AnimationClip.js +162 -7
- package/src/animation/AnimationMixer.js +105 -15
- package/src/animation/AnimationObjectGroup.js +45 -21
- package/src/animation/AnimationUtils.js +163 -24
- package/src/animation/KeyframeTrack.js +191 -17
- package/src/animation/PropertyBinding.js +91 -16
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/Audio.js +386 -8
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +94 -13
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +37 -0
- package/src/cameras/Camera.js +61 -0
- package/src/cameras/CubeCamera.js +86 -0
- package/src/cameras/OrthographicCamera.js +110 -1
- package/src/cameras/PerspectiveCamera.js +174 -35
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +1546 -11
- package/src/core/BufferAttribute.js +417 -3
- package/src/core/BufferGeometry.js +407 -22
- package/src/core/Clock.js +69 -8
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/GLBufferAttribute.js +113 -2
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +141 -7
- package/src/core/InterleavedBufferAttribute.js +200 -2
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +673 -26
- package/src/core/Raycaster.js +136 -2
- package/src/core/RenderTarget.js +256 -27
- package/src/core/RenderTarget3D.js +48 -0
- package/src/core/Timer.js +184 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +89 -1
- package/src/extras/DataUtils.js +50 -9
- package/src/extras/Earcut.js +18 -779
- package/src/extras/ImageUtils.js +22 -14
- package/src/extras/PMREMGenerator.js +316 -67
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +101 -15
- package/src/extras/core/Curve.js +156 -55
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +34 -2
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +80 -4
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/BoxGeometry.js +39 -0
- package/src/geometries/CapsuleGeometry.js +196 -11
- package/src/geometries/CircleGeometry.js +41 -0
- package/src/geometries/ConeGeometry.js +39 -0
- package/src/geometries/CylinderGeometry.js +42 -2
- package/src/geometries/DodecahedronGeometry.js +33 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +148 -52
- package/src/geometries/IcosahedronGeometry.js +33 -0
- package/src/geometries/LatheGeometry.js +44 -3
- package/src/geometries/OctahedronGeometry.js +33 -0
- package/src/geometries/PlaneGeometry.js +35 -0
- package/src/geometries/PolyhedronGeometry.js +30 -1
- package/src/geometries/RingGeometry.js +37 -0
- package/src/geometries/ShapeGeometry.js +38 -0
- package/src/geometries/SphereGeometry.js +38 -0
- package/src/geometries/TetrahedronGeometry.js +33 -0
- package/src/geometries/TorusGeometry.js +44 -3
- package/src/geometries/TorusKnotGeometry.js +39 -0
- package/src/geometries/TubeGeometry.js +50 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +62 -5
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +103 -27
- package/src/helpers/DirectionalLightHelper.js +55 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +42 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -24
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +73 -7
- package/src/helpers/SpotLightHelper.js +43 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +70 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +42 -0
- package/src/lights/Light.js +37 -11
- package/src/lights/LightProbe.js +37 -9
- package/src/lights/LightShadow.js +202 -7
- package/src/lights/PointLight.js +74 -0
- package/src/lights/PointLightShadow.js +15 -80
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +124 -1
- package/src/lights/SpotLightShadow.js +33 -3
- package/src/lights/webgpu/IESSpotLight.js +22 -0
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/AnimationLoader.js +34 -2
- package/src/loaders/AudioLoader.js +34 -2
- package/src/loaders/BufferGeometryLoader.js +38 -13
- package/src/loaders/Cache.js +75 -2
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +45 -4
- package/src/loaders/FileLoader.js +85 -5
- package/src/loaders/ImageBitmapLoader.js +113 -11
- package/src/loaders/ImageLoader.js +85 -8
- package/src/loaders/Loader.js +150 -0
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +187 -0
- package/src/loaders/MaterialLoader.js +62 -3
- package/src/loaders/ObjectLoader.js +131 -31
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +68 -4
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -1
- package/src/materials/Material.js +502 -8
- package/src/materials/MeshBasicMaterial.js +168 -2
- package/src/materials/MeshDepthMaterial.js +94 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +283 -0
- package/src/materials/MeshMatcapMaterial.js +164 -0
- package/src/materials/MeshNormalMaterial.js +114 -0
- package/src/materials/MeshPhongMaterial.js +298 -0
- package/src/materials/MeshPhysicalMaterial.js +296 -4
- package/src/materials/MeshStandardMaterial.js +300 -2
- package/src/materials/MeshToonMaterial.js +219 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +234 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +158 -53
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +81 -6
- package/src/materials/nodes/MeshBasicNodeMaterial.js +59 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +23 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +27 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +276 -3
- package/src/materials/nodes/MeshSSSNodeMaterial.js +98 -10
- package/src/materials/nodes/MeshStandardNodeMaterial.js +83 -4
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +789 -74
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +180 -11
- package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +86 -23
- package/src/materials/nodes/VolumeNodeMaterial.js +57 -84
- package/src/materials/nodes/manager/NodeMaterialObserver.js +329 -12
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +271 -0
- package/src/math/Color.js +355 -11
- package/src/math/ColorManagement.js +158 -92
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +139 -5
- package/src/math/Frustum.js +108 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +221 -2
- package/src/math/MathUtils.js +408 -20
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +489 -94
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +322 -90
- package/src/math/Ray.js +162 -0
- package/src/math/Sphere.js +175 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -15
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +91 -88
- package/src/nodes/TSL.js +32 -38
- package/src/nodes/accessors/AccessorsUtils.js +37 -9
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +49 -14
- package/src/nodes/accessors/Bitangent.js +82 -13
- package/src/nodes/accessors/BufferAttributeNode.js +269 -8
- package/src/nodes/accessors/BufferNode.js +91 -2
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +400 -10
- package/src/nodes/accessors/ClippingNode.js +149 -45
- package/src/nodes/accessors/CubeTextureNode.js +137 -7
- package/src/nodes/accessors/InstanceNode.js +245 -40
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +88 -0
- package/src/nodes/accessors/MaterialNode.js +355 -13
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +52 -14
- package/src/nodes/accessors/ModelNode.js +117 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -39
- package/src/nodes/accessors/MorphNode.js +73 -26
- package/src/nodes/accessors/Normal.js +174 -19
- package/src/nodes/accessors/Object3DNode.js +146 -12
- package/src/nodes/accessors/PointUVNode.js +25 -0
- package/src/nodes/accessors/Position.js +119 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +190 -4
- package/src/nodes/accessors/ReferenceNode.js +223 -8
- package/src/nodes/accessors/ReflectVector.js +29 -3
- package/src/nodes/accessors/RendererReferenceNode.js +45 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +180 -43
- package/src/nodes/accessors/StorageBufferNode.js +278 -26
- package/src/nodes/accessors/StorageTextureNode.js +205 -12
- package/src/nodes/accessors/Tangent.js +48 -10
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +104 -11
- package/src/nodes/accessors/TextureBicubic.js +31 -4
- package/src/nodes/accessors/TextureNode.js +564 -52
- package/src/nodes/accessors/TextureSizeNode.js +42 -1
- package/src/nodes/accessors/UV.js +9 -1
- package/src/nodes/accessors/UniformArrayNode.js +226 -34
- package/src/nodes/accessors/UserDataNode.js +46 -2
- package/src/nodes/accessors/VelocityNode.js +93 -3
- package/src/nodes/accessors/VertexColorNode.js +39 -4
- package/src/nodes/code/CodeNode.js +101 -8
- package/src/nodes/code/ExpressionNode.js +29 -2
- package/src/nodes/code/FunctionCallNode.js +98 -10
- package/src/nodes/code/FunctionNode.js +69 -2
- package/src/nodes/core/ArrayNode.js +174 -0
- package/src/nodes/core/AssignNode.js +80 -9
- package/src/nodes/core/AttributeNode.js +47 -4
- package/src/nodes/core/BypassNode.js +47 -3
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +220 -14
- package/src/nodes/core/IndexNode.js +72 -7
- package/src/nodes/core/InputNode.js +50 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/IsolateNode.js +133 -0
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +113 -2
- package/src/nodes/core/Node.js +595 -36
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1840 -121
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +153 -24
- package/src/nodes/core/NodeFunction.js +48 -1
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +13 -1
- package/src/nodes/core/NodeUniform.js +53 -1
- package/src/nodes/core/NodeUtils.js +201 -51
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +47 -1
- package/src/nodes/core/OutputStructNode.js +54 -12
- package/src/nodes/core/ParameterNode.js +60 -2
- package/src/nodes/core/PropertyNode.js +286 -7
- package/src/nodes/core/StackNode.js +337 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +134 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +126 -6
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +85 -7
- package/src/nodes/core/UniformNode.js +163 -16
- package/src/nodes/core/VarNode.js +317 -10
- package/src/nodes/core/VaryingNode.js +115 -13
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +171 -0
- package/src/nodes/display/BumpMapNode.js +38 -2
- package/src/nodes/display/ColorAdjustment.js +118 -6
- package/src/nodes/display/ColorSpaceFunctions.js +22 -6
- package/src/nodes/display/ColorSpaceNode.js +97 -47
- package/src/nodes/display/FrontFacingNode.js +64 -7
- package/src/nodes/display/NormalMapNode.js +101 -54
- package/src/nodes/display/PassNode.js +690 -33
- package/src/nodes/display/RenderOutputNode.js +94 -4
- package/src/nodes/display/ScreenNode.js +138 -27
- package/src/nodes/display/ToneMappingFunctions.js +62 -10
- package/src/nodes/display/ToneMappingNode.js +88 -8
- package/src/nodes/display/ToonOutlinePassNode.js +84 -4
- package/src/nodes/display/ViewportDepthNode.js +227 -10
- package/src/nodes/display/ViewportDepthTextureNode.js +39 -5
- package/src/nodes/display/ViewportSharedTextureNode.js +35 -1
- package/src/nodes/display/ViewportTextureNode.js +171 -7
- package/src/nodes/fog/Fog.js +97 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/BasicLightingModel.js +28 -6
- package/src/nodes/functions/PhongLightingModel.js +36 -6
- package/src/nodes/functions/PhysicalLightingModel.js +336 -91
- package/src/nodes/functions/ShadowMaskModel.js +30 -3
- package/src/nodes/functions/ToonLightingModel.js +21 -2
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/geometry/RangeNode.js +97 -8
- package/src/nodes/gpgpu/AtomicFunctionNode.js +198 -23
- package/src/nodes/gpgpu/BarrierNode.js +52 -3
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +135 -6
- package/src/nodes/gpgpu/ComputeNode.js +212 -16
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +143 -9
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +186 -399
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +12 -11
- package/src/nodes/lighting/EnvironmentNode.js +59 -19
- package/src/nodes/lighting/HemisphereLightNode.js +33 -2
- package/src/nodes/lighting/IESSpotLightNode.js +13 -1
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +11 -3
- package/src/nodes/lighting/LightingContextNode.js +52 -4
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +238 -35
- package/src/nodes/lighting/PointLightNode.js +60 -25
- package/src/nodes/lighting/PointShadowNode.js +325 -0
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/RectAreaLightNode.js +50 -14
- package/src/nodes/lighting/ShadowBaseNode.js +81 -0
- package/src/nodes/lighting/ShadowFilterNode.js +264 -0
- package/src/nodes/lighting/ShadowNode.js +867 -0
- package/src/nodes/lighting/SpotLightNode.js +99 -18
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +110 -21
- package/src/nodes/math/Hash.js +8 -0
- package/src/nodes/math/MathNode.js +820 -97
- package/src/nodes/math/MathUtils.js +47 -1
- package/src/nodes/math/OperatorNode.js +517 -84
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/TriNoise3D.js +17 -7
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +180 -23
- package/src/nodes/pmrem/PMREMUtils.js +114 -5
- package/src/nodes/procedural/Checker.js +8 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +10 -4
- package/src/nodes/tsl/TSLCore.js +732 -160
- package/src/nodes/utils/ArrayElementNode.js +55 -4
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +79 -2
- package/src/nodes/utils/DebugNode.js +83 -0
- package/src/nodes/utils/Discard.js +18 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +118 -0
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +91 -22
- package/src/nodes/utils/JoinNode.js +57 -4
- package/src/nodes/utils/LoopNode.js +193 -55
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -1
- package/src/nodes/utils/MemberNode.js +120 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +30 -1
- package/src/nodes/utils/PostProcessingUtils.js +154 -0
- package/src/nodes/utils/RTTNode.js +165 -9
- package/src/nodes/utils/ReflectorNode.js +407 -21
- package/src/nodes/utils/RemapNode.js +81 -2
- package/src/nodes/utils/RotateNode.js +41 -1
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +66 -3
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/SpriteUtils.js +16 -0
- package/src/nodes/utils/StorageArrayElementNode.js +56 -3
- package/src/nodes/utils/Timer.js +26 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/nodes/utils/UVUtils.js +48 -0
- package/src/nodes/utils/ViewportUtils.js +12 -0
- package/src/objects/BatchedMesh.js +798 -309
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +131 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +90 -7
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +20 -1
- package/src/objects/Mesh.js +84 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +120 -5
- package/src/objects/SkinnedMesh.js +102 -6
- package/src/objects/Sprite.js +65 -1
- package/src/renderers/WebGL3DRenderTarget.js +26 -0
- package/src/renderers/WebGLArrayRenderTarget.js +26 -0
- package/src/renderers/WebGLCubeRenderTarget.js +41 -5
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +1016 -278
- package/src/renderers/common/Animation.js +123 -14
- package/src/renderers/common/Attributes.js +41 -1
- package/src/renderers/common/Backend.js +623 -44
- package/src/renderers/common/Background.js +99 -16
- package/src/renderers/common/BindGroup.js +37 -2
- package/src/renderers/common/Binding.js +46 -0
- package/src/renderers/common/Bindings.js +211 -20
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +89 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +73 -10
- package/src/renderers/common/ClippingContext.js +172 -87
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +77 -7
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +163 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +81 -36
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Lighting.js +57 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +150 -7
- package/src/renderers/common/PostProcessing.js +22 -84
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +63 -6
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +40 -10
- package/src/renderers/common/RenderContext.js +219 -4
- package/src/renderers/common/RenderContexts.js +54 -17
- package/src/renderers/common/RenderList.js +233 -24
- package/src/renderers/common/RenderLists.js +46 -6
- package/src/renderers/common/RenderObject.js +548 -46
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +133 -15
- package/src/renderers/common/RenderPipeline.js +216 -6
- package/src/renderers/common/Renderer.js +2155 -332
- package/src/renderers/common/RendererUtils.js +200 -0
- package/src/renderers/common/SampledTexture.js +99 -39
- package/src/renderers/common/Sampler.js +148 -1
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageBuffer.js +38 -2
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +65 -0
- package/src/renderers/common/Textures.js +273 -57
- package/src/renderers/common/TimestampQueryPool.js +163 -0
- package/src/renderers/common/Uniform.js +233 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +235 -26
- package/src/renderers/common/XRManager.js +1677 -0
- package/src/renderers/common/XRRenderTarget.js +91 -0
- package/src/renderers/common/extras/PMREMGenerator.js +371 -108
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +95 -17
- package/src/renderers/common/nodes/NodeManager.js +852 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +84 -8
- package/src/renderers/common/nodes/NodeSampler.js +41 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +48 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +81 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +154 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +230 -181
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +14 -2
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -5
- package/src/renderers/shaders/UniformsLib.js +2 -7
- package/src/renderers/shaders/UniformsUtils.js +21 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLBackground.js +30 -5
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +7 -14
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -35
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +87 -148
- package/src/renderers/webgl/WebGLPrograms.js +53 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +204 -28
- package/src/renderers/webgl/WebGLState.js +88 -56
- package/src/renderers/webgl/WebGLTextures.js +293 -59
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +7 -5
- package/src/renderers/webgl-fallback/WebGLBackend.js +1416 -293
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +785 -92
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +62 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +3 -3
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +584 -20
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +468 -80
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +72 -24
- package/src/renderers/webgpu/WebGPUBackend.js +1517 -428
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +31 -4
- package/src/renderers/webgpu/WebGPURenderer.js +55 -4
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +23 -16
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +37 -42
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +1335 -241
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +32 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +144 -20
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +460 -116
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -4
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +283 -69
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +225 -178
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +583 -191
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +150 -28
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +52 -7
- package/src/renderers/webxr/WebXRManager.js +275 -15
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +88 -0
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +79 -2
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -11
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +106 -4
- package/src/textures/Texture.js +488 -6
- package/src/textures/VideoFrameTexture.js +72 -0
- package/src/textures/VideoTexture.js +78 -6
- package/src/utils.js +322 -3
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -153
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +0 -729
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/RGBMLoader.js +0 -1081
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -432
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -144
- package/examples/jsm/misc/Timer.js +0 -128
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/GodRaysShader.js +0 -321
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/accessors/SceneNode.js +0 -55
- package/src/nodes/code/ScriptableNode.js +0 -505
- package/src/nodes/code/ScriptableValueNode.js +0 -170
- package/src/nodes/core/CacheNode.js +0 -50
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -158
- package/src/nodes/display/AnaglyphPassNode.js +0 -67
- package/src/nodes/display/AnamorphicNode.js +0 -151
- package/src/nodes/display/BlendMode.js +0 -54
- package/src/nodes/display/BloomNode.js +0 -341
- package/src/nodes/display/DenoiseNode.js +0 -204
- package/src/nodes/display/DepthOfFieldNode.js +0 -124
- package/src/nodes/display/DotScreenNode.js +0 -66
- package/src/nodes/display/FXAANode.js +0 -332
- package/src/nodes/display/FilmNode.js +0 -56
- package/src/nodes/display/GTAONode.js +0 -331
- package/src/nodes/display/GaussianBlurNode.js +0 -213
- package/src/nodes/display/Lut3DNode.js +0 -57
- package/src/nodes/display/MotionBlur.js +0 -25
- package/src/nodes/display/ParallaxBarrierPassNode.js +0 -58
- package/src/nodes/display/PixelationPassNode.js +0 -213
- package/src/nodes/display/PosterizeNode.js +0 -33
- package/src/nodes/display/RGBShiftNode.js +0 -53
- package/src/nodes/display/StereoCompositePassNode.js +0 -110
- package/src/nodes/display/TransitionNode.js +0 -80
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/EquirectUVNode.js +0 -36
- package/src/nodes/utils/MatcapUVNode.js +0 -33
- package/src/nodes/utils/OscNode.js +0 -85
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -45
- package/src/nodes/utils/TimerNode.js +0 -97
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -64
- package/src/renderers/common/nodes/Nodes.js +0 -534
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -136
package/src/nodes/core/Node.js
CHANGED
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import { NodeUpdateType } from './constants.js';
|
|
2
|
-
import {
|
|
2
|
+
import { hash, hashArray, hashString } from './NodeUtils.js';
|
|
3
3
|
|
|
4
4
|
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
5
5
|
import { MathUtils } from '../../math/MathUtils.js';
|
|
6
|
+
import { warn, error } from '../../utils.js';
|
|
7
|
+
|
|
8
|
+
import StackTrace from './StackTrace.js';
|
|
9
|
+
|
|
10
|
+
const _parentBuildStage = {
|
|
11
|
+
analyze: 'setup',
|
|
12
|
+
generate: 'analyze'
|
|
13
|
+
};
|
|
6
14
|
|
|
7
15
|
let _nodeId = 0;
|
|
8
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Base class for all nodes.
|
|
19
|
+
*
|
|
20
|
+
* @augments EventDispatcher
|
|
21
|
+
*/
|
|
9
22
|
class Node extends EventDispatcher {
|
|
10
23
|
|
|
11
24
|
static get type() {
|
|
@@ -14,31 +27,146 @@ class Node extends EventDispatcher {
|
|
|
14
27
|
|
|
15
28
|
}
|
|
16
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Constructs a new node.
|
|
32
|
+
*
|
|
33
|
+
* @param {?string} nodeType - The node type.
|
|
34
|
+
*/
|
|
17
35
|
constructor( nodeType = null ) {
|
|
18
36
|
|
|
19
37
|
super();
|
|
20
38
|
|
|
39
|
+
/**
|
|
40
|
+
* The node type. This represents the result type of the node (e.g. `float` or `vec3`).
|
|
41
|
+
*
|
|
42
|
+
* @type {?string}
|
|
43
|
+
* @default null
|
|
44
|
+
*/
|
|
21
45
|
this.nodeType = nodeType;
|
|
22
46
|
|
|
47
|
+
/**
|
|
48
|
+
* The update type of the node's {@link Node#update} method. Possible values are listed in {@link NodeUpdateType}.
|
|
49
|
+
*
|
|
50
|
+
* @type {string}
|
|
51
|
+
* @default 'none'
|
|
52
|
+
*/
|
|
23
53
|
this.updateType = NodeUpdateType.NONE;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The update type of the node's {@link Node#updateBefore} method. Possible values are listed in {@link NodeUpdateType}.
|
|
57
|
+
*
|
|
58
|
+
* @type {string}
|
|
59
|
+
* @default 'none'
|
|
60
|
+
*/
|
|
24
61
|
this.updateBeforeType = NodeUpdateType.NONE;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The update type of the node's {@link Node#updateAfter} method. Possible values are listed in {@link NodeUpdateType}.
|
|
65
|
+
*
|
|
66
|
+
* @type {string}
|
|
67
|
+
* @default 'none'
|
|
68
|
+
*/
|
|
25
69
|
this.updateAfterType = NodeUpdateType.NONE;
|
|
26
70
|
|
|
71
|
+
/**
|
|
72
|
+
* The UUID of the node.
|
|
73
|
+
*
|
|
74
|
+
* @type {string}
|
|
75
|
+
* @readonly
|
|
76
|
+
*/
|
|
27
77
|
this.uuid = MathUtils.generateUUID();
|
|
28
78
|
|
|
79
|
+
/**
|
|
80
|
+
* The version of the node. The version automatically is increased when {@link Node#needsUpdate} is set to `true`.
|
|
81
|
+
*
|
|
82
|
+
* @type {number}
|
|
83
|
+
* @readonly
|
|
84
|
+
* @default 0
|
|
85
|
+
*/
|
|
29
86
|
this.version = 0;
|
|
30
87
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
88
|
+
/**
|
|
89
|
+
* The name of the node.
|
|
90
|
+
*
|
|
91
|
+
* @type {string}
|
|
92
|
+
* @default ''
|
|
93
|
+
*/
|
|
94
|
+
this.name = '';
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Whether this node is global or not. This property is relevant for the internal
|
|
98
|
+
* node caching system. All nodes which should be declared just once should
|
|
99
|
+
* set this flag to `true` (a typical example is {@link AttributeNode}).
|
|
100
|
+
*
|
|
101
|
+
* @type {boolean}
|
|
102
|
+
* @default false
|
|
103
|
+
*/
|
|
34
104
|
this.global = false;
|
|
35
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Create a list of parents for this node during the build process.
|
|
108
|
+
*
|
|
109
|
+
* @type {boolean}
|
|
110
|
+
* @default false
|
|
111
|
+
*/
|
|
112
|
+
this.parents = false;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* This flag can be used for type testing.
|
|
116
|
+
*
|
|
117
|
+
* @type {boolean}
|
|
118
|
+
* @readonly
|
|
119
|
+
* @default true
|
|
120
|
+
*/
|
|
36
121
|
this.isNode = true;
|
|
37
122
|
|
|
123
|
+
// private
|
|
124
|
+
|
|
125
|
+
this._beforeNodes = null;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* The cache key of this node.
|
|
129
|
+
*
|
|
130
|
+
* @private
|
|
131
|
+
* @type {?number}
|
|
132
|
+
* @default null
|
|
133
|
+
*/
|
|
134
|
+
this._cacheKey = null;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* The cache key's version.
|
|
138
|
+
*
|
|
139
|
+
* @private
|
|
140
|
+
* @type {number}
|
|
141
|
+
* @default 0
|
|
142
|
+
*/
|
|
143
|
+
this._cacheKeyVersion = 0;
|
|
144
|
+
|
|
38
145
|
Object.defineProperty( this, 'id', { value: _nodeId ++ } );
|
|
39
146
|
|
|
147
|
+
/**
|
|
148
|
+
* The stack trace of the node for debugging purposes.
|
|
149
|
+
*
|
|
150
|
+
* @type {?string}
|
|
151
|
+
* @default null
|
|
152
|
+
*/
|
|
153
|
+
this.stackTrace = null;
|
|
154
|
+
|
|
155
|
+
if ( Node.captureStackTrace === true ) {
|
|
156
|
+
|
|
157
|
+
this.stackTrace = new StackTrace();
|
|
158
|
+
|
|
159
|
+
}
|
|
160
|
+
|
|
40
161
|
}
|
|
41
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Set this property to `true` when the node should be regenerated.
|
|
165
|
+
*
|
|
166
|
+
* @type {boolean}
|
|
167
|
+
* @default false
|
|
168
|
+
* @param {boolean} value
|
|
169
|
+
*/
|
|
42
170
|
set needsUpdate( value ) {
|
|
43
171
|
|
|
44
172
|
if ( value === true ) {
|
|
@@ -49,70 +177,123 @@ class Node extends EventDispatcher {
|
|
|
49
177
|
|
|
50
178
|
}
|
|
51
179
|
|
|
180
|
+
/**
|
|
181
|
+
* The type of the class. The value is usually the constructor name.
|
|
182
|
+
*
|
|
183
|
+
* @type {string}
|
|
184
|
+
* @readonly
|
|
185
|
+
*/
|
|
52
186
|
get type() {
|
|
53
187
|
|
|
54
188
|
return this.constructor.type;
|
|
55
189
|
|
|
56
190
|
}
|
|
57
191
|
|
|
192
|
+
/**
|
|
193
|
+
* Convenient method for defining {@link Node#update}.
|
|
194
|
+
*
|
|
195
|
+
* @param {Function} callback - The update method.
|
|
196
|
+
* @param {string} updateType - The update type.
|
|
197
|
+
* @return {Node} A reference to this node.
|
|
198
|
+
*/
|
|
58
199
|
onUpdate( callback, updateType ) {
|
|
59
200
|
|
|
60
201
|
this.updateType = updateType;
|
|
61
|
-
this.update = callback.bind( this
|
|
202
|
+
this.update = callback.bind( this );
|
|
62
203
|
|
|
63
204
|
return this;
|
|
64
205
|
|
|
65
206
|
}
|
|
66
207
|
|
|
208
|
+
/**
|
|
209
|
+
* Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but
|
|
210
|
+
* this method automatically sets the update type to `FRAME`.
|
|
211
|
+
*
|
|
212
|
+
* @param {Function} callback - The update method.
|
|
213
|
+
* @return {Node} A reference to this node.
|
|
214
|
+
*/
|
|
67
215
|
onFrameUpdate( callback ) {
|
|
68
216
|
|
|
69
217
|
return this.onUpdate( callback, NodeUpdateType.FRAME );
|
|
70
218
|
|
|
71
219
|
}
|
|
72
220
|
|
|
221
|
+
/**
|
|
222
|
+
* Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but
|
|
223
|
+
* this method automatically sets the update type to `RENDER`.
|
|
224
|
+
*
|
|
225
|
+
* @param {Function} callback - The update method.
|
|
226
|
+
* @return {Node} A reference to this node.
|
|
227
|
+
*/
|
|
73
228
|
onRenderUpdate( callback ) {
|
|
74
229
|
|
|
75
230
|
return this.onUpdate( callback, NodeUpdateType.RENDER );
|
|
76
231
|
|
|
77
232
|
}
|
|
78
233
|
|
|
234
|
+
/**
|
|
235
|
+
* Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but
|
|
236
|
+
* this method automatically sets the update type to `OBJECT`.
|
|
237
|
+
*
|
|
238
|
+
* @param {Function} callback - The update method.
|
|
239
|
+
* @return {Node} A reference to this node.
|
|
240
|
+
*/
|
|
79
241
|
onObjectUpdate( callback ) {
|
|
80
242
|
|
|
81
243
|
return this.onUpdate( callback, NodeUpdateType.OBJECT );
|
|
82
244
|
|
|
83
245
|
}
|
|
84
246
|
|
|
247
|
+
/**
|
|
248
|
+
* Convenient method for defining {@link Node#updateReference}.
|
|
249
|
+
*
|
|
250
|
+
* @param {Function} callback - The update method.
|
|
251
|
+
* @return {Node} A reference to this node.
|
|
252
|
+
*/
|
|
85
253
|
onReference( callback ) {
|
|
86
254
|
|
|
87
|
-
this.updateReference = callback.bind( this
|
|
255
|
+
this.updateReference = callback.bind( this );
|
|
88
256
|
|
|
89
257
|
return this;
|
|
90
258
|
|
|
91
259
|
}
|
|
92
260
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
261
|
+
/**
|
|
262
|
+
* Nodes might refer to other objects like materials. This method allows to dynamically update the reference
|
|
263
|
+
* to such objects based on a given state (e.g. the current node frame or builder).
|
|
264
|
+
*
|
|
265
|
+
* @param {any} state - This method can be invocated in different contexts so `state` can refer to any object type.
|
|
266
|
+
* @return {any} The updated reference.
|
|
267
|
+
*/
|
|
101
268
|
updateReference( /*state*/ ) {
|
|
102
269
|
|
|
103
270
|
return this;
|
|
104
271
|
|
|
105
272
|
}
|
|
106
273
|
|
|
274
|
+
/**
|
|
275
|
+
* By default this method returns the value of the {@link Node#global} flag. This method
|
|
276
|
+
* can be overwritten in derived classes if an analytical way is required to determine the
|
|
277
|
+
* global cache referring to the current shader-stage.
|
|
278
|
+
*
|
|
279
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
280
|
+
* @return {boolean} Whether this node is global or not.
|
|
281
|
+
*/
|
|
107
282
|
isGlobal( /*builder*/ ) {
|
|
108
283
|
|
|
109
284
|
return this.global;
|
|
110
285
|
|
|
111
286
|
}
|
|
112
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Generator function that can be used to iterate over the child nodes.
|
|
290
|
+
*
|
|
291
|
+
* @generator
|
|
292
|
+
* @yields {Node} A child node.
|
|
293
|
+
*/
|
|
113
294
|
* getChildren() {
|
|
114
295
|
|
|
115
|
-
for ( const { childNode } of
|
|
296
|
+
for ( const { childNode } of this._getChildren() ) {
|
|
116
297
|
|
|
117
298
|
yield childNode;
|
|
118
299
|
|
|
@@ -120,12 +301,28 @@ class Node extends EventDispatcher {
|
|
|
120
301
|
|
|
121
302
|
}
|
|
122
303
|
|
|
304
|
+
/**
|
|
305
|
+
* Calling this method dispatches the `dispose` event. This event can be used
|
|
306
|
+
* to register event listeners for clean up tasks.
|
|
307
|
+
*/
|
|
123
308
|
dispose() {
|
|
124
309
|
|
|
125
310
|
this.dispatchEvent( { type: 'dispose' } );
|
|
126
311
|
|
|
127
312
|
}
|
|
128
313
|
|
|
314
|
+
/**
|
|
315
|
+
* Callback for {@link Node#traverse}.
|
|
316
|
+
*
|
|
317
|
+
* @callback traverseCallback
|
|
318
|
+
* @param {Node} node - The current node.
|
|
319
|
+
*/
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Can be used to traverse through the node's hierarchy.
|
|
323
|
+
*
|
|
324
|
+
* @param {traverseCallback} callback - A callback that is executed per node.
|
|
325
|
+
*/
|
|
129
326
|
traverse( callback ) {
|
|
130
327
|
|
|
131
328
|
callback( this );
|
|
@@ -138,13 +335,100 @@ class Node extends EventDispatcher {
|
|
|
138
335
|
|
|
139
336
|
}
|
|
140
337
|
|
|
141
|
-
|
|
338
|
+
/**
|
|
339
|
+
* Returns the child nodes of this node.
|
|
340
|
+
*
|
|
341
|
+
* @private
|
|
342
|
+
* @param {Set<Node>} [ignores=new Set()] - A set of nodes to ignore during the search to avoid circular references.
|
|
343
|
+
* @returns {Array<Object>} An array of objects describing the child nodes.
|
|
344
|
+
*/
|
|
345
|
+
_getChildren( ignores = new Set() ) {
|
|
346
|
+
|
|
347
|
+
const children = [];
|
|
348
|
+
|
|
349
|
+
// avoid circular references
|
|
350
|
+
ignores.add( this );
|
|
351
|
+
|
|
352
|
+
for ( const property of Object.getOwnPropertyNames( this ) ) {
|
|
353
|
+
|
|
354
|
+
const object = this[ property ];
|
|
355
|
+
|
|
356
|
+
// Ignore private properties and ignored nodes.
|
|
357
|
+
if ( property.startsWith( '_' ) === true || ignores.has( object ) ) continue;
|
|
358
|
+
|
|
359
|
+
if ( Array.isArray( object ) === true ) {
|
|
360
|
+
|
|
361
|
+
for ( let i = 0; i < object.length; i ++ ) {
|
|
362
|
+
|
|
363
|
+
const child = object[ i ];
|
|
364
|
+
|
|
365
|
+
if ( child && child.isNode === true ) {
|
|
366
|
+
|
|
367
|
+
children.push( { property, index: i, childNode: child } );
|
|
368
|
+
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
} else if ( object && object.isNode === true ) {
|
|
374
|
+
|
|
375
|
+
children.push( { property, childNode: object } );
|
|
376
|
+
|
|
377
|
+
} else if ( object && Object.getPrototypeOf( object ) === Object.prototype ) {
|
|
378
|
+
|
|
379
|
+
for ( const subProperty in object ) {
|
|
380
|
+
|
|
381
|
+
// Ignore private sub-properties.
|
|
382
|
+
if ( subProperty.startsWith( '_' ) === true ) continue;
|
|
383
|
+
|
|
384
|
+
const child = object[ subProperty ];
|
|
385
|
+
|
|
386
|
+
if ( child && child.isNode === true ) {
|
|
387
|
+
|
|
388
|
+
children.push( { property, index: subProperty, childNode: child } );
|
|
389
|
+
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
//
|
|
399
|
+
|
|
400
|
+
return children;
|
|
401
|
+
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Returns the cache key for this node.
|
|
406
|
+
*
|
|
407
|
+
* @param {boolean} [force=false] - When set to `true`, a recomputation of the cache key is forced.
|
|
408
|
+
* @param {Set<Node>} [ignores=null] - A set of nodes to ignore during the computation of the cache key.
|
|
409
|
+
* @return {number} The cache key of the node.
|
|
410
|
+
*/
|
|
411
|
+
getCacheKey( force = false, ignores = null ) {
|
|
142
412
|
|
|
143
413
|
force = force || this.version !== this._cacheKeyVersion;
|
|
144
414
|
|
|
145
415
|
if ( force === true || this._cacheKey === null ) {
|
|
146
416
|
|
|
147
|
-
|
|
417
|
+
if ( ignores === null ) ignores = new Set();
|
|
418
|
+
|
|
419
|
+
//
|
|
420
|
+
|
|
421
|
+
const values = [];
|
|
422
|
+
|
|
423
|
+
for ( const { property, childNode } of this._getChildren( ignores ) ) {
|
|
424
|
+
|
|
425
|
+
values.push( hashString( property.slice( 0, - 4 ) ), childNode.getCacheKey( force, ignores ) );
|
|
426
|
+
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
//
|
|
430
|
+
|
|
431
|
+
this._cacheKey = hash( hashArray( values ), this.customCacheKey() );
|
|
148
432
|
this._cacheKeyVersion = this.version;
|
|
149
433
|
|
|
150
434
|
}
|
|
@@ -153,36 +437,83 @@ class Node extends EventDispatcher {
|
|
|
153
437
|
|
|
154
438
|
}
|
|
155
439
|
|
|
440
|
+
/**
|
|
441
|
+
* Generate a custom cache key for this node.
|
|
442
|
+
*
|
|
443
|
+
* @return {number} The cache key of the node.
|
|
444
|
+
*/
|
|
445
|
+
customCacheKey() {
|
|
446
|
+
|
|
447
|
+
return this.id;
|
|
448
|
+
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* Returns the references to this node which is by default `this`.
|
|
453
|
+
*
|
|
454
|
+
* @return {Node} A reference to this node.
|
|
455
|
+
*/
|
|
156
456
|
getScope() {
|
|
157
457
|
|
|
158
458
|
return this;
|
|
159
459
|
|
|
160
460
|
}
|
|
161
461
|
|
|
462
|
+
/**
|
|
463
|
+
* Returns the hash of the node which is used to identify the node. By default it's
|
|
464
|
+
* the {@link Node#uuid} however derived node classes might have to overwrite this method
|
|
465
|
+
* depending on their implementation.
|
|
466
|
+
*
|
|
467
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
468
|
+
* @return {string} The hash.
|
|
469
|
+
*/
|
|
162
470
|
getHash( /*builder*/ ) {
|
|
163
471
|
|
|
164
472
|
return this.uuid;
|
|
165
473
|
|
|
166
474
|
}
|
|
167
475
|
|
|
476
|
+
/**
|
|
477
|
+
* Returns the update type of {@link Node#update}.
|
|
478
|
+
*
|
|
479
|
+
* @return {NodeUpdateType} The update type.
|
|
480
|
+
*/
|
|
168
481
|
getUpdateType() {
|
|
169
482
|
|
|
170
483
|
return this.updateType;
|
|
171
484
|
|
|
172
485
|
}
|
|
173
486
|
|
|
487
|
+
/**
|
|
488
|
+
* Returns the update type of {@link Node#updateBefore}.
|
|
489
|
+
*
|
|
490
|
+
* @return {NodeUpdateType} The update type.
|
|
491
|
+
*/
|
|
174
492
|
getUpdateBeforeType() {
|
|
175
493
|
|
|
176
494
|
return this.updateBeforeType;
|
|
177
495
|
|
|
178
496
|
}
|
|
179
497
|
|
|
498
|
+
/**
|
|
499
|
+
* Returns the update type of {@link Node#updateAfter}.
|
|
500
|
+
*
|
|
501
|
+
* @return {NodeUpdateType} The update type.
|
|
502
|
+
*/
|
|
180
503
|
getUpdateAfterType() {
|
|
181
504
|
|
|
182
505
|
return this.updateAfterType;
|
|
183
506
|
|
|
184
507
|
}
|
|
185
508
|
|
|
509
|
+
/**
|
|
510
|
+
* Certain types are composed of multiple elements. For example a `vec3`
|
|
511
|
+
* is composed of three `float` values. This method returns the type of
|
|
512
|
+
* these elements.
|
|
513
|
+
*
|
|
514
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
515
|
+
* @return {string} The type of the node.
|
|
516
|
+
*/
|
|
186
517
|
getElementType( builder ) {
|
|
187
518
|
|
|
188
519
|
const type = this.getNodeType( builder );
|
|
@@ -192,6 +523,25 @@ class Node extends EventDispatcher {
|
|
|
192
523
|
|
|
193
524
|
}
|
|
194
525
|
|
|
526
|
+
/**
|
|
527
|
+
* Returns the node member type for the given name.
|
|
528
|
+
*
|
|
529
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
530
|
+
* @param {string} name - The name of the member.
|
|
531
|
+
* @return {string} The type of the node.
|
|
532
|
+
*/
|
|
533
|
+
getMemberType( /*builder, name*/ ) {
|
|
534
|
+
|
|
535
|
+
return 'void';
|
|
536
|
+
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* Returns the node's type.
|
|
541
|
+
*
|
|
542
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
543
|
+
* @return {string} The type of the node.
|
|
544
|
+
*/
|
|
195
545
|
getNodeType( builder ) {
|
|
196
546
|
|
|
197
547
|
const nodeProperties = builder.getNodeProperties( this );
|
|
@@ -206,6 +556,15 @@ class Node extends EventDispatcher {
|
|
|
206
556
|
|
|
207
557
|
}
|
|
208
558
|
|
|
559
|
+
/**
|
|
560
|
+
* This method is used during the build process of a node and ensures
|
|
561
|
+
* equal nodes are not built multiple times but just once. For example if
|
|
562
|
+
* `attribute( 'uv' )` is used multiple times by the user, the build
|
|
563
|
+
* process makes sure to process just the first node.
|
|
564
|
+
*
|
|
565
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
566
|
+
* @return {Node} The shared node if possible. Otherwise `this` is returned.
|
|
567
|
+
*/
|
|
209
568
|
getShared( builder ) {
|
|
210
569
|
|
|
211
570
|
const hash = this.getHash( builder );
|
|
@@ -215,6 +574,26 @@ class Node extends EventDispatcher {
|
|
|
215
574
|
|
|
216
575
|
}
|
|
217
576
|
|
|
577
|
+
/**
|
|
578
|
+
* Returns the number of elements in the node array.
|
|
579
|
+
*
|
|
580
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
581
|
+
* @return {?number} The number of elements in the node array.
|
|
582
|
+
*/
|
|
583
|
+
getArrayCount( /*builder*/ ) {
|
|
584
|
+
|
|
585
|
+
return null;
|
|
586
|
+
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/**
|
|
590
|
+
* Represents the setup stage which is the first step of the build process, see {@link Node#build} method.
|
|
591
|
+
* This method is often overwritten in derived modules to prepare the node which is used as a node's output/result.
|
|
592
|
+
* If an output node is prepared, then it must be returned in the `return` statement of the derived module's setup function.
|
|
593
|
+
*
|
|
594
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
595
|
+
* @return {?Node} The output node.
|
|
596
|
+
*/
|
|
218
597
|
setup( builder ) {
|
|
219
598
|
|
|
220
599
|
const nodeProperties = builder.getNodeProperties( this );
|
|
@@ -227,15 +606,32 @@ class Node extends EventDispatcher {
|
|
|
227
606
|
|
|
228
607
|
}
|
|
229
608
|
|
|
230
|
-
// return a outputNode if exists
|
|
231
|
-
|
|
609
|
+
// return a outputNode if exists or null
|
|
610
|
+
|
|
611
|
+
return nodeProperties.outputNode || null;
|
|
232
612
|
|
|
233
613
|
}
|
|
234
614
|
|
|
235
|
-
|
|
615
|
+
/**
|
|
616
|
+
* Represents the analyze stage which is the second step of the build process, see {@link Node#build} method.
|
|
617
|
+
* This stage analyzes the node hierarchy and ensures descendent nodes are built.
|
|
618
|
+
*
|
|
619
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
620
|
+
* @param {?Node} output - The target output node.
|
|
621
|
+
*/
|
|
622
|
+
analyze( builder, output = null ) {
|
|
236
623
|
|
|
237
624
|
const usageCount = builder.increaseUsage( this );
|
|
238
625
|
|
|
626
|
+
if ( this.parents === true ) {
|
|
627
|
+
|
|
628
|
+
const nodeData = builder.getDataFromNode( this, 'any' );
|
|
629
|
+
nodeData.stages = nodeData.stages || {};
|
|
630
|
+
nodeData.stages[ builder.shaderStage ] = nodeData.stages[ builder.shaderStage ] || [];
|
|
631
|
+
nodeData.stages[ builder.shaderStage ].push( output );
|
|
632
|
+
|
|
633
|
+
}
|
|
634
|
+
|
|
239
635
|
if ( usageCount === 1 ) {
|
|
240
636
|
|
|
241
637
|
// node flow children
|
|
@@ -246,7 +642,7 @@ class Node extends EventDispatcher {
|
|
|
246
642
|
|
|
247
643
|
if ( childNode && childNode.isNode === true ) {
|
|
248
644
|
|
|
249
|
-
childNode.build( builder );
|
|
645
|
+
childNode.build( builder, this );
|
|
250
646
|
|
|
251
647
|
}
|
|
252
648
|
|
|
@@ -256,6 +652,14 @@ class Node extends EventDispatcher {
|
|
|
256
652
|
|
|
257
653
|
}
|
|
258
654
|
|
|
655
|
+
/**
|
|
656
|
+
* Represents the generate stage which is the third step of the build process, see {@link Node#build} method.
|
|
657
|
+
* This state builds the output node and returns the resulting shader string.
|
|
658
|
+
*
|
|
659
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
660
|
+
* @param {?string} [output] - Can be used to define the output type.
|
|
661
|
+
* @return {?string} The generated shader string.
|
|
662
|
+
*/
|
|
259
663
|
generate( builder, output ) {
|
|
260
664
|
|
|
261
665
|
const { outputNode } = builder.getNodeProperties( this );
|
|
@@ -268,24 +672,68 @@ class Node extends EventDispatcher {
|
|
|
268
672
|
|
|
269
673
|
}
|
|
270
674
|
|
|
675
|
+
/**
|
|
676
|
+
* The method can be implemented to update the node's internal state before it is used to render an object.
|
|
677
|
+
* The {@link Node#updateBeforeType} property defines how often the update is executed.
|
|
678
|
+
*
|
|
679
|
+
* @abstract
|
|
680
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
681
|
+
* @return {?boolean} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).
|
|
682
|
+
*/
|
|
271
683
|
updateBefore( /*frame*/ ) {
|
|
272
684
|
|
|
273
|
-
|
|
685
|
+
warn( 'Abstract function.' );
|
|
274
686
|
|
|
275
687
|
}
|
|
276
688
|
|
|
689
|
+
/**
|
|
690
|
+
* The method can be implemented to update the node's internal state after it was used to render an object.
|
|
691
|
+
* The {@link Node#updateAfterType} property defines how often the update is executed.
|
|
692
|
+
*
|
|
693
|
+
* @abstract
|
|
694
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
695
|
+
* @return {?boolean} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).
|
|
696
|
+
*/
|
|
277
697
|
updateAfter( /*frame*/ ) {
|
|
278
698
|
|
|
279
|
-
|
|
699
|
+
warn( 'Abstract function.' );
|
|
280
700
|
|
|
281
701
|
}
|
|
282
702
|
|
|
703
|
+
/**
|
|
704
|
+
* The method can be implemented to update the node's internal state when it is used to render an object.
|
|
705
|
+
* The {@link Node#updateType} property defines how often the update is executed.
|
|
706
|
+
*
|
|
707
|
+
* @abstract
|
|
708
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
709
|
+
* @return {?boolean} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).
|
|
710
|
+
*/
|
|
283
711
|
update( /*frame*/ ) {
|
|
284
712
|
|
|
285
|
-
|
|
713
|
+
warn( 'Abstract function.' );
|
|
286
714
|
|
|
287
715
|
}
|
|
288
716
|
|
|
717
|
+
before( node ) {
|
|
718
|
+
|
|
719
|
+
if ( this._beforeNodes === null ) this._beforeNodes = [];
|
|
720
|
+
|
|
721
|
+
this._beforeNodes.push( node );
|
|
722
|
+
|
|
723
|
+
return this;
|
|
724
|
+
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
/**
|
|
728
|
+
* This method performs the build of a node. The behavior and return value depend on the current build stage:
|
|
729
|
+
* - **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.
|
|
730
|
+
* - **analyze**: Analyzes the node hierarchy for optimizations in the code generation stage. Returns `null`.
|
|
731
|
+
* - **generate**: Generates the shader code for the node. Returns the generated shader string.
|
|
732
|
+
*
|
|
733
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
734
|
+
* @param {?(string|Node)} [output=null] - Can be used to define the output type.
|
|
735
|
+
* @return {?(Node|string)} The result of the build process, depending on the build stage.
|
|
736
|
+
*/
|
|
289
737
|
build( builder, output = null ) {
|
|
290
738
|
|
|
291
739
|
const refNode = this.getShared( builder );
|
|
@@ -296,7 +744,48 @@ class Node extends EventDispatcher {
|
|
|
296
744
|
|
|
297
745
|
}
|
|
298
746
|
|
|
299
|
-
|
|
747
|
+
//
|
|
748
|
+
|
|
749
|
+
if ( this._beforeNodes !== null ) {
|
|
750
|
+
|
|
751
|
+
const currentBeforeNodes = this._beforeNodes;
|
|
752
|
+
|
|
753
|
+
this._beforeNodes = null;
|
|
754
|
+
|
|
755
|
+
for ( const beforeNode of currentBeforeNodes ) {
|
|
756
|
+
|
|
757
|
+
beforeNode.build( builder, output );
|
|
758
|
+
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
this._beforeNodes = currentBeforeNodes;
|
|
762
|
+
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
//
|
|
766
|
+
|
|
767
|
+
const nodeData = builder.getDataFromNode( this );
|
|
768
|
+
nodeData.buildStages = nodeData.buildStages || {};
|
|
769
|
+
nodeData.buildStages[ builder.buildStage ] = true;
|
|
770
|
+
|
|
771
|
+
const parentBuildStage = _parentBuildStage[ builder.buildStage ];
|
|
772
|
+
|
|
773
|
+
if ( parentBuildStage && nodeData.buildStages[ parentBuildStage ] !== true ) {
|
|
774
|
+
|
|
775
|
+
// force parent build stage (setup or analyze)
|
|
776
|
+
|
|
777
|
+
const previousBuildStage = builder.getBuildStage();
|
|
778
|
+
|
|
779
|
+
builder.setBuildStage( parentBuildStage );
|
|
780
|
+
|
|
781
|
+
this.build( builder );
|
|
782
|
+
|
|
783
|
+
builder.setBuildStage( previousBuildStage );
|
|
784
|
+
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
//
|
|
788
|
+
|
|
300
789
|
builder.addChain( this );
|
|
301
790
|
|
|
302
791
|
/* Build stages expected results:
|
|
@@ -310,43 +799,62 @@ class Node extends EventDispatcher {
|
|
|
310
799
|
|
|
311
800
|
if ( buildStage === 'setup' ) {
|
|
312
801
|
|
|
802
|
+
builder.addNode( this );
|
|
803
|
+
|
|
313
804
|
this.updateReference( builder );
|
|
314
805
|
|
|
315
806
|
const properties = builder.getNodeProperties( this );
|
|
316
807
|
|
|
317
808
|
if ( properties.initialized !== true ) {
|
|
318
809
|
|
|
319
|
-
const stackNodesBeforeSetup = builder.stack.nodes.length;
|
|
810
|
+
//const stackNodesBeforeSetup = builder.stack.nodes.length;
|
|
320
811
|
|
|
321
812
|
properties.initialized = true;
|
|
322
|
-
properties.outputNode = this.setup( builder );
|
|
813
|
+
properties.outputNode = this.setup( builder ) || properties.outputNode || null;
|
|
323
814
|
|
|
324
|
-
if (
|
|
815
|
+
/*if ( isNodeOutput && builder.stack.nodes.length !== stackNodesBeforeSetup ) {
|
|
325
816
|
|
|
326
817
|
// !! no outputNode !!
|
|
327
|
-
//
|
|
818
|
+
//outputNode = builder.stack;
|
|
328
819
|
|
|
329
|
-
}
|
|
820
|
+
}*/
|
|
330
821
|
|
|
331
822
|
for ( const childNode of Object.values( properties ) ) {
|
|
332
823
|
|
|
333
824
|
if ( childNode && childNode.isNode === true ) {
|
|
334
825
|
|
|
826
|
+
if ( childNode.parents === true ) {
|
|
827
|
+
|
|
828
|
+
const childProperties = builder.getNodeProperties( childNode );
|
|
829
|
+
childProperties.parents = childProperties.parents || [];
|
|
830
|
+
childProperties.parents.push( this );
|
|
831
|
+
|
|
832
|
+
}
|
|
833
|
+
|
|
335
834
|
childNode.build( builder );
|
|
336
835
|
|
|
337
836
|
}
|
|
338
837
|
|
|
339
838
|
}
|
|
340
839
|
|
|
840
|
+
builder.addSequentialNode( this );
|
|
841
|
+
|
|
341
842
|
}
|
|
342
843
|
|
|
844
|
+
result = properties.outputNode;
|
|
845
|
+
|
|
343
846
|
} else if ( buildStage === 'analyze' ) {
|
|
344
847
|
|
|
345
|
-
this.analyze( builder );
|
|
848
|
+
this.analyze( builder, output );
|
|
346
849
|
|
|
347
850
|
} else if ( buildStage === 'generate' ) {
|
|
348
851
|
|
|
349
|
-
|
|
852
|
+
// If generate has just one argument, it means the output type is not required.
|
|
853
|
+
// This means that the node does not handle output conversions internally,
|
|
854
|
+
// so the value is stored in a cache and the builder handles the conversion
|
|
855
|
+
// for all requested output types.
|
|
856
|
+
|
|
857
|
+
const isGenerateOnce = this.generate.length < 2;
|
|
350
858
|
|
|
351
859
|
if ( isGenerateOnce ) {
|
|
352
860
|
|
|
@@ -357,9 +865,21 @@ class Node extends EventDispatcher {
|
|
|
357
865
|
|
|
358
866
|
if ( result === undefined ) {
|
|
359
867
|
|
|
360
|
-
|
|
868
|
+
if ( nodeData.generated === undefined ) {
|
|
869
|
+
|
|
870
|
+
nodeData.generated = true;
|
|
871
|
+
|
|
872
|
+
result = this.generate( builder ) || '';
|
|
361
873
|
|
|
362
|
-
|
|
874
|
+
nodeData.snippet = result;
|
|
875
|
+
|
|
876
|
+
} else {
|
|
877
|
+
|
|
878
|
+
warn( 'Node: Recursion detected.', this );
|
|
879
|
+
|
|
880
|
+
result = '/* Recursion detected. */';
|
|
881
|
+
|
|
882
|
+
}
|
|
363
883
|
|
|
364
884
|
} else if ( nodeData.flowCodes !== undefined && builder.context.nodeBlock !== undefined ) {
|
|
365
885
|
|
|
@@ -375,6 +895,16 @@ class Node extends EventDispatcher {
|
|
|
375
895
|
|
|
376
896
|
}
|
|
377
897
|
|
|
898
|
+
if ( result === '' && output !== null && output !== 'void' && output !== 'OutputType' ) {
|
|
899
|
+
|
|
900
|
+
// if no snippet is generated, return a default value
|
|
901
|
+
|
|
902
|
+
error( `TSL: Invalid generated code, expected a "${ output }".` );
|
|
903
|
+
|
|
904
|
+
result = builder.generateConst( output );
|
|
905
|
+
|
|
906
|
+
}
|
|
907
|
+
|
|
378
908
|
}
|
|
379
909
|
|
|
380
910
|
builder.removeChain( this );
|
|
@@ -383,12 +913,22 @@ class Node extends EventDispatcher {
|
|
|
383
913
|
|
|
384
914
|
}
|
|
385
915
|
|
|
916
|
+
/**
|
|
917
|
+
* Returns the child nodes as a JSON object.
|
|
918
|
+
*
|
|
919
|
+
* @return {Generator<Object>} An iterable list of serialized child objects as JSON.
|
|
920
|
+
*/
|
|
386
921
|
getSerializeChildren() {
|
|
387
922
|
|
|
388
|
-
return
|
|
923
|
+
return this._getChildren();
|
|
389
924
|
|
|
390
925
|
}
|
|
391
926
|
|
|
927
|
+
/**
|
|
928
|
+
* Serializes the node to JSON.
|
|
929
|
+
*
|
|
930
|
+
* @param {Object} json - The output JSON object.
|
|
931
|
+
*/
|
|
392
932
|
serialize( json ) {
|
|
393
933
|
|
|
394
934
|
const nodeChildren = this.getSerializeChildren();
|
|
@@ -423,6 +963,11 @@ class Node extends EventDispatcher {
|
|
|
423
963
|
|
|
424
964
|
}
|
|
425
965
|
|
|
966
|
+
/**
|
|
967
|
+
* Deserializes the node from the given JSON.
|
|
968
|
+
*
|
|
969
|
+
* @param {Object} json - The JSON object.
|
|
970
|
+
*/
|
|
426
971
|
deserialize( json ) {
|
|
427
972
|
|
|
428
973
|
if ( json.inputNodes !== undefined ) {
|
|
@@ -471,6 +1016,12 @@ class Node extends EventDispatcher {
|
|
|
471
1016
|
|
|
472
1017
|
}
|
|
473
1018
|
|
|
1019
|
+
/**
|
|
1020
|
+
* Serializes the node into the three.js JSON Object/Scene format.
|
|
1021
|
+
*
|
|
1022
|
+
* @param {?Object} meta - An optional JSON object that already holds serialized data from other scene objects.
|
|
1023
|
+
* @return {Object} The serialized node.
|
|
1024
|
+
*/
|
|
474
1025
|
toJSON( meta ) {
|
|
475
1026
|
|
|
476
1027
|
const { uuid, type } = this;
|
|
@@ -497,7 +1048,7 @@ class Node extends EventDispatcher {
|
|
|
497
1048
|
type,
|
|
498
1049
|
meta,
|
|
499
1050
|
metadata: {
|
|
500
|
-
version: 4.
|
|
1051
|
+
version: 4.7,
|
|
501
1052
|
type: 'Node',
|
|
502
1053
|
generator: 'Node.toJSON'
|
|
503
1054
|
}
|
|
@@ -547,4 +1098,12 @@ class Node extends EventDispatcher {
|
|
|
547
1098
|
|
|
548
1099
|
}
|
|
549
1100
|
|
|
1101
|
+
/**
|
|
1102
|
+
* Enables or disables the automatic capturing of stack traces for nodes.
|
|
1103
|
+
*
|
|
1104
|
+
* @type {boolean}
|
|
1105
|
+
* @default false
|
|
1106
|
+
*/
|
|
1107
|
+
Node.captureStackTrace = false;
|
|
1108
|
+
|
|
550
1109
|
export default Node;
|