@plastic-software/three 0.167.4 → 0.174.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -1,33 +1,100 @@
|
|
|
1
1
|
import DataMap from '../DataMap.js';
|
|
2
2
|
import ChainMap from '../ChainMap.js';
|
|
3
3
|
import NodeBuilderState from './NodeBuilderState.js';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
import { cubeMapNode } from '../../../nodes/utils/CubeMapNode.js';
|
|
5
|
+
import { NodeFrame } from '../../../nodes/Nodes.js';
|
|
6
|
+
import { objectGroup, renderGroup, frameGroup, cubeTexture, texture, fog, rangeFogFactor, densityFogFactor, reference, pmremTexture, screenUV } from '../../../nodes/TSL.js';
|
|
7
|
+
|
|
8
|
+
import { CubeUVReflectionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
|
|
9
|
+
import { hashArray } from '../../../nodes/core/NodeUtils.js';
|
|
10
|
+
|
|
11
|
+
const _outputNodeMap = new WeakMap();
|
|
12
|
+
const _chainKeys = [];
|
|
13
|
+
const _cacheKeyValues = [];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* This renderer module manages node-related objects and is the
|
|
17
|
+
* primary interface between the renderer and the node system.
|
|
18
|
+
*
|
|
19
|
+
* @private
|
|
20
|
+
* @augments DataMap
|
|
21
|
+
*/
|
|
10
22
|
class Nodes extends DataMap {
|
|
11
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new nodes management component.
|
|
26
|
+
*
|
|
27
|
+
* @param {Renderer} renderer - The renderer.
|
|
28
|
+
* @param {Backend} backend - The renderer's backend.
|
|
29
|
+
*/
|
|
12
30
|
constructor( renderer, backend ) {
|
|
13
31
|
|
|
14
32
|
super();
|
|
15
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The renderer.
|
|
36
|
+
*
|
|
37
|
+
* @type {Renderer}
|
|
38
|
+
*/
|
|
16
39
|
this.renderer = renderer;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The renderer's backend.
|
|
43
|
+
*
|
|
44
|
+
* @type {Backend}
|
|
45
|
+
*/
|
|
17
46
|
this.backend = backend;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The node frame.
|
|
50
|
+
*
|
|
51
|
+
* @type {Renderer}
|
|
52
|
+
*/
|
|
18
53
|
this.nodeFrame = new NodeFrame();
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* A cache for managing node builder states.
|
|
57
|
+
*
|
|
58
|
+
* @type {Map<number,NodeBuilderState>}
|
|
59
|
+
*/
|
|
19
60
|
this.nodeBuilderCache = new Map();
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* A cache for managing data cache key data.
|
|
64
|
+
*
|
|
65
|
+
* @type {ChainMap}
|
|
66
|
+
*/
|
|
20
67
|
this.callHashCache = new ChainMap();
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* A cache for managing node uniforms group data.
|
|
71
|
+
*
|
|
72
|
+
* @type {ChainMap}
|
|
73
|
+
*/
|
|
21
74
|
this.groupsData = new ChainMap();
|
|
22
75
|
|
|
76
|
+
/**
|
|
77
|
+
* A cache for managing node objects of
|
|
78
|
+
* scene properties like fog or environments.
|
|
79
|
+
*
|
|
80
|
+
* @type {Object<string,WeakMap>}
|
|
81
|
+
*/
|
|
82
|
+
this.cacheLib = {};
|
|
83
|
+
|
|
23
84
|
}
|
|
24
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Returns `true` if the given node uniforms group must be updated or not.
|
|
88
|
+
*
|
|
89
|
+
* @param {NodeUniformsGroup} nodeUniformsGroup - The node uniforms group.
|
|
90
|
+
* @return {boolean} Whether the node uniforms group requires an update or not.
|
|
91
|
+
*/
|
|
25
92
|
updateGroup( nodeUniformsGroup ) {
|
|
26
93
|
|
|
27
94
|
const groupNode = nodeUniformsGroup.groupNode;
|
|
28
95
|
const name = groupNode.name;
|
|
29
96
|
|
|
30
|
-
// objectGroup is
|
|
97
|
+
// objectGroup is always updated
|
|
31
98
|
|
|
32
99
|
if ( name === objectGroup.name ) return true;
|
|
33
100
|
|
|
@@ -71,10 +138,13 @@ class Nodes extends DataMap {
|
|
|
71
138
|
|
|
72
139
|
// other groups are updated just when groupNode.needsUpdate is true
|
|
73
140
|
|
|
74
|
-
|
|
141
|
+
_chainKeys[ 0 ] = groupNode;
|
|
142
|
+
_chainKeys[ 1 ] = nodeUniformsGroup;
|
|
75
143
|
|
|
76
|
-
let groupData = this.groupsData.get(
|
|
77
|
-
if ( groupData === undefined ) this.groupsData.set(
|
|
144
|
+
let groupData = this.groupsData.get( _chainKeys );
|
|
145
|
+
if ( groupData === undefined ) this.groupsData.set( _chainKeys, groupData = {} );
|
|
146
|
+
|
|
147
|
+
_chainKeys.length = 0;
|
|
78
148
|
|
|
79
149
|
if ( groupData.version !== groupNode.version ) {
|
|
80
150
|
|
|
@@ -88,12 +158,24 @@ class Nodes extends DataMap {
|
|
|
88
158
|
|
|
89
159
|
}
|
|
90
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Returns the cache key for the given render object.
|
|
163
|
+
*
|
|
164
|
+
* @param {RenderObject} renderObject - The render object.
|
|
165
|
+
* @return {number} The cache key.
|
|
166
|
+
*/
|
|
91
167
|
getForRenderCacheKey( renderObject ) {
|
|
92
168
|
|
|
93
169
|
return renderObject.initialCacheKey;
|
|
94
170
|
|
|
95
171
|
}
|
|
96
172
|
|
|
173
|
+
/**
|
|
174
|
+
* Returns a node builder state for the given render object.
|
|
175
|
+
*
|
|
176
|
+
* @param {RenderObject} renderObject - The render object.
|
|
177
|
+
* @return {NodeBuilderState} The node builder state.
|
|
178
|
+
*/
|
|
97
179
|
getForRender( renderObject ) {
|
|
98
180
|
|
|
99
181
|
const renderObjectData = this.get( renderObject );
|
|
@@ -137,6 +219,12 @@ class Nodes extends DataMap {
|
|
|
137
219
|
|
|
138
220
|
}
|
|
139
221
|
|
|
222
|
+
/**
|
|
223
|
+
* Deletes the given object from the internal data map
|
|
224
|
+
*
|
|
225
|
+
* @param {any} object - The object to delete.
|
|
226
|
+
* @return {?Object} The deleted dictionary.
|
|
227
|
+
*/
|
|
140
228
|
delete( object ) {
|
|
141
229
|
|
|
142
230
|
if ( object.isRenderObject ) {
|
|
@@ -156,6 +244,12 @@ class Nodes extends DataMap {
|
|
|
156
244
|
|
|
157
245
|
}
|
|
158
246
|
|
|
247
|
+
/**
|
|
248
|
+
* Returns a node builder state for the given compute node.
|
|
249
|
+
*
|
|
250
|
+
* @param {Node} computeNode - The compute node.
|
|
251
|
+
* @return {NodeBuilderState} The node builder state.
|
|
252
|
+
*/
|
|
159
253
|
getForCompute( computeNode ) {
|
|
160
254
|
|
|
161
255
|
const computeData = this.get( computeNode );
|
|
@@ -177,6 +271,13 @@ class Nodes extends DataMap {
|
|
|
177
271
|
|
|
178
272
|
}
|
|
179
273
|
|
|
274
|
+
/**
|
|
275
|
+
* Creates a node builder state for the given node builder.
|
|
276
|
+
*
|
|
277
|
+
* @private
|
|
278
|
+
* @param {NodeBuilder} nodeBuilder - The node builder.
|
|
279
|
+
* @return {NodeBuilderState} The node builder state.
|
|
280
|
+
*/
|
|
180
281
|
_createNodeBuilderState( nodeBuilder ) {
|
|
181
282
|
|
|
182
283
|
return new NodeBuilderState(
|
|
@@ -188,75 +289,155 @@ class Nodes extends DataMap {
|
|
|
188
289
|
nodeBuilder.updateNodes,
|
|
189
290
|
nodeBuilder.updateBeforeNodes,
|
|
190
291
|
nodeBuilder.updateAfterNodes,
|
|
191
|
-
nodeBuilder.
|
|
292
|
+
nodeBuilder.observer,
|
|
192
293
|
nodeBuilder.transforms
|
|
193
294
|
);
|
|
194
295
|
|
|
195
296
|
}
|
|
196
297
|
|
|
298
|
+
/**
|
|
299
|
+
* Returns an environment node for the current configured
|
|
300
|
+
* scene environment.
|
|
301
|
+
*
|
|
302
|
+
* @param {Scene} scene - The scene.
|
|
303
|
+
* @return {Node} A node representing the current scene environment.
|
|
304
|
+
*/
|
|
197
305
|
getEnvironmentNode( scene ) {
|
|
198
306
|
|
|
199
|
-
|
|
307
|
+
this.updateEnvironment( scene );
|
|
308
|
+
|
|
309
|
+
let environmentNode = null;
|
|
310
|
+
|
|
311
|
+
if ( scene.environmentNode && scene.environmentNode.isNode ) {
|
|
312
|
+
|
|
313
|
+
environmentNode = scene.environmentNode;
|
|
314
|
+
|
|
315
|
+
} else {
|
|
316
|
+
|
|
317
|
+
const sceneData = this.get( scene );
|
|
318
|
+
|
|
319
|
+
if ( sceneData.environmentNode ) {
|
|
320
|
+
|
|
321
|
+
environmentNode = sceneData.environmentNode;
|
|
322
|
+
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
return environmentNode;
|
|
200
328
|
|
|
201
329
|
}
|
|
202
330
|
|
|
331
|
+
/**
|
|
332
|
+
* Returns a background node for the current configured
|
|
333
|
+
* scene background.
|
|
334
|
+
*
|
|
335
|
+
* @param {Scene} scene - The scene.
|
|
336
|
+
* @return {Node} A node representing the current scene background.
|
|
337
|
+
*/
|
|
203
338
|
getBackgroundNode( scene ) {
|
|
204
339
|
|
|
205
|
-
|
|
340
|
+
this.updateBackground( scene );
|
|
341
|
+
|
|
342
|
+
let backgroundNode = null;
|
|
343
|
+
|
|
344
|
+
if ( scene.backgroundNode && scene.backgroundNode.isNode ) {
|
|
345
|
+
|
|
346
|
+
backgroundNode = scene.backgroundNode;
|
|
347
|
+
|
|
348
|
+
} else {
|
|
349
|
+
|
|
350
|
+
const sceneData = this.get( scene );
|
|
351
|
+
|
|
352
|
+
if ( sceneData.backgroundNode ) {
|
|
353
|
+
|
|
354
|
+
backgroundNode = sceneData.backgroundNode;
|
|
355
|
+
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
return backgroundNode;
|
|
206
361
|
|
|
207
362
|
}
|
|
208
363
|
|
|
364
|
+
/**
|
|
365
|
+
* Returns a fog node for the current configured scene fog.
|
|
366
|
+
*
|
|
367
|
+
* @param {Scene} scene - The scene.
|
|
368
|
+
* @return {Node} A node representing the current scene fog.
|
|
369
|
+
*/
|
|
209
370
|
getFogNode( scene ) {
|
|
210
371
|
|
|
372
|
+
this.updateFog( scene );
|
|
373
|
+
|
|
211
374
|
return scene.fogNode || this.get( scene ).fogNode || null;
|
|
212
375
|
|
|
213
376
|
}
|
|
214
377
|
|
|
378
|
+
/**
|
|
379
|
+
* Returns a cache key for the given scene and lights node.
|
|
380
|
+
* This key is used by `RenderObject` as a part of the dynamic
|
|
381
|
+
* cache key (a key that must be checked every time the render
|
|
382
|
+
* objects is drawn).
|
|
383
|
+
*
|
|
384
|
+
* @param {Scene} scene - The scene.
|
|
385
|
+
* @param {LightsNode} lightsNode - The lights node.
|
|
386
|
+
* @return {number} The cache key.
|
|
387
|
+
*/
|
|
215
388
|
getCacheKey( scene, lightsNode ) {
|
|
216
389
|
|
|
217
|
-
|
|
390
|
+
_chainKeys[ 0 ] = scene;
|
|
391
|
+
_chainKeys[ 1 ] = lightsNode;
|
|
392
|
+
|
|
218
393
|
const callId = this.renderer.info.calls;
|
|
219
394
|
|
|
220
|
-
|
|
395
|
+
const cacheKeyData = this.callHashCache.get( _chainKeys ) || {};
|
|
221
396
|
|
|
222
|
-
if ( cacheKeyData
|
|
397
|
+
if ( cacheKeyData.callId !== callId ) {
|
|
223
398
|
|
|
224
399
|
const environmentNode = this.getEnvironmentNode( scene );
|
|
225
400
|
const fogNode = this.getFogNode( scene );
|
|
226
401
|
|
|
227
|
-
|
|
402
|
+
if ( lightsNode ) _cacheKeyValues.push( lightsNode.getCacheKey( true ) );
|
|
403
|
+
if ( environmentNode ) _cacheKeyValues.push( environmentNode.getCacheKey() );
|
|
404
|
+
if ( fogNode ) _cacheKeyValues.push( fogNode.getCacheKey() );
|
|
228
405
|
|
|
229
|
-
|
|
230
|
-
if ( environmentNode ) cacheKey.push( environmentNode.getCacheKey() );
|
|
231
|
-
if ( fogNode ) cacheKey.push( fogNode.getCacheKey() );
|
|
406
|
+
_cacheKeyValues.push( this.renderer.shadowMap.enabled ? 1 : 0 );
|
|
232
407
|
|
|
233
|
-
cacheKeyData =
|
|
234
|
-
|
|
235
|
-
cacheKey: cacheKey.join( ',' )
|
|
236
|
-
};
|
|
408
|
+
cacheKeyData.callId = callId;
|
|
409
|
+
cacheKeyData.cacheKey = hashArray( _cacheKeyValues );
|
|
237
410
|
|
|
238
|
-
this.callHashCache.set(
|
|
239
|
-
|
|
240
|
-
}
|
|
411
|
+
this.callHashCache.set( _chainKeys, cacheKeyData );
|
|
241
412
|
|
|
242
|
-
|
|
413
|
+
_cacheKeyValues.length = 0;
|
|
243
414
|
|
|
244
|
-
|
|
415
|
+
}
|
|
245
416
|
|
|
246
|
-
|
|
417
|
+
_chainKeys.length = 0;
|
|
247
418
|
|
|
248
|
-
|
|
249
|
-
this.updateFog( scene );
|
|
250
|
-
this.updateBackground( scene );
|
|
419
|
+
return cacheKeyData.cacheKey;
|
|
251
420
|
|
|
252
421
|
}
|
|
253
422
|
|
|
423
|
+
/**
|
|
424
|
+
* A boolean that indicates whether tone mapping should be enabled
|
|
425
|
+
* or not.
|
|
426
|
+
*
|
|
427
|
+
* @type {boolean}
|
|
428
|
+
*/
|
|
254
429
|
get isToneMappingState() {
|
|
255
430
|
|
|
256
431
|
return this.renderer.getRenderTarget() ? false : true;
|
|
257
432
|
|
|
258
433
|
}
|
|
259
434
|
|
|
435
|
+
/**
|
|
436
|
+
* If a scene background is configured, this method makes sure to
|
|
437
|
+
* represent the background with a corresponding node-based implementation.
|
|
438
|
+
*
|
|
439
|
+
* @param {Scene} scene - The scene.
|
|
440
|
+
*/
|
|
260
441
|
updateBackground( scene ) {
|
|
261
442
|
|
|
262
443
|
const sceneData = this.get( scene );
|
|
@@ -264,26 +445,51 @@ class Nodes extends DataMap {
|
|
|
264
445
|
|
|
265
446
|
if ( background ) {
|
|
266
447
|
|
|
267
|
-
|
|
448
|
+
const forceUpdate = ( scene.backgroundBlurriness === 0 && sceneData.backgroundBlurriness > 0 ) || ( scene.backgroundBlurriness > 0 && sceneData.backgroundBlurriness === 0 );
|
|
449
|
+
|
|
450
|
+
if ( sceneData.background !== background || forceUpdate ) {
|
|
451
|
+
|
|
452
|
+
const backgroundNode = this.getCacheNode( 'background', background, () => {
|
|
453
|
+
|
|
454
|
+
if ( background.isCubeTexture === true || ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping || background.mapping === CubeUVReflectionMapping ) ) {
|
|
455
|
+
|
|
456
|
+
if ( scene.backgroundBlurriness > 0 || background.mapping === CubeUVReflectionMapping ) {
|
|
268
457
|
|
|
269
|
-
|
|
458
|
+
return pmremTexture( background );
|
|
270
459
|
|
|
271
|
-
|
|
460
|
+
} else {
|
|
272
461
|
|
|
273
|
-
|
|
462
|
+
let envMap;
|
|
274
463
|
|
|
275
|
-
|
|
464
|
+
if ( background.isCubeTexture === true ) {
|
|
276
465
|
|
|
277
|
-
|
|
466
|
+
envMap = cubeTexture( background );
|
|
278
467
|
|
|
279
|
-
|
|
468
|
+
} else {
|
|
280
469
|
|
|
281
|
-
|
|
470
|
+
envMap = texture( background );
|
|
282
471
|
|
|
283
|
-
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
return cubeMapNode( envMap );
|
|
475
|
+
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
} else if ( background.isTexture === true ) {
|
|
479
|
+
|
|
480
|
+
return texture( background, screenUV.flipY() ).setUpdateMatrix( true );
|
|
481
|
+
|
|
482
|
+
} else if ( background.isColor !== true ) {
|
|
483
|
+
|
|
484
|
+
console.error( 'WebGPUNodes: Unsupported background configuration.', background );
|
|
485
|
+
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
}, forceUpdate );
|
|
284
489
|
|
|
285
490
|
sceneData.backgroundNode = backgroundNode;
|
|
286
491
|
sceneData.background = background;
|
|
492
|
+
sceneData.backgroundBlurriness = scene.backgroundBlurriness;
|
|
287
493
|
|
|
288
494
|
}
|
|
289
495
|
|
|
@@ -296,33 +502,75 @@ class Nodes extends DataMap {
|
|
|
296
502
|
|
|
297
503
|
}
|
|
298
504
|
|
|
505
|
+
/**
|
|
506
|
+
* This method is part of the caching of nodes which are used to represents the
|
|
507
|
+
* scene's background, fog or environment.
|
|
508
|
+
*
|
|
509
|
+
* @param {string} type - The type of object to cache.
|
|
510
|
+
* @param {Object} object - The object.
|
|
511
|
+
* @param {Function} callback - A callback that produces a node representation for the given object.
|
|
512
|
+
* @param {boolean} [forceUpdate=false] - Whether an update should be enforced or not.
|
|
513
|
+
* @return {Node} The node representation.
|
|
514
|
+
*/
|
|
515
|
+
getCacheNode( type, object, callback, forceUpdate = false ) {
|
|
516
|
+
|
|
517
|
+
const nodeCache = this.cacheLib[ type ] || ( this.cacheLib[ type ] = new WeakMap() );
|
|
518
|
+
|
|
519
|
+
let node = nodeCache.get( object );
|
|
520
|
+
|
|
521
|
+
if ( node === undefined || forceUpdate ) {
|
|
522
|
+
|
|
523
|
+
node = callback();
|
|
524
|
+
nodeCache.set( object, node );
|
|
525
|
+
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
return node;
|
|
529
|
+
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/**
|
|
533
|
+
* If a scene fog is configured, this method makes sure to
|
|
534
|
+
* represent the fog with a corresponding node-based implementation.
|
|
535
|
+
*
|
|
536
|
+
* @param {Scene} scene - The scene.
|
|
537
|
+
*/
|
|
299
538
|
updateFog( scene ) {
|
|
300
539
|
|
|
301
540
|
const sceneData = this.get( scene );
|
|
302
|
-
const
|
|
541
|
+
const sceneFog = scene.fog;
|
|
542
|
+
|
|
543
|
+
if ( sceneFog ) {
|
|
544
|
+
|
|
545
|
+
if ( sceneData.fog !== sceneFog ) {
|
|
303
546
|
|
|
304
|
-
|
|
547
|
+
const fogNode = this.getCacheNode( 'fog', sceneFog, () => {
|
|
305
548
|
|
|
306
|
-
|
|
549
|
+
if ( sceneFog.isFogExp2 ) {
|
|
307
550
|
|
|
308
|
-
|
|
551
|
+
const color = reference( 'color', 'color', sceneFog ).setGroup( renderGroup );
|
|
552
|
+
const density = reference( 'density', 'float', sceneFog ).setGroup( renderGroup );
|
|
309
553
|
|
|
310
|
-
|
|
554
|
+
return fog( color, densityFogFactor( density ) );
|
|
311
555
|
|
|
312
|
-
|
|
556
|
+
} else if ( sceneFog.isFog ) {
|
|
313
557
|
|
|
314
|
-
|
|
558
|
+
const color = reference( 'color', 'color', sceneFog ).setGroup( renderGroup );
|
|
559
|
+
const near = reference( 'near', 'float', sceneFog ).setGroup( renderGroup );
|
|
560
|
+
const far = reference( 'far', 'float', sceneFog ).setGroup( renderGroup );
|
|
315
561
|
|
|
316
|
-
|
|
562
|
+
return fog( color, rangeFogFactor( near, far ) );
|
|
317
563
|
|
|
318
|
-
|
|
564
|
+
} else {
|
|
319
565
|
|
|
320
|
-
|
|
566
|
+
console.error( 'THREE.Renderer: Unsupported fog configuration.', sceneFog );
|
|
321
567
|
|
|
322
|
-
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
} );
|
|
323
571
|
|
|
324
572
|
sceneData.fogNode = fogNode;
|
|
325
|
-
sceneData.fog =
|
|
573
|
+
sceneData.fog = sceneFog;
|
|
326
574
|
|
|
327
575
|
}
|
|
328
576
|
|
|
@@ -335,6 +583,12 @@ class Nodes extends DataMap {
|
|
|
335
583
|
|
|
336
584
|
}
|
|
337
585
|
|
|
586
|
+
/**
|
|
587
|
+
* If a scene environment is configured, this method makes sure to
|
|
588
|
+
* represent the environment with a corresponding node-based implementation.
|
|
589
|
+
*
|
|
590
|
+
* @param {Scene} scene - The scene.
|
|
591
|
+
*/
|
|
338
592
|
updateEnvironment( scene ) {
|
|
339
593
|
|
|
340
594
|
const sceneData = this.get( scene );
|
|
@@ -344,21 +598,23 @@ class Nodes extends DataMap {
|
|
|
344
598
|
|
|
345
599
|
if ( sceneData.environment !== environment ) {
|
|
346
600
|
|
|
347
|
-
|
|
601
|
+
const environmentNode = this.getCacheNode( 'environment', environment, () => {
|
|
602
|
+
|
|
603
|
+
if ( environment.isCubeTexture === true ) {
|
|
348
604
|
|
|
349
|
-
|
|
605
|
+
return cubeTexture( environment );
|
|
350
606
|
|
|
351
|
-
|
|
607
|
+
} else if ( environment.isTexture === true ) {
|
|
352
608
|
|
|
353
|
-
|
|
609
|
+
return texture( environment );
|
|
354
610
|
|
|
355
|
-
|
|
611
|
+
} else {
|
|
356
612
|
|
|
357
|
-
|
|
613
|
+
console.error( 'Nodes: Unsupported environment configuration.', environment );
|
|
358
614
|
|
|
359
|
-
|
|
615
|
+
}
|
|
360
616
|
|
|
361
|
-
}
|
|
617
|
+
} );
|
|
362
618
|
|
|
363
619
|
sceneData.environmentNode = environmentNode;
|
|
364
620
|
sceneData.environment = environment;
|
|
@@ -393,6 +649,11 @@ class Nodes extends DataMap {
|
|
|
393
649
|
|
|
394
650
|
}
|
|
395
651
|
|
|
652
|
+
/**
|
|
653
|
+
* Returns the current output cache key.
|
|
654
|
+
*
|
|
655
|
+
* @return {string} The output cache key.
|
|
656
|
+
*/
|
|
396
657
|
getOutputCacheKey() {
|
|
397
658
|
|
|
398
659
|
const renderer = this.renderer;
|
|
@@ -401,53 +662,87 @@ class Nodes extends DataMap {
|
|
|
401
662
|
|
|
402
663
|
}
|
|
403
664
|
|
|
665
|
+
/**
|
|
666
|
+
* Checks if the output configuration (tone mapping and color space) for
|
|
667
|
+
* the given target has changed.
|
|
668
|
+
*
|
|
669
|
+
* @param {Texture} outputTarget - The output target.
|
|
670
|
+
* @return {boolean} Whether the output configuration has changed or not.
|
|
671
|
+
*/
|
|
404
672
|
hasOutputChange( outputTarget ) {
|
|
405
673
|
|
|
406
|
-
const cacheKey =
|
|
674
|
+
const cacheKey = _outputNodeMap.get( outputTarget );
|
|
407
675
|
|
|
408
676
|
return cacheKey !== this.getOutputCacheKey();
|
|
409
677
|
|
|
410
678
|
}
|
|
411
679
|
|
|
412
|
-
|
|
680
|
+
/**
|
|
681
|
+
* Returns a node that represents the output configuration (tone mapping and
|
|
682
|
+
* color space) for the current target.
|
|
683
|
+
*
|
|
684
|
+
* @param {Texture} outputTarget - The output target.
|
|
685
|
+
* @return {Node} The output node.
|
|
686
|
+
*/
|
|
687
|
+
getOutputNode( outputTarget ) {
|
|
413
688
|
|
|
414
689
|
const renderer = this.renderer;
|
|
415
690
|
const cacheKey = this.getOutputCacheKey();
|
|
416
691
|
|
|
417
|
-
const output = texture(
|
|
692
|
+
const output = texture( outputTarget, screenUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
|
|
418
693
|
|
|
419
|
-
|
|
694
|
+
_outputNodeMap.set( outputTarget, cacheKey );
|
|
420
695
|
|
|
421
696
|
return output;
|
|
422
697
|
|
|
423
698
|
}
|
|
424
699
|
|
|
700
|
+
/**
|
|
701
|
+
* Triggers the call of `updateBefore()` methods
|
|
702
|
+
* for all nodes of the given render object.
|
|
703
|
+
*
|
|
704
|
+
* @param {RenderObject} renderObject - The render object.
|
|
705
|
+
*/
|
|
425
706
|
updateBefore( renderObject ) {
|
|
426
707
|
|
|
427
|
-
const nodeFrame = this.getNodeFrameForRender( renderObject );
|
|
428
708
|
const nodeBuilder = renderObject.getNodeBuilderState();
|
|
429
709
|
|
|
430
710
|
for ( const node of nodeBuilder.updateBeforeNodes ) {
|
|
431
711
|
|
|
432
|
-
|
|
712
|
+
// update frame state for each node
|
|
713
|
+
|
|
714
|
+
this.getNodeFrameForRender( renderObject ).updateBeforeNode( node );
|
|
433
715
|
|
|
434
716
|
}
|
|
435
717
|
|
|
436
718
|
}
|
|
437
719
|
|
|
720
|
+
/**
|
|
721
|
+
* Triggers the call of `updateAfter()` methods
|
|
722
|
+
* for all nodes of the given render object.
|
|
723
|
+
*
|
|
724
|
+
* @param {RenderObject} renderObject - The render object.
|
|
725
|
+
*/
|
|
438
726
|
updateAfter( renderObject ) {
|
|
439
727
|
|
|
440
|
-
const nodeFrame = this.getNodeFrameForRender( renderObject );
|
|
441
728
|
const nodeBuilder = renderObject.getNodeBuilderState();
|
|
442
729
|
|
|
443
730
|
for ( const node of nodeBuilder.updateAfterNodes ) {
|
|
444
731
|
|
|
445
|
-
|
|
732
|
+
// update frame state for each node
|
|
733
|
+
|
|
734
|
+
this.getNodeFrameForRender( renderObject ).updateAfterNode( node );
|
|
446
735
|
|
|
447
736
|
}
|
|
448
737
|
|
|
449
738
|
}
|
|
450
739
|
|
|
740
|
+
/**
|
|
741
|
+
* Triggers the call of `update()` methods
|
|
742
|
+
* for all nodes of the given compute node.
|
|
743
|
+
*
|
|
744
|
+
* @param {Node} computeNode - The compute node.
|
|
745
|
+
*/
|
|
451
746
|
updateForCompute( computeNode ) {
|
|
452
747
|
|
|
453
748
|
const nodeFrame = this.getNodeFrame();
|
|
@@ -461,6 +756,12 @@ class Nodes extends DataMap {
|
|
|
461
756
|
|
|
462
757
|
}
|
|
463
758
|
|
|
759
|
+
/**
|
|
760
|
+
* Triggers the call of `update()` methods
|
|
761
|
+
* for all nodes of the given compute node.
|
|
762
|
+
*
|
|
763
|
+
* @param {RenderObject} renderObject - The render object.
|
|
764
|
+
*/
|
|
464
765
|
updateForRender( renderObject ) {
|
|
465
766
|
|
|
466
767
|
const nodeFrame = this.getNodeFrameForRender( renderObject );
|
|
@@ -474,12 +775,31 @@ class Nodes extends DataMap {
|
|
|
474
775
|
|
|
475
776
|
}
|
|
476
777
|
|
|
778
|
+
/**
|
|
779
|
+
* Returns `true` if the given render object requires a refresh.
|
|
780
|
+
*
|
|
781
|
+
* @param {RenderObject} renderObject - The render object.
|
|
782
|
+
* @return {boolean} Whether the given render object requires a refresh or not.
|
|
783
|
+
*/
|
|
784
|
+
needsRefresh( renderObject ) {
|
|
785
|
+
|
|
786
|
+
const nodeFrame = this.getNodeFrameForRender( renderObject );
|
|
787
|
+
const monitor = renderObject.getMonitor();
|
|
788
|
+
|
|
789
|
+
return monitor.needsRefresh( renderObject, nodeFrame );
|
|
790
|
+
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
/**
|
|
794
|
+
* Frees the internal resources.
|
|
795
|
+
*/
|
|
477
796
|
dispose() {
|
|
478
797
|
|
|
479
798
|
super.dispose();
|
|
480
799
|
|
|
481
800
|
this.nodeFrame = new NodeFrame();
|
|
482
801
|
this.nodeBuilderCache = new Map();
|
|
802
|
+
this.cacheLib = {};
|
|
483
803
|
|
|
484
804
|
}
|
|
485
805
|
|