super-three 0.181.0 → 0.185.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 +3 -4
- package/build/three.cjs +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +4 -19
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -3,18 +3,21 @@ import ChainMap from '../ChainMap.js';
|
|
|
3
3
|
import NodeBuilderState from './NodeBuilderState.js';
|
|
4
4
|
import NodeMaterial from '../../../materials/nodes/NodeMaterial.js';
|
|
5
5
|
import { cubeMapNode } from '../../../nodes/utils/CubeMapNode.js';
|
|
6
|
-
import { NodeFrame } from '../../../nodes/Nodes.js';
|
|
7
|
-
import {
|
|
6
|
+
import { NodeFrame, NodeUpdateType, StackTrace } from '../../../nodes/Nodes.js';
|
|
7
|
+
import { renderGroup, cubeTexture, texture, fog, rangeFogFactor, densityFogFactor, reference, pmremTexture, screenUV, uniform } from '../../../nodes/TSL.js';
|
|
8
8
|
import { builtin } from '../../../nodes/accessors/BuiltinNode.js';
|
|
9
9
|
|
|
10
10
|
import { CubeUVReflectionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
|
|
11
11
|
import { hashArray } from '../../../nodes/core/NodeUtils.js';
|
|
12
12
|
import { error } from '../../../utils.js';
|
|
13
13
|
|
|
14
|
-
const _outputNodeMap = new WeakMap();
|
|
15
14
|
const _chainKeys = [];
|
|
16
15
|
const _cacheKeyValues = [];
|
|
17
16
|
|
|
17
|
+
// Dedicated uniform for output pass array layer selection
|
|
18
|
+
// This is separate from cameraIndex to avoid the sharedUniformGroup complexity
|
|
19
|
+
const _outputLayerIndex = /*@__PURE__*/ uniform( 0, 'int' ).setGroup( renderGroup );
|
|
20
|
+
|
|
18
21
|
/**
|
|
19
22
|
* This renderer module manages node-related objects and is the
|
|
20
23
|
* primary interface between the renderer and the node system.
|
|
@@ -22,7 +25,7 @@ const _cacheKeyValues = [];
|
|
|
22
25
|
* @private
|
|
23
26
|
* @augments DataMap
|
|
24
27
|
*/
|
|
25
|
-
class
|
|
28
|
+
class NodeManager extends DataMap {
|
|
26
29
|
|
|
27
30
|
/**
|
|
28
31
|
* Constructs a new nodes management component.
|
|
@@ -76,6 +79,22 @@ class Nodes extends DataMap {
|
|
|
76
79
|
*/
|
|
77
80
|
this.groupsData = new ChainMap();
|
|
78
81
|
|
|
82
|
+
/**
|
|
83
|
+
* Queue for pending async builds to limit concurrent compilation.
|
|
84
|
+
*
|
|
85
|
+
* @private
|
|
86
|
+
* @type {Array<Function>}
|
|
87
|
+
*/
|
|
88
|
+
this._buildQueue = [];
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Whether an async build is currently in progress.
|
|
92
|
+
*
|
|
93
|
+
* @private
|
|
94
|
+
* @type {boolean}
|
|
95
|
+
*/
|
|
96
|
+
this._buildInProgress = false;
|
|
97
|
+
|
|
79
98
|
/**
|
|
80
99
|
* A cache for managing node objects of
|
|
81
100
|
* scene properties like fog or environments.
|
|
@@ -95,51 +114,12 @@ class Nodes extends DataMap {
|
|
|
95
114
|
updateGroup( nodeUniformsGroup ) {
|
|
96
115
|
|
|
97
116
|
const groupNode = nodeUniformsGroup.groupNode;
|
|
98
|
-
const name = groupNode.name;
|
|
99
|
-
|
|
100
|
-
// objectGroup is always updated
|
|
101
|
-
|
|
102
|
-
if ( name === objectGroup.name ) return true;
|
|
103
|
-
|
|
104
|
-
// renderGroup is updated once per render/compute call
|
|
105
|
-
|
|
106
|
-
if ( name === renderGroup.name ) {
|
|
107
|
-
|
|
108
|
-
const uniformsGroupData = this.get( nodeUniformsGroup );
|
|
109
|
-
const renderId = this.nodeFrame.renderId;
|
|
110
|
-
|
|
111
|
-
if ( uniformsGroupData.renderId !== renderId ) {
|
|
112
|
-
|
|
113
|
-
uniformsGroupData.renderId = renderId;
|
|
114
|
-
|
|
115
|
-
return true;
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return false;
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// frameGroup is updated once per frame
|
|
124
|
-
|
|
125
|
-
if ( name === frameGroup.name ) {
|
|
126
117
|
|
|
127
|
-
|
|
128
|
-
const frameId = this.nodeFrame.frameId;
|
|
118
|
+
// groups that are updated per object always require an update so no further checks are needed
|
|
129
119
|
|
|
130
|
-
|
|
120
|
+
if ( groupNode.updateType === NodeUpdateType.OBJECT ) return true;
|
|
131
121
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
return true;
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return false;
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// other groups are updated just when groupNode.needsUpdate is true
|
|
122
|
+
// check for update
|
|
143
123
|
|
|
144
124
|
_chainKeys[ 0 ] = groupNode;
|
|
145
125
|
_chainKeys[ 1 ] = nodeUniformsGroup;
|
|
@@ -147,7 +127,8 @@ class Nodes extends DataMap {
|
|
|
147
127
|
let groupData = this.groupsData.get( _chainKeys );
|
|
148
128
|
if ( groupData === undefined ) this.groupsData.set( _chainKeys, groupData = {} );
|
|
149
129
|
|
|
150
|
-
_chainKeys
|
|
130
|
+
_chainKeys[ 0 ] = null;
|
|
131
|
+
_chainKeys[ 1 ] = null;
|
|
151
132
|
|
|
152
133
|
if ( groupData.version !== groupNode.version ) {
|
|
153
134
|
|
|
@@ -173,13 +154,44 @@ class Nodes extends DataMap {
|
|
|
173
154
|
|
|
174
155
|
}
|
|
175
156
|
|
|
157
|
+
/**
|
|
158
|
+
* Creates a node builder configured for the given render object and material.
|
|
159
|
+
*
|
|
160
|
+
* @private
|
|
161
|
+
* @param {RenderObject} renderObject - The render object.
|
|
162
|
+
* @param {Material} material - The material to use.
|
|
163
|
+
* @return {NodeBuilder} The configured node builder.
|
|
164
|
+
*/
|
|
165
|
+
_createNodeBuilder( renderObject, material ) {
|
|
166
|
+
|
|
167
|
+
const nodeBuilder = this.backend.createNodeBuilder( renderObject.object, this.renderer );
|
|
168
|
+
nodeBuilder.scene = renderObject.scene;
|
|
169
|
+
nodeBuilder.material = material;
|
|
170
|
+
nodeBuilder.camera = renderObject.camera;
|
|
171
|
+
nodeBuilder.context.material = material;
|
|
172
|
+
nodeBuilder.lightsNode = renderObject.lightsNode;
|
|
173
|
+
nodeBuilder.environmentNode = this.getEnvironmentNode( renderObject.scene );
|
|
174
|
+
nodeBuilder.fogNode = this.getFogNode( renderObject.scene );
|
|
175
|
+
nodeBuilder.clippingContext = renderObject.clippingContext;
|
|
176
|
+
|
|
177
|
+
if ( this.renderer.getOutputRenderTarget() ? this.renderer.getOutputRenderTarget().multiview : false ) {
|
|
178
|
+
|
|
179
|
+
nodeBuilder.enableMultiview();
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return nodeBuilder;
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
|
|
176
187
|
/**
|
|
177
188
|
* Returns a node builder state for the given render object.
|
|
178
189
|
*
|
|
179
190
|
* @param {RenderObject} renderObject - The render object.
|
|
180
|
-
* @
|
|
191
|
+
* @param {boolean} [useAsync=false] - Whether to use async build with yielding.
|
|
192
|
+
* @return {NodeBuilderState|Promise<NodeBuilderState>} The node builder state (or Promise if async).
|
|
181
193
|
*/
|
|
182
|
-
getForRender( renderObject ) {
|
|
194
|
+
getForRender( renderObject, useAsync = false ) {
|
|
183
195
|
|
|
184
196
|
const renderObjectData = this.get( renderObject );
|
|
185
197
|
|
|
@@ -195,20 +207,37 @@ class Nodes extends DataMap {
|
|
|
195
207
|
|
|
196
208
|
if ( nodeBuilderState === undefined ) {
|
|
197
209
|
|
|
198
|
-
const
|
|
210
|
+
const buildNodeBuilder = async () => {
|
|
211
|
+
|
|
212
|
+
let nodeBuilder = this._createNodeBuilder( renderObject, renderObject.material );
|
|
199
213
|
|
|
200
|
-
|
|
201
|
-
nodeBuilder.scene = renderObject.scene;
|
|
202
|
-
nodeBuilder.material = material;
|
|
203
|
-
nodeBuilder.camera = renderObject.camera;
|
|
204
|
-
nodeBuilder.context.material = material;
|
|
205
|
-
nodeBuilder.lightsNode = renderObject.lightsNode;
|
|
206
|
-
nodeBuilder.environmentNode = this.getEnvironmentNode( renderObject.scene );
|
|
207
|
-
nodeBuilder.fogNode = this.getFogNode( renderObject.scene );
|
|
208
|
-
nodeBuilder.clippingContext = renderObject.clippingContext;
|
|
209
|
-
if ( this.renderer.getOutputRenderTarget() ? this.renderer.getOutputRenderTarget().multiview : false ) {
|
|
214
|
+
try {
|
|
210
215
|
|
|
211
|
-
|
|
216
|
+
if ( useAsync ) {
|
|
217
|
+
|
|
218
|
+
await nodeBuilder.buildAsync();
|
|
219
|
+
|
|
220
|
+
} else {
|
|
221
|
+
|
|
222
|
+
nodeBuilder.build();
|
|
223
|
+
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
} catch ( e ) {
|
|
227
|
+
|
|
228
|
+
nodeBuilder = this._createNodeBuilder( renderObject, new NodeMaterial() );
|
|
229
|
+
|
|
230
|
+
if ( useAsync ) {
|
|
231
|
+
|
|
232
|
+
await nodeBuilder.buildAsync();
|
|
233
|
+
|
|
234
|
+
} else {
|
|
235
|
+
|
|
236
|
+
nodeBuilder.build();
|
|
237
|
+
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
error( 'TSL: ' + e );
|
|
212
241
|
|
|
213
242
|
}
|
|
214
243
|
|
|
@@ -216,24 +245,52 @@ class Nodes extends DataMap {
|
|
|
216
245
|
|
|
217
246
|
};
|
|
218
247
|
|
|
219
|
-
|
|
248
|
+
if ( useAsync ) {
|
|
220
249
|
|
|
221
|
-
|
|
250
|
+
return buildNodeBuilder().then( ( nodeBuilder ) => {
|
|
222
251
|
|
|
223
|
-
|
|
252
|
+
nodeBuilderState = this._createNodeBuilderState( nodeBuilder );
|
|
253
|
+
nodeBuilderCache.set( cacheKey, nodeBuilderState );
|
|
254
|
+
nodeBuilderState.usedTimes ++;
|
|
255
|
+
renderObjectData.nodeBuilderState = nodeBuilderState;
|
|
224
256
|
|
|
225
|
-
|
|
257
|
+
return nodeBuilderState;
|
|
226
258
|
|
|
227
|
-
|
|
228
|
-
nodeBuilder.build();
|
|
259
|
+
} );
|
|
229
260
|
|
|
230
|
-
|
|
261
|
+
} else {
|
|
231
262
|
|
|
232
|
-
|
|
263
|
+
// Synchronous path - call buildNodeBuilder but don't await
|
|
264
|
+
let nodeBuilder = this._createNodeBuilder( renderObject, renderObject.material );
|
|
265
|
+
|
|
266
|
+
try {
|
|
233
267
|
|
|
234
|
-
|
|
268
|
+
nodeBuilder.build();
|
|
235
269
|
|
|
236
|
-
|
|
270
|
+
} catch ( e ) {
|
|
271
|
+
|
|
272
|
+
nodeBuilder = this._createNodeBuilder( renderObject, new NodeMaterial() );
|
|
273
|
+
nodeBuilder.build();
|
|
274
|
+
|
|
275
|
+
let stackTrace = e.stackTrace;
|
|
276
|
+
|
|
277
|
+
if ( ! stackTrace && e.stack ) {
|
|
278
|
+
|
|
279
|
+
// Capture stack trace for JavaScript errors
|
|
280
|
+
|
|
281
|
+
stackTrace = new StackTrace( e.stack );
|
|
282
|
+
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
error( 'TSL: ' + e, stackTrace );
|
|
286
|
+
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
nodeBuilderState = this._createNodeBuilderState( nodeBuilder );
|
|
290
|
+
|
|
291
|
+
nodeBuilderCache.set( cacheKey, nodeBuilderState );
|
|
292
|
+
|
|
293
|
+
}
|
|
237
294
|
|
|
238
295
|
}
|
|
239
296
|
|
|
@@ -247,6 +304,114 @@ class Nodes extends DataMap {
|
|
|
247
304
|
|
|
248
305
|
}
|
|
249
306
|
|
|
307
|
+
/**
|
|
308
|
+
* Async version of getForRender() that yields to main thread during build.
|
|
309
|
+
* Use this in compileAsync() to prevent blocking the main thread.
|
|
310
|
+
*
|
|
311
|
+
* @param {RenderObject} renderObject - The render object.
|
|
312
|
+
* @return {Promise<NodeBuilderState>} A promise that resolves to the node builder state.
|
|
313
|
+
*/
|
|
314
|
+
getForRenderAsync( renderObject ) {
|
|
315
|
+
|
|
316
|
+
const result = this.getForRender( renderObject, true );
|
|
317
|
+
|
|
318
|
+
// Ensure we always return a Promise (cache hit returns nodeBuilderState directly)
|
|
319
|
+
if ( result.then ) {
|
|
320
|
+
|
|
321
|
+
return result;
|
|
322
|
+
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
return Promise.resolve( result );
|
|
326
|
+
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Returns nodeBuilderState if ready, null if pending async build.
|
|
331
|
+
* Queues async build on first call for cache miss.
|
|
332
|
+
* Use this in render() path to enable non-blocking compilation.
|
|
333
|
+
*
|
|
334
|
+
* @param {RenderObject} renderObject - The render object.
|
|
335
|
+
* @return {?NodeBuilderState} The node builder state, or null if still building.
|
|
336
|
+
*/
|
|
337
|
+
getForRenderDeferred( renderObject ) {
|
|
338
|
+
|
|
339
|
+
const renderObjectData = this.get( renderObject );
|
|
340
|
+
|
|
341
|
+
// Already built for this renderObject
|
|
342
|
+
if ( renderObjectData.nodeBuilderState !== undefined ) {
|
|
343
|
+
|
|
344
|
+
return renderObjectData.nodeBuilderState;
|
|
345
|
+
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// Check cache with stable key
|
|
349
|
+
const cacheKey = this.getForRenderCacheKey( renderObject );
|
|
350
|
+
const nodeBuilderState = this.nodeBuilderCache.get( cacheKey );
|
|
351
|
+
|
|
352
|
+
if ( nodeBuilderState !== undefined ) {
|
|
353
|
+
|
|
354
|
+
// Cache hit - use it
|
|
355
|
+
nodeBuilderState.usedTimes ++;
|
|
356
|
+
renderObjectData.nodeBuilderState = nodeBuilderState;
|
|
357
|
+
return nodeBuilderState;
|
|
358
|
+
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// Cache miss - check if async build already queued
|
|
362
|
+
if ( renderObjectData.pendingBuild !== true ) {
|
|
363
|
+
|
|
364
|
+
// Mark as pending and add to build queue
|
|
365
|
+
renderObjectData.pendingBuild = true;
|
|
366
|
+
|
|
367
|
+
this._buildQueue.push( () => {
|
|
368
|
+
|
|
369
|
+
return this.getForRenderAsync( renderObject ).then( () => {
|
|
370
|
+
|
|
371
|
+
renderObjectData.pendingBuild = false;
|
|
372
|
+
|
|
373
|
+
} );
|
|
374
|
+
|
|
375
|
+
} );
|
|
376
|
+
|
|
377
|
+
// Start processing queue if not already running
|
|
378
|
+
this._processBuildQueue();
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
return null; // Not ready
|
|
383
|
+
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Processes the build queue one item at a time.
|
|
388
|
+
* This ensures builds don't all run simultaneously and freeze the main thread.
|
|
389
|
+
*
|
|
390
|
+
* @private
|
|
391
|
+
*/
|
|
392
|
+
_processBuildQueue() {
|
|
393
|
+
|
|
394
|
+
if ( this._buildInProgress || this._buildQueue.length === 0 ) {
|
|
395
|
+
|
|
396
|
+
return;
|
|
397
|
+
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
this._buildInProgress = true;
|
|
401
|
+
|
|
402
|
+
const buildFn = this._buildQueue.shift();
|
|
403
|
+
|
|
404
|
+
buildFn().then( () => {
|
|
405
|
+
|
|
406
|
+
this._buildInProgress = false;
|
|
407
|
+
|
|
408
|
+
// Process next item in queue
|
|
409
|
+
this._processBuildQueue();
|
|
410
|
+
|
|
411
|
+
} );
|
|
412
|
+
|
|
413
|
+
}
|
|
414
|
+
|
|
250
415
|
/**
|
|
251
416
|
* Deletes the given object from the internal data map
|
|
252
417
|
*
|
|
@@ -258,11 +423,16 @@ class Nodes extends DataMap {
|
|
|
258
423
|
if ( object.isRenderObject ) {
|
|
259
424
|
|
|
260
425
|
const nodeBuilderState = this.get( object ).nodeBuilderState;
|
|
261
|
-
nodeBuilderState.usedTimes --;
|
|
262
426
|
|
|
263
|
-
if ( nodeBuilderState
|
|
427
|
+
if ( nodeBuilderState !== undefined ) {
|
|
264
428
|
|
|
265
|
-
|
|
429
|
+
nodeBuilderState.usedTimes --;
|
|
430
|
+
|
|
431
|
+
if ( nodeBuilderState.usedTimes === 0 ) {
|
|
432
|
+
|
|
433
|
+
this.nodeBuilderCache.delete( this.getForRenderCacheKey( object ) );
|
|
434
|
+
|
|
435
|
+
}
|
|
266
436
|
|
|
267
437
|
}
|
|
268
438
|
|
|
@@ -284,7 +454,7 @@ class Nodes extends DataMap {
|
|
|
284
454
|
|
|
285
455
|
let nodeBuilderState = computeData.nodeBuilderState;
|
|
286
456
|
|
|
287
|
-
if ( nodeBuilderState === undefined ) {
|
|
457
|
+
if ( nodeBuilderState === undefined || computeData.version !== computeNode.version ) {
|
|
288
458
|
|
|
289
459
|
const nodeBuilder = this.backend.createNodeBuilder( computeNode, this.renderer );
|
|
290
460
|
nodeBuilder.build();
|
|
@@ -292,6 +462,7 @@ class Nodes extends DataMap {
|
|
|
292
462
|
nodeBuilderState = this._createNodeBuilderState( nodeBuilder );
|
|
293
463
|
|
|
294
464
|
computeData.nodeBuilderState = nodeBuilderState;
|
|
465
|
+
computeData.version = computeNode.version;
|
|
295
466
|
|
|
296
467
|
}
|
|
297
468
|
|
|
@@ -318,6 +489,7 @@ class Nodes extends DataMap {
|
|
|
318
489
|
nodeBuilder.updateBeforeNodes,
|
|
319
490
|
nodeBuilder.updateAfterNodes,
|
|
320
491
|
nodeBuilder.observer,
|
|
492
|
+
nodeBuilder.hardwareClipping,
|
|
321
493
|
nodeBuilder.transforms
|
|
322
494
|
);
|
|
323
495
|
|
|
@@ -332,6 +504,8 @@ class Nodes extends DataMap {
|
|
|
332
504
|
*/
|
|
333
505
|
getEnvironmentNode( scene ) {
|
|
334
506
|
|
|
507
|
+
if ( this.renderer.lighting.enabled === false ) return null;
|
|
508
|
+
|
|
335
509
|
this.updateEnvironment( scene );
|
|
336
510
|
|
|
337
511
|
let environmentNode = null;
|
|
@@ -424,16 +598,23 @@ class Nodes extends DataMap {
|
|
|
424
598
|
|
|
425
599
|
if ( cacheKeyData.callId !== callId ) {
|
|
426
600
|
|
|
427
|
-
|
|
428
|
-
|
|
601
|
+
_cacheKeyValues.push( this.renderer.getOutputRenderTarget() && this.renderer.getOutputRenderTarget().multiview ? 1 : 0 );
|
|
602
|
+
_cacheKeyValues.push( this.renderer.lighting.enabled ? 1 : 0 );
|
|
429
603
|
|
|
430
|
-
if (
|
|
431
|
-
if ( environmentNode ) _cacheKeyValues.push( environmentNode.getCacheKey() );
|
|
432
|
-
if ( fogNode ) _cacheKeyValues.push( fogNode.getCacheKey() );
|
|
604
|
+
if ( this.renderer.lighting.enabled ) {
|
|
433
605
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
606
|
+
_cacheKeyValues.push( lightsNode.getCacheKey( true ) );
|
|
607
|
+
|
|
608
|
+
_cacheKeyValues.push( this.renderer.shadowMap.enabled ? 1 : 0 );
|
|
609
|
+
_cacheKeyValues.push( this.renderer.shadowMap.type );
|
|
610
|
+
|
|
611
|
+
const environmentNode = this.getEnvironmentNode( scene );
|
|
612
|
+
if ( environmentNode ) _cacheKeyValues.push( environmentNode.getCacheKey() );
|
|
613
|
+
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
const fogNode = this.getFogNode( scene );
|
|
617
|
+
if ( fogNode ) _cacheKeyValues.push( fogNode.getCacheKey() );
|
|
437
618
|
|
|
438
619
|
cacheKeyData.callId = callId;
|
|
439
620
|
cacheKeyData.cacheKey = hashArray( _cacheKeyValues );
|
|
@@ -444,7 +625,8 @@ class Nodes extends DataMap {
|
|
|
444
625
|
|
|
445
626
|
}
|
|
446
627
|
|
|
447
|
-
_chainKeys
|
|
628
|
+
_chainKeys[ 0 ] = null;
|
|
629
|
+
_chainKeys[ 1 ] = null;
|
|
448
630
|
|
|
449
631
|
return cacheKeyData.cacheKey;
|
|
450
632
|
|
|
@@ -692,21 +874,6 @@ class Nodes extends DataMap {
|
|
|
692
874
|
|
|
693
875
|
}
|
|
694
876
|
|
|
695
|
-
/**
|
|
696
|
-
* Checks if the output configuration (tone mapping and color space) for
|
|
697
|
-
* the given target has changed.
|
|
698
|
-
*
|
|
699
|
-
* @param {Texture} outputTarget - The output target.
|
|
700
|
-
* @return {boolean} Whether the output configuration has changed or not.
|
|
701
|
-
*/
|
|
702
|
-
hasOutputChange( outputTarget ) {
|
|
703
|
-
|
|
704
|
-
const cacheKey = _outputNodeMap.get( outputTarget );
|
|
705
|
-
|
|
706
|
-
return cacheKey !== this.getOutputCacheKey();
|
|
707
|
-
|
|
708
|
-
}
|
|
709
|
-
|
|
710
877
|
/**
|
|
711
878
|
* Returns a node that represents the output configuration (tone mapping and
|
|
712
879
|
* color space) for the current target.
|
|
@@ -717,18 +884,43 @@ class Nodes extends DataMap {
|
|
|
717
884
|
getOutputNode( outputTarget ) {
|
|
718
885
|
|
|
719
886
|
const renderer = this.renderer;
|
|
720
|
-
const cacheKey = this.getOutputCacheKey();
|
|
721
887
|
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
888
|
+
let output;
|
|
889
|
+
|
|
890
|
+
if ( outputTarget.isArrayTexture ) {
|
|
891
|
+
|
|
892
|
+
if ( this.backend.isWebGLBackend ) {
|
|
893
|
+
|
|
894
|
+
output = texture( outputTarget, screenUV ).depth( builtin( 'gl_ViewID_OVR' ) ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
|
|
895
|
+
|
|
896
|
+
} else {
|
|
897
|
+
|
|
898
|
+
output = texture( outputTarget, screenUV ).depth( _outputLayerIndex ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
|
|
899
|
+
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
} else {
|
|
725
903
|
|
|
726
|
-
|
|
904
|
+
output = texture( outputTarget, screenUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
|
|
905
|
+
|
|
906
|
+
}
|
|
727
907
|
|
|
728
908
|
return output;
|
|
729
909
|
|
|
730
910
|
}
|
|
731
911
|
|
|
912
|
+
/**
|
|
913
|
+
* Sets the output layer index for array texture output pass.
|
|
914
|
+
* This should be called before each layer render during the output pass.
|
|
915
|
+
*
|
|
916
|
+
* @param {number} index - The layer index.
|
|
917
|
+
*/
|
|
918
|
+
setOutputLayerIndex( index ) {
|
|
919
|
+
|
|
920
|
+
_outputLayerIndex.value = index;
|
|
921
|
+
|
|
922
|
+
}
|
|
923
|
+
|
|
732
924
|
/**
|
|
733
925
|
* Triggers the call of `updateBefore()` methods
|
|
734
926
|
* for all nodes of the given render object.
|
|
@@ -790,7 +982,7 @@ class Nodes extends DataMap {
|
|
|
790
982
|
|
|
791
983
|
/**
|
|
792
984
|
* Triggers the call of `update()` methods
|
|
793
|
-
* for all nodes of the given
|
|
985
|
+
* for all nodes of the given render object.
|
|
794
986
|
*
|
|
795
987
|
* @param {RenderObject} renderObject - The render object.
|
|
796
988
|
*/
|
|
@@ -837,4 +1029,4 @@ class Nodes extends DataMap {
|
|
|
837
1029
|
|
|
838
1030
|
}
|
|
839
1031
|
|
|
840
|
-
export default
|
|
1032
|
+
export default NodeManager;
|
|
@@ -45,14 +45,25 @@ class NodeStorageBuffer extends StorageBuffer {
|
|
|
45
45
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
/**
|
|
49
|
+
* The storage buffer attribute node.
|
|
50
|
+
*
|
|
51
|
+
* @type {StorageBufferAttribute}
|
|
52
|
+
*/
|
|
53
|
+
get attribute() {
|
|
54
|
+
|
|
55
|
+
return this.nodeUniform.value;
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
48
59
|
/**
|
|
49
60
|
* The storage buffer.
|
|
50
61
|
*
|
|
51
|
-
* @type {
|
|
62
|
+
* @type {Float32Array}
|
|
52
63
|
*/
|
|
53
64
|
get buffer() {
|
|
54
65
|
|
|
55
|
-
return this.nodeUniform.value;
|
|
66
|
+
return this.nodeUniform.value.array;
|
|
56
67
|
|
|
57
68
|
}
|
|
58
69
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import UniformBuffer from '../UniformBuffer.js';
|
|
2
|
+
import { getFloatLength } from '../BufferUtils.js';
|
|
2
3
|
|
|
3
4
|
let _id = 0;
|
|
4
5
|
|
|
@@ -35,6 +36,70 @@ class NodeUniformBuffer extends UniformBuffer {
|
|
|
35
36
|
*/
|
|
36
37
|
this.groupNode = groupNode;
|
|
37
38
|
|
|
39
|
+
/**
|
|
40
|
+
* This flag can be used for type testing.
|
|
41
|
+
*
|
|
42
|
+
* @type {boolean}
|
|
43
|
+
* @readonly
|
|
44
|
+
* @default true
|
|
45
|
+
*/
|
|
46
|
+
this.isNodeUniformBuffer = true;
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The array of update ranges.
|
|
52
|
+
*
|
|
53
|
+
* @param {Array<{start: number, count: number}>} value - The update ranges.
|
|
54
|
+
*/
|
|
55
|
+
set updateRanges( value ) {
|
|
56
|
+
|
|
57
|
+
this.nodeUniform.updateRanges = value;
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The array of update ranges.
|
|
63
|
+
*
|
|
64
|
+
* @type {Array<{start: number, count: number}>}
|
|
65
|
+
*/
|
|
66
|
+
get updateRanges() {
|
|
67
|
+
|
|
68
|
+
return this.nodeUniform.updateRanges;
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Adds a range of data in the data array to be updated on the GPU.
|
|
74
|
+
*
|
|
75
|
+
* @param {number} start - Position at which to start update.
|
|
76
|
+
* @param {number} count - The number of components to update.
|
|
77
|
+
*/
|
|
78
|
+
addUpdateRange( start, count ) {
|
|
79
|
+
|
|
80
|
+
this.nodeUniform.addUpdateRange( start, count );
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Clears all update ranges.
|
|
86
|
+
*/
|
|
87
|
+
clearUpdateRanges() {
|
|
88
|
+
|
|
89
|
+
this.nodeUniform.clearUpdateRanges();
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* The buffer's byte length.
|
|
95
|
+
*
|
|
96
|
+
* @type {number}
|
|
97
|
+
* @readonly
|
|
98
|
+
*/
|
|
99
|
+
get byteLength() {
|
|
100
|
+
|
|
101
|
+
return getFloatLength( this.buffer.byteLength );
|
|
102
|
+
|
|
38
103
|
}
|
|
39
104
|
|
|
40
105
|
/**
|