super-three 0.181.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 +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- 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 +34 -2
- 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/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- 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/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- 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 +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- 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 +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- 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/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- 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 +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- 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 +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- 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/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 +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/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -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/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/WaterMesh.js +5 -7
- 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/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/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- 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/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- 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 +1 -1
- 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 +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- 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 +69 -19
- 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 +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- 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/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/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/utils/BufferGeometryUtils.js +2 -3
- 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 +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- 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 +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- 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/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- 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/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -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 +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 -68
- package/src/nodes/TSL.js +7 -7
- 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 +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- 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 +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- 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 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- 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 +2 -3
- 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 +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- 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 +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- 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/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 +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- 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 +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- 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/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- 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 +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -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/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -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/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- 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 +29 -14
- 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/ChainMap.js +30 -6
- 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 +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- 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/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- 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 +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -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/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- 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 +112 -53
- 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 +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 +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 +3 -0
- 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 +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 +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- 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 +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- 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 +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- 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/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/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 -145
- 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,7 +20,6 @@ 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
|
|
|
@@ -31,11 +30,13 @@ 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
|
+
|
|
39
|
+
const sharedNodeData = new WeakMap();
|
|
39
40
|
|
|
40
41
|
const typeFromArray = new Map( [
|
|
41
42
|
[ Int8Array, 'int' ],
|
|
@@ -138,7 +139,10 @@ class NodeBuilder {
|
|
|
138
139
|
this.nodes = [];
|
|
139
140
|
|
|
140
141
|
/**
|
|
141
|
-
* 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}.
|
|
142
146
|
*
|
|
143
147
|
* @type {Array<Node>}
|
|
144
148
|
*/
|
|
@@ -466,36 +470,26 @@ class NodeBuilder {
|
|
|
466
470
|
}
|
|
467
471
|
|
|
468
472
|
/**
|
|
469
|
-
* Whether the material is
|
|
473
|
+
* Whether the material is using flat shading or not.
|
|
470
474
|
*
|
|
471
|
-
* @
|
|
475
|
+
* @returns {boolean} Whether the material is using flat shading or not.
|
|
472
476
|
*/
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
const material = this.material;
|
|
477
|
+
isFlatShading() {
|
|
476
478
|
|
|
477
|
-
return material.
|
|
479
|
+
return this.material.flatShading === true || this.geometry.hasAttribute( 'normal' ) === false;
|
|
478
480
|
|
|
479
481
|
}
|
|
480
482
|
|
|
481
483
|
/**
|
|
482
|
-
*
|
|
484
|
+
* Whether the material is opaque or not.
|
|
483
485
|
*
|
|
484
|
-
* @return {
|
|
486
|
+
* @return {boolean} Whether the material is opaque or not.
|
|
485
487
|
*/
|
|
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 );
|
|
488
|
+
isOpaque() {
|
|
495
489
|
|
|
496
|
-
|
|
490
|
+
const material = this.material;
|
|
497
491
|
|
|
498
|
-
return
|
|
492
|
+
return material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false;
|
|
499
493
|
|
|
500
494
|
}
|
|
501
495
|
|
|
@@ -559,19 +553,21 @@ class NodeBuilder {
|
|
|
559
553
|
*/
|
|
560
554
|
_getBindGroup( groupName, bindings ) {
|
|
561
555
|
|
|
562
|
-
const
|
|
556
|
+
const groupNode = bindings[ 0 ].groupNode;
|
|
563
557
|
|
|
564
|
-
|
|
558
|
+
let sharedGroup = groupNode.shared;
|
|
559
|
+
|
|
560
|
+
if ( sharedGroup ) {
|
|
565
561
|
|
|
566
|
-
|
|
562
|
+
for ( let i = 1; i < bindings.length; i ++ ) {
|
|
567
563
|
|
|
568
|
-
|
|
564
|
+
if ( groupNode !== bindings[ i ].groupNode ) {
|
|
569
565
|
|
|
570
|
-
|
|
566
|
+
sharedGroup = false;
|
|
571
567
|
|
|
572
|
-
|
|
568
|
+
}
|
|
573
569
|
|
|
574
|
-
|
|
570
|
+
}
|
|
575
571
|
|
|
576
572
|
}
|
|
577
573
|
|
|
@@ -581,19 +577,59 @@ class NodeBuilder {
|
|
|
581
577
|
|
|
582
578
|
if ( sharedGroup ) {
|
|
583
579
|
|
|
584
|
-
|
|
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 );
|
|
585
621
|
|
|
586
622
|
if ( bindGroup === undefined ) {
|
|
587
623
|
|
|
588
|
-
bindGroup = new BindGroup( groupName,
|
|
624
|
+
bindGroup = new BindGroup( groupName, bindings );
|
|
589
625
|
|
|
590
|
-
|
|
626
|
+
bindingGroupsCache.set( cacheKey, bindGroup );
|
|
591
627
|
|
|
592
628
|
}
|
|
593
629
|
|
|
594
630
|
} else {
|
|
595
631
|
|
|
596
|
-
bindGroup = new BindGroup( groupName,
|
|
632
|
+
bindGroup = new BindGroup( groupName, bindings );
|
|
597
633
|
|
|
598
634
|
}
|
|
599
635
|
|
|
@@ -651,7 +687,16 @@ class NodeBuilder {
|
|
|
651
687
|
const uniforms = bindings[ shaderStage ][ groupName ];
|
|
652
688
|
|
|
653
689
|
const groupUniforms = groups[ groupName ] || ( groups[ groupName ] = [] );
|
|
654
|
-
|
|
690
|
+
|
|
691
|
+
for ( const uniform of uniforms ) {
|
|
692
|
+
|
|
693
|
+
if ( groupUniforms.includes( uniform ) === false ) {
|
|
694
|
+
|
|
695
|
+
groupUniforms.push( uniform );
|
|
696
|
+
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
}
|
|
655
700
|
|
|
656
701
|
}
|
|
657
702
|
|
|
@@ -691,8 +736,6 @@ class NodeBuilder {
|
|
|
691
736
|
const bindingGroup = bindingsGroups[ i ];
|
|
692
737
|
this.bindingsIndexes[ bindingGroup.name ].group = i;
|
|
693
738
|
|
|
694
|
-
bindingGroup.index = i;
|
|
695
|
-
|
|
696
739
|
}
|
|
697
740
|
|
|
698
741
|
}
|
|
@@ -736,9 +779,16 @@ class NodeBuilder {
|
|
|
736
779
|
*/
|
|
737
780
|
addSequentialNode( node ) {
|
|
738
781
|
|
|
739
|
-
|
|
782
|
+
const updateBeforeType = node.getUpdateBeforeType();
|
|
783
|
+
const updateAfterType = node.getUpdateAfterType();
|
|
784
|
+
|
|
785
|
+
if ( updateBeforeType !== NodeUpdateType.NONE || updateAfterType !== NodeUpdateType.NONE ) {
|
|
786
|
+
|
|
787
|
+
if ( this.sequentialNodes.includes( node ) === false ) {
|
|
740
788
|
|
|
741
|
-
|
|
789
|
+
this.sequentialNodes.push( node );
|
|
790
|
+
|
|
791
|
+
}
|
|
742
792
|
|
|
743
793
|
}
|
|
744
794
|
|
|
@@ -807,6 +857,17 @@ class NodeBuilder {
|
|
|
807
857
|
|
|
808
858
|
}
|
|
809
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
|
+
|
|
810
871
|
/**
|
|
811
872
|
* Adds the given node to the internal node chain.
|
|
812
873
|
* This is used to check recursive calls in node-graph.
|
|
@@ -951,8 +1012,13 @@ class NodeBuilder {
|
|
|
951
1012
|
const context = { ...this.context };
|
|
952
1013
|
|
|
953
1014
|
delete context.material;
|
|
1015
|
+
delete context.getUV;
|
|
1016
|
+
delete context.getOutput;
|
|
1017
|
+
delete context.getTextureLevel;
|
|
1018
|
+
delete context.getAO;
|
|
1019
|
+
delete context.getShadow;
|
|
954
1020
|
|
|
955
|
-
return
|
|
1021
|
+
return context;
|
|
956
1022
|
|
|
957
1023
|
}
|
|
958
1024
|
|
|
@@ -1224,9 +1290,9 @@ class NodeBuilder {
|
|
|
1224
1290
|
if ( type === 'float' || type === 'int' || type === 'uint' ) value = 0;
|
|
1225
1291
|
else if ( type === 'bool' ) value = false;
|
|
1226
1292
|
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();
|
|
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();
|
|
1230
1296
|
|
|
1231
1297
|
}
|
|
1232
1298
|
|
|
@@ -1777,7 +1843,7 @@ class NodeBuilder {
|
|
|
1777
1843
|
*/
|
|
1778
1844
|
getBufferAttributeFromNode( node, type ) {
|
|
1779
1845
|
|
|
1780
|
-
const nodeData = this.getDataFromNode( node );
|
|
1846
|
+
const nodeData = this.getDataFromNode( node, 'vertex' );
|
|
1781
1847
|
|
|
1782
1848
|
let bufferAttribute = nodeData.bufferAttribute;
|
|
1783
1849
|
|
|
@@ -2606,11 +2672,12 @@ class NodeBuilder {
|
|
|
2606
2672
|
* Returns the variable definitions as a shader string for the given shader stage.
|
|
2607
2673
|
*
|
|
2608
2674
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
2675
|
+
* @param {boolean} [global=false] - Whether the variables are global.
|
|
2609
2676
|
* @return {string} The variable code section.
|
|
2610
2677
|
*/
|
|
2611
|
-
getVars( shaderStage ) {
|
|
2678
|
+
getVars( shaderStage, global = false ) {
|
|
2612
2679
|
|
|
2613
|
-
|
|
2680
|
+
const snippets = [];
|
|
2614
2681
|
|
|
2615
2682
|
const vars = this.vars[ shaderStage ];
|
|
2616
2683
|
|
|
@@ -2618,13 +2685,13 @@ class NodeBuilder {
|
|
|
2618
2685
|
|
|
2619
2686
|
for ( const variable of vars ) {
|
|
2620
2687
|
|
|
2621
|
-
|
|
2688
|
+
snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );
|
|
2622
2689
|
|
|
2623
2690
|
}
|
|
2624
2691
|
|
|
2625
2692
|
}
|
|
2626
2693
|
|
|
2627
|
-
return
|
|
2694
|
+
return snippets.join( global ? '\n' : '\n\t' );
|
|
2628
2695
|
|
|
2629
2696
|
}
|
|
2630
2697
|
|
|
@@ -2873,13 +2940,41 @@ class NodeBuilder {
|
|
|
2873
2940
|
}
|
|
2874
2941
|
|
|
2875
2942
|
/**
|
|
2876
|
-
*
|
|
2877
|
-
*
|
|
2878
|
-
* @return {NodeBuilder} A reference to this node builder.
|
|
2943
|
+
* Prebuild the node builder.
|
|
2879
2944
|
*/
|
|
2880
|
-
|
|
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 >
|
|
2881
2962
|
|
|
2882
|
-
|
|
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()`.' );
|
|
2972
|
+
|
|
2973
|
+
}
|
|
2974
|
+
|
|
2975
|
+
}
|
|
2976
|
+
|
|
2977
|
+
// < nodeMaterial >
|
|
2883
2978
|
|
|
2884
2979
|
if ( material !== null ) {
|
|
2885
2980
|
|
|
@@ -2887,7 +2982,7 @@ class NodeBuilder {
|
|
|
2887
2982
|
|
|
2888
2983
|
if ( nodeMaterial === null ) {
|
|
2889
2984
|
|
|
2890
|
-
error( `
|
|
2985
|
+
error( `NodeBuilder: Material "${ material.type }" is not compatible.` );
|
|
2891
2986
|
|
|
2892
2987
|
nodeMaterial = new NodeMaterial();
|
|
2893
2988
|
|
|
@@ -2901,6 +2996,77 @@ class NodeBuilder {
|
|
|
2901
2996
|
|
|
2902
2997
|
}
|
|
2903
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
|
+
|
|
3010
|
+
// setup() -> stage 1: create possible new nodes and/or return an output reference node
|
|
3011
|
+
// analyze() -> stage 2: analyze nodes to possible optimization and validation
|
|
3012
|
+
// generate() -> stage 3: generate shader
|
|
3013
|
+
|
|
3014
|
+
for ( const buildStage of defaultBuildStages ) {
|
|
3015
|
+
|
|
3016
|
+
this.setBuildStage( buildStage );
|
|
3017
|
+
|
|
3018
|
+
if ( this.context.position && this.context.position.isNode ) {
|
|
3019
|
+
|
|
3020
|
+
this.flowNodeFromShaderStage( 'vertex', this.context.position );
|
|
3021
|
+
|
|
3022
|
+
}
|
|
3023
|
+
|
|
3024
|
+
for ( const shaderStage of shaderStages ) {
|
|
3025
|
+
|
|
3026
|
+
this.setShaderStage( shaderStage );
|
|
3027
|
+
|
|
3028
|
+
const flowNodes = this.flowNodes[ shaderStage ];
|
|
3029
|
+
|
|
3030
|
+
for ( const node of flowNodes ) {
|
|
3031
|
+
|
|
3032
|
+
if ( buildStage === 'generate' ) {
|
|
3033
|
+
|
|
3034
|
+
this.flowNode( node );
|
|
3035
|
+
|
|
3036
|
+
} else {
|
|
3037
|
+
|
|
3038
|
+
node.build( this );
|
|
3039
|
+
|
|
3040
|
+
}
|
|
3041
|
+
|
|
3042
|
+
}
|
|
3043
|
+
|
|
3044
|
+
}
|
|
3045
|
+
|
|
3046
|
+
}
|
|
3047
|
+
|
|
3048
|
+
this.setBuildStage( null );
|
|
3049
|
+
this.setShaderStage( null );
|
|
3050
|
+
|
|
3051
|
+
// stage 4: build code for a specific output
|
|
3052
|
+
|
|
3053
|
+
this.buildCode();
|
|
3054
|
+
this.buildUpdateNodes();
|
|
3055
|
+
|
|
3056
|
+
return this;
|
|
3057
|
+
|
|
3058
|
+
}
|
|
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
|
+
|
|
2904
3070
|
// setup() -> stage 1: create possible new nodes and/or return an output reference node
|
|
2905
3071
|
// analyze() -> stage 2: analyze nodes to possible optimization and validation
|
|
2906
3072
|
// generate() -> stage 3: generate shader
|
|
@@ -2909,9 +3075,9 @@ class NodeBuilder {
|
|
|
2909
3075
|
|
|
2910
3076
|
this.setBuildStage( buildStage );
|
|
2911
3077
|
|
|
2912
|
-
if ( this.context.
|
|
3078
|
+
if ( this.context.position && this.context.position.isNode ) {
|
|
2913
3079
|
|
|
2914
|
-
this.flowNodeFromShaderStage( 'vertex', this.context.
|
|
3080
|
+
this.flowNodeFromShaderStage( 'vertex', this.context.position );
|
|
2915
3081
|
|
|
2916
3082
|
}
|
|
2917
3083
|
|
|
@@ -2935,6 +3101,9 @@ class NodeBuilder {
|
|
|
2935
3101
|
|
|
2936
3102
|
}
|
|
2937
3103
|
|
|
3104
|
+
// Yield to main thread after each shader stage to prevent blocking
|
|
3105
|
+
await yieldToMain();
|
|
3106
|
+
|
|
2938
3107
|
}
|
|
2939
3108
|
|
|
2940
3109
|
}
|
|
@@ -2951,6 +3120,26 @@ class NodeBuilder {
|
|
|
2951
3120
|
|
|
2952
3121
|
}
|
|
2953
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
|
+
|
|
2954
3143
|
/**
|
|
2955
3144
|
* Returns a uniform representation which is later used for UBO generation and rendering.
|
|
2956
3145
|
*
|
|
@@ -2960,16 +3149,31 @@ class NodeBuilder {
|
|
|
2960
3149
|
*/
|
|
2961
3150
|
getNodeUniform( uniformNode, type ) {
|
|
2962
3151
|
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
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 );
|
|
3152
|
+
const nodeData = this.getSharedDataFromNode( uniformNode );
|
|
3153
|
+
|
|
3154
|
+
let node = nodeData.cache;
|
|
2971
3155
|
|
|
2972
|
-
|
|
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;
|
|
3173
|
+
|
|
3174
|
+
}
|
|
3175
|
+
|
|
3176
|
+
return node;
|
|
2973
3177
|
|
|
2974
3178
|
}
|
|
2975
3179
|
|
|
@@ -3076,6 +3280,20 @@ class NodeBuilder {
|
|
|
3076
3280
|
|
|
3077
3281
|
}
|
|
3078
3282
|
|
|
3283
|
+
/**
|
|
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.
|
|
3288
|
+
*/
|
|
3289
|
+
needsPreviousData() {
|
|
3290
|
+
|
|
3291
|
+
const mrt = this.renderer.getMRT();
|
|
3292
|
+
|
|
3293
|
+
return ( mrt && mrt.has( 'velocity' ) ) || getDataFromObject( this.object ).useVelocity === true;
|
|
3294
|
+
|
|
3295
|
+
}
|
|
3296
|
+
|
|
3079
3297
|
}
|
|
3080
3298
|
|
|
3081
3299
|
export default NodeBuilder;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error class for node-related errors, including stack trace information.
|
|
3
|
+
*/
|
|
4
|
+
class NodeError extends Error {
|
|
5
|
+
|
|
6
|
+
constructor( message, stackTrace = null ) {
|
|
7
|
+
|
|
8
|
+
super( message );
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The name of the error.
|
|
12
|
+
*
|
|
13
|
+
* @type {string}
|
|
14
|
+
*/
|
|
15
|
+
this.name = 'NodeError';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The stack trace associated with the error.
|
|
19
|
+
*
|
|
20
|
+
* @type {?StackTrace}
|
|
21
|
+
*/
|
|
22
|
+
this.stackTrace = stackTrace;
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default NodeError;
|
|
@@ -155,9 +155,13 @@ class NodeFrame {
|
|
|
155
155
|
|
|
156
156
|
if ( nodeUpdateBeforeMap.frameId !== this.frameId ) {
|
|
157
157
|
|
|
158
|
-
|
|
158
|
+
const previousFrameId = nodeUpdateBeforeMap.frameId;
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
nodeUpdateBeforeMap.frameId = this.frameId;
|
|
161
|
+
|
|
162
|
+
if ( node.updateBefore( this ) === false ) {
|
|
163
|
+
|
|
164
|
+
nodeUpdateBeforeMap.frameId = previousFrameId;
|
|
161
165
|
|
|
162
166
|
}
|
|
163
167
|
|
|
@@ -169,9 +173,13 @@ class NodeFrame {
|
|
|
169
173
|
|
|
170
174
|
if ( nodeUpdateBeforeMap.renderId !== this.renderId ) {
|
|
171
175
|
|
|
172
|
-
|
|
176
|
+
const previousRenderId = nodeUpdateBeforeMap.renderId;
|
|
177
|
+
|
|
178
|
+
nodeUpdateBeforeMap.renderId = this.renderId;
|
|
179
|
+
|
|
180
|
+
if ( node.updateBefore( this ) === false ) {
|
|
173
181
|
|
|
174
|
-
nodeUpdateBeforeMap.renderId =
|
|
182
|
+
nodeUpdateBeforeMap.renderId = previousRenderId;
|
|
175
183
|
|
|
176
184
|
}
|
|
177
185
|
|
|
@@ -5,7 +5,9 @@ import { Matrix4 } from '../../math/Matrix4.js';
|
|
|
5
5
|
import { Vector2 } from '../../math/Vector2.js';
|
|
6
6
|
import { Vector3 } from '../../math/Vector3.js';
|
|
7
7
|
import { Vector4 } from '../../math/Vector4.js';
|
|
8
|
+
|
|
8
9
|
import { error } from '../../utils.js';
|
|
10
|
+
import StackTrace from '../core/StackTrace.js';
|
|
9
11
|
|
|
10
12
|
// cyrb53 (c) 2018 bryc (github.com/bryc). License: Public domain. Attribution appreciated.
|
|
11
13
|
// A fast and simple 64-bit (or 53-bit) string hash function with decent collision resistance.
|
|
@@ -16,7 +18,7 @@ function cyrb53( value, seed = 0 ) {
|
|
|
16
18
|
|
|
17
19
|
let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
|
|
18
20
|
|
|
19
|
-
if ( value
|
|
21
|
+
if ( Array.isArray( value ) ) {
|
|
20
22
|
|
|
21
23
|
for ( let i = 0, val; i < value.length; i ++ ) {
|
|
22
24
|
|
|
@@ -154,7 +156,7 @@ export function getLengthFromType( type ) {
|
|
|
154
156
|
if ( /mat3/.test( type ) ) return 9;
|
|
155
157
|
if ( /mat4/.test( type ) ) return 16;
|
|
156
158
|
|
|
157
|
-
error(
|
|
159
|
+
error( `TSL: Unsupported type: ${ type }`, new StackTrace() );
|
|
158
160
|
|
|
159
161
|
}
|
|
160
162
|
|
|
@@ -176,29 +178,29 @@ export function getMemoryLengthFromType( type ) {
|
|
|
176
178
|
if ( /mat3/.test( type ) ) return 12;
|
|
177
179
|
if ( /mat4/.test( type ) ) return 16;
|
|
178
180
|
|
|
179
|
-
error(
|
|
181
|
+
error( `TSL: Unsupported type: ${ type }`, new StackTrace() );
|
|
180
182
|
|
|
181
183
|
}
|
|
182
184
|
|
|
183
185
|
/**
|
|
184
|
-
* Returns the
|
|
186
|
+
* Returns the alignment requirement for the given data type.
|
|
185
187
|
*
|
|
186
188
|
* @private
|
|
187
189
|
* @method
|
|
188
190
|
* @param {string} type - The data type.
|
|
189
|
-
* @return {number} The
|
|
191
|
+
* @return {number} The alignment requirement in bytes.
|
|
190
192
|
*/
|
|
191
|
-
export function
|
|
193
|
+
export function getAlignmentFromType( type ) {
|
|
192
194
|
|
|
193
195
|
if ( /float|int|uint/.test( type ) ) return 4;
|
|
194
196
|
if ( /vec2/.test( type ) ) return 8;
|
|
195
197
|
if ( /vec3/.test( type ) ) return 16;
|
|
196
198
|
if ( /vec4/.test( type ) ) return 16;
|
|
197
199
|
if ( /mat2/.test( type ) ) return 8;
|
|
198
|
-
if ( /mat3/.test( type ) ) return
|
|
199
|
-
if ( /mat4/.test( type ) ) return
|
|
200
|
+
if ( /mat3/.test( type ) ) return 16;
|
|
201
|
+
if ( /mat4/.test( type ) ) return 16;
|
|
200
202
|
|
|
201
|
-
error(
|
|
203
|
+
error( `TSL: Unsupported type: ${ type }`, new StackTrace() );
|
|
202
204
|
|
|
203
205
|
}
|
|
204
206
|
|