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
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { HalfFloatType, Vector2, RenderTarget, RendererUtils, QuadMesh, NodeMaterial, TempNode, NodeUpdateType, Matrix4, DepthTexture } from 'three/webgpu';
|
|
2
|
-
import { add, float, If,
|
|
1
|
+
import { HalfFloatType, Vector2, RenderTarget, RendererUtils, QuadMesh, NodeMaterial, TempNode, NodeUpdateType, Matrix4, DepthTexture, FloatType } from 'three/webgpu';
|
|
2
|
+
import { add, float, If, Fn, max, texture, uniform, uv, vec2, vec4, luminance, convertToTexture, passTexture, velocity, getViewPosition, viewZToPerspectiveDepth, struct, ivec2, mix, logarithmicDepthToViewZ, viewZToOrthographicDepth } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
@@ -14,6 +14,8 @@ let _rendererState;
|
|
|
14
14
|
* - {@link https://alextardif.com/TAA.html}
|
|
15
15
|
* - {@link https://www.elopezr.com/temporal-aa-and-the-quest-for-the-holy-trail/}
|
|
16
16
|
*
|
|
17
|
+
* Note: MSAA must be disabled when TRAA is in use.
|
|
18
|
+
*
|
|
17
19
|
* @augments TempNode
|
|
18
20
|
* @three_import import { traa } from 'three/addons/tsl/display/TRAANode.js';
|
|
19
21
|
*/
|
|
@@ -77,60 +79,62 @@ class TRAANode extends TempNode {
|
|
|
77
79
|
this.velocityNode = velocityNode;
|
|
78
80
|
|
|
79
81
|
/**
|
|
80
|
-
*
|
|
82
|
+
* The camera the scene is rendered with.
|
|
81
83
|
*
|
|
82
84
|
* @type {Camera}
|
|
83
85
|
*/
|
|
84
86
|
this.camera = camera;
|
|
85
87
|
|
|
86
88
|
/**
|
|
87
|
-
*
|
|
89
|
+
* When the difference between the current and previous depth goes above this threshold,
|
|
90
|
+
* the history is considered invalid.
|
|
88
91
|
*
|
|
89
|
-
* @private
|
|
90
92
|
* @type {number}
|
|
91
|
-
* @default 0
|
|
93
|
+
* @default 0.0005
|
|
92
94
|
*/
|
|
93
|
-
this.
|
|
95
|
+
this.depthThreshold = 0.0005;
|
|
94
96
|
|
|
95
97
|
/**
|
|
96
|
-
*
|
|
98
|
+
* The depth difference within the 3×3 neighborhood to consider a pixel as an edge.
|
|
97
99
|
*
|
|
98
|
-
* @
|
|
99
|
-
* @
|
|
100
|
+
* @type {number}
|
|
101
|
+
* @default 0.001
|
|
100
102
|
*/
|
|
101
|
-
this.
|
|
103
|
+
this.edgeDepthDiff = 0.001;
|
|
102
104
|
|
|
103
105
|
/**
|
|
104
|
-
*
|
|
106
|
+
* The history becomes invalid as the pixel length of the velocity approaches this value.
|
|
105
107
|
*
|
|
106
|
-
* @
|
|
107
|
-
* @
|
|
108
|
+
* @type {number}
|
|
109
|
+
* @default 128
|
|
108
110
|
*/
|
|
109
|
-
this.
|
|
111
|
+
this.maxVelocityLength = 128;
|
|
110
112
|
|
|
111
113
|
/**
|
|
112
|
-
*
|
|
114
|
+
* Whether to decrease the weight on the current frame when the velocity is more subpixel.
|
|
115
|
+
* This reduces blurriness under motion, but can introduce a square pattern artifact.
|
|
113
116
|
*
|
|
114
|
-
* @
|
|
115
|
-
* @
|
|
117
|
+
* @type {boolean}
|
|
118
|
+
* @default true
|
|
116
119
|
*/
|
|
117
|
-
this.
|
|
120
|
+
this.useSubpixelCorrection = true;
|
|
118
121
|
|
|
119
122
|
/**
|
|
120
|
-
*
|
|
123
|
+
* The jitter index selects the current camera offset value.
|
|
121
124
|
*
|
|
122
125
|
* @private
|
|
123
|
-
* @type {
|
|
126
|
+
* @type {number}
|
|
127
|
+
* @default 0
|
|
124
128
|
*/
|
|
125
|
-
this.
|
|
129
|
+
this._jitterIndex = 0;
|
|
126
130
|
|
|
127
131
|
/**
|
|
128
|
-
* A uniform node holding the
|
|
132
|
+
* A uniform node holding the inverse resolution value.
|
|
129
133
|
*
|
|
130
134
|
* @private
|
|
131
|
-
* @type {UniformNode<
|
|
135
|
+
* @type {UniformNode<vec2>}
|
|
132
136
|
*/
|
|
133
|
-
this.
|
|
137
|
+
this._invSize = uniform( new Vector2() );
|
|
134
138
|
|
|
135
139
|
/**
|
|
136
140
|
* The render target that represents the history of frame data.
|
|
@@ -175,6 +179,54 @@ class TRAANode extends TempNode {
|
|
|
175
179
|
*/
|
|
176
180
|
this._originalProjectionMatrix = new Matrix4();
|
|
177
181
|
|
|
182
|
+
/**
|
|
183
|
+
* A uniform node holding the camera's near and far.
|
|
184
|
+
*
|
|
185
|
+
* @private
|
|
186
|
+
* @type {UniformNode<vec2>}
|
|
187
|
+
*/
|
|
188
|
+
this._cameraNearFar = uniform( new Vector2() );
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* A uniform node holding the camera world matrix.
|
|
192
|
+
*
|
|
193
|
+
* @private
|
|
194
|
+
* @type {UniformNode<mat4>}
|
|
195
|
+
*/
|
|
196
|
+
this._cameraWorldMatrix = uniform( new Matrix4() );
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* A uniform node holding the camera world matrix inverse.
|
|
200
|
+
*
|
|
201
|
+
* @private
|
|
202
|
+
* @type {UniformNode<mat4>}
|
|
203
|
+
*/
|
|
204
|
+
this._cameraWorldMatrixInverse = uniform( new Matrix4() );
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* A uniform node holding the camera projection matrix inverse.
|
|
208
|
+
*
|
|
209
|
+
* @private
|
|
210
|
+
* @type {UniformNode<mat4>}
|
|
211
|
+
*/
|
|
212
|
+
this._cameraProjectionMatrixInverse = uniform( new Matrix4() );
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* A uniform node holding the previous frame's view matrix.
|
|
216
|
+
*
|
|
217
|
+
* @private
|
|
218
|
+
* @type {UniformNode<mat4>}
|
|
219
|
+
*/
|
|
220
|
+
this._previousCameraWorldMatrix = uniform( new Matrix4() );
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* A uniform node holding the previous frame's projection matrix inverse.
|
|
224
|
+
*
|
|
225
|
+
* @private
|
|
226
|
+
* @type {UniformNode<mat4>}
|
|
227
|
+
*/
|
|
228
|
+
this._previousCameraProjectionMatrixInverse = uniform( new Matrix4() );
|
|
229
|
+
|
|
178
230
|
/**
|
|
179
231
|
* A texture node for the previous depth buffer.
|
|
180
232
|
*
|
|
@@ -185,11 +237,20 @@ class TRAANode extends TempNode {
|
|
|
185
237
|
|
|
186
238
|
/**
|
|
187
239
|
* Sync the post processing stack with the TRAA node.
|
|
240
|
+
*
|
|
188
241
|
* @private
|
|
189
242
|
* @type {boolean}
|
|
190
243
|
*/
|
|
191
244
|
this._needsPostProcessingSync = false;
|
|
192
245
|
|
|
246
|
+
/**
|
|
247
|
+
* The node used to render the scene's velocity.
|
|
248
|
+
*
|
|
249
|
+
* @private
|
|
250
|
+
* @type {?VelocityNode}
|
|
251
|
+
*/
|
|
252
|
+
this._velocityNode = null;
|
|
253
|
+
|
|
193
254
|
}
|
|
194
255
|
|
|
195
256
|
/**
|
|
@@ -232,7 +293,7 @@ class TRAANode extends TempNode {
|
|
|
232
293
|
this.camera.updateProjectionMatrix();
|
|
233
294
|
this._originalProjectionMatrix.copy( this.camera.projectionMatrix );
|
|
234
295
|
|
|
235
|
-
|
|
296
|
+
this._velocityNode.setProjectionMatrix( this._originalProjectionMatrix );
|
|
236
297
|
|
|
237
298
|
//
|
|
238
299
|
|
|
@@ -247,13 +308,13 @@ class TRAANode extends TempNode {
|
|
|
247
308
|
|
|
248
309
|
};
|
|
249
310
|
|
|
250
|
-
const jitterOffset =
|
|
311
|
+
const jitterOffset = _haltonOffsets[ this._jitterIndex ];
|
|
251
312
|
|
|
252
313
|
this.camera.setViewOffset(
|
|
253
314
|
|
|
254
315
|
viewOffset.fullWidth, viewOffset.fullHeight,
|
|
255
316
|
|
|
256
|
-
viewOffset.offsetX + jitterOffset[ 0 ]
|
|
317
|
+
viewOffset.offsetX + jitterOffset[ 0 ] - 0.5, viewOffset.offsetY + jitterOffset[ 1 ] - 0.5,
|
|
257
318
|
|
|
258
319
|
viewOffset.width, viewOffset.height
|
|
259
320
|
|
|
@@ -268,12 +329,12 @@ class TRAANode extends TempNode {
|
|
|
268
329
|
|
|
269
330
|
this.camera.clearViewOffset();
|
|
270
331
|
|
|
271
|
-
|
|
332
|
+
this._velocityNode.setProjectionMatrix( null );
|
|
272
333
|
|
|
273
334
|
// update jitter index
|
|
274
335
|
|
|
275
336
|
this._jitterIndex ++;
|
|
276
|
-
this._jitterIndex = this._jitterIndex % (
|
|
337
|
+
this._jitterIndex = this._jitterIndex % ( _haltonOffsets.length - 1 );
|
|
277
338
|
|
|
278
339
|
}
|
|
279
340
|
|
|
@@ -293,7 +354,9 @@ class TRAANode extends TempNode {
|
|
|
293
354
|
|
|
294
355
|
// update camera matrices uniforms
|
|
295
356
|
|
|
357
|
+
this._cameraNearFar.value.set( this.camera.near, this.camera.far );
|
|
296
358
|
this._cameraWorldMatrix.value.copy( this.camera.matrixWorld );
|
|
359
|
+
this._cameraWorldMatrixInverse.value.copy( this.camera.matrixWorldInverse );
|
|
297
360
|
this._cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
|
|
298
361
|
|
|
299
362
|
// keep the TRAA in sync with the dimensions of the beauty node
|
|
@@ -324,13 +387,10 @@ class TRAANode extends TempNode {
|
|
|
324
387
|
|
|
325
388
|
if ( needsRestart === true ) {
|
|
326
389
|
|
|
327
|
-
//
|
|
390
|
+
// make sure render targets are initialized after the resize which triggers a dispose()
|
|
328
391
|
|
|
329
|
-
renderer.
|
|
330
|
-
renderer.
|
|
331
|
-
|
|
332
|
-
renderer.setRenderTarget( this._resolveRenderTarget );
|
|
333
|
-
renderer.clear();
|
|
392
|
+
renderer.initRenderTarget( this._historyRenderTarget );
|
|
393
|
+
renderer.initRenderTarget( this._resolveRenderTarget );
|
|
334
394
|
|
|
335
395
|
// make sure to reset the history with the contents of the beauty buffer otherwise subsequent frames after the
|
|
336
396
|
// resize will fade from a darker color to the correct one because the history was cleared with black.
|
|
@@ -382,20 +442,20 @@ class TRAANode extends TempNode {
|
|
|
382
442
|
*/
|
|
383
443
|
setup( builder ) {
|
|
384
444
|
|
|
385
|
-
const
|
|
445
|
+
const renderPipeline = builder.context.renderPipeline;
|
|
386
446
|
|
|
387
|
-
if (
|
|
447
|
+
if ( renderPipeline ) {
|
|
388
448
|
|
|
389
449
|
this._needsPostProcessingSync = true;
|
|
390
450
|
|
|
391
|
-
|
|
451
|
+
renderPipeline.context.onBeforeRenderPipeline = () => {
|
|
392
452
|
|
|
393
453
|
const size = builder.renderer.getDrawingBufferSize( _size );
|
|
394
454
|
this.setViewOffset( size.width, size.height );
|
|
395
455
|
|
|
396
456
|
};
|
|
397
457
|
|
|
398
|
-
|
|
458
|
+
renderPipeline.context.onAfterRenderPipeline = () => {
|
|
399
459
|
|
|
400
460
|
this.clearViewOffset();
|
|
401
461
|
|
|
@@ -403,123 +463,247 @@ class TRAANode extends TempNode {
|
|
|
403
463
|
|
|
404
464
|
}
|
|
405
465
|
|
|
406
|
-
|
|
407
|
-
const sampleTexture = this.beautyNode;
|
|
408
|
-
const depthTexture = this.depthNode;
|
|
409
|
-
const velocityTexture = this.velocityNode;
|
|
466
|
+
if ( builder.renderer.reversedDepthBuffer === true ) {
|
|
410
467
|
|
|
411
|
-
|
|
468
|
+
this._historyRenderTarget.depthTexture.type = FloatType;
|
|
412
469
|
|
|
413
|
-
|
|
470
|
+
}
|
|
414
471
|
|
|
415
|
-
|
|
416
|
-
const maxColor = vec4( - 10000 ).toVar();
|
|
417
|
-
const closestDepth = float( 1 ).toVar();
|
|
418
|
-
const farthestDepth = float( 0 ).toVar();
|
|
419
|
-
const closestDepthPixelPosition = vec2( 0 ).toVar();
|
|
472
|
+
if ( builder.context.velocity !== undefined ) {
|
|
420
473
|
|
|
421
|
-
|
|
422
|
-
// clamping the history color with the resulting min/max colors mitigates ghosting
|
|
474
|
+
this._velocityNode = builder.context.velocity;
|
|
423
475
|
|
|
424
|
-
|
|
476
|
+
} else {
|
|
425
477
|
|
|
426
|
-
|
|
478
|
+
this._velocityNode = velocity;
|
|
427
479
|
|
|
428
|
-
|
|
429
|
-
const colorNeighbor = max( vec4( 0 ), sampleTexture.sample( uvNeighbor ) ).toVar(); // use max() to avoid propagate garbage values
|
|
480
|
+
}
|
|
430
481
|
|
|
431
|
-
|
|
432
|
-
maxColor.assign( max( maxColor, colorNeighbor ) );
|
|
482
|
+
const logarithmicToPerspectiveDepth = ( depth ) => {
|
|
433
483
|
|
|
434
|
-
|
|
484
|
+
const { x: near, y: far } = this._cameraNearFar;
|
|
485
|
+
const viewZ = logarithmicDepthToViewZ( depth, near, far );
|
|
486
|
+
return viewZToPerspectiveDepth( viewZ, near, far );
|
|
435
487
|
|
|
436
|
-
|
|
488
|
+
};
|
|
437
489
|
|
|
438
|
-
|
|
490
|
+
const currentDepthStruct = struct( {
|
|
439
491
|
|
|
440
|
-
|
|
441
|
-
|
|
492
|
+
closestDepth: 'float',
|
|
493
|
+
closestPositionTexel: 'vec2',
|
|
494
|
+
farthestDepth: 'float',
|
|
442
495
|
|
|
443
|
-
|
|
496
|
+
} );
|
|
497
|
+
|
|
498
|
+
// Samples 3×3 neighborhood pixels and returns the closest and farthest depths.
|
|
499
|
+
const sampleCurrentDepth = Fn( ( [ positionTexel ] ) => {
|
|
444
500
|
|
|
445
|
-
|
|
501
|
+
const closestDepth = float( 2 ).toVar();
|
|
502
|
+
const closestPositionTexel = vec2( 0 ).toVar();
|
|
503
|
+
const farthestDepth = float( - 1 ).toVar();
|
|
446
504
|
|
|
447
|
-
|
|
505
|
+
for ( let x = - 1; x <= 1; ++ x ) {
|
|
448
506
|
|
|
449
|
-
|
|
507
|
+
for ( let y = - 1; y <= 1; ++ y ) {
|
|
508
|
+
|
|
509
|
+
const neighbor = positionTexel.add( vec2( x, y ) ).toVar();
|
|
510
|
+
let depth = this.depthNode.load( neighbor ).r;
|
|
511
|
+
if ( builder.renderer.reversedDepthBuffer ) depth = depth.oneMinus();
|
|
512
|
+
if ( builder.renderer.logarithmicDepthBuffer ) depth = logarithmicToPerspectiveDepth( depth );
|
|
513
|
+
depth = depth.toVar();
|
|
514
|
+
|
|
515
|
+
If( depth.lessThan( closestDepth ), () => {
|
|
516
|
+
|
|
517
|
+
closestDepth.assign( depth );
|
|
518
|
+
closestPositionTexel.assign( neighbor );
|
|
450
519
|
|
|
451
520
|
} );
|
|
452
521
|
|
|
453
|
-
|
|
522
|
+
If( depth.greaterThan( farthestDepth ), () => {
|
|
454
523
|
|
|
455
|
-
|
|
524
|
+
farthestDepth.assign( depth );
|
|
456
525
|
|
|
457
|
-
|
|
526
|
+
} );
|
|
458
527
|
|
|
459
|
-
|
|
528
|
+
}
|
|
460
529
|
|
|
461
|
-
|
|
462
|
-
const historyColor = historyTexture.sample( uvNode.sub( offset ) );
|
|
530
|
+
}
|
|
463
531
|
|
|
464
|
-
|
|
532
|
+
return currentDepthStruct( closestDepth, closestPositionTexel, farthestDepth );
|
|
465
533
|
|
|
466
|
-
|
|
534
|
+
} );
|
|
467
535
|
|
|
468
|
-
|
|
536
|
+
// Samples a previous depth and reproject it using the current camera matrices.
|
|
537
|
+
const samplePreviousDepth = ( uv ) => {
|
|
469
538
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
const
|
|
539
|
+
let depth = this._previousDepthNode.sample( uv ).r;
|
|
540
|
+
if ( builder.renderer.logarithmicDepthBuffer ) depth = logarithmicToPerspectiveDepth( depth );
|
|
541
|
+
const positionView = getViewPosition( uv, depth, this._previousCameraProjectionMatrixInverse );
|
|
542
|
+
const positionWorld = this._previousCameraWorldMatrix.mul( vec4( positionView, 1 ) ).xyz;
|
|
543
|
+
const viewZ = this._cameraWorldMatrixInverse.mul( vec4( positionWorld, 1 ) ).z;
|
|
544
|
+
return this.camera.isOrthographicCamera
|
|
545
|
+
? viewZToOrthographicDepth( viewZ, this._cameraNearFar.x, this._cameraNearFar.y )
|
|
546
|
+
: viewZToPerspectiveDepth( viewZ, this._cameraNearFar.x, this._cameraNearFar.y );
|
|
473
547
|
|
|
474
|
-
|
|
548
|
+
};
|
|
475
549
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
550
|
+
// Optimized version of AABB clipping.
|
|
551
|
+
// Reference: https://github.com/playdeadgames/temporal
|
|
552
|
+
const clipAABB = Fn( ( [ currentColor, historyColor, minColor, maxColor ] ) => {
|
|
553
|
+
|
|
554
|
+
const pClip = maxColor.rgb.add( minColor.rgb ).mul( 0.5 );
|
|
555
|
+
const eClip = maxColor.rgb.sub( minColor.rgb ).mul( 0.5 ).add( 1e-7 );
|
|
556
|
+
const vClip = historyColor.sub( vec4( pClip, currentColor.a ) );
|
|
557
|
+
const vUnit = vClip.xyz.div( eClip );
|
|
558
|
+
const absUnit = vUnit.abs();
|
|
559
|
+
const maxUnit = max( absUnit.x, absUnit.y, absUnit.z );
|
|
560
|
+
return maxUnit.greaterThan( 1 ).select(
|
|
561
|
+
vec4( pClip, currentColor.a ).add( vClip.div( maxUnit ) ),
|
|
562
|
+
historyColor
|
|
563
|
+
);
|
|
564
|
+
|
|
565
|
+
} ).setLayout( {
|
|
566
|
+
name: 'clipAABB',
|
|
567
|
+
type: 'vec4',
|
|
568
|
+
inputs: [
|
|
569
|
+
{ name: 'currentColor', type: 'vec4' },
|
|
570
|
+
{ name: 'historyColor', type: 'vec4' },
|
|
571
|
+
{ name: 'minColor', type: 'vec4' },
|
|
572
|
+
{ name: 'maxColor', type: 'vec4' }
|
|
573
|
+
]
|
|
574
|
+
} );
|
|
480
575
|
|
|
481
|
-
|
|
576
|
+
// Performs variance clipping.
|
|
577
|
+
// See: https://developer.download.nvidia.com/gameworks/events/GDC2016/msalvi_temporal_supersampling.pdf
|
|
578
|
+
const varianceClipping = Fn( ( [ positionTexel, currentColor, historyColor, gamma ] ) => {
|
|
482
579
|
|
|
483
|
-
const
|
|
484
|
-
|
|
580
|
+
const offsets = [
|
|
581
|
+
[ - 1, - 1 ],
|
|
582
|
+
[ - 1, 1 ],
|
|
583
|
+
[ 1, - 1 ],
|
|
584
|
+
[ 1, 1 ],
|
|
585
|
+
[ 1, 0 ],
|
|
586
|
+
[ 0, - 1 ],
|
|
587
|
+
[ 0, 1 ],
|
|
588
|
+
[ - 1, 0 ]
|
|
589
|
+
];
|
|
485
590
|
|
|
486
|
-
|
|
487
|
-
|
|
591
|
+
const moment1 = currentColor.toVar();
|
|
592
|
+
const moment2 = currentColor.pow2().toVar();
|
|
488
593
|
|
|
489
|
-
const
|
|
490
|
-
const motionFactor = max( worldPositionDifference.mul( 0.5 ), velocityMagnitude.mul( 10.0 ) ).toVar();
|
|
491
|
-
motionFactor.assign( min( motionFactor, 1.0 ) );
|
|
594
|
+
for ( const [ x, y ] of offsets ) {
|
|
492
595
|
|
|
493
|
-
|
|
494
|
-
|
|
596
|
+
// Use max() to prevent NaN values from propagating.
|
|
597
|
+
const neighbor = this.beautyNode.offset( ivec2( x, y ) ).load( positionTexel ).max( 0 );
|
|
598
|
+
moment1.addAssign( neighbor );
|
|
599
|
+
moment2.addAssign( neighbor.pow2() );
|
|
495
600
|
|
|
496
|
-
|
|
497
|
-
// note that the constants 0.00001 and 0.5 were suggested by CLAUDE in #32133
|
|
601
|
+
}
|
|
498
602
|
|
|
499
|
-
const
|
|
500
|
-
const
|
|
603
|
+
const N = float( offsets.length + 1 );
|
|
604
|
+
const mean = moment1.div( N );
|
|
605
|
+
const variance = moment2.div( N ).sub( mean.pow2() ).max( 0 ).sqrt().mul( gamma );
|
|
606
|
+
const minColor = mean.sub( variance );
|
|
607
|
+
const maxColor = mean.add( variance );
|
|
501
608
|
|
|
502
|
-
|
|
609
|
+
return clipAABB( mean.clamp( minColor, maxColor ), historyColor, minColor, maxColor );
|
|
503
610
|
|
|
504
|
-
|
|
505
|
-
historyWeight.assign( 0.0 );
|
|
611
|
+
} );
|
|
506
612
|
|
|
507
|
-
|
|
613
|
+
// Returns the amount of subpixel (expressed within [0, 1]) in the velocity.
|
|
614
|
+
const subpixelCorrection = Fn( ( [ velocityUV, textureSize ] ) => {
|
|
615
|
+
|
|
616
|
+
const velocityTexel = velocityUV.mul( textureSize );
|
|
617
|
+
const phase = velocityTexel.fract().abs();
|
|
618
|
+
const weight = max( phase, phase.oneMinus() );
|
|
619
|
+
return weight.x.mul( weight.y ).oneMinus().div( 0.75 );
|
|
620
|
+
|
|
621
|
+
} ).setLayout( {
|
|
622
|
+
name: 'subpixelCorrection',
|
|
623
|
+
type: 'float',
|
|
624
|
+
inputs: [
|
|
625
|
+
{ name: 'velocityUV', type: 'vec2' },
|
|
626
|
+
{ name: 'textureSize', type: 'ivec2' }
|
|
627
|
+
]
|
|
628
|
+
} );
|
|
508
629
|
|
|
509
|
-
|
|
630
|
+
// Flicker reduction based on luminance weighing.
|
|
631
|
+
const flickerReduction = Fn( ( [ currentColor, historyColor, currentWeight ] ) => {
|
|
510
632
|
|
|
511
|
-
const
|
|
512
|
-
const
|
|
633
|
+
const historyWeight = currentWeight.oneMinus();
|
|
634
|
+
const compressedCurrent = currentColor.mul( float( 1 ).div( ( max( currentColor.r, currentColor.g, currentColor.b ).add( 1 ) ) ) );
|
|
635
|
+
const compressedHistory = historyColor.mul( float( 1 ).div( ( max( historyColor.r, historyColor.g, historyColor.b ).add( 1 ) ) ) );
|
|
513
636
|
|
|
514
637
|
const luminanceCurrent = luminance( compressedCurrent.rgb );
|
|
515
638
|
const luminanceHistory = luminance( compressedHistory.rgb );
|
|
516
639
|
|
|
517
|
-
currentWeight.mulAssign( float( 1
|
|
518
|
-
historyWeight.mulAssign( float( 1
|
|
640
|
+
currentWeight.mulAssign( float( 1 ).div( luminanceCurrent.add( 1 ) ) );
|
|
641
|
+
historyWeight.mulAssign( float( 1 ).div( luminanceHistory.add( 1 ) ) );
|
|
519
642
|
|
|
520
|
-
|
|
643
|
+
return add( currentColor.mul( currentWeight ), historyColor.mul( historyWeight ) ).div( max( currentWeight.add( historyWeight ), 0.00001 ) ).toVar();
|
|
644
|
+
|
|
645
|
+
} );
|
|
521
646
|
|
|
522
|
-
|
|
647
|
+
const historyNode = texture( this._historyRenderTarget.texture );
|
|
648
|
+
|
|
649
|
+
const resolve = Fn( () => {
|
|
650
|
+
|
|
651
|
+
const uvNode = uv();
|
|
652
|
+
const textureSize = this.beautyNode.size(); // Assumes all the buffers share the same size.
|
|
653
|
+
const positionTexel = uvNode.mul( textureSize );
|
|
654
|
+
|
|
655
|
+
// sample the closest and farthest depths in the current buffer
|
|
656
|
+
|
|
657
|
+
const currentDepth = sampleCurrentDepth( positionTexel );
|
|
658
|
+
const closestDepth = currentDepth.get( 'closestDepth' );
|
|
659
|
+
const closestPositionTexel = currentDepth.get( 'closestPositionTexel' );
|
|
660
|
+
const farthestDepth = currentDepth.get( 'farthestDepth' );
|
|
661
|
+
|
|
662
|
+
// convert the NDC offset to UV offset
|
|
663
|
+
|
|
664
|
+
const offsetUV = this.velocityNode.load( closestPositionTexel ).xy.mul( vec2( 0.5, - 0.5 ) );
|
|
665
|
+
|
|
666
|
+
// sample the previous depth
|
|
667
|
+
|
|
668
|
+
const historyUV = uvNode.sub( offsetUV );
|
|
669
|
+
const previousDepth = samplePreviousDepth( historyUV );
|
|
670
|
+
|
|
671
|
+
// history is considered valid when the UV is in range and there's no disocclusion except on edges
|
|
672
|
+
|
|
673
|
+
const isValidUV = historyUV.greaterThanEqual( 0 ).all().and( historyUV.lessThanEqual( 1 ).all() );
|
|
674
|
+
const isEdge = farthestDepth.sub( closestDepth ).greaterThan( this.edgeDepthDiff );
|
|
675
|
+
const isDisocclusion = closestDepth.sub( previousDepth ).greaterThan( this.depthThreshold );
|
|
676
|
+
const hasValidHistory = isValidUV.and( isEdge.or( isDisocclusion.not() ) );
|
|
677
|
+
|
|
678
|
+
// sample the current and previous colors
|
|
679
|
+
|
|
680
|
+
const currentColor = this.beautyNode.sample( uvNode );
|
|
681
|
+
const historyColor = historyNode.sample( uvNode.sub( offsetUV ) );
|
|
682
|
+
|
|
683
|
+
// increase the weight towards the current frame under motion
|
|
684
|
+
|
|
685
|
+
const motionFactor = uvNode.sub( historyUV ).mul( textureSize ).length().div( this.maxVelocityLength ).saturate();
|
|
686
|
+
const currentWeight = float( 0.05 ).toVar(); // A minimum weight
|
|
687
|
+
|
|
688
|
+
if ( this.useSubpixelCorrection ) {
|
|
689
|
+
|
|
690
|
+
// Increase the minimum weight towards the current frame when the velocity is more subpixel.
|
|
691
|
+
currentWeight.addAssign( subpixelCorrection( offsetUV, textureSize ).mul( 0.25 ) );
|
|
692
|
+
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
currentWeight.assign( hasValidHistory.select( currentWeight.add( motionFactor ).saturate(), 1 ) );
|
|
696
|
+
|
|
697
|
+
// Perform neighborhood clipping/clamping. We use variance clipping here.
|
|
698
|
+
|
|
699
|
+
const varianceGamma = mix( 0.5, 1, motionFactor.oneMinus().pow2() ); // Reasonable gamma range is [0.75, 2]
|
|
700
|
+
const clippedHistoryColor = varianceClipping( positionTexel, currentColor, historyColor, varianceGamma );
|
|
701
|
+
|
|
702
|
+
// flicker reduction based on luminance weighing
|
|
703
|
+
|
|
704
|
+
const output = flickerReduction( currentColor, clippedHistoryColor, currentWeight );
|
|
705
|
+
|
|
706
|
+
return output;
|
|
523
707
|
|
|
524
708
|
} );
|
|
525
709
|
|
|
@@ -548,21 +732,26 @@ class TRAANode extends TempNode {
|
|
|
548
732
|
|
|
549
733
|
export default TRAANode;
|
|
550
734
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
735
|
+
function _halton( index, base ) {
|
|
736
|
+
|
|
737
|
+
let fraction = 1;
|
|
738
|
+
let result = 0;
|
|
739
|
+
while ( index > 0 ) {
|
|
740
|
+
|
|
741
|
+
fraction /= base;
|
|
742
|
+
result += fraction * ( index % base );
|
|
743
|
+
index = Math.floor( index / base );
|
|
744
|
+
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
return result;
|
|
748
|
+
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
const _haltonOffsets = /*@__PURE__*/ Array.from(
|
|
752
|
+
{ length: 32 },
|
|
753
|
+
( _, index ) => [ _halton( index + 1, 2 ), _halton( index + 1, 3 ) ]
|
|
754
|
+
);
|
|
566
755
|
|
|
567
756
|
/**
|
|
568
757
|
* TSL function for creating a TRAA node for Temporal Reprojection Anti-Aliasing.
|
|
@@ -575,4 +764,4 @@ const _JitterVectors = [
|
|
|
575
764
|
* @param {Camera} camera - The camera the scene is rendered with.
|
|
576
765
|
* @returns {TRAANode}
|
|
577
766
|
*/
|
|
578
|
-
export const traa = ( beautyNode, depthNode, velocityNode, camera ) =>
|
|
767
|
+
export const traa = ( beautyNode, depthNode, velocityNode, camera ) => new TRAANode( convertToTexture( beautyNode ), depthNode, velocityNode, camera );
|