super-three 0.179.0 → 0.184.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/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -144
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -69,9 +69,9 @@ class AnamorphicNode extends TempNode {
|
|
|
69
69
|
/**
|
|
70
70
|
* The resolution scale.
|
|
71
71
|
*
|
|
72
|
-
* @type {
|
|
72
|
+
* @type {number}
|
|
73
73
|
*/
|
|
74
|
-
this.
|
|
74
|
+
this.resolutionScale = 1;
|
|
75
75
|
|
|
76
76
|
/**
|
|
77
77
|
* The internal render target of the effect.
|
|
@@ -98,6 +98,15 @@ class AnamorphicNode extends TempNode {
|
|
|
98
98
|
*/
|
|
99
99
|
this._textureNode = passTexture( this, this._renderTarget.texture );
|
|
100
100
|
|
|
101
|
+
/**
|
|
102
|
+
* The material for the anamorphic pass.
|
|
103
|
+
*
|
|
104
|
+
* @private
|
|
105
|
+
* @type {?NodeMaterial}
|
|
106
|
+
*/
|
|
107
|
+
this._material = null;
|
|
108
|
+
|
|
109
|
+
|
|
101
110
|
/**
|
|
102
111
|
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
|
|
103
112
|
* its effect once per frame in `updateBefore()`.
|
|
@@ -130,8 +139,8 @@ class AnamorphicNode extends TempNode {
|
|
|
130
139
|
|
|
131
140
|
this._invSize.value.set( 1 / width, 1 / height );
|
|
132
141
|
|
|
133
|
-
width = Math.max( Math.round( width * this.
|
|
134
|
-
height = Math.max( Math.round( height * this.
|
|
142
|
+
width = Math.max( Math.round( width * this.resolutionScale ), 1 );
|
|
143
|
+
height = Math.max( Math.round( height * this.resolutionScale ), 1 );
|
|
135
144
|
|
|
136
145
|
this._renderTarget.setSize( width, height );
|
|
137
146
|
|
|
@@ -158,6 +167,7 @@ class AnamorphicNode extends TempNode {
|
|
|
158
167
|
const currentTexture = textureNode.value;
|
|
159
168
|
|
|
160
169
|
_quadMesh.material = this._material;
|
|
170
|
+
_quadMesh.name = 'Anamorphic';
|
|
161
171
|
|
|
162
172
|
this.setSize( map.image.width, map.image.height );
|
|
163
173
|
|
|
@@ -238,6 +248,31 @@ class AnamorphicNode extends TempNode {
|
|
|
238
248
|
|
|
239
249
|
this._renderTarget.dispose();
|
|
240
250
|
|
|
251
|
+
if ( this._material !== null ) this._material.dispose();
|
|
252
|
+
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* The resolution scale.
|
|
257
|
+
*
|
|
258
|
+
* @deprecated
|
|
259
|
+
* @type {Vector2}
|
|
260
|
+
* @default {(1,1)}
|
|
261
|
+
*/
|
|
262
|
+
get resolution() {
|
|
263
|
+
|
|
264
|
+
console.warn( 'THREE.AnamorphicNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
|
|
265
|
+
|
|
266
|
+
return new Vector2( this.resolutionScale, this.resolutionScale );
|
|
267
|
+
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
set resolution( value ) {
|
|
271
|
+
|
|
272
|
+
console.warn( 'THREE.AnamorphicNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
|
|
273
|
+
|
|
274
|
+
this.resolutionScale = value.x;
|
|
275
|
+
|
|
241
276
|
}
|
|
242
277
|
|
|
243
278
|
}
|
|
@@ -253,6 +288,6 @@ class AnamorphicNode extends TempNode {
|
|
|
253
288
|
* @param {number} [samples=32] - More samples result in larger flares and a more expensive runtime behavior.
|
|
254
289
|
* @returns {AnamorphicNode}
|
|
255
290
|
*/
|
|
256
|
-
export const anamorphic = ( node, threshold = .9, scale = 3, samples = 32 ) =>
|
|
291
|
+
export const anamorphic = ( node, threshold = .9, scale = 3, samples = 32 ) => new AnamorphicNode( convertToTexture( node ), nodeObject( threshold ), nodeObject( scale ), samples );
|
|
257
292
|
|
|
258
293
|
export default AnamorphicNode;
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, TempNode, NodeUpdateType } from 'three/webgpu';
|
|
2
|
+
import { Fn, float, uv, uniform, convertToTexture, vec2, vec4, passTexture, luminance, abs, exp, max } from 'three/tsl';
|
|
3
|
+
|
|
4
|
+
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
|
+
|
|
6
|
+
let _rendererState;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Post processing node for creating a bilateral blur effect.
|
|
10
|
+
*
|
|
11
|
+
* Bilateral blur smooths an image while preserving sharp edges. Unlike a
|
|
12
|
+
* standard Gaussian blur which blurs everything equally, bilateral blur
|
|
13
|
+
* analyzes the intensity/color of neighboring pixels. If a neighbor is too
|
|
14
|
+
* different from the center pixel (indicating an edge), it is excluded
|
|
15
|
+
* from the blurring process.
|
|
16
|
+
*
|
|
17
|
+
* Reference: {@link https://en.wikipedia.org/wiki/Bilateral_filter}
|
|
18
|
+
*
|
|
19
|
+
* @augments TempNode
|
|
20
|
+
* @three_import import { bilateralBlur } from 'three/addons/tsl/display/BilateralBlurNode.js';
|
|
21
|
+
*/
|
|
22
|
+
class BilateralBlurNode extends TempNode {
|
|
23
|
+
|
|
24
|
+
static get type() {
|
|
25
|
+
|
|
26
|
+
return 'BilateralBlurNode';
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Constructs a new bilateral blur node.
|
|
32
|
+
*
|
|
33
|
+
* @param {TextureNode} textureNode - The texture node that represents the input of the effect.
|
|
34
|
+
* @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
|
|
35
|
+
* @param {number} sigma - Controls the spatial kernel of the blur filter. Higher values mean a wider blur radius.
|
|
36
|
+
* @param {number} sigmaColor - Controls the intensity kernel. Higher values allow more color difference to be blurred together.
|
|
37
|
+
*/
|
|
38
|
+
constructor( textureNode, directionNode = null, sigma = 4, sigmaColor = 0.1 ) {
|
|
39
|
+
|
|
40
|
+
super( 'vec4' );
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The texture node that represents the input of the effect.
|
|
44
|
+
*
|
|
45
|
+
* @type {TextureNode}
|
|
46
|
+
*/
|
|
47
|
+
this.textureNode = textureNode;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Defines the direction and radius of the blur.
|
|
51
|
+
*
|
|
52
|
+
* @type {Node<vec2|float>}
|
|
53
|
+
*/
|
|
54
|
+
this.directionNode = directionNode;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Controls the spatial kernel of the blur filter. Higher values mean a wider blur radius.
|
|
58
|
+
*
|
|
59
|
+
* @type {number}
|
|
60
|
+
*/
|
|
61
|
+
this.sigma = sigma;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Controls the color/intensity kernel. Higher values allow more color difference
|
|
65
|
+
* to be blurred together. Lower values preserve edges more strictly.
|
|
66
|
+
*
|
|
67
|
+
* @type {number}
|
|
68
|
+
*/
|
|
69
|
+
this.sigmaColor = sigmaColor;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* A uniform node holding the inverse resolution value.
|
|
73
|
+
*
|
|
74
|
+
* @private
|
|
75
|
+
* @type {UniformNode<vec2>}
|
|
76
|
+
*/
|
|
77
|
+
this._invSize = uniform( new Vector2() );
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Bilateral blur is applied in two passes (horizontal, vertical).
|
|
81
|
+
* This node controls the direction of each pass.
|
|
82
|
+
*
|
|
83
|
+
* @private
|
|
84
|
+
* @type {UniformNode<vec2>}
|
|
85
|
+
*/
|
|
86
|
+
this._passDirection = uniform( new Vector2() );
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The render target used for the horizontal pass.
|
|
90
|
+
*
|
|
91
|
+
* @private
|
|
92
|
+
* @type {RenderTarget}
|
|
93
|
+
*/
|
|
94
|
+
this._horizontalRT = new RenderTarget( 1, 1, { depthBuffer: false } );
|
|
95
|
+
this._horizontalRT.texture.name = 'BilateralBlurNode.horizontal';
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The render target used for the vertical pass.
|
|
99
|
+
*
|
|
100
|
+
* @private
|
|
101
|
+
* @type {RenderTarget}
|
|
102
|
+
*/
|
|
103
|
+
this._verticalRT = new RenderTarget( 1, 1, { depthBuffer: false } );
|
|
104
|
+
this._verticalRT.texture.name = 'BilateralBlurNode.vertical';
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The result of the effect is represented as a separate texture node.
|
|
108
|
+
*
|
|
109
|
+
* @private
|
|
110
|
+
* @type {PassTextureNode}
|
|
111
|
+
*/
|
|
112
|
+
this._textureNode = passTexture( this, this._verticalRT.texture );
|
|
113
|
+
this._textureNode.uvNode = textureNode.uvNode;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The material for the blur pass.
|
|
117
|
+
*
|
|
118
|
+
* @private
|
|
119
|
+
* @type {?NodeMaterial}
|
|
120
|
+
*/
|
|
121
|
+
this._material = null;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
|
|
125
|
+
* its effect once per frame in `updateBefore()`.
|
|
126
|
+
*
|
|
127
|
+
* @type {string}
|
|
128
|
+
* @default 'frame'
|
|
129
|
+
*/
|
|
130
|
+
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* The resolution scale.
|
|
134
|
+
*
|
|
135
|
+
* @type {number}
|
|
136
|
+
* @default 1
|
|
137
|
+
*/
|
|
138
|
+
this.resolutionScale = 1;
|
|
139
|
+
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Sets the size of the effect.
|
|
144
|
+
*
|
|
145
|
+
* @param {number} width - The width of the effect.
|
|
146
|
+
* @param {number} height - The height of the effect.
|
|
147
|
+
*/
|
|
148
|
+
setSize( width, height ) {
|
|
149
|
+
|
|
150
|
+
width = Math.max( Math.round( width * this.resolutionScale ), 1 );
|
|
151
|
+
height = Math.max( Math.round( height * this.resolutionScale ), 1 );
|
|
152
|
+
|
|
153
|
+
this._invSize.value.set( 1 / width, 1 / height );
|
|
154
|
+
this._horizontalRT.setSize( width, height );
|
|
155
|
+
this._verticalRT.setSize( width, height );
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* This method is used to render the effect once per frame.
|
|
161
|
+
*
|
|
162
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
163
|
+
*/
|
|
164
|
+
updateBefore( frame ) {
|
|
165
|
+
|
|
166
|
+
const { renderer } = frame;
|
|
167
|
+
|
|
168
|
+
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
|
|
169
|
+
|
|
170
|
+
//
|
|
171
|
+
|
|
172
|
+
const textureNode = this.textureNode;
|
|
173
|
+
const map = textureNode.value;
|
|
174
|
+
|
|
175
|
+
const currentTexture = textureNode.value;
|
|
176
|
+
|
|
177
|
+
_quadMesh.material = this._material;
|
|
178
|
+
|
|
179
|
+
this.setSize( map.image.width, map.image.height );
|
|
180
|
+
|
|
181
|
+
const textureType = map.type;
|
|
182
|
+
|
|
183
|
+
this._horizontalRT.texture.type = textureType;
|
|
184
|
+
this._verticalRT.texture.type = textureType;
|
|
185
|
+
|
|
186
|
+
// horizontal
|
|
187
|
+
|
|
188
|
+
renderer.setRenderTarget( this._horizontalRT );
|
|
189
|
+
|
|
190
|
+
this._passDirection.value.set( 1, 0 );
|
|
191
|
+
|
|
192
|
+
_quadMesh.name = 'Bilateral Blur [ Horizontal Pass ]';
|
|
193
|
+
_quadMesh.render( renderer );
|
|
194
|
+
|
|
195
|
+
// vertical
|
|
196
|
+
|
|
197
|
+
textureNode.value = this._horizontalRT.texture;
|
|
198
|
+
renderer.setRenderTarget( this._verticalRT );
|
|
199
|
+
|
|
200
|
+
this._passDirection.value.set( 0, 1 );
|
|
201
|
+
|
|
202
|
+
_quadMesh.name = 'Bilateral Blur [ Vertical Pass ]';
|
|
203
|
+
_quadMesh.render( renderer );
|
|
204
|
+
|
|
205
|
+
// restore
|
|
206
|
+
|
|
207
|
+
textureNode.value = currentTexture;
|
|
208
|
+
|
|
209
|
+
RendererUtils.restoreRendererState( renderer, _rendererState );
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Returns the result of the effect as a texture node.
|
|
215
|
+
*
|
|
216
|
+
* @return {PassTextureNode} A texture node that represents the result of the effect.
|
|
217
|
+
*/
|
|
218
|
+
getTextureNode() {
|
|
219
|
+
|
|
220
|
+
return this._textureNode;
|
|
221
|
+
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* This method is used to setup the effect's TSL code.
|
|
226
|
+
*
|
|
227
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
228
|
+
* @return {PassTextureNode}
|
|
229
|
+
*/
|
|
230
|
+
setup( builder ) {
|
|
231
|
+
|
|
232
|
+
const textureNode = this.textureNode;
|
|
233
|
+
|
|
234
|
+
//
|
|
235
|
+
|
|
236
|
+
const uvNode = uv();
|
|
237
|
+
const directionNode = vec2( this.directionNode || 1 );
|
|
238
|
+
|
|
239
|
+
const sampleTexture = ( uv ) => textureNode.sample( uv );
|
|
240
|
+
|
|
241
|
+
const blur = Fn( () => {
|
|
242
|
+
|
|
243
|
+
const kernelSize = this.sigma * 2 + 3;
|
|
244
|
+
const spatialCoefficients = this._getSpatialCoefficients( kernelSize );
|
|
245
|
+
|
|
246
|
+
const invSize = this._invSize;
|
|
247
|
+
const direction = directionNode.mul( this._passDirection );
|
|
248
|
+
|
|
249
|
+
// Sample center pixel
|
|
250
|
+
const centerColor = sampleTexture( uvNode ).toVar();
|
|
251
|
+
const centerLuminance = luminance( centerColor.rgb ).toVar();
|
|
252
|
+
|
|
253
|
+
// Accumulate weighted samples
|
|
254
|
+
const weightSum = float( spatialCoefficients[ 0 ] ).toVar();
|
|
255
|
+
const colorSum = vec4( centerColor.mul( spatialCoefficients[ 0 ] ) ).toVar();
|
|
256
|
+
|
|
257
|
+
// Precompute color sigma factor: -0.5 / (sigmaColor^2)
|
|
258
|
+
const colorSigmaFactor = float( - 0.5 ).div( float( this.sigmaColor * this.sigmaColor ) ).toConst();
|
|
259
|
+
|
|
260
|
+
for ( let i = 1; i < kernelSize; i ++ ) {
|
|
261
|
+
|
|
262
|
+
const x = float( i );
|
|
263
|
+
const spatialWeight = float( spatialCoefficients[ i ] );
|
|
264
|
+
|
|
265
|
+
const uvOffset = vec2( direction.mul( invSize.mul( x ) ) ).toVar();
|
|
266
|
+
|
|
267
|
+
// Sample in both directions (+/-)
|
|
268
|
+
const sampleUv1 = uvNode.add( uvOffset );
|
|
269
|
+
const sampleUv2 = uvNode.sub( uvOffset );
|
|
270
|
+
|
|
271
|
+
const sample1 = sampleTexture( sampleUv1 );
|
|
272
|
+
const sample2 = sampleTexture( sampleUv2 );
|
|
273
|
+
|
|
274
|
+
// Compute luminance difference for edge detection
|
|
275
|
+
const lum1 = luminance( sample1.rgb );
|
|
276
|
+
const lum2 = luminance( sample2.rgb );
|
|
277
|
+
|
|
278
|
+
const diff1 = abs( lum1.sub( centerLuminance ) );
|
|
279
|
+
const diff2 = abs( lum2.sub( centerLuminance ) );
|
|
280
|
+
|
|
281
|
+
// Compute color-based weights using Gaussian function
|
|
282
|
+
const colorWeight1 = exp( diff1.mul( diff1 ).mul( colorSigmaFactor ) ).toVar();
|
|
283
|
+
const colorWeight2 = exp( diff2.mul( diff2 ).mul( colorSigmaFactor ) ).toVar();
|
|
284
|
+
|
|
285
|
+
// Combined bilateral weight = spatial weight * color weight
|
|
286
|
+
const bilateralWeight1 = spatialWeight.mul( colorWeight1 );
|
|
287
|
+
const bilateralWeight2 = spatialWeight.mul( colorWeight2 );
|
|
288
|
+
|
|
289
|
+
colorSum.addAssign( sample1.mul( bilateralWeight1 ) );
|
|
290
|
+
colorSum.addAssign( sample2.mul( bilateralWeight2 ) );
|
|
291
|
+
|
|
292
|
+
weightSum.addAssign( bilateralWeight1 );
|
|
293
|
+
weightSum.addAssign( bilateralWeight2 );
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Normalize by the total weight
|
|
298
|
+
return colorSum.div( max( weightSum, 0.0001 ) );
|
|
299
|
+
|
|
300
|
+
} );
|
|
301
|
+
|
|
302
|
+
//
|
|
303
|
+
|
|
304
|
+
const material = this._material || ( this._material = new NodeMaterial() );
|
|
305
|
+
material.fragmentNode = blur().context( builder.getSharedContext() );
|
|
306
|
+
material.name = 'Bilateral_blur';
|
|
307
|
+
material.needsUpdate = true;
|
|
308
|
+
|
|
309
|
+
//
|
|
310
|
+
|
|
311
|
+
const properties = builder.getNodeProperties( this );
|
|
312
|
+
properties.textureNode = textureNode;
|
|
313
|
+
|
|
314
|
+
//
|
|
315
|
+
|
|
316
|
+
return this._textureNode;
|
|
317
|
+
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Frees internal resources. This method should be called
|
|
322
|
+
* when the effect is no longer required.
|
|
323
|
+
*/
|
|
324
|
+
dispose() {
|
|
325
|
+
|
|
326
|
+
this._horizontalRT.dispose();
|
|
327
|
+
this._verticalRT.dispose();
|
|
328
|
+
|
|
329
|
+
if ( this._material !== null ) this._material.dispose();
|
|
330
|
+
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Computes spatial (Gaussian) coefficients depending on the given kernel radius.
|
|
335
|
+
* These coefficients are used for the spatial component of the bilateral filter.
|
|
336
|
+
*
|
|
337
|
+
* @private
|
|
338
|
+
* @param {number} kernelRadius - The kernel radius.
|
|
339
|
+
* @return {Array<number>}
|
|
340
|
+
*/
|
|
341
|
+
_getSpatialCoefficients( kernelRadius ) {
|
|
342
|
+
|
|
343
|
+
const coefficients = [];
|
|
344
|
+
const sigma = kernelRadius / 3;
|
|
345
|
+
|
|
346
|
+
for ( let i = 0; i < kernelRadius; i ++ ) {
|
|
347
|
+
|
|
348
|
+
coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( sigma * sigma ) ) / sigma );
|
|
349
|
+
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
return coefficients;
|
|
353
|
+
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
export default BilateralBlurNode;
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* TSL function for creating a bilateral blur node for post processing.
|
|
362
|
+
*
|
|
363
|
+
* Bilateral blur smooths an image while preserving sharp edges by considering
|
|
364
|
+
* both spatial distance and color/intensity differences between pixels.
|
|
365
|
+
*
|
|
366
|
+
* @tsl
|
|
367
|
+
* @function
|
|
368
|
+
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
369
|
+
* @param {Node<vec2|float>} directionNode - Defines the direction and radius of the blur.
|
|
370
|
+
* @param {number} sigma - Controls the spatial kernel of the blur filter. Higher values mean a wider blur radius.
|
|
371
|
+
* @param {number} sigmaColor - Controls the intensity kernel. Higher values allow more color difference to be blurred together.
|
|
372
|
+
* @returns {BilateralBlurNode}
|
|
373
|
+
*/
|
|
374
|
+
export const bilateralBlur = ( node, directionNode, sigma, sigmaColor ) => new BilateralBlurNode( convertToTexture( node ), directionNode, sigma, sigmaColor );
|
|
@@ -12,20 +12,20 @@ let _rendererState;
|
|
|
12
12
|
/**
|
|
13
13
|
* Post processing node for creating a bloom effect.
|
|
14
14
|
* ```js
|
|
15
|
-
* const
|
|
15
|
+
* const renderPipeline = new THREE.RenderPipeline( renderer );
|
|
16
16
|
*
|
|
17
17
|
* const scenePass = pass( scene, camera );
|
|
18
18
|
* const scenePassColor = scenePass.getTextureNode( 'output' );
|
|
19
19
|
*
|
|
20
20
|
* const bloomPass = bloom( scenePassColor );
|
|
21
21
|
*
|
|
22
|
-
*
|
|
22
|
+
* renderPipeline.outputNode = scenePassColor.add( bloomPass );
|
|
23
23
|
* ```
|
|
24
24
|
* By default, the node affects the entire image. For a selective bloom,
|
|
25
25
|
* use the `emissive` material property to control which objects should
|
|
26
26
|
* contribute to bloom or not. This can be achieved via MRT.
|
|
27
27
|
* ```js
|
|
28
|
-
* const
|
|
28
|
+
* const renderPipeline = new THREE.RenderPipeline( renderer );
|
|
29
29
|
*
|
|
30
30
|
* const scenePass = pass( scene, camera );
|
|
31
31
|
* scenePass.setMRT( mrt( {
|
|
@@ -37,7 +37,7 @@ let _rendererState;
|
|
|
37
37
|
* const emissivePass = scenePass.getTextureNode( 'emissive' );
|
|
38
38
|
*
|
|
39
39
|
* const bloomPass = bloom( emissivePass );
|
|
40
|
-
*
|
|
40
|
+
* renderPipeline.outputNode = scenePassColor.add( bloomPass );
|
|
41
41
|
* ```
|
|
42
42
|
* @augments TempNode
|
|
43
43
|
* @three_import import { bloom } from 'three/addons/tsl/display/BloomNode.js';
|
|
@@ -77,7 +77,7 @@ class BloomNode extends TempNode {
|
|
|
77
77
|
this.strength = uniform( strength );
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
|
-
* The radius of the bloom.
|
|
80
|
+
* The radius of the bloom. Must be in the range `[0,1]`.
|
|
81
81
|
*
|
|
82
82
|
* @type {UniformNode<float>}
|
|
83
83
|
*/
|
|
@@ -300,6 +300,7 @@ class BloomNode extends TempNode {
|
|
|
300
300
|
|
|
301
301
|
renderer.setRenderTarget( this._renderTargetBright );
|
|
302
302
|
_quadMesh.material = this._highPassFilterMaterial;
|
|
303
|
+
_quadMesh.name = 'Bloom [ High Pass ]';
|
|
303
304
|
_quadMesh.render( renderer );
|
|
304
305
|
|
|
305
306
|
// 2. Blur all the mips progressively
|
|
@@ -313,11 +314,13 @@ class BloomNode extends TempNode {
|
|
|
313
314
|
this._separableBlurMaterials[ i ].colorTexture.value = inputRenderTarget.texture;
|
|
314
315
|
this._separableBlurMaterials[ i ].direction.value = _BlurDirectionX;
|
|
315
316
|
renderer.setRenderTarget( this._renderTargetsHorizontal[ i ] );
|
|
317
|
+
_quadMesh.name = `Bloom [ Blur Horizontal - ${ i } ]`;
|
|
316
318
|
_quadMesh.render( renderer );
|
|
317
319
|
|
|
318
320
|
this._separableBlurMaterials[ i ].colorTexture.value = this._renderTargetsHorizontal[ i ].texture;
|
|
319
321
|
this._separableBlurMaterials[ i ].direction.value = _BlurDirectionY;
|
|
320
322
|
renderer.setRenderTarget( this._renderTargetsVertical[ i ] );
|
|
323
|
+
_quadMesh.name = `Bloom [ Blur Vertical - ${ i } ]`;
|
|
321
324
|
_quadMesh.render( renderer );
|
|
322
325
|
|
|
323
326
|
inputRenderTarget = this._renderTargetsVertical[ i ];
|
|
@@ -328,6 +331,7 @@ class BloomNode extends TempNode {
|
|
|
328
331
|
|
|
329
332
|
renderer.setRenderTarget( this._renderTargetsHorizontal[ 0 ] );
|
|
330
333
|
_quadMesh.material = this._compositeMaterial;
|
|
334
|
+
_quadMesh.name = 'Bloom [ Composite ]';
|
|
331
335
|
_quadMesh.render( renderer );
|
|
332
336
|
|
|
333
337
|
// restore
|
|
@@ -364,9 +368,9 @@ class BloomNode extends TempNode {
|
|
|
364
368
|
|
|
365
369
|
// gaussian blur materials
|
|
366
370
|
|
|
367
|
-
// These sizes have been changed to account for the altered
|
|
371
|
+
// These sizes have been changed to account for the altered coefficients-calculation to avoid blockiness,
|
|
368
372
|
// while retaining the same blur-strength. For details see https://github.com/mrdoob/three.js/pull/31528
|
|
369
|
-
const kernelSizeArray = [ 6, 10, 14, 18, 22 ];
|
|
373
|
+
const kernelSizeArray = [ 6, 10, 14, 18, 22 ];
|
|
370
374
|
|
|
371
375
|
for ( let i = 0; i < this._nMips; i ++ ) {
|
|
372
376
|
|
|
@@ -439,11 +443,21 @@ class BloomNode extends TempNode {
|
|
|
439
443
|
|
|
440
444
|
this._renderTargetBright.dispose();
|
|
441
445
|
|
|
446
|
+
if ( this._highPassFilterMaterial !== null ) this._highPassFilterMaterial.dispose();
|
|
447
|
+
if ( this._compositeMaterial !== null ) this._compositeMaterial.dispose();
|
|
448
|
+
|
|
449
|
+
for ( let i = 0; i < this._separableBlurMaterials.length; i ++ ) {
|
|
450
|
+
|
|
451
|
+
this._separableBlurMaterials[ i ].dispose();
|
|
452
|
+
|
|
453
|
+
}
|
|
454
|
+
|
|
442
455
|
}
|
|
443
456
|
|
|
444
457
|
/**
|
|
445
458
|
* Create a separable blur material for the given kernel radius.
|
|
446
459
|
*
|
|
460
|
+
* @private
|
|
447
461
|
* @param {NodeBuilder} builder - The current node builder.
|
|
448
462
|
* @param {number} kernelRadius - The kernel radius.
|
|
449
463
|
* @return {NodeMaterial}
|
|
@@ -480,7 +494,7 @@ class BloomNode extends TempNode {
|
|
|
480
494
|
const uvOffset = direction.mul( invSize ).mul( x );
|
|
481
495
|
const sample1 = sampleTexel( uvNode.add( uvOffset ) ).rgb;
|
|
482
496
|
const sample2 = sampleTexel( uvNode.sub( uvOffset ) ).rgb;
|
|
483
|
-
diffuseSum.addAssign( add( sample1, sample2 ).mul( w ) );
|
|
497
|
+
diffuseSum.addAssign( add( sample1, sample2 ).mul( w ) );
|
|
484
498
|
|
|
485
499
|
} );
|
|
486
500
|
|
|
@@ -515,6 +529,6 @@ class BloomNode extends TempNode {
|
|
|
515
529
|
* @param {number} [threshold=0] - The luminance threshold limits which bright areas contribute to the bloom effect.
|
|
516
530
|
* @returns {BloomNode}
|
|
517
531
|
*/
|
|
518
|
-
export const bloom = ( node, strength, radius, threshold ) =>
|
|
532
|
+
export const bloom = ( node, strength, radius, threshold ) => new BloomNode( nodeObject( node ), strength, radius, threshold );
|
|
519
533
|
|
|
520
534
|
export default BloomNode;
|