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
|
@@ -8,7 +8,7 @@ import ParameterNode from './ParameterNode.js';
|
|
|
8
8
|
import StructType from './StructType.js';
|
|
9
9
|
import FunctionNode from '../code/FunctionNode.js';
|
|
10
10
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
11
|
-
import { getTypeFromLength } from './NodeUtils.js';
|
|
11
|
+
import { getDataFromObject, getTypeFromLength, hashString } from './NodeUtils.js';
|
|
12
12
|
import { NodeUpdateType, defaultBuildStages, shaderStages } from './constants.js';
|
|
13
13
|
|
|
14
14
|
import {
|
|
@@ -20,22 +20,24 @@ import { stack } from './StackNode.js';
|
|
|
20
20
|
import { getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
|
|
21
21
|
|
|
22
22
|
import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
|
|
23
|
-
import ChainMap from '../../renderers/common/ChainMap.js';
|
|
24
23
|
|
|
25
24
|
import BindGroup from '../../renderers/common/BindGroup.js';
|
|
26
25
|
|
|
27
|
-
import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter, NormalBlending } from '../../constants.js';
|
|
26
|
+
import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter, NormalBlending, RedFormat, RGFormat, RGBFormat, RedIntegerFormat, RGIntegerFormat, RGBIntegerFormat } from '../../constants.js';
|
|
28
27
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
29
28
|
import { Color } from '../../math/Color.js';
|
|
30
29
|
import { Vector2 } from '../../math/Vector2.js';
|
|
31
30
|
import { Vector3 } from '../../math/Vector3.js';
|
|
32
31
|
import { Vector4 } from '../../math/Vector4.js';
|
|
33
32
|
import { Float16BufferAttribute } from '../../core/BufferAttribute.js';
|
|
34
|
-
import { warn, error } from '../../utils.js';
|
|
33
|
+
import { warn, error, yieldToMain } from '../../utils.js';
|
|
35
34
|
|
|
36
35
|
let _id = 0;
|
|
37
36
|
|
|
38
|
-
const
|
|
37
|
+
const _bindingGroupsCache = new WeakMap();
|
|
38
|
+
const _functionNodeCache = new WeakMap();
|
|
39
|
+
|
|
40
|
+
const sharedNodeData = new WeakMap();
|
|
39
41
|
|
|
40
42
|
const typeFromArray = new Map( [
|
|
41
43
|
[ Int8Array, 'int' ],
|
|
@@ -47,7 +49,7 @@ const typeFromArray = new Map( [
|
|
|
47
49
|
[ Float32Array, 'float' ]
|
|
48
50
|
] );
|
|
49
51
|
|
|
50
|
-
const
|
|
52
|
+
const _toFloat = ( value ) => {
|
|
51
53
|
|
|
52
54
|
if ( /e/g.test( value ) ) {
|
|
53
55
|
|
|
@@ -63,6 +65,28 @@ const toFloat = ( value ) => {
|
|
|
63
65
|
|
|
64
66
|
};
|
|
65
67
|
|
|
68
|
+
const _checkWriteUsage = ( data ) => {
|
|
69
|
+
|
|
70
|
+
if ( data.writeUsageCount > 0 ) return true;
|
|
71
|
+
|
|
72
|
+
if ( data.subBuildsCache !== undefined ) {
|
|
73
|
+
|
|
74
|
+
for ( const subBuild in data.subBuildsCache ) {
|
|
75
|
+
|
|
76
|
+
if ( _checkWriteUsage( data.subBuildsCache[ subBuild ] ) ) {
|
|
77
|
+
|
|
78
|
+
return true;
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return false;
|
|
87
|
+
|
|
88
|
+
};
|
|
89
|
+
|
|
66
90
|
/**
|
|
67
91
|
* Base class for builders which generate a shader program based
|
|
68
92
|
* on a 3D object and its node material definition.
|
|
@@ -133,16 +157,19 @@ class NodeBuilder {
|
|
|
133
157
|
* A list of all nodes the builder is processing
|
|
134
158
|
* for this 3D object.
|
|
135
159
|
*
|
|
136
|
-
* @type {
|
|
160
|
+
* @type {Set<Node>}
|
|
137
161
|
*/
|
|
138
|
-
this.nodes =
|
|
162
|
+
this.nodes = new Set();
|
|
139
163
|
|
|
140
164
|
/**
|
|
141
|
-
* A list of all sequential
|
|
165
|
+
* A list of all nodes the builder is processing in sequential order.
|
|
142
166
|
*
|
|
143
|
-
*
|
|
167
|
+
* This is used to determine the update order of nodes, which is important for
|
|
168
|
+
* {@link NodeUpdateType#UPDATE_BEFORE} and {@link NodeUpdateType#UPDATE_AFTER}.
|
|
169
|
+
*
|
|
170
|
+
* @type {Set<Node>}
|
|
144
171
|
*/
|
|
145
|
-
this.sequentialNodes =
|
|
172
|
+
this.sequentialNodes = new Set();
|
|
146
173
|
|
|
147
174
|
/**
|
|
148
175
|
* A list of all nodes which {@link Node#update} method should be executed.
|
|
@@ -211,6 +238,14 @@ class NodeBuilder {
|
|
|
211
238
|
*/
|
|
212
239
|
this.clippingContext = null;
|
|
213
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Whether the built material uses hardware clipping or not.
|
|
243
|
+
*
|
|
244
|
+
* @type {boolean}
|
|
245
|
+
* @default false
|
|
246
|
+
*/
|
|
247
|
+
this.hardwareClipping = false;
|
|
248
|
+
|
|
214
249
|
/**
|
|
215
250
|
* The generated vertex shader.
|
|
216
251
|
*
|
|
@@ -466,36 +501,26 @@ class NodeBuilder {
|
|
|
466
501
|
}
|
|
467
502
|
|
|
468
503
|
/**
|
|
469
|
-
* Whether the material is
|
|
504
|
+
* Whether the material is using flat shading or not.
|
|
470
505
|
*
|
|
471
|
-
* @
|
|
506
|
+
* @returns {boolean} Whether the material is using flat shading or not.
|
|
472
507
|
*/
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
const material = this.material;
|
|
508
|
+
isFlatShading() {
|
|
476
509
|
|
|
477
|
-
return material.
|
|
510
|
+
return this.material.flatShading === true || this.geometry.hasAttribute( 'normal' ) === false;
|
|
478
511
|
|
|
479
512
|
}
|
|
480
513
|
|
|
481
514
|
/**
|
|
482
|
-
*
|
|
515
|
+
* Whether the material is opaque or not.
|
|
483
516
|
*
|
|
484
|
-
* @return {
|
|
517
|
+
* @return {boolean} Whether the material is opaque or not.
|
|
485
518
|
*/
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
let bindGroupsCache = rendererCache.get( this.renderer );
|
|
489
|
-
|
|
490
|
-
if ( bindGroupsCache === undefined ) {
|
|
491
|
-
|
|
492
|
-
bindGroupsCache = new ChainMap();
|
|
493
|
-
|
|
494
|
-
rendererCache.set( this.renderer, bindGroupsCache );
|
|
519
|
+
isOpaque() {
|
|
495
520
|
|
|
496
|
-
|
|
521
|
+
const material = this.material;
|
|
497
522
|
|
|
498
|
-
return
|
|
523
|
+
return material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false;
|
|
499
524
|
|
|
500
525
|
}
|
|
501
526
|
|
|
@@ -536,7 +561,62 @@ class NodeBuilder {
|
|
|
536
561
|
*/
|
|
537
562
|
includes( node ) {
|
|
538
563
|
|
|
539
|
-
return this.nodes.
|
|
564
|
+
return this.nodes.has( node );
|
|
565
|
+
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* Returns the type of the color output based on the renderer's render target.
|
|
570
|
+
*
|
|
571
|
+
* @param {number} [index=0] - The index of the render target texture.
|
|
572
|
+
* @return {string} The type.
|
|
573
|
+
*/
|
|
574
|
+
getOutputType( index = 0 ) {
|
|
575
|
+
|
|
576
|
+
let type = 'vec4';
|
|
577
|
+
|
|
578
|
+
const renderTarget = this.renderer.getRenderTarget();
|
|
579
|
+
|
|
580
|
+
if ( renderTarget !== null ) {
|
|
581
|
+
|
|
582
|
+
const renderTargetType = renderTarget.textures[ index ].type;
|
|
583
|
+
const renderTargetFormat = renderTarget.textures[ index ].format;
|
|
584
|
+
|
|
585
|
+
let typeStr = 'vec';
|
|
586
|
+
|
|
587
|
+
if ( renderTargetType === IntType ) {
|
|
588
|
+
|
|
589
|
+
typeStr = 'ivec';
|
|
590
|
+
|
|
591
|
+
} else if ( renderTargetType === UnsignedIntType ) {
|
|
592
|
+
|
|
593
|
+
typeStr = 'uvec';
|
|
594
|
+
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
if ( renderTargetFormat === RedFormat || renderTargetFormat === RedIntegerFormat ) {
|
|
598
|
+
|
|
599
|
+
if ( renderTargetType === IntType ) type = 'int';
|
|
600
|
+
else if ( renderTargetType === UnsignedIntType ) type = 'uint';
|
|
601
|
+
else type = 'float';
|
|
602
|
+
|
|
603
|
+
} else if ( renderTargetFormat === RGFormat || renderTargetFormat === RGIntegerFormat ) {
|
|
604
|
+
|
|
605
|
+
type = `${ typeStr }2`;
|
|
606
|
+
|
|
607
|
+
} else if ( renderTargetFormat === RGBFormat || renderTargetFormat === RGBIntegerFormat ) {
|
|
608
|
+
|
|
609
|
+
type = `${ typeStr }3`;
|
|
610
|
+
|
|
611
|
+
} else {
|
|
612
|
+
|
|
613
|
+
type = `${ typeStr }4`;
|
|
614
|
+
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
return type;
|
|
540
620
|
|
|
541
621
|
}
|
|
542
622
|
|
|
@@ -559,19 +639,21 @@ class NodeBuilder {
|
|
|
559
639
|
*/
|
|
560
640
|
_getBindGroup( groupName, bindings ) {
|
|
561
641
|
|
|
562
|
-
const
|
|
642
|
+
const groupNode = bindings[ 0 ].groupNode;
|
|
563
643
|
|
|
564
|
-
|
|
644
|
+
let sharedGroup = groupNode.shared;
|
|
645
|
+
|
|
646
|
+
if ( sharedGroup ) {
|
|
565
647
|
|
|
566
|
-
|
|
648
|
+
for ( let i = 1; i < bindings.length; i ++ ) {
|
|
567
649
|
|
|
568
|
-
|
|
650
|
+
if ( groupNode !== bindings[ i ].groupNode ) {
|
|
569
651
|
|
|
570
|
-
|
|
652
|
+
sharedGroup = false;
|
|
571
653
|
|
|
572
|
-
|
|
654
|
+
}
|
|
573
655
|
|
|
574
|
-
|
|
656
|
+
}
|
|
575
657
|
|
|
576
658
|
}
|
|
577
659
|
|
|
@@ -581,19 +663,59 @@ class NodeBuilder {
|
|
|
581
663
|
|
|
582
664
|
if ( sharedGroup ) {
|
|
583
665
|
|
|
584
|
-
|
|
666
|
+
let cacheKeyString = '';
|
|
667
|
+
|
|
668
|
+
for ( const binding of bindings ) {
|
|
669
|
+
|
|
670
|
+
if ( binding.isNodeUniformsGroup ) {
|
|
671
|
+
|
|
672
|
+
binding.uniforms.sort( ( a, b ) => a.nodeUniform.node.id - b.nodeUniform.node.id );
|
|
673
|
+
|
|
674
|
+
for ( const uniform of binding.uniforms ) {
|
|
675
|
+
|
|
676
|
+
cacheKeyString += uniform.nodeUniform.node.id;
|
|
677
|
+
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
} else {
|
|
681
|
+
|
|
682
|
+
cacheKeyString += binding.nodeUniform.id;
|
|
683
|
+
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
// TODO: Remove this hack ._currentRenderContext
|
|
689
|
+
|
|
690
|
+
const currentContext = this.renderer._currentRenderContext || this.renderer; // use renderer as fallback until we have a compute context
|
|
691
|
+
|
|
692
|
+
let bindingGroupsCache = _bindingGroupsCache.get( currentContext );
|
|
693
|
+
|
|
694
|
+
if ( bindingGroupsCache === undefined ) {
|
|
695
|
+
|
|
696
|
+
bindingGroupsCache = new Map();
|
|
697
|
+
|
|
698
|
+
_bindingGroupsCache.set( currentContext, bindingGroupsCache );
|
|
699
|
+
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
//
|
|
703
|
+
|
|
704
|
+
const cacheKey = hashString( cacheKeyString );
|
|
705
|
+
|
|
706
|
+
bindGroup = bindingGroupsCache.get( cacheKey );
|
|
585
707
|
|
|
586
708
|
if ( bindGroup === undefined ) {
|
|
587
709
|
|
|
588
|
-
bindGroup = new BindGroup( groupName,
|
|
710
|
+
bindGroup = new BindGroup( groupName, bindings );
|
|
589
711
|
|
|
590
|
-
|
|
712
|
+
bindingGroupsCache.set( cacheKey, bindGroup );
|
|
591
713
|
|
|
592
714
|
}
|
|
593
715
|
|
|
594
716
|
} else {
|
|
595
717
|
|
|
596
|
-
bindGroup = new BindGroup( groupName,
|
|
718
|
+
bindGroup = new BindGroup( groupName, bindings );
|
|
597
719
|
|
|
598
720
|
}
|
|
599
721
|
|
|
@@ -651,7 +773,16 @@ class NodeBuilder {
|
|
|
651
773
|
const uniforms = bindings[ shaderStage ][ groupName ];
|
|
652
774
|
|
|
653
775
|
const groupUniforms = groups[ groupName ] || ( groups[ groupName ] = [] );
|
|
654
|
-
|
|
776
|
+
|
|
777
|
+
for ( const uniform of uniforms ) {
|
|
778
|
+
|
|
779
|
+
if ( groupUniforms.includes( uniform ) === false ) {
|
|
780
|
+
|
|
781
|
+
groupUniforms.push( uniform );
|
|
782
|
+
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
}
|
|
655
786
|
|
|
656
787
|
}
|
|
657
788
|
|
|
@@ -691,8 +822,6 @@ class NodeBuilder {
|
|
|
691
822
|
const bindingGroup = bindingsGroups[ i ];
|
|
692
823
|
this.bindingsIndexes[ bindingGroup.name ].group = i;
|
|
693
824
|
|
|
694
|
-
bindingGroup.index = i;
|
|
695
|
-
|
|
696
825
|
}
|
|
697
826
|
|
|
698
827
|
}
|
|
@@ -717,9 +846,9 @@ class NodeBuilder {
|
|
|
717
846
|
*/
|
|
718
847
|
addNode( node ) {
|
|
719
848
|
|
|
720
|
-
if ( this.nodes.
|
|
849
|
+
if ( this.nodes.has( node ) === false ) {
|
|
721
850
|
|
|
722
|
-
this.nodes.
|
|
851
|
+
this.nodes.add( node );
|
|
723
852
|
|
|
724
853
|
this.setHashNode( node, node.getHash( this ) );
|
|
725
854
|
|
|
@@ -736,9 +865,12 @@ class NodeBuilder {
|
|
|
736
865
|
*/
|
|
737
866
|
addSequentialNode( node ) {
|
|
738
867
|
|
|
739
|
-
|
|
868
|
+
const updateBeforeType = node.getUpdateBeforeType();
|
|
869
|
+
const updateAfterType = node.getUpdateAfterType();
|
|
740
870
|
|
|
741
|
-
|
|
871
|
+
if ( updateBeforeType !== NodeUpdateType.NONE || updateAfterType !== NodeUpdateType.NONE ) {
|
|
872
|
+
|
|
873
|
+
this.sequentialNodes.add( node );
|
|
742
874
|
|
|
743
875
|
}
|
|
744
876
|
|
|
@@ -807,6 +939,17 @@ class NodeBuilder {
|
|
|
807
939
|
|
|
808
940
|
}
|
|
809
941
|
|
|
942
|
+
/**
|
|
943
|
+
* Returns the maximum number of bytes available for uniform buffers.
|
|
944
|
+
*
|
|
945
|
+
* @return {number} The maximum number of bytes available for uniform buffers.
|
|
946
|
+
*/
|
|
947
|
+
getUniformBufferLimit() {
|
|
948
|
+
|
|
949
|
+
return this.renderer.backend.capabilities.getUniformBufferLimit();
|
|
950
|
+
|
|
951
|
+
}
|
|
952
|
+
|
|
810
953
|
/**
|
|
811
954
|
* Adds the given node to the internal node chain.
|
|
812
955
|
* This is used to check recursive calls in node-graph.
|
|
@@ -838,7 +981,7 @@ class NodeBuilder {
|
|
|
838
981
|
|
|
839
982
|
if ( lastChain !== node ) {
|
|
840
983
|
|
|
841
|
-
throw new Error( 'NodeBuilder: Invalid node chaining!' );
|
|
984
|
+
throw new Error( 'THREE.NodeBuilder: Invalid node chaining!' );
|
|
842
985
|
|
|
843
986
|
}
|
|
844
987
|
|
|
@@ -951,8 +1094,13 @@ class NodeBuilder {
|
|
|
951
1094
|
const context = { ...this.context };
|
|
952
1095
|
|
|
953
1096
|
delete context.material;
|
|
1097
|
+
delete context.getUV;
|
|
1098
|
+
delete context.getOutput;
|
|
1099
|
+
delete context.getTextureLevel;
|
|
1100
|
+
delete context.getAO;
|
|
1101
|
+
delete context.getShadow;
|
|
954
1102
|
|
|
955
|
-
return
|
|
1103
|
+
return context;
|
|
956
1104
|
|
|
957
1105
|
}
|
|
958
1106
|
|
|
@@ -1082,6 +1230,17 @@ class NodeBuilder {
|
|
|
1082
1230
|
|
|
1083
1231
|
}
|
|
1084
1232
|
|
|
1233
|
+
/**
|
|
1234
|
+
* Returns whether the builder is currently in an assignment context.
|
|
1235
|
+
*
|
|
1236
|
+
* @return {boolean} Whether the builder is in an assignment context.
|
|
1237
|
+
*/
|
|
1238
|
+
isContextAssign() {
|
|
1239
|
+
|
|
1240
|
+
return this.context.assign === true;
|
|
1241
|
+
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1085
1244
|
/**
|
|
1086
1245
|
* Calling this method increases the usage count for the given node by one.
|
|
1087
1246
|
*
|
|
@@ -1093,10 +1252,50 @@ class NodeBuilder {
|
|
|
1093
1252
|
const nodeData = this.getDataFromNode( node );
|
|
1094
1253
|
nodeData.usageCount = nodeData.usageCount === undefined ? 1 : nodeData.usageCount + 1;
|
|
1095
1254
|
|
|
1255
|
+
if ( this.isContextAssign() ) {
|
|
1256
|
+
|
|
1257
|
+
nodeData.writeUsageCount = nodeData.writeUsageCount === undefined ? 1 : nodeData.writeUsageCount + 1;
|
|
1258
|
+
|
|
1259
|
+
} else {
|
|
1260
|
+
|
|
1261
|
+
nodeData.readUsageCount = nodeData.readUsageCount === undefined ? 1 : nodeData.readUsageCount + 1;
|
|
1262
|
+
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1096
1265
|
return nodeData.usageCount;
|
|
1097
1266
|
|
|
1098
1267
|
}
|
|
1099
1268
|
|
|
1269
|
+
/**
|
|
1270
|
+
* Returns whether the given node has been written to in any shader stage.
|
|
1271
|
+
*
|
|
1272
|
+
* @param {Node} node - The node to check.
|
|
1273
|
+
* @return {boolean} Whether the node has been written to.
|
|
1274
|
+
*/
|
|
1275
|
+
hasWriteUsage( node ) {
|
|
1276
|
+
|
|
1277
|
+
const refNode = node.getShared( this );
|
|
1278
|
+
const cache = refNode.isGlobal( this ) ? this.globalCache : this.cache;
|
|
1279
|
+
const nodeData = cache.getData( refNode );
|
|
1280
|
+
|
|
1281
|
+
if ( nodeData !== undefined ) {
|
|
1282
|
+
|
|
1283
|
+
for ( const shaderStage in nodeData ) {
|
|
1284
|
+
|
|
1285
|
+
if ( _checkWriteUsage( nodeData[ shaderStage ] ) ) {
|
|
1286
|
+
|
|
1287
|
+
return true;
|
|
1288
|
+
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
return false;
|
|
1296
|
+
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1100
1299
|
/**
|
|
1101
1300
|
* Generates a texture sample shader string for the given texture data.
|
|
1102
1301
|
*
|
|
@@ -1224,17 +1423,17 @@ class NodeBuilder {
|
|
|
1224
1423
|
if ( type === 'float' || type === 'int' || type === 'uint' ) value = 0;
|
|
1225
1424
|
else if ( type === 'bool' ) value = false;
|
|
1226
1425
|
else if ( type === 'color' ) value = new Color();
|
|
1227
|
-
else if ( type === 'vec2' ) value = new Vector2();
|
|
1228
|
-
else if ( type === 'vec3' ) value = new Vector3();
|
|
1229
|
-
else if ( type === 'vec4' ) value = new Vector4();
|
|
1426
|
+
else if ( type === 'vec2' || type === 'uvec2' || type === 'ivec2' ) value = new Vector2();
|
|
1427
|
+
else if ( type === 'vec3' || type === 'uvec3' || type === 'ivec3' ) value = new Vector3();
|
|
1428
|
+
else if ( type === 'vec4' || type === 'uvec4' || type === 'ivec4' ) value = new Vector4();
|
|
1230
1429
|
|
|
1231
1430
|
}
|
|
1232
1431
|
|
|
1233
|
-
if ( type === 'float' ) return
|
|
1432
|
+
if ( type === 'float' ) return _toFloat( value );
|
|
1234
1433
|
if ( type === 'int' ) return `${ Math.round( value ) }`;
|
|
1235
1434
|
if ( type === 'uint' ) return value >= 0 ? `${ Math.round( value ) }u` : '0u';
|
|
1236
1435
|
if ( type === 'bool' ) return value ? 'true' : 'false';
|
|
1237
|
-
if ( type === 'color' ) return `${ this.getType( 'vec3' ) }( ${
|
|
1436
|
+
if ( type === 'color' ) return `${ this.getType( 'vec3' ) }( ${ _toFloat( value.r ) }, ${ _toFloat( value.g ) }, ${ _toFloat( value.b ) } )`;
|
|
1238
1437
|
|
|
1239
1438
|
const typeLength = this.getTypeLength( type );
|
|
1240
1439
|
|
|
@@ -1264,7 +1463,7 @@ class NodeBuilder {
|
|
|
1264
1463
|
|
|
1265
1464
|
}
|
|
1266
1465
|
|
|
1267
|
-
throw new Error( `NodeBuilder: Type '${type}' not found in generate constant attempt.` );
|
|
1466
|
+
throw new Error( `THREE.NodeBuilder: Type '${type}' not found in generate constant attempt.` );
|
|
1268
1467
|
|
|
1269
1468
|
}
|
|
1270
1469
|
|
|
@@ -1402,12 +1601,10 @@ class NodeBuilder {
|
|
|
1402
1601
|
|
|
1403
1602
|
const type = texture.type;
|
|
1404
1603
|
|
|
1405
|
-
if ( texture.
|
|
1604
|
+
if ( texture.isDepthTexture === true ) return 'float';
|
|
1406
1605
|
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
}
|
|
1606
|
+
if ( type === IntType ) return 'int';
|
|
1607
|
+
if ( type === UnsignedIntType ) return 'uint';
|
|
1411
1608
|
|
|
1412
1609
|
return 'float';
|
|
1413
1610
|
|
|
@@ -1633,7 +1830,7 @@ class NodeBuilder {
|
|
|
1633
1830
|
|
|
1634
1831
|
} else {
|
|
1635
1832
|
|
|
1636
|
-
throw new Error( 'NodeBuilder: Invalid active stack removal.' );
|
|
1833
|
+
throw new Error( 'THREE.NodeBuilder: Invalid active stack removal.' );
|
|
1637
1834
|
|
|
1638
1835
|
}
|
|
1639
1836
|
|
|
@@ -1732,6 +1929,8 @@ class NodeBuilder {
|
|
|
1732
1929
|
|
|
1733
1930
|
let data = nodeData[ shaderStage ];
|
|
1734
1931
|
|
|
1932
|
+
if ( this.subBuildLayers.length === 0 ) return data;
|
|
1933
|
+
|
|
1735
1934
|
const subBuilds = nodeData.any ? nodeData.any.subBuilds : null;
|
|
1736
1935
|
const subBuild = this.getClosestSubBuild( subBuilds );
|
|
1737
1936
|
|
|
@@ -1773,11 +1972,12 @@ class NodeBuilder {
|
|
|
1773
1972
|
*
|
|
1774
1973
|
* @param {BufferAttributeNode} node - The buffer attribute node.
|
|
1775
1974
|
* @param {string} type - The node type.
|
|
1975
|
+
* @param {?string} [name=null] - The name of the buffer attribute.
|
|
1776
1976
|
* @return {NodeAttribute} The node attribute.
|
|
1777
1977
|
*/
|
|
1778
|
-
getBufferAttributeFromNode( node, type ) {
|
|
1978
|
+
getBufferAttributeFromNode( node, type, name = null ) {
|
|
1779
1979
|
|
|
1780
|
-
const nodeData = this.getDataFromNode( node );
|
|
1980
|
+
const nodeData = this.getDataFromNode( node, 'vertex' );
|
|
1781
1981
|
|
|
1782
1982
|
let bufferAttribute = nodeData.bufferAttribute;
|
|
1783
1983
|
|
|
@@ -1785,7 +1985,13 @@ class NodeBuilder {
|
|
|
1785
1985
|
|
|
1786
1986
|
const index = this.uniforms.index ++;
|
|
1787
1987
|
|
|
1788
|
-
|
|
1988
|
+
if ( name === null ) {
|
|
1989
|
+
|
|
1990
|
+
name = 'nodeAttribute' + index;
|
|
1991
|
+
|
|
1992
|
+
}
|
|
1993
|
+
|
|
1994
|
+
bufferAttribute = new NodeAttribute( name, type, node );
|
|
1789
1995
|
|
|
1790
1996
|
this.bufferAttributes.push( bufferAttribute );
|
|
1791
1997
|
|
|
@@ -2062,28 +2268,29 @@ class NodeBuilder {
|
|
|
2062
2268
|
const shaderStage = this.shaderStage;
|
|
2063
2269
|
const declarations = this.declarations[ shaderStage ] || ( this.declarations[ shaderStage ] = {} );
|
|
2064
2270
|
|
|
2065
|
-
const
|
|
2271
|
+
const baseName = node.name;
|
|
2066
2272
|
|
|
2273
|
+
let name = baseName;
|
|
2274
|
+
let property = this.getPropertyName( node );
|
|
2067
2275
|
let index = 1;
|
|
2068
|
-
let name = property;
|
|
2069
2276
|
|
|
2070
2277
|
// Automatically renames the property if the name is already in use.
|
|
2071
2278
|
|
|
2072
|
-
while ( declarations[
|
|
2279
|
+
while ( declarations[ property ] !== undefined ) {
|
|
2073
2280
|
|
|
2074
|
-
name =
|
|
2281
|
+
name = baseName + '_' + index ++;
|
|
2282
|
+
node.name = name;
|
|
2283
|
+
property = this.getPropertyName( node );
|
|
2075
2284
|
|
|
2076
2285
|
}
|
|
2077
2286
|
|
|
2078
|
-
if (
|
|
2079
|
-
|
|
2080
|
-
node.name = name;
|
|
2287
|
+
if ( name !== baseName ) {
|
|
2081
2288
|
|
|
2082
|
-
warn( `TSL: Declaration name '${
|
|
2289
|
+
warn( `TSL: Declaration name '${ baseName }' of '${ node.type }' already in use. Renamed to '${ name }'.` );
|
|
2083
2290
|
|
|
2084
2291
|
}
|
|
2085
2292
|
|
|
2086
|
-
declarations[
|
|
2293
|
+
declarations[ property ] = node;
|
|
2087
2294
|
|
|
2088
2295
|
}
|
|
2089
2296
|
|
|
@@ -2305,15 +2512,34 @@ class NodeBuilder {
|
|
|
2305
2512
|
*/
|
|
2306
2513
|
buildFunctionNode( shaderNode ) {
|
|
2307
2514
|
|
|
2308
|
-
const
|
|
2515
|
+
const backend = this.renderer.backend;
|
|
2309
2516
|
|
|
2310
|
-
|
|
2517
|
+
let cache = _functionNodeCache.get( backend );
|
|
2518
|
+
|
|
2519
|
+
if ( cache === undefined ) {
|
|
2520
|
+
|
|
2521
|
+
cache = new WeakMap();
|
|
2522
|
+
_functionNodeCache.set( backend, cache );
|
|
2523
|
+
|
|
2524
|
+
}
|
|
2311
2525
|
|
|
2312
|
-
|
|
2526
|
+
let fn = cache.get( shaderNode );
|
|
2313
2527
|
|
|
2314
|
-
fn
|
|
2528
|
+
if ( fn === undefined ) {
|
|
2315
2529
|
|
|
2316
|
-
|
|
2530
|
+
fn = new FunctionNode();
|
|
2531
|
+
|
|
2532
|
+
const previous = this.currentFunctionNode;
|
|
2533
|
+
|
|
2534
|
+
this.currentFunctionNode = fn;
|
|
2535
|
+
|
|
2536
|
+
fn.code = this.buildFunctionCode( shaderNode );
|
|
2537
|
+
|
|
2538
|
+
this.currentFunctionNode = previous;
|
|
2539
|
+
|
|
2540
|
+
cache.set( shaderNode, fn );
|
|
2541
|
+
|
|
2542
|
+
}
|
|
2317
2543
|
|
|
2318
2544
|
return fn;
|
|
2319
2545
|
|
|
@@ -2606,11 +2832,12 @@ class NodeBuilder {
|
|
|
2606
2832
|
* Returns the variable definitions as a shader string for the given shader stage.
|
|
2607
2833
|
*
|
|
2608
2834
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
2835
|
+
* @param {boolean} [global=false] - Whether the variables are global.
|
|
2609
2836
|
* @return {string} The variable code section.
|
|
2610
2837
|
*/
|
|
2611
|
-
getVars( shaderStage ) {
|
|
2838
|
+
getVars( shaderStage, global = false ) {
|
|
2612
2839
|
|
|
2613
|
-
|
|
2840
|
+
const snippets = [];
|
|
2614
2841
|
|
|
2615
2842
|
const vars = this.vars[ shaderStage ];
|
|
2616
2843
|
|
|
@@ -2618,13 +2845,13 @@ class NodeBuilder {
|
|
|
2618
2845
|
|
|
2619
2846
|
for ( const variable of vars ) {
|
|
2620
2847
|
|
|
2621
|
-
|
|
2848
|
+
snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );
|
|
2622
2849
|
|
|
2623
2850
|
}
|
|
2624
2851
|
|
|
2625
2852
|
}
|
|
2626
2853
|
|
|
2627
|
-
return
|
|
2854
|
+
return snippets.join( global ? '\n' : '\n\t' );
|
|
2628
2855
|
|
|
2629
2856
|
}
|
|
2630
2857
|
|
|
@@ -2873,13 +3100,41 @@ class NodeBuilder {
|
|
|
2873
3100
|
}
|
|
2874
3101
|
|
|
2875
3102
|
/**
|
|
2876
|
-
*
|
|
2877
|
-
*
|
|
2878
|
-
* @return {NodeBuilder} A reference to this node builder.
|
|
3103
|
+
* Prebuild the node builder.
|
|
2879
3104
|
*/
|
|
2880
|
-
|
|
3105
|
+
prebuild() {
|
|
3106
|
+
|
|
3107
|
+
const { object, renderer, material } = this;
|
|
3108
|
+
|
|
3109
|
+
// < renderer.contextNode >
|
|
3110
|
+
|
|
3111
|
+
if ( renderer.contextNode.isContextNode === true ) {
|
|
3112
|
+
|
|
3113
|
+
this.context = { ...this.context, ...renderer.contextNode.getFlowContextData() };
|
|
3114
|
+
|
|
3115
|
+
} else {
|
|
3116
|
+
|
|
3117
|
+
error( 'NodeBuilder: "renderer.contextNode" must be an instance of `context()`.' );
|
|
3118
|
+
|
|
3119
|
+
}
|
|
3120
|
+
|
|
3121
|
+
// < material.contextNode >
|
|
3122
|
+
|
|
3123
|
+
if ( material && material.contextNode ) {
|
|
3124
|
+
|
|
3125
|
+
if ( material.contextNode.isContextNode === true ) {
|
|
3126
|
+
|
|
3127
|
+
this.context = { ...this.context, ...material.contextNode.getFlowContextData() };
|
|
3128
|
+
|
|
3129
|
+
} else {
|
|
2881
3130
|
|
|
2882
|
-
|
|
3131
|
+
error( 'NodeBuilder: "material.contextNode" must be an instance of `context()`.' );
|
|
3132
|
+
|
|
3133
|
+
}
|
|
3134
|
+
|
|
3135
|
+
}
|
|
3136
|
+
|
|
3137
|
+
// < nodeMaterial >
|
|
2883
3138
|
|
|
2884
3139
|
if ( material !== null ) {
|
|
2885
3140
|
|
|
@@ -2887,7 +3142,7 @@ class NodeBuilder {
|
|
|
2887
3142
|
|
|
2888
3143
|
if ( nodeMaterial === null ) {
|
|
2889
3144
|
|
|
2890
|
-
error( `
|
|
3145
|
+
error( `NodeBuilder: Material "${ material.type }" is not compatible.` );
|
|
2891
3146
|
|
|
2892
3147
|
nodeMaterial = new NodeMaterial();
|
|
2893
3148
|
|
|
@@ -2901,6 +3156,17 @@ class NodeBuilder {
|
|
|
2901
3156
|
|
|
2902
3157
|
}
|
|
2903
3158
|
|
|
3159
|
+
}
|
|
3160
|
+
|
|
3161
|
+
/**
|
|
3162
|
+
* Central build method which controls the build for the given object.
|
|
3163
|
+
*
|
|
3164
|
+
* @return {NodeBuilder} A reference to this node builder.
|
|
3165
|
+
*/
|
|
3166
|
+
build() {
|
|
3167
|
+
|
|
3168
|
+
this.prebuild();
|
|
3169
|
+
|
|
2904
3170
|
// setup() -> stage 1: create possible new nodes and/or return an output reference node
|
|
2905
3171
|
// analyze() -> stage 2: analyze nodes to possible optimization and validation
|
|
2906
3172
|
// generate() -> stage 3: generate shader
|
|
@@ -2909,9 +3175,9 @@ class NodeBuilder {
|
|
|
2909
3175
|
|
|
2910
3176
|
this.setBuildStage( buildStage );
|
|
2911
3177
|
|
|
2912
|
-
if ( this.context.
|
|
3178
|
+
if ( this.context.position && this.context.position.isNode ) {
|
|
2913
3179
|
|
|
2914
|
-
this.flowNodeFromShaderStage( 'vertex', this.context.
|
|
3180
|
+
this.flowNodeFromShaderStage( 'vertex', this.context.position );
|
|
2915
3181
|
|
|
2916
3182
|
}
|
|
2917
3183
|
|
|
@@ -2951,6 +3217,89 @@ class NodeBuilder {
|
|
|
2951
3217
|
|
|
2952
3218
|
}
|
|
2953
3219
|
|
|
3220
|
+
/**
|
|
3221
|
+
* Async version of build() that yields to main thread between shader stages.
|
|
3222
|
+
* Use this in compileAsync() to prevent blocking the main thread.
|
|
3223
|
+
*
|
|
3224
|
+
* @return {Promise<NodeBuilder>} A promise that resolves to this node builder.
|
|
3225
|
+
*/
|
|
3226
|
+
async buildAsync() {
|
|
3227
|
+
|
|
3228
|
+
this.prebuild();
|
|
3229
|
+
|
|
3230
|
+
// setup() -> stage 1: create possible new nodes and/or return an output reference node
|
|
3231
|
+
// analyze() -> stage 2: analyze nodes to possible optimization and validation
|
|
3232
|
+
// generate() -> stage 3: generate shader
|
|
3233
|
+
|
|
3234
|
+
for ( const buildStage of defaultBuildStages ) {
|
|
3235
|
+
|
|
3236
|
+
this.setBuildStage( buildStage );
|
|
3237
|
+
|
|
3238
|
+
if ( this.context.position && this.context.position.isNode ) {
|
|
3239
|
+
|
|
3240
|
+
this.flowNodeFromShaderStage( 'vertex', this.context.position );
|
|
3241
|
+
|
|
3242
|
+
}
|
|
3243
|
+
|
|
3244
|
+
for ( const shaderStage of shaderStages ) {
|
|
3245
|
+
|
|
3246
|
+
this.setShaderStage( shaderStage );
|
|
3247
|
+
|
|
3248
|
+
const flowNodes = this.flowNodes[ shaderStage ];
|
|
3249
|
+
|
|
3250
|
+
for ( const node of flowNodes ) {
|
|
3251
|
+
|
|
3252
|
+
if ( buildStage === 'generate' ) {
|
|
3253
|
+
|
|
3254
|
+
this.flowNode( node );
|
|
3255
|
+
|
|
3256
|
+
} else {
|
|
3257
|
+
|
|
3258
|
+
node.build( this );
|
|
3259
|
+
|
|
3260
|
+
}
|
|
3261
|
+
|
|
3262
|
+
}
|
|
3263
|
+
|
|
3264
|
+
// Yield to main thread after each shader stage to prevent blocking
|
|
3265
|
+
await yieldToMain();
|
|
3266
|
+
|
|
3267
|
+
}
|
|
3268
|
+
|
|
3269
|
+
}
|
|
3270
|
+
|
|
3271
|
+
this.setBuildStage( null );
|
|
3272
|
+
this.setShaderStage( null );
|
|
3273
|
+
|
|
3274
|
+
// stage 4: build code for a specific output
|
|
3275
|
+
|
|
3276
|
+
this.buildCode();
|
|
3277
|
+
this.buildUpdateNodes();
|
|
3278
|
+
|
|
3279
|
+
return this;
|
|
3280
|
+
|
|
3281
|
+
}
|
|
3282
|
+
|
|
3283
|
+
/**
|
|
3284
|
+
* Returns shared data object for the given node.
|
|
3285
|
+
*
|
|
3286
|
+
* @param {Node} node - The node to get shared data from.
|
|
3287
|
+
* @return {Object} The shared data.
|
|
3288
|
+
*/
|
|
3289
|
+
getSharedDataFromNode( node ) {
|
|
3290
|
+
|
|
3291
|
+
let data = sharedNodeData.get( node );
|
|
3292
|
+
|
|
3293
|
+
if ( data === undefined ) {
|
|
3294
|
+
|
|
3295
|
+
data = {};
|
|
3296
|
+
|
|
3297
|
+
}
|
|
3298
|
+
|
|
3299
|
+
return data;
|
|
3300
|
+
|
|
3301
|
+
}
|
|
3302
|
+
|
|
2954
3303
|
/**
|
|
2955
3304
|
* Returns a uniform representation which is later used for UBO generation and rendering.
|
|
2956
3305
|
*
|
|
@@ -2960,16 +3309,31 @@ class NodeBuilder {
|
|
|
2960
3309
|
*/
|
|
2961
3310
|
getNodeUniform( uniformNode, type ) {
|
|
2962
3311
|
|
|
2963
|
-
|
|
2964
|
-
if ( type === 'vec2' || type === 'ivec2' || type === 'uvec2' ) return new Vector2NodeUniform( uniformNode );
|
|
2965
|
-
if ( type === 'vec3' || type === 'ivec3' || type === 'uvec3' ) return new Vector3NodeUniform( uniformNode );
|
|
2966
|
-
if ( type === 'vec4' || type === 'ivec4' || type === 'uvec4' ) return new Vector4NodeUniform( uniformNode );
|
|
2967
|
-
if ( type === 'color' ) return new ColorNodeUniform( uniformNode );
|
|
2968
|
-
if ( type === 'mat2' ) return new Matrix2NodeUniform( uniformNode );
|
|
2969
|
-
if ( type === 'mat3' ) return new Matrix3NodeUniform( uniformNode );
|
|
2970
|
-
if ( type === 'mat4' ) return new Matrix4NodeUniform( uniformNode );
|
|
3312
|
+
const nodeData = this.getSharedDataFromNode( uniformNode );
|
|
2971
3313
|
|
|
2972
|
-
|
|
3314
|
+
let node = nodeData.cache;
|
|
3315
|
+
|
|
3316
|
+
if ( node === undefined ) {
|
|
3317
|
+
|
|
3318
|
+
if ( type === 'float' || type === 'int' || type === 'uint' ) node = new NumberNodeUniform( uniformNode );
|
|
3319
|
+
else if ( type === 'vec2' || type === 'ivec2' || type === 'uvec2' ) node = new Vector2NodeUniform( uniformNode );
|
|
3320
|
+
else if ( type === 'vec3' || type === 'ivec3' || type === 'uvec3' ) node = new Vector3NodeUniform( uniformNode );
|
|
3321
|
+
else if ( type === 'vec4' || type === 'ivec4' || type === 'uvec4' ) node = new Vector4NodeUniform( uniformNode );
|
|
3322
|
+
else if ( type === 'color' ) node = new ColorNodeUniform( uniformNode );
|
|
3323
|
+
else if ( type === 'mat2' ) node = new Matrix2NodeUniform( uniformNode );
|
|
3324
|
+
else if ( type === 'mat3' ) node = new Matrix3NodeUniform( uniformNode );
|
|
3325
|
+
else if ( type === 'mat4' ) node = new Matrix4NodeUniform( uniformNode );
|
|
3326
|
+
else {
|
|
3327
|
+
|
|
3328
|
+
throw new Error( `THREE.NodeBuilder: Uniform "${ type }" not implemented.` );
|
|
3329
|
+
|
|
3330
|
+
}
|
|
3331
|
+
|
|
3332
|
+
nodeData.cache = node;
|
|
3333
|
+
|
|
3334
|
+
}
|
|
3335
|
+
|
|
3336
|
+
return node;
|
|
2973
3337
|
|
|
2974
3338
|
}
|
|
2975
3339
|
|
|
@@ -3076,6 +3440,20 @@ class NodeBuilder {
|
|
|
3076
3440
|
|
|
3077
3441
|
}
|
|
3078
3442
|
|
|
3443
|
+
/**
|
|
3444
|
+
* Returns `true` if data from the previous frame are required. Relevant
|
|
3445
|
+
* when computing motion vectors with {@link VelocityNode}.
|
|
3446
|
+
*
|
|
3447
|
+
* @return {boolean} Whether data from the previous frame are required or not.
|
|
3448
|
+
*/
|
|
3449
|
+
needsPreviousData() {
|
|
3450
|
+
|
|
3451
|
+
const mrt = this.renderer.getMRT();
|
|
3452
|
+
|
|
3453
|
+
return ( mrt && mrt.has( 'velocity' ) ) || getDataFromObject( this.object ).useVelocity === true;
|
|
3454
|
+
|
|
3455
|
+
}
|
|
3456
|
+
|
|
3079
3457
|
}
|
|
3080
3458
|
|
|
3081
3459
|
export default NodeBuilder;
|