super-three 0.181.0 → 0.185.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 +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- 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 +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- 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/usd/USDAParser.js +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- 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/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- 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 +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -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 +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- 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 +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- 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 +315 -126
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- 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/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- 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 +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- 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/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- 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 +1 -1
- package/src/nodes/code/FunctionNode.js +4 -19
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- 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/PhysicalLightingModel.js +126 -45
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- 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 +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- 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 +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.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 +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -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 +225 -186
- 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 +2 -2
- 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 +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
- 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 +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- 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 +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- 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 +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- 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/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- 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/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- 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 -71
- 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
|
@@ -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 );
|
|
@@ -9,23 +9,32 @@ const _BlurDirectionY = /*@__PURE__*/ new Vector2( 0.0, 1.0 );
|
|
|
9
9
|
|
|
10
10
|
let _rendererState;
|
|
11
11
|
|
|
12
|
+
const luminosityHighPass = Fn( ( { input, threshold, smoothWidth } ) => {
|
|
13
|
+
|
|
14
|
+
const v = luminance( input.rgb );
|
|
15
|
+
const alpha = smoothstep( threshold, threshold.add( smoothWidth ), v );
|
|
16
|
+
|
|
17
|
+
return mix( vec4( 0 ), input, alpha );
|
|
18
|
+
|
|
19
|
+
} );
|
|
20
|
+
|
|
12
21
|
/**
|
|
13
22
|
* Post processing node for creating a bloom effect.
|
|
14
23
|
* ```js
|
|
15
|
-
* const
|
|
24
|
+
* const renderPipeline = new THREE.RenderPipeline( renderer );
|
|
16
25
|
*
|
|
17
26
|
* const scenePass = pass( scene, camera );
|
|
18
27
|
* const scenePassColor = scenePass.getTextureNode( 'output' );
|
|
19
28
|
*
|
|
20
29
|
* const bloomPass = bloom( scenePassColor );
|
|
21
30
|
*
|
|
22
|
-
*
|
|
31
|
+
* renderPipeline.outputNode = scenePassColor.add( bloomPass );
|
|
23
32
|
* ```
|
|
24
33
|
* By default, the node affects the entire image. For a selective bloom,
|
|
25
34
|
* use the `emissive` material property to control which objects should
|
|
26
35
|
* contribute to bloom or not. This can be achieved via MRT.
|
|
27
36
|
* ```js
|
|
28
|
-
* const
|
|
37
|
+
* const renderPipeline = new THREE.RenderPipeline( renderer );
|
|
29
38
|
*
|
|
30
39
|
* const scenePass = pass( scene, camera );
|
|
31
40
|
* scenePass.setMRT( mrt( {
|
|
@@ -37,7 +46,7 @@ let _rendererState;
|
|
|
37
46
|
* const emissivePass = scenePass.getTextureNode( 'emissive' );
|
|
38
47
|
*
|
|
39
48
|
* const bloomPass = bloom( emissivePass );
|
|
40
|
-
*
|
|
49
|
+
* renderPipeline.outputNode = scenePassColor.add( bloomPass );
|
|
41
50
|
* ```
|
|
42
51
|
* @augments TempNode
|
|
43
52
|
* @three_import import { bloom } from 'three/addons/tsl/display/BloomNode.js';
|
|
@@ -74,21 +83,21 @@ class BloomNode extends TempNode {
|
|
|
74
83
|
*
|
|
75
84
|
* @type {UniformNode<float>}
|
|
76
85
|
*/
|
|
77
|
-
this.strength = uniform( strength );
|
|
86
|
+
this.strength = strength.isNode ? strength : uniform( strength );
|
|
78
87
|
|
|
79
88
|
/**
|
|
80
|
-
* The radius of the bloom.
|
|
89
|
+
* The radius of the bloom. Must be in the range `[0,1]`.
|
|
81
90
|
*
|
|
82
91
|
* @type {UniformNode<float>}
|
|
83
92
|
*/
|
|
84
|
-
this.radius = uniform( radius );
|
|
93
|
+
this.radius = radius.isNode ? radius : uniform( radius );
|
|
85
94
|
|
|
86
95
|
/**
|
|
87
96
|
* The luminance threshold limits which bright areas contribute to the bloom effect.
|
|
88
97
|
*
|
|
89
98
|
* @type {UniformNode<float>}
|
|
90
99
|
*/
|
|
91
|
-
this.threshold = uniform( threshold );
|
|
100
|
+
this.threshold = threshold.isNode ? threshold : uniform( threshold );
|
|
92
101
|
|
|
93
102
|
/**
|
|
94
103
|
* Can be used to tweak the extracted luminance from the scene.
|
|
@@ -97,6 +106,22 @@ class BloomNode extends TempNode {
|
|
|
97
106
|
*/
|
|
98
107
|
this.smoothWidth = uniform( 0.01 );
|
|
99
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Scale factor for the internal render targets.
|
|
111
|
+
*
|
|
112
|
+
* @private
|
|
113
|
+
* @type {number}
|
|
114
|
+
* @default 0.5
|
|
115
|
+
*/
|
|
116
|
+
this._resolutionScale = 0.5;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Can be used to inject a custom high pass filter (e.g., for anamorphic effects).
|
|
120
|
+
*
|
|
121
|
+
* @type {Function}
|
|
122
|
+
*/
|
|
123
|
+
this.highPassFn = luminosityHighPass;
|
|
124
|
+
|
|
100
125
|
/**
|
|
101
126
|
* An array that holds the render targets for the horizontal blur passes.
|
|
102
127
|
*
|
|
@@ -253,6 +278,32 @@ class BloomNode extends TempNode {
|
|
|
253
278
|
|
|
254
279
|
}
|
|
255
280
|
|
|
281
|
+
/**
|
|
282
|
+
* Sets the resolution scale for the pass.
|
|
283
|
+
* The resolution scale is a factor that is multiplied with the renderer's width and height.
|
|
284
|
+
*
|
|
285
|
+
* @param {number} resolutionScale - The resolution scale to set. A value of `1` means full resolution.
|
|
286
|
+
* @return {BloomNode} A reference to this node.
|
|
287
|
+
*/
|
|
288
|
+
setResolutionScale( resolutionScale ) {
|
|
289
|
+
|
|
290
|
+
this._resolutionScale = resolutionScale;
|
|
291
|
+
|
|
292
|
+
return this;
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Gets the current resolution scale of the pass.
|
|
298
|
+
*
|
|
299
|
+
* @return {number} The current resolution scale. A value of `1` means full resolution.
|
|
300
|
+
*/
|
|
301
|
+
getResolutionScale() {
|
|
302
|
+
|
|
303
|
+
return this._resolutionScale;
|
|
304
|
+
|
|
305
|
+
}
|
|
306
|
+
|
|
256
307
|
/**
|
|
257
308
|
* Sets the size of the effect.
|
|
258
309
|
*
|
|
@@ -261,8 +312,8 @@ class BloomNode extends TempNode {
|
|
|
261
312
|
*/
|
|
262
313
|
setSize( width, height ) {
|
|
263
314
|
|
|
264
|
-
let resx = Math.
|
|
265
|
-
let resy = Math.
|
|
315
|
+
let resx = Math.floor( width * this._resolutionScale );
|
|
316
|
+
let resy = Math.floor( height * this._resolutionScale );
|
|
266
317
|
|
|
267
318
|
this._renderTargetBright.setSize( resx, resy );
|
|
268
319
|
|
|
@@ -273,8 +324,8 @@ class BloomNode extends TempNode {
|
|
|
273
324
|
|
|
274
325
|
this._separableBlurMaterials[ i ].invSize.value.set( 1 / resx, 1 / resy );
|
|
275
326
|
|
|
276
|
-
resx = Math.
|
|
277
|
-
resy = Math.
|
|
327
|
+
resx = Math.floor( resx / 2 );
|
|
328
|
+
resy = Math.floor( resy / 2 );
|
|
278
329
|
|
|
279
330
|
}
|
|
280
331
|
|
|
@@ -350,19 +401,8 @@ class BloomNode extends TempNode {
|
|
|
350
401
|
|
|
351
402
|
// luminosity high pass material
|
|
352
403
|
|
|
353
|
-
const luminosityHighPass = Fn( () => {
|
|
354
|
-
|
|
355
|
-
const texel = this.inputNode;
|
|
356
|
-
const v = luminance( texel.rgb );
|
|
357
|
-
|
|
358
|
-
const alpha = smoothstep( this.threshold, this.threshold.add( this.smoothWidth ), v );
|
|
359
|
-
|
|
360
|
-
return mix( vec4( 0 ), texel, alpha );
|
|
361
|
-
|
|
362
|
-
} );
|
|
363
|
-
|
|
364
404
|
this._highPassFilterMaterial = this._highPassFilterMaterial || new NodeMaterial();
|
|
365
|
-
this._highPassFilterMaterial.fragmentNode =
|
|
405
|
+
this._highPassFilterMaterial.fragmentNode = this.highPassFn( { input: this.inputNode, threshold: this.threshold, smoothWidth: this.smoothWidth } ).context( builder.getSharedContext() );
|
|
366
406
|
this._highPassFilterMaterial.name = 'Bloom_highPass';
|
|
367
407
|
this._highPassFilterMaterial.needsUpdate = true;
|
|
368
408
|
|
|
@@ -443,11 +483,21 @@ class BloomNode extends TempNode {
|
|
|
443
483
|
|
|
444
484
|
this._renderTargetBright.dispose();
|
|
445
485
|
|
|
486
|
+
if ( this._highPassFilterMaterial !== null ) this._highPassFilterMaterial.dispose();
|
|
487
|
+
if ( this._compositeMaterial !== null ) this._compositeMaterial.dispose();
|
|
488
|
+
|
|
489
|
+
for ( let i = 0; i < this._separableBlurMaterials.length; i ++ ) {
|
|
490
|
+
|
|
491
|
+
this._separableBlurMaterials[ i ].dispose();
|
|
492
|
+
|
|
493
|
+
}
|
|
494
|
+
|
|
446
495
|
}
|
|
447
496
|
|
|
448
497
|
/**
|
|
449
498
|
* Create a separable blur material for the given kernel radius.
|
|
450
499
|
*
|
|
500
|
+
* @private
|
|
451
501
|
* @param {NodeBuilder} builder - The current node builder.
|
|
452
502
|
* @param {number} kernelRadius - The kernel radius.
|
|
453
503
|
* @return {NodeMaterial}
|
|
@@ -519,6 +569,6 @@ class BloomNode extends TempNode {
|
|
|
519
569
|
* @param {number} [threshold=0] - The luminance threshold limits which bright areas contribute to the bloom effect.
|
|
520
570
|
* @returns {BloomNode}
|
|
521
571
|
*/
|
|
522
|
-
export const bloom = ( node, strength, radius, threshold ) =>
|
|
572
|
+
export const bloom = ( node, strength, radius, threshold ) => new BloomNode( nodeObject( node ), strength, radius, threshold );
|
|
523
573
|
|
|
524
574
|
export default BloomNode;
|