super-three 0.177.0 → 0.181.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -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 +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- 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 +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- 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/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/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- 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/SimplexNoise.js +1 -1
- 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/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- 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 +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- 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 +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- 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 +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- 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 +8 -6
- 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/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 +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- 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/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- 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 +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- 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/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { RenderTarget, Vector2, QuadMesh, NodeMaterial, RendererUtils, TempNode, NodeUpdateType } from 'three/webgpu';
|
|
2
|
-
import { nodeObject, Fn, float, uv, texture, passTexture,
|
|
2
|
+
import { nodeObject, Fn, float, uv, texture, passTexture, sign, max, convertToTexture } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _size = /*@__PURE__*/ new Vector2();
|
|
5
|
-
const
|
|
5
|
+
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
6
6
|
|
|
7
7
|
let _rendererState;
|
|
8
8
|
|
|
@@ -24,9 +24,9 @@ class AfterImageNode extends TempNode {
|
|
|
24
24
|
* Constructs a new after image node.
|
|
25
25
|
*
|
|
26
26
|
* @param {TextureNode} textureNode - The texture node that represents the input of the effect.
|
|
27
|
-
* @param {
|
|
27
|
+
* @param {Node<float>} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
|
|
28
28
|
*/
|
|
29
|
-
constructor( textureNode, damp = 0.96 ) {
|
|
29
|
+
constructor( textureNode, damp = float( 0.96 ) ) {
|
|
30
30
|
|
|
31
31
|
super( 'vec4' );
|
|
32
32
|
|
|
@@ -37,21 +37,14 @@ class AfterImageNode extends TempNode {
|
|
|
37
37
|
*/
|
|
38
38
|
this.textureNode = textureNode;
|
|
39
39
|
|
|
40
|
-
/**
|
|
41
|
-
* The texture represents the pervious frame.
|
|
42
|
-
*
|
|
43
|
-
* @type {TextureNode}
|
|
44
|
-
*/
|
|
45
|
-
this.textureNodeOld = texture( null );
|
|
46
|
-
|
|
47
40
|
/**
|
|
48
41
|
* How quickly the after-image fades. A higher value means the after-image
|
|
49
42
|
* persists longer, while a lower value means it fades faster. Should be in
|
|
50
43
|
* the range `[0, 1]`.
|
|
51
44
|
*
|
|
52
|
-
* @type {
|
|
45
|
+
* @type {Node<float>}
|
|
53
46
|
*/
|
|
54
|
-
this.damp =
|
|
47
|
+
this.damp = damp;
|
|
55
48
|
|
|
56
49
|
/**
|
|
57
50
|
* The render target used for compositing the effect.
|
|
@@ -79,6 +72,14 @@ class AfterImageNode extends TempNode {
|
|
|
79
72
|
*/
|
|
80
73
|
this._textureNode = passTexture( this, this._compRT.texture );
|
|
81
74
|
|
|
75
|
+
/**
|
|
76
|
+
* The texture represents the pervious frame.
|
|
77
|
+
*
|
|
78
|
+
* @private
|
|
79
|
+
* @type {TextureNode}
|
|
80
|
+
*/
|
|
81
|
+
this._textureNodeOld = texture( this._oldRT.texture );
|
|
82
|
+
|
|
82
83
|
/**
|
|
83
84
|
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
|
|
84
85
|
* its effect once per frame in `updateBefore()`.
|
|
@@ -139,17 +140,20 @@ class AfterImageNode extends TempNode {
|
|
|
139
140
|
|
|
140
141
|
this.setSize( _size.x, _size.y );
|
|
141
142
|
|
|
142
|
-
|
|
143
|
+
// make sure texture nodes point to correct render targets
|
|
144
|
+
|
|
145
|
+
this._textureNode.value = this._compRT.texture;
|
|
146
|
+
this._textureNodeOld.value = this._oldRT.texture;
|
|
143
147
|
|
|
144
|
-
|
|
148
|
+
// composite
|
|
145
149
|
|
|
146
|
-
|
|
147
|
-
|
|
150
|
+
_quadMesh.material = this._materialComposed;
|
|
151
|
+
_quadMesh.name = 'AfterImage';
|
|
148
152
|
|
|
149
153
|
renderer.setRenderTarget( this._compRT );
|
|
150
|
-
|
|
154
|
+
_quadMesh.render( renderer );
|
|
151
155
|
|
|
152
|
-
//
|
|
156
|
+
// swap
|
|
153
157
|
|
|
154
158
|
const temp = this._oldRT;
|
|
155
159
|
this._oldRT = this._compRT;
|
|
@@ -157,8 +161,6 @@ class AfterImageNode extends TempNode {
|
|
|
157
161
|
|
|
158
162
|
//
|
|
159
163
|
|
|
160
|
-
textureNode.value = currentTexture;
|
|
161
|
-
|
|
162
164
|
RendererUtils.restoreRendererState( renderer, _rendererState );
|
|
163
165
|
|
|
164
166
|
}
|
|
@@ -172,7 +174,7 @@ class AfterImageNode extends TempNode {
|
|
|
172
174
|
setup( builder ) {
|
|
173
175
|
|
|
174
176
|
const textureNode = this.textureNode;
|
|
175
|
-
const textureNodeOld = this.
|
|
177
|
+
const textureNodeOld = this._textureNodeOld;
|
|
176
178
|
|
|
177
179
|
//
|
|
178
180
|
|
|
@@ -234,9 +236,9 @@ class AfterImageNode extends TempNode {
|
|
|
234
236
|
* @tsl
|
|
235
237
|
* @function
|
|
236
238
|
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
237
|
-
* @param {number} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
|
|
239
|
+
* @param {(Node<float>|number)} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
|
|
238
240
|
* @returns {AfterImageNode}
|
|
239
241
|
*/
|
|
240
|
-
export const afterImage = ( node, damp ) => nodeObject( new AfterImageNode( convertToTexture( node ), damp ) );
|
|
242
|
+
export const afterImage = ( node, damp ) => nodeObject( new AfterImageNode( convertToTexture( node ), nodeObject( damp ) ) );
|
|
241
243
|
|
|
242
244
|
export default AfterImageNode;
|
|
@@ -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.
|
|
@@ -130,8 +130,8 @@ class AnamorphicNode extends TempNode {
|
|
|
130
130
|
|
|
131
131
|
this._invSize.value.set( 1 / width, 1 / height );
|
|
132
132
|
|
|
133
|
-
width = Math.max( Math.round( width * this.
|
|
134
|
-
height = Math.max( Math.round( height * this.
|
|
133
|
+
width = Math.max( Math.round( width * this.resolutionScale ), 1 );
|
|
134
|
+
height = Math.max( Math.round( height * this.resolutionScale ), 1 );
|
|
135
135
|
|
|
136
136
|
this._renderTarget.setSize( width, height );
|
|
137
137
|
|
|
@@ -158,6 +158,7 @@ class AnamorphicNode extends TempNode {
|
|
|
158
158
|
const currentTexture = textureNode.value;
|
|
159
159
|
|
|
160
160
|
_quadMesh.material = this._material;
|
|
161
|
+
_quadMesh.name = 'Anamorphic';
|
|
161
162
|
|
|
162
163
|
this.setSize( map.image.width, map.image.height );
|
|
163
164
|
|
|
@@ -240,6 +241,29 @@ class AnamorphicNode extends TempNode {
|
|
|
240
241
|
|
|
241
242
|
}
|
|
242
243
|
|
|
244
|
+
/**
|
|
245
|
+
* The resolution scale.
|
|
246
|
+
*
|
|
247
|
+
* @deprecated
|
|
248
|
+
* @type {Vector2}
|
|
249
|
+
* @default {(1,1)}
|
|
250
|
+
*/
|
|
251
|
+
get resolution() {
|
|
252
|
+
|
|
253
|
+
console.warn( 'THREE.AnamorphicNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
|
|
254
|
+
|
|
255
|
+
return new Vector2( this.resolutionScale, this.resolutionScale );
|
|
256
|
+
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
set resolution( value ) {
|
|
260
|
+
|
|
261
|
+
console.warn( 'THREE.AnamorphicNode: The "resolution" property has been renamed to "resolutionScale" and is now of type `number`.' ); // @deprecated r180
|
|
262
|
+
|
|
263
|
+
this.resolutionScale = value.x;
|
|
264
|
+
|
|
265
|
+
}
|
|
266
|
+
|
|
243
267
|
}
|
|
244
268
|
|
|
245
269
|
/**
|
|
@@ -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,7 +368,9 @@ class BloomNode extends TempNode {
|
|
|
364
368
|
|
|
365
369
|
// gaussian blur materials
|
|
366
370
|
|
|
367
|
-
|
|
371
|
+
// These sizes have been changed to account for the altered coefficients-calculation to avoid blockiness,
|
|
372
|
+
// while retaining the same blur-strength. For details see https://github.com/mrdoob/three.js/pull/31528
|
|
373
|
+
const kernelSizeArray = [ 6, 10, 14, 18, 22 ];
|
|
368
374
|
|
|
369
375
|
for ( let i = 0; i < this._nMips; i ++ ) {
|
|
370
376
|
|
|
@@ -449,10 +455,11 @@ class BloomNode extends TempNode {
|
|
|
449
455
|
_getSeparableBlurMaterial( builder, kernelRadius ) {
|
|
450
456
|
|
|
451
457
|
const coefficients = [];
|
|
458
|
+
const sigma = kernelRadius / 3;
|
|
452
459
|
|
|
453
460
|
for ( let i = 0; i < kernelRadius; i ++ ) {
|
|
454
461
|
|
|
455
|
-
coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / (
|
|
462
|
+
coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( sigma * sigma ) ) / sigma );
|
|
456
463
|
|
|
457
464
|
}
|
|
458
465
|
|
|
@@ -468,8 +475,7 @@ class BloomNode extends TempNode {
|
|
|
468
475
|
|
|
469
476
|
const separableBlurPass = Fn( () => {
|
|
470
477
|
|
|
471
|
-
const
|
|
472
|
-
const diffuseSum = sampleTexel( uvNode ).rgb.mul( weightSum ).toVar();
|
|
478
|
+
const diffuseSum = sampleTexel( uvNode ).rgb.mul( gaussianCoefficients.element( 0 ) ).toVar();
|
|
473
479
|
|
|
474
480
|
Loop( { start: int( 1 ), end: int( kernelRadius ), type: 'int', condition: '<' }, ( { i } ) => {
|
|
475
481
|
|
|
@@ -479,11 +485,10 @@ class BloomNode extends TempNode {
|
|
|
479
485
|
const sample1 = sampleTexel( uvNode.add( uvOffset ) ).rgb;
|
|
480
486
|
const sample2 = sampleTexel( uvNode.sub( uvOffset ) ).rgb;
|
|
481
487
|
diffuseSum.addAssign( add( sample1, sample2 ).mul( w ) );
|
|
482
|
-
weightSum.addAssign( float( 2.0 ).mul( w ) );
|
|
483
488
|
|
|
484
489
|
} );
|
|
485
490
|
|
|
486
|
-
return vec4( diffuseSum
|
|
491
|
+
return vec4( diffuseSum, 1.0 );
|
|
487
492
|
|
|
488
493
|
} );
|
|
489
494
|
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { Vector2, TempNode } from 'three/webgpu';
|
|
2
|
+
import {
|
|
3
|
+
nodeObject,
|
|
4
|
+
Fn,
|
|
5
|
+
uniform,
|
|
6
|
+
convertToTexture,
|
|
7
|
+
float,
|
|
8
|
+
vec4,
|
|
9
|
+
uv,
|
|
10
|
+
NodeUpdateType,
|
|
11
|
+
} from 'three/tsl';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Post processing node for applying chromatic aberration effect.
|
|
15
|
+
* This effect simulates the color fringing that occurs in real camera lenses
|
|
16
|
+
* by separating and offsetting the red, green, and blue channels.
|
|
17
|
+
*
|
|
18
|
+
* @augments TempNode
|
|
19
|
+
* @three_import import { chromaticAberration } from 'three/addons/tsl/display/ChromaticAberrationNode.js';
|
|
20
|
+
*/
|
|
21
|
+
class ChromaticAberrationNode extends TempNode {
|
|
22
|
+
|
|
23
|
+
static get type() {
|
|
24
|
+
|
|
25
|
+
return 'ChromaticAberrationNode';
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new chromatic aberration node.
|
|
31
|
+
*
|
|
32
|
+
* @param {TextureNode} textureNode - The texture node that represents the input of the effect.
|
|
33
|
+
* @param {Node} strengthNode - The strength of the chromatic aberration effect as a node.
|
|
34
|
+
* @param {Node} centerNode - The center point of the effect as a node.
|
|
35
|
+
* @param {Node} scaleNode - The scale factor for stepped scaling from center as a node.
|
|
36
|
+
*/
|
|
37
|
+
constructor( textureNode, strengthNode, centerNode, scaleNode ) {
|
|
38
|
+
|
|
39
|
+
super( 'vec4' );
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The texture node that represents the input of the effect.
|
|
43
|
+
*
|
|
44
|
+
* @type {texture}
|
|
45
|
+
*/
|
|
46
|
+
this.textureNode = textureNode;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
|
|
50
|
+
* its internal uniforms once per frame in `updateBefore()`.
|
|
51
|
+
*
|
|
52
|
+
* @type {string}
|
|
53
|
+
* @default 'frame'
|
|
54
|
+
*/
|
|
55
|
+
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* A node holding the strength of the effect.
|
|
59
|
+
*
|
|
60
|
+
* @type {Node}
|
|
61
|
+
*/
|
|
62
|
+
this.strengthNode = strengthNode;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* A node holding the center point of the effect.
|
|
66
|
+
*
|
|
67
|
+
* @type {Node}
|
|
68
|
+
*/
|
|
69
|
+
this.centerNode = centerNode;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* A node holding the scale factor for stepped scaling.
|
|
73
|
+
*
|
|
74
|
+
* @type {Node}
|
|
75
|
+
*/
|
|
76
|
+
this.scaleNode = scaleNode;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* A uniform node holding the inverse resolution value.
|
|
80
|
+
*
|
|
81
|
+
* @private
|
|
82
|
+
* @type {UniformNode<vec2>}
|
|
83
|
+
*/
|
|
84
|
+
this._invSize = uniform( new Vector2() );
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* This method is used to update the effect's uniforms once per frame.
|
|
90
|
+
*
|
|
91
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
92
|
+
*/
|
|
93
|
+
updateBefore( /* frame */ ) {
|
|
94
|
+
|
|
95
|
+
const map = this.textureNode.value;
|
|
96
|
+
this._invSize.value.set( 1 / map.image.width, 1 / map.image.height );
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* This method is used to setup the effect's TSL code.
|
|
102
|
+
*
|
|
103
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
104
|
+
* @return {ShaderCallNodeInternal}
|
|
105
|
+
*/
|
|
106
|
+
setup( /* builder */ ) {
|
|
107
|
+
|
|
108
|
+
const textureNode = this.textureNode;
|
|
109
|
+
const uvNode = textureNode.uvNode || uv();
|
|
110
|
+
|
|
111
|
+
const ApplyChromaticAberration = Fn( ( [ uv, strength, center, scale ] ) => {
|
|
112
|
+
|
|
113
|
+
// Calculate distance from center
|
|
114
|
+
const offset = uv.sub( center );
|
|
115
|
+
const distance = offset.length();
|
|
116
|
+
|
|
117
|
+
// Create stepped scaling zones based on distance
|
|
118
|
+
// Each channel gets different scaling steps
|
|
119
|
+
const redScale = float( 1.0 ).add( scale.mul( 0.02 ).mul( strength ) ); // Red channel scaled outward
|
|
120
|
+
const greenScale = float( 1.0 ); // Green stays at original scale
|
|
121
|
+
const blueScale = float( 1.0 ).sub( scale.mul( 0.02 ).mul( strength ) ); // Blue channel scaled inward
|
|
122
|
+
|
|
123
|
+
// Create radial distortion based on distance from center
|
|
124
|
+
const aberrationStrength = strength.mul( distance );
|
|
125
|
+
|
|
126
|
+
// Calculate scaled UV coordinates for each channel
|
|
127
|
+
const redUV = center.add( offset.mul( redScale ) );
|
|
128
|
+
const greenUV = center.add( offset.mul( greenScale ) );
|
|
129
|
+
const blueUV = center.add( offset.mul( blueScale ) );
|
|
130
|
+
|
|
131
|
+
// Apply additional chromatic offset based on aberration strength
|
|
132
|
+
const rOffset = offset.mul( aberrationStrength ).mul( float( 0.01 ) );
|
|
133
|
+
const gOffset = offset.mul( aberrationStrength ).mul( float( 0.0 ) );
|
|
134
|
+
const bOffset = offset.mul( aberrationStrength ).mul( float( - 0.01 ) );
|
|
135
|
+
|
|
136
|
+
// Final UV coordinates combining scale and chromatic aberration
|
|
137
|
+
const finalRedUV = redUV.add( rOffset );
|
|
138
|
+
const finalGreenUV = greenUV.add( gOffset );
|
|
139
|
+
const finalBlueUV = blueUV.add( bOffset );
|
|
140
|
+
|
|
141
|
+
// Sample texture for each channel
|
|
142
|
+
const r = textureNode.sample( finalRedUV ).r;
|
|
143
|
+
const g = textureNode.sample( finalGreenUV ).g;
|
|
144
|
+
const b = textureNode.sample( finalBlueUV ).b;
|
|
145
|
+
|
|
146
|
+
// Get original alpha
|
|
147
|
+
const a = textureNode.sample( uv ).a;
|
|
148
|
+
|
|
149
|
+
return vec4( r, g, b, a );
|
|
150
|
+
|
|
151
|
+
} ).setLayout( {
|
|
152
|
+
name: 'ChromaticAberrationShader',
|
|
153
|
+
type: 'vec4',
|
|
154
|
+
inputs: [
|
|
155
|
+
{ name: 'uv', type: 'vec2' },
|
|
156
|
+
{ name: 'strength', type: 'float' },
|
|
157
|
+
{ name: 'center', type: 'vec2' },
|
|
158
|
+
{ name: 'scale', type: 'float' },
|
|
159
|
+
{ name: 'invSize', type: 'vec2' }
|
|
160
|
+
]
|
|
161
|
+
} );
|
|
162
|
+
|
|
163
|
+
const chromaticAberrationFn = Fn( () => {
|
|
164
|
+
|
|
165
|
+
return ApplyChromaticAberration(
|
|
166
|
+
uvNode,
|
|
167
|
+
this.strengthNode,
|
|
168
|
+
this.centerNode,
|
|
169
|
+
this.scaleNode,
|
|
170
|
+
this._invSize
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
} );
|
|
174
|
+
|
|
175
|
+
const outputNode = chromaticAberrationFn();
|
|
176
|
+
|
|
177
|
+
return outputNode;
|
|
178
|
+
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export default ChromaticAberrationNode;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* TSL function for creating a chromatic aberration node for post processing.
|
|
187
|
+
*
|
|
188
|
+
* @tsl
|
|
189
|
+
* @function
|
|
190
|
+
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
191
|
+
* @param {Node|number} [strength=1.0] - The strength of the chromatic aberration effect as a node or value.
|
|
192
|
+
* @param {?(Node|Vector2)} [center=null] - The center point of the effect as a node or value. If null, uses screen center (0.5, 0.5).
|
|
193
|
+
* @param {Node|number} [scale=1.1] - The scale factor for stepped scaling from center as a node or value.
|
|
194
|
+
* @returns {ChromaticAberrationNode}
|
|
195
|
+
*/
|
|
196
|
+
export const chromaticAberration = ( node, strength = 1.0, center = null, scale = 1.1 ) => {
|
|
197
|
+
|
|
198
|
+
return nodeObject(
|
|
199
|
+
new ChromaticAberrationNode(
|
|
200
|
+
convertToTexture( node ),
|
|
201
|
+
nodeObject( strength ),
|
|
202
|
+
nodeObject( center ),
|
|
203
|
+
nodeObject( scale )
|
|
204
|
+
)
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
};
|
|
@@ -259,6 +259,7 @@ export default DenoiseNode;
|
|
|
259
259
|
/**
|
|
260
260
|
* Generates denoise samples based on the given parameters.
|
|
261
261
|
*
|
|
262
|
+
* @private
|
|
262
263
|
* @param {number} numSamples - The number of samples.
|
|
263
264
|
* @param {number} numRings - The number of rings.
|
|
264
265
|
* @param {number} radiusExponent - The radius exponent.
|
|
@@ -283,6 +284,7 @@ function generateDenoiseSamples( numSamples, numRings, radiusExponent ) {
|
|
|
283
284
|
/**
|
|
284
285
|
* Generates a default noise texture for the given size.
|
|
285
286
|
*
|
|
287
|
+
* @private
|
|
286
288
|
* @param {number} [size=64] - The texture size.
|
|
287
289
|
* @return {DataTexture} The generated noise texture.
|
|
288
290
|
*/
|