super-three 0.171.0 → 0.173.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 +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -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 +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- 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/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- 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 +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- 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 +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -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 +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -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 +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- 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/core/UniformGroup.js +0 -13
- 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/renderers/common/PostProcessingUtils.js +0 -86
package/src/nodes/core/Node.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
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
7
|
let _nodeId = 0;
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Base class for all nodes.
|
|
11
|
+
*
|
|
12
|
+
* @augments EventDispatcher
|
|
13
|
+
*/
|
|
9
14
|
class Node extends EventDispatcher {
|
|
10
15
|
|
|
11
16
|
static get type() {
|
|
@@ -14,31 +19,114 @@ class Node extends EventDispatcher {
|
|
|
14
19
|
|
|
15
20
|
}
|
|
16
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new node.
|
|
24
|
+
*
|
|
25
|
+
* @param {String?} nodeType - The node type.
|
|
26
|
+
*/
|
|
17
27
|
constructor( nodeType = null ) {
|
|
18
28
|
|
|
19
29
|
super();
|
|
20
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
|
+
*/
|
|
21
37
|
this.nodeType = nodeType;
|
|
22
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
|
+
*/
|
|
23
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
|
+
*/
|
|
24
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
|
+
*/
|
|
25
61
|
this.updateAfterType = NodeUpdateType.NONE;
|
|
26
62
|
|
|
63
|
+
/**
|
|
64
|
+
* The UUID of the node.
|
|
65
|
+
*
|
|
66
|
+
* @type {String}
|
|
67
|
+
* @readonly
|
|
68
|
+
*/
|
|
27
69
|
this.uuid = MathUtils.generateUUID();
|
|
28
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
|
+
*/
|
|
29
78
|
this.version = 0;
|
|
30
79
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
+
*/
|
|
34
88
|
this.global = false;
|
|
35
89
|
|
|
90
|
+
/**
|
|
91
|
+
* This flag can be used for type testing.
|
|
92
|
+
*
|
|
93
|
+
* @type {Boolean}
|
|
94
|
+
* @readonly
|
|
95
|
+
* @default true
|
|
96
|
+
*/
|
|
36
97
|
this.isNode = true;
|
|
37
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
|
+
|
|
38
119
|
Object.defineProperty( this, 'id', { value: _nodeId ++ } );
|
|
39
120
|
|
|
40
121
|
}
|
|
41
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
|
+
*/
|
|
42
130
|
set needsUpdate( value ) {
|
|
43
131
|
|
|
44
132
|
if ( value === true ) {
|
|
@@ -49,12 +137,25 @@ class Node extends EventDispatcher {
|
|
|
49
137
|
|
|
50
138
|
}
|
|
51
139
|
|
|
140
|
+
/**
|
|
141
|
+
* The type of the class. The value is usually the constructor name.
|
|
142
|
+
*
|
|
143
|
+
* @type {String}
|
|
144
|
+
* @readonly
|
|
145
|
+
*/
|
|
52
146
|
get type() {
|
|
53
147
|
|
|
54
148
|
return this.constructor.type;
|
|
55
149
|
|
|
56
150
|
}
|
|
57
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
|
+
*/
|
|
58
159
|
onUpdate( callback, updateType ) {
|
|
59
160
|
|
|
60
161
|
this.updateType = updateType;
|
|
@@ -64,24 +165,51 @@ class Node extends EventDispatcher {
|
|
|
64
165
|
|
|
65
166
|
}
|
|
66
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
|
+
*/
|
|
67
175
|
onFrameUpdate( callback ) {
|
|
68
176
|
|
|
69
177
|
return this.onUpdate( callback, NodeUpdateType.FRAME );
|
|
70
178
|
|
|
71
179
|
}
|
|
72
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
|
+
*/
|
|
73
188
|
onRenderUpdate( callback ) {
|
|
74
189
|
|
|
75
190
|
return this.onUpdate( callback, NodeUpdateType.RENDER );
|
|
76
191
|
|
|
77
192
|
}
|
|
78
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
|
+
*/
|
|
79
201
|
onObjectUpdate( callback ) {
|
|
80
202
|
|
|
81
203
|
return this.onUpdate( callback, NodeUpdateType.OBJECT );
|
|
82
204
|
|
|
83
205
|
}
|
|
84
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
|
+
*/
|
|
85
213
|
onReference( callback ) {
|
|
86
214
|
|
|
87
215
|
this.updateReference = callback.bind( this.getSelf() );
|
|
@@ -90,6 +218,12 @@ class Node extends EventDispatcher {
|
|
|
90
218
|
|
|
91
219
|
}
|
|
92
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
|
+
*/
|
|
93
227
|
getSelf() {
|
|
94
228
|
|
|
95
229
|
// Returns non-node object.
|
|
@@ -98,18 +232,39 @@ class Node extends EventDispatcher {
|
|
|
98
232
|
|
|
99
233
|
}
|
|
100
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
|
+
*/
|
|
101
242
|
updateReference( /*state*/ ) {
|
|
102
243
|
|
|
103
244
|
return this;
|
|
104
245
|
|
|
105
246
|
}
|
|
106
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
|
+
*/
|
|
107
256
|
isGlobal( /*builder*/ ) {
|
|
108
257
|
|
|
109
258
|
return this.global;
|
|
110
259
|
|
|
111
260
|
}
|
|
112
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
|
+
*/
|
|
113
268
|
* getChildren() {
|
|
114
269
|
|
|
115
270
|
for ( const { childNode } of getNodeChildren( this ) ) {
|
|
@@ -120,12 +275,28 @@ class Node extends EventDispatcher {
|
|
|
120
275
|
|
|
121
276
|
}
|
|
122
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
|
+
*/
|
|
123
282
|
dispose() {
|
|
124
283
|
|
|
125
284
|
this.dispatchEvent( { type: 'dispose' } );
|
|
126
285
|
|
|
127
286
|
}
|
|
128
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
|
+
*/
|
|
129
300
|
traverse( callback ) {
|
|
130
301
|
|
|
131
302
|
callback( this );
|
|
@@ -138,13 +309,19 @@ class Node extends EventDispatcher {
|
|
|
138
309
|
|
|
139
310
|
}
|
|
140
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
|
+
*/
|
|
141
318
|
getCacheKey( force = false ) {
|
|
142
319
|
|
|
143
320
|
force = force || this.version !== this._cacheKeyVersion;
|
|
144
321
|
|
|
145
322
|
if ( force === true || this._cacheKey === null ) {
|
|
146
323
|
|
|
147
|
-
this._cacheKey = getCacheKey( this, force );
|
|
324
|
+
this._cacheKey = hash( getCacheKey( this, force ), this.customCacheKey() );
|
|
148
325
|
this._cacheKeyVersion = this.version;
|
|
149
326
|
|
|
150
327
|
}
|
|
@@ -153,36 +330,83 @@ class Node extends EventDispatcher {
|
|
|
153
330
|
|
|
154
331
|
}
|
|
155
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
|
+
*/
|
|
156
349
|
getScope() {
|
|
157
350
|
|
|
158
351
|
return this;
|
|
159
352
|
|
|
160
353
|
}
|
|
161
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
|
+
*/
|
|
162
363
|
getHash( /*builder*/ ) {
|
|
163
364
|
|
|
164
365
|
return this.uuid;
|
|
165
366
|
|
|
166
367
|
}
|
|
167
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Returns the update type of {@link Node#update}.
|
|
371
|
+
*
|
|
372
|
+
* @return {NodeUpdateType} The update type.
|
|
373
|
+
*/
|
|
168
374
|
getUpdateType() {
|
|
169
375
|
|
|
170
376
|
return this.updateType;
|
|
171
377
|
|
|
172
378
|
}
|
|
173
379
|
|
|
380
|
+
/**
|
|
381
|
+
* Returns the update type of {@link Node#updateBefore}.
|
|
382
|
+
*
|
|
383
|
+
* @return {NodeUpdateType} The update type.
|
|
384
|
+
*/
|
|
174
385
|
getUpdateBeforeType() {
|
|
175
386
|
|
|
176
387
|
return this.updateBeforeType;
|
|
177
388
|
|
|
178
389
|
}
|
|
179
390
|
|
|
391
|
+
/**
|
|
392
|
+
* Returns the update type of {@link Node#updateAfter}.
|
|
393
|
+
*
|
|
394
|
+
* @return {NodeUpdateType} The update type.
|
|
395
|
+
*/
|
|
180
396
|
getUpdateAfterType() {
|
|
181
397
|
|
|
182
398
|
return this.updateAfterType;
|
|
183
399
|
|
|
184
400
|
}
|
|
185
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
|
+
*/
|
|
186
410
|
getElementType( builder ) {
|
|
187
411
|
|
|
188
412
|
const type = this.getNodeType( builder );
|
|
@@ -192,6 +416,25 @@ class Node extends EventDispatcher {
|
|
|
192
416
|
|
|
193
417
|
}
|
|
194
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( /*uilder, 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
|
+
*/
|
|
195
438
|
getNodeType( builder ) {
|
|
196
439
|
|
|
197
440
|
const nodeProperties = builder.getNodeProperties( this );
|
|
@@ -206,6 +449,15 @@ class Node extends EventDispatcher {
|
|
|
206
449
|
|
|
207
450
|
}
|
|
208
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
|
+
*/
|
|
209
461
|
getShared( builder ) {
|
|
210
462
|
|
|
211
463
|
const hash = this.getHash( builder );
|
|
@@ -215,6 +467,14 @@ class Node extends EventDispatcher {
|
|
|
215
467
|
|
|
216
468
|
}
|
|
217
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
|
+
*/
|
|
218
478
|
setup( builder ) {
|
|
219
479
|
|
|
220
480
|
const nodeProperties = builder.getNodeProperties( this );
|
|
@@ -227,11 +487,18 @@ class Node extends EventDispatcher {
|
|
|
227
487
|
|
|
228
488
|
}
|
|
229
489
|
|
|
230
|
-
// return a outputNode if exists
|
|
231
|
-
|
|
490
|
+
// return a outputNode if exists or null
|
|
491
|
+
|
|
492
|
+
return nodeProperties.outputNode || null;
|
|
232
493
|
|
|
233
494
|
}
|
|
234
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
|
+
*/
|
|
235
502
|
analyze( builder ) {
|
|
236
503
|
|
|
237
504
|
const usageCount = builder.increaseUsage( this );
|
|
@@ -256,6 +523,14 @@ class Node extends EventDispatcher {
|
|
|
256
523
|
|
|
257
524
|
}
|
|
258
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
|
+
*/
|
|
259
534
|
generate( builder, output ) {
|
|
260
535
|
|
|
261
536
|
const { outputNode } = builder.getNodeProperties( this );
|
|
@@ -268,24 +543,56 @@ class Node extends EventDispatcher {
|
|
|
268
543
|
|
|
269
544
|
}
|
|
270
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
|
+
*/
|
|
271
554
|
updateBefore( /*frame*/ ) {
|
|
272
555
|
|
|
273
556
|
console.warn( 'Abstract function.' );
|
|
274
557
|
|
|
275
558
|
}
|
|
276
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
|
+
*/
|
|
277
568
|
updateAfter( /*frame*/ ) {
|
|
278
569
|
|
|
279
570
|
console.warn( 'Abstract function.' );
|
|
280
571
|
|
|
281
572
|
}
|
|
282
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
|
+
*/
|
|
283
582
|
update( /*frame*/ ) {
|
|
284
583
|
|
|
285
584
|
console.warn( 'Abstract function.' );
|
|
286
585
|
|
|
287
586
|
}
|
|
288
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
|
+
*/
|
|
289
596
|
build( builder, output = null ) {
|
|
290
597
|
|
|
291
598
|
const refNode = this.getShared( builder );
|
|
@@ -316,17 +623,19 @@ class Node extends EventDispatcher {
|
|
|
316
623
|
|
|
317
624
|
if ( properties.initialized !== true ) {
|
|
318
625
|
|
|
319
|
-
const stackNodesBeforeSetup = builder.stack.nodes.length;
|
|
626
|
+
//const stackNodesBeforeSetup = builder.stack.nodes.length;
|
|
320
627
|
|
|
321
628
|
properties.initialized = true;
|
|
322
|
-
properties.outputNode = this.setup( builder );
|
|
323
629
|
|
|
324
|
-
|
|
630
|
+
const outputNode = this.setup( builder ); // return a node or null
|
|
631
|
+
const isNodeOutput = outputNode && outputNode.isNode === true;
|
|
632
|
+
|
|
633
|
+
/*if ( isNodeOutput && builder.stack.nodes.length !== stackNodesBeforeSetup ) {
|
|
325
634
|
|
|
326
635
|
// !! no outputNode !!
|
|
327
|
-
//
|
|
636
|
+
//outputNode = builder.stack;
|
|
328
637
|
|
|
329
|
-
}
|
|
638
|
+
}*/
|
|
330
639
|
|
|
331
640
|
for ( const childNode of Object.values( properties ) ) {
|
|
332
641
|
|
|
@@ -338,6 +647,14 @@ class Node extends EventDispatcher {
|
|
|
338
647
|
|
|
339
648
|
}
|
|
340
649
|
|
|
650
|
+
if ( isNodeOutput ) {
|
|
651
|
+
|
|
652
|
+
outputNode.build( builder );
|
|
653
|
+
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
properties.outputNode = outputNode;
|
|
657
|
+
|
|
341
658
|
}
|
|
342
659
|
|
|
343
660
|
} else if ( buildStage === 'analyze' ) {
|
|
@@ -384,12 +701,22 @@ class Node extends EventDispatcher {
|
|
|
384
701
|
|
|
385
702
|
}
|
|
386
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
|
+
*/
|
|
387
709
|
getSerializeChildren() {
|
|
388
710
|
|
|
389
711
|
return getNodeChildren( this );
|
|
390
712
|
|
|
391
713
|
}
|
|
392
714
|
|
|
715
|
+
/**
|
|
716
|
+
* Serializes the node to JSON.
|
|
717
|
+
*
|
|
718
|
+
* @param {Object} json - The output JSON object.
|
|
719
|
+
*/
|
|
393
720
|
serialize( json ) {
|
|
394
721
|
|
|
395
722
|
const nodeChildren = this.getSerializeChildren();
|
|
@@ -424,6 +751,11 @@ class Node extends EventDispatcher {
|
|
|
424
751
|
|
|
425
752
|
}
|
|
426
753
|
|
|
754
|
+
/**
|
|
755
|
+
* Deserializes the node from the given JSON.
|
|
756
|
+
*
|
|
757
|
+
* @param {Object} json - The JSON object.
|
|
758
|
+
*/
|
|
427
759
|
deserialize( json ) {
|
|
428
760
|
|
|
429
761
|
if ( json.inputNodes !== undefined ) {
|
|
@@ -472,6 +804,12 @@ class Node extends EventDispatcher {
|
|
|
472
804
|
|
|
473
805
|
}
|
|
474
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
|
+
*/
|
|
475
813
|
toJSON( meta ) {
|
|
476
814
|
|
|
477
815
|
const { uuid, type } = this;
|
|
@@ -1,11 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* {@link NodeBuilder} is going to create instances of this class during the build process
|
|
3
|
+
* of nodes. They represent the final shader attributes that are going to be generated
|
|
4
|
+
* by the builder. Arrays of node attributes is maintained in {@link NodeBuilder#attributes}
|
|
5
|
+
* and {@link NodeBuilder#bufferAttributes} for this purpose.
|
|
6
|
+
*/
|
|
1
7
|
class NodeAttribute {
|
|
2
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Constructs a new node attribute.
|
|
11
|
+
*
|
|
12
|
+
* @param {String} name - The name of the attribute.
|
|
13
|
+
* @param {String} type - The type of the attribute.
|
|
14
|
+
* @param {Node?} node - An optional reference to the node.
|
|
15
|
+
*/
|
|
3
16
|
constructor( name, type, node = null ) {
|
|
4
17
|
|
|
18
|
+
/**
|
|
19
|
+
* This flag can be used for type testing.
|
|
20
|
+
*
|
|
21
|
+
* @type {Boolean}
|
|
22
|
+
* @readonly
|
|
23
|
+
* @default true
|
|
24
|
+
*/
|
|
5
25
|
this.isNodeAttribute = true;
|
|
6
26
|
|
|
27
|
+
/**
|
|
28
|
+
* The name of the attribute.
|
|
29
|
+
*
|
|
30
|
+
* @type {String}
|
|
31
|
+
*/
|
|
7
32
|
this.name = name;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The type of the attribute.
|
|
36
|
+
*
|
|
37
|
+
* @type {String}
|
|
38
|
+
*/
|
|
8
39
|
this.type = type;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* An optional reference to the node.
|
|
43
|
+
*
|
|
44
|
+
* @type {Node?}
|
|
45
|
+
* @default null
|
|
46
|
+
*/
|
|
9
47
|
this.node = node;
|
|
10
48
|
|
|
11
49
|
}
|