@plastic-software/three 0.167.3 → 0.174.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { hash, hashString } from '../../nodes/core/NodeUtils.js';
|
|
2
2
|
|
|
3
3
|
let _id = 0;
|
|
4
4
|
|
|
@@ -36,46 +36,264 @@ function getKeys( obj ) {
|
|
|
36
36
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
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
|
+
*/
|
|
73
|
+
constructor( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext ) {
|
|
40
74
|
|
|
41
|
-
|
|
75
|
+
this.id = _id ++;
|
|
42
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;
|
|
62
|
-
this.pipeline = null;
|
|
63
|
-
this.vertexBuffers = null;
|
|
64
173
|
|
|
65
|
-
|
|
174
|
+
/**
|
|
175
|
+
* A reference to a render pipeline the render
|
|
176
|
+
* object is processed with.
|
|
177
|
+
*
|
|
178
|
+
* @type {RenderPipeline}
|
|
179
|
+
* @default null
|
|
180
|
+
*/
|
|
181
|
+
this.pipeline = null;
|
|
66
182
|
|
|
67
|
-
|
|
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
|
+
*/
|
|
200
|
+
this.vertexBuffers = null;
|
|
68
201
|
|
|
202
|
+
/**
|
|
203
|
+
* The parameters for the draw command.
|
|
204
|
+
*
|
|
205
|
+
* @type {?Object}
|
|
206
|
+
* @default null
|
|
207
|
+
*/
|
|
208
|
+
this.drawParams = null;
|
|
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
|
+
*/
|
|
217
|
+
this.bundle = null;
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* The clipping context.
|
|
221
|
+
*
|
|
222
|
+
* @type {ClippingContext}
|
|
223
|
+
*/
|
|
224
|
+
this.clippingContext = clippingContext;
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* The clipping context's cache key.
|
|
228
|
+
*
|
|
229
|
+
* @type {string}
|
|
230
|
+
*/
|
|
231
|
+
this.clippingContextCacheKey = clippingContext !== null ? clippingContext.cacheKey : '';
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* The initial node cache key.
|
|
235
|
+
*
|
|
236
|
+
* @type {number}
|
|
237
|
+
*/
|
|
69
238
|
this.initialNodesCacheKey = this.getDynamicCacheKey();
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* The initial cache key.
|
|
242
|
+
*
|
|
243
|
+
* @type {number}
|
|
244
|
+
*/
|
|
70
245
|
this.initialCacheKey = this.getCacheKey();
|
|
71
246
|
|
|
247
|
+
/**
|
|
248
|
+
* The node builder state.
|
|
249
|
+
*
|
|
250
|
+
* @type {?NodeBuilderState}
|
|
251
|
+
* @private
|
|
252
|
+
* @default null
|
|
253
|
+
*/
|
|
72
254
|
this._nodeBuilderState = null;
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* An array of bindings.
|
|
258
|
+
*
|
|
259
|
+
* @type {?Array<BindGroup>}
|
|
260
|
+
* @private
|
|
261
|
+
* @default null
|
|
262
|
+
*/
|
|
73
263
|
this._bindings = null;
|
|
74
264
|
|
|
265
|
+
/**
|
|
266
|
+
* Reference to the node material observer.
|
|
267
|
+
*
|
|
268
|
+
* @type {?NodeMaterialObserver}
|
|
269
|
+
* @private
|
|
270
|
+
* @default null
|
|
271
|
+
*/
|
|
272
|
+
this._monitor = null;
|
|
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
|
+
*/
|
|
75
280
|
this.onDispose = null;
|
|
76
281
|
|
|
282
|
+
/**
|
|
283
|
+
* This flag can be used for type testing.
|
|
284
|
+
*
|
|
285
|
+
* @type {boolean}
|
|
286
|
+
* @readonly
|
|
287
|
+
* @default true
|
|
288
|
+
*/
|
|
77
289
|
this.isRenderObject = true;
|
|
78
290
|
|
|
291
|
+
/**
|
|
292
|
+
* An event listener which is executed when `dispose()` is called on
|
|
293
|
+
* the render object's material.
|
|
294
|
+
*
|
|
295
|
+
* @method
|
|
296
|
+
*/
|
|
79
297
|
this.onMaterialDispose = () => {
|
|
80
298
|
|
|
81
299
|
this.dispose();
|
|
@@ -86,65 +304,150 @@ export default class RenderObject {
|
|
|
86
304
|
|
|
87
305
|
}
|
|
88
306
|
|
|
89
|
-
|
|
307
|
+
/**
|
|
308
|
+
* Updates the clipping context.
|
|
309
|
+
*
|
|
310
|
+
* @param {ClippingContext} context - The clipping context to set.
|
|
311
|
+
*/
|
|
312
|
+
updateClipping( context ) {
|
|
90
313
|
|
|
91
|
-
|
|
314
|
+
this.clippingContext = context;
|
|
92
315
|
|
|
93
|
-
|
|
316
|
+
}
|
|
94
317
|
|
|
95
|
-
|
|
318
|
+
/**
|
|
319
|
+
* Whether the clipping requires an update or not.
|
|
320
|
+
*
|
|
321
|
+
* @type {boolean}
|
|
322
|
+
* @readonly
|
|
323
|
+
*/
|
|
324
|
+
get clippingNeedsUpdate() {
|
|
96
325
|
|
|
97
|
-
|
|
326
|
+
if ( this.clippingContext === null || this.clippingContext.cacheKey === this.clippingContextCacheKey ) return false;
|
|
98
327
|
|
|
99
|
-
|
|
100
|
-
this.clippingContext = clippingContext;
|
|
328
|
+
this.clippingContextCacheKey = this.clippingContext.cacheKey;
|
|
101
329
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
clippingContext.update( parent, material );
|
|
330
|
+
return true;
|
|
105
331
|
|
|
106
|
-
|
|
332
|
+
}
|
|
107
333
|
|
|
108
|
-
|
|
334
|
+
/**
|
|
335
|
+
* The number of clipping planes defined in context of hardware clipping.
|
|
336
|
+
*
|
|
337
|
+
* @type {number}
|
|
338
|
+
* @readonly
|
|
339
|
+
*/
|
|
340
|
+
get hardwareClippingPlanes() {
|
|
109
341
|
|
|
110
|
-
|
|
342
|
+
return this.material.hardwareClipping === true ? this.clippingContext.unionClippingCount : 0;
|
|
111
343
|
|
|
112
344
|
}
|
|
113
345
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
346
|
+
/**
|
|
347
|
+
* Returns the node builder state of this render object.
|
|
348
|
+
*
|
|
349
|
+
* @return {NodeBuilderState} The node builder state.
|
|
350
|
+
*/
|
|
351
|
+
getNodeBuilderState() {
|
|
119
352
|
|
|
120
|
-
return
|
|
353
|
+
return this._nodeBuilderState || ( this._nodeBuilderState = this._nodes.getForRender( this ) );
|
|
121
354
|
|
|
122
355
|
}
|
|
123
356
|
|
|
124
|
-
|
|
357
|
+
/**
|
|
358
|
+
* Returns the node material observer of this render object.
|
|
359
|
+
*
|
|
360
|
+
* @return {NodeMaterialObserver} The node material observer.
|
|
361
|
+
*/
|
|
362
|
+
getMonitor() {
|
|
125
363
|
|
|
126
|
-
return this.
|
|
364
|
+
return this._monitor || ( this._monitor = this.getNodeBuilderState().observer );
|
|
127
365
|
|
|
128
366
|
}
|
|
129
367
|
|
|
368
|
+
/**
|
|
369
|
+
* Returns an array of bind groups of this render object.
|
|
370
|
+
*
|
|
371
|
+
* @return {Array<BindGroup>} The bindings.
|
|
372
|
+
*/
|
|
130
373
|
getBindings() {
|
|
131
374
|
|
|
132
375
|
return this._bindings || ( this._bindings = this.getNodeBuilderState().createBindings() );
|
|
133
376
|
|
|
134
377
|
}
|
|
135
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
|
+
*/
|
|
136
404
|
getIndex() {
|
|
137
405
|
|
|
138
406
|
return this._geometries.getIndex( this );
|
|
139
407
|
|
|
140
408
|
}
|
|
141
409
|
|
|
410
|
+
/**
|
|
411
|
+
* Returns the indirect buffer attribute.
|
|
412
|
+
*
|
|
413
|
+
* @return {?BufferAttribute} The indirect attribute. `null` if no indirect drawing is used.
|
|
414
|
+
*/
|
|
415
|
+
getIndirect() {
|
|
416
|
+
|
|
417
|
+
return this._geometries.getIndirect( this );
|
|
418
|
+
|
|
419
|
+
}
|
|
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
|
+
*/
|
|
142
426
|
getChainArray() {
|
|
143
427
|
|
|
144
428
|
return [ this.object, this.material, this.context, this.lightsNode ];
|
|
145
429
|
|
|
146
430
|
}
|
|
147
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
|
+
*/
|
|
438
|
+
setGeometry( geometry ) {
|
|
439
|
+
|
|
440
|
+
this.geometry = geometry;
|
|
441
|
+
this.attributes = null;
|
|
442
|
+
|
|
443
|
+
}
|
|
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
|
+
*/
|
|
148
451
|
getAttributes() {
|
|
149
452
|
|
|
150
453
|
if ( this.attributes !== null ) return this.attributes;
|
|
@@ -175,6 +478,11 @@ export default class RenderObject {
|
|
|
175
478
|
|
|
176
479
|
}
|
|
177
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
|
+
*/
|
|
178
486
|
getVertexBuffers() {
|
|
179
487
|
|
|
180
488
|
if ( this.vertexBuffers === null ) this.getAttributes();
|
|
@@ -183,6 +491,140 @@ export default class RenderObject {
|
|
|
183
491
|
|
|
184
492
|
}
|
|
185
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
|
+
*/
|
|
499
|
+
getDrawParameters() {
|
|
500
|
+
|
|
501
|
+
const { object, material, geometry, group, drawRange } = this;
|
|
502
|
+
|
|
503
|
+
const drawParams = this.drawParams || ( this.drawParams = {
|
|
504
|
+
vertexCount: 0,
|
|
505
|
+
firstVertex: 0,
|
|
506
|
+
instanceCount: 0,
|
|
507
|
+
firstInstance: 0
|
|
508
|
+
} );
|
|
509
|
+
|
|
510
|
+
const index = this.getIndex();
|
|
511
|
+
const hasIndex = ( index !== null );
|
|
512
|
+
const instanceCount = geometry.isInstancedBufferGeometry ? geometry.instanceCount : ( object.count > 1 ? object.count : 1 );
|
|
513
|
+
|
|
514
|
+
if ( instanceCount === 0 ) return null;
|
|
515
|
+
|
|
516
|
+
drawParams.instanceCount = instanceCount;
|
|
517
|
+
|
|
518
|
+
if ( object.isBatchedMesh === true ) return drawParams;
|
|
519
|
+
|
|
520
|
+
let rangeFactor = 1;
|
|
521
|
+
|
|
522
|
+
if ( material.wireframe === true && ! object.isPoints && ! object.isLineSegments && ! object.isLine && ! object.isLineLoop ) {
|
|
523
|
+
|
|
524
|
+
rangeFactor = 2;
|
|
525
|
+
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
let firstVertex = drawRange.start * rangeFactor;
|
|
529
|
+
let lastVertex = ( drawRange.start + drawRange.count ) * rangeFactor;
|
|
530
|
+
|
|
531
|
+
if ( group !== null ) {
|
|
532
|
+
|
|
533
|
+
firstVertex = Math.max( firstVertex, group.start * rangeFactor );
|
|
534
|
+
lastVertex = Math.min( lastVertex, ( group.start + group.count ) * rangeFactor );
|
|
535
|
+
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
const position = geometry.attributes.position;
|
|
539
|
+
let itemCount = Infinity;
|
|
540
|
+
|
|
541
|
+
if ( hasIndex ) {
|
|
542
|
+
|
|
543
|
+
itemCount = index.count;
|
|
544
|
+
|
|
545
|
+
} else if ( position !== undefined && position !== null ) {
|
|
546
|
+
|
|
547
|
+
itemCount = position.count;
|
|
548
|
+
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
firstVertex = Math.max( firstVertex, 0 );
|
|
552
|
+
lastVertex = Math.min( lastVertex, itemCount );
|
|
553
|
+
|
|
554
|
+
const count = lastVertex - firstVertex;
|
|
555
|
+
|
|
556
|
+
if ( count < 0 || count === Infinity ) return null;
|
|
557
|
+
|
|
558
|
+
drawParams.vertexCount = count;
|
|
559
|
+
drawParams.firstVertex = firstVertex;
|
|
560
|
+
|
|
561
|
+
return drawParams;
|
|
562
|
+
|
|
563
|
+
}
|
|
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
|
+
*/
|
|
572
|
+
getGeometryCacheKey() {
|
|
573
|
+
|
|
574
|
+
const { geometry } = this;
|
|
575
|
+
|
|
576
|
+
let cacheKey = '';
|
|
577
|
+
|
|
578
|
+
for ( const name of Object.keys( geometry.attributes ).sort() ) {
|
|
579
|
+
|
|
580
|
+
const attribute = geometry.attributes[ name ];
|
|
581
|
+
|
|
582
|
+
cacheKey += name + ',';
|
|
583
|
+
|
|
584
|
+
if ( attribute.data ) cacheKey += attribute.data.stride + ',';
|
|
585
|
+
if ( attribute.offset ) cacheKey += attribute.offset + ',';
|
|
586
|
+
if ( attribute.itemSize ) cacheKey += attribute.itemSize + ',';
|
|
587
|
+
if ( attribute.normalized ) cacheKey += 'n,';
|
|
588
|
+
|
|
589
|
+
}
|
|
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
|
+
|
|
611
|
+
if ( geometry.index ) {
|
|
612
|
+
|
|
613
|
+
cacheKey += 'index,';
|
|
614
|
+
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
return cacheKey;
|
|
618
|
+
|
|
619
|
+
}
|
|
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
|
+
*/
|
|
186
628
|
getMaterialCacheKey() {
|
|
187
629
|
|
|
188
630
|
const { object, material } = this;
|
|
@@ -235,17 +677,17 @@ export default class RenderObject {
|
|
|
235
677
|
|
|
236
678
|
}
|
|
237
679
|
|
|
238
|
-
cacheKey += this.
|
|
680
|
+
cacheKey += this.clippingContextCacheKey + ',';
|
|
239
681
|
|
|
240
|
-
if ( object.
|
|
682
|
+
if ( object.geometry ) {
|
|
241
683
|
|
|
242
|
-
cacheKey +=
|
|
684
|
+
cacheKey += this.getGeometryCacheKey();
|
|
243
685
|
|
|
244
686
|
}
|
|
245
687
|
|
|
246
|
-
if ( object.
|
|
688
|
+
if ( object.skeleton ) {
|
|
247
689
|
|
|
248
|
-
cacheKey += object.
|
|
690
|
+
cacheKey += object.skeleton.bones.length + ',';
|
|
249
691
|
|
|
250
692
|
}
|
|
251
693
|
|
|
@@ -263,34 +705,101 @@ export default class RenderObject {
|
|
|
263
705
|
|
|
264
706
|
if ( object.count > 1 ) {
|
|
265
707
|
|
|
266
|
-
|
|
708
|
+
// TODO: https://github.com/mrdoob/three.js/pull/29066#issuecomment-2269400850
|
|
709
|
+
|
|
710
|
+
cacheKey += object.uuid + ',';
|
|
267
711
|
|
|
268
712
|
}
|
|
269
713
|
|
|
270
|
-
|
|
714
|
+
cacheKey += object.receiveShadow + ',';
|
|
715
|
+
|
|
716
|
+
return hashString( cacheKey );
|
|
717
|
+
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
/**
|
|
721
|
+
* Whether the geometry requires an update or not.
|
|
722
|
+
*
|
|
723
|
+
* @type {boolean}
|
|
724
|
+
* @readonly
|
|
725
|
+
*/
|
|
726
|
+
get needsGeometryUpdate() {
|
|
727
|
+
|
|
728
|
+
return this.geometry.id !== this.object.geometry.id;
|
|
271
729
|
|
|
272
730
|
}
|
|
273
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
|
+
*/
|
|
274
749
|
get needsUpdate() {
|
|
275
750
|
|
|
276
|
-
return this.initialNodesCacheKey !== this.getDynamicCacheKey() || this.clippingNeedsUpdate;
|
|
751
|
+
return /*this.object.static !== true &&*/ ( this.initialNodesCacheKey !== this.getDynamicCacheKey() || this.clippingNeedsUpdate );
|
|
277
752
|
|
|
278
753
|
}
|
|
279
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
|
+
*/
|
|
280
760
|
getDynamicCacheKey() {
|
|
281
761
|
|
|
282
|
-
|
|
762
|
+
let cacheKey = 0;
|
|
763
|
+
|
|
764
|
+
// `Nodes.getCacheKey()` returns an environment cache key which is not relevant when
|
|
765
|
+
// the renderer is inside a shadow pass.
|
|
283
766
|
|
|
284
|
-
|
|
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
|
+
}
|
|
778
|
+
|
|
779
|
+
if ( this.object.receiveShadow ) {
|
|
780
|
+
|
|
781
|
+
cacheKey = hash( cacheKey, 1 );
|
|
782
|
+
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
return cacheKey;
|
|
285
786
|
|
|
286
787
|
}
|
|
287
788
|
|
|
789
|
+
/**
|
|
790
|
+
* Returns the render object's cache key.
|
|
791
|
+
*
|
|
792
|
+
* @return {number} The cache key.
|
|
793
|
+
*/
|
|
288
794
|
getCacheKey() {
|
|
289
795
|
|
|
290
|
-
return this.getMaterialCacheKey() +
|
|
796
|
+
return this.getMaterialCacheKey() + this.getDynamicCacheKey();
|
|
291
797
|
|
|
292
798
|
}
|
|
293
799
|
|
|
800
|
+
/**
|
|
801
|
+
* Frees internal resources.
|
|
802
|
+
*/
|
|
294
803
|
dispose() {
|
|
295
804
|
|
|
296
805
|
this.material.removeEventListener( 'dispose', this.onMaterialDispose );
|
|
@@ -300,3 +809,5 @@ export default class RenderObject {
|
|
|
300
809
|
}
|
|
301
810
|
|
|
302
811
|
}
|
|
812
|
+
|
|
813
|
+
export default RenderObject;
|