super-three 0.170.1 → 0.172.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +157 -49
- package/build/three.core.js +104 -42
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +53 -8
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +10 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +21191 -1008
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +21189 -1008
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +3 -2
- package/examples/jsm/controls/ArcballControls.js +28 -19
- 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 +11 -7
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -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 +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +22 -2
- 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 -1
- 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/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
- package/examples/jsm/misc/Volume.js +20 -12
- package/examples/jsm/misc/VolumeSlice.js +2 -2
- 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 +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/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/SobelOperatorShader.js +1 -1
- 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 +2 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +9 -4
- 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/PerspectiveCamera.js +18 -2
- package/src/constants.js +1 -1
- 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/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/InstancedPointsNodeMaterial.js +72 -19
- 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 +474 -21
- package/src/materials/nodes/PointsNodeMaterial.js +22 -13
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
- package/src/nodes/Nodes.js +1 -6
- package/src/nodes/TSL.js +2 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +24 -5
- package/src/nodes/accessors/BatchNode.js +39 -3
- 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 +49 -0
- 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/InstancedPointsMaterialNode.js +13 -0
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +302 -8
- 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 +59 -3
- package/src/nodes/accessors/Object3DNode.js +102 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +53 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
- package/src/nodes/accessors/ReferenceNode.js +202 -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 +168 -4
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +36 -0
- package/src/nodes/accessors/Texture3DNode.js +89 -5
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +309 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +223 -23
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +82 -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/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 +24 -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 +337 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +945 -15
- 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 +141 -0
- package/src/nodes/core/NodeVar.js +30 -0
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +33 -2
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +78 -0
- package/src/nodes/core/StructTypeNode.js +39 -1
- package/src/nodes/core/TempNode.js +30 -4
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +52 -0
- package/src/nodes/core/VaryingNode.js +83 -2
- package/src/nodes/core/constants.js +36 -0
- 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 +298 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +87 -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 +93 -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 +157 -1
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -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 +240 -34
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +70 -3
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +614 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +233 -0
- 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 +1 -1
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/tsl/TSLBase.js +2 -2
- package/src/nodes/utils/ArrayElementNode.js +38 -2
- 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 +74 -1
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -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 +40 -0
- package/src/nodes/utils/Timer.js +19 -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 +1 -2
- package/src/objects/ClippingGroup.js +49 -0
- package/src/renderers/WebGLRenderer.js +23 -4
- package/src/renderers/common/Animation.js +63 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +467 -52
- package/src/renderers/common/Background.js +34 -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 +38 -1
- package/src/renderers/common/ClippingContext.js +107 -14
- package/src/renderers/common/Color4.js +36 -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 +98 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +87 -0
- package/src/renderers/common/Lighting.js +26 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +75 -3
- 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 +33 -10
- package/src/renderers/common/RenderContext.js +169 -4
- package/src/renderers/common/RenderContexts.js +42 -2
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +31 -0
- package/src/renderers/common/RenderObject.js +328 -4
- package/src/renderers/common/RenderObjects.js +101 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1096 -31
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +121 -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 +83 -0
- package/src/renderers/common/Uniform.js +188 -2
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +139 -2
- package/src/renderers/common/extras/PMREMGenerator.js +24 -3
- package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +91 -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 +189 -0
- 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 +327 -60
- 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-fallback/WebGLBackend.js +547 -29
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +480 -49
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
- package/src/renderers/webgpu/WebGPURenderer.js +35 -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 +59 -11
- 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 +10 -8
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +7 -1
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -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/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- 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
|
@@ -36,49 +36,254 @@ function getKeys( obj ) {
|
|
|
36
36
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
/**
|
|
40
|
+
* A render object is the renderer's representation of single entity that gets drawn
|
|
41
|
+
* with a draw command. There is no unique mapping of render objects to 3D objects in the
|
|
42
|
+
* scene since render objects also depend from the used material, the current render context
|
|
43
|
+
* and the current scene's lighting.
|
|
44
|
+
*
|
|
45
|
+
* In general, the basic process of the renderer is:
|
|
46
|
+
*
|
|
47
|
+
* - Analyze the 3D objects in the scene and generate render lists containing render items.
|
|
48
|
+
* - Process the render lists by calling one or more render commands for each render item.
|
|
49
|
+
* - For each render command, request a render object and perform the draw.
|
|
50
|
+
*
|
|
51
|
+
* The module provides an interface to get data required for the draw command like the actual
|
|
52
|
+
* draw parameters or vertex buffers. It also holds a series of caching related methods since
|
|
53
|
+
* creating render objects should only be done when necessary.
|
|
54
|
+
*
|
|
55
|
+
* @private
|
|
56
|
+
*/
|
|
39
57
|
export default class RenderObject {
|
|
40
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Constructs a new render object.
|
|
61
|
+
*
|
|
62
|
+
* @param {Nodes} nodes - Renderer component for managing nodes related logic.
|
|
63
|
+
* @param {Geometries} geometries - Renderer component for managing geometries.
|
|
64
|
+
* @param {Renderer} renderer - The renderer.
|
|
65
|
+
* @param {Object3D} object - The 3D object.
|
|
66
|
+
* @param {Material} material - The 3D object's material.
|
|
67
|
+
* @param {Scene} scene - The scene the 3D object belongs to.
|
|
68
|
+
* @param {Camera} camera - The camera the object should be rendered with.
|
|
69
|
+
* @param {LightsNode} lightsNode - The lights node.
|
|
70
|
+
* @param {RenderContext} renderContext - The render context.
|
|
71
|
+
* @param {ClippingContext} clippingContext - The clipping context.
|
|
72
|
+
*/
|
|
41
73
|
constructor( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext ) {
|
|
42
74
|
|
|
75
|
+
this.id = _id ++;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Renderer component for managing nodes related logic.
|
|
79
|
+
*
|
|
80
|
+
* @type {Nodes}
|
|
81
|
+
* @private
|
|
82
|
+
*/
|
|
43
83
|
this._nodes = nodes;
|
|
44
|
-
this._geometries = geometries;
|
|
45
84
|
|
|
46
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Renderer component for managing geometries.
|
|
87
|
+
*
|
|
88
|
+
* @type {Geometries}
|
|
89
|
+
* @private
|
|
90
|
+
*/
|
|
91
|
+
this._geometries = geometries;
|
|
47
92
|
|
|
93
|
+
/**
|
|
94
|
+
* The renderer.
|
|
95
|
+
*
|
|
96
|
+
* @type {Renderer}
|
|
97
|
+
*/
|
|
48
98
|
this.renderer = renderer;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* The 3D object.
|
|
102
|
+
*
|
|
103
|
+
* @type {Object3D}
|
|
104
|
+
*/
|
|
49
105
|
this.object = object;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* The 3D object's material.
|
|
109
|
+
*
|
|
110
|
+
* @type {Material}
|
|
111
|
+
*/
|
|
50
112
|
this.material = material;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* The scene the 3D object belongs to.
|
|
116
|
+
*
|
|
117
|
+
* @type {Scene}
|
|
118
|
+
*/
|
|
51
119
|
this.scene = scene;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* The camera the 3D object should be rendered with.
|
|
123
|
+
*
|
|
124
|
+
* @type {Camera}
|
|
125
|
+
*/
|
|
52
126
|
this.camera = camera;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* The lights node.
|
|
130
|
+
*
|
|
131
|
+
* @type {LightsNode}
|
|
132
|
+
*/
|
|
53
133
|
this.lightsNode = lightsNode;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* The render context.
|
|
137
|
+
*
|
|
138
|
+
* @type {RenderContext}
|
|
139
|
+
*/
|
|
54
140
|
this.context = renderContext;
|
|
55
141
|
|
|
142
|
+
/**
|
|
143
|
+
* The 3D object's geometry.
|
|
144
|
+
*
|
|
145
|
+
* @type {BufferGeometry}
|
|
146
|
+
*/
|
|
56
147
|
this.geometry = object.geometry;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* The render object's version.
|
|
151
|
+
*
|
|
152
|
+
* @type {Number}
|
|
153
|
+
*/
|
|
57
154
|
this.version = material.version;
|
|
58
155
|
|
|
156
|
+
/**
|
|
157
|
+
* The draw range of the geometry.
|
|
158
|
+
*
|
|
159
|
+
* @type {Object?}
|
|
160
|
+
* @default null
|
|
161
|
+
*/
|
|
59
162
|
this.drawRange = null;
|
|
60
163
|
|
|
164
|
+
/**
|
|
165
|
+
* An array holding the buffer attributes
|
|
166
|
+
* of the render object. This entails attribute
|
|
167
|
+
* definitions on geometry and node level.
|
|
168
|
+
*
|
|
169
|
+
* @type {Array<BufferAttribute>?}
|
|
170
|
+
* @default null
|
|
171
|
+
*/
|
|
61
172
|
this.attributes = null;
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* A reference to a render pipeline the render
|
|
176
|
+
* object is processed with.
|
|
177
|
+
*
|
|
178
|
+
* @type {RenderPipeline}
|
|
179
|
+
* @default null
|
|
180
|
+
*/
|
|
62
181
|
this.pipeline = null;
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* An array holding the vertex buffers which can
|
|
185
|
+
* be buffer attributes but also interleaved buffers.
|
|
186
|
+
*
|
|
187
|
+
* @type {Array<BufferAttribute|InterleavedBuffer>?}
|
|
188
|
+
* @default null
|
|
189
|
+
*/
|
|
63
190
|
this.vertexBuffers = null;
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* The parameters for the draw command.
|
|
194
|
+
*
|
|
195
|
+
* @type {Object?}
|
|
196
|
+
* @default null
|
|
197
|
+
*/
|
|
64
198
|
this.drawParams = null;
|
|
65
199
|
|
|
200
|
+
/**
|
|
201
|
+
* If this render object is used inside a render bundle,
|
|
202
|
+
* this property points to the respective bundle group.
|
|
203
|
+
*
|
|
204
|
+
* @type {BundleGroup?}
|
|
205
|
+
* @default null
|
|
206
|
+
*/
|
|
66
207
|
this.bundle = null;
|
|
67
208
|
|
|
209
|
+
/**
|
|
210
|
+
* The clipping context.
|
|
211
|
+
*
|
|
212
|
+
* @type {ClippingContext}
|
|
213
|
+
*/
|
|
68
214
|
this.clippingContext = clippingContext;
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* The clipping context's cache key.
|
|
218
|
+
*
|
|
219
|
+
* @type {String}
|
|
220
|
+
*/
|
|
69
221
|
this.clippingContextCacheKey = clippingContext !== null ? clippingContext.cacheKey : '';
|
|
70
222
|
|
|
223
|
+
/**
|
|
224
|
+
* The initial node cache key.
|
|
225
|
+
*
|
|
226
|
+
* @type {Number}
|
|
227
|
+
*/
|
|
71
228
|
this.initialNodesCacheKey = this.getDynamicCacheKey();
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* The initial cache key.
|
|
232
|
+
*
|
|
233
|
+
* @type {Number}
|
|
234
|
+
*/
|
|
72
235
|
this.initialCacheKey = this.getCacheKey();
|
|
73
236
|
|
|
237
|
+
/**
|
|
238
|
+
* The node builder state.
|
|
239
|
+
*
|
|
240
|
+
* @type {NodeBuilderState?}
|
|
241
|
+
* @private
|
|
242
|
+
* @default null
|
|
243
|
+
*/
|
|
74
244
|
this._nodeBuilderState = null;
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* An array of bindings.
|
|
248
|
+
*
|
|
249
|
+
* @type {Array<BindGroup>?}
|
|
250
|
+
* @private
|
|
251
|
+
* @default null
|
|
252
|
+
*/
|
|
75
253
|
this._bindings = null;
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Reference to the node material observer.
|
|
257
|
+
*
|
|
258
|
+
* @type {NodeMaterialObserver?}
|
|
259
|
+
* @private
|
|
260
|
+
* @default null
|
|
261
|
+
*/
|
|
76
262
|
this._monitor = null;
|
|
77
263
|
|
|
264
|
+
/**
|
|
265
|
+
* An event listener which is defined by `RenderObjects`. It performs
|
|
266
|
+
* clean up tasks when `dispose()` on this render object.
|
|
267
|
+
*
|
|
268
|
+
* @method
|
|
269
|
+
*/
|
|
78
270
|
this.onDispose = null;
|
|
79
271
|
|
|
272
|
+
/**
|
|
273
|
+
* This flag can be used for type testing.
|
|
274
|
+
*
|
|
275
|
+
* @type {Boolean}
|
|
276
|
+
* @readonly
|
|
277
|
+
* @default true
|
|
278
|
+
*/
|
|
80
279
|
this.isRenderObject = true;
|
|
81
280
|
|
|
281
|
+
/**
|
|
282
|
+
* An event listener which is executed when `dispose()` is called on
|
|
283
|
+
* the render object's material.
|
|
284
|
+
*
|
|
285
|
+
* @method
|
|
286
|
+
*/
|
|
82
287
|
this.onMaterialDispose = () => {
|
|
83
288
|
|
|
84
289
|
this.dispose();
|
|
@@ -89,12 +294,23 @@ export default class RenderObject {
|
|
|
89
294
|
|
|
90
295
|
}
|
|
91
296
|
|
|
92
|
-
|
|
297
|
+
/**
|
|
298
|
+
* Updates the clipping context.
|
|
299
|
+
*
|
|
300
|
+
* @param {ClippingContext} context - The clipping context to set.
|
|
301
|
+
*/
|
|
302
|
+
updateClipping( context ) {
|
|
93
303
|
|
|
94
|
-
this.clippingContext =
|
|
304
|
+
this.clippingContext = context;
|
|
95
305
|
|
|
96
306
|
}
|
|
97
307
|
|
|
308
|
+
/**
|
|
309
|
+
* Whether the clipping requires an update or not.
|
|
310
|
+
*
|
|
311
|
+
* @type {Boolean}
|
|
312
|
+
* @readonly
|
|
313
|
+
*/
|
|
98
314
|
get clippingNeedsUpdate() {
|
|
99
315
|
|
|
100
316
|
if ( this.clippingContext === null || this.clippingContext.cacheKey === this.clippingContextCacheKey ) return false;
|
|
@@ -105,48 +321,90 @@ export default class RenderObject {
|
|
|
105
321
|
|
|
106
322
|
}
|
|
107
323
|
|
|
324
|
+
/**
|
|
325
|
+
* The number of clipping planes defined in context of hardware clipping.
|
|
326
|
+
*
|
|
327
|
+
* @type {Number}
|
|
328
|
+
* @readonly
|
|
329
|
+
*/
|
|
108
330
|
get hardwareClippingPlanes() {
|
|
109
331
|
|
|
110
332
|
return this.material.hardwareClipping === true ? this.clippingContext.unionClippingCount : 0;
|
|
111
333
|
|
|
112
334
|
}
|
|
113
335
|
|
|
336
|
+
/**
|
|
337
|
+
* Returns the node builder state of this render object.
|
|
338
|
+
*
|
|
339
|
+
* @return {NodeBuilderState} The node buider state.
|
|
340
|
+
*/
|
|
114
341
|
getNodeBuilderState() {
|
|
115
342
|
|
|
116
343
|
return this._nodeBuilderState || ( this._nodeBuilderState = this._nodes.getForRender( this ) );
|
|
117
344
|
|
|
118
345
|
}
|
|
119
346
|
|
|
347
|
+
/**
|
|
348
|
+
* Returns the node material observer of this render object.
|
|
349
|
+
*
|
|
350
|
+
* @return {NodeMaterialObserver} The node material observer.
|
|
351
|
+
*/
|
|
120
352
|
getMonitor() {
|
|
121
353
|
|
|
122
354
|
return this._monitor || ( this._monitor = this.getNodeBuilderState().monitor );
|
|
123
355
|
|
|
124
356
|
}
|
|
125
357
|
|
|
358
|
+
/**
|
|
359
|
+
* Returns an array of bind groups of this render object.
|
|
360
|
+
*
|
|
361
|
+
* @return {Array<BindGroup>} The bindings.
|
|
362
|
+
*/
|
|
126
363
|
getBindings() {
|
|
127
364
|
|
|
128
365
|
return this._bindings || ( this._bindings = this.getNodeBuilderState().createBindings() );
|
|
129
366
|
|
|
130
367
|
}
|
|
131
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Returns the index of the render object's geometry.
|
|
371
|
+
*
|
|
372
|
+
* @return {BufferAttribute?} The index. Returns `null` for non-indexed geometries.
|
|
373
|
+
*/
|
|
132
374
|
getIndex() {
|
|
133
375
|
|
|
134
376
|
return this._geometries.getIndex( this );
|
|
135
377
|
|
|
136
378
|
}
|
|
137
379
|
|
|
380
|
+
/**
|
|
381
|
+
* Returns the indirect buffer attribute.
|
|
382
|
+
*
|
|
383
|
+
* @return {BufferAttribute?} The indirect attribute. `null` if no indirect drawing is used.
|
|
384
|
+
*/
|
|
138
385
|
getIndirect() {
|
|
139
386
|
|
|
140
387
|
return this._geometries.getIndirect( this );
|
|
141
388
|
|
|
142
389
|
}
|
|
143
390
|
|
|
391
|
+
/**
|
|
392
|
+
* Returns an array that acts as a key for identifying the render object in a chain map.
|
|
393
|
+
*
|
|
394
|
+
* @return {Array<Object>} An array with object references.
|
|
395
|
+
*/
|
|
144
396
|
getChainArray() {
|
|
145
397
|
|
|
146
398
|
return [ this.object, this.material, this.context, this.lightsNode ];
|
|
147
399
|
|
|
148
400
|
}
|
|
149
401
|
|
|
402
|
+
/**
|
|
403
|
+
* This method is used when the geometry of a 3D object has been exchanged and the
|
|
404
|
+
* respective render object now requires an update.
|
|
405
|
+
*
|
|
406
|
+
* @param {BufferGeometry} geometry - The geometry to set.
|
|
407
|
+
*/
|
|
150
408
|
setGeometry( geometry ) {
|
|
151
409
|
|
|
152
410
|
this.geometry = geometry;
|
|
@@ -154,6 +412,12 @@ export default class RenderObject {
|
|
|
154
412
|
|
|
155
413
|
}
|
|
156
414
|
|
|
415
|
+
/**
|
|
416
|
+
* Returns the buffer attributes of the render object. The returned array holds
|
|
417
|
+
* attribute definitions on geometry and node level.
|
|
418
|
+
*
|
|
419
|
+
* @return {Array<BufferAttribute>} An array with buffer attributes.
|
|
420
|
+
*/
|
|
157
421
|
getAttributes() {
|
|
158
422
|
|
|
159
423
|
if ( this.attributes !== null ) return this.attributes;
|
|
@@ -184,6 +448,11 @@ export default class RenderObject {
|
|
|
184
448
|
|
|
185
449
|
}
|
|
186
450
|
|
|
451
|
+
/**
|
|
452
|
+
* Returns the vertex buffers of the render object.
|
|
453
|
+
*
|
|
454
|
+
* @return {Array<BufferAttribute|InterleavedBuffer>} An array with buffer attribute or interleaved buffers.
|
|
455
|
+
*/
|
|
187
456
|
getVertexBuffers() {
|
|
188
457
|
|
|
189
458
|
if ( this.vertexBuffers === null ) this.getAttributes();
|
|
@@ -192,6 +461,11 @@ export default class RenderObject {
|
|
|
192
461
|
|
|
193
462
|
}
|
|
194
463
|
|
|
464
|
+
/**
|
|
465
|
+
* Returns the draw parameters for the render object.
|
|
466
|
+
*
|
|
467
|
+
* @return {{vertexCount: Number, firstVertex: Number, instanceCount: Number, firstInstance: Number}} The draw parameters.
|
|
468
|
+
*/
|
|
195
469
|
getDrawParameters() {
|
|
196
470
|
|
|
197
471
|
const { object, material, geometry, group, drawRange } = this;
|
|
@@ -258,6 +532,13 @@ export default class RenderObject {
|
|
|
258
532
|
|
|
259
533
|
}
|
|
260
534
|
|
|
535
|
+
/**
|
|
536
|
+
* Returns the render object's geometry cache key.
|
|
537
|
+
*
|
|
538
|
+
* The geometry cache key is part of the material cache key.
|
|
539
|
+
*
|
|
540
|
+
* @return {String} The geometry cache key.
|
|
541
|
+
*/
|
|
261
542
|
getGeometryCacheKey() {
|
|
262
543
|
|
|
263
544
|
const { geometry } = this;
|
|
@@ -287,6 +568,13 @@ export default class RenderObject {
|
|
|
287
568
|
|
|
288
569
|
}
|
|
289
570
|
|
|
571
|
+
/**
|
|
572
|
+
* Returns the render object's material cache key.
|
|
573
|
+
*
|
|
574
|
+
* The material cache key is part of the render object cache key.
|
|
575
|
+
*
|
|
576
|
+
* @return {String} The material cache key.
|
|
577
|
+
*/
|
|
290
578
|
getMaterialCacheKey() {
|
|
291
579
|
|
|
292
580
|
const { object, material } = this;
|
|
@@ -385,18 +673,46 @@ export default class RenderObject {
|
|
|
385
673
|
|
|
386
674
|
}
|
|
387
675
|
|
|
676
|
+
/**
|
|
677
|
+
* Whether the geometry requires an update or not.
|
|
678
|
+
*
|
|
679
|
+
* @type {Boolean}
|
|
680
|
+
* @readonly
|
|
681
|
+
*/
|
|
388
682
|
get needsGeometryUpdate() {
|
|
389
683
|
|
|
390
684
|
return this.geometry.id !== this.object.geometry.id;
|
|
391
685
|
|
|
392
686
|
}
|
|
393
687
|
|
|
688
|
+
/**
|
|
689
|
+
* Whether the render object requires an update or not.
|
|
690
|
+
*
|
|
691
|
+
* Note: There are two distinct places where render objects are checked for an update.
|
|
692
|
+
*
|
|
693
|
+
* 1. In `RenderObjects.get()` which is executed when the render object is request. This
|
|
694
|
+
* method checks the `needsUpdate` flag and recreates the render object if necessary.
|
|
695
|
+
* 2. In `Renderer._renderObjectDirect()` right after getting the render object via
|
|
696
|
+
* `RenderObjects.get()`. The render object's NodeMaterialObserver is then used to detect
|
|
697
|
+
* a need for a refresh due to material, geometry or object related value changes.
|
|
698
|
+
*
|
|
699
|
+
* TODO: Investigate if it's possible to merge boths steps so there is only a single place
|
|
700
|
+
* that performs the 'needsUpdate' check.
|
|
701
|
+
*
|
|
702
|
+
* @type {Boolean}
|
|
703
|
+
* @readonly
|
|
704
|
+
*/
|
|
394
705
|
get needsUpdate() {
|
|
395
706
|
|
|
396
707
|
return /*this.object.static !== true &&*/ ( this.initialNodesCacheKey !== this.getDynamicCacheKey() || this.clippingNeedsUpdate );
|
|
397
708
|
|
|
398
709
|
}
|
|
399
710
|
|
|
711
|
+
/**
|
|
712
|
+
* Returns the dynamic cache key which represents a key that is computed per draw command.
|
|
713
|
+
*
|
|
714
|
+
* @return {String} The cache key.
|
|
715
|
+
*/
|
|
400
716
|
getDynamicCacheKey() {
|
|
401
717
|
|
|
402
718
|
// Environment Nodes Cache Key
|
|
@@ -413,12 +729,20 @@ export default class RenderObject {
|
|
|
413
729
|
|
|
414
730
|
}
|
|
415
731
|
|
|
732
|
+
/**
|
|
733
|
+
* Returns the render object's cache key.
|
|
734
|
+
*
|
|
735
|
+
* @return {String} The cache key.
|
|
736
|
+
*/
|
|
416
737
|
getCacheKey() {
|
|
417
738
|
|
|
418
739
|
return this.getMaterialCacheKey() + this.getDynamicCacheKey();
|
|
419
740
|
|
|
420
741
|
}
|
|
421
742
|
|
|
743
|
+
/**
|
|
744
|
+
* Frees internal resources.
|
|
745
|
+
*/
|
|
422
746
|
dispose() {
|
|
423
747
|
|
|
424
748
|
this.material.removeEventListener( 'dispose', this.onMaterialDispose );
|
|
@@ -1,40 +1,109 @@
|
|
|
1
1
|
import ChainMap from './ChainMap.js';
|
|
2
2
|
import RenderObject from './RenderObject.js';
|
|
3
3
|
|
|
4
|
-
const
|
|
4
|
+
const _chainArray = [];
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* This module manages the render objects of the renderer.
|
|
8
|
+
*
|
|
9
|
+
* @private
|
|
10
|
+
*/
|
|
6
11
|
class RenderObjects {
|
|
7
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new render object management component.
|
|
15
|
+
*
|
|
16
|
+
* @param {Renderer} renderer - The renderer.
|
|
17
|
+
* @param {Nodes} nodes - Renderer component for managing nodes related logic.
|
|
18
|
+
* @param {Geometries} geometries - Renderer component for managing geometries.
|
|
19
|
+
* @param {Pipelines} pipelines - Renderer component for managing pipelines.
|
|
20
|
+
* @param {Bindings} bindings - Renderer component for managing bindings.
|
|
21
|
+
* @param {Info} info - Renderer component for managing metrics and monitoring data.
|
|
22
|
+
*/
|
|
8
23
|
constructor( renderer, nodes, geometries, pipelines, bindings, info ) {
|
|
9
24
|
|
|
25
|
+
/**
|
|
26
|
+
* The renderer.
|
|
27
|
+
*
|
|
28
|
+
* @type {Renderer}
|
|
29
|
+
*/
|
|
10
30
|
this.renderer = renderer;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Renderer component for managing nodes related logic.
|
|
34
|
+
*
|
|
35
|
+
* @type {Nodes}
|
|
36
|
+
*/
|
|
11
37
|
this.nodes = nodes;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Renderer component for managing geometries.
|
|
41
|
+
*
|
|
42
|
+
* @type {Geometries}
|
|
43
|
+
*/
|
|
12
44
|
this.geometries = geometries;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Renderer component for managing pipelines.
|
|
48
|
+
*
|
|
49
|
+
* @type {Pipelines}
|
|
50
|
+
*/
|
|
13
51
|
this.pipelines = pipelines;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Renderer component for managing bindings.
|
|
55
|
+
*
|
|
56
|
+
* @type {Bindings}
|
|
57
|
+
*/
|
|
14
58
|
this.bindings = bindings;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Renderer component for managing metrics and monitoring data.
|
|
62
|
+
*
|
|
63
|
+
* @type {Info}
|
|
64
|
+
*/
|
|
15
65
|
this.info = info;
|
|
16
66
|
|
|
67
|
+
/**
|
|
68
|
+
* A dictionary that manages render contexts in chain maps
|
|
69
|
+
* for each pass ID.
|
|
70
|
+
*
|
|
71
|
+
* @type {Object<String,ChainMap>}
|
|
72
|
+
*/
|
|
17
73
|
this.chainMaps = {};
|
|
18
74
|
|
|
19
75
|
}
|
|
20
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Returns a render object for the given object and state data.
|
|
79
|
+
*
|
|
80
|
+
* @param {Object3D} object - The 3D object.
|
|
81
|
+
* @param {Material} material - The 3D object's material.
|
|
82
|
+
* @param {Scene} scene - The scene the 3D object belongs to.
|
|
83
|
+
* @param {Camera} camera - The camera the 3D object should be rendered with.
|
|
84
|
+
* @param {LightsNode} lightsNode - The lights node.
|
|
85
|
+
* @param {RenderContext} renderContext - The render context.
|
|
86
|
+
* @param {ClippingContext} clippingContext - The clipping context.
|
|
87
|
+
* @param {String?} passId - An optional ID for identifying the pass.
|
|
88
|
+
* @return {RenderObject} The render object.
|
|
89
|
+
*/
|
|
21
90
|
get( object, material, scene, camera, lightsNode, renderContext, clippingContext, passId ) {
|
|
22
91
|
|
|
23
92
|
const chainMap = this.getChainMap( passId );
|
|
24
93
|
|
|
25
94
|
// reuse chainArray
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
95
|
+
_chainArray[ 0 ] = object;
|
|
96
|
+
_chainArray[ 1 ] = material;
|
|
97
|
+
_chainArray[ 2 ] = renderContext;
|
|
98
|
+
_chainArray[ 3 ] = lightsNode;
|
|
30
99
|
|
|
31
|
-
let renderObject = chainMap.get(
|
|
100
|
+
let renderObject = chainMap.get( _chainArray );
|
|
32
101
|
|
|
33
102
|
if ( renderObject === undefined ) {
|
|
34
103
|
|
|
35
104
|
renderObject = this.createRenderObject( this.nodes, this.geometries, this.renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext, passId );
|
|
36
105
|
|
|
37
|
-
chainMap.set(
|
|
106
|
+
chainMap.set( _chainArray, renderObject );
|
|
38
107
|
|
|
39
108
|
} else {
|
|
40
109
|
|
|
@@ -68,18 +137,43 @@ class RenderObjects {
|
|
|
68
137
|
|
|
69
138
|
}
|
|
70
139
|
|
|
140
|
+
/**
|
|
141
|
+
* Returns a chain map for the given pass ID.
|
|
142
|
+
*
|
|
143
|
+
* @param {String} [passId='default'] - The pass ID.
|
|
144
|
+
* @return {ChainMap} The chain map.
|
|
145
|
+
*/
|
|
71
146
|
getChainMap( passId = 'default' ) {
|
|
72
147
|
|
|
73
148
|
return this.chainMaps[ passId ] || ( this.chainMaps[ passId ] = new ChainMap() );
|
|
74
149
|
|
|
75
150
|
}
|
|
76
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Frees internal resources.
|
|
154
|
+
*/
|
|
77
155
|
dispose() {
|
|
78
156
|
|
|
79
157
|
this.chainMaps = {};
|
|
80
158
|
|
|
81
159
|
}
|
|
82
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Factory method for creating render objects with the given list of parameters.
|
|
163
|
+
*
|
|
164
|
+
* @param {Nodes} nodes - Renderer component for managing nodes related logic.
|
|
165
|
+
* @param {Geometries} geometries - Renderer component for managing geometries.
|
|
166
|
+
* @param {Renderer} renderer - The renderer.
|
|
167
|
+
* @param {Object3D} object - The 3D object.
|
|
168
|
+
* @param {Material} material - The object's material.
|
|
169
|
+
* @param {Scene} scene - The scene the 3D object belongs to.
|
|
170
|
+
* @param {Camera} camera - The camera the object should be rendered with.
|
|
171
|
+
* @param {LightsNode} lightsNode - The lights node.
|
|
172
|
+
* @param {RenderContext} renderContext - The render context.
|
|
173
|
+
* @param {ClippingContext} clippingContext - The clipping context.
|
|
174
|
+
* @param {String?} passId - An optional ID for identifying the pass.
|
|
175
|
+
* @return {RenderObject} The render object.
|
|
176
|
+
*/
|
|
83
177
|
createRenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext, passId ) {
|
|
84
178
|
|
|
85
179
|
const chainMap = this.getChainMap( passId );
|
|
@@ -1,12 +1,36 @@
|
|
|
1
1
|
import Pipeline from './Pipeline.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Class for representing render pipelines.
|
|
5
|
+
*
|
|
6
|
+
* @private
|
|
7
|
+
* @augments Pipeline
|
|
8
|
+
*/
|
|
3
9
|
class RenderPipeline extends Pipeline {
|
|
4
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Constructs a new render pipeline.
|
|
13
|
+
*
|
|
14
|
+
* @param {String} cacheKey - The pipeline's cache key.
|
|
15
|
+
* @param {ProgrammableStage} vertexProgram - The pipeline's vertex shader.
|
|
16
|
+
* @param {ProgrammableStage} fragmentProgram - The pipeline's fragment shader.
|
|
17
|
+
*/
|
|
5
18
|
constructor( cacheKey, vertexProgram, fragmentProgram ) {
|
|
6
19
|
|
|
7
20
|
super( cacheKey );
|
|
8
21
|
|
|
22
|
+
/**
|
|
23
|
+
* The pipeline's vertex shader.
|
|
24
|
+
*
|
|
25
|
+
* @type {ProgrammableStage}
|
|
26
|
+
*/
|
|
9
27
|
this.vertexProgram = vertexProgram;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The pipeline's fragment shader.
|
|
31
|
+
*
|
|
32
|
+
* @type {ProgrammableStage}
|
|
33
|
+
*/
|
|
10
34
|
this.fragmentProgram = fragmentProgram;
|
|
11
35
|
|
|
12
36
|
}
|