@plastic-software/three 0.167.4 → 0.174.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 +1 -1
- package/build/three.cjs +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- 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/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- 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 +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- 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 +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- 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/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- 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 +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- 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 +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- 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/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
package/src/nodes/core/Node.js
CHANGED
|
@@ -1,40 +1,132 @@
|
|
|
1
1
|
import { NodeUpdateType } from './constants.js';
|
|
2
|
-
import { getNodeChildren, getCacheKey } from './NodeUtils.js';
|
|
2
|
+
import { getNodeChildren, getCacheKey, hash } from './NodeUtils.js';
|
|
3
3
|
|
|
4
4
|
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
5
5
|
import { MathUtils } from '../../math/MathUtils.js';
|
|
6
6
|
|
|
7
|
-
const NodeClasses = new Map();
|
|
8
|
-
|
|
9
7
|
let _nodeId = 0;
|
|
10
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Base class for all nodes.
|
|
11
|
+
*
|
|
12
|
+
* @augments EventDispatcher
|
|
13
|
+
*/
|
|
11
14
|
class Node extends EventDispatcher {
|
|
12
15
|
|
|
16
|
+
static get type() {
|
|
17
|
+
|
|
18
|
+
return 'Node';
|
|
19
|
+
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new node.
|
|
24
|
+
*
|
|
25
|
+
* @param {?string} nodeType - The node type.
|
|
26
|
+
*/
|
|
13
27
|
constructor( nodeType = null ) {
|
|
14
28
|
|
|
15
29
|
super();
|
|
16
30
|
|
|
31
|
+
/**
|
|
32
|
+
* The node type. This represents the result type of the node (e.g. `float` or `vec3`).
|
|
33
|
+
*
|
|
34
|
+
* @type {?string}
|
|
35
|
+
* @default null
|
|
36
|
+
*/
|
|
17
37
|
this.nodeType = nodeType;
|
|
18
38
|
|
|
39
|
+
/**
|
|
40
|
+
* The update type of the node's {@link Node#update} method. Possible values are listed in {@link NodeUpdateType}.
|
|
41
|
+
*
|
|
42
|
+
* @type {string}
|
|
43
|
+
* @default 'none'
|
|
44
|
+
*/
|
|
19
45
|
this.updateType = NodeUpdateType.NONE;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The update type of the node's {@link Node#updateBefore} method. Possible values are listed in {@link NodeUpdateType}.
|
|
49
|
+
*
|
|
50
|
+
* @type {string}
|
|
51
|
+
* @default 'none'
|
|
52
|
+
*/
|
|
20
53
|
this.updateBeforeType = NodeUpdateType.NONE;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The update type of the node's {@link Node#updateAfter} method. Possible values are listed in {@link NodeUpdateType}.
|
|
57
|
+
*
|
|
58
|
+
* @type {string}
|
|
59
|
+
* @default 'none'
|
|
60
|
+
*/
|
|
21
61
|
this.updateAfterType = NodeUpdateType.NONE;
|
|
22
62
|
|
|
63
|
+
/**
|
|
64
|
+
* The UUID of the node.
|
|
65
|
+
*
|
|
66
|
+
* @type {string}
|
|
67
|
+
* @readonly
|
|
68
|
+
*/
|
|
23
69
|
this.uuid = MathUtils.generateUUID();
|
|
24
70
|
|
|
71
|
+
/**
|
|
72
|
+
* The version of the node. The version automatically is increased when {@link Node#needsUpdate} is set to `true`.
|
|
73
|
+
*
|
|
74
|
+
* @type {number}
|
|
75
|
+
* @readonly
|
|
76
|
+
* @default 0
|
|
77
|
+
*/
|
|
25
78
|
this.version = 0;
|
|
26
79
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Whether this node is global or not. This property is relevant for the internal
|
|
82
|
+
* node caching system. All nodes which should be declared just once should
|
|
83
|
+
* set this flag to `true` (a typical example is {@link AttributeNode}).
|
|
84
|
+
*
|
|
85
|
+
* @type {boolean}
|
|
86
|
+
* @default false
|
|
87
|
+
*/
|
|
30
88
|
this.global = false;
|
|
31
89
|
|
|
90
|
+
/**
|
|
91
|
+
* This flag can be used for type testing.
|
|
92
|
+
*
|
|
93
|
+
* @type {boolean}
|
|
94
|
+
* @readonly
|
|
95
|
+
* @default true
|
|
96
|
+
*/
|
|
32
97
|
this.isNode = true;
|
|
33
98
|
|
|
99
|
+
// private
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* The cache key of this node.
|
|
103
|
+
*
|
|
104
|
+
* @private
|
|
105
|
+
* @type {?number}
|
|
106
|
+
* @default null
|
|
107
|
+
*/
|
|
108
|
+
this._cacheKey = null;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* The cache key 's version.
|
|
112
|
+
*
|
|
113
|
+
* @private
|
|
114
|
+
* @type {number}
|
|
115
|
+
* @default 0
|
|
116
|
+
*/
|
|
117
|
+
this._cacheKeyVersion = 0;
|
|
118
|
+
|
|
34
119
|
Object.defineProperty( this, 'id', { value: _nodeId ++ } );
|
|
35
120
|
|
|
36
121
|
}
|
|
37
122
|
|
|
123
|
+
/**
|
|
124
|
+
* Set this property to `true` when the node should be regenerated.
|
|
125
|
+
*
|
|
126
|
+
* @type {boolean}
|
|
127
|
+
* @default false
|
|
128
|
+
* @param {boolean} value
|
|
129
|
+
*/
|
|
38
130
|
set needsUpdate( value ) {
|
|
39
131
|
|
|
40
132
|
if ( value === true ) {
|
|
@@ -45,12 +137,25 @@ class Node extends EventDispatcher {
|
|
|
45
137
|
|
|
46
138
|
}
|
|
47
139
|
|
|
140
|
+
/**
|
|
141
|
+
* The type of the class. The value is usually the constructor name.
|
|
142
|
+
*
|
|
143
|
+
* @type {string}
|
|
144
|
+
* @readonly
|
|
145
|
+
*/
|
|
48
146
|
get type() {
|
|
49
147
|
|
|
50
148
|
return this.constructor.type;
|
|
51
149
|
|
|
52
150
|
}
|
|
53
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Convenient method for defining {@link Node#update}.
|
|
154
|
+
*
|
|
155
|
+
* @param {Function} callback - The update method.
|
|
156
|
+
* @param {string} updateType - The update type.
|
|
157
|
+
* @return {Node} A reference to this node.
|
|
158
|
+
*/
|
|
54
159
|
onUpdate( callback, updateType ) {
|
|
55
160
|
|
|
56
161
|
this.updateType = updateType;
|
|
@@ -60,24 +165,51 @@ class Node extends EventDispatcher {
|
|
|
60
165
|
|
|
61
166
|
}
|
|
62
167
|
|
|
168
|
+
/**
|
|
169
|
+
* Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but
|
|
170
|
+
* this method automatically sets the update type to `FRAME`.
|
|
171
|
+
*
|
|
172
|
+
* @param {Function} callback - The update method.
|
|
173
|
+
* @return {Node} A reference to this node.
|
|
174
|
+
*/
|
|
63
175
|
onFrameUpdate( callback ) {
|
|
64
176
|
|
|
65
177
|
return this.onUpdate( callback, NodeUpdateType.FRAME );
|
|
66
178
|
|
|
67
179
|
}
|
|
68
180
|
|
|
181
|
+
/**
|
|
182
|
+
* Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but
|
|
183
|
+
* this method automatically sets the update type to `RENDER`.
|
|
184
|
+
*
|
|
185
|
+
* @param {Function} callback - The update method.
|
|
186
|
+
* @return {Node} A reference to this node.
|
|
187
|
+
*/
|
|
69
188
|
onRenderUpdate( callback ) {
|
|
70
189
|
|
|
71
190
|
return this.onUpdate( callback, NodeUpdateType.RENDER );
|
|
72
191
|
|
|
73
192
|
}
|
|
74
193
|
|
|
194
|
+
/**
|
|
195
|
+
* Convenient method for defining {@link Node#update}. Similar to {@link Node#onUpdate}, but
|
|
196
|
+
* this method automatically sets the update type to `OBJECT`.
|
|
197
|
+
*
|
|
198
|
+
* @param {Function} callback - The update method.
|
|
199
|
+
* @return {Node} A reference to this node.
|
|
200
|
+
*/
|
|
75
201
|
onObjectUpdate( callback ) {
|
|
76
202
|
|
|
77
203
|
return this.onUpdate( callback, NodeUpdateType.OBJECT );
|
|
78
204
|
|
|
79
205
|
}
|
|
80
206
|
|
|
207
|
+
/**
|
|
208
|
+
* Convenient method for defining {@link Node#updateReference}.
|
|
209
|
+
*
|
|
210
|
+
* @param {Function} callback - The update method.
|
|
211
|
+
* @return {Node} A reference to this node.
|
|
212
|
+
*/
|
|
81
213
|
onReference( callback ) {
|
|
82
214
|
|
|
83
215
|
this.updateReference = callback.bind( this.getSelf() );
|
|
@@ -86,6 +218,12 @@ class Node extends EventDispatcher {
|
|
|
86
218
|
|
|
87
219
|
}
|
|
88
220
|
|
|
221
|
+
/**
|
|
222
|
+
* The `this` reference might point to a Proxy so this method can be used
|
|
223
|
+
* to get the reference to the actual node instance.
|
|
224
|
+
*
|
|
225
|
+
* @return {Node} A reference to the node.
|
|
226
|
+
*/
|
|
89
227
|
getSelf() {
|
|
90
228
|
|
|
91
229
|
// Returns non-node object.
|
|
@@ -94,18 +232,39 @@ class Node extends EventDispatcher {
|
|
|
94
232
|
|
|
95
233
|
}
|
|
96
234
|
|
|
235
|
+
/**
|
|
236
|
+
* Nodes might refer to other objects like materials. This method allows to dynamically update the reference
|
|
237
|
+
* to such objects based on a given state (e.g. the current node frame or builder).
|
|
238
|
+
*
|
|
239
|
+
* @param {any} state - This method can be invocated in different contexts so `state` can refer to any object type.
|
|
240
|
+
* @return {any} The updated reference.
|
|
241
|
+
*/
|
|
97
242
|
updateReference( /*state*/ ) {
|
|
98
243
|
|
|
99
244
|
return this;
|
|
100
245
|
|
|
101
246
|
}
|
|
102
247
|
|
|
248
|
+
/**
|
|
249
|
+
* By default this method returns the value of the {@link Node#global} flag. This method
|
|
250
|
+
* can be overwritten in derived classes if an analytical way is required to determine the
|
|
251
|
+
* global status.
|
|
252
|
+
*
|
|
253
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
254
|
+
* @return {boolean} Whether this node is global or not.
|
|
255
|
+
*/
|
|
103
256
|
isGlobal( /*builder*/ ) {
|
|
104
257
|
|
|
105
258
|
return this.global;
|
|
106
259
|
|
|
107
260
|
}
|
|
108
261
|
|
|
262
|
+
/**
|
|
263
|
+
* Generator function that can be used to iterate over the child nodes.
|
|
264
|
+
*
|
|
265
|
+
* @generator
|
|
266
|
+
* @yields {Node} A child node.
|
|
267
|
+
*/
|
|
109
268
|
* getChildren() {
|
|
110
269
|
|
|
111
270
|
for ( const { childNode } of getNodeChildren( this ) ) {
|
|
@@ -116,12 +275,28 @@ class Node extends EventDispatcher {
|
|
|
116
275
|
|
|
117
276
|
}
|
|
118
277
|
|
|
278
|
+
/**
|
|
279
|
+
* Calling this method dispatches the `dispose` event. This event can be used
|
|
280
|
+
* to register event listeners for clean up tasks.
|
|
281
|
+
*/
|
|
119
282
|
dispose() {
|
|
120
283
|
|
|
121
284
|
this.dispatchEvent( { type: 'dispose' } );
|
|
122
285
|
|
|
123
286
|
}
|
|
124
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Callback for {@link Node#traverse}.
|
|
290
|
+
*
|
|
291
|
+
* @callback traverseCallback
|
|
292
|
+
* @param {Node} node - The current node.
|
|
293
|
+
*/
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Can be used to traverse through the node's hierarchy.
|
|
297
|
+
*
|
|
298
|
+
* @param {traverseCallback} callback - A callback that is executed per node.
|
|
299
|
+
*/
|
|
125
300
|
traverse( callback ) {
|
|
126
301
|
|
|
127
302
|
callback( this );
|
|
@@ -134,13 +309,19 @@ class Node extends EventDispatcher {
|
|
|
134
309
|
|
|
135
310
|
}
|
|
136
311
|
|
|
312
|
+
/**
|
|
313
|
+
* Returns the cache key for this node.
|
|
314
|
+
*
|
|
315
|
+
* @param {boolean} [force=false] - When set to `true`, a recomputation of the cache key is forced.
|
|
316
|
+
* @return {number} The cache key of the node.
|
|
317
|
+
*/
|
|
137
318
|
getCacheKey( force = false ) {
|
|
138
319
|
|
|
139
320
|
force = force || this.version !== this._cacheKeyVersion;
|
|
140
321
|
|
|
141
322
|
if ( force === true || this._cacheKey === null ) {
|
|
142
323
|
|
|
143
|
-
this._cacheKey = getCacheKey( this, force );
|
|
324
|
+
this._cacheKey = hash( getCacheKey( this, force ), this.customCacheKey() );
|
|
144
325
|
this._cacheKeyVersion = this.version;
|
|
145
326
|
|
|
146
327
|
}
|
|
@@ -149,30 +330,83 @@ class Node extends EventDispatcher {
|
|
|
149
330
|
|
|
150
331
|
}
|
|
151
332
|
|
|
333
|
+
/**
|
|
334
|
+
* Generate a custom cache key for this node.
|
|
335
|
+
*
|
|
336
|
+
* @return {number} The cache key of the node.
|
|
337
|
+
*/
|
|
338
|
+
customCacheKey() {
|
|
339
|
+
|
|
340
|
+
return 0;
|
|
341
|
+
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Returns the references to this node which is by default `this`.
|
|
346
|
+
*
|
|
347
|
+
* @return {Node} A reference to this node.
|
|
348
|
+
*/
|
|
349
|
+
getScope() {
|
|
350
|
+
|
|
351
|
+
return this;
|
|
352
|
+
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Returns the hash of the node which is used to identify the node. By default it's
|
|
357
|
+
* the {@link Node#uuid} however derived node classes might have to overwrite this method
|
|
358
|
+
* depending on their implementation.
|
|
359
|
+
*
|
|
360
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
361
|
+
* @return {string} The hash.
|
|
362
|
+
*/
|
|
152
363
|
getHash( /*builder*/ ) {
|
|
153
364
|
|
|
154
365
|
return this.uuid;
|
|
155
366
|
|
|
156
367
|
}
|
|
157
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Returns the update type of {@link Node#update}.
|
|
371
|
+
*
|
|
372
|
+
* @return {NodeUpdateType} The update type.
|
|
373
|
+
*/
|
|
158
374
|
getUpdateType() {
|
|
159
375
|
|
|
160
376
|
return this.updateType;
|
|
161
377
|
|
|
162
378
|
}
|
|
163
379
|
|
|
380
|
+
/**
|
|
381
|
+
* Returns the update type of {@link Node#updateBefore}.
|
|
382
|
+
*
|
|
383
|
+
* @return {NodeUpdateType} The update type.
|
|
384
|
+
*/
|
|
164
385
|
getUpdateBeforeType() {
|
|
165
386
|
|
|
166
387
|
return this.updateBeforeType;
|
|
167
388
|
|
|
168
389
|
}
|
|
169
390
|
|
|
391
|
+
/**
|
|
392
|
+
* Returns the update type of {@link Node#updateAfter}.
|
|
393
|
+
*
|
|
394
|
+
* @return {NodeUpdateType} The update type.
|
|
395
|
+
*/
|
|
170
396
|
getUpdateAfterType() {
|
|
171
397
|
|
|
172
398
|
return this.updateAfterType;
|
|
173
399
|
|
|
174
400
|
}
|
|
175
401
|
|
|
402
|
+
/**
|
|
403
|
+
* Certain types are composed of multiple elements. For example a `vec3`
|
|
404
|
+
* is composed of three `float` values. This method returns the type of
|
|
405
|
+
* these elements.
|
|
406
|
+
*
|
|
407
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
408
|
+
* @return {string} The type of the node.
|
|
409
|
+
*/
|
|
176
410
|
getElementType( builder ) {
|
|
177
411
|
|
|
178
412
|
const type = this.getNodeType( builder );
|
|
@@ -182,6 +416,25 @@ class Node extends EventDispatcher {
|
|
|
182
416
|
|
|
183
417
|
}
|
|
184
418
|
|
|
419
|
+
/**
|
|
420
|
+
* Returns the node member type for the given name.
|
|
421
|
+
*
|
|
422
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
423
|
+
* @param {string} name - The name of the member.
|
|
424
|
+
* @return {string} The type of the node.
|
|
425
|
+
*/
|
|
426
|
+
getMemberType( /*builder, name*/ ) {
|
|
427
|
+
|
|
428
|
+
return 'void';
|
|
429
|
+
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Returns the node's type.
|
|
434
|
+
*
|
|
435
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
436
|
+
* @return {string} The type of the node.
|
|
437
|
+
*/
|
|
185
438
|
getNodeType( builder ) {
|
|
186
439
|
|
|
187
440
|
const nodeProperties = builder.getNodeProperties( this );
|
|
@@ -196,6 +449,15 @@ class Node extends EventDispatcher {
|
|
|
196
449
|
|
|
197
450
|
}
|
|
198
451
|
|
|
452
|
+
/**
|
|
453
|
+
* This method is used during the build process of a node and ensures
|
|
454
|
+
* equal nodes are not built multiple times but just once. For example if
|
|
455
|
+
* `attribute( 'uv' )` is used multiple times by the user, the build
|
|
456
|
+
* process makes sure to process just the first node.
|
|
457
|
+
*
|
|
458
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
459
|
+
* @return {Node} The shared node if possible. Otherwise `this` is returned.
|
|
460
|
+
*/
|
|
199
461
|
getShared( builder ) {
|
|
200
462
|
|
|
201
463
|
const hash = this.getHash( builder );
|
|
@@ -205,6 +467,14 @@ class Node extends EventDispatcher {
|
|
|
205
467
|
|
|
206
468
|
}
|
|
207
469
|
|
|
470
|
+
/**
|
|
471
|
+
* Represents the setup stage which is the first step of the build process, see {@link Node#build} method.
|
|
472
|
+
* This method is often overwritten in derived modules to prepare the node which is used as the output/result.
|
|
473
|
+
* The output node must be returned in the `return` statement.
|
|
474
|
+
*
|
|
475
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
476
|
+
* @return {?Node} The output node.
|
|
477
|
+
*/
|
|
208
478
|
setup( builder ) {
|
|
209
479
|
|
|
210
480
|
const nodeProperties = builder.getNodeProperties( this );
|
|
@@ -217,23 +487,21 @@ class Node extends EventDispatcher {
|
|
|
217
487
|
|
|
218
488
|
}
|
|
219
489
|
|
|
220
|
-
// return a outputNode if exists
|
|
221
|
-
return null;
|
|
490
|
+
// return a outputNode if exists or null
|
|
222
491
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
increaseUsage( builder ) {
|
|
226
|
-
|
|
227
|
-
const nodeData = builder.getDataFromNode( this );
|
|
228
|
-
nodeData.usageCount = nodeData.usageCount === undefined ? 1 : nodeData.usageCount + 1;
|
|
229
|
-
|
|
230
|
-
return nodeData.usageCount;
|
|
492
|
+
return nodeProperties.outputNode || null;
|
|
231
493
|
|
|
232
494
|
}
|
|
233
495
|
|
|
496
|
+
/**
|
|
497
|
+
* Represents the analyze stage which is the second step of the build process, see {@link Node#build} method.
|
|
498
|
+
* This stage analyzes the node hierarchy and ensures descendent nodes are built.
|
|
499
|
+
*
|
|
500
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
501
|
+
*/
|
|
234
502
|
analyze( builder ) {
|
|
235
503
|
|
|
236
|
-
const usageCount =
|
|
504
|
+
const usageCount = builder.increaseUsage( this );
|
|
237
505
|
|
|
238
506
|
if ( usageCount === 1 ) {
|
|
239
507
|
|
|
@@ -255,6 +523,14 @@ class Node extends EventDispatcher {
|
|
|
255
523
|
|
|
256
524
|
}
|
|
257
525
|
|
|
526
|
+
/**
|
|
527
|
+
* Represents the generate stage which is the third step of the build process, see {@link Node#build} method.
|
|
528
|
+
* This state builds the output node and returns the resulting shader string.
|
|
529
|
+
*
|
|
530
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
531
|
+
* @param {?string} output - Can be used to define the output type.
|
|
532
|
+
* @return {?string} The generated shader string.
|
|
533
|
+
*/
|
|
258
534
|
generate( builder, output ) {
|
|
259
535
|
|
|
260
536
|
const { outputNode } = builder.getNodeProperties( this );
|
|
@@ -267,24 +543,56 @@ class Node extends EventDispatcher {
|
|
|
267
543
|
|
|
268
544
|
}
|
|
269
545
|
|
|
546
|
+
/**
|
|
547
|
+
* The method can be implemented to update the node's internal state before it is used to render an object.
|
|
548
|
+
* The {@link Node#updateBeforeType} property defines how often the update is executed.
|
|
549
|
+
*
|
|
550
|
+
* @abstract
|
|
551
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
552
|
+
* @return {?boolean} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).
|
|
553
|
+
*/
|
|
270
554
|
updateBefore( /*frame*/ ) {
|
|
271
555
|
|
|
272
556
|
console.warn( 'Abstract function.' );
|
|
273
557
|
|
|
274
558
|
}
|
|
275
559
|
|
|
560
|
+
/**
|
|
561
|
+
* The method can be implemented to update the node's internal state after it was used to render an object.
|
|
562
|
+
* The {@link Node#updateAfterType} property defines how often the update is executed.
|
|
563
|
+
*
|
|
564
|
+
* @abstract
|
|
565
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
566
|
+
* @return {?boolean} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).
|
|
567
|
+
*/
|
|
276
568
|
updateAfter( /*frame*/ ) {
|
|
277
569
|
|
|
278
570
|
console.warn( 'Abstract function.' );
|
|
279
571
|
|
|
280
572
|
}
|
|
281
573
|
|
|
574
|
+
/**
|
|
575
|
+
* The method can be implemented to update the node's internal state when it is used to render an object.
|
|
576
|
+
* The {@link Node#updateType} property defines how often the update is executed.
|
|
577
|
+
*
|
|
578
|
+
* @abstract
|
|
579
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
580
|
+
* @return {?boolean} An optional bool that indicates whether the implementation actually performed an update or not (e.g. due to caching).
|
|
581
|
+
*/
|
|
282
582
|
update( /*frame*/ ) {
|
|
283
583
|
|
|
284
584
|
console.warn( 'Abstract function.' );
|
|
285
585
|
|
|
286
586
|
}
|
|
287
587
|
|
|
588
|
+
/**
|
|
589
|
+
* This method performs the build of a node. The behavior of this method as well as its return value depend
|
|
590
|
+
* on the current build stage (setup, analyze or generate).
|
|
591
|
+
*
|
|
592
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
593
|
+
* @param {?string} output - Can be used to define the output type.
|
|
594
|
+
* @return {?string} When this method is executed in the setup or analyze stage, `null` is returned. In the generate stage, the generated shader string.
|
|
595
|
+
*/
|
|
288
596
|
build( builder, output = null ) {
|
|
289
597
|
|
|
290
598
|
const refNode = this.getShared( builder );
|
|
@@ -315,16 +623,19 @@ class Node extends EventDispatcher {
|
|
|
315
623
|
|
|
316
624
|
if ( properties.initialized !== true ) {
|
|
317
625
|
|
|
318
|
-
const stackNodesBeforeSetup = builder.stack.nodes.length;
|
|
626
|
+
//const stackNodesBeforeSetup = builder.stack.nodes.length;
|
|
319
627
|
|
|
320
628
|
properties.initialized = true;
|
|
321
|
-
properties.outputNode = this.setup( builder );
|
|
322
629
|
|
|
323
|
-
|
|
630
|
+
const outputNode = this.setup( builder ); // return a node or null
|
|
631
|
+
const isNodeOutput = outputNode && outputNode.isNode === true;
|
|
324
632
|
|
|
325
|
-
|
|
633
|
+
/*if ( isNodeOutput && builder.stack.nodes.length !== stackNodesBeforeSetup ) {
|
|
326
634
|
|
|
327
|
-
|
|
635
|
+
// !! no outputNode !!
|
|
636
|
+
//outputNode = builder.stack;
|
|
637
|
+
|
|
638
|
+
}*/
|
|
328
639
|
|
|
329
640
|
for ( const childNode of Object.values( properties ) ) {
|
|
330
641
|
|
|
@@ -336,6 +647,14 @@ class Node extends EventDispatcher {
|
|
|
336
647
|
|
|
337
648
|
}
|
|
338
649
|
|
|
650
|
+
if ( isNodeOutput ) {
|
|
651
|
+
|
|
652
|
+
outputNode.build( builder );
|
|
653
|
+
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
properties.outputNode = outputNode;
|
|
657
|
+
|
|
339
658
|
}
|
|
340
659
|
|
|
341
660
|
} else if ( buildStage === 'analyze' ) {
|
|
@@ -359,6 +678,10 @@ class Node extends EventDispatcher {
|
|
|
359
678
|
|
|
360
679
|
nodeData.snippet = result;
|
|
361
680
|
|
|
681
|
+
} else if ( nodeData.flowCodes !== undefined && builder.context.nodeBlock !== undefined ) {
|
|
682
|
+
|
|
683
|
+
builder.addFlowCodeHierarchy( this, builder.context.nodeBlock );
|
|
684
|
+
|
|
362
685
|
}
|
|
363
686
|
|
|
364
687
|
result = builder.format( result, type, output );
|
|
@@ -372,17 +695,28 @@ class Node extends EventDispatcher {
|
|
|
372
695
|
}
|
|
373
696
|
|
|
374
697
|
builder.removeChain( this );
|
|
698
|
+
builder.addSequentialNode( this );
|
|
375
699
|
|
|
376
700
|
return result;
|
|
377
701
|
|
|
378
702
|
}
|
|
379
703
|
|
|
704
|
+
/**
|
|
705
|
+
* Returns the child nodes as a JSON object.
|
|
706
|
+
*
|
|
707
|
+
* @return {Array<Object>} An iterable list of serialized child objects as JSON.
|
|
708
|
+
*/
|
|
380
709
|
getSerializeChildren() {
|
|
381
710
|
|
|
382
711
|
return getNodeChildren( this );
|
|
383
712
|
|
|
384
713
|
}
|
|
385
714
|
|
|
715
|
+
/**
|
|
716
|
+
* Serializes the node to JSON.
|
|
717
|
+
*
|
|
718
|
+
* @param {Object} json - The output JSON object.
|
|
719
|
+
*/
|
|
386
720
|
serialize( json ) {
|
|
387
721
|
|
|
388
722
|
const nodeChildren = this.getSerializeChildren();
|
|
@@ -417,6 +751,11 @@ class Node extends EventDispatcher {
|
|
|
417
751
|
|
|
418
752
|
}
|
|
419
753
|
|
|
754
|
+
/**
|
|
755
|
+
* Deserializes the node from the given JSON.
|
|
756
|
+
*
|
|
757
|
+
* @param {Object} json - The JSON object.
|
|
758
|
+
*/
|
|
420
759
|
deserialize( json ) {
|
|
421
760
|
|
|
422
761
|
if ( json.inputNodes !== undefined ) {
|
|
@@ -465,6 +804,12 @@ class Node extends EventDispatcher {
|
|
|
465
804
|
|
|
466
805
|
}
|
|
467
806
|
|
|
807
|
+
/**
|
|
808
|
+
* Serializes the node into the three.js JSON Object/Scene format.
|
|
809
|
+
*
|
|
810
|
+
* @param {?Object} meta - An optional JSON object that already holds serialized data from other scene objects.
|
|
811
|
+
* @return {Object} The serialized node.
|
|
812
|
+
*/
|
|
468
813
|
toJSON( meta ) {
|
|
469
814
|
|
|
470
815
|
const { uuid, type } = this;
|
|
@@ -542,30 +887,3 @@ class Node extends EventDispatcher {
|
|
|
542
887
|
}
|
|
543
888
|
|
|
544
889
|
export default Node;
|
|
545
|
-
|
|
546
|
-
export function addNodeClass( type, nodeClass ) {
|
|
547
|
-
|
|
548
|
-
if ( typeof nodeClass !== 'function' || ! type ) throw new Error( `Node class ${ type } is not a class` );
|
|
549
|
-
if ( NodeClasses.has( type ) ) {
|
|
550
|
-
|
|
551
|
-
console.warn( `Redefinition of node class ${ type }` );
|
|
552
|
-
return;
|
|
553
|
-
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
NodeClasses.set( type, nodeClass );
|
|
557
|
-
nodeClass.type = type;
|
|
558
|
-
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
export function createNodeFromType( type ) {
|
|
562
|
-
|
|
563
|
-
const Class = NodeClasses.get( type );
|
|
564
|
-
|
|
565
|
-
if ( Class !== undefined ) {
|
|
566
|
-
|
|
567
|
-
return new Class();
|
|
568
|
-
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
}
|