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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { hashString } from '../../nodes/core/NodeUtils.js';
|
|
1
|
+
import { hash, hashString } from '../../nodes/core/NodeUtils.js';
|
|
2
2
|
|
|
3
3
|
let _id = 0;
|
|
4
4
|
|
|
@@ -36,49 +36,264 @@ function getKeys( obj ) {
|
|
|
36
36
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
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
|
+
*/
|
|
57
|
+
class RenderObject {
|
|
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
|
+
* Only relevant for objects using
|
|
185
|
+
* multiple materials. This represents a group entry
|
|
186
|
+
* from the respective `BufferGeometry`.
|
|
187
|
+
*
|
|
188
|
+
* @type {{start: Number, count: Number}?}
|
|
189
|
+
* @default null
|
|
190
|
+
*/
|
|
191
|
+
this.group = null;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* An array holding the vertex buffers which can
|
|
195
|
+
* be buffer attributes but also interleaved buffers.
|
|
196
|
+
*
|
|
197
|
+
* @type {Array<BufferAttribute|InterleavedBuffer>?}
|
|
198
|
+
* @default null
|
|
199
|
+
*/
|
|
63
200
|
this.vertexBuffers = null;
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* The parameters for the draw command.
|
|
204
|
+
*
|
|
205
|
+
* @type {Object?}
|
|
206
|
+
* @default null
|
|
207
|
+
*/
|
|
64
208
|
this.drawParams = null;
|
|
65
209
|
|
|
210
|
+
/**
|
|
211
|
+
* If this render object is used inside a render bundle,
|
|
212
|
+
* this property points to the respective bundle group.
|
|
213
|
+
*
|
|
214
|
+
* @type {BundleGroup?}
|
|
215
|
+
* @default null
|
|
216
|
+
*/
|
|
66
217
|
this.bundle = null;
|
|
67
218
|
|
|
219
|
+
/**
|
|
220
|
+
* The clipping context.
|
|
221
|
+
*
|
|
222
|
+
* @type {ClippingContext}
|
|
223
|
+
*/
|
|
68
224
|
this.clippingContext = clippingContext;
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* The clipping context's cache key.
|
|
228
|
+
*
|
|
229
|
+
* @type {String}
|
|
230
|
+
*/
|
|
69
231
|
this.clippingContextCacheKey = clippingContext !== null ? clippingContext.cacheKey : '';
|
|
70
232
|
|
|
233
|
+
/**
|
|
234
|
+
* The initial node cache key.
|
|
235
|
+
*
|
|
236
|
+
* @type {Number}
|
|
237
|
+
*/
|
|
71
238
|
this.initialNodesCacheKey = this.getDynamicCacheKey();
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* The initial cache key.
|
|
242
|
+
*
|
|
243
|
+
* @type {Number}
|
|
244
|
+
*/
|
|
72
245
|
this.initialCacheKey = this.getCacheKey();
|
|
73
246
|
|
|
247
|
+
/**
|
|
248
|
+
* The node builder state.
|
|
249
|
+
*
|
|
250
|
+
* @type {NodeBuilderState?}
|
|
251
|
+
* @private
|
|
252
|
+
* @default null
|
|
253
|
+
*/
|
|
74
254
|
this._nodeBuilderState = null;
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* An array of bindings.
|
|
258
|
+
*
|
|
259
|
+
* @type {Array<BindGroup>?}
|
|
260
|
+
* @private
|
|
261
|
+
* @default null
|
|
262
|
+
*/
|
|
75
263
|
this._bindings = null;
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Reference to the node material observer.
|
|
267
|
+
*
|
|
268
|
+
* @type {NodeMaterialObserver?}
|
|
269
|
+
* @private
|
|
270
|
+
* @default null
|
|
271
|
+
*/
|
|
76
272
|
this._monitor = null;
|
|
77
273
|
|
|
274
|
+
/**
|
|
275
|
+
* An event listener which is defined by `RenderObjects`. It performs
|
|
276
|
+
* clean up tasks when `dispose()` on this render object.
|
|
277
|
+
*
|
|
278
|
+
* @method
|
|
279
|
+
*/
|
|
78
280
|
this.onDispose = null;
|
|
79
281
|
|
|
282
|
+
/**
|
|
283
|
+
* This flag can be used for type testing.
|
|
284
|
+
*
|
|
285
|
+
* @type {Boolean}
|
|
286
|
+
* @readonly
|
|
287
|
+
* @default true
|
|
288
|
+
*/
|
|
80
289
|
this.isRenderObject = true;
|
|
81
290
|
|
|
291
|
+
/**
|
|
292
|
+
* An event listener which is executed when `dispose()` is called on
|
|
293
|
+
* the render object's material.
|
|
294
|
+
*
|
|
295
|
+
* @method
|
|
296
|
+
*/
|
|
82
297
|
this.onMaterialDispose = () => {
|
|
83
298
|
|
|
84
299
|
this.dispose();
|
|
@@ -89,12 +304,23 @@ export default class RenderObject {
|
|
|
89
304
|
|
|
90
305
|
}
|
|
91
306
|
|
|
92
|
-
|
|
307
|
+
/**
|
|
308
|
+
* Updates the clipping context.
|
|
309
|
+
*
|
|
310
|
+
* @param {ClippingContext} context - The clipping context to set.
|
|
311
|
+
*/
|
|
312
|
+
updateClipping( context ) {
|
|
93
313
|
|
|
94
|
-
this.clippingContext =
|
|
314
|
+
this.clippingContext = context;
|
|
95
315
|
|
|
96
316
|
}
|
|
97
317
|
|
|
318
|
+
/**
|
|
319
|
+
* Whether the clipping requires an update or not.
|
|
320
|
+
*
|
|
321
|
+
* @type {Boolean}
|
|
322
|
+
* @readonly
|
|
323
|
+
*/
|
|
98
324
|
get clippingNeedsUpdate() {
|
|
99
325
|
|
|
100
326
|
if ( this.clippingContext === null || this.clippingContext.cacheKey === this.clippingContextCacheKey ) return false;
|
|
@@ -105,48 +331,110 @@ export default class RenderObject {
|
|
|
105
331
|
|
|
106
332
|
}
|
|
107
333
|
|
|
334
|
+
/**
|
|
335
|
+
* The number of clipping planes defined in context of hardware clipping.
|
|
336
|
+
*
|
|
337
|
+
* @type {Number}
|
|
338
|
+
* @readonly
|
|
339
|
+
*/
|
|
108
340
|
get hardwareClippingPlanes() {
|
|
109
341
|
|
|
110
342
|
return this.material.hardwareClipping === true ? this.clippingContext.unionClippingCount : 0;
|
|
111
343
|
|
|
112
344
|
}
|
|
113
345
|
|
|
346
|
+
/**
|
|
347
|
+
* Returns the node builder state of this render object.
|
|
348
|
+
*
|
|
349
|
+
* @return {NodeBuilderState} The node builder state.
|
|
350
|
+
*/
|
|
114
351
|
getNodeBuilderState() {
|
|
115
352
|
|
|
116
353
|
return this._nodeBuilderState || ( this._nodeBuilderState = this._nodes.getForRender( this ) );
|
|
117
354
|
|
|
118
355
|
}
|
|
119
356
|
|
|
357
|
+
/**
|
|
358
|
+
* Returns the node material observer of this render object.
|
|
359
|
+
*
|
|
360
|
+
* @return {NodeMaterialObserver} The node material observer.
|
|
361
|
+
*/
|
|
120
362
|
getMonitor() {
|
|
121
363
|
|
|
122
|
-
return this._monitor || ( this._monitor = this.getNodeBuilderState().
|
|
364
|
+
return this._monitor || ( this._monitor = this.getNodeBuilderState().observer );
|
|
123
365
|
|
|
124
366
|
}
|
|
125
367
|
|
|
368
|
+
/**
|
|
369
|
+
* Returns an array of bind groups of this render object.
|
|
370
|
+
*
|
|
371
|
+
* @return {Array<BindGroup>} The bindings.
|
|
372
|
+
*/
|
|
126
373
|
getBindings() {
|
|
127
374
|
|
|
128
375
|
return this._bindings || ( this._bindings = this.getNodeBuilderState().createBindings() );
|
|
129
376
|
|
|
130
377
|
}
|
|
131
378
|
|
|
379
|
+
/**
|
|
380
|
+
* Returns a binding group by group name of this render object.
|
|
381
|
+
*
|
|
382
|
+
* @param {String} name - The name of the binding group.
|
|
383
|
+
* @return {BindGroup?} The bindings.
|
|
384
|
+
*/
|
|
385
|
+
getBindingGroup( name ) {
|
|
386
|
+
|
|
387
|
+
for ( const bindingGroup of this.getBindings() ) {
|
|
388
|
+
|
|
389
|
+
if ( bindingGroup.name === name ) {
|
|
390
|
+
|
|
391
|
+
return bindingGroup;
|
|
392
|
+
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Returns the index of the render object's geometry.
|
|
401
|
+
*
|
|
402
|
+
* @return {BufferAttribute?} The index. Returns `null` for non-indexed geometries.
|
|
403
|
+
*/
|
|
132
404
|
getIndex() {
|
|
133
405
|
|
|
134
406
|
return this._geometries.getIndex( this );
|
|
135
407
|
|
|
136
408
|
}
|
|
137
409
|
|
|
410
|
+
/**
|
|
411
|
+
* Returns the indirect buffer attribute.
|
|
412
|
+
*
|
|
413
|
+
* @return {BufferAttribute?} The indirect attribute. `null` if no indirect drawing is used.
|
|
414
|
+
*/
|
|
138
415
|
getIndirect() {
|
|
139
416
|
|
|
140
417
|
return this._geometries.getIndirect( this );
|
|
141
418
|
|
|
142
419
|
}
|
|
143
420
|
|
|
421
|
+
/**
|
|
422
|
+
* Returns an array that acts as a key for identifying the render object in a chain map.
|
|
423
|
+
*
|
|
424
|
+
* @return {Array<Object>} An array with object references.
|
|
425
|
+
*/
|
|
144
426
|
getChainArray() {
|
|
145
427
|
|
|
146
428
|
return [ this.object, this.material, this.context, this.lightsNode ];
|
|
147
429
|
|
|
148
430
|
}
|
|
149
431
|
|
|
432
|
+
/**
|
|
433
|
+
* This method is used when the geometry of a 3D object has been exchanged and the
|
|
434
|
+
* respective render object now requires an update.
|
|
435
|
+
*
|
|
436
|
+
* @param {BufferGeometry} geometry - The geometry to set.
|
|
437
|
+
*/
|
|
150
438
|
setGeometry( geometry ) {
|
|
151
439
|
|
|
152
440
|
this.geometry = geometry;
|
|
@@ -154,6 +442,12 @@ export default class RenderObject {
|
|
|
154
442
|
|
|
155
443
|
}
|
|
156
444
|
|
|
445
|
+
/**
|
|
446
|
+
* Returns the buffer attributes of the render object. The returned array holds
|
|
447
|
+
* attribute definitions on geometry and node level.
|
|
448
|
+
*
|
|
449
|
+
* @return {Array<BufferAttribute>} An array with buffer attributes.
|
|
450
|
+
*/
|
|
157
451
|
getAttributes() {
|
|
158
452
|
|
|
159
453
|
if ( this.attributes !== null ) return this.attributes;
|
|
@@ -184,6 +478,11 @@ export default class RenderObject {
|
|
|
184
478
|
|
|
185
479
|
}
|
|
186
480
|
|
|
481
|
+
/**
|
|
482
|
+
* Returns the vertex buffers of the render object.
|
|
483
|
+
*
|
|
484
|
+
* @return {Array<BufferAttribute|InterleavedBuffer>} An array with buffer attribute or interleaved buffers.
|
|
485
|
+
*/
|
|
187
486
|
getVertexBuffers() {
|
|
188
487
|
|
|
189
488
|
if ( this.vertexBuffers === null ) this.getAttributes();
|
|
@@ -192,6 +491,11 @@ export default class RenderObject {
|
|
|
192
491
|
|
|
193
492
|
}
|
|
194
493
|
|
|
494
|
+
/**
|
|
495
|
+
* Returns the draw parameters for the render object.
|
|
496
|
+
*
|
|
497
|
+
* @return {{vertexCount: Number, firstVertex: Number, instanceCount: Number, firstInstance: Number}} The draw parameters.
|
|
498
|
+
*/
|
|
195
499
|
getDrawParameters() {
|
|
196
500
|
|
|
197
501
|
const { object, material, geometry, group, drawRange } = this;
|
|
@@ -258,6 +562,13 @@ export default class RenderObject {
|
|
|
258
562
|
|
|
259
563
|
}
|
|
260
564
|
|
|
565
|
+
/**
|
|
566
|
+
* Returns the render object's geometry cache key.
|
|
567
|
+
*
|
|
568
|
+
* The geometry cache key is part of the material cache key.
|
|
569
|
+
*
|
|
570
|
+
* @return {String} The geometry cache key.
|
|
571
|
+
*/
|
|
261
572
|
getGeometryCacheKey() {
|
|
262
573
|
|
|
263
574
|
const { geometry } = this;
|
|
@@ -277,6 +588,26 @@ export default class RenderObject {
|
|
|
277
588
|
|
|
278
589
|
}
|
|
279
590
|
|
|
591
|
+
// structural equality isn't sufficient for morph targets since the
|
|
592
|
+
// data are maintained in textures. only if the targets are all equal
|
|
593
|
+
// the texture and thus the instance of `MorphNode` can be shared.
|
|
594
|
+
|
|
595
|
+
for ( const name of Object.keys( geometry.morphAttributes ).sort() ) {
|
|
596
|
+
|
|
597
|
+
const targets = geometry.morphAttributes[ name ];
|
|
598
|
+
|
|
599
|
+
cacheKey += 'morph-' + name + ',';
|
|
600
|
+
|
|
601
|
+
for ( let i = 0, l = targets.length; i < l; i ++ ) {
|
|
602
|
+
|
|
603
|
+
const attribute = targets[ i ];
|
|
604
|
+
|
|
605
|
+
cacheKey += attribute.id + ',';
|
|
606
|
+
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
}
|
|
610
|
+
|
|
280
611
|
if ( geometry.index ) {
|
|
281
612
|
|
|
282
613
|
cacheKey += 'index,';
|
|
@@ -287,6 +618,13 @@ export default class RenderObject {
|
|
|
287
618
|
|
|
288
619
|
}
|
|
289
620
|
|
|
621
|
+
/**
|
|
622
|
+
* Returns the render object's material cache key.
|
|
623
|
+
*
|
|
624
|
+
* The material cache key is part of the render object cache key.
|
|
625
|
+
*
|
|
626
|
+
* @return {Number} The material cache key.
|
|
627
|
+
*/
|
|
290
628
|
getMaterialCacheKey() {
|
|
291
629
|
|
|
292
630
|
const { object, material } = this;
|
|
@@ -353,12 +691,6 @@ export default class RenderObject {
|
|
|
353
691
|
|
|
354
692
|
}
|
|
355
693
|
|
|
356
|
-
if ( object.morphTargetInfluences ) {
|
|
357
|
-
|
|
358
|
-
cacheKey += object.morphTargetInfluences.length + ',';
|
|
359
|
-
|
|
360
|
-
}
|
|
361
|
-
|
|
362
694
|
if ( object.isBatchedMesh ) {
|
|
363
695
|
|
|
364
696
|
cacheKey += object._matricesTexture.uuid + ',';
|
|
@@ -385,27 +717,68 @@ export default class RenderObject {
|
|
|
385
717
|
|
|
386
718
|
}
|
|
387
719
|
|
|
720
|
+
/**
|
|
721
|
+
* Whether the geometry requires an update or not.
|
|
722
|
+
*
|
|
723
|
+
* @type {Boolean}
|
|
724
|
+
* @readonly
|
|
725
|
+
*/
|
|
388
726
|
get needsGeometryUpdate() {
|
|
389
727
|
|
|
390
728
|
return this.geometry.id !== this.object.geometry.id;
|
|
391
729
|
|
|
392
730
|
}
|
|
393
731
|
|
|
732
|
+
/**
|
|
733
|
+
* Whether the render object requires an update or not.
|
|
734
|
+
*
|
|
735
|
+
* Note: There are two distinct places where render objects are checked for an update.
|
|
736
|
+
*
|
|
737
|
+
* 1. In `RenderObjects.get()` which is executed when the render object is request. This
|
|
738
|
+
* method checks the `needsUpdate` flag and recreates the render object if necessary.
|
|
739
|
+
* 2. In `Renderer._renderObjectDirect()` right after getting the render object via
|
|
740
|
+
* `RenderObjects.get()`. The render object's NodeMaterialObserver is then used to detect
|
|
741
|
+
* a need for a refresh due to material, geometry or object related value changes.
|
|
742
|
+
*
|
|
743
|
+
* TODO: Investigate if it's possible to merge both steps so there is only a single place
|
|
744
|
+
* that performs the 'needsUpdate' check.
|
|
745
|
+
*
|
|
746
|
+
* @type {Boolean}
|
|
747
|
+
* @readonly
|
|
748
|
+
*/
|
|
394
749
|
get needsUpdate() {
|
|
395
750
|
|
|
396
751
|
return /*this.object.static !== true &&*/ ( this.initialNodesCacheKey !== this.getDynamicCacheKey() || this.clippingNeedsUpdate );
|
|
397
752
|
|
|
398
753
|
}
|
|
399
754
|
|
|
755
|
+
/**
|
|
756
|
+
* Returns the dynamic cache key which represents a key that is computed per draw command.
|
|
757
|
+
*
|
|
758
|
+
* @return {Number} The cache key.
|
|
759
|
+
*/
|
|
400
760
|
getDynamicCacheKey() {
|
|
401
761
|
|
|
402
|
-
|
|
762
|
+
let cacheKey = 0;
|
|
403
763
|
|
|
404
|
-
|
|
764
|
+
// `Nodes.getCacheKey()` returns an environment cache key which is not relevant when
|
|
765
|
+
// the renderer is inside a shadow pass.
|
|
766
|
+
|
|
767
|
+
if ( this.material.isShadowPassMaterial !== true ) {
|
|
768
|
+
|
|
769
|
+
cacheKey = this._nodes.getCacheKey( this.scene, this.lightsNode );
|
|
770
|
+
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
if ( this.camera.isArrayCamera ) {
|
|
774
|
+
|
|
775
|
+
cacheKey = hash( cacheKey, this.camera.cameras.length );
|
|
776
|
+
|
|
777
|
+
}
|
|
405
778
|
|
|
406
779
|
if ( this.object.receiveShadow ) {
|
|
407
780
|
|
|
408
|
-
cacheKey
|
|
781
|
+
cacheKey = hash( cacheKey, 1 );
|
|
409
782
|
|
|
410
783
|
}
|
|
411
784
|
|
|
@@ -413,12 +786,20 @@ export default class RenderObject {
|
|
|
413
786
|
|
|
414
787
|
}
|
|
415
788
|
|
|
789
|
+
/**
|
|
790
|
+
* Returns the render object's cache key.
|
|
791
|
+
*
|
|
792
|
+
* @return {Number} The cache key.
|
|
793
|
+
*/
|
|
416
794
|
getCacheKey() {
|
|
417
795
|
|
|
418
796
|
return this.getMaterialCacheKey() + this.getDynamicCacheKey();
|
|
419
797
|
|
|
420
798
|
}
|
|
421
799
|
|
|
800
|
+
/**
|
|
801
|
+
* Frees internal resources.
|
|
802
|
+
*/
|
|
422
803
|
dispose() {
|
|
423
804
|
|
|
424
805
|
this.material.removeEventListener( 'dispose', this.onMaterialDispose );
|
|
@@ -428,3 +809,5 @@ export default class RenderObject {
|
|
|
428
809
|
}
|
|
429
810
|
|
|
430
811
|
}
|
|
812
|
+
|
|
813
|
+
export default RenderObject;
|