@unikia/upe-renderer 0.186.110 → 0.187.11
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 +5 -7
- package/UPSTREAM.md +4 -4
- package/build/three.core.js +853 -277
- package/build/three.module.js +1098 -1280
- package/build/three.tsl.js +41938 -686
- package/build/three.webgpu.js +10604 -49055
- package/build/three.webgpu.nodes.js +9249 -5788
- package/examples/jsm/Addons.js +2 -0
- package/examples/jsm/animation/CCDIKSolver.js +17 -5
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +27 -14
- package/examples/jsm/csm/CSMShader.js +74 -3
- package/examples/jsm/curves/CurveExtras.js +4 -4
- package/examples/jsm/curves/NURBSCurve.js +14 -0
- package/examples/jsm/exporters/EXRExporter.js +673 -16
- package/examples/jsm/exporters/GLTFExporter.js +4 -4
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/OBJExporter.js +48 -5
- package/examples/jsm/exporters/PLYExporter.js +22 -11
- package/examples/jsm/generators/CityGenerator.js +3 -2
- package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
- package/examples/jsm/gpgpu/BitonicSort.js +30 -23
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
- package/examples/jsm/inspector/Extension.js +1 -1
- package/examples/jsm/inspector/Inspector.js +6 -46
- package/examples/jsm/inspector/RendererInspector.js +43 -8
- package/examples/jsm/inspector/Storage.js +49 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
- package/examples/jsm/inspector/tabs/Parameters.js +5 -1
- package/examples/jsm/inspector/tabs/Performance.js +22 -7
- package/examples/jsm/inspector/tabs/Settings.js +1 -1
- package/examples/jsm/inspector/tabs/Timeline.js +83 -7
- package/examples/jsm/inspector/tabs/Viewer.js +25 -10
- package/examples/jsm/inspector/ui/Profiler.js +1 -1
- package/examples/jsm/inspector/ui/Style.js +21 -53
- package/examples/jsm/inspector/ui/Values.js +28 -3
- package/examples/jsm/libs/fflate.module.js +83 -56
- package/examples/jsm/libs/mikktspace.README.md +27 -0
- package/examples/jsm/libs/mikktspace.module.js +721 -109
- package/examples/jsm/lighting/ClusteredLighting.js +100 -2
- package/examples/jsm/lighting/LightMapper.js +295 -0
- package/examples/jsm/lighting/LightProbeGrid.js +242 -139
- package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
- package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
- package/examples/jsm/lights/SunLight.js +9 -4
- package/examples/jsm/lights/SunLightNode.js +3 -3
- package/examples/jsm/lines/LineMaterial.js +26 -10
- package/examples/jsm/loaders/3DMLoader.js +10 -1
- package/examples/jsm/loaders/3MFLoader.js +5 -1
- package/examples/jsm/loaders/AMFLoader.js +2 -0
- package/examples/jsm/loaders/BVHLoader.js +2 -0
- package/examples/jsm/loaders/ColladaLoader.js +8 -0
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +5 -1
- package/examples/jsm/loaders/EXRLoader.js +120 -104
- package/examples/jsm/loaders/FBXLoader.js +4 -0
- package/examples/jsm/loaders/FontLoader.js +2 -0
- package/examples/jsm/loaders/GCodeLoader.js +5 -9
- package/examples/jsm/loaders/GLTFLoader.js +112 -31
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
- package/examples/jsm/loaders/IESLoader.js +46 -12
- package/examples/jsm/loaders/JXLLoader.js +159 -0
- package/examples/jsm/loaders/KMZLoader.js +6 -0
- package/examples/jsm/loaders/KSPLATLoader.js +2 -0
- package/examples/jsm/loaders/KTX2Loader.js +49 -4
- package/examples/jsm/loaders/KTXLoader.js +5 -3
- package/examples/jsm/loaders/LDrawLoader.js +15 -22
- package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
- package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
- package/examples/jsm/loaders/LUTImageLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +6 -0
- package/examples/jsm/loaders/MD2Loader.js +2 -0
- package/examples/jsm/loaders/MDDLoader.js +4 -0
- package/examples/jsm/loaders/MTLLoader.js +8 -0
- package/examples/jsm/loaders/MaterialXLoader.js +57 -5
- package/examples/jsm/loaders/NRRDLoader.js +4 -2
- package/examples/jsm/loaders/OBJLoader.js +10 -4
- package/examples/jsm/loaders/PCDLoader.js +6 -2
- package/examples/jsm/loaders/PDBLoader.js +5 -3
- package/examples/jsm/loaders/PLYLoader.js +39 -15
- package/examples/jsm/loaders/PVRLoader.js +2 -2
- package/examples/jsm/loaders/SPLATLoader.js +2 -0
- package/examples/jsm/loaders/SPZLoader.js +2 -0
- package/examples/jsm/loaders/STLLoader.js +3 -1
- package/examples/jsm/loaders/SVGLoader.js +27 -49
- package/examples/jsm/loaders/TDSLoader.js +4 -0
- package/examples/jsm/loaders/TGALoader.js +6 -5
- package/examples/jsm/loaders/TTFLoader.js +2 -0
- package/examples/jsm/loaders/USDLoader.js +14 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
- package/examples/jsm/loaders/VOXLoader.js +3 -0
- package/examples/jsm/loaders/VRMLLoader.js +4 -0
- package/examples/jsm/loaders/VTKLoader.js +2 -0
- package/examples/jsm/loaders/XYZLoader.js +2 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
- package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
- package/examples/jsm/loaders/usd/USDAParser.js +56 -47
- package/examples/jsm/loaders/usd/USDComposer.js +25 -30
- package/examples/jsm/math/ColorConverter.js +7 -3
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/OBB.js +3 -3
- package/examples/jsm/math/Octree.js +20 -17
- package/examples/jsm/objects/GaussianSplat.js +5 -4
- package/examples/jsm/objects/Reflector.js +5 -0
- package/examples/jsm/objects/SkyMesh.js +14 -7
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/physics/RapierPhysics.js +2 -2
- package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
- package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/GTAOPass.js +26 -18
- package/examples/jsm/renderers/SVGRenderer.js +3 -2
- package/examples/jsm/shaders/GTAOShader.js +7 -4
- package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
- package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
- package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
- package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
- package/examples/jsm/tsl/display/BloomNode.js +3 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
- package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
- package/examples/jsm/tsl/display/FSR1Node.js +3 -3
- package/examples/jsm/tsl/display/FXAANode.js +3 -10
- package/examples/jsm/tsl/display/FilmNode.js +3 -3
- package/examples/jsm/tsl/display/GTAONode.js +33 -25
- package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
- package/examples/jsm/tsl/display/GodraysNode.js +5 -19
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
- package/examples/jsm/tsl/display/LensflareNode.js +3 -3
- package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
- package/examples/jsm/tsl/display/OITPassNode.js +0 -11
- package/examples/jsm/tsl/display/OutlineNode.js +107 -5
- package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
- package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
- package/examples/jsm/tsl/display/SMAANode.js +3 -3
- package/examples/jsm/tsl/display/SSAONode.js +6 -20
- package/examples/jsm/tsl/display/SSGINode.js +36 -29
- package/examples/jsm/tsl/display/SSRNode.js +135 -63
- package/examples/jsm/tsl/display/SSSNode.js +6 -20
- package/examples/jsm/tsl/display/SharpenNode.js +3 -3
- package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
- package/examples/jsm/tsl/display/TAAUNode.js +10 -42
- package/examples/jsm/tsl/display/TRAANode.js +11 -43
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
- package/examples/jsm/tsl/display/TransitionNode.js +3 -3
- package/examples/jsm/tsl/display/lensDirt.js +30 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
- package/examples/jsm/tsl/utils/Raymarching.js +1 -1
- package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
- package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
- package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
- package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
- package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -1
- package/examples/jsm/utils/SceneUtils.js +1 -1
- package/examples/jsm/utils/unwrapUVs.js +865 -0
- package/examples/jsm/webxr/XREstimatedLight.js +11 -4
- package/package.json +3 -3
- package/src/Three.TSL.js +2 -683
- package/src/Three.WebGPU.Nodes.js +2 -1
- package/src/Three.WebGPU.js +2 -1
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationUtils.js +1 -3
- package/src/animation/KeyframeTrack.js +19 -0
- package/src/cameras/ArrayCamera.js +12 -0
- package/src/cameras/CubeCamera.js +3 -3
- package/src/constants.js +1 -9
- package/src/core/BufferAttribute.js +57 -21
- package/src/core/BufferGeometry.js +5 -13
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +28 -18
- package/src/core/InterleavedBufferAttribute.js +54 -20
- package/src/core/Object3D.js +19 -9
- package/src/core/Raycaster.js +2 -0
- package/src/core/RenderTarget.js +11 -5
- package/src/core/UniformsGroup.js +7 -3
- package/src/extras/PMREMGenerator.js +392 -685
- package/src/extras/core/Curve.js +4 -0
- package/src/extras/core/CurvePath.js +13 -0
- package/src/extras/core/ShapePath.js +1 -1
- package/src/geometries/EdgesGeometry.js +12 -10
- package/src/geometries/LatheGeometry.js +2 -0
- package/src/helpers/PolarGridHelper.js +1 -1
- package/src/lights/Light.js +11 -0
- package/src/lights/LightProbe.js +2 -0
- package/src/lights/LightShadow.js +2 -0
- package/src/loaders/AnimationLoader.js +2 -0
- package/src/loaders/AudioLoader.js +2 -0
- package/src/loaders/BufferGeometryLoader.js +2 -0
- package/src/loaders/CompressedTextureLoader.js +2 -0
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +2 -0
- package/src/loaders/FileLoader.js +2 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ImageLoader.js +1 -0
- package/src/loaders/Loader.js +47 -0
- package/src/loaders/MaterialLoader.js +2 -0
- package/src/loaders/ObjectLoader.js +27 -8
- package/src/loaders/TextureLoader.js +5 -3
- package/src/loaders/nodes/NodeLoader.js +2 -0
- package/src/materials/Material.js +21 -2
- package/src/materials/MeshDepthMaterial.js +1 -1
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +1 -1
- package/src/materials/MeshMatcapMaterial.js +1 -1
- package/src/materials/MeshNormalMaterial.js +1 -1
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +90 -11
- package/src/materials/MeshStandardMaterial.js +1 -1
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +32 -10
- package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
- package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
- package/src/materials/nodes/NodeMaterial.js +36 -16
- package/src/materials/nodes/NodeMaterialInstance.js +193 -0
- package/src/materials/nodes/NodeMaterials.js +1 -0
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
- package/src/math/Box3.js +2 -2
- package/src/math/Color.js +8 -8
- package/src/math/ColorManagement.js +2 -21
- package/src/math/FrustumArray.js +12 -0
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +2 -4
- package/src/math/MathUtils.js +33 -46
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +1 -1
- package/src/math/Matrix4.js +1 -1
- package/src/math/Triangle.js +2 -1
- package/src/math/Vector2.js +1 -1
- package/src/math/Vector3.js +1 -1
- package/src/math/Vector4.js +1 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +2 -0
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Batch.js +29 -23
- package/src/nodes/accessors/BufferAttributeNode.js +21 -1
- package/src/nodes/accessors/BuiltinNode.js +6 -0
- package/src/nodes/accessors/Camera.js +100 -93
- package/src/nodes/accessors/ClippingNode.js +17 -6
- package/src/nodes/accessors/CubeTextureNode.js +12 -24
- package/src/nodes/accessors/Instance.js +198 -160
- package/src/nodes/accessors/Lights.js +19 -6
- package/src/nodes/accessors/MaterialNode.js +33 -4
- package/src/nodes/accessors/Morph.js +81 -22
- package/src/nodes/accessors/Normal.js +0 -42
- package/src/nodes/accessors/Object3DNode.js +6 -0
- package/src/nodes/accessors/PointUVNode.js +6 -0
- package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
- package/src/nodes/accessors/ReferenceNode.js +6 -0
- package/src/nodes/accessors/Skinning.js +57 -52
- package/src/nodes/accessors/StorageBufferNode.js +3 -12
- package/src/nodes/accessors/TextureBicubic.js +30 -27
- package/src/nodes/accessors/TextureNode.js +164 -78
- package/src/nodes/accessors/TextureSizeNode.js +6 -0
- package/src/nodes/accessors/UniformArrayNode.js +8 -15
- package/src/nodes/accessors/VelocityNode.js +13 -8
- package/src/nodes/code/CodeNode.js +6 -0
- package/src/nodes/code/ExpressionNode.js +6 -0
- package/src/nodes/code/FunctionCallNode.js +3 -3
- package/src/nodes/code/FunctionNode.js +15 -13
- package/src/nodes/core/ArrayNode.js +3 -3
- package/src/nodes/core/AssignNode.js +10 -9
- package/src/nodes/core/AttributeNode.js +39 -0
- package/src/nodes/core/BypassNode.js +6 -0
- package/src/nodes/core/ConstNode.js +31 -1
- package/src/nodes/core/ContextNode.js +11 -6
- package/src/nodes/core/IndexNode.js +6 -0
- package/src/nodes/core/InputNode.js +6 -0
- package/src/nodes/core/InspectorNode.js +17 -31
- package/src/nodes/core/IsolateNode.js +8 -0
- package/src/nodes/core/Node.js +367 -67
- package/src/nodes/core/NodeBuilder.js +664 -222
- package/src/nodes/core/NodeUtils.js +25 -0
- package/src/nodes/core/NodeVar.js +10 -1
- package/src/nodes/core/OutputStructNode.js +6 -0
- package/src/nodes/core/OverrideContextNode.js +38 -37
- package/src/nodes/core/PropertyNode.js +14 -0
- package/src/nodes/core/StackNode.js +33 -21
- package/src/nodes/core/StructNode.js +6 -0
- package/src/nodes/core/StructTypeNode.js +6 -0
- package/src/nodes/core/SubBuildNode.js +8 -0
- package/src/nodes/core/TempNode.js +10 -35
- package/src/nodes/core/UniformGroupNode.js +6 -0
- package/src/nodes/core/VarNode.js +43 -135
- package/src/nodes/core/VaryingNode.js +33 -2
- package/src/nodes/display/BlendModes.js +5 -40
- package/src/nodes/display/BumpMapNode.js +17 -7
- package/src/nodes/display/ColorAdjustment.js +22 -10
- package/src/nodes/display/ColorSpaceFunctions.js +2 -14
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +6 -0
- package/src/nodes/display/NormalMapNode.js +3 -3
- package/src/nodes/display/PassNode.js +75 -16
- package/src/nodes/display/RenderOutputNode.js +22 -5
- package/src/nodes/display/ScreenNode.js +6 -0
- package/src/nodes/display/ToneMappingFunctions.js +9 -51
- package/src/nodes/display/ToneMappingNode.js +3 -3
- package/src/nodes/display/ToonOutlinePassNode.js +66 -2
- package/src/nodes/display/ViewportDepthNode.js +34 -4
- package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
- package/src/nodes/functions/BSDF/D_GGX.js +1 -8
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
- package/src/nodes/functions/BSDF/LTC.js +20 -47
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
- package/src/nodes/functions/PhysicalLightingModel.js +84 -51
- package/src/nodes/functions/VolumetricLightingModel.js +1 -1
- package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
- package/src/nodes/functions/material/getRoughness.js +3 -1
- package/src/nodes/geometry/RangeNode.js +52 -69
- package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
- package/src/nodes/gpgpu/BarrierNode.js +6 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
- package/src/nodes/gpgpu/ComputeNode.js +6 -0
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
- package/src/nodes/lighting/AnalyticLightNode.js +7 -14
- package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
- package/src/nodes/lighting/EnvironmentNode.js +58 -8
- package/src/nodes/lighting/IESSpotLightNode.js +19 -4
- package/src/nodes/lighting/LightProbeNode.js +2 -1
- package/src/nodes/lighting/LightUtils.js +2 -2
- package/src/nodes/lighting/LightingNode.js +6 -0
- package/src/nodes/lighting/LightsNode.js +26 -32
- package/src/nodes/lighting/PointShadowNode.js +92 -48
- package/src/nodes/lighting/ProjectorLightNode.js +1 -1
- package/src/nodes/lighting/RectAreaLightNode.js +13 -14
- package/src/nodes/lighting/ShadowBaseNode.js +9 -17
- package/src/nodes/lighting/ShadowFilterNode.js +26 -3
- package/src/nodes/lighting/ShadowNode.js +13 -11
- package/src/nodes/materialx/MaterialXColor.js +2 -14
- package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
- package/src/nodes/materialx/MaterialXNodes.js +8 -11
- package/src/nodes/materialx/MaterialXNoise.js +195 -454
- package/src/nodes/math/BitcastNode.js +5 -5
- package/src/nodes/math/BitcountNode.js +18 -46
- package/src/nodes/math/ConditionalNode.js +92 -22
- package/src/nodes/math/Hash.js +1 -1
- package/src/nodes/math/MathNode.js +86 -64
- package/src/nodes/math/MathUtils.js +2 -2
- package/src/nodes/math/OperatorNode.js +42 -59
- package/src/nodes/math/PackFloatNode.js +9 -9
- package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
- package/src/nodes/math/TriNoise3D.js +3 -23
- package/src/nodes/math/UnpackFloatNode.js +9 -9
- package/src/nodes/pmrem/PMREMNode.js +38 -75
- package/src/nodes/pmrem/PMREMUtils.js +108 -272
- package/src/nodes/procedural/Checker.js +1 -1
- package/src/nodes/tsl/TSLCore.js +199 -74
- package/src/nodes/utils/ArrayElementNode.js +19 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +2 -2
- package/src/nodes/utils/EventNode.js +6 -0
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +14 -9
- package/src/nodes/utils/MemberNode.js +18 -0
- package/src/nodes/utils/PostProcessingUtils.js +20 -25
- package/src/nodes/utils/RTTNode.js +2 -0
- package/src/nodes/utils/ReflectorNode.js +24 -0
- package/src/nodes/utils/RotateNode.js +3 -3
- package/src/nodes/utils/SampleNode.js +6 -0
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +6 -0
- package/src/nodes/utils/UVUtils.js +2 -2
- package/src/objects/BatchedMesh.js +146 -15
- package/src/objects/InstancedMesh.js +12 -4
- package/src/objects/Line.js +20 -0
- package/src/objects/Mesh.js +8 -0
- package/src/objects/Points.js +20 -0
- package/src/objects/Skeleton.js +26 -0
- package/src/objects/SkinnedMesh.js +3 -3
- package/src/objects/Sprite.js +10 -0
- package/src/renderers/WebGLRenderer.js +104 -70
- package/src/renderers/common/Animation.js +5 -1
- package/src/renderers/common/Attributes.js +67 -57
- package/src/renderers/common/Backend.js +78 -3
- package/src/renderers/common/BindGroup.js +11 -0
- package/src/renderers/common/Binding.js +0 -11
- package/src/renderers/common/Bindings.js +116 -10
- package/src/renderers/common/Buffer.js +1 -1
- package/src/renderers/common/ClippingContext.js +12 -1
- package/src/renderers/common/ComputePipeline.js +17 -1
- package/src/renderers/common/DirectRenderPipeline.js +7 -3
- package/src/renderers/common/Geometries.js +170 -132
- package/src/renderers/common/Info.js +1 -1
- package/src/renderers/common/InspectorBase.js +5 -5
- package/src/renderers/common/Lighting.js +59 -0
- package/src/renderers/common/Pipelines.js +26 -12
- package/src/renderers/common/ProgrammableStage.js +1 -17
- package/src/renderers/common/RenderContext.js +21 -0
- package/src/renderers/common/RenderContexts.js +13 -4
- package/src/renderers/common/RenderObject.js +111 -35
- package/src/renderers/common/RenderObjects.js +37 -19
- package/src/renderers/common/Renderer.js +537 -295
- package/src/renderers/common/RendererUtils.js +15 -0
- package/src/renderers/common/StandardDrawingPipeline.js +343 -0
- package/src/renderers/common/Storage3DTexture.js +11 -0
- package/src/renderers/common/StorageArrayTexture.js +10 -0
- package/src/renderers/common/StorageTexture.js +0 -9
- package/src/renderers/common/Textures.js +144 -37
- package/src/renderers/common/UniformsGroup.js +19 -0
- package/src/renderers/common/XRManager.js +10 -91
- package/src/renderers/common/extras/PMREMGenerator.js +298 -576
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
- package/src/renderers/common/nodes/NodeLibrary.js +11 -35
- package/src/renderers/common/nodes/NodeManager.js +80 -31
- package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
- package/src/renderers/common/nodes/NodeSampler.js +14 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
- package/src/renderers/shaders/ShaderLib.js +3 -0
- package/src/renderers/shaders/UniformsLib.js +4 -5
- package/src/renderers/webgl/WebGLBackground.js +3 -3
- package/src/renderers/webgl/WebGLBindingStates.js +4 -2
- package/src/renderers/webgl/WebGLCapabilities.js +7 -1
- package/src/renderers/webgl/WebGLEnvironments.js +2 -2
- package/src/renderers/webgl/WebGLGeometries.js +42 -14
- package/src/renderers/webgl/WebGLMaterials.js +15 -2
- package/src/renderers/webgl/WebGLOutput.js +37 -1
- package/src/renderers/webgl/WebGLProgram.js +13 -54
- package/src/renderers/webgl/WebGLPrograms.js +22 -8
- package/src/renderers/webgl/WebGLRenderStates.js +11 -8
- package/src/renderers/webgl/WebGLShadowMap.js +6 -4
- package/src/renderers/webgl/WebGLState.js +10 -6
- package/src/renderers/webgl/WebGLTextures.js +129 -77
- package/src/renderers/webgl/WebGLUniforms.js +44 -6
- package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
- package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
- package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
- package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
- package/src/renderers/webgpu/WebGPUBackend.js +140 -82
- package/src/renderers/webgpu/WebGPURenderer.js +1 -1
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
- package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
- package/src/renderers/webxr/WebXRController.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +5 -90
- package/src/scenes/Scene.js +4 -4
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -2
- package/src/textures/FramebufferTexture.js +11 -0
- package/src/textures/Texture.js +29 -1
- package/src/textures/TextureSource.js +1 -1
- package/src/upe.js +1 -1
- package/src/utils.js +4 -4
- package/examples/jsm/libs/surfaceNet.js +0 -201
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Break, Continue, Fn, If, Loop, abs, bool, cross, distance, div, dot, float, getScreenPosition, getViewPosition, int,
|
|
2
|
-
import { HalfFloatType, LinearFilter, LinearMipmapLinearFilter, Matrix4, NodeMaterial, NodeUpdateType, QuadMesh, RenderTarget, RendererUtils,
|
|
1
|
+
import { Break, Continue, Fn, If, Loop, abs, bool, cross, distance, div, dot, float, getScreenPosition, getViewPosition, int, luminance, max, min, mix, mul, nodeObject, normalize, orthographicDepthToViewZ, passTexture, perspectiveDepthToViewZ, reference, reflect, sub, texture, textureSize, trunc, uniform, uv, vec2, vec3, vec4, context, isBackgroundDepth, projectionDepth } from 'three/tsl';
|
|
2
|
+
import { HalfFloatType, LinearFilter, LinearMipmapLinearFilter, Matrix4, NodeMaterial, NodeUpdateType, QuadMesh, RenderTarget, RendererUtils, Node, Vector2, Vector3 } from 'three/webgpu';
|
|
3
3
|
import { bindAnalyticNoise } from '../utils/RNoise.js';
|
|
4
4
|
import { ENV_RAY_LENGTH, getSpecularDominantFactor, ggxReflectionSample } from '../utils/SpecularHelpers.js';
|
|
5
5
|
import { boxBlur } from './boxBlur.js';
|
|
@@ -16,6 +16,8 @@ const MAX_STEPS = 64;
|
|
|
16
16
|
* @typedef {Object} SSRNodeOptions
|
|
17
17
|
* @property {boolean} [stochastic=false] - When `false`, traces a single mirror reflection and softens roughness with a blur pass (first-generation SSR). When `true`, varies the reflection direction per pixel with stochastic GGX rays (second-generation SSR); higher quality on rough/glossy surfaces but noisier, so it expects a temporal/spatial denoiser downstream.
|
|
18
18
|
* @property {Node<float>} [metalnessNode=null] - Per-pixel metalness. Drives GGX reflection sampling and, with `reflectNonMetals=false`, the non-metal early-out.
|
|
19
|
+
* @property {Node<vec3>} [specularNode=null] - Stochastic mode only: material normal-incidence reflectance (F0), typically an MRT `specularColorBlended` attachment (it already includes IOR, specular intensity and metalness; raw `material.specularColor` reflects too brightly). Defaults to the metalness/base-color approximation.
|
|
20
|
+
* @property {Node<float>} [specularF90Node=null] - Stochastic mode only: material grazing reflectance, typically an MRT `specularF90` attachment. Defaults to one.
|
|
19
21
|
* @property {Node<float>} [roughnessNode=null] - Per-pixel roughness. Drives GGX sampling and the blur mip selection.
|
|
20
22
|
* @property {boolean} [reflectNonMetals=false] - Only used when `stochastic=false`. When `false`, non-metallic surfaces are discarded for a noticeable performance gain; set `true` to also reflect dielectrics (e.g. marble, polished wood, plastic).
|
|
21
23
|
* @property {Texture} [environmentNode=null] - Equirectangular HDR environment map with CPU-side `image.data` (e.g. from RGBELoader). Not compatible with PMREM / `scene.environment` cubemaps.
|
|
@@ -30,10 +32,10 @@ const MAX_STEPS = 64;
|
|
|
30
32
|
*
|
|
31
33
|
* Reference: {@link https://lettier.github.io/3d-game-shaders-for-beginners/screen-space-reflection.html}
|
|
32
34
|
*
|
|
33
|
-
* @augments
|
|
35
|
+
* @augments Node
|
|
34
36
|
* @three_import import { ssr } from 'three/addons/tsl/display/SSRNode.js';
|
|
35
37
|
*/
|
|
36
|
-
class SSRNode extends
|
|
38
|
+
class SSRNode extends Node {
|
|
37
39
|
|
|
38
40
|
static get type() {
|
|
39
41
|
|
|
@@ -56,6 +58,8 @@ class SSRNode extends TempNode {
|
|
|
56
58
|
const {
|
|
57
59
|
stochastic = false,
|
|
58
60
|
metalnessNode = null,
|
|
61
|
+
specularNode = null,
|
|
62
|
+
specularF90Node = null,
|
|
59
63
|
roughnessNode = null,
|
|
60
64
|
reflectNonMetals = false,
|
|
61
65
|
environmentNode = null,
|
|
@@ -120,6 +124,26 @@ class SSRNode extends TempNode {
|
|
|
120
124
|
*/
|
|
121
125
|
this.metalnessNode = metalnessNode;
|
|
122
126
|
|
|
127
|
+
/**
|
|
128
|
+
* Stochastic mode only: per-pixel normal-incidence reflectance (F0), typically an MRT
|
|
129
|
+
* `specularColorBlended` attachment, which already includes IOR, specular intensity and
|
|
130
|
+
* metalness (raw `material.specularColor` reflects too brightly). When `null`, F0 is
|
|
131
|
+
* derived from metalness and the diffuse color.
|
|
132
|
+
*
|
|
133
|
+
* @type {?Node<vec3>}
|
|
134
|
+
* @default null
|
|
135
|
+
*/
|
|
136
|
+
this.specularNode = specularNode;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Stochastic mode only: per-pixel grazing reflectance (F90), typically an MRT
|
|
140
|
+
* `specularF90` attachment. When `null`, the shader uses `1`.
|
|
141
|
+
*
|
|
142
|
+
* @type {?Node<float>}
|
|
143
|
+
* @default null
|
|
144
|
+
*/
|
|
145
|
+
this.specularF90Node = specularF90Node;
|
|
146
|
+
|
|
123
147
|
/**
|
|
124
148
|
* Per-pixel roughness, used to drive the GGX reflection sampling and the blur mip
|
|
125
149
|
* selection. When `null`, the shader treats surfaces as fully smooth.
|
|
@@ -230,13 +254,13 @@ class SSRNode extends TempNode {
|
|
|
230
254
|
|
|
231
255
|
/**
|
|
232
256
|
* Mirror bias for the stochastic GGX sampling. Concentrates the reflected rays toward
|
|
233
|
-
* the lobe's narrow (near-mirror) core, trading
|
|
257
|
+
* the lobe's narrow (near-mirror) core, trading sampling bias for less noise.
|
|
234
258
|
* `0` samples the full VNDF lobe; values toward `1` tighten the cone. Range `[0,1]`.
|
|
235
259
|
*
|
|
236
260
|
* @type {UniformNode<float>}
|
|
237
|
-
* @default 0
|
|
261
|
+
* @default 0
|
|
238
262
|
*/
|
|
239
|
-
this.mirrorBias = uniform( 0
|
|
263
|
+
this.mirrorBias = uniform( 0 );
|
|
240
264
|
|
|
241
265
|
/**
|
|
242
266
|
* The quality of the blur. Must be an integer in the range `[1,3]`.
|
|
@@ -812,7 +836,7 @@ class SSRNode extends TempNode {
|
|
|
812
836
|
|
|
813
837
|
return cross( point.sub( linePointA ), point.sub( linePointB ) ).length().div( linePointB.sub( linePointA ).length() );
|
|
814
838
|
|
|
815
|
-
} );
|
|
839
|
+
}, { point: 'vec3', linePointA: 'vec3', linePointB: 'vec3', return: 'float' } );
|
|
816
840
|
|
|
817
841
|
const pointPlaneDistance = Fn( ( [ point, planePoint, planeNormal ] ) => {
|
|
818
842
|
|
|
@@ -825,7 +849,7 @@ class SSRNode extends TempNode {
|
|
|
825
849
|
const distance = mul( planeNormal.x, point.x ).add( mul( planeNormal.y, point.y ) ).add( mul( planeNormal.z, point.z ) ).add( d );
|
|
826
850
|
return distance;
|
|
827
851
|
|
|
828
|
-
} );
|
|
852
|
+
}, { point: 'vec3', planePoint: 'vec3', planeNormal: 'vec3', return: 'float' } );
|
|
829
853
|
|
|
830
854
|
const getViewZ = Fn( ( [ depth ] ) => {
|
|
831
855
|
|
|
@@ -845,21 +869,7 @@ class SSRNode extends TempNode {
|
|
|
845
869
|
|
|
846
870
|
} );
|
|
847
871
|
|
|
848
|
-
const sampleDepth = ( uv ) =>
|
|
849
|
-
|
|
850
|
-
const depth = this.depthNode.sample( uv ).r;
|
|
851
|
-
|
|
852
|
-
if ( builder.renderer.logarithmicDepthBuffer === true ) {
|
|
853
|
-
|
|
854
|
-
const viewZ = logarithmicDepthToViewZ( depth, this._cameraNear, this._cameraFar );
|
|
855
|
-
|
|
856
|
-
return viewZToPerspectiveDepth( viewZ, this._cameraNear, this._cameraFar );
|
|
857
|
-
|
|
858
|
-
}
|
|
859
|
-
|
|
860
|
-
return depth;
|
|
861
|
-
|
|
862
|
-
};
|
|
872
|
+
const sampleDepth = ( uv ) => projectionDepth( this.depthNode.sample( uv ).r, this._cameraNear, this._cameraFar );
|
|
863
873
|
|
|
864
874
|
const sampleMarchNoise = this.stochastic === true ? bindAnalyticNoise( this._resolution, 47 ) : null;
|
|
865
875
|
|
|
@@ -878,24 +888,20 @@ class SSRNode extends TempNode {
|
|
|
878
888
|
|
|
879
889
|
return t.smoothstep( 0, 1 ).pow( 0.125 );
|
|
880
890
|
|
|
881
|
-
} )
|
|
882
|
-
name: 'computeScreenBorderFactor',
|
|
883
|
-
type: 'float',
|
|
884
|
-
inputs: [
|
|
885
|
-
{ name: 'uvCoord', type: 'vec2' },
|
|
886
|
-
{ name: 'borderWidth', type: 'float' }
|
|
887
|
-
]
|
|
888
|
-
} );
|
|
891
|
+
}, { uvCoord: 'vec2', borderWidth: 'float', return: 'float' } );
|
|
889
892
|
|
|
890
893
|
const ssr = Fn( () => {
|
|
891
894
|
|
|
892
895
|
const noise = this.stochastic === true ? sampleMarchNoise( uvNode, this._noiseIndex ) : null;
|
|
893
|
-
|
|
896
|
+
// reconstruct at the depth texel center
|
|
897
|
+
|
|
898
|
+
const depthSize = vec2( textureSize( this.depthNode ) ).toConst();
|
|
899
|
+
const uvPos = uvNode.mul( depthSize ).floor().add( 0.5 ).div( depthSize ).toVar();
|
|
894
900
|
|
|
895
901
|
const depth = sampleDepth( uvPos ).toVar();
|
|
896
902
|
|
|
897
903
|
// Skip background pixels (cleared far-plane depth); the target is cleared each frame.
|
|
898
|
-
|
|
904
|
+
isBackgroundDepth( depth ).discard();
|
|
899
905
|
|
|
900
906
|
const viewPosition = getViewPosition( uvPos, depth, this._cameraProjectionMatrixInverse ).toVar();
|
|
901
907
|
const worldPosition = this._cameraWorldMatrix.mul( vec4( viewPosition, 1.0 ) ).xyz.toVar();
|
|
@@ -922,7 +928,6 @@ class SSRNode extends TempNode {
|
|
|
922
928
|
const V = viewIncidentDir.negate().normalize().toVar();
|
|
923
929
|
|
|
924
930
|
let viewReflectDir, finalSampleWeight, specDominantFactor;
|
|
925
|
-
const albedo = vec3( 1 ).toVar();
|
|
926
931
|
let sampleEnvReflection = null;
|
|
927
932
|
|
|
928
933
|
if ( this.stochastic === false ) {
|
|
@@ -934,17 +939,17 @@ class SSRNode extends TempNode {
|
|
|
934
939
|
} else {
|
|
935
940
|
|
|
936
941
|
const Xi = noise.toVar();
|
|
937
|
-
//
|
|
938
|
-
// noise. Unbiased — bounded VNDF keeps brdf·cos/pdf ~constant (EA, "Stochastic SSR").
|
|
942
|
+
// mirror bias trades the unbiased GGX lobe for lower variance
|
|
939
943
|
Xi.y.assign( mix( Xi.y, 0.0, this.mirrorBias.mul( Xi.w.sqrt() ) ) );
|
|
940
944
|
|
|
941
|
-
|
|
942
|
-
const
|
|
945
|
+
// The base color only feeds the metalness F0 fallback.
|
|
946
|
+
const albedo = ( this.specularNode === null && this.diffuseNode !== null ? this.diffuseNode.sample( uvPos ).rgb : vec3( 1 ) ).toVar();
|
|
947
|
+
const ggxSample = ggxReflectionSample( viewNormal, V, roughness, metalness, albedo, Xi, this.specularNode, this.specularF90Node ?? 1 ).toVar();
|
|
943
948
|
|
|
944
949
|
// Sometimes the GGX sample is facing away from the surface, so we need to re-sample.
|
|
945
950
|
If( ggxSample.get( 'reflectDir' ).dot( viewNormal ).lessThan( 0 ), () => {
|
|
946
951
|
|
|
947
|
-
ggxSample.assign( ggxReflectionSample( viewNormal, V, roughness, metalness, albedo, Xi.add( Xi.mul( 7 ) ).fract() ) );
|
|
952
|
+
ggxSample.assign( ggxReflectionSample( viewNormal, V, roughness, metalness, albedo, Xi.add( Xi.mul( 7 ) ).fract(), this.specularNode, this.specularF90Node ?? 1 ) );
|
|
948
953
|
|
|
949
954
|
} );
|
|
950
955
|
|
|
@@ -969,6 +974,7 @@ class SSRNode extends TempNode {
|
|
|
969
974
|
V,
|
|
970
975
|
alpha: ggxSample.get( 'alpha' ),
|
|
971
976
|
f0: ggxSample.get( 'f0' ),
|
|
977
|
+
f90: ggxSample.get( 'f90' ),
|
|
972
978
|
Xi2
|
|
973
979
|
} ) );
|
|
974
980
|
|
|
@@ -980,7 +986,8 @@ class SSRNode extends TempNode {
|
|
|
980
986
|
N: viewNormal,
|
|
981
987
|
V,
|
|
982
988
|
alpha: ggxSample.get( 'alpha' ),
|
|
983
|
-
f0: ggxSample.get( 'f0' )
|
|
989
|
+
f0: ggxSample.get( 'f0' ),
|
|
990
|
+
f90: ggxSample.get( 'f90' )
|
|
984
991
|
} ) );
|
|
985
992
|
|
|
986
993
|
}
|
|
@@ -1030,7 +1037,7 @@ class SSRNode extends TempNode {
|
|
|
1030
1037
|
|
|
1031
1038
|
};
|
|
1032
1039
|
|
|
1033
|
-
const maxReflectRayLen = this.maxDistance.div( dot( viewIncidentDir.negate(), viewNormal ) ).toVar();
|
|
1040
|
+
const maxReflectRayLen = this.maxDistance.div( dot( viewIncidentDir.negate(), viewNormal ).max( 1e-4 ) ).toVar();
|
|
1034
1041
|
|
|
1035
1042
|
const d1viewPosition = viewPosition.add( viewReflectDir.mul( maxReflectRayLen ) ).toVar();
|
|
1036
1043
|
|
|
@@ -1050,6 +1057,24 @@ class SSRNode extends TempNode {
|
|
|
1050
1057
|
const d0 = uvPos.mul( this._resolution ).xy.toVar();
|
|
1051
1058
|
const d1 = getScreenPosition( d1viewPosition, this._cameraProjectionMatrix ).mul( this._resolution ).toVar();
|
|
1052
1059
|
|
|
1060
|
+
// clip the ray to the screen so all steps land on visible texels
|
|
1061
|
+
|
|
1062
|
+
const extent = d1.sub( d0 ).toVar();
|
|
1063
|
+
const exitT = vec2(
|
|
1064
|
+
extent.x.greaterThanEqual( 0 ).select( this._resolution.x.sub( d0.x ), d0.x ),
|
|
1065
|
+
extent.y.greaterThanEqual( 0 ).select( this._resolution.y.sub( d0.y ), d0.y )
|
|
1066
|
+
).div( extent.abs().max( 1e-6 ) );
|
|
1067
|
+
const clipT = min( exitT.x, exitT.y ).min( 1 ).toConst();
|
|
1068
|
+
|
|
1069
|
+
If( clipT.lessThan( 1 ), () => {
|
|
1070
|
+
|
|
1071
|
+
d1.assign( d0.add( extent.mul( clipT ) ) );
|
|
1072
|
+
d1viewPosition.assign( this.camera.isPerspectiveCamera
|
|
1073
|
+
? mix( viewPosition.div( viewPosition.z ), d1viewPosition.div( d1viewPosition.z ), clipT ).div( mix( viewPosition.z.reciprocal(), d1viewPosition.z.reciprocal(), clipT ) )
|
|
1074
|
+
: mix( viewPosition, d1viewPosition, clipT ) );
|
|
1075
|
+
|
|
1076
|
+
} );
|
|
1077
|
+
|
|
1053
1078
|
const xLen = d1.x.sub( d0.x ).toVar();
|
|
1054
1079
|
const yLen = d1.y.sub( d0.y ).toVar();
|
|
1055
1080
|
|
|
@@ -1083,6 +1108,12 @@ class SSRNode extends TempNode {
|
|
|
1083
1108
|
? ( sVal ) => float( 1 ).div( recipVPZ.add( sVal.mul( recipD1VPZ.sub( recipVPZ ) ) ) )
|
|
1084
1109
|
: ( sVal ) => viewPosition.z.add( sVal.mul( d1viewPosition.z.sub( viewPosition.z ) ) );
|
|
1085
1110
|
|
|
1111
|
+
// view-space point on the reflected ray at s
|
|
1112
|
+
|
|
1113
|
+
const rayPointAt = this.camera.isPerspectiveCamera
|
|
1114
|
+
? ( sVal ) => mix( viewPosition.div( viewPosition.z ), d1viewPosition.div( d1viewPosition.z ), sVal ).mul( reflectRayZAt( sVal ) )
|
|
1115
|
+
: ( sVal ) => mix( viewPosition, d1viewPosition, sVal );
|
|
1116
|
+
|
|
1086
1117
|
// Screen-space position along the ray for a given s ∈ [0,1].
|
|
1087
1118
|
const screenPosAt = ( sVal ) => d0.add( stepVec.mul( sVal.mul( totalStep ) ) );
|
|
1088
1119
|
|
|
@@ -1104,6 +1135,9 @@ class SSRNode extends TempNode {
|
|
|
1104
1135
|
// Carry the coarse hit's UV/depth to skip a redundant fetch when refinement is off.
|
|
1105
1136
|
const hitUvS = vec2( 0 ).toVar();
|
|
1106
1137
|
const hitD = float( 0 ).toVar();
|
|
1138
|
+
const previousS = float( 0 ).toVar();
|
|
1139
|
+
const previousInFront = bool( true ).toVar();
|
|
1140
|
+
const canRefine = bool( false ).toVar();
|
|
1107
1141
|
|
|
1108
1142
|
// March from d0 toward d1, looking for an intersection with the depth buffer.
|
|
1109
1143
|
Loop( { start: int( 1 ), end: totalStep }, ( { i } ) => {
|
|
@@ -1111,6 +1145,12 @@ class SSRNode extends TempNode {
|
|
|
1111
1145
|
// Exponentially-distributed ray parameter, shared by the sample position and ray depth.
|
|
1112
1146
|
const s = sampleFraction( float( i ) ).toVar();
|
|
1113
1147
|
|
|
1148
|
+
If( s.greaterThan( 1 ), () => {
|
|
1149
|
+
|
|
1150
|
+
Break();
|
|
1151
|
+
|
|
1152
|
+
} );
|
|
1153
|
+
|
|
1114
1154
|
const xy = screenPosAt( s ).toVar();
|
|
1115
1155
|
|
|
1116
1156
|
If( xy.x.lessThan( 0 ).or( xy.x.greaterThan( this._resolution.x ) ).or( xy.y.lessThan( 0 ) ).or( xy.y.greaterThan( this._resolution.y ) ), () => {
|
|
@@ -1125,7 +1165,13 @@ class SSRNode extends TempNode {
|
|
|
1125
1165
|
|
|
1126
1166
|
const viewReflectRayZ = reflectRayZAt( s ).toVar();
|
|
1127
1167
|
|
|
1128
|
-
|
|
1168
|
+
// Advance the previous sample before any Continue() so rejected samples still bound the next bracket.
|
|
1169
|
+
const lastS = previousS.toVar();
|
|
1170
|
+
const lastInFront = previousInFront.toVar();
|
|
1171
|
+
previousS.assign( s );
|
|
1172
|
+
previousInFront.assign( viewReflectRayZ.greaterThan( vZ ) );
|
|
1173
|
+
|
|
1174
|
+
If( isBackgroundDepth( d ).not().and( viewReflectRayZ.lessThanEqual( vZ ) ), () => {
|
|
1129
1175
|
|
|
1130
1176
|
// Depth crossing: ray went behind the depth buffer. Gate by thickness before stopping
|
|
1131
1177
|
// so an occluder gap doesn't end the march prematurely.
|
|
@@ -1135,7 +1181,10 @@ class SSRNode extends TempNode {
|
|
|
1135
1181
|
const uvNeighbor = uvS.add( uvPixelStepX ).toVar();
|
|
1136
1182
|
const vPNeighbor = getViewPosition( uvNeighbor, d, this._cameraProjectionMatrixInverse ).toVar();
|
|
1137
1183
|
const minThickness = vPNeighbor.x.sub( vP.x ).mul( 3 ).toVar();
|
|
1138
|
-
|
|
1184
|
+
// Only refinement may use a wider coarse tolerance.
|
|
1185
|
+
|
|
1186
|
+
const stepLength = distance( rayPointAt( lastS ), rayPointAt( s ) );
|
|
1187
|
+
const tk = ( this.binaryRefine ? max( max( minThickness, this.thickness ), stepLength ) : max( minThickness, this.thickness ) ).toVar();
|
|
1139
1188
|
|
|
1140
1189
|
If( away.lessThanEqual( tk ), () => {
|
|
1141
1190
|
|
|
@@ -1143,13 +1192,13 @@ class SSRNode extends TempNode {
|
|
|
1143
1192
|
|
|
1144
1193
|
// the reflected ray is pointing towards the same side as the fragment's normal (current ray position),
|
|
1145
1194
|
// which means it wouldn't reflect off the surface. The loop continues to the next step for the next ray sample.
|
|
1146
|
-
|
|
1195
|
+
If( dot( viewReflectDir, vN ).greaterThanEqual( 0 ), () => {
|
|
1147
1196
|
|
|
1148
|
-
|
|
1197
|
+
Continue();
|
|
1149
1198
|
|
|
1150
|
-
|
|
1199
|
+
} );
|
|
1151
1200
|
|
|
1152
|
-
|
|
1201
|
+
if ( this.stochastic === false ) {
|
|
1153
1202
|
|
|
1154
1203
|
// this distance represents the depth of the intersection point between the reflected ray and the scene.
|
|
1155
1204
|
const distance = pointPlaneDistance( vP, viewPosition, viewNormal ).toVar();
|
|
@@ -1170,7 +1219,10 @@ class SSRNode extends TempNode {
|
|
|
1170
1219
|
|
|
1171
1220
|
if ( this.binaryRefine ) {
|
|
1172
1221
|
|
|
1173
|
-
|
|
1222
|
+
// refine only front-to-back crossings
|
|
1223
|
+
|
|
1224
|
+
canRefine.assign( lastInFront );
|
|
1225
|
+
hitSLo.assign( lastS );
|
|
1174
1226
|
hitSHi.assign( s );
|
|
1175
1227
|
|
|
1176
1228
|
}
|
|
@@ -1190,26 +1242,33 @@ class SSRNode extends TempNode {
|
|
|
1190
1242
|
// nested (a loop-inside-a-loop tripped shader-compiler bugs on some drivers).
|
|
1191
1243
|
if ( this.binaryRefine ) {
|
|
1192
1244
|
|
|
1193
|
-
|
|
1245
|
+
If( canRefine, () => {
|
|
1194
1246
|
|
|
1195
|
-
|
|
1196
|
-
const sceneZMid = getViewZ( sampleDepth( screenPosAt( sMid ).mul( invResolution ) ) );
|
|
1247
|
+
Loop( { start: int( 0 ), end: int( 8 ), type: 'int', condition: '<' }, () => {
|
|
1197
1248
|
|
|
1198
|
-
|
|
1249
|
+
const sMid = hitSLo.add( hitSHi ).mul( 0.5 ).toVar();
|
|
1250
|
+
const uvMid = screenPosAt( sMid ).mul( invResolution ).toConst();
|
|
1251
|
+
const sceneZMid = getViewZ( sampleDepth( uvMid ) );
|
|
1252
|
+
const frontFacing = dot( viewReflectDir, this.normalNode.sample( uvMid ).rgb.normalize() ).lessThan( 0 );
|
|
1199
1253
|
|
|
1200
|
-
|
|
1254
|
+
If( reflectRayZAt( sMid ).lessThanEqual( sceneZMid ).and( frontFacing ), () => {
|
|
1201
1255
|
|
|
1202
|
-
|
|
1256
|
+
hitSHi.assign( sMid );
|
|
1203
1257
|
|
|
1204
|
-
|
|
1258
|
+
} ).Else( () => {
|
|
1259
|
+
|
|
1260
|
+
hitSLo.assign( sMid );
|
|
1261
|
+
|
|
1262
|
+
} );
|
|
1205
1263
|
|
|
1206
1264
|
} );
|
|
1207
1265
|
|
|
1208
|
-
|
|
1266
|
+
// re-fetch UV/depth at the refined `s`
|
|
1209
1267
|
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1268
|
+
hitUvS.assign( screenPosAt( hitSHi ).mul( invResolution ) );
|
|
1269
|
+
hitD.assign( sampleDepth( hitUvS ) );
|
|
1270
|
+
|
|
1271
|
+
} );
|
|
1213
1272
|
|
|
1214
1273
|
}
|
|
1215
1274
|
|
|
@@ -1220,7 +1279,20 @@ class SSRNode extends TempNode {
|
|
|
1220
1279
|
// In blur mode the ratio² falloff re-grows past maxDistance, so over-range hits fall back
|
|
1221
1280
|
// to env. The scatter path bounds reach via ray length, so every hit shades.
|
|
1222
1281
|
const distancePointPlane = this.stochastic === false ? pointPlaneDistance( vP, viewPosition, viewNormal ).toVar() : float( 0 );
|
|
1223
|
-
const withinRange = distancePointPlane.lessThanEqual( this.maxDistance );
|
|
1282
|
+
const withinRange = distancePointPlane.lessThanEqual( this.maxDistance ).toVar();
|
|
1283
|
+
|
|
1284
|
+
if ( this.binaryRefine ) {
|
|
1285
|
+
|
|
1286
|
+
// bisection can land on a depth discontinuity, so validate the refined hit
|
|
1287
|
+
|
|
1288
|
+
const neighbor = getViewPosition( uvS.add( uvPixelStepX ), hitD, this._cameraProjectionMatrixInverse );
|
|
1289
|
+
const tk = max( neighbor.x.sub( vP.x ).mul( 3 ), this.thickness );
|
|
1290
|
+
withinRange.assign( withinRange.and( isBackgroundDepth( hitD ).not() )
|
|
1291
|
+
.and( pointToLineDistance( vP, viewPosition, d1viewPosition ).lessThanEqual( tk ) ) );
|
|
1292
|
+
|
|
1293
|
+
withinRange.assign( withinRange.and( dot( viewReflectDir, this.normalNode.sample( uvS ).rgb.normalize() ).lessThan( 0 ) ) );
|
|
1294
|
+
|
|
1295
|
+
}
|
|
1224
1296
|
|
|
1225
1297
|
If( withinRange, () => {
|
|
1226
1298
|
|
|
@@ -1350,9 +1422,9 @@ export default SSRNode;
|
|
|
1350
1422
|
* @param {SSRNodeOptions} [options] - Optional inputs for material and environment data.
|
|
1351
1423
|
* @returns {SSRNode}
|
|
1352
1424
|
*/
|
|
1353
|
-
export const ssr = ( colorNode, depthNode, normalNode, options = {} ) =>
|
|
1425
|
+
export const ssr = ( colorNode, depthNode, normalNode, options = {} ) => new SSRNode(
|
|
1354
1426
|
nodeObject( colorNode ),
|
|
1355
1427
|
nodeObject( depthNode ),
|
|
1356
1428
|
nodeObject( normalNode ),
|
|
1357
1429
|
options
|
|
1358
|
-
)
|
|
1430
|
+
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RedFormat, RenderTarget, Vector2, RendererUtils, QuadMesh,
|
|
2
|
-
import { reference,
|
|
1
|
+
import { RedFormat, RenderTarget, Vector2, RendererUtils, QuadMesh, Node, NodeMaterial, NodeUpdateType, UnsignedByteType } from 'three/webgpu';
|
|
2
|
+
import { reference, getScreenPosition, getViewPosition, float, Break, Loop, int, max, abs, If, interleavedGradientNoise, screenCoordinate, Fn, passTexture, uv, uniform, perspectiveDepthToViewZ, orthographicDepthToViewZ, vec2, lightPosition, lightTargetPosition, fract, rand, mix, context, isBackgroundDepth, projectionDepth } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
@@ -40,10 +40,10 @@ let _rendererState;
|
|
|
40
40
|
* - {@link https://panoskarabelas.com/posts/screen_space_shadows/}.
|
|
41
41
|
* - {@link https://www.bendstudio.com/blog/inside-bend-screen-space-shadows/}.
|
|
42
42
|
*
|
|
43
|
-
* @augments
|
|
43
|
+
* @augments Node
|
|
44
44
|
* @three_import import { sss } from 'three/addons/tsl/display/SSSNode.js';
|
|
45
45
|
*/
|
|
46
|
-
class SSSNode extends
|
|
46
|
+
class SSSNode extends Node {
|
|
47
47
|
|
|
48
48
|
static get type() {
|
|
49
49
|
|
|
@@ -357,26 +357,12 @@ class SSSNode extends TempNode {
|
|
|
357
357
|
|
|
358
358
|
} );
|
|
359
359
|
|
|
360
|
-
const sampleDepth = ( uv ) =>
|
|
361
|
-
|
|
362
|
-
const depth = this.depthNode.sample( uv ).r;
|
|
363
|
-
|
|
364
|
-
if ( builder.renderer.logarithmicDepthBuffer === true ) {
|
|
365
|
-
|
|
366
|
-
const viewZ = logarithmicDepthToViewZ( depth, this._cameraNear, this._cameraFar );
|
|
367
|
-
|
|
368
|
-
return viewZToPerspectiveDepth( viewZ, this._cameraNear, this._cameraFar );
|
|
369
|
-
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
return depth;
|
|
373
|
-
|
|
374
|
-
};
|
|
360
|
+
const sampleDepth = ( uv ) => projectionDepth( this.depthNode.sample( uv ).r, this._cameraNear, this._cameraFar );
|
|
375
361
|
|
|
376
362
|
const sss = Fn( () => {
|
|
377
363
|
|
|
378
364
|
const depth = sampleDepth( uvNode ).toVar();
|
|
379
|
-
|
|
365
|
+
isBackgroundDepth( depth ).discard();
|
|
380
366
|
|
|
381
367
|
// compute ray position and direction (in view-space)
|
|
382
368
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HalfFloatType, RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh,
|
|
1
|
+
import { HalfFloatType, RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, Node, NodeUpdateType } from 'three/webgpu';
|
|
2
2
|
import { Fn, float, vec3, vec4, ivec2, int, uv, floor, abs, max, min, exp2, nodeObject, passTexture, textureSize, textureLoad, convertToTexture, context } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
@@ -11,10 +11,10 @@ let _rendererState;
|
|
|
11
11
|
*
|
|
12
12
|
* Reference: {@link https://gpuopen.com/fidelityfx-superresolution/}.
|
|
13
13
|
*
|
|
14
|
-
* @augments
|
|
14
|
+
* @augments Node
|
|
15
15
|
* @three_import import { sharpen } from 'three/addons/tsl/display/SharpenNode.js';
|
|
16
16
|
*/
|
|
17
|
-
class SharpenNode extends
|
|
17
|
+
class SharpenNode extends Node {
|
|
18
18
|
|
|
19
19
|
static get type() {
|
|
20
20
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Vector2,
|
|
1
|
+
import { Vector2, Node, NodeUpdateType } from 'three/webgpu';
|
|
2
2
|
import { Fn, uv, uniform, convertToTexture, vec2, vec3, vec4, mat3, luminance, add } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -6,10 +6,10 @@ import { Fn, uv, uniform, convertToTexture, vec2, vec3, vec4, mat3, luminance, a
|
|
|
6
6
|
* A sobel filter should be applied after tone mapping and output color
|
|
7
7
|
* space conversion.
|
|
8
8
|
*
|
|
9
|
-
* @augments
|
|
9
|
+
* @augments Node
|
|
10
10
|
* @three_import import { sobel } from 'three/addons/tsl/display/SobelOperatorNode.js';
|
|
11
11
|
*/
|
|
12
|
-
class SobelOperatorNode extends
|
|
12
|
+
class SobelOperatorNode extends Node {
|
|
13
13
|
|
|
14
14
|
static get type() {
|
|
15
15
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HalfFloatType, Vector2, RenderTarget, RendererUtils, QuadMesh, NodeMaterial,
|
|
1
|
+
import { HalfFloatType, Vector2, RenderTarget, RendererUtils, QuadMesh, NodeMaterial, Node, NodeUpdateType, Matrix4, DepthTexture } from 'three/webgpu';
|
|
2
2
|
import { exp, float, Fn, max, texture, uniform, uv, vec2, vec4, luminance, convertToTexture, passTexture, velocity, ivec2, mix, property, outputStruct, context, OnBeforeRenderPipeline, OnAfterRenderPipeline } from 'three/tsl';
|
|
3
3
|
import { clipAABB, computeHaltonOffsets, flickerReduction, sampleCurrentDepth, samplePreviousDepth } from '../utils/TAAUtils.js';
|
|
4
4
|
|
|
@@ -27,10 +27,10 @@ let _rendererState;
|
|
|
27
27
|
*
|
|
28
28
|
* Note: MSAA must be disabled when TAAU is in use.
|
|
29
29
|
*
|
|
30
|
-
* @augments
|
|
30
|
+
* @augments Node
|
|
31
31
|
* @three_import import { taau } from 'three/addons/tsl/display/TAAUNode.js';
|
|
32
32
|
*/
|
|
33
|
-
class TAAUNode extends
|
|
33
|
+
class TAAUNode extends Node {
|
|
34
34
|
|
|
35
35
|
static get type() {
|
|
36
36
|
|
|
@@ -280,14 +280,6 @@ class TAAUNode extends TempNode {
|
|
|
280
280
|
*/
|
|
281
281
|
this._previousDepthNode = texture( this._previousDepthRenderTarget.depthTexture );
|
|
282
282
|
|
|
283
|
-
/**
|
|
284
|
-
* Sync the post processing stack with the TAAU node.
|
|
285
|
-
*
|
|
286
|
-
* @private
|
|
287
|
-
* @type {boolean}
|
|
288
|
-
*/
|
|
289
|
-
this._needsPostProcessingSync = false;
|
|
290
|
-
|
|
291
283
|
}
|
|
292
284
|
|
|
293
285
|
/**
|
|
@@ -393,13 +385,7 @@ class TAAUNode extends TempNode {
|
|
|
393
385
|
this._cameraWorldMatrixInverse.value.copy( this.camera.matrixWorldInverse );
|
|
394
386
|
this._cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );
|
|
395
387
|
|
|
396
|
-
//
|
|
397
|
-
// dimensions from the renderer's drawing buffer
|
|
398
|
-
|
|
399
|
-
const beautyRenderTarget = ( this.beautyNode.isRTTNode ) ? this.beautyNode.renderTarget : this.beautyNode.passNode.renderTarget;
|
|
400
|
-
|
|
401
|
-
const inputWidth = beautyRenderTarget.texture.width;
|
|
402
|
-
const inputHeight = beautyRenderTarget.texture.height;
|
|
388
|
+
// the output dimensions are derived from the renderer's drawing buffer
|
|
403
389
|
|
|
404
390
|
const drawingBufferSize = renderer.getDrawingBufferSize( _size );
|
|
405
391
|
const outputWidth = drawingBufferSize.width;
|
|
@@ -421,11 +407,6 @@ class TAAUNode extends TempNode {
|
|
|
421
407
|
|
|
422
408
|
if ( needsRestart === true ) {
|
|
423
409
|
|
|
424
|
-
// make sure render targets are initialized after the resize which triggers a dispose()
|
|
425
|
-
|
|
426
|
-
renderer.initRenderTarget( this._historyRenderTarget );
|
|
427
|
-
renderer.initRenderTarget( this._resolveRenderTarget );
|
|
428
|
-
|
|
429
410
|
// Seed the history with a bilinear upscale of the current beauty
|
|
430
411
|
// buffer. Without this the first frames after a resize fade in
|
|
431
412
|
// from black because the history target was cleared. The seed
|
|
@@ -440,16 +421,6 @@ class TAAUNode extends TempNode {
|
|
|
440
421
|
|
|
441
422
|
}
|
|
442
423
|
|
|
443
|
-
// must run after needsRestart so it does not affect the seed reset
|
|
444
|
-
|
|
445
|
-
if ( this._needsPostProcessingSync === true ) {
|
|
446
|
-
|
|
447
|
-
this.setViewOffset( inputWidth, inputHeight );
|
|
448
|
-
|
|
449
|
-
this._needsPostProcessingSync = false;
|
|
450
|
-
|
|
451
|
-
}
|
|
452
|
-
|
|
453
424
|
// resolve
|
|
454
425
|
|
|
455
426
|
renderer.setRenderTarget( this._resolveRenderTarget );
|
|
@@ -478,13 +449,11 @@ class TAAUNode extends TempNode {
|
|
|
478
449
|
if ( this._previousDepthRenderTarget.width !== srcW || this._previousDepthRenderTarget.height !== srcH ) {
|
|
479
450
|
|
|
480
451
|
this._previousDepthRenderTarget.setSize( srcW, srcH );
|
|
481
|
-
renderer.initRenderTarget( this._previousDepthRenderTarget );
|
|
482
452
|
|
|
483
453
|
}
|
|
484
454
|
|
|
485
455
|
const dstDepth = this._previousDepthRenderTarget.depthTexture;
|
|
486
456
|
renderer.copyTextureToTexture( currentDepth, dstDepth );
|
|
487
|
-
this._previousDepthNode.value = dstDepth;
|
|
488
457
|
|
|
489
458
|
}
|
|
490
459
|
|
|
@@ -502,12 +471,14 @@ class TAAUNode extends TempNode {
|
|
|
502
471
|
*/
|
|
503
472
|
setup( builder ) {
|
|
504
473
|
|
|
474
|
+
this.depthNode.build( builder );
|
|
475
|
+
this.velocityNode.build( builder );
|
|
476
|
+
this.beautyNode.build( builder );
|
|
477
|
+
|
|
505
478
|
if ( builder.renderPipeline && ! builder.context.renderPipelineState.viewOffsetOwner ) {
|
|
506
479
|
|
|
507
480
|
builder.context.renderPipelineState.viewOffsetOwner = this;
|
|
508
481
|
|
|
509
|
-
this._needsPostProcessingSync = true;
|
|
510
|
-
|
|
511
482
|
OnBeforeRenderPipeline( () => {
|
|
512
483
|
|
|
513
484
|
const beautyRenderTarget = ( this.beautyNode.isRTTNode ) ? this.beautyNode.renderTarget : this.beautyNode.passNode.renderTarget;
|
|
@@ -527,11 +498,8 @@ class TAAUNode extends TempNode {
|
|
|
527
498
|
|
|
528
499
|
}
|
|
529
500
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
this._previousDepthRenderTarget.depthTexture.type = FloatType;
|
|
533
|
-
|
|
534
|
-
}
|
|
501
|
+
this._previousDepthRenderTarget.depthTexture.format = this.depthNode.value.format;
|
|
502
|
+
this._previousDepthRenderTarget.depthTexture.type = this.depthNode.value.type;
|
|
535
503
|
|
|
536
504
|
const historyNode = texture( this._historyRenderTarget.textures[ 0 ] );
|
|
537
505
|
const lockNode = texture( this._historyRenderTarget.textures[ 1 ] );
|