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
|
@@ -15,6 +15,7 @@ const opLib = {
|
|
|
15
15
|
'<=': 'lessThanEqual',
|
|
16
16
|
'>=': 'greaterThanEqual',
|
|
17
17
|
'==': 'equal',
|
|
18
|
+
'!=': 'notEqual',
|
|
18
19
|
'&&': 'and',
|
|
19
20
|
'||': 'or',
|
|
20
21
|
'^^': 'xor',
|
|
@@ -60,6 +61,8 @@ class TSLEncoder {
|
|
|
60
61
|
this.uniqueNames = false;
|
|
61
62
|
this.reference = false;
|
|
62
63
|
|
|
64
|
+
this._currentVariable = null;
|
|
65
|
+
|
|
63
66
|
this._currentProperties = {};
|
|
64
67
|
this._lastStatement = null;
|
|
65
68
|
|
|
@@ -320,9 +323,22 @@ class TSLEncoder {
|
|
|
320
323
|
|
|
321
324
|
let type = unaryLib[ node.type ];
|
|
322
325
|
|
|
323
|
-
if ( node.
|
|
326
|
+
if ( node.type === '++' || node.type === '--' ) {
|
|
327
|
+
|
|
328
|
+
if ( this._currentVariable === null ) {
|
|
329
|
+
|
|
330
|
+
// optimize increment/decrement operator
|
|
331
|
+
// to avoid creating a new variable
|
|
332
|
+
|
|
333
|
+
node.after = false;
|
|
334
|
+
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
if ( node.after === false ) {
|
|
324
338
|
|
|
325
|
-
|
|
339
|
+
type += 'Before';
|
|
340
|
+
|
|
341
|
+
}
|
|
326
342
|
|
|
327
343
|
}
|
|
328
344
|
|
|
@@ -450,12 +466,34 @@ ${ this.tab }} )`;
|
|
|
450
466
|
const name = node.initialization.name;
|
|
451
467
|
const type = node.initialization.type;
|
|
452
468
|
const condition = node.condition.type;
|
|
453
|
-
const update = node.afterthought.type;
|
|
454
469
|
|
|
455
470
|
const nameParam = name !== 'i' ? `, name: '${ name }'` : '';
|
|
456
471
|
const typeParam = type !== 'int' ? `, type: '${ type }'` : '';
|
|
457
472
|
const conditionParam = condition !== '<' ? `, condition: '${ condition }'` : '';
|
|
458
|
-
|
|
473
|
+
|
|
474
|
+
let updateParam = '';
|
|
475
|
+
|
|
476
|
+
if ( node.afterthought.isUnary ) {
|
|
477
|
+
|
|
478
|
+
if ( node.afterthought.type !== '++' ) {
|
|
479
|
+
|
|
480
|
+
updateParam = `, update: '${ node.afterthought.type }'`;
|
|
481
|
+
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
} else if ( node.afterthought.isOperator ) {
|
|
485
|
+
|
|
486
|
+
if ( node.afterthought.right.isAccessor || node.afterthought.right.isNumber ) {
|
|
487
|
+
|
|
488
|
+
updateParam = `, update: ${ this.emitExpression( node.afterthought.right ) }`;
|
|
489
|
+
|
|
490
|
+
} else {
|
|
491
|
+
|
|
492
|
+
updateParam = `, update: ( { i } ) => ${ this.emitExpression( node.afterthought ) }`;
|
|
493
|
+
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
}
|
|
459
497
|
|
|
460
498
|
let loopStr = `Loop( { start: ${ start }, end: ${ end + nameParam + typeParam + conditionParam + updateParam } }, ( { ${ name } } ) => {\n\n`;
|
|
461
499
|
|
|
@@ -475,8 +513,10 @@ ${ this.tab }} )`;
|
|
|
475
513
|
|
|
476
514
|
if ( ( initialization && initialization.isVariableDeclaration && initialization.next === null ) &&
|
|
477
515
|
( condition && condition.left.isAccessor && condition.left.property === initialization.name ) &&
|
|
478
|
-
( afterthought &&
|
|
479
|
-
|
|
516
|
+
( afterthought && (
|
|
517
|
+
( afterthought.isUnary && ( initialization.name === afterthought.expression.property ) ) ||
|
|
518
|
+
( afterthought.isOperator && ( initialization.name === afterthought.left.property ) )
|
|
519
|
+
) )
|
|
480
520
|
) {
|
|
481
521
|
|
|
482
522
|
return this.emitLoop( node );
|
|
@@ -496,7 +536,7 @@ ${ this.tab }} )`;
|
|
|
496
536
|
this.tab += '\t';
|
|
497
537
|
|
|
498
538
|
let forStr = '{\n\n' + this.tab + initialization + ';\n\n';
|
|
499
|
-
forStr += `${ this.tab }
|
|
539
|
+
forStr += `${ this.tab }Loop( ${ condition }, () => {\n\n`;
|
|
500
540
|
|
|
501
541
|
forStr += this.emitBody( node.body ) + '\n\n';
|
|
502
542
|
|
|
@@ -508,7 +548,7 @@ ${ this.tab }} )`;
|
|
|
508
548
|
|
|
509
549
|
forStr += this.tab + '}';
|
|
510
550
|
|
|
511
|
-
this.imports.add( '
|
|
551
|
+
this.imports.add( 'Loop' );
|
|
512
552
|
|
|
513
553
|
return forStr;
|
|
514
554
|
|
|
@@ -518,6 +558,8 @@ ${ this.tab }} )`;
|
|
|
518
558
|
|
|
519
559
|
const { name, type, value, next } = node;
|
|
520
560
|
|
|
561
|
+
this._currentVariable = node;
|
|
562
|
+
|
|
521
563
|
const valueStr = value ? this.emitExpression( value ) : '';
|
|
522
564
|
|
|
523
565
|
let varStr = isRoot ? 'const ' : '';
|
|
@@ -555,6 +597,8 @@ ${ this.tab }} )`;
|
|
|
555
597
|
|
|
556
598
|
this.addImport( type );
|
|
557
599
|
|
|
600
|
+
this._currentVariable = null;
|
|
601
|
+
|
|
558
602
|
return varStr;
|
|
559
603
|
|
|
560
604
|
}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* `Transpiler` can only be used to convert GLSL into TSL right now. It is intended
|
|
5
5
|
* to support developers when they want to migrate their custom materials from the
|
|
6
6
|
* current to the new node-based material system.
|
|
7
|
+
*
|
|
8
|
+
* @three_import import Transpiler from 'three/addons/transpiler/Transpiler.js';
|
|
7
9
|
*/
|
|
8
10
|
class Transpiler {
|
|
9
11
|
|
|
@@ -10,6 +10,7 @@ let _rendererState;
|
|
|
10
10
|
* Post processing node for creating an after image effect.
|
|
11
11
|
*
|
|
12
12
|
* @augments TempNode
|
|
13
|
+
* @three_import import { afterImage } from 'three/addons/tsl/display/AfterImageNode.js';
|
|
13
14
|
*/
|
|
14
15
|
class AfterImageNode extends TempNode {
|
|
15
16
|
|
|
@@ -143,6 +144,7 @@ class AfterImageNode extends TempNode {
|
|
|
143
144
|
this.textureNodeOld.value = this._oldRT.texture;
|
|
144
145
|
|
|
145
146
|
// comp
|
|
147
|
+
_quadMeshComp.material = this._materialComposed;
|
|
146
148
|
|
|
147
149
|
renderer.setRenderTarget( this._compRT );
|
|
148
150
|
_quadMeshComp.render( renderer );
|
|
@@ -202,9 +204,6 @@ class AfterImageNode extends TempNode {
|
|
|
202
204
|
const materialComposed = this._materialComposed || ( this._materialComposed = new NodeMaterial() );
|
|
203
205
|
materialComposed.name = 'AfterImage';
|
|
204
206
|
materialComposed.fragmentNode = afterImg();
|
|
205
|
-
|
|
206
|
-
_quadMeshComp.material = materialComposed;
|
|
207
|
-
|
|
208
207
|
//
|
|
209
208
|
|
|
210
209
|
const properties = builder.getNodeProperties( this );
|
|
@@ -6,6 +6,7 @@ import StereoCompositePassNode from './StereoCompositePassNode.js';
|
|
|
6
6
|
* A render pass node that creates an anaglyph effect.
|
|
7
7
|
*
|
|
8
8
|
* @augments StereoCompositePassNode
|
|
9
|
+
* @three_import import { anaglyphPass } from 'three/addons/tsl/display/AnaglyphPassNode.js';
|
|
9
10
|
*/
|
|
10
11
|
class AnaglyphPassNode extends StereoCompositePassNode {
|
|
11
12
|
|
|
@@ -9,6 +9,7 @@ let _rendererState;
|
|
|
9
9
|
* Post processing node for adding an anamorphic flare effect.
|
|
10
10
|
*
|
|
11
11
|
* @augments TempNode
|
|
12
|
+
* @three_import import { anamorphic } from 'three/addons/tsl/display/AnamorphicNode.js';
|
|
12
13
|
*/
|
|
13
14
|
class AnamorphicNode extends TempNode {
|
|
14
15
|
|
|
@@ -22,11 +23,11 @@ class AnamorphicNode extends TempNode {
|
|
|
22
23
|
* Constructs a new anamorphic node.
|
|
23
24
|
*
|
|
24
25
|
* @param {TextureNode} textureNode - The texture node that represents the input of the effect.
|
|
25
|
-
* @param {Node<float>}
|
|
26
|
+
* @param {Node<float>} thresholdNode - The threshold is one option to control the intensity and size of the effect.
|
|
26
27
|
* @param {Node<float>} scaleNode - Defines the vertical scale of the flares.
|
|
27
28
|
* @param {number} samples - More samples result in larger flares and a more expensive runtime behavior.
|
|
28
29
|
*/
|
|
29
|
-
constructor( textureNode,
|
|
30
|
+
constructor( textureNode, thresholdNode, scaleNode, samples ) {
|
|
30
31
|
|
|
31
32
|
super( 'vec4' );
|
|
32
33
|
|
|
@@ -42,7 +43,7 @@ class AnamorphicNode extends TempNode {
|
|
|
42
43
|
*
|
|
43
44
|
* @type {Node<float>}
|
|
44
45
|
*/
|
|
45
|
-
this.
|
|
46
|
+
this.thresholdNode = thresholdNode;
|
|
46
47
|
|
|
47
48
|
/**
|
|
48
49
|
* Defines the vertical scale of the flares.
|
|
@@ -202,7 +203,7 @@ class AnamorphicNode extends TempNode {
|
|
|
202
203
|
|
|
203
204
|
const uv = vec2( uvNode.x.add( this._invSize.x.mul( i ).mul( this.scaleNode ) ), uvNode.y );
|
|
204
205
|
const color = sampleTexture( uv );
|
|
205
|
-
const pass = threshold( color, this.
|
|
206
|
+
const pass = threshold( color, this.thresholdNode ).mul( softness );
|
|
206
207
|
|
|
207
208
|
total.addAssign( pass );
|
|
208
209
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DataTexture, RepeatWrapping, Vector2, Vector3, TempNode } from 'three/webgpu';
|
|
2
|
-
import { texture, getNormalFromDepth, getViewPosition, convertToTexture, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, luminance, vec2, vec3, vec4, uniformArray, int, dot, max, pow, abs, If, textureSize, sin, cos, mat2, PI } from 'three/tsl';
|
|
2
|
+
import { texture, getNormalFromDepth, getViewPosition, convertToTexture, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, luminance, vec2, vec3, vec4, uniformArray, int, dot, max, pow, abs, If, textureSize, sin, cos, mat2, PI, property } from 'three/tsl';
|
|
3
3
|
import { SimplexNoise } from '../../math/SimplexNoise.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -11,6 +11,7 @@ import { SimplexNoise } from '../../math/SimplexNoise.js';
|
|
|
11
11
|
* Reference: {@link https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf}.
|
|
12
12
|
*
|
|
13
13
|
* @augments TempNode
|
|
14
|
+
* @three_import import { denoise } from 'three/addons/tsl/display/DenoiseNode.js';
|
|
14
15
|
*/
|
|
15
16
|
class DenoiseNode extends TempNode {
|
|
16
17
|
|
|
@@ -186,59 +187,58 @@ class DenoiseNode extends TempNode {
|
|
|
186
187
|
const viewNormal = sampleNormal( uvNode ).toVar();
|
|
187
188
|
|
|
188
189
|
const texel = sampleTexture( uvNode ).toVar();
|
|
190
|
+
const result = property( 'vec4' );
|
|
189
191
|
|
|
190
192
|
If( depth.greaterThanEqual( 1.0 ).or( dot( viewNormal, viewNormal ).equal( 0.0 ) ), () => {
|
|
191
193
|
|
|
192
|
-
|
|
194
|
+
result.assign( texel );
|
|
193
195
|
|
|
194
|
-
} )
|
|
196
|
+
} ).Else( () => {
|
|
195
197
|
|
|
196
|
-
|
|
198
|
+
const center = vec3( texel.rgb );
|
|
197
199
|
|
|
198
|
-
|
|
200
|
+
const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toConst();
|
|
199
201
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
202
|
+
const noiseResolution = textureSize( this.noiseNode, 0 );
|
|
203
|
+
let noiseUv = vec2( uvNode.x, uvNode.y.oneMinus() );
|
|
204
|
+
noiseUv = noiseUv.mul( this._resolution.div( noiseResolution ) );
|
|
205
|
+
const noiseTexel = sampleNoise( noiseUv ).toVar();
|
|
204
206
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
+
const x = sin( noiseTexel.element( this.index.mod( 4 ).mul( 2 ).mul( PI ) ) );
|
|
208
|
+
const y = cos( noiseTexel.element( this.index.mod( 4 ).mul( 2 ).mul( PI ) ) );
|
|
207
209
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
+
const noiseVec = vec2( x, y );
|
|
211
|
+
const rotationMatrix = mat2( noiseVec.x, noiseVec.y.negate(), noiseVec.x, noiseVec.y );
|
|
210
212
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
+
const totalWeight = float( 1.0 ).toVar();
|
|
214
|
+
const denoised = vec3( texel.rgb ).toVar();
|
|
213
215
|
|
|
214
|
-
|
|
216
|
+
Loop( { start: int( 0 ), end: int( 16 ), type: 'int', condition: '<' }, ( { i } ) => {
|
|
215
217
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
218
|
+
const sampleDir = this._sampleVectors.element( i );
|
|
219
|
+
const offset = rotationMatrix.mul( sampleDir.xy.mul( float( 1.0 ).add( sampleDir.z.mul( this.radius.sub( 1 ) ) ) ) ).div( this._resolution );
|
|
220
|
+
const sampleUv = uvNode.add( offset );
|
|
219
221
|
|
|
220
|
-
|
|
222
|
+
const sampleResult = denoiseSample( center, viewNormal, viewPosition, sampleUv );
|
|
221
223
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
+
denoised.addAssign( sampleResult.xyz );
|
|
225
|
+
totalWeight.addAssign( sampleResult.w );
|
|
224
226
|
|
|
225
|
-
|
|
227
|
+
} );
|
|
228
|
+
|
|
229
|
+
If( totalWeight.greaterThan( float( 0 ) ), () => {
|
|
226
230
|
|
|
227
|
-
|
|
231
|
+
denoised.divAssign( totalWeight );
|
|
228
232
|
|
|
229
|
-
|
|
233
|
+
} );
|
|
234
|
+
|
|
235
|
+
result.assign( vec4( denoised, texel.a ) );
|
|
230
236
|
|
|
231
237
|
} );
|
|
232
238
|
|
|
233
|
-
return
|
|
239
|
+
return result;
|
|
234
240
|
|
|
235
|
-
} )
|
|
236
|
-
name: 'denoise',
|
|
237
|
-
type: 'vec4',
|
|
238
|
-
inputs: [
|
|
239
|
-
{ name: 'uv', type: 'vec2' }
|
|
240
|
-
]
|
|
241
|
-
} );
|
|
241
|
+
}/*, { uv: 'vec2', return: 'vec4' }*/ );
|
|
242
242
|
|
|
243
243
|
const output = Fn( () => {
|
|
244
244
|
|
|
@@ -5,6 +5,7 @@ import { convertToTexture, nodeObject, Fn, uv, uniform, vec2, vec4, clamp } from
|
|
|
5
5
|
* Post processing node for creating depth of field (DOF) effect.
|
|
6
6
|
*
|
|
7
7
|
* @augments TempNode
|
|
8
|
+
* @three_import import { dof } from 'three/addons/tsl/display/DepthOfFieldNode.js';
|
|
8
9
|
*/
|
|
9
10
|
class DepthOfFieldNode extends TempNode {
|
|
10
11
|
|
|
@@ -5,6 +5,7 @@ import { nodeObject, Fn, uv, uniform, vec2, vec3, sin, cos, add, vec4, screenSiz
|
|
|
5
5
|
* Post processing node for creating dot-screen effect.
|
|
6
6
|
*
|
|
7
7
|
* @augments TempNode
|
|
8
|
+
* @three_import import { dotScreen } from 'three/addons/tsl/display/DotScreenNode.js';
|
|
8
9
|
*/
|
|
9
10
|
class DotScreenNode extends TempNode {
|
|
10
11
|
|
|
@@ -6,6 +6,7 @@ import { nodeObject, Fn, uniformArray, select, float, NodeUpdateType, uv, dot, c
|
|
|
6
6
|
* so tone mapping and color space conversion must happen before the anti-aliasing.
|
|
7
7
|
*
|
|
8
8
|
* @augments TempNode
|
|
9
|
+
* @three_import import { fxaa } from 'three/addons/tsl/display/FXAANode.js';
|
|
9
10
|
*/
|
|
10
11
|
class FXAANode extends TempNode {
|
|
11
12
|
|
|
@@ -122,8 +123,8 @@ class FXAANode extends TempNode {
|
|
|
122
123
|
const se = SampleLuminanceOffset( texSize, uv, 1.0, 1.0 );
|
|
123
124
|
const sw = SampleLuminanceOffset( texSize, uv, - 1.0, 1.0 );
|
|
124
125
|
|
|
125
|
-
const highest = max(
|
|
126
|
-
const lowest = min(
|
|
126
|
+
const highest = max( s, e, n, w, m );
|
|
127
|
+
const lowest = min( s, e, n, w, m );
|
|
127
128
|
const contrast = highest.sub( lowest );
|
|
128
129
|
|
|
129
130
|
return { m, n, e, s, w, ne, nw, se, sw, highest, lowest, contrast };
|
|
@@ -5,6 +5,7 @@ import { rand, Fn, fract, time, uv, clamp, mix, vec4, nodeProxy } from 'three/ts
|
|
|
5
5
|
* Post processing node for creating a film grain effect.
|
|
6
6
|
*
|
|
7
7
|
* @augments TempNode
|
|
8
|
+
* @three_import import { film } from 'three/addons/tsl/display/FilmNode.js';
|
|
8
9
|
*/
|
|
9
10
|
class FilmNode extends TempNode {
|
|
10
11
|
|
|
@@ -29,6 +29,7 @@ let _rendererState;
|
|
|
29
29
|
* Reference: {@link https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf}.
|
|
30
30
|
*
|
|
31
31
|
* @augments TempNode
|
|
32
|
+
* @three_import import { ao } from 'three/addons/tsl/display/GTAONode.js';
|
|
32
33
|
*/
|
|
33
34
|
class GTAONode extends TempNode {
|
|
34
35
|
|
|
@@ -1,40 +1,15 @@
|
|
|
1
1
|
import { RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, TempNode, NodeUpdateType } from 'three/webgpu';
|
|
2
|
-
import { nodeObject, Fn,
|
|
2
|
+
import { nodeObject, Fn, float, uv, uniform, convertToTexture, vec2, vec4, passTexture, mul, premult, unpremult } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
|
|
6
6
|
let _rendererState;
|
|
7
7
|
|
|
8
|
-
const premult = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
9
|
-
|
|
10
|
-
return vec4( color.rgb.mul( color.a ), color.a );
|
|
11
|
-
|
|
12
|
-
} ).setLayout( {
|
|
13
|
-
name: 'premult',
|
|
14
|
-
type: 'vec4',
|
|
15
|
-
inputs: [
|
|
16
|
-
{ name: 'color', type: 'vec4' }
|
|
17
|
-
]
|
|
18
|
-
} );
|
|
19
|
-
|
|
20
|
-
const unpremult = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
21
|
-
|
|
22
|
-
If( color.a.equal( 0.0 ), () => vec4( 0.0 ) );
|
|
23
|
-
|
|
24
|
-
return vec4( color.rgb.div( color.a ), color.a );
|
|
25
|
-
|
|
26
|
-
} ).setLayout( {
|
|
27
|
-
name: 'unpremult',
|
|
28
|
-
type: 'vec4',
|
|
29
|
-
inputs: [
|
|
30
|
-
{ name: 'color', type: 'vec4' }
|
|
31
|
-
]
|
|
32
|
-
} );
|
|
33
|
-
|
|
34
8
|
/**
|
|
35
9
|
* Post processing node for creating a gaussian blur effect.
|
|
36
10
|
*
|
|
37
11
|
* @augments TempNode
|
|
12
|
+
* @three_import import { gaussianBlur, premultipliedGaussianBlur } from 'three/addons/tsl/display/GaussianBlurNode.js';
|
|
38
13
|
*/
|
|
39
14
|
class GaussianBlurNode extends TempNode {
|
|
40
15
|
|
|
@@ -14,6 +14,7 @@ let _rendererState;
|
|
|
14
14
|
* - {@link https://john-chapman.github.io/2017/11/05/pseudo-lens-flare.html}.
|
|
15
15
|
*
|
|
16
16
|
* @augments TempNode
|
|
17
|
+
* @three_import import { lensflare } from 'three/addons/tsl/display/LensflareNode.js';
|
|
17
18
|
*/
|
|
18
19
|
class LensflareNode extends TempNode {
|
|
19
20
|
|
|
@@ -5,6 +5,7 @@ import { nodeObject, Fn, float, uniform, vec3, vec4, mix } from 'three/tsl';
|
|
|
5
5
|
* A post processing node for color grading via lookup tables.
|
|
6
6
|
*
|
|
7
7
|
* @augments TempNode
|
|
8
|
+
* @three_import import { lut3D } from 'three/addons/tsl/display/Lut3DNode.js';
|
|
8
9
|
*/
|
|
9
10
|
class Lut3DNode extends TempNode {
|
|
10
11
|
|
|
@@ -6,6 +6,7 @@ import StereoCompositePassNode from './StereoCompositePassNode.js';
|
|
|
6
6
|
* A render pass node that creates a parallax barrier effect.
|
|
7
7
|
*
|
|
8
8
|
* @augments StereoCompositePassNode
|
|
9
|
+
* @three_import import { parallaxBarrierPass } from 'three/addons/tsl/display/ParallaxBarrierPassNode.js';
|
|
9
10
|
*/
|
|
10
11
|
class ParallaxBarrierPassNode extends StereoCompositePassNode {
|
|
11
12
|
|
|
@@ -219,6 +219,7 @@ const pixelation = ( node, depthNode, normalNode, pixelSize = 6, normalEdgeStren
|
|
|
219
219
|
* A special render pass node that renders the scene with a pixelation effect.
|
|
220
220
|
*
|
|
221
221
|
* @augments PassNode
|
|
222
|
+
* @three_import import { pixelationPass } from 'three/addons/tsl/display/PixelationPassNode.js';
|
|
222
223
|
*/
|
|
223
224
|
class PixelationPassNode extends PassNode {
|
|
224
225
|
|
|
@@ -6,6 +6,7 @@ import { nodeObject, Fn, uv, uniform, vec2, sin, cos, vec4, convertToTexture } f
|
|
|
6
6
|
* separates color channels and offsets them from each other.
|
|
7
7
|
*
|
|
8
8
|
* @augments TempNode
|
|
9
|
+
* @three_import import { rgbShift } from 'three/addons/tsl/display/RGBShiftNode.js';
|
|
9
10
|
*/
|
|
10
11
|
class RGBShiftNode extends TempNode {
|
|
11
12
|
|
|
@@ -15,6 +15,7 @@ let _rendererState;
|
|
|
15
15
|
* Reference: {@link https://github.com/iryoku/smaa/releases/tag/v2.8}.
|
|
16
16
|
*
|
|
17
17
|
* @augments TempNode
|
|
18
|
+
* @three_import import { smaa } from 'three/addons/tsl/display/SMAANode.js';
|
|
18
19
|
*/
|
|
19
20
|
class SMAANode extends TempNode {
|
|
20
21
|
|
|
@@ -320,11 +321,11 @@ class SMAANode extends TempNode {
|
|
|
320
321
|
// Calculate left and top deltas:
|
|
321
322
|
const Cleft = this.textureNode.sample( vOffset0.xy ).rgb.toVar();
|
|
322
323
|
let t = abs( C.sub( Cleft ) );
|
|
323
|
-
delta.x = max(
|
|
324
|
+
delta.x = max( t.r, t.g, t.b );
|
|
324
325
|
|
|
325
326
|
const Ctop = this.textureNode.sample( vOffset0.zw ).rgb.toVar();
|
|
326
327
|
t = abs( C.sub( Ctop ) );
|
|
327
|
-
delta.y = max(
|
|
328
|
+
delta.y = max( t.r, t.g, t.b );
|
|
328
329
|
|
|
329
330
|
// We do the usual threshold:
|
|
330
331
|
const edges = step( threshold, delta.xy ).toVar();
|
|
@@ -335,26 +336,26 @@ class SMAANode extends TempNode {
|
|
|
335
336
|
// Calculate right and bottom deltas:
|
|
336
337
|
const Cright = this.textureNode.sample( vOffset1.xy ).rgb.toVar();
|
|
337
338
|
t = abs( C.sub( Cright ) );
|
|
338
|
-
delta.z = max(
|
|
339
|
+
delta.z = max( t.r, t.g, t.b );
|
|
339
340
|
|
|
340
341
|
const Cbottom = this.textureNode.sample( vOffset1.zw ).rgb.toVar();
|
|
341
342
|
t = abs( C.sub( Cbottom ) );
|
|
342
|
-
delta.w = max(
|
|
343
|
+
delta.w = max( t.r, t.g, t.b );
|
|
343
344
|
|
|
344
345
|
// Calculate the maximum delta in the direct neighborhood:
|
|
345
|
-
let maxDelta = max(
|
|
346
|
+
let maxDelta = max( delta.x, delta.y, delta.z, delta.w ).toVar();
|
|
346
347
|
|
|
347
348
|
// Calculate left-left and top-top deltas:
|
|
348
349
|
const Cleftleft = this.textureNode.sample( vOffset2.xy ).rgb.toVar();
|
|
349
350
|
t = abs( C.sub( Cleftleft ) );
|
|
350
|
-
delta.z = max(
|
|
351
|
+
delta.z = max( t.r, t.g, t.b );
|
|
351
352
|
|
|
352
353
|
const Ctoptop = this.textureNode.sample( vOffset2.zw ).rgb.toVar();
|
|
353
354
|
t = abs( C.sub( Ctoptop ) );
|
|
354
|
-
delta.w = max(
|
|
355
|
+
delta.w = max( t.r, t.g, t.b );
|
|
355
356
|
|
|
356
357
|
// Calculate the final maximum delta:
|
|
357
|
-
maxDelta = max(
|
|
358
|
+
maxDelta = max( maxDelta, delta.z, delta.w );
|
|
358
359
|
|
|
359
360
|
// Local contrast adaptation in action:
|
|
360
361
|
edges.xy.mulAssign( vec2( step( float( 0.5 ).mul( maxDelta ), delta.xy ) ) );
|
|
@@ -15,6 +15,7 @@ let _rendererState;
|
|
|
15
15
|
* Reference: {@link https://en.wikipedia.org/wiki/Supersampling}
|
|
16
16
|
*
|
|
17
17
|
* @augments PassNode
|
|
18
|
+
* @three_import import { ssaaPass } from 'three/addons/tsl/display/SSAAPassNode.js';
|
|
18
19
|
*/
|
|
19
20
|
class SSAAPassNode extends PassNode {
|
|
20
21
|
|
|
@@ -113,7 +114,7 @@ class SSAAPassNode extends PassNode {
|
|
|
113
114
|
const { renderer } = frame;
|
|
114
115
|
const { scene, camera } = this;
|
|
115
116
|
|
|
116
|
-
_rendererState = RendererUtils.
|
|
117
|
+
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
|
|
117
118
|
|
|
118
119
|
//
|
|
119
120
|
|
|
@@ -229,7 +230,7 @@ class SSAAPassNode extends PassNode {
|
|
|
229
230
|
|
|
230
231
|
//
|
|
231
232
|
|
|
232
|
-
RendererUtils.
|
|
233
|
+
RendererUtils.restoreRendererState( renderer, _rendererState );
|
|
233
234
|
|
|
234
235
|
}
|
|
235
236
|
|
|
@@ -11,6 +11,7 @@ let _rendererState;
|
|
|
11
11
|
* Reference: {@link https://lettier.github.io/3d-game-shaders-for-beginners/screen-space-reflection.html}
|
|
12
12
|
*
|
|
13
13
|
* @augments TempNode
|
|
14
|
+
* @three_import import { ssr } from 'three/addons/tsl/display/SSRNode.js';
|
|
14
15
|
*/
|
|
15
16
|
class SSRNode extends TempNode {
|
|
16
17
|
|
|
@@ -7,6 +7,7 @@ import { nodeObject, Fn, uv, uniform, convertToTexture, vec2, vec3, vec4, mat3,
|
|
|
7
7
|
* space conversion.
|
|
8
8
|
*
|
|
9
9
|
* @augments TempNode
|
|
10
|
+
* @three_import import { sobel } from 'three/addons/tsl/display/SobelOperatorNode.js';
|
|
10
11
|
*/
|
|
11
12
|
class SobelOperatorNode extends TempNode {
|
|
12
13
|
|
|
@@ -9,6 +9,7 @@ let _rendererState;
|
|
|
9
9
|
* A special render pass node that renders the scene as a stereoscopic image.
|
|
10
10
|
*
|
|
11
11
|
* @augments PassNode
|
|
12
|
+
* @three_import import { stereoPass } from 'three/addons/tsl/display/StereoPassNode.js';
|
|
12
13
|
*/
|
|
13
14
|
class StereoPassNode extends PassNode {
|
|
14
15
|
|
|
@@ -17,6 +17,7 @@ let _rendererState;
|
|
|
17
17
|
* - {@link https://www.elopezr.com/temporal-aa-and-the-quest-for-the-holy-trail/}
|
|
18
18
|
*
|
|
19
19
|
* @augments PassNode
|
|
20
|
+
* @three_import import { traaPass } from 'three/addons/tsl/display/TRAAPassNode.js';
|
|
20
21
|
*/
|
|
21
22
|
class TRAAPassNode extends PassNode {
|
|
22
23
|
|
|
@@ -153,7 +154,7 @@ class TRAAPassNode extends PassNode {
|
|
|
153
154
|
const { renderer } = frame;
|
|
154
155
|
const { scene, camera } = this;
|
|
155
156
|
|
|
156
|
-
_rendererState = RendererUtils.
|
|
157
|
+
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
|
|
157
158
|
|
|
158
159
|
//
|
|
159
160
|
|
|
@@ -291,7 +292,7 @@ class TRAAPassNode extends PassNode {
|
|
|
291
292
|
|
|
292
293
|
velocityOutput.setProjectionMatrix( null );
|
|
293
294
|
|
|
294
|
-
RendererUtils.
|
|
295
|
+
RendererUtils.restoreRendererState( renderer, _rendererState );
|
|
295
296
|
|
|
296
297
|
}
|
|
297
298
|
|
|
@@ -379,8 +380,8 @@ class TRAAPassNode extends PassNode {
|
|
|
379
380
|
const currentWeight = float( 0.05 ).toVar();
|
|
380
381
|
const historyWeight = currentWeight.oneMinus().toVar();
|
|
381
382
|
|
|
382
|
-
const compressedCurrent = currentColor.mul( float( 1 ).div( ( max(
|
|
383
|
-
const compressedHistory = clampedHistoryColor.mul( float( 1 ).div( ( max(
|
|
383
|
+
const compressedCurrent = currentColor.mul( float( 1 ).div( ( max( currentColor.r, currentColor.g, currentColor.b ).add( 1.0 ) ) ) );
|
|
384
|
+
const compressedHistory = clampedHistoryColor.mul( float( 1 ).div( ( max( clampedHistoryColor.r, clampedHistoryColor.g, clampedHistoryColor.b ).add( 1.0 ) ) ) );
|
|
384
385
|
|
|
385
386
|
const luminanceCurrent = luminance( compressedCurrent.rgb );
|
|
386
387
|
const luminanceHistory = luminance( compressedHistory.rgb );
|
|
@@ -5,6 +5,7 @@ import { nodeObject, Fn, float, uv, convertToTexture, vec4, If, int, clamp, sub,
|
|
|
5
5
|
* Post processing node for creating a transition effect between scenes.
|
|
6
6
|
*
|
|
7
7
|
* @augments TempNode
|
|
8
|
+
* @three_import import { transition } from 'three/addons/tsl/display/TransitionNode.js';
|
|
8
9
|
*/
|
|
9
10
|
class TransitionNode extends TempNode {
|
|
10
11
|
|