super-three 0.179.0 → 0.184.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 +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- 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 +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- 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/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- 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/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- 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 +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -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 +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- 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 +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- 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 +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- 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/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- 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 +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- 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/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- 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 +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- 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/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- 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 +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- 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 +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.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 +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -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 +221 -190
- 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 +1 -1
- 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 +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- 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 +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- 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 +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- 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 +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- 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/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- 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/src/nodes/accessors/SceneNode.js +0 -144
- 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 -30
- 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,19 +20,23 @@ 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 } from '../../constants.js';
|
|
26
|
+
import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter, NormalBlending } 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';
|
|
33
|
+
import { warn, error, yieldToMain } from '../../utils.js';
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
let _id = 0;
|
|
36
|
+
|
|
37
|
+
const _bindingGroupsCache = new WeakMap();
|
|
38
|
+
|
|
39
|
+
const sharedNodeData = new WeakMap();
|
|
36
40
|
|
|
37
41
|
const typeFromArray = new Map( [
|
|
38
42
|
[ Int8Array, 'int' ],
|
|
@@ -135,7 +139,10 @@ class NodeBuilder {
|
|
|
135
139
|
this.nodes = [];
|
|
136
140
|
|
|
137
141
|
/**
|
|
138
|
-
* A list of all sequential
|
|
142
|
+
* A list of all nodes the builder is processing in sequential order.
|
|
143
|
+
*
|
|
144
|
+
* This is used to determine the update order of nodes, which is important for
|
|
145
|
+
* {@link NodeUpdateType#UPDATE_BEFORE} and {@link NodeUpdateType#UPDATE_AFTER}.
|
|
139
146
|
*
|
|
140
147
|
* @type {Array<Node>}
|
|
141
148
|
*/
|
|
@@ -259,6 +266,13 @@ class NodeBuilder {
|
|
|
259
266
|
*/
|
|
260
267
|
this.structs = { vertex: [], fragment: [], compute: [], index: 0 };
|
|
261
268
|
|
|
269
|
+
/**
|
|
270
|
+
* This dictionary holds the types of the builder.
|
|
271
|
+
*
|
|
272
|
+
* @type {Object}
|
|
273
|
+
*/
|
|
274
|
+
this.types = { vertex: [], fragment: [], compute: [], index: 0 };
|
|
275
|
+
|
|
262
276
|
/**
|
|
263
277
|
* This dictionary holds the bindings for each shader stage.
|
|
264
278
|
*
|
|
@@ -427,13 +441,13 @@ class NodeBuilder {
|
|
|
427
441
|
*/
|
|
428
442
|
this.subBuildLayers = [];
|
|
429
443
|
|
|
444
|
+
|
|
430
445
|
/**
|
|
431
|
-
* The
|
|
446
|
+
* The active stack nodes.
|
|
432
447
|
*
|
|
433
|
-
* @type {
|
|
434
|
-
* @default null
|
|
448
|
+
* @type {Array<StackNode>}
|
|
435
449
|
*/
|
|
436
|
-
this.
|
|
450
|
+
this.activeStacks = [];
|
|
437
451
|
|
|
438
452
|
/**
|
|
439
453
|
* The current sub-build TSL function(Fn).
|
|
@@ -443,26 +457,39 @@ class NodeBuilder {
|
|
|
443
457
|
*/
|
|
444
458
|
this.subBuildFn = null;
|
|
445
459
|
|
|
460
|
+
/**
|
|
461
|
+
* The current TSL function(Fn) call node.
|
|
462
|
+
*
|
|
463
|
+
* @type {?Node}
|
|
464
|
+
* @default null
|
|
465
|
+
*/
|
|
466
|
+
this.fnCall = null;
|
|
467
|
+
|
|
468
|
+
Object.defineProperty( this, 'id', { value: _id ++ } );
|
|
469
|
+
|
|
446
470
|
}
|
|
447
471
|
|
|
448
472
|
/**
|
|
449
|
-
*
|
|
473
|
+
* Whether the material is using flat shading or not.
|
|
450
474
|
*
|
|
451
|
-
* @
|
|
475
|
+
* @returns {boolean} Whether the material is using flat shading or not.
|
|
452
476
|
*/
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
let bindGroupsCache = rendererCache.get( this.renderer );
|
|
477
|
+
isFlatShading() {
|
|
456
478
|
|
|
457
|
-
|
|
479
|
+
return this.material.flatShading === true || this.geometry.hasAttribute( 'normal' ) === false;
|
|
458
480
|
|
|
459
|
-
|
|
481
|
+
}
|
|
460
482
|
|
|
461
|
-
|
|
483
|
+
/**
|
|
484
|
+
* Whether the material is opaque or not.
|
|
485
|
+
*
|
|
486
|
+
* @return {boolean} Whether the material is opaque or not.
|
|
487
|
+
*/
|
|
488
|
+
isOpaque() {
|
|
462
489
|
|
|
463
|
-
|
|
490
|
+
const material = this.material;
|
|
464
491
|
|
|
465
|
-
return
|
|
492
|
+
return material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false;
|
|
466
493
|
|
|
467
494
|
}
|
|
468
495
|
|
|
@@ -526,19 +553,21 @@ class NodeBuilder {
|
|
|
526
553
|
*/
|
|
527
554
|
_getBindGroup( groupName, bindings ) {
|
|
528
555
|
|
|
529
|
-
const
|
|
556
|
+
const groupNode = bindings[ 0 ].groupNode;
|
|
530
557
|
|
|
531
|
-
|
|
558
|
+
let sharedGroup = groupNode.shared;
|
|
532
559
|
|
|
533
|
-
|
|
560
|
+
if ( sharedGroup ) {
|
|
561
|
+
|
|
562
|
+
for ( let i = 1; i < bindings.length; i ++ ) {
|
|
534
563
|
|
|
535
|
-
|
|
564
|
+
if ( groupNode !== bindings[ i ].groupNode ) {
|
|
536
565
|
|
|
537
|
-
|
|
566
|
+
sharedGroup = false;
|
|
538
567
|
|
|
539
|
-
|
|
568
|
+
}
|
|
540
569
|
|
|
541
|
-
|
|
570
|
+
}
|
|
542
571
|
|
|
543
572
|
}
|
|
544
573
|
|
|
@@ -548,19 +577,59 @@ class NodeBuilder {
|
|
|
548
577
|
|
|
549
578
|
if ( sharedGroup ) {
|
|
550
579
|
|
|
551
|
-
|
|
580
|
+
let cacheKeyString = '';
|
|
581
|
+
|
|
582
|
+
for ( const binding of bindings ) {
|
|
583
|
+
|
|
584
|
+
if ( binding.isNodeUniformsGroup ) {
|
|
585
|
+
|
|
586
|
+
binding.uniforms.sort( ( a, b ) => a.nodeUniform.node.id - b.nodeUniform.node.id );
|
|
587
|
+
|
|
588
|
+
for ( const uniform of binding.uniforms ) {
|
|
589
|
+
|
|
590
|
+
cacheKeyString += uniform.nodeUniform.node.id;
|
|
591
|
+
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
} else {
|
|
595
|
+
|
|
596
|
+
cacheKeyString += binding.nodeUniform.id;
|
|
597
|
+
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
// TODO: Remove this hack ._currentRenderContext
|
|
603
|
+
|
|
604
|
+
const currentContext = this.renderer._currentRenderContext || this.renderer; // use renderer as fallback until we have a compute context
|
|
605
|
+
|
|
606
|
+
let bindingGroupsCache = _bindingGroupsCache.get( currentContext );
|
|
607
|
+
|
|
608
|
+
if ( bindingGroupsCache === undefined ) {
|
|
609
|
+
|
|
610
|
+
bindingGroupsCache = new Map();
|
|
611
|
+
|
|
612
|
+
_bindingGroupsCache.set( currentContext, bindingGroupsCache );
|
|
613
|
+
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
//
|
|
617
|
+
|
|
618
|
+
const cacheKey = hashString( cacheKeyString );
|
|
619
|
+
|
|
620
|
+
bindGroup = bindingGroupsCache.get( cacheKey );
|
|
552
621
|
|
|
553
622
|
if ( bindGroup === undefined ) {
|
|
554
623
|
|
|
555
|
-
bindGroup = new BindGroup( groupName,
|
|
624
|
+
bindGroup = new BindGroup( groupName, bindings );
|
|
556
625
|
|
|
557
|
-
|
|
626
|
+
bindingGroupsCache.set( cacheKey, bindGroup );
|
|
558
627
|
|
|
559
628
|
}
|
|
560
629
|
|
|
561
630
|
} else {
|
|
562
631
|
|
|
563
|
-
bindGroup = new BindGroup( groupName,
|
|
632
|
+
bindGroup = new BindGroup( groupName, bindings );
|
|
564
633
|
|
|
565
634
|
}
|
|
566
635
|
|
|
@@ -618,7 +687,16 @@ class NodeBuilder {
|
|
|
618
687
|
const uniforms = bindings[ shaderStage ][ groupName ];
|
|
619
688
|
|
|
620
689
|
const groupUniforms = groups[ groupName ] || ( groups[ groupName ] = [] );
|
|
621
|
-
|
|
690
|
+
|
|
691
|
+
for ( const uniform of uniforms ) {
|
|
692
|
+
|
|
693
|
+
if ( groupUniforms.includes( uniform ) === false ) {
|
|
694
|
+
|
|
695
|
+
groupUniforms.push( uniform );
|
|
696
|
+
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
}
|
|
622
700
|
|
|
623
701
|
}
|
|
624
702
|
|
|
@@ -658,8 +736,6 @@ class NodeBuilder {
|
|
|
658
736
|
const bindingGroup = bindingsGroups[ i ];
|
|
659
737
|
this.bindingsIndexes[ bindingGroup.name ].group = i;
|
|
660
738
|
|
|
661
|
-
bindingGroup.index = i;
|
|
662
|
-
|
|
663
739
|
}
|
|
664
740
|
|
|
665
741
|
}
|
|
@@ -703,9 +779,16 @@ class NodeBuilder {
|
|
|
703
779
|
*/
|
|
704
780
|
addSequentialNode( node ) {
|
|
705
781
|
|
|
706
|
-
|
|
782
|
+
const updateBeforeType = node.getUpdateBeforeType();
|
|
783
|
+
const updateAfterType = node.getUpdateAfterType();
|
|
784
|
+
|
|
785
|
+
if ( updateBeforeType !== NodeUpdateType.NONE || updateAfterType !== NodeUpdateType.NONE ) {
|
|
707
786
|
|
|
708
|
-
this.sequentialNodes.
|
|
787
|
+
if ( this.sequentialNodes.includes( node ) === false ) {
|
|
788
|
+
|
|
789
|
+
this.sequentialNodes.push( node );
|
|
790
|
+
|
|
791
|
+
}
|
|
709
792
|
|
|
710
793
|
}
|
|
711
794
|
|
|
@@ -722,7 +805,7 @@ class NodeBuilder {
|
|
|
722
805
|
|
|
723
806
|
if ( updateType !== NodeUpdateType.NONE ) {
|
|
724
807
|
|
|
725
|
-
this.updateNodes.push( node
|
|
808
|
+
this.updateNodes.push( node );
|
|
726
809
|
|
|
727
810
|
}
|
|
728
811
|
|
|
@@ -735,13 +818,13 @@ class NodeBuilder {
|
|
|
735
818
|
|
|
736
819
|
if ( updateBeforeType !== NodeUpdateType.NONE ) {
|
|
737
820
|
|
|
738
|
-
this.updateBeforeNodes.push( node
|
|
821
|
+
this.updateBeforeNodes.push( node );
|
|
739
822
|
|
|
740
823
|
}
|
|
741
824
|
|
|
742
825
|
if ( updateAfterType !== NodeUpdateType.NONE ) {
|
|
743
826
|
|
|
744
|
-
this.updateAfterNodes.push( node
|
|
827
|
+
this.updateAfterNodes.push( node );
|
|
745
828
|
|
|
746
829
|
}
|
|
747
830
|
|
|
@@ -774,6 +857,17 @@ class NodeBuilder {
|
|
|
774
857
|
|
|
775
858
|
}
|
|
776
859
|
|
|
860
|
+
/**
|
|
861
|
+
* Returns the maximum number of bytes available for uniform buffers.
|
|
862
|
+
*
|
|
863
|
+
* @return {number} The maximum number of bytes available for uniform buffers.
|
|
864
|
+
*/
|
|
865
|
+
getUniformBufferLimit() {
|
|
866
|
+
|
|
867
|
+
return this.renderer.backend.capabilities.getUniformBufferLimit();
|
|
868
|
+
|
|
869
|
+
}
|
|
870
|
+
|
|
777
871
|
/**
|
|
778
872
|
* Adds the given node to the internal node chain.
|
|
779
873
|
* This is used to check recursive calls in node-graph.
|
|
@@ -785,7 +879,7 @@ class NodeBuilder {
|
|
|
785
879
|
/*
|
|
786
880
|
if ( this.chaining.indexOf( node ) !== - 1 ) {
|
|
787
881
|
|
|
788
|
-
|
|
882
|
+
warn( 'Recursive node: ', node );
|
|
789
883
|
|
|
790
884
|
}
|
|
791
885
|
*/
|
|
@@ -826,6 +920,22 @@ class NodeBuilder {
|
|
|
826
920
|
|
|
827
921
|
}
|
|
828
922
|
|
|
923
|
+
/**
|
|
924
|
+
* Returns the native snippet for a ternary operation. E.g. GLSL would output
|
|
925
|
+
* a ternary op as `cond ? x : y` whereas WGSL would output it as `select(y, x, cond)`
|
|
926
|
+
*
|
|
927
|
+
* @abstract
|
|
928
|
+
* @param {string} condSnippet - The condition determining which expression gets resolved.
|
|
929
|
+
* @param {string} ifSnippet - The expression to resolve to if the condition is true.
|
|
930
|
+
* @param {string} elseSnippet - The expression to resolve to if the condition is false.
|
|
931
|
+
* @return {string} The resolved method name.
|
|
932
|
+
*/
|
|
933
|
+
getTernary( /* condSnippet, ifSnippet, elseSnippet*/ ) {
|
|
934
|
+
|
|
935
|
+
return null;
|
|
936
|
+
|
|
937
|
+
}
|
|
938
|
+
|
|
829
939
|
/**
|
|
830
940
|
* Returns a node for the given hash, see {@link NodeBuilder#setHashNode}.
|
|
831
941
|
*
|
|
@@ -875,6 +985,22 @@ class NodeBuilder {
|
|
|
875
985
|
|
|
876
986
|
}
|
|
877
987
|
|
|
988
|
+
/**
|
|
989
|
+
* Adds context data to the builder's current context.
|
|
990
|
+
*
|
|
991
|
+
* @param {Object} context - The context to add.
|
|
992
|
+
* @return {Object} The previous context.
|
|
993
|
+
*/
|
|
994
|
+
addContext( context ) {
|
|
995
|
+
|
|
996
|
+
const previousContext = this.getContext();
|
|
997
|
+
|
|
998
|
+
this.setContext( { ...this.context, ...context } );
|
|
999
|
+
|
|
1000
|
+
return previousContext;
|
|
1001
|
+
|
|
1002
|
+
}
|
|
1003
|
+
|
|
878
1004
|
/**
|
|
879
1005
|
* Gets a context used in shader construction that can be shared across different materials.
|
|
880
1006
|
* This is necessary since the renderer cache can reuse shaders generated in one material and use them in another.
|
|
@@ -886,8 +1012,13 @@ class NodeBuilder {
|
|
|
886
1012
|
const context = { ...this.context };
|
|
887
1013
|
|
|
888
1014
|
delete context.material;
|
|
1015
|
+
delete context.getUV;
|
|
1016
|
+
delete context.getOutput;
|
|
1017
|
+
delete context.getTextureLevel;
|
|
1018
|
+
delete context.getAO;
|
|
1019
|
+
delete context.getShadow;
|
|
889
1020
|
|
|
890
|
-
return
|
|
1021
|
+
return context;
|
|
891
1022
|
|
|
892
1023
|
}
|
|
893
1024
|
|
|
@@ -950,19 +1081,20 @@ class NodeBuilder {
|
|
|
950
1081
|
*/
|
|
951
1082
|
getVertexIndex() {
|
|
952
1083
|
|
|
953
|
-
|
|
1084
|
+
warn( 'Abstract function.' );
|
|
954
1085
|
|
|
955
1086
|
}
|
|
956
1087
|
|
|
957
1088
|
/**
|
|
958
|
-
*
|
|
1089
|
+
* Contextually returns either the vertex stage instance index builtin
|
|
1090
|
+
* or the linearized index of an compute invocation within a grid of workgroups.
|
|
959
1091
|
*
|
|
960
1092
|
* @abstract
|
|
961
1093
|
* @return {string} The instanceIndex shader string.
|
|
962
1094
|
*/
|
|
963
1095
|
getInstanceIndex() {
|
|
964
1096
|
|
|
965
|
-
|
|
1097
|
+
warn( 'Abstract function.' );
|
|
966
1098
|
|
|
967
1099
|
}
|
|
968
1100
|
|
|
@@ -975,7 +1107,7 @@ class NodeBuilder {
|
|
|
975
1107
|
*/
|
|
976
1108
|
getDrawIndex() {
|
|
977
1109
|
|
|
978
|
-
|
|
1110
|
+
warn( 'Abstract function.' );
|
|
979
1111
|
|
|
980
1112
|
}
|
|
981
1113
|
|
|
@@ -987,7 +1119,7 @@ class NodeBuilder {
|
|
|
987
1119
|
*/
|
|
988
1120
|
getFrontFacing() {
|
|
989
1121
|
|
|
990
|
-
|
|
1122
|
+
warn( 'Abstract function.' );
|
|
991
1123
|
|
|
992
1124
|
}
|
|
993
1125
|
|
|
@@ -999,7 +1131,7 @@ class NodeBuilder {
|
|
|
999
1131
|
*/
|
|
1000
1132
|
getFragCoord() {
|
|
1001
1133
|
|
|
1002
|
-
|
|
1134
|
+
warn( 'Abstract function.' );
|
|
1003
1135
|
|
|
1004
1136
|
}
|
|
1005
1137
|
|
|
@@ -1042,7 +1174,7 @@ class NodeBuilder {
|
|
|
1042
1174
|
*/
|
|
1043
1175
|
generateTexture( /* texture, textureProperty, uvSnippet */ ) {
|
|
1044
1176
|
|
|
1045
|
-
|
|
1177
|
+
warn( 'Abstract function.' );
|
|
1046
1178
|
|
|
1047
1179
|
}
|
|
1048
1180
|
|
|
@@ -1059,7 +1191,7 @@ class NodeBuilder {
|
|
|
1059
1191
|
*/
|
|
1060
1192
|
generateTextureLod( /* texture, textureProperty, uvSnippet, depthSnippet, levelSnippet */ ) {
|
|
1061
1193
|
|
|
1062
|
-
|
|
1194
|
+
warn( 'Abstract function.' );
|
|
1063
1195
|
|
|
1064
1196
|
}
|
|
1065
1197
|
|
|
@@ -1144,7 +1276,6 @@ class NodeBuilder {
|
|
|
1144
1276
|
|
|
1145
1277
|
}
|
|
1146
1278
|
|
|
1147
|
-
|
|
1148
1279
|
/**
|
|
1149
1280
|
* Generates the shader string for the given type and value.
|
|
1150
1281
|
*
|
|
@@ -1159,9 +1290,9 @@ class NodeBuilder {
|
|
|
1159
1290
|
if ( type === 'float' || type === 'int' || type === 'uint' ) value = 0;
|
|
1160
1291
|
else if ( type === 'bool' ) value = false;
|
|
1161
1292
|
else if ( type === 'color' ) value = new Color();
|
|
1162
|
-
else if ( type === 'vec2' ) value = new Vector2();
|
|
1163
|
-
else if ( type === 'vec3' ) value = new Vector3();
|
|
1164
|
-
else if ( type === 'vec4' ) value = new Vector4();
|
|
1293
|
+
else if ( type === 'vec2' || type === 'uvec2' || type === 'ivec2' ) value = new Vector2();
|
|
1294
|
+
else if ( type === 'vec3' || type === 'uvec3' || type === 'ivec3' ) value = new Vector3();
|
|
1295
|
+
else if ( type === 'vec4' || type === 'uvec4' || type === 'ivec4' ) value = new Vector4();
|
|
1165
1296
|
|
|
1166
1297
|
}
|
|
1167
1298
|
|
|
@@ -1544,6 +1675,58 @@ class NodeBuilder {
|
|
|
1544
1675
|
|
|
1545
1676
|
}
|
|
1546
1677
|
|
|
1678
|
+
/**
|
|
1679
|
+
* Adds an active stack to the internal stack.
|
|
1680
|
+
*
|
|
1681
|
+
* @param {StackNode} stack - The stack node to add.
|
|
1682
|
+
*/
|
|
1683
|
+
setActiveStack( stack ) {
|
|
1684
|
+
|
|
1685
|
+
this.activeStacks.push( stack );
|
|
1686
|
+
|
|
1687
|
+
}
|
|
1688
|
+
|
|
1689
|
+
/**
|
|
1690
|
+
* Removes the active stack from the internal stack.
|
|
1691
|
+
*
|
|
1692
|
+
* @param {StackNode} stack - The stack node to remove.
|
|
1693
|
+
*/
|
|
1694
|
+
removeActiveStack( stack ) {
|
|
1695
|
+
|
|
1696
|
+
if ( this.activeStacks[ this.activeStacks.length - 1 ] === stack ) {
|
|
1697
|
+
|
|
1698
|
+
this.activeStacks.pop();
|
|
1699
|
+
|
|
1700
|
+
} else {
|
|
1701
|
+
|
|
1702
|
+
throw new Error( 'NodeBuilder: Invalid active stack removal.' );
|
|
1703
|
+
|
|
1704
|
+
}
|
|
1705
|
+
|
|
1706
|
+
}
|
|
1707
|
+
|
|
1708
|
+
/**
|
|
1709
|
+
* Returns the active stack.
|
|
1710
|
+
*
|
|
1711
|
+
* @return {StackNode} The active stack.
|
|
1712
|
+
*/
|
|
1713
|
+
getActiveStack() {
|
|
1714
|
+
|
|
1715
|
+
return this.activeStacks[ this.activeStacks.length - 1 ];
|
|
1716
|
+
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1719
|
+
/**
|
|
1720
|
+
* Returns the base stack.
|
|
1721
|
+
*
|
|
1722
|
+
* @return {StackNode} The base stack.
|
|
1723
|
+
*/
|
|
1724
|
+
getBaseStack() {
|
|
1725
|
+
|
|
1726
|
+
return this.activeStacks[ 0 ];
|
|
1727
|
+
|
|
1728
|
+
}
|
|
1729
|
+
|
|
1547
1730
|
/**
|
|
1548
1731
|
* Adds a stack node to the internal stack.
|
|
1549
1732
|
*
|
|
@@ -1553,7 +1736,9 @@ class NodeBuilder {
|
|
|
1553
1736
|
|
|
1554
1737
|
this.stack = stack( this.stack );
|
|
1555
1738
|
|
|
1556
|
-
|
|
1739
|
+
const previousStack = getCurrentStack();
|
|
1740
|
+
|
|
1741
|
+
this.stacks.push( previousStack );
|
|
1557
1742
|
setCurrentStack( this.stack );
|
|
1558
1743
|
|
|
1559
1744
|
return this.stack;
|
|
@@ -1568,6 +1753,14 @@ class NodeBuilder {
|
|
|
1568
1753
|
removeStack() {
|
|
1569
1754
|
|
|
1570
1755
|
const lastStack = this.stack;
|
|
1756
|
+
|
|
1757
|
+
for ( const node of lastStack.nodes ) {
|
|
1758
|
+
|
|
1759
|
+
const nodeData = this.getDataFromNode( node );
|
|
1760
|
+
nodeData.stack = lastStack;
|
|
1761
|
+
|
|
1762
|
+
}
|
|
1763
|
+
|
|
1571
1764
|
this.stack = lastStack.parent;
|
|
1572
1765
|
|
|
1573
1766
|
setCurrentStack( this.stacks.pop() );
|
|
@@ -1624,6 +1817,11 @@ class NodeBuilder {
|
|
|
1624
1817
|
/**
|
|
1625
1818
|
* Returns the properties for the given node and shader stage.
|
|
1626
1819
|
*
|
|
1820
|
+
* Properties are typically used within a build stage to reference a node's
|
|
1821
|
+
* child node or nodes manually assigned to the properties in a separate build stage.
|
|
1822
|
+
* A typical usage pattern for defining nodes manually would be assigning dependency nodes
|
|
1823
|
+
* to the current node's properties in the setup stage and building those properties in the generate stage.
|
|
1824
|
+
*
|
|
1627
1825
|
* @param {Node} node - The node to get the properties for.
|
|
1628
1826
|
* @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage='any'] - The shader stage.
|
|
1629
1827
|
* @return {Object} The node properties.
|
|
@@ -1645,7 +1843,7 @@ class NodeBuilder {
|
|
|
1645
1843
|
*/
|
|
1646
1844
|
getBufferAttributeFromNode( node, type ) {
|
|
1647
1845
|
|
|
1648
|
-
const nodeData = this.getDataFromNode( node );
|
|
1846
|
+
const nodeData = this.getDataFromNode( node, 'vertex' );
|
|
1649
1847
|
|
|
1650
1848
|
let bufferAttribute = nodeData.bufferAttribute;
|
|
1651
1849
|
|
|
@@ -1665,6 +1863,20 @@ class NodeBuilder {
|
|
|
1665
1863
|
|
|
1666
1864
|
}
|
|
1667
1865
|
|
|
1866
|
+
/**
|
|
1867
|
+
* Returns an instance of {@link StructType} for the given struct name and shader stage
|
|
1868
|
+
* or null if not found.
|
|
1869
|
+
*
|
|
1870
|
+
* @param {string} name - The name of the struct.
|
|
1871
|
+
* @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.
|
|
1872
|
+
* @return {?StructType} The struct type or null if not found.
|
|
1873
|
+
*/
|
|
1874
|
+
getStructTypeNode( name, shaderStage = this.shaderStage ) {
|
|
1875
|
+
|
|
1876
|
+
return this.types[ shaderStage ][ name ] || null;
|
|
1877
|
+
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1668
1880
|
/**
|
|
1669
1881
|
* Returns an instance of {@link StructType} for the given output struct node.
|
|
1670
1882
|
*
|
|
@@ -1689,6 +1901,7 @@ class NodeBuilder {
|
|
|
1689
1901
|
structType = new StructType( name, membersLayout );
|
|
1690
1902
|
|
|
1691
1903
|
this.structs[ shaderStage ].push( structType );
|
|
1904
|
+
this.types[ shaderStage ][ name ] = node;
|
|
1692
1905
|
|
|
1693
1906
|
nodeData.structType = structType;
|
|
1694
1907
|
|
|
@@ -1932,7 +2145,7 @@ class NodeBuilder {
|
|
|
1932
2145
|
|
|
1933
2146
|
node.name = name;
|
|
1934
2147
|
|
|
1935
|
-
|
|
2148
|
+
warn( `TSL: Declaration name '${ property }' of '${ node.type }' already in use. Renamed to '${ name }'.` );
|
|
1936
2149
|
|
|
1937
2150
|
}
|
|
1938
2151
|
|
|
@@ -2219,10 +2432,16 @@ class NodeBuilder {
|
|
|
2219
2432
|
/**
|
|
2220
2433
|
* Executes the node in a specific build stage.
|
|
2221
2434
|
*
|
|
2435
|
+
* This function can be used to arbitrarily execute the specified build stage
|
|
2436
|
+
* outside of the standard build process. For instance, if a node's type depends
|
|
2437
|
+
* on properties created by the 'setup' stage, then flowBuildStage(node, 'setup')
|
|
2438
|
+
* can be used to execute the setup build stage and access its generated nodes
|
|
2439
|
+
* before the standard build process begins.
|
|
2440
|
+
*
|
|
2222
2441
|
* @param {Node} node - The node to execute.
|
|
2223
2442
|
* @param {string} buildStage - The build stage to execute the node in.
|
|
2224
|
-
* @param {Node|string
|
|
2225
|
-
* @return {Node|string
|
|
2443
|
+
* @param {?(Node|string)} [output=null] - Expected output type. For example 'vec3'.
|
|
2444
|
+
* @return {?(Node|string)} The result of the node build.
|
|
2226
2445
|
*/
|
|
2227
2446
|
flowBuildStage( node, buildStage, output = null ) {
|
|
2228
2447
|
|
|
@@ -2309,7 +2528,7 @@ class NodeBuilder {
|
|
|
2309
2528
|
*/
|
|
2310
2529
|
buildFunctionCode( /* shaderNode */ ) {
|
|
2311
2530
|
|
|
2312
|
-
|
|
2531
|
+
warn( 'Abstract function.' );
|
|
2313
2532
|
|
|
2314
2533
|
}
|
|
2315
2534
|
|
|
@@ -2348,7 +2567,7 @@ class NodeBuilder {
|
|
|
2348
2567
|
* @param {Node} node - The node to execute.
|
|
2349
2568
|
* @param {?string} output - Expected output type. For example 'vec3'.
|
|
2350
2569
|
* @param {?string} propertyName - The property name to assign the result.
|
|
2351
|
-
* @return {Object|Node
|
|
2570
|
+
* @return {?(Object|Node)} The code flow or node.build() result.
|
|
2352
2571
|
*/
|
|
2353
2572
|
flowNodeFromShaderStage( shaderStage, node, output = null, propertyName = null ) {
|
|
2354
2573
|
|
|
@@ -2418,7 +2637,7 @@ class NodeBuilder {
|
|
|
2418
2637
|
*/
|
|
2419
2638
|
getAttributes( /*shaderStage*/ ) {
|
|
2420
2639
|
|
|
2421
|
-
|
|
2640
|
+
warn( 'Abstract function.' );
|
|
2422
2641
|
|
|
2423
2642
|
}
|
|
2424
2643
|
|
|
@@ -2431,7 +2650,7 @@ class NodeBuilder {
|
|
|
2431
2650
|
*/
|
|
2432
2651
|
getVaryings( /*shaderStage*/ ) {
|
|
2433
2652
|
|
|
2434
|
-
|
|
2653
|
+
warn( 'Abstract function.' );
|
|
2435
2654
|
|
|
2436
2655
|
}
|
|
2437
2656
|
|
|
@@ -2453,11 +2672,12 @@ class NodeBuilder {
|
|
|
2453
2672
|
* Returns the variable definitions as a shader string for the given shader stage.
|
|
2454
2673
|
*
|
|
2455
2674
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
2675
|
+
* @param {boolean} [global=false] - Whether the variables are global.
|
|
2456
2676
|
* @return {string} The variable code section.
|
|
2457
2677
|
*/
|
|
2458
|
-
getVars( shaderStage ) {
|
|
2678
|
+
getVars( shaderStage, global = false ) {
|
|
2459
2679
|
|
|
2460
|
-
|
|
2680
|
+
const snippets = [];
|
|
2461
2681
|
|
|
2462
2682
|
const vars = this.vars[ shaderStage ];
|
|
2463
2683
|
|
|
@@ -2465,13 +2685,13 @@ class NodeBuilder {
|
|
|
2465
2685
|
|
|
2466
2686
|
for ( const variable of vars ) {
|
|
2467
2687
|
|
|
2468
|
-
|
|
2688
|
+
snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );
|
|
2469
2689
|
|
|
2470
2690
|
}
|
|
2471
2691
|
|
|
2472
2692
|
}
|
|
2473
2693
|
|
|
2474
|
-
return
|
|
2694
|
+
return snippets.join( global ? '\n' : '\n\t' );
|
|
2475
2695
|
|
|
2476
2696
|
}
|
|
2477
2697
|
|
|
@@ -2484,7 +2704,7 @@ class NodeBuilder {
|
|
|
2484
2704
|
*/
|
|
2485
2705
|
getUniforms( /*shaderStage*/ ) {
|
|
2486
2706
|
|
|
2487
|
-
|
|
2707
|
+
warn( 'Abstract function.' );
|
|
2488
2708
|
|
|
2489
2709
|
}
|
|
2490
2710
|
|
|
@@ -2576,7 +2796,7 @@ class NodeBuilder {
|
|
|
2576
2796
|
*/
|
|
2577
2797
|
buildCode() {
|
|
2578
2798
|
|
|
2579
|
-
|
|
2799
|
+
warn( 'Abstract function.' );
|
|
2580
2800
|
|
|
2581
2801
|
}
|
|
2582
2802
|
|
|
@@ -2616,7 +2836,7 @@ class NodeBuilder {
|
|
|
2616
2836
|
/**
|
|
2617
2837
|
* Returns the closest sub-build layer for the given data.
|
|
2618
2838
|
*
|
|
2619
|
-
* @param {Node|Set
|
|
2839
|
+
* @param {Node|Set<string>|Array<string>} data - The data to get the closest sub-build layer from.
|
|
2620
2840
|
* @return {?string} The closest sub-build name or null if none found.
|
|
2621
2841
|
*/
|
|
2622
2842
|
getClosestSubBuild( data ) {
|
|
@@ -2720,13 +2940,41 @@ class NodeBuilder {
|
|
|
2720
2940
|
}
|
|
2721
2941
|
|
|
2722
2942
|
/**
|
|
2723
|
-
*
|
|
2724
|
-
*
|
|
2725
|
-
* @return {NodeBuilder} A reference to this node builder.
|
|
2943
|
+
* Prebuild the node builder.
|
|
2726
2944
|
*/
|
|
2727
|
-
|
|
2945
|
+
prebuild() {
|
|
2946
|
+
|
|
2947
|
+
const { object, renderer, material } = this;
|
|
2948
|
+
|
|
2949
|
+
// < renderer.contextNode >
|
|
2950
|
+
|
|
2951
|
+
if ( renderer.contextNode.isContextNode === true ) {
|
|
2952
|
+
|
|
2953
|
+
this.context = { ...this.context, ...renderer.contextNode.getFlowContextData() };
|
|
2954
|
+
|
|
2955
|
+
} else {
|
|
2956
|
+
|
|
2957
|
+
error( 'NodeBuilder: "renderer.contextNode" must be an instance of `context()`.' );
|
|
2958
|
+
|
|
2959
|
+
}
|
|
2960
|
+
|
|
2961
|
+
// < material.contextNode >
|
|
2962
|
+
|
|
2963
|
+
if ( material && material.contextNode ) {
|
|
2964
|
+
|
|
2965
|
+
if ( material.contextNode.isContextNode === true ) {
|
|
2966
|
+
|
|
2967
|
+
this.context = { ...this.context, ...material.contextNode.getFlowContextData() };
|
|
2968
|
+
|
|
2969
|
+
} else {
|
|
2970
|
+
|
|
2971
|
+
error( 'NodeBuilder: "material.contextNode" must be an instance of `context()`.' );
|
|
2728
2972
|
|
|
2729
|
-
|
|
2973
|
+
}
|
|
2974
|
+
|
|
2975
|
+
}
|
|
2976
|
+
|
|
2977
|
+
// < nodeMaterial >
|
|
2730
2978
|
|
|
2731
2979
|
if ( material !== null ) {
|
|
2732
2980
|
|
|
@@ -2734,7 +2982,7 @@ class NodeBuilder {
|
|
|
2734
2982
|
|
|
2735
2983
|
if ( nodeMaterial === null ) {
|
|
2736
2984
|
|
|
2737
|
-
|
|
2985
|
+
error( `NodeBuilder: Material "${ material.type }" is not compatible.` );
|
|
2738
2986
|
|
|
2739
2987
|
nodeMaterial = new NodeMaterial();
|
|
2740
2988
|
|
|
@@ -2748,6 +2996,17 @@ class NodeBuilder {
|
|
|
2748
2996
|
|
|
2749
2997
|
}
|
|
2750
2998
|
|
|
2999
|
+
}
|
|
3000
|
+
|
|
3001
|
+
/**
|
|
3002
|
+
* Central build method which controls the build for the given object.
|
|
3003
|
+
*
|
|
3004
|
+
* @return {NodeBuilder} A reference to this node builder.
|
|
3005
|
+
*/
|
|
3006
|
+
build() {
|
|
3007
|
+
|
|
3008
|
+
this.prebuild();
|
|
3009
|
+
|
|
2751
3010
|
// setup() -> stage 1: create possible new nodes and/or return an output reference node
|
|
2752
3011
|
// analyze() -> stage 2: analyze nodes to possible optimization and validation
|
|
2753
3012
|
// generate() -> stage 3: generate shader
|
|
@@ -2756,9 +3015,9 @@ class NodeBuilder {
|
|
|
2756
3015
|
|
|
2757
3016
|
this.setBuildStage( buildStage );
|
|
2758
3017
|
|
|
2759
|
-
if ( this.context.
|
|
3018
|
+
if ( this.context.position && this.context.position.isNode ) {
|
|
2760
3019
|
|
|
2761
|
-
this.flowNodeFromShaderStage( 'vertex', this.context.
|
|
3020
|
+
this.flowNodeFromShaderStage( 'vertex', this.context.position );
|
|
2762
3021
|
|
|
2763
3022
|
}
|
|
2764
3023
|
|
|
@@ -2798,6 +3057,89 @@ class NodeBuilder {
|
|
|
2798
3057
|
|
|
2799
3058
|
}
|
|
2800
3059
|
|
|
3060
|
+
/**
|
|
3061
|
+
* Async version of build() that yields to main thread between shader stages.
|
|
3062
|
+
* Use this in compileAsync() to prevent blocking the main thread.
|
|
3063
|
+
*
|
|
3064
|
+
* @return {Promise<NodeBuilder>} A promise that resolves to this node builder.
|
|
3065
|
+
*/
|
|
3066
|
+
async buildAsync() {
|
|
3067
|
+
|
|
3068
|
+
this.prebuild();
|
|
3069
|
+
|
|
3070
|
+
// setup() -> stage 1: create possible new nodes and/or return an output reference node
|
|
3071
|
+
// analyze() -> stage 2: analyze nodes to possible optimization and validation
|
|
3072
|
+
// generate() -> stage 3: generate shader
|
|
3073
|
+
|
|
3074
|
+
for ( const buildStage of defaultBuildStages ) {
|
|
3075
|
+
|
|
3076
|
+
this.setBuildStage( buildStage );
|
|
3077
|
+
|
|
3078
|
+
if ( this.context.position && this.context.position.isNode ) {
|
|
3079
|
+
|
|
3080
|
+
this.flowNodeFromShaderStage( 'vertex', this.context.position );
|
|
3081
|
+
|
|
3082
|
+
}
|
|
3083
|
+
|
|
3084
|
+
for ( const shaderStage of shaderStages ) {
|
|
3085
|
+
|
|
3086
|
+
this.setShaderStage( shaderStage );
|
|
3087
|
+
|
|
3088
|
+
const flowNodes = this.flowNodes[ shaderStage ];
|
|
3089
|
+
|
|
3090
|
+
for ( const node of flowNodes ) {
|
|
3091
|
+
|
|
3092
|
+
if ( buildStage === 'generate' ) {
|
|
3093
|
+
|
|
3094
|
+
this.flowNode( node );
|
|
3095
|
+
|
|
3096
|
+
} else {
|
|
3097
|
+
|
|
3098
|
+
node.build( this );
|
|
3099
|
+
|
|
3100
|
+
}
|
|
3101
|
+
|
|
3102
|
+
}
|
|
3103
|
+
|
|
3104
|
+
// Yield to main thread after each shader stage to prevent blocking
|
|
3105
|
+
await yieldToMain();
|
|
3106
|
+
|
|
3107
|
+
}
|
|
3108
|
+
|
|
3109
|
+
}
|
|
3110
|
+
|
|
3111
|
+
this.setBuildStage( null );
|
|
3112
|
+
this.setShaderStage( null );
|
|
3113
|
+
|
|
3114
|
+
// stage 4: build code for a specific output
|
|
3115
|
+
|
|
3116
|
+
this.buildCode();
|
|
3117
|
+
this.buildUpdateNodes();
|
|
3118
|
+
|
|
3119
|
+
return this;
|
|
3120
|
+
|
|
3121
|
+
}
|
|
3122
|
+
|
|
3123
|
+
/**
|
|
3124
|
+
* Returns shared data object for the given node.
|
|
3125
|
+
*
|
|
3126
|
+
* @param {Node} node - The node to get shared data from.
|
|
3127
|
+
* @return {Object} The shared data.
|
|
3128
|
+
*/
|
|
3129
|
+
getSharedDataFromNode( node ) {
|
|
3130
|
+
|
|
3131
|
+
let data = sharedNodeData.get( node );
|
|
3132
|
+
|
|
3133
|
+
if ( data === undefined ) {
|
|
3134
|
+
|
|
3135
|
+
data = {};
|
|
3136
|
+
|
|
3137
|
+
}
|
|
3138
|
+
|
|
3139
|
+
return data;
|
|
3140
|
+
|
|
3141
|
+
}
|
|
3142
|
+
|
|
2801
3143
|
/**
|
|
2802
3144
|
* Returns a uniform representation which is later used for UBO generation and rendering.
|
|
2803
3145
|
*
|
|
@@ -2807,16 +3149,31 @@ class NodeBuilder {
|
|
|
2807
3149
|
*/
|
|
2808
3150
|
getNodeUniform( uniformNode, type ) {
|
|
2809
3151
|
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
-
|
|
2814
|
-
if (
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
|
|
3152
|
+
const nodeData = this.getSharedDataFromNode( uniformNode );
|
|
3153
|
+
|
|
3154
|
+
let node = nodeData.cache;
|
|
3155
|
+
|
|
3156
|
+
if ( node === undefined ) {
|
|
3157
|
+
|
|
3158
|
+
if ( type === 'float' || type === 'int' || type === 'uint' ) node = new NumberNodeUniform( uniformNode );
|
|
3159
|
+
else if ( type === 'vec2' || type === 'ivec2' || type === 'uvec2' ) node = new Vector2NodeUniform( uniformNode );
|
|
3160
|
+
else if ( type === 'vec3' || type === 'ivec3' || type === 'uvec3' ) node = new Vector3NodeUniform( uniformNode );
|
|
3161
|
+
else if ( type === 'vec4' || type === 'ivec4' || type === 'uvec4' ) node = new Vector4NodeUniform( uniformNode );
|
|
3162
|
+
else if ( type === 'color' ) node = new ColorNodeUniform( uniformNode );
|
|
3163
|
+
else if ( type === 'mat2' ) node = new Matrix2NodeUniform( uniformNode );
|
|
3164
|
+
else if ( type === 'mat3' ) node = new Matrix3NodeUniform( uniformNode );
|
|
3165
|
+
else if ( type === 'mat4' ) node = new Matrix4NodeUniform( uniformNode );
|
|
3166
|
+
else {
|
|
3167
|
+
|
|
3168
|
+
throw new Error( `Uniform "${ type }" not implemented.` );
|
|
3169
|
+
|
|
3170
|
+
}
|
|
3171
|
+
|
|
3172
|
+
nodeData.cache = node;
|
|
2818
3173
|
|
|
2819
|
-
|
|
3174
|
+
}
|
|
3175
|
+
|
|
3176
|
+
return node;
|
|
2820
3177
|
|
|
2821
3178
|
}
|
|
2822
3179
|
|
|
@@ -2924,9 +3281,18 @@ class NodeBuilder {
|
|
|
2924
3281
|
}
|
|
2925
3282
|
|
|
2926
3283
|
/**
|
|
2927
|
-
*
|
|
3284
|
+
* Returns `true` if data from the previous frame are required. Relevant
|
|
3285
|
+
* when computing motion vectors with {@link VelocityNode}.
|
|
3286
|
+
*
|
|
3287
|
+
* @return {boolean} Whether data from the previous frame are required or not.
|
|
2928
3288
|
*/
|
|
2929
|
-
|
|
3289
|
+
needsPreviousData() {
|
|
3290
|
+
|
|
3291
|
+
const mrt = this.renderer.getMRT();
|
|
3292
|
+
|
|
3293
|
+
return ( mrt && mrt.has( 'velocity' ) ) || getDataFromObject( this.object ).useVelocity === true;
|
|
3294
|
+
|
|
3295
|
+
}
|
|
2930
3296
|
|
|
2931
3297
|
}
|
|
2932
3298
|
|