@plastic-software/three 0.175.13 → 0.178.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 +3 -3
- package/build/three.cjs +7747 -6792
- package/build/three.core.js +7371 -6576
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +190 -30
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +19 -11
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +4989 -2235
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +5082 -2469
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -1
- 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 +1 -0
- 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 +18 -4
- 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 +49 -35
- 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 +12 -10
- 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 +2 -1
- 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 +7 -0
- 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/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- package/examples/jsm/loaders/USDZLoader.js +1 -0
- 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/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/Timer.js +2 -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 +1 -0
- 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 +20 -17
- 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 +139 -12
- 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 +4 -3
- 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 +5 -2
- 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 +2 -1
- 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 +4 -1
- 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 +226 -87
- 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 +1 -0
- 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 +4 -29
- 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 +5 -4
- 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 +4 -3
- 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 +1 -1
- package/src/Three.TSL.js +18 -10
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -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/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/SkeletonHelper.js +1 -1
- package/src/lights/LightShadow.js +14 -0
- 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 +2 -2
- package/src/loaders/ImageBitmapLoader.js +25 -9
- package/src/loaders/ImageLoader.js +55 -8
- 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/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 +105 -19
- package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
- 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 +6 -1
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +2 -3
- package/src/nodes/TSL.js +5 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +31 -4
- 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 +102 -16
- 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 +1 -1
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +14 -3
- 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 +59 -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/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +69 -20
- package/src/nodes/core/NodeBuilder.js +248 -29
- package/src/nodes/core/NodeUtils.js +42 -0
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +129 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/VarNode.js +11 -2
- 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 +18 -19
- package/src/nodes/display/ScreenNode.js +0 -26
- 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 +14 -14
- 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 +1 -1
- 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 +78 -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/lib/mx_noise.js +1 -1
- package/src/nodes/math/ConditionalNode.js +0 -19
- package/src/nodes/math/MathNode.js +68 -21
- package/src/nodes/math/OperatorNode.js +108 -98
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +160 -65
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +13 -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 +16 -4
- 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 +25 -11
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Storage3DTexture.js +79 -0
- package/src/renderers/common/StorageArrayTexture.js +63 -0
- package/src/renderers/common/Textures.js +15 -21
- 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 +157 -27
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLPrograms.js +4 -2
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +144 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
- 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 +451 -128
- 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 +86 -33
- 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 +28 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +2 -1
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/Source.js +22 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +1 -1
- 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
|
@@ -60,6 +60,12 @@ class StorageBufferNode extends BufferNode {
|
|
|
60
60
|
nodeType = 'struct';
|
|
61
61
|
structTypeNode = bufferType.layout;
|
|
62
62
|
|
|
63
|
+
if ( value.isStorageBufferAttribute || value.isStorageInstancedBufferAttribute ) {
|
|
64
|
+
|
|
65
|
+
bufferCount = value.count;
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
63
69
|
} else if ( bufferType === null && ( value.isStorageBufferAttribute || value.isStorageInstancedBufferAttribute ) ) {
|
|
64
70
|
|
|
65
71
|
nodeType = getTypeFromLength( value.itemSize );
|
|
@@ -329,6 +335,25 @@ class StorageBufferNode extends BufferNode {
|
|
|
329
335
|
|
|
330
336
|
}
|
|
331
337
|
|
|
338
|
+
/**
|
|
339
|
+
* Returns the type of a member of the struct.
|
|
340
|
+
*
|
|
341
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
342
|
+
* @param {string} name - The name of the member.
|
|
343
|
+
* @return {string} The type of the member.
|
|
344
|
+
*/
|
|
345
|
+
getMemberType( builder, name ) {
|
|
346
|
+
|
|
347
|
+
if ( this.structTypeNode !== null ) {
|
|
348
|
+
|
|
349
|
+
return this.structTypeNode.getMemberType( builder, name );
|
|
350
|
+
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
return 'void';
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
|
|
332
357
|
/**
|
|
333
358
|
* Generates the code snippet of the storage buffer node.
|
|
334
359
|
*
|
|
@@ -98,6 +98,8 @@ class StorageTextureNode extends TextureNode {
|
|
|
98
98
|
const properties = builder.getNodeProperties( this );
|
|
99
99
|
properties.storeNode = this.storeNode;
|
|
100
100
|
|
|
101
|
+
return properties;
|
|
102
|
+
|
|
101
103
|
}
|
|
102
104
|
|
|
103
105
|
/**
|
|
@@ -181,18 +183,27 @@ class StorageTextureNode extends TextureNode {
|
|
|
181
183
|
|
|
182
184
|
const properties = builder.getNodeProperties( this );
|
|
183
185
|
|
|
184
|
-
const { uvNode, storeNode } = properties;
|
|
186
|
+
const { uvNode, storeNode, depthNode } = properties;
|
|
185
187
|
|
|
186
188
|
const textureProperty = super.generate( builder, 'property' );
|
|
187
189
|
const uvSnippet = uvNode.build( builder, 'uvec2' );
|
|
188
190
|
const storeSnippet = storeNode.build( builder, 'vec4' );
|
|
191
|
+
const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
|
|
189
192
|
|
|
190
|
-
const snippet = builder.generateTextureStore( builder, textureProperty, uvSnippet, storeSnippet );
|
|
193
|
+
const snippet = builder.generateTextureStore( builder, textureProperty, uvSnippet, depthSnippet, storeSnippet );
|
|
191
194
|
|
|
192
195
|
builder.addLineFlowCode( snippet, this );
|
|
193
196
|
|
|
194
197
|
}
|
|
195
198
|
|
|
199
|
+
clone() {
|
|
200
|
+
|
|
201
|
+
const newNode = super.clone();
|
|
202
|
+
newNode.storeNode = this.storeNode;
|
|
203
|
+
return newNode;
|
|
204
|
+
|
|
205
|
+
}
|
|
206
|
+
|
|
196
207
|
}
|
|
197
208
|
|
|
198
209
|
export default StorageTextureNode;
|
|
@@ -224,7 +235,7 @@ export const textureStore = ( value, uvNode, storeNode ) => {
|
|
|
224
235
|
|
|
225
236
|
const node = storageTexture( value, uvNode, storeNode );
|
|
226
237
|
|
|
227
|
-
if ( storeNode !== null ) node.
|
|
238
|
+
if ( storeNode !== null ) node.toStack();
|
|
228
239
|
|
|
229
240
|
return node;
|
|
230
241
|
|
|
@@ -2,6 +2,8 @@ import { attribute } from '../core/AttributeNode.js';
|
|
|
2
2
|
import { cameraViewMatrix } from './Camera.js';
|
|
3
3
|
import { modelViewMatrix } from './ModelNode.js';
|
|
4
4
|
import { Fn, vec4 } from '../tsl/TSLBase.js';
|
|
5
|
+
import { tangentViewFrame } from './TangentUtils.js';
|
|
6
|
+
import { directionToFaceDirection } from '../display/FrontFacingNode.js';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* TSL object that represents the tangent attribute of the current rendered object.
|
|
@@ -35,28 +37,34 @@ export const tangentLocal = /*@__PURE__*/ tangentGeometry.xyz.toVar( 'tangentLoc
|
|
|
35
37
|
* @tsl
|
|
36
38
|
* @type {Node<vec3>}
|
|
37
39
|
*/
|
|
38
|
-
export const tangentView = /*@__PURE__*/
|
|
40
|
+
export const tangentView = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, material } ) => {
|
|
39
41
|
|
|
40
|
-
|
|
41
|
-
* TSL object that represents the vertex tangent in world space of the current rendered object.
|
|
42
|
-
*
|
|
43
|
-
* @tsl
|
|
44
|
-
* @type {Node<vec3>}
|
|
45
|
-
*/
|
|
46
|
-
export const tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraViewMatrix ).toVarying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' );
|
|
42
|
+
let node;
|
|
47
43
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
44
|
+
if ( subBuildFn === 'VERTEX' || geometry.hasAttribute( 'tangent' ) ) {
|
|
45
|
+
|
|
46
|
+
node = modelViewMatrix.mul( vec4( tangentLocal, 0 ) ).xyz.toVarying( 'v_tangentView' ).normalize();
|
|
47
|
+
|
|
48
|
+
} else {
|
|
49
|
+
|
|
50
|
+
node = tangentViewFrame;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if ( material.flatShading !== true ) {
|
|
55
|
+
|
|
56
|
+
node = directionToFaceDirection( node );
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return node;
|
|
61
|
+
|
|
62
|
+
}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'tangentView' );
|
|
55
63
|
|
|
56
64
|
/**
|
|
57
|
-
* TSL object that represents the
|
|
65
|
+
* TSL object that represents the vertex tangent in world space of the current rendered object.
|
|
58
66
|
*
|
|
59
67
|
* @tsl
|
|
60
68
|
* @type {Node<vec3>}
|
|
61
69
|
*/
|
|
62
|
-
export const
|
|
70
|
+
export const tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraViewMatrix ).toVarying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' );
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { uv as getUV } from './UV.js';
|
|
2
|
+
import { positionView } from './Position.js';
|
|
3
|
+
import { normalView } from './Normal.js';
|
|
4
|
+
|
|
5
|
+
// Normal Mapping Without Precomputed Tangents
|
|
6
|
+
// http://www.thetenthplanet.de/archives/1180
|
|
7
|
+
|
|
8
|
+
const uv = getUV();
|
|
9
|
+
|
|
10
|
+
const q0 = positionView.dFdx();
|
|
11
|
+
const q1 = positionView.dFdy();
|
|
12
|
+
const st0 = uv.dFdx();
|
|
13
|
+
const st1 = uv.dFdy();
|
|
14
|
+
|
|
15
|
+
const N = normalView;
|
|
16
|
+
|
|
17
|
+
const q1perp = q1.cross( N );
|
|
18
|
+
const q0perp = N.cross( q0 );
|
|
19
|
+
|
|
20
|
+
const T = q1perp.mul( st0.x ).add( q0perp.mul( st1.x ) );
|
|
21
|
+
const B = q1perp.mul( st0.y ).add( q0perp.mul( st1.y ) );
|
|
22
|
+
|
|
23
|
+
const det = T.dot( T ).max( B.dot( B ) );
|
|
24
|
+
const scale = det.equal( 0.0 ).select( 0.0, det.inverseSqrt() );
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Tangent vector in view space, computed dynamically from geometry and UV derivatives.
|
|
28
|
+
* Useful for normal mapping without precomputed tangents.
|
|
29
|
+
*
|
|
30
|
+
* Reference: http://www.thetenthplanet.de/archives/1180
|
|
31
|
+
*
|
|
32
|
+
* @tsl
|
|
33
|
+
* @type {Node<vec3>}
|
|
34
|
+
*/
|
|
35
|
+
export const tangentViewFrame = /*@__PURE__*/ T.mul( scale ).toVar( 'tangentViewFrame' );
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Bitangent vector in view space, computed dynamically from geometry and UV derivatives.
|
|
39
|
+
* Complements the tangentViewFrame for constructing the tangent space basis.
|
|
40
|
+
*
|
|
41
|
+
* Reference: http://www.thetenthplanet.de/archives/1180
|
|
42
|
+
*
|
|
43
|
+
* @tsl
|
|
44
|
+
* @type {Node<vec3>}
|
|
45
|
+
*/
|
|
46
|
+
export const bitangentViewFrame = /*@__PURE__*/ B.mul( scale ).toVar( 'bitangentViewFrame' );
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { add, mul, div } from '../math/OperatorNode.js';
|
|
2
2
|
import { floor, ceil, fract, pow } from '../math/MathNode.js';
|
|
3
|
-
import { Fn,
|
|
3
|
+
import { Fn, vec2, vec4, int } from '../tsl/TSLBase.js';
|
|
4
|
+
import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
|
|
4
5
|
|
|
5
6
|
// Mipped Bicubic Texture Filtering by N8
|
|
6
7
|
// https://www.shadertoy.com/view/Dl2SDW
|
|
@@ -57,10 +58,10 @@ const bicubic = ( textureNode, texelSize, lod ) => {
|
|
|
57
58
|
* @tsl
|
|
58
59
|
* @function
|
|
59
60
|
* @param {TextureNode} textureNode - The texture node that should be filtered.
|
|
60
|
-
* @param {Node<float>}
|
|
61
|
+
* @param {Node<float>} lodNode - Defines the LOD to sample from.
|
|
61
62
|
* @return {Node} The filtered texture sample.
|
|
62
63
|
*/
|
|
63
|
-
export const
|
|
64
|
+
export const textureBicubicLevel = /*@__PURE__*/ Fn( ( [ textureNode, lodNode ] ) => {
|
|
64
65
|
|
|
65
66
|
const fLodSize = vec2( textureNode.size( int( lodNode ) ) );
|
|
66
67
|
const cLodSize = vec2( textureNode.size( int( lodNode.add( 1.0 ) ) ) );
|
|
@@ -72,3 +73,20 @@ export const textureBicubic = /*@__PURE__*/ Fn( ( [ textureNode, lodNode = float
|
|
|
72
73
|
return fract( lodNode ).mix( fSample, cSample );
|
|
73
74
|
|
|
74
75
|
} );
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Applies mipped bicubic texture filtering to the given texture node.
|
|
79
|
+
*
|
|
80
|
+
* @tsl
|
|
81
|
+
* @function
|
|
82
|
+
* @param {TextureNode} textureNode - The texture node that should be filtered.
|
|
83
|
+
* @param {Node<float>} [strength] - Defines the strength of the bicubic filtering.
|
|
84
|
+
* @return {Node} The filtered texture sample.
|
|
85
|
+
*/
|
|
86
|
+
export const textureBicubic = /*@__PURE__*/ Fn( ( [ textureNode, strength ] ) => {
|
|
87
|
+
|
|
88
|
+
const lod = strength.mul( maxMipLevel( textureNode ) );
|
|
89
|
+
|
|
90
|
+
return textureBicubicLevel( textureNode, lod );
|
|
91
|
+
|
|
92
|
+
} );
|
|
@@ -9,6 +9,10 @@ import { NodeUpdateType } from '../core/constants.js';
|
|
|
9
9
|
|
|
10
10
|
import { IntType, NearestFilter, UnsignedIntType } from '../../constants.js';
|
|
11
11
|
|
|
12
|
+
import { Texture } from '../../textures/Texture.js';
|
|
13
|
+
|
|
14
|
+
const EmptyTexture = /*@__PURE__*/ new Texture();
|
|
15
|
+
|
|
12
16
|
/**
|
|
13
17
|
* This type of uniform node represents a 2D texture.
|
|
14
18
|
*
|
|
@@ -25,12 +29,12 @@ class TextureNode extends UniformNode {
|
|
|
25
29
|
/**
|
|
26
30
|
* Constructs a new texture node.
|
|
27
31
|
*
|
|
28
|
-
* @param {Texture} value - The texture.
|
|
32
|
+
* @param {Texture} [value=EmptyTexture] - The texture.
|
|
29
33
|
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
30
34
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
31
35
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
32
36
|
*/
|
|
33
|
-
constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
|
|
37
|
+
constructor( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) {
|
|
34
38
|
|
|
35
39
|
super( value );
|
|
36
40
|
|
|
@@ -266,7 +270,7 @@ class TextureNode extends UniformNode {
|
|
|
266
270
|
setUpdateMatrix( value ) {
|
|
267
271
|
|
|
268
272
|
this.updateMatrix = value;
|
|
269
|
-
this.updateType = value ? NodeUpdateType.
|
|
273
|
+
this.updateType = value ? NodeUpdateType.OBJECT : NodeUpdateType.NONE;
|
|
270
274
|
|
|
271
275
|
return this;
|
|
272
276
|
|
|
@@ -328,7 +332,7 @@ class TextureNode extends UniformNode {
|
|
|
328
332
|
|
|
329
333
|
if ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {
|
|
330
334
|
|
|
331
|
-
uvNode = builder.context.getUV( this );
|
|
335
|
+
uvNode = builder.context.getUV( this, builder );
|
|
332
336
|
|
|
333
337
|
}
|
|
334
338
|
|
|
@@ -564,7 +568,7 @@ class TextureNode extends UniformNode {
|
|
|
564
568
|
|
|
565
569
|
const map = textureNode.value;
|
|
566
570
|
|
|
567
|
-
if ( map && map.generateMipmaps === false || map.minFilter === NearestFilter || map.magFilter === NearestFilter ) {
|
|
571
|
+
if ( textureNode.generateMipmaps === false && ( map && map.generateMipmaps === false || map.minFilter === NearestFilter || map.magFilter === NearestFilter ) ) {
|
|
568
572
|
|
|
569
573
|
console.warn( 'THREE.TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture.' );
|
|
570
574
|
|
|
@@ -720,6 +724,9 @@ class TextureNode extends UniformNode {
|
|
|
720
724
|
|
|
721
725
|
const newNode = new this.constructor( this.value, this.uvNode, this.levelNode, this.biasNode );
|
|
722
726
|
newNode.sampler = this.sampler;
|
|
727
|
+
newNode.depthNode = this.depthNode;
|
|
728
|
+
newNode.compareNode = this.compareNode;
|
|
729
|
+
newNode.gradNode = this.gradNode;
|
|
723
730
|
|
|
724
731
|
return newNode;
|
|
725
732
|
|
|
@@ -734,20 +741,64 @@ export default TextureNode;
|
|
|
734
741
|
*
|
|
735
742
|
* @tsl
|
|
736
743
|
* @function
|
|
737
|
-
* @param {Texture} value - The texture.
|
|
744
|
+
* @param {?Texture} value - The texture.
|
|
738
745
|
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
739
746
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
740
747
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
741
748
|
* @returns {TextureNode}
|
|
742
749
|
*/
|
|
743
|
-
|
|
750
|
+
const textureBase = /*@__PURE__*/ nodeProxy( TextureNode ).setParameterLength( 1, 4 ).setName( 'texture' );
|
|
751
|
+
|
|
752
|
+
/**
|
|
753
|
+
* TSL function for creating a texture node or sample a texture node already existing.
|
|
754
|
+
*
|
|
755
|
+
* @tsl
|
|
756
|
+
* @function
|
|
757
|
+
* @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
|
|
758
|
+
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
759
|
+
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
760
|
+
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
761
|
+
* @returns {TextureNode}
|
|
762
|
+
*/
|
|
763
|
+
export const texture = ( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) => {
|
|
764
|
+
|
|
765
|
+
let textureNode;
|
|
766
|
+
|
|
767
|
+
if ( value && value.isTextureNode === true ) {
|
|
768
|
+
|
|
769
|
+
textureNode = nodeObject( value.clone() );
|
|
770
|
+
textureNode.referenceNode = value.getSelf(); // Ensure the reference is set to the original node
|
|
771
|
+
|
|
772
|
+
if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
|
|
773
|
+
if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
|
|
774
|
+
if ( biasNode !== null ) textureNode.biasNode = nodeObject( biasNode );
|
|
775
|
+
|
|
776
|
+
} else {
|
|
777
|
+
|
|
778
|
+
textureNode = textureBase( value, uvNode, levelNode, biasNode );
|
|
779
|
+
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
return textureNode;
|
|
783
|
+
|
|
784
|
+
};
|
|
785
|
+
|
|
786
|
+
/**
|
|
787
|
+
* TSL function for creating a uniform texture node.
|
|
788
|
+
*
|
|
789
|
+
* @tsl
|
|
790
|
+
* @function
|
|
791
|
+
* @param {?Texture} value - The texture.
|
|
792
|
+
* @returns {TextureNode}
|
|
793
|
+
*/
|
|
794
|
+
export const uniformTexture = ( value = EmptyTexture ) => texture( value );
|
|
744
795
|
|
|
745
796
|
/**
|
|
746
797
|
* TSL function for creating a texture node that fetches/loads texels without interpolation.
|
|
747
798
|
*
|
|
748
799
|
* @tsl
|
|
749
800
|
* @function
|
|
750
|
-
* @param {Texture} value - The texture.
|
|
801
|
+
* @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
|
|
751
802
|
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
752
803
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
753
804
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
@@ -346,19 +346,3 @@ export default UniformArrayNode;
|
|
|
346
346
|
* @returns {UniformArrayNode}
|
|
347
347
|
*/
|
|
348
348
|
export const uniformArray = ( values, nodeType ) => nodeObject( new UniformArrayNode( values, nodeType ) );
|
|
349
|
-
|
|
350
|
-
/**
|
|
351
|
-
* @tsl
|
|
352
|
-
* @function
|
|
353
|
-
* @deprecated since r168. Use {@link uniformArray} instead.
|
|
354
|
-
*
|
|
355
|
-
* @param {Array<any>} values - Array-like data.
|
|
356
|
-
* @param {string} nodeType - The data type of the array elements.
|
|
357
|
-
* @returns {UniformArrayNode}
|
|
358
|
-
*/
|
|
359
|
-
export const uniforms = ( values, nodeType ) => { // @deprecated, r168
|
|
360
|
-
|
|
361
|
-
console.warn( 'THREE.TSL: uniforms() has been renamed to uniformArray().' );
|
|
362
|
-
return nodeObject( new UniformArrayNode( values, nodeType ) );
|
|
363
|
-
|
|
364
|
-
};
|
|
@@ -18,9 +18,9 @@ class VertexColorNode extends AttributeNode {
|
|
|
18
18
|
/**
|
|
19
19
|
* Constructs a new vertex color node.
|
|
20
20
|
*
|
|
21
|
-
* @param {number}
|
|
21
|
+
* @param {number} index - The attribute index.
|
|
22
22
|
*/
|
|
23
|
-
constructor( index
|
|
23
|
+
constructor( index ) {
|
|
24
24
|
|
|
25
25
|
super( null, 'vec4' );
|
|
26
26
|
|
|
@@ -104,7 +104,7 @@ export default VertexColorNode;
|
|
|
104
104
|
*
|
|
105
105
|
* @tsl
|
|
106
106
|
* @function
|
|
107
|
-
* @param {number} index - The attribute index.
|
|
107
|
+
* @param {number} [index=0] - The attribute index.
|
|
108
108
|
* @returns {VertexColorNode}
|
|
109
109
|
*/
|
|
110
|
-
export const vertexColor = ( index ) => nodeObject( new VertexColorNode( index ) );
|
|
110
|
+
export const vertexColor = ( index = 0 ) => nodeObject( new VertexColorNode( index ) );
|
|
@@ -36,6 +36,14 @@ class CodeNode extends Node {
|
|
|
36
36
|
*/
|
|
37
37
|
this.isCodeNode = true;
|
|
38
38
|
|
|
39
|
+
/**
|
|
40
|
+
* This flag is used for global cache.
|
|
41
|
+
*
|
|
42
|
+
* @type {boolean}
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
this.global = true;
|
|
46
|
+
|
|
39
47
|
/**
|
|
40
48
|
* The native code.
|
|
41
49
|
*
|
|
@@ -62,17 +70,6 @@ class CodeNode extends Node {
|
|
|
62
70
|
|
|
63
71
|
}
|
|
64
72
|
|
|
65
|
-
/**
|
|
66
|
-
* The method is overwritten so it always returns `true`.
|
|
67
|
-
*
|
|
68
|
-
* @return {boolean} Whether this node is global or not.
|
|
69
|
-
*/
|
|
70
|
-
isGlobal() {
|
|
71
|
-
|
|
72
|
-
return true;
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
73
|
/**
|
|
77
74
|
* Sets the includes of this code node.
|
|
78
75
|
*
|
|
@@ -40,6 +40,15 @@ class AssignNode extends TempNode {
|
|
|
40
40
|
*/
|
|
41
41
|
this.sourceNode = sourceNode;
|
|
42
42
|
|
|
43
|
+
/**
|
|
44
|
+
* This flag can be used for type testing.
|
|
45
|
+
*
|
|
46
|
+
* @type {boolean}
|
|
47
|
+
* @readonly
|
|
48
|
+
* @default true
|
|
49
|
+
*/
|
|
50
|
+
this.isAssignNode = true;
|
|
51
|
+
|
|
43
52
|
}
|
|
44
53
|
|
|
45
54
|
/**
|
|
@@ -84,15 +93,25 @@ class AssignNode extends TempNode {
|
|
|
84
93
|
|
|
85
94
|
}
|
|
86
95
|
|
|
87
|
-
|
|
96
|
+
setup( builder ) {
|
|
88
97
|
|
|
89
98
|
const { targetNode, sourceNode } = this;
|
|
90
99
|
|
|
100
|
+
const properties = builder.getNodeProperties( this );
|
|
101
|
+
properties.sourceNode = sourceNode;
|
|
102
|
+
properties.targetNode = targetNode.context( { assign: true } );
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
generate( builder, output ) {
|
|
107
|
+
|
|
108
|
+
const { targetNode, sourceNode } = builder.getNodeProperties( this );
|
|
109
|
+
|
|
91
110
|
const needsSplitAssign = this.needsSplitAssign( builder );
|
|
92
111
|
|
|
93
112
|
const targetType = targetNode.getNodeType( builder );
|
|
94
113
|
|
|
95
|
-
const target = targetNode.
|
|
114
|
+
const target = targetNode.build( builder );
|
|
96
115
|
const source = sourceNode.build( builder, targetType );
|
|
97
116
|
|
|
98
117
|
const sourceType = sourceNode.getNodeType( builder );
|
|
@@ -118,11 +137,14 @@ class AssignNode extends TempNode {
|
|
|
118
137
|
|
|
119
138
|
builder.addLineFlowCode( `${ sourceProperty } = ${ source }`, this );
|
|
120
139
|
|
|
121
|
-
const
|
|
140
|
+
const splitNode = targetNode.node;
|
|
141
|
+
const splitTargetNode = splitNode.node.context( { assign: true } );
|
|
142
|
+
|
|
143
|
+
const targetRoot = splitTargetNode.build( builder );
|
|
122
144
|
|
|
123
|
-
for ( let i = 0; i <
|
|
145
|
+
for ( let i = 0; i < splitNode.components.length; i ++ ) {
|
|
124
146
|
|
|
125
|
-
const component =
|
|
147
|
+
const component = splitNode.components[ i ];
|
|
126
148
|
|
|
127
149
|
builder.addLineFlowCode( `${ targetRoot }.${ component } = ${ sourceProperty }[ ${ i } ]`, this );
|
|
128
150
|
|
|
@@ -161,7 +161,7 @@ export default AttributeNode;
|
|
|
161
161
|
* @tsl
|
|
162
162
|
* @function
|
|
163
163
|
* @param {string} name - The name of the attribute.
|
|
164
|
-
* @param {string} [nodeType] - The node type.
|
|
164
|
+
* @param {?string} [nodeType=null] - The node type.
|
|
165
165
|
* @returns {AttributeNode}
|
|
166
166
|
*/
|
|
167
|
-
export const attribute = ( name, nodeType ) => nodeObject( new AttributeNode( name, nodeType ) );
|
|
167
|
+
export const attribute = ( name, nodeType = null ) => nodeObject( new AttributeNode( name, nodeType ) );
|
|
@@ -80,8 +80,14 @@ class ContextNode extends Node {
|
|
|
80
80
|
|
|
81
81
|
analyze( builder ) {
|
|
82
82
|
|
|
83
|
+
const previousContext = builder.getContext();
|
|
84
|
+
|
|
85
|
+
builder.setContext( { ...builder.context, ...this.value } );
|
|
86
|
+
|
|
83
87
|
this.node.build( builder );
|
|
84
88
|
|
|
89
|
+
builder.setContext( previousContext );
|
|
90
|
+
|
|
85
91
|
}
|
|
86
92
|
|
|
87
93
|
setup( builder ) {
|
|
@@ -90,12 +96,10 @@ class ContextNode extends Node {
|
|
|
90
96
|
|
|
91
97
|
builder.setContext( { ...builder.context, ...this.value } );
|
|
92
98
|
|
|
93
|
-
|
|
99
|
+
this.node.build( builder );
|
|
94
100
|
|
|
95
101
|
builder.setContext( previousContext );
|
|
96
102
|
|
|
97
|
-
return node;
|
|
98
|
-
|
|
99
103
|
}
|
|
100
104
|
|
|
101
105
|
generate( builder, output ) {
|