@plastic-software/three 0.175.14 → 0.179.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/README.md +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +22 -8
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +57 -38
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +679 -300
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -2
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +213 -30
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +4 -3
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +22 -19
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +149 -13
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +22 -19
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +12 -10
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { select } from '../math/ConditionalNode.js';
|
|
3
|
-
import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
|
|
3
|
+
import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack, nodeObject } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Stack is a helper for Nodes that need to produce stack-based code instead of continuous flow.
|
|
@@ -57,6 +57,16 @@ class StackNode extends Node {
|
|
|
57
57
|
*/
|
|
58
58
|
this._currentCond = null;
|
|
59
59
|
|
|
60
|
+
/**
|
|
61
|
+
* The expression node. Only
|
|
62
|
+
* relevant for Switch/Case.
|
|
63
|
+
*
|
|
64
|
+
* @private
|
|
65
|
+
* @type {Node}
|
|
66
|
+
* @default null
|
|
67
|
+
*/
|
|
68
|
+
this._expressionNode = null;
|
|
69
|
+
|
|
60
70
|
/**
|
|
61
71
|
* This flag can be used for type testing.
|
|
62
72
|
*
|
|
@@ -143,50 +153,185 @@ class StackNode extends Node {
|
|
|
143
153
|
|
|
144
154
|
}
|
|
145
155
|
|
|
146
|
-
|
|
156
|
+
/**
|
|
157
|
+
* Represents a `switch` statement in TSL.
|
|
158
|
+
*
|
|
159
|
+
* @param {any} expression - Represents the expression.
|
|
160
|
+
* @param {Function} method - TSL code which is executed if the condition evaluates to `true`.
|
|
161
|
+
* @return {StackNode} A reference to this stack node.
|
|
162
|
+
*/
|
|
163
|
+
Switch( expression ) {
|
|
147
164
|
|
|
148
|
-
|
|
165
|
+
this._expressionNode = nodeObject( expression );
|
|
149
166
|
|
|
150
|
-
|
|
167
|
+
return this;
|
|
151
168
|
|
|
152
|
-
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Represents a `case` statement in TSL. The TSL version accepts an arbitrary numbers of values.
|
|
173
|
+
* The last parameter must be the callback method that should be executed in the `true` case.
|
|
174
|
+
*
|
|
175
|
+
* @param {...any} params - The values of the `Case()` statement as well as the callback method.
|
|
176
|
+
* @return {StackNode} A reference to this stack node.
|
|
177
|
+
*/
|
|
178
|
+
Case( ...params ) {
|
|
179
|
+
|
|
180
|
+
const caseNodes = [];
|
|
181
|
+
|
|
182
|
+
// extract case nodes from the parameter list
|
|
183
|
+
|
|
184
|
+
if ( params.length >= 2 ) {
|
|
185
|
+
|
|
186
|
+
for ( let i = 0; i < params.length - 1; i ++ ) {
|
|
153
187
|
|
|
154
|
-
|
|
188
|
+
caseNodes.push( this._expressionNode.equal( nodeObject( params[ i ] ) ) );
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
} else {
|
|
193
|
+
|
|
194
|
+
throw new Error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
|
|
155
195
|
|
|
156
196
|
}
|
|
157
197
|
|
|
158
|
-
|
|
198
|
+
// extract method
|
|
159
199
|
|
|
160
|
-
|
|
200
|
+
const method = params[ params.length - 1 ];
|
|
201
|
+
const methodNode = new ShaderNode( method );
|
|
161
202
|
|
|
162
|
-
|
|
203
|
+
// chain multiple cases when using Case( 1, 2, 3, () => {} )
|
|
163
204
|
|
|
164
|
-
|
|
205
|
+
let caseNode = caseNodes[ 0 ];
|
|
165
206
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
else( ...params ) { // @deprecated, r168
|
|
207
|
+
for ( let i = 1; i < caseNodes.length; i ++ ) {
|
|
208
|
+
|
|
209
|
+
caseNode = caseNode.or( caseNodes[ i ] );
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// build condition
|
|
174
214
|
|
|
175
|
-
|
|
176
|
-
|
|
215
|
+
const condNode = select( caseNode, methodNode );
|
|
216
|
+
|
|
217
|
+
if ( this._currentCond === null ) {
|
|
218
|
+
|
|
219
|
+
this._currentCond = condNode;
|
|
220
|
+
|
|
221
|
+
return this.add( this._currentCond );
|
|
222
|
+
|
|
223
|
+
} else {
|
|
224
|
+
|
|
225
|
+
this._currentCond.elseNode = condNode;
|
|
226
|
+
this._currentCond = condNode;
|
|
227
|
+
|
|
228
|
+
return this;
|
|
229
|
+
|
|
230
|
+
}
|
|
177
231
|
|
|
178
232
|
}
|
|
179
233
|
|
|
180
234
|
/**
|
|
181
|
-
*
|
|
235
|
+
* Represents the default code block of a Switch/Case statement.
|
|
182
236
|
*
|
|
183
|
-
* @param {
|
|
184
|
-
* @
|
|
237
|
+
* @param {Function} method - TSL code which is executed in the `else` case.
|
|
238
|
+
* @return {StackNode} A reference to this stack node.
|
|
185
239
|
*/
|
|
186
|
-
|
|
240
|
+
Default( method ) {
|
|
241
|
+
|
|
242
|
+
this.Else( method );
|
|
243
|
+
|
|
244
|
+
return this;
|
|
245
|
+
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
setup( builder ) {
|
|
249
|
+
|
|
250
|
+
const nodeProperties = builder.getNodeProperties( this );
|
|
251
|
+
|
|
252
|
+
let index = 0;
|
|
253
|
+
|
|
254
|
+
for ( const childNode of this.getChildren() ) {
|
|
255
|
+
|
|
256
|
+
if ( childNode.isVarNode && childNode.intent === true ) {
|
|
257
|
+
|
|
258
|
+
const properties = builder.getNodeProperties( childNode );
|
|
259
|
+
|
|
260
|
+
if ( properties.assign !== true ) {
|
|
261
|
+
|
|
262
|
+
continue;
|
|
263
|
+
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
nodeProperties[ 'node' + index ++ ] = childNode;
|
|
269
|
+
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// return a outputNode if exists or null
|
|
273
|
+
|
|
274
|
+
return nodeProperties.outputNode || null;
|
|
275
|
+
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
build( builder, ...params ) {
|
|
279
|
+
|
|
280
|
+
const previousBuildStack = builder.currentStack;
|
|
281
|
+
const previousStack = getCurrentStack();
|
|
282
|
+
|
|
283
|
+
setCurrentStack( this );
|
|
284
|
+
|
|
285
|
+
builder.currentStack = this;
|
|
286
|
+
|
|
287
|
+
const buildStage = builder.buildStage;
|
|
288
|
+
|
|
289
|
+
for ( const node of this.nodes ) {
|
|
290
|
+
|
|
291
|
+
if ( node.isVarNode && node.intent === true ) {
|
|
292
|
+
|
|
293
|
+
const properties = builder.getNodeProperties( node );
|
|
294
|
+
|
|
295
|
+
if ( properties.assign !== true ) {
|
|
296
|
+
|
|
297
|
+
continue;
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if ( buildStage === 'setup' ) {
|
|
304
|
+
|
|
305
|
+
node.build( builder );
|
|
306
|
+
|
|
307
|
+
} else if ( buildStage === 'analyze' ) {
|
|
308
|
+
|
|
309
|
+
node.build( builder, this );
|
|
310
|
+
|
|
311
|
+
} else if ( buildStage === 'generate' ) {
|
|
312
|
+
|
|
313
|
+
const stages = builder.getDataFromNode( node, 'any' ).stages;
|
|
314
|
+
const parents = stages && stages[ builder.shaderStage ];
|
|
315
|
+
|
|
316
|
+
if ( node.isVarNode && parents && parents.length === 1 && parents[ 0 ] && parents[ 0 ].isStackNode ) {
|
|
317
|
+
|
|
318
|
+
continue; // skip var nodes that are only used in .toVarying()
|
|
319
|
+
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
node.build( builder, 'void' );
|
|
323
|
+
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
const result = this.outputNode ? this.outputNode.build( builder, ...params ) : super.build( builder, ...params );
|
|
329
|
+
|
|
330
|
+
setCurrentStack( previousStack );
|
|
331
|
+
|
|
332
|
+
builder.currentStack = previousBuildStack;
|
|
187
333
|
|
|
188
|
-
|
|
189
|
-
return this.ElseIf( ...params );
|
|
334
|
+
return result;
|
|
190
335
|
|
|
191
336
|
}
|
|
192
337
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import Node from './Node.js';
|
|
3
|
-
import {
|
|
3
|
+
import { getByteBoundaryFromType, getMemoryLengthFromType } from './NodeUtils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Generates a layout for struct members.
|
|
@@ -86,15 +86,37 @@ class StructTypeNode extends Node {
|
|
|
86
86
|
*/
|
|
87
87
|
getLength() {
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
const GPU_CHUNK_BYTES = 8;
|
|
90
|
+
const BYTES_PER_ELEMENT = Float32Array.BYTES_PER_ELEMENT;
|
|
91
|
+
|
|
92
|
+
let offset = 0; // global buffer offset in bytes
|
|
90
93
|
|
|
91
94
|
for ( const member of this.membersLayout ) {
|
|
92
95
|
|
|
93
|
-
|
|
96
|
+
const type = member.type;
|
|
97
|
+
|
|
98
|
+
const itemSize = getMemoryLengthFromType( type ) * BYTES_PER_ELEMENT;
|
|
99
|
+
const boundary = getByteBoundaryFromType( type );
|
|
100
|
+
|
|
101
|
+
const chunkOffset = offset % GPU_CHUNK_BYTES; // offset in the current chunk
|
|
102
|
+
const chunkPadding = chunkOffset % boundary; // required padding to match boundary
|
|
103
|
+
const chunkStart = chunkOffset + chunkPadding; // start position in the current chunk for the data
|
|
104
|
+
|
|
105
|
+
offset += chunkPadding;
|
|
106
|
+
|
|
107
|
+
// Check for chunk overflow
|
|
108
|
+
if ( chunkStart !== 0 && ( GPU_CHUNK_BYTES - chunkStart ) < itemSize ) {
|
|
109
|
+
|
|
110
|
+
// Add padding to the end of the chunk
|
|
111
|
+
offset += ( GPU_CHUNK_BYTES - chunkStart );
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
offset += itemSize;
|
|
94
116
|
|
|
95
117
|
}
|
|
96
118
|
|
|
97
|
-
return
|
|
119
|
+
return ( Math.ceil( offset / GPU_CHUNK_BYTES ) * GPU_CHUNK_BYTES ) / BYTES_PER_ELEMENT;
|
|
98
120
|
|
|
99
121
|
}
|
|
100
122
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import Node from './Node.js';
|
|
2
|
+
import { nodeObject } from '../tsl/TSLCore.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This node is used to build a sub-build in the node system.
|
|
6
|
+
*
|
|
7
|
+
* @augments Node
|
|
8
|
+
* @param {Node} node - The node to be built in the sub-build.
|
|
9
|
+
* @param {string} name - The name of the sub-build.
|
|
10
|
+
* @param {string|null} [nodeType=null] - The type of the node, if known.
|
|
11
|
+
*/
|
|
12
|
+
class SubBuildNode extends Node {
|
|
13
|
+
|
|
14
|
+
static get type() {
|
|
15
|
+
|
|
16
|
+
return 'SubBuild';
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
constructor( node, name, nodeType = null ) {
|
|
21
|
+
|
|
22
|
+
super( nodeType );
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The node to be built in the sub-build.
|
|
26
|
+
*
|
|
27
|
+
* @type {Node}
|
|
28
|
+
*/
|
|
29
|
+
this.node = node;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The name of the sub-build.
|
|
33
|
+
*
|
|
34
|
+
* @type {string}
|
|
35
|
+
*/
|
|
36
|
+
this.name = name;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* This flag can be used for type testing.
|
|
40
|
+
*
|
|
41
|
+
* @type {boolean}
|
|
42
|
+
* @readonly
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
this.isSubBuildNode = true;
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
getNodeType( builder ) {
|
|
50
|
+
|
|
51
|
+
if ( this.nodeType !== null ) return this.nodeType;
|
|
52
|
+
|
|
53
|
+
builder.addSubBuild( this.name );
|
|
54
|
+
|
|
55
|
+
const nodeType = this.node.getNodeType( builder );
|
|
56
|
+
|
|
57
|
+
builder.removeSubBuild();
|
|
58
|
+
|
|
59
|
+
return nodeType;
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
build( builder, ...params ) {
|
|
64
|
+
|
|
65
|
+
builder.addSubBuild( this.name );
|
|
66
|
+
|
|
67
|
+
const data = this.node.build( builder, ...params );
|
|
68
|
+
|
|
69
|
+
builder.removeSubBuild();
|
|
70
|
+
|
|
71
|
+
return data;
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export default SubBuildNode;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Creates a new sub-build node.
|
|
81
|
+
*
|
|
82
|
+
* @tsl
|
|
83
|
+
* @function
|
|
84
|
+
* @param {Node} node - The node to be built in the sub-build.
|
|
85
|
+
* @param {string} name - The name of the sub-build.
|
|
86
|
+
* @param {string|null} [type=null] - The type of the node, if known.
|
|
87
|
+
* @returns {Node} A node object wrapping the SubBuildNode instance.
|
|
88
|
+
*/
|
|
89
|
+
export const subBuild = ( node, name, type = null ) => nodeObject( new SubBuildNode( nodeObject( node ), name, type ) );
|
|
@@ -59,7 +59,7 @@ class UniformNode extends InputNode {
|
|
|
59
59
|
* @param {string} name - The name of the uniform.
|
|
60
60
|
* @return {UniformNode} A reference to this node.
|
|
61
61
|
*/
|
|
62
|
-
|
|
62
|
+
setName( name ) {
|
|
63
63
|
|
|
64
64
|
this.name = name;
|
|
65
65
|
|
|
@@ -67,6 +67,21 @@ class UniformNode extends InputNode {
|
|
|
67
67
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Sets the {@link UniformNode#name} property.
|
|
72
|
+
*
|
|
73
|
+
* @deprecated
|
|
74
|
+
* @param {string} name - The name of the uniform.
|
|
75
|
+
* @return {UniformNode} A reference to this node.
|
|
76
|
+
*/
|
|
77
|
+
label( name ) {
|
|
78
|
+
|
|
79
|
+
console.warn( 'THREE.TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
80
|
+
|
|
81
|
+
return this.setName( name );
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
70
85
|
/**
|
|
71
86
|
* Sets the {@link UniformNode#groupNode} property.
|
|
72
87
|
*
|
|
@@ -125,6 +140,20 @@ class UniformNode extends InputNode {
|
|
|
125
140
|
|
|
126
141
|
}
|
|
127
142
|
|
|
143
|
+
getInputType( builder ) {
|
|
144
|
+
|
|
145
|
+
let type = super.getInputType( builder );
|
|
146
|
+
|
|
147
|
+
if ( type === 'bool' ) {
|
|
148
|
+
|
|
149
|
+
type = 'uint';
|
|
150
|
+
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return type;
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
128
157
|
generate( builder, output ) {
|
|
129
158
|
|
|
130
159
|
const type = this.getNodeType( builder );
|
|
@@ -143,12 +172,41 @@ class UniformNode extends InputNode {
|
|
|
143
172
|
|
|
144
173
|
const sharedNodeType = sharedNode.getInputType( builder );
|
|
145
174
|
|
|
146
|
-
const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.
|
|
147
|
-
const
|
|
175
|
+
const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.nodeName );
|
|
176
|
+
const uniformName = builder.getPropertyName( nodeUniform );
|
|
177
|
+
|
|
178
|
+
if ( builder.context.nodeName !== undefined ) delete builder.context.nodeName;
|
|
179
|
+
|
|
180
|
+
//
|
|
181
|
+
|
|
182
|
+
let snippet = uniformName;
|
|
183
|
+
|
|
184
|
+
if ( type === 'bool' ) {
|
|
185
|
+
|
|
186
|
+
// cache to variable
|
|
187
|
+
|
|
188
|
+
const nodeData = builder.getDataFromNode( this );
|
|
189
|
+
|
|
190
|
+
let propertyName = nodeData.propertyName;
|
|
148
191
|
|
|
149
|
-
|
|
192
|
+
if ( propertyName === undefined ) {
|
|
193
|
+
|
|
194
|
+
const nodeVar = builder.getVarFromNode( this, null, 'bool' );
|
|
195
|
+
propertyName = builder.getPropertyName( nodeVar );
|
|
196
|
+
|
|
197
|
+
nodeData.propertyName = propertyName;
|
|
198
|
+
|
|
199
|
+
snippet = builder.format( uniformName, sharedNodeType, type );
|
|
200
|
+
|
|
201
|
+
builder.addLineFlowCode( `${ propertyName } = ${ snippet }`, this );
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
snippet = propertyName;
|
|
206
|
+
|
|
207
|
+
}
|
|
150
208
|
|
|
151
|
-
return builder.format(
|
|
209
|
+
return builder.format( snippet, type, output );
|
|
152
210
|
|
|
153
211
|
}
|
|
154
212
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
-
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
2
|
+
import { addMethodChaining, getCurrentStack, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Class for representing shader variables as nodes. Variables are created from
|
|
@@ -72,6 +72,54 @@ class VarNode extends Node {
|
|
|
72
72
|
*/
|
|
73
73
|
this.readOnly = readOnly;
|
|
74
74
|
|
|
75
|
+
/**
|
|
76
|
+
*
|
|
77
|
+
* Add this flag to the node system to indicate that this node require parents.
|
|
78
|
+
*
|
|
79
|
+
* @type {boolean}
|
|
80
|
+
* @default true
|
|
81
|
+
*/
|
|
82
|
+
this.parents = true;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* This flag is used to indicate that this node is used for intent.
|
|
86
|
+
*
|
|
87
|
+
* @type {boolean}
|
|
88
|
+
* @default false
|
|
89
|
+
*/
|
|
90
|
+
this.intent = false;
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Sets the intent flag for this node.
|
|
96
|
+
*
|
|
97
|
+
* This flag is used to indicate that this node is used for intent
|
|
98
|
+
* and should not be built directly. Instead, it is used to indicate that
|
|
99
|
+
* the node should be treated as a variable intent.
|
|
100
|
+
*
|
|
101
|
+
* It's useful for assigning variables without needing creating a new variable node.
|
|
102
|
+
*
|
|
103
|
+
* @param {boolean} value - The value to set for the intent flag.
|
|
104
|
+
* @returns {VarNode} This node.
|
|
105
|
+
*/
|
|
106
|
+
setIntent( value ) {
|
|
107
|
+
|
|
108
|
+
this.intent = value;
|
|
109
|
+
|
|
110
|
+
return this;
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Returns the intent flag of this node.
|
|
116
|
+
*
|
|
117
|
+
* @return {boolean} The intent flag.
|
|
118
|
+
*/
|
|
119
|
+
getIntent() {
|
|
120
|
+
|
|
121
|
+
return this.intent;
|
|
122
|
+
|
|
75
123
|
}
|
|
76
124
|
|
|
77
125
|
getMemberType( builder, name ) {
|
|
@@ -92,6 +140,31 @@ class VarNode extends Node {
|
|
|
92
140
|
|
|
93
141
|
}
|
|
94
142
|
|
|
143
|
+
getArrayCount( builder ) {
|
|
144
|
+
|
|
145
|
+
return this.node.getArrayCount( builder );
|
|
146
|
+
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
build( ...params ) {
|
|
150
|
+
|
|
151
|
+
if ( this.intent === true ) {
|
|
152
|
+
|
|
153
|
+
const builder = params[ 0 ];
|
|
154
|
+
const properties = builder.getNodeProperties( this );
|
|
155
|
+
|
|
156
|
+
if ( properties.assign !== true ) {
|
|
157
|
+
|
|
158
|
+
return this.node.build( ...params );
|
|
159
|
+
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return super.build( ...params );
|
|
165
|
+
|
|
166
|
+
}
|
|
167
|
+
|
|
95
168
|
generate( builder ) {
|
|
96
169
|
|
|
97
170
|
const { node, name, readOnly } = this;
|
|
@@ -129,7 +202,7 @@ class VarNode extends Node {
|
|
|
129
202
|
|
|
130
203
|
} else {
|
|
131
204
|
|
|
132
|
-
const count =
|
|
205
|
+
const count = node.getArrayCount( builder );
|
|
133
206
|
|
|
134
207
|
declarationPrefix = `const ${ builder.getVar( nodeVar.type, propertyName, count ) }`;
|
|
135
208
|
|
|
@@ -167,7 +240,7 @@ const createVar = /*@__PURE__*/ nodeProxy( VarNode );
|
|
|
167
240
|
* @param {?string} name - The name of the variable in the shader.
|
|
168
241
|
* @returns {VarNode}
|
|
169
242
|
*/
|
|
170
|
-
export const Var = ( node, name = null ) => createVar( node, name ).
|
|
243
|
+
export const Var = ( node, name = null ) => createVar( node, name ).toStack();
|
|
171
244
|
|
|
172
245
|
/**
|
|
173
246
|
* TSL function for creating a const node.
|
|
@@ -178,12 +251,37 @@ export const Var = ( node, name = null ) => createVar( node, name ).append();
|
|
|
178
251
|
* @param {?string} name - The name of the constant in the shader.
|
|
179
252
|
* @returns {VarNode}
|
|
180
253
|
*/
|
|
181
|
-
export const Const = ( node, name = null ) => createVar( node, name, true ).
|
|
254
|
+
export const Const = ( node, name = null ) => createVar( node, name, true ).toStack();
|
|
255
|
+
|
|
256
|
+
//
|
|
257
|
+
//
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* TSL function for creating a var intent node.
|
|
261
|
+
*
|
|
262
|
+
* @tsl
|
|
263
|
+
* @function
|
|
264
|
+
* @param {Node} node - The node for which a variable should be created.
|
|
265
|
+
* @param {?string} name - The name of the variable in the shader.
|
|
266
|
+
* @returns {VarNode}
|
|
267
|
+
*/
|
|
268
|
+
export const VarIntent = ( node ) => {
|
|
269
|
+
|
|
270
|
+
if ( getCurrentStack() === null ) {
|
|
271
|
+
|
|
272
|
+
return node;
|
|
273
|
+
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return createVar( node ).setIntent( true ).toStack();
|
|
277
|
+
|
|
278
|
+
};
|
|
182
279
|
|
|
183
280
|
// Method chaining
|
|
184
281
|
|
|
185
282
|
addMethodChaining( 'toVar', Var );
|
|
186
283
|
addMethodChaining( 'toConst', Const );
|
|
284
|
+
addMethodChaining( 'toVarIntent', VarIntent );
|
|
187
285
|
|
|
188
286
|
// Deprecated
|
|
189
287
|
|