@plastic-software/three 0.175.14 → 0.178.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/build/three.cjs +7746 -6791
- package/build/three.core.js +7371 -6576
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +189 -29
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +19 -11
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +4989 -2235
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +5082 -2469
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -1
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +18 -4
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +49 -35
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +12 -10
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +2 -1
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +7 -0
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +1 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +1 -0
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +1 -0
- package/examples/jsm/loaders/USDZLoader.js +1 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/Timer.js +2 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +1 -0
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +20 -17
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +139 -12
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +4 -3
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +5 -2
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +1 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +1 -1
- package/src/Three.TSL.js +18 -10
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/SkeletonHelper.js +1 -1
- package/src/lights/LightShadow.js +14 -0
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +2 -2
- package/src/loaders/ImageBitmapLoader.js +25 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +105 -19
- package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +6 -1
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +2 -3
- package/src/nodes/TSL.js +5 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +31 -4
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +102 -16
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +14 -3
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +59 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +69 -20
- package/src/nodes/core/NodeBuilder.js +248 -29
- package/src/nodes/core/NodeUtils.js +42 -0
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +129 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/VarNode.js +11 -2
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +18 -19
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +14 -14
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +78 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/lib/mx_noise.js +1 -1
- package/src/nodes/math/ConditionalNode.js +0 -19
- package/src/nodes/math/MathNode.js +68 -21
- package/src/nodes/math/OperatorNode.js +108 -98
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +160 -65
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +13 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +16 -4
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +25 -11
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Storage3DTexture.js +79 -0
- package/src/renderers/common/StorageArrayTexture.js +63 -0
- package/src/renderers/common/Textures.js +15 -21
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +157 -27
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLPrograms.js +4 -2
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +144 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +451 -128
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +2 -1
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/Source.js +22 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +1 -1
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -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
|
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { Vector2, TempNode } from 'three/webgpu';
|
|
2
|
+
import {
|
|
3
|
+
nodeObject,
|
|
4
|
+
Fn,
|
|
5
|
+
uniform,
|
|
6
|
+
convertToTexture,
|
|
7
|
+
float,
|
|
8
|
+
vec4,
|
|
9
|
+
uv,
|
|
10
|
+
NodeUpdateType,
|
|
11
|
+
} from 'three/tsl';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Post processing node for applying chromatic aberration effect.
|
|
15
|
+
* This effect simulates the color fringing that occurs in real camera lenses
|
|
16
|
+
* by separating and offsetting the red, green, and blue channels.
|
|
17
|
+
*
|
|
18
|
+
* @augments TempNode
|
|
19
|
+
* @three_import import { chromaticAberration } from 'three/addons/tsl/display/ChromaticAberrationNode.js';
|
|
20
|
+
*/
|
|
21
|
+
class ChromaticAberrationNode extends TempNode {
|
|
22
|
+
|
|
23
|
+
static get type() {
|
|
24
|
+
|
|
25
|
+
return 'ChromaticAberrationNode';
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new chromatic aberration node.
|
|
31
|
+
*
|
|
32
|
+
* @param {TextureNode} textureNode - The texture node that represents the input of the effect.
|
|
33
|
+
* @param {Node} strengthNode - The strength of the chromatic aberration effect as a node.
|
|
34
|
+
* @param {Node} centerNode - The center point of the effect as a node.
|
|
35
|
+
* @param {Node} scaleNode - The scale factor for stepped scaling from center as a node.
|
|
36
|
+
*/
|
|
37
|
+
constructor( textureNode, strengthNode, centerNode, scaleNode ) {
|
|
38
|
+
|
|
39
|
+
super( 'vec4' );
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The texture node that represents the input of the effect.
|
|
43
|
+
*
|
|
44
|
+
* @type {texture}
|
|
45
|
+
*/
|
|
46
|
+
this.textureNode = textureNode;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
|
|
50
|
+
* its internal uniforms once per frame in `updateBefore()`.
|
|
51
|
+
*
|
|
52
|
+
* @type {string}
|
|
53
|
+
* @default 'frame'
|
|
54
|
+
*/
|
|
55
|
+
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* A node holding the strength of the effect.
|
|
59
|
+
*
|
|
60
|
+
* @type {Node}
|
|
61
|
+
*/
|
|
62
|
+
this.strengthNode = strengthNode;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* A node holding the center point of the effect.
|
|
66
|
+
*
|
|
67
|
+
* @type {Node}
|
|
68
|
+
*/
|
|
69
|
+
this.centerNode = centerNode;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* A node holding the scale factor for stepped scaling.
|
|
73
|
+
*
|
|
74
|
+
* @type {Node}
|
|
75
|
+
*/
|
|
76
|
+
this.scaleNode = scaleNode;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* A uniform node holding the inverse resolution value.
|
|
80
|
+
*
|
|
81
|
+
* @private
|
|
82
|
+
* @type {UniformNode<vec2>}
|
|
83
|
+
*/
|
|
84
|
+
this._invSize = uniform( new Vector2() );
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* This method is used to update the effect's uniforms once per frame.
|
|
90
|
+
*
|
|
91
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
92
|
+
*/
|
|
93
|
+
updateBefore( /* frame */ ) {
|
|
94
|
+
|
|
95
|
+
const map = this.textureNode.value;
|
|
96
|
+
this._invSize.value.set( 1 / map.image.width, 1 / map.image.height );
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* This method is used to setup the effect's TSL code.
|
|
102
|
+
*
|
|
103
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
104
|
+
* @return {ShaderCallNodeInternal}
|
|
105
|
+
*/
|
|
106
|
+
setup( /* builder */ ) {
|
|
107
|
+
|
|
108
|
+
const textureNode = this.textureNode;
|
|
109
|
+
const uvNode = textureNode.uvNode || uv();
|
|
110
|
+
|
|
111
|
+
const ApplyChromaticAberration = Fn( ( [ uv, strength, center, scale ] ) => {
|
|
112
|
+
|
|
113
|
+
// Calculate distance from center
|
|
114
|
+
const offset = uv.sub( center );
|
|
115
|
+
const distance = offset.length();
|
|
116
|
+
|
|
117
|
+
// Create stepped scaling zones based on distance
|
|
118
|
+
// Each channel gets different scaling steps
|
|
119
|
+
const redScale = float( 1.0 ).add( scale.mul( 0.02 ).mul( strength ) ); // Red channel scaled outward
|
|
120
|
+
const greenScale = float( 1.0 ); // Green stays at original scale
|
|
121
|
+
const blueScale = float( 1.0 ).sub( scale.mul( 0.02 ).mul( strength ) ); // Blue channel scaled inward
|
|
122
|
+
|
|
123
|
+
// Create radial distortion based on distance from center
|
|
124
|
+
const aberrationStrength = strength.mul( distance );
|
|
125
|
+
|
|
126
|
+
// Calculate scaled UV coordinates for each channel
|
|
127
|
+
const redUV = center.add( offset.mul( redScale ) );
|
|
128
|
+
const greenUV = center.add( offset.mul( greenScale ) );
|
|
129
|
+
const blueUV = center.add( offset.mul( blueScale ) );
|
|
130
|
+
|
|
131
|
+
// Apply additional chromatic offset based on aberration strength
|
|
132
|
+
const rOffset = offset.mul( aberrationStrength ).mul( float( 0.01 ) );
|
|
133
|
+
const gOffset = offset.mul( aberrationStrength ).mul( float( 0.0 ) );
|
|
134
|
+
const bOffset = offset.mul( aberrationStrength ).mul( float( - 0.01 ) );
|
|
135
|
+
|
|
136
|
+
// Final UV coordinates combining scale and chromatic aberration
|
|
137
|
+
const finalRedUV = redUV.add( rOffset );
|
|
138
|
+
const finalGreenUV = greenUV.add( gOffset );
|
|
139
|
+
const finalBlueUV = blueUV.add( bOffset );
|
|
140
|
+
|
|
141
|
+
// Sample texture for each channel
|
|
142
|
+
const r = textureNode.sample( finalRedUV ).r;
|
|
143
|
+
const g = textureNode.sample( finalGreenUV ).g;
|
|
144
|
+
const b = textureNode.sample( finalBlueUV ).b;
|
|
145
|
+
|
|
146
|
+
// Get original alpha
|
|
147
|
+
const a = textureNode.sample( uv ).a;
|
|
148
|
+
|
|
149
|
+
return vec4( r, g, b, a );
|
|
150
|
+
|
|
151
|
+
} ).setLayout( {
|
|
152
|
+
name: 'ChromaticAberrationShader',
|
|
153
|
+
type: 'vec4',
|
|
154
|
+
inputs: [
|
|
155
|
+
{ name: 'uv', type: 'vec2' },
|
|
156
|
+
{ name: 'strength', type: 'float' },
|
|
157
|
+
{ name: 'center', type: 'vec2' },
|
|
158
|
+
{ name: 'scale', type: 'float' },
|
|
159
|
+
{ name: 'invSize', type: 'vec2' }
|
|
160
|
+
]
|
|
161
|
+
} );
|
|
162
|
+
|
|
163
|
+
const chromaticAberrationFn = Fn( () => {
|
|
164
|
+
|
|
165
|
+
return ApplyChromaticAberration(
|
|
166
|
+
uvNode,
|
|
167
|
+
this.strengthNode,
|
|
168
|
+
this.centerNode,
|
|
169
|
+
this.scaleNode,
|
|
170
|
+
this._invSize
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
} );
|
|
174
|
+
|
|
175
|
+
const outputNode = chromaticAberrationFn();
|
|
176
|
+
|
|
177
|
+
return outputNode;
|
|
178
|
+
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export default ChromaticAberrationNode;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* TSL function for creating a chromatic aberration node for post processing.
|
|
187
|
+
*
|
|
188
|
+
* @tsl
|
|
189
|
+
* @function
|
|
190
|
+
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
191
|
+
* @param {Node|number} [strength=1.0] - The strength of the chromatic aberration effect as a node or value.
|
|
192
|
+
* @param {Node|Vector2} [center=null] - The center point of the effect as a node or value. If null, uses screen center (0.5, 0.5).
|
|
193
|
+
* @param {Node|number} [scale=1.1] - The scale factor for stepped scaling from center as a node or value.
|
|
194
|
+
* @returns {ChromaticAberrationNode}
|
|
195
|
+
*/
|
|
196
|
+
export const chromaticAberration = ( node, strength = 1.0, center = null, scale = 1.1 ) => {
|
|
197
|
+
|
|
198
|
+
return nodeObject(
|
|
199
|
+
new ChromaticAberrationNode(
|
|
200
|
+
convertToTexture( node ),
|
|
201
|
+
nodeObject( strength ),
|
|
202
|
+
nodeObject( center ),
|
|
203
|
+
nodeObject( scale )
|
|
204
|
+
)
|
|
205
|
+
);
|
|
206
|
+
};
|
|
@@ -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, premultiplyAlpha, unpremultiplyAlpha } 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
|
|
|
@@ -274,8 +249,8 @@ class GaussianBlurNode extends TempNode {
|
|
|
274
249
|
|
|
275
250
|
// https://lisyarus.github.io/blog/posts/blur-coefficients-generator.html
|
|
276
251
|
|
|
277
|
-
sampleTexture = ( uv ) =>
|
|
278
|
-
output = ( color ) =>
|
|
252
|
+
sampleTexture = ( uv ) => premultiplyAlpha( textureNode.sample( uv ) );
|
|
253
|
+
output = ( color ) => unpremultiplyAlpha( color );
|
|
279
254
|
|
|
280
255
|
} else {
|
|
281
256
|
|
|
@@ -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 ) ) );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AdditiveBlending, Color, Vector2, RendererUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
|
|
2
|
-
import { nodeObject, uniform, mrt, texture, getTextureIndex } from 'three/tsl';
|
|
2
|
+
import { nodeObject, uniform, mrt, texture, getTextureIndex, unpremultiplyAlpha } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _size = /*@__PURE__*/ new Vector2();
|
|
5
5
|
|
|
@@ -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
|
|
|
@@ -276,7 +277,7 @@ class SSAAPassNode extends PassNode {
|
|
|
276
277
|
}
|
|
277
278
|
|
|
278
279
|
this._quadMesh.material = new NodeMaterial();
|
|
279
|
-
this._quadMesh.material.fragmentNode = sampleTexture;
|
|
280
|
+
this._quadMesh.material.fragmentNode = unpremultiplyAlpha( sampleTexture );
|
|
280
281
|
this._quadMesh.material.transparent = true;
|
|
281
282
|
this._quadMesh.material.depthTest = false;
|
|
282
283
|
this._quadMesh.material.depthWrite = false;
|
|
@@ -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
|
|