super-three 0.176.0 → 0.177.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 +7631 -6743
- package/build/three.core.js +7496 -6758
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +172 -22
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +14 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +3948 -1678
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +3941 -1678
- 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 -0
- package/examples/jsm/capabilities/WebGPU.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +14 -3
- 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 +1 -0
- 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 +1 -0
- 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 +5 -4
- 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 +24 -22
- 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 +58 -1
- 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 +5 -6
- 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/GLSLDecoder.js +1 -2
- package/examples/jsm/transpiler/TSLEncoder.js +52 -8
- package/examples/jsm/transpiler/Transpiler.js +2 -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/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 +2 -27
- 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 +3 -2
- 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 +13 -5
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -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 +1 -1
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Object3D.js +22 -21
- 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/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/ImageBitmapLoader.js +21 -5
- 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/NodeMaterial.js +81 -18
- 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/FrustumArray.js +253 -0
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +1 -0
- package/src/nodes/accessors/Bitangent.js +31 -9
- 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 +26 -6
- package/src/nodes/accessors/Object3DNode.js +6 -7
- 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/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +14 -3
- package/src/nodes/accessors/TextureNode.js +59 -8
- 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/CacheNode.js +14 -0
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +68 -19
- package/src/nodes/core/NodeBuilder.js +100 -12
- 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 +127 -2
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/VarNode.js +11 -2
- package/src/nodes/core/VaryingNode.js +40 -21
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/PassNode.js +8 -11
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- 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/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +25 -7
- 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 +172 -240
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/lib/mx_noise.js +1 -1
- package/src/nodes/math/MathNode.js +56 -20
- package/src/nodes/math/OperatorNode.js +109 -82
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLCore.js +140 -49
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/LoopNode.js +64 -17
- package/src/nodes/utils/ReflectorNode.js +67 -4
- 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 +21 -10
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +11 -0
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +12 -1
- package/src/renderers/common/Renderer.js +116 -8
- 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 +154 -25
- package/src/renderers/common/extras/PMREMGenerator.js +29 -22
- 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/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLTextures.js +143 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +170 -34
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -7
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +42 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +442 -127
- 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 +75 -27
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +34 -4
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +44 -49
- 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
|
@@ -236,6 +236,48 @@ export function getLengthFromType( type ) {
|
|
|
236
236
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
|
+
/**
|
|
240
|
+
* Returns the gpu memory length for the given data type.
|
|
241
|
+
*
|
|
242
|
+
* @method
|
|
243
|
+
* @param {string} type - The data type.
|
|
244
|
+
* @return {number} The length.
|
|
245
|
+
*/
|
|
246
|
+
export function getMemoryLengthFromType( type ) {
|
|
247
|
+
|
|
248
|
+
if ( /float|int|uint/.test( type ) ) return 1;
|
|
249
|
+
if ( /vec2/.test( type ) ) return 2;
|
|
250
|
+
if ( /vec3/.test( type ) ) return 3;
|
|
251
|
+
if ( /vec4/.test( type ) ) return 4;
|
|
252
|
+
if ( /mat2/.test( type ) ) return 4;
|
|
253
|
+
if ( /mat3/.test( type ) ) return 12;
|
|
254
|
+
if ( /mat4/.test( type ) ) return 16;
|
|
255
|
+
|
|
256
|
+
console.error( 'THREE.TSL: Unsupported type:', type );
|
|
257
|
+
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Returns the byte boundary for the given data type.
|
|
262
|
+
*
|
|
263
|
+
* @method
|
|
264
|
+
* @param {string} type - The data type.
|
|
265
|
+
* @return {number} The byte boundary.
|
|
266
|
+
*/
|
|
267
|
+
export function getByteBoundaryFromType( type ) {
|
|
268
|
+
|
|
269
|
+
if ( /float|int|uint/.test( type ) ) return 4;
|
|
270
|
+
if ( /vec2/.test( type ) ) return 8;
|
|
271
|
+
if ( /vec3/.test( type ) ) return 16;
|
|
272
|
+
if ( /vec4/.test( type ) ) return 16;
|
|
273
|
+
if ( /mat2/.test( type ) ) return 8;
|
|
274
|
+
if ( /mat3/.test( type ) ) return 48;
|
|
275
|
+
if ( /mat4/.test( type ) ) return 64;
|
|
276
|
+
|
|
277
|
+
console.error( 'THREE.TSL: Unsupported type:', type );
|
|
278
|
+
|
|
279
|
+
}
|
|
280
|
+
|
|
239
281
|
/**
|
|
240
282
|
* Returns the data type for the given value.
|
|
241
283
|
*
|
|
@@ -15,8 +15,10 @@ class NodeVarying extends NodeVar {
|
|
|
15
15
|
*
|
|
16
16
|
* @param {string} name - The name of the varying.
|
|
17
17
|
* @param {string} type - The type of the varying.
|
|
18
|
+
* @param {?string} interpolationType - The interpolation type of the varying.
|
|
19
|
+
* @param {?string} interpolationSampling - The interpolation sampling type of the varying.
|
|
18
20
|
*/
|
|
19
|
-
constructor( name, type ) {
|
|
21
|
+
constructor( name, type, interpolationType = null, interpolationSampling = null ) {
|
|
20
22
|
|
|
21
23
|
super( name, type );
|
|
22
24
|
|
|
@@ -38,6 +40,22 @@ class NodeVarying extends NodeVar {
|
|
|
38
40
|
*/
|
|
39
41
|
this.isNodeVarying = true;
|
|
40
42
|
|
|
43
|
+
/**
|
|
44
|
+
* The interpolation type of the varying data.
|
|
45
|
+
*
|
|
46
|
+
* @type {?string}
|
|
47
|
+
* @default null
|
|
48
|
+
*/
|
|
49
|
+
this.interpolationType = interpolationType;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The interpolation sampling type of varying data.
|
|
53
|
+
*
|
|
54
|
+
* @type {?string}
|
|
55
|
+
* @default null
|
|
56
|
+
*/
|
|
57
|
+
this.interpolationSampling = interpolationSampling;
|
|
58
|
+
|
|
41
59
|
}
|
|
42
60
|
|
|
43
61
|
}
|
|
@@ -58,6 +58,14 @@ class PropertyNode extends Node {
|
|
|
58
58
|
*/
|
|
59
59
|
this.isPropertyNode = true;
|
|
60
60
|
|
|
61
|
+
/**
|
|
62
|
+
* This flag is used for global cache.
|
|
63
|
+
*
|
|
64
|
+
* @type {boolean}
|
|
65
|
+
* @default true
|
|
66
|
+
*/
|
|
67
|
+
this.global = true;
|
|
68
|
+
|
|
61
69
|
}
|
|
62
70
|
|
|
63
71
|
getHash( builder ) {
|
|
@@ -66,18 +74,6 @@ class PropertyNode extends Node {
|
|
|
66
74
|
|
|
67
75
|
}
|
|
68
76
|
|
|
69
|
-
/**
|
|
70
|
-
* The method is overwritten so it always returns `true`.
|
|
71
|
-
*
|
|
72
|
-
* @param {NodeBuilder} builder - The current node builder.
|
|
73
|
-
* @return {boolean} Whether this node is global or not.
|
|
74
|
-
*/
|
|
75
|
-
isGlobal( /*builder*/ ) {
|
|
76
|
-
|
|
77
|
-
return true;
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
77
|
generate( builder ) {
|
|
82
78
|
|
|
83
79
|
let nodeVar;
|
|
@@ -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,15 +153,130 @@ class StackNode extends Node {
|
|
|
143
153
|
|
|
144
154
|
}
|
|
145
155
|
|
|
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 ) {
|
|
164
|
+
|
|
165
|
+
this._expressionNode = nodeObject( expression );
|
|
166
|
+
|
|
167
|
+
return this;
|
|
168
|
+
|
|
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 ++ ) {
|
|
187
|
+
|
|
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.' );
|
|
195
|
+
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// extract method
|
|
199
|
+
|
|
200
|
+
const method = params[ params.length - 1 ];
|
|
201
|
+
const methodNode = new ShaderNode( method );
|
|
202
|
+
|
|
203
|
+
// chain multiple cases when using Case( 1, 2, 3, () => {} )
|
|
204
|
+
|
|
205
|
+
let caseNode = caseNodes[ 0 ];
|
|
206
|
+
|
|
207
|
+
for ( let i = 1; i < caseNodes.length; i ++ ) {
|
|
208
|
+
|
|
209
|
+
caseNode = caseNode.or( caseNodes[ i ] );
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// build condition
|
|
214
|
+
|
|
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
|
+
}
|
|
231
|
+
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Represents the default code block of a Switch/Case statement.
|
|
236
|
+
*
|
|
237
|
+
* @param {Function} method - TSL code which is executed in the `else` case.
|
|
238
|
+
* @return {StackNode} A reference to this stack node.
|
|
239
|
+
*/
|
|
240
|
+
Default( method ) {
|
|
241
|
+
|
|
242
|
+
this.Else( method );
|
|
243
|
+
|
|
244
|
+
return this;
|
|
245
|
+
|
|
246
|
+
}
|
|
247
|
+
|
|
146
248
|
build( builder, ...params ) {
|
|
147
249
|
|
|
148
250
|
const previousStack = getCurrentStack();
|
|
149
251
|
|
|
150
252
|
setCurrentStack( this );
|
|
151
253
|
|
|
254
|
+
const buildStage = builder.buildStage;
|
|
255
|
+
|
|
152
256
|
for ( const node of this.nodes ) {
|
|
153
257
|
|
|
154
|
-
|
|
258
|
+
if ( buildStage === 'setup' ) {
|
|
259
|
+
|
|
260
|
+
node.build( builder );
|
|
261
|
+
|
|
262
|
+
} else if ( buildStage === 'analyze' ) {
|
|
263
|
+
|
|
264
|
+
node.build( builder, this );
|
|
265
|
+
|
|
266
|
+
} else if ( buildStage === 'generate' ) {
|
|
267
|
+
|
|
268
|
+
const stages = builder.getDataFromNode( node, 'any' ).stages;
|
|
269
|
+
const parents = stages && stages[ builder.shaderStage ];
|
|
270
|
+
|
|
271
|
+
if ( node.isVarNode && parents && parents.length === 1 && parents[ 0 ] && parents[ 0 ].isStackNode ) {
|
|
272
|
+
|
|
273
|
+
continue; // skip var nodes that are only used in .toVarying()
|
|
274
|
+
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
node.build( builder, 'void' );
|
|
278
|
+
|
|
279
|
+
}
|
|
155
280
|
|
|
156
281
|
}
|
|
157
282
|
|
|
@@ -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
|
|
|
@@ -72,6 +72,15 @@ 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
|
+
|
|
75
84
|
}
|
|
76
85
|
|
|
77
86
|
getMemberType( builder, name ) {
|
|
@@ -167,7 +176,7 @@ const createVar = /*@__PURE__*/ nodeProxy( VarNode );
|
|
|
167
176
|
* @param {?string} name - The name of the variable in the shader.
|
|
168
177
|
* @returns {VarNode}
|
|
169
178
|
*/
|
|
170
|
-
export const Var = ( node, name = null ) => createVar( node, name ).
|
|
179
|
+
export const Var = ( node, name = null ) => createVar( node, name ).toStack();
|
|
171
180
|
|
|
172
181
|
/**
|
|
173
182
|
* TSL function for creating a const node.
|
|
@@ -178,7 +187,7 @@ export const Var = ( node, name = null ) => createVar( node, name ).append();
|
|
|
178
187
|
* @param {?string} name - The name of the constant in the shader.
|
|
179
188
|
* @returns {VarNode}
|
|
180
189
|
*/
|
|
181
|
-
export const Const = ( node, name = null ) => createVar( node, name, true ).
|
|
190
|
+
export const Const = ( node, name = null ) => createVar( node, name, true ).toStack();
|
|
182
191
|
|
|
183
192
|
// Method chaining
|
|
184
193
|
|
|
@@ -55,17 +55,45 @@ class VaryingNode extends Node {
|
|
|
55
55
|
*/
|
|
56
56
|
this.isVaryingNode = true;
|
|
57
57
|
|
|
58
|
+
/**
|
|
59
|
+
* The interpolation type of the varying data.
|
|
60
|
+
*
|
|
61
|
+
* @type {?string}
|
|
62
|
+
* @default null
|
|
63
|
+
*/
|
|
64
|
+
this.interpolationType = null;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The interpolation sampling type of varying data.
|
|
68
|
+
*
|
|
69
|
+
* @type {?string}
|
|
70
|
+
* @default null
|
|
71
|
+
*/
|
|
72
|
+
this.interpolationSampling = null;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* This flag is used for global cache.
|
|
76
|
+
*
|
|
77
|
+
* @type {boolean}
|
|
78
|
+
* @default true
|
|
79
|
+
*/
|
|
80
|
+
this.global = true;
|
|
81
|
+
|
|
58
82
|
}
|
|
59
83
|
|
|
60
84
|
/**
|
|
61
|
-
*
|
|
85
|
+
* Defines the interpolation type of the varying.
|
|
62
86
|
*
|
|
63
|
-
* @param {
|
|
64
|
-
* @
|
|
87
|
+
* @param {string} type - The interpolation type.
|
|
88
|
+
* @param {?string} sampling - The interpolation sampling type
|
|
89
|
+
* @return {VaryingNode} A reference to this node.
|
|
65
90
|
*/
|
|
66
|
-
|
|
91
|
+
setInterpolation( type, sampling = null ) {
|
|
92
|
+
|
|
93
|
+
this.interpolationType = type;
|
|
94
|
+
this.interpolationSampling = sampling;
|
|
67
95
|
|
|
68
|
-
return
|
|
96
|
+
return this;
|
|
69
97
|
|
|
70
98
|
}
|
|
71
99
|
|
|
@@ -99,8 +127,10 @@ class VaryingNode extends Node {
|
|
|
99
127
|
|
|
100
128
|
const name = this.name;
|
|
101
129
|
const type = this.getNodeType( builder );
|
|
130
|
+
const interpolationType = this.interpolationType;
|
|
131
|
+
const interpolationSampling = this.interpolationSampling;
|
|
102
132
|
|
|
103
|
-
properties.varying = varying = builder.getVaryingFromNode( this, name, type );
|
|
133
|
+
properties.varying = varying = builder.getVaryingFromNode( this, name, type, interpolationType, interpolationSampling );
|
|
104
134
|
properties.node = this.node;
|
|
105
135
|
|
|
106
136
|
}
|
|
@@ -116,13 +146,15 @@ class VaryingNode extends Node {
|
|
|
116
146
|
|
|
117
147
|
this.setupVarying( builder );
|
|
118
148
|
|
|
149
|
+
builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );
|
|
150
|
+
|
|
119
151
|
}
|
|
120
152
|
|
|
121
153
|
analyze( builder ) {
|
|
122
154
|
|
|
123
155
|
this.setupVarying( builder );
|
|
124
156
|
|
|
125
|
-
|
|
157
|
+
builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );
|
|
126
158
|
|
|
127
159
|
}
|
|
128
160
|
|
|
@@ -131,9 +163,7 @@ class VaryingNode extends Node {
|
|
|
131
163
|
const properties = builder.getNodeProperties( this );
|
|
132
164
|
const varying = this.setupVarying( builder );
|
|
133
165
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
if ( properties.propertyName === undefined || needsReassign ) {
|
|
166
|
+
if ( properties.propertyName === undefined ) {
|
|
137
167
|
|
|
138
168
|
const type = this.getNodeType( builder );
|
|
139
169
|
const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
|
|
@@ -143,17 +173,6 @@ class VaryingNode extends Node {
|
|
|
143
173
|
|
|
144
174
|
properties.propertyName = propertyName;
|
|
145
175
|
|
|
146
|
-
if ( needsReassign ) {
|
|
147
|
-
|
|
148
|
-
// once reassign varying in fragment stage
|
|
149
|
-
properties.reassignPosition = false;
|
|
150
|
-
|
|
151
|
-
} else if ( properties.reassignPosition === undefined && builder.context.isPositionNodeInput ) {
|
|
152
|
-
|
|
153
|
-
properties.reassignPosition = true;
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
176
|
}
|
|
158
177
|
|
|
159
178
|
return builder.getPropertyName( varying );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fn, vec4 } from '../tsl/TSLBase.js';
|
|
1
|
+
import { Fn, If, vec4 } from '../tsl/TSLBase.js';
|
|
2
2
|
import { mix, min, step } from '../math/MathNode.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -130,6 +130,47 @@ export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
|
130
130
|
]
|
|
131
131
|
} );
|
|
132
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Premultiplies the RGB channels of a color by its alpha channel.
|
|
135
|
+
*
|
|
136
|
+
* This function is useful for converting a non-premultiplied alpha color
|
|
137
|
+
* into a premultiplied alpha format, where the RGB values are scaled
|
|
138
|
+
* by the alpha value. Premultiplied alpha is often used in graphics
|
|
139
|
+
* rendering for certain operations, such as compositing and image processing.
|
|
140
|
+
*
|
|
141
|
+
* @tsl
|
|
142
|
+
* @function
|
|
143
|
+
* @param {Node<vec4>} color - The input color with non-premultiplied alpha.
|
|
144
|
+
* @return {Node<vec4>} The color with premultiplied alpha.
|
|
145
|
+
*/
|
|
146
|
+
export const premult = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
147
|
+
|
|
148
|
+
return vec4( color.rgb.mul( color.a ), color.a );
|
|
149
|
+
|
|
150
|
+
}, { color: 'vec4', return: 'vec4' } );
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Unpremultiplies the RGB channels of a color by its alpha channel.
|
|
154
|
+
*
|
|
155
|
+
* This function is useful for converting a premultiplied alpha color
|
|
156
|
+
* back into a non-premultiplied alpha format, where the RGB values are
|
|
157
|
+
* divided by the alpha value. Unpremultiplied alpha is often used in graphics
|
|
158
|
+
* rendering for certain operations, such as compositing and image processing.
|
|
159
|
+
*
|
|
160
|
+
* @tsl
|
|
161
|
+
* @function
|
|
162
|
+
* @param {Node<vec4>} color - The input color with premultiplied alpha.
|
|
163
|
+
* @return {Node<vec4>} The color with non-premultiplied alpha.
|
|
164
|
+
*/
|
|
165
|
+
export const unpremult = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
166
|
+
|
|
167
|
+
If( color.a.equal( 0.0 ), () => vec4( 0.0 ) );
|
|
168
|
+
|
|
169
|
+
return vec4( color.rgb.div( color.a ), color.a );
|
|
170
|
+
|
|
171
|
+
}, { color: 'vec4', return: 'vec4' } );
|
|
172
|
+
|
|
173
|
+
|
|
133
174
|
// Deprecated
|
|
134
175
|
|
|
135
176
|
/**
|
|
@@ -126,36 +126,16 @@ class ColorSpaceNode extends TempNode {
|
|
|
126
126
|
|
|
127
127
|
export default ColorSpaceNode;
|
|
128
128
|
|
|
129
|
-
/**
|
|
130
|
-
* TSL function for converting a given color node to the current output color space.
|
|
131
|
-
*
|
|
132
|
-
* @tsl
|
|
133
|
-
* @function
|
|
134
|
-
* @param {Node} node - Represents the node to convert.
|
|
135
|
-
* @returns {ColorSpaceNode}
|
|
136
|
-
*/
|
|
137
|
-
export const toOutputColorSpace = ( node ) => nodeObject( new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, OUTPUT_COLOR_SPACE ) );
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* TSL function for converting a given color node to the current working color space.
|
|
141
|
-
*
|
|
142
|
-
* @tsl
|
|
143
|
-
* @function
|
|
144
|
-
* @param {Node} node - Represents the node to convert.
|
|
145
|
-
* @returns {ColorSpaceNode}
|
|
146
|
-
*/
|
|
147
|
-
export const toWorkingColorSpace = ( node ) => nodeObject( new ColorSpaceNode( nodeObject( node ), OUTPUT_COLOR_SPACE, WORKING_COLOR_SPACE ) );
|
|
148
|
-
|
|
149
129
|
/**
|
|
150
130
|
* TSL function for converting a given color node from the current working color space to the given color space.
|
|
151
131
|
*
|
|
152
132
|
* @tsl
|
|
153
133
|
* @function
|
|
154
134
|
* @param {Node} node - Represents the node to convert.
|
|
155
|
-
* @param {string}
|
|
135
|
+
* @param {string} targetColorSpace - The target color space.
|
|
156
136
|
* @returns {ColorSpaceNode}
|
|
157
137
|
*/
|
|
158
|
-
export const workingToColorSpace = ( node,
|
|
138
|
+
export const workingToColorSpace = ( node, targetColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, targetColorSpace ) );
|
|
159
139
|
|
|
160
140
|
/**
|
|
161
141
|
* TSL function for converting a given color node from the given color space to the current working color space.
|
|
@@ -163,10 +143,10 @@ export const workingToColorSpace = ( node, colorSpace ) => nodeObject( new Color
|
|
|
163
143
|
* @tsl
|
|
164
144
|
* @function
|
|
165
145
|
* @param {Node} node - Represents the node to convert.
|
|
166
|
-
* @param {string}
|
|
146
|
+
* @param {string} sourceColorSpace - The source color space.
|
|
167
147
|
* @returns {ColorSpaceNode}
|
|
168
148
|
*/
|
|
169
|
-
export const colorSpaceToWorking = ( node,
|
|
149
|
+
export const colorSpaceToWorking = ( node, sourceColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), sourceColorSpace, WORKING_COLOR_SPACE ) );
|
|
170
150
|
|
|
171
151
|
/**
|
|
172
152
|
* TSL function for converting a given color node from one color space to another one.
|
|
@@ -180,8 +160,5 @@ export const colorSpaceToWorking = ( node, colorSpace ) => nodeObject( new Color
|
|
|
180
160
|
*/
|
|
181
161
|
export const convertColorSpace = ( node, sourceColorSpace, targetColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), sourceColorSpace, targetColorSpace ) );
|
|
182
162
|
|
|
183
|
-
addMethodChaining( 'toOutputColorSpace', toOutputColorSpace );
|
|
184
|
-
addMethodChaining( 'toWorkingColorSpace', toWorkingColorSpace );
|
|
185
|
-
|
|
186
163
|
addMethodChaining( 'workingToColorSpace', workingToColorSpace );
|
|
187
164
|
addMethodChaining( 'colorSpaceToWorking', colorSpaceToWorking );
|
|
@@ -336,6 +336,14 @@ class PassNode extends TempNode {
|
|
|
336
336
|
*/
|
|
337
337
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
338
338
|
|
|
339
|
+
/**
|
|
340
|
+
* This flag is used for global cache.
|
|
341
|
+
*
|
|
342
|
+
* @type {boolean}
|
|
343
|
+
* @default true
|
|
344
|
+
*/
|
|
345
|
+
this.global = true;
|
|
346
|
+
|
|
339
347
|
}
|
|
340
348
|
|
|
341
349
|
/**
|
|
@@ -404,17 +412,6 @@ class PassNode extends TempNode {
|
|
|
404
412
|
|
|
405
413
|
}
|
|
406
414
|
|
|
407
|
-
/**
|
|
408
|
-
* The method is overwritten so it always returns `true`.
|
|
409
|
-
*
|
|
410
|
-
* @return {boolean} Whether this node is global or not.
|
|
411
|
-
*/
|
|
412
|
-
isGlobal() {
|
|
413
|
-
|
|
414
|
-
return true;
|
|
415
|
-
|
|
416
|
-
}
|
|
417
|
-
|
|
418
415
|
/**
|
|
419
416
|
* Returns the texture for the given output name.
|
|
420
417
|
*
|
|
@@ -32,7 +32,11 @@ class ShadowMaskModel extends LightingModel {
|
|
|
32
32
|
*/
|
|
33
33
|
direct( { lightNode } ) {
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
if ( lightNode.shadowNode !== null ) {
|
|
36
|
+
|
|
37
|
+
this.shadowNode.mulAssign( lightNode.shadowNode );
|
|
38
|
+
|
|
39
|
+
}
|
|
36
40
|
|
|
37
41
|
}
|
|
38
42
|
|
|
@@ -28,7 +28,7 @@ const getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos
|
|
|
28
28
|
rbminmax.y = nDir.y.greaterThan( float( 0 ) ).select( rbmax.y, rbmin.y );
|
|
29
29
|
rbminmax.z = nDir.z.greaterThan( float( 0 ) ).select( rbmax.z, rbmin.z );
|
|
30
30
|
|
|
31
|
-
const correction = min(
|
|
31
|
+
const correction = min( rbminmax.x, rbminmax.y, rbminmax.z ).toVar();
|
|
32
32
|
const boxIntersection = positionWorld.add( nDir.mul( correction ) ).toVar();
|
|
33
33
|
return boxIntersection.sub( cubePos );
|
|
34
34
|
|