@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 { abs, atan, bool, convertToTexture, cos, cross, Discard, dot, EPSILON, exp, float, Fn, getScreenPosition, getViewPosition, If, int, log, Loop, luminance, mat2, max, mix, nodeObject, NodeUpdateType, normalize, passTexture, PI, property, reflect, sin, smoothstep, sqrt, tan, texture, uniform, unpackRGBToNormal, uv, vec2, vec3, vec4, context } from 'three/tsl';
|
|
2
|
-
import { HalfFloatType, MathUtils, Matrix4, NodeMaterial, QuadMesh, RendererUtils, RenderTarget,
|
|
1
|
+
import { abs, atan, bool, convertToTexture, cos, cross, Discard, dot, EPSILON, exp, float, Fn, getScreenPosition, getViewPosition, If, int, log, Loop, luminance, mat2, max, mix, nodeObject, NodeUpdateType, normalize, passTexture, PI, property, reflect, sin, smoothstep, sqrt, tan, texture, uniform, unpackRGBToNormal, uv, vec2, vec3, vec4, context, isBackgroundDepth } from 'three/tsl';
|
|
2
|
+
import { HalfFloatType, MathUtils, Matrix4, NodeMaterial, QuadMesh, RendererUtils, RenderTarget, Node, Vector2 } from 'three/webgpu';
|
|
3
3
|
import { bindAnalyticNoise } from '../utils/RNoise.js';
|
|
4
4
|
import { ENV_RAY_LENGTH_THRESHOLD } from '../utils/SpecularHelpers.js';
|
|
5
5
|
|
|
@@ -32,14 +32,7 @@ const vogelDisk = Fn( ( [ i, radius ] ) => {
|
|
|
32
32
|
const r = radius.mul( sqrt( i.add( 0.5 ).div( sampleCount ) ) );
|
|
33
33
|
return vec2( cos( theta ), sin( theta ) ).mul( r );
|
|
34
34
|
|
|
35
|
-
} )
|
|
36
|
-
name: 'vogelDisk',
|
|
37
|
-
type: 'vec2',
|
|
38
|
-
inputs: [
|
|
39
|
-
{ name: 'i', type: 'float' },
|
|
40
|
-
{ name: 'radius', type: 'float' }
|
|
41
|
-
]
|
|
42
|
-
} );
|
|
35
|
+
}, { i: 'float', radius: 'float', return: 'vec2' } );
|
|
43
36
|
|
|
44
37
|
/**
|
|
45
38
|
* Chromatic color-similarity distance between two linear base colors (albedo).
|
|
@@ -66,24 +59,9 @@ const diffuseColorDistance = Fn( ( [ a, b, compressLuma ] ) => {
|
|
|
66
59
|
|
|
67
60
|
return dLuma.add( dChroma.mul( DIFFUSE_CHROMA_WEIGHT ) );
|
|
68
61
|
|
|
69
|
-
} )
|
|
70
|
-
name: 'diffuseColorDistance',
|
|
71
|
-
type: 'float',
|
|
72
|
-
inputs: [
|
|
73
|
-
{ name: 'a', type: 'vec3' },
|
|
74
|
-
{ name: 'b', type: 'vec3' },
|
|
75
|
-
{ name: 'compressLuma', type: 'float' }
|
|
76
|
-
]
|
|
77
|
-
} );
|
|
62
|
+
}, { a: 'vec3', b: 'vec3', compressLuma: 'float', return: 'float' } );
|
|
78
63
|
|
|
79
|
-
const _temporalWeight = Fn( ( [ x, strength ] ) => float( 1 ).div( x.pow( strength ) ) )
|
|
80
|
-
name: 'temporalWeight',
|
|
81
|
-
type: 'float',
|
|
82
|
-
inputs: [
|
|
83
|
-
{ name: 'x', type: 'float' },
|
|
84
|
-
{ name: 'strength', type: 'float' }
|
|
85
|
-
]
|
|
86
|
-
} );
|
|
64
|
+
const _temporalWeight = Fn( ( [ x, strength ] ) => float( 1 ).div( x.pow( strength ) ), { x: 'float', strength: 'float', return: 'float' } );
|
|
87
65
|
|
|
88
66
|
/**
|
|
89
67
|
* Temporal accumulation variance factor in `[0, 1]`. Higher values mean more history confidence.
|
|
@@ -94,14 +72,7 @@ const getTemporalVarianceFactor = Fn( ( [ frameNum, strength ] ) => {
|
|
|
94
72
|
|
|
95
73
|
return _temporalWeight( frameNum, strength ).max( 0.05 );
|
|
96
74
|
|
|
97
|
-
} )
|
|
98
|
-
name: 'getTemporalVarianceFactor',
|
|
99
|
-
type: 'float',
|
|
100
|
-
inputs: [
|
|
101
|
-
{ name: 'frameNum', type: 'float' },
|
|
102
|
-
{ name: 'strength', type: 'float' }
|
|
103
|
-
]
|
|
104
|
-
} );
|
|
75
|
+
}, { frameNum: 'float', strength: 'float', return: 'float' } );
|
|
105
76
|
|
|
106
77
|
/**
|
|
107
78
|
* World-space frustum height at `viewZ`. Algorithm originally from REBLUR (NRD).
|
|
@@ -113,14 +84,7 @@ const computeFrustumSize = Fn( ( [ viewZ, tanHalfFovY ] ) => {
|
|
|
113
84
|
|
|
114
85
|
return float( 2 ).mul( viewZ ).mul( tanHalfFovY );
|
|
115
86
|
|
|
116
|
-
} )
|
|
117
|
-
name: 'computeFrustumSize',
|
|
118
|
-
type: 'float',
|
|
119
|
-
inputs: [
|
|
120
|
-
{ name: 'viewZ', type: 'float' },
|
|
121
|
-
{ name: 'tanHalfFovY', type: 'float' }
|
|
122
|
-
]
|
|
123
|
-
} );
|
|
87
|
+
}, { viewZ: 'float', tanHalfFovY: 'float', return: 'float' } );
|
|
124
88
|
|
|
125
89
|
/**
|
|
126
90
|
* Maps world-space SSR ray length to `[0, 1]`. Environment rays (`worldRayLength == 0`) map to `1`.
|
|
@@ -131,26 +95,18 @@ const computeFrustumSize = Fn( ( [ viewZ, tanHalfFovY ] ) => {
|
|
|
131
95
|
const computeHitDistFactor = Fn( ( [ worldRayLength, viewZ, tanHalfFovY ] ) => {
|
|
132
96
|
|
|
133
97
|
const frustumSize = computeFrustumSize( viewZ, tanHalfFovY );
|
|
134
|
-
const factor = worldRayLength.div( frustumSize.max(
|
|
98
|
+
const factor = worldRayLength.div( frustumSize.max( EPSILON ) ).clamp( 0, 1 );
|
|
135
99
|
|
|
136
100
|
return factor;
|
|
137
101
|
|
|
138
|
-
} )
|
|
139
|
-
name: 'computeHitDistFactor',
|
|
140
|
-
type: 'float',
|
|
141
|
-
inputs: [
|
|
142
|
-
{ name: 'worldRayLength', type: 'float' },
|
|
143
|
-
{ name: 'viewZ', type: 'float' },
|
|
144
|
-
{ name: 'tanHalfFovY', type: 'float' }
|
|
145
|
-
]
|
|
146
|
-
} );
|
|
102
|
+
}, { worldRayLength: 'float', viewZ: 'float', tanHalfFovY: 'float', return: 'float' } );
|
|
147
103
|
|
|
148
104
|
/**
|
|
149
105
|
* Maps an AO factor for edge-stopping comparisons.
|
|
150
106
|
*
|
|
151
107
|
* @tsl
|
|
152
108
|
*/
|
|
153
|
-
const mapAo = Fn( ( [ aoVal ] ) => aoVal.pow( 0.1 ) );
|
|
109
|
+
const mapAo = Fn( ( [ aoVal ] ) => aoVal.pow( 0.1 ), { aoVal: 'float', return: 'float' } );
|
|
154
110
|
|
|
155
111
|
/**
|
|
156
112
|
* Specular dominant direction — smooth surfaces lean toward reflection, rough toward normal.
|
|
@@ -161,15 +117,7 @@ const getSpecularDominantDirection = Fn( ( [ N, V, roughness ] ) => {
|
|
|
161
117
|
|
|
162
118
|
return normalize( mix( N, reflect( V.negate(), N ), roughness.oneMinus() ) );
|
|
163
119
|
|
|
164
|
-
} )
|
|
165
|
-
name: 'getSpecularDominantDirection',
|
|
166
|
-
type: 'vec3',
|
|
167
|
-
inputs: [
|
|
168
|
-
{ name: 'N', type: 'vec3' },
|
|
169
|
-
{ name: 'V', type: 'vec3' },
|
|
170
|
-
{ name: 'roughness', type: 'float' }
|
|
171
|
-
]
|
|
172
|
-
} );
|
|
120
|
+
}, { N: 'vec3', V: 'vec3', roughness: 'float', return: 'vec3' } );
|
|
173
121
|
|
|
174
122
|
/**
|
|
175
123
|
* GGX inverse-CDF: half-angle tangent enclosing `percent` of the specular lobe volume.
|
|
@@ -180,16 +128,9 @@ const getSpecularDominantDirection = Fn( ( [ N, V, roughness ] ) => {
|
|
|
180
128
|
const specularLobeTanHalfAngle = Fn( ( [ roughness, percent ] ) => {
|
|
181
129
|
|
|
182
130
|
const alpha = roughness.mul( roughness );
|
|
183
|
-
return alpha.mul( sqrt( percent.div( float( 1 ).sub( percent ).max(
|
|
184
|
-
|
|
185
|
-
} )
|
|
186
|
-
name: 'specularLobeTanHalfAngle',
|
|
187
|
-
type: 'float',
|
|
188
|
-
inputs: [
|
|
189
|
-
{ name: 'roughness', type: 'float' },
|
|
190
|
-
{ name: 'percent', type: 'float' }
|
|
191
|
-
]
|
|
192
|
-
} );
|
|
131
|
+
return alpha.mul( sqrt( percent.div( float( 1 ).sub( percent ).max( EPSILON ) ) ) );
|
|
132
|
+
|
|
133
|
+
}, { roughness: 'float', percent: 'float', return: 'float' } );
|
|
193
134
|
|
|
194
135
|
const EXP_WEIGHT_SCALE = 4;
|
|
195
136
|
const NORMAL_ENCODING_ERROR = 1.5 / 255;
|
|
@@ -211,15 +152,7 @@ const lobeNormalFalloff = Fn( ( [ roughness, aggressivity, invNormalPhi ] ) => {
|
|
|
211
152
|
const invHalfAngle = float( 1 ).div( lobeHalfAngle );
|
|
212
153
|
return invHalfAngle.mul( invHalfAngle ).mul( 2 * EXP_WEIGHT_SCALE );
|
|
213
154
|
|
|
214
|
-
} )
|
|
215
|
-
name: 'lobeNormalFalloff',
|
|
216
|
-
type: 'float',
|
|
217
|
-
inputs: [
|
|
218
|
-
{ name: 'roughness', type: 'float' },
|
|
219
|
-
{ name: 'aggressivity', type: 'float' },
|
|
220
|
-
{ name: 'invNormalPhi', type: 'float' }
|
|
221
|
-
]
|
|
222
|
-
} );
|
|
155
|
+
}, { roughness: 'float', aggressivity: 'float', invNormalPhi: 'float', return: 'float' } );
|
|
223
156
|
|
|
224
157
|
/**
|
|
225
158
|
* Adaptive lobe normal edge-stopping weight
|
|
@@ -237,15 +170,7 @@ const lobeNormalWeight = Fn( ( [ viewNormal, nNormalV, lobeFalloff ] ) => {
|
|
|
237
170
|
|
|
238
171
|
return exp( cosA.sub( 1 ).mul( lobeFalloff ) );
|
|
239
172
|
|
|
240
|
-
} )
|
|
241
|
-
name: 'lobeNormalWeight',
|
|
242
|
-
type: 'float',
|
|
243
|
-
inputs: [
|
|
244
|
-
{ name: 'viewNormal', type: 'vec3' },
|
|
245
|
-
{ name: 'nNormalV', type: 'vec3' },
|
|
246
|
-
{ name: 'lobeFalloff', type: 'float' }
|
|
247
|
-
]
|
|
248
|
-
} );
|
|
173
|
+
}, { viewNormal: 'vec3', nNormalV: 'vec3', lobeFalloff: 'float', return: 'float' } );
|
|
249
174
|
|
|
250
175
|
/**
|
|
251
176
|
* View-space plane distance between two surface points (edge-stopping geometry term).
|
|
@@ -256,15 +181,7 @@ const planeDistance = Fn( ( [ position, nPosition, normal ] ) => {
|
|
|
256
181
|
|
|
257
182
|
return abs( dot( position.sub( nPosition ), normal ) );
|
|
258
183
|
|
|
259
|
-
} )
|
|
260
|
-
name: 'planeDistance',
|
|
261
|
-
type: 'float',
|
|
262
|
-
inputs: [
|
|
263
|
-
{ name: 'position', type: 'vec3' },
|
|
264
|
-
{ name: 'nPosition', type: 'vec3' },
|
|
265
|
-
{ name: 'normal', type: 'vec3' },
|
|
266
|
-
]
|
|
267
|
-
} );
|
|
184
|
+
}, { position: 'vec3', nPosition: 'vec3', normal: 'vec3', return: 'float' } );
|
|
268
185
|
|
|
269
186
|
/**
|
|
270
187
|
* Inverse-luminance temporal blend with optional adaptive trust (Karis-style).
|
|
@@ -286,18 +203,6 @@ const karisTemporalBlend = Fn( ( [ denoisedRgb, denoisedRaw, a, flickerSuppressi
|
|
|
286
203
|
const wRaw = aTrust.div( luminance( denoisedRaw ).mul( effFlicker ).mul( 10 ).add( 1 ) );
|
|
287
204
|
return denoisedRgb.mul( wHist ).add( denoisedRaw.mul( wRaw ) ).div( wHist.add( wRaw ).max( EPSILON ) );
|
|
288
205
|
|
|
289
|
-
} ).setLayout( {
|
|
290
|
-
name: 'karisTemporalBlend',
|
|
291
|
-
type: 'vec3',
|
|
292
|
-
inputs: [
|
|
293
|
-
{ name: 'denoisedRgb', type: 'vec3' },
|
|
294
|
-
{ name: 'denoisedRaw', type: 'vec3' },
|
|
295
|
-
{ name: 'a', type: 'float' },
|
|
296
|
-
{ name: 'flickerSuppression', type: 'float' },
|
|
297
|
-
{ name: 'adaptiveTrust', type: 'float' },
|
|
298
|
-
{ name: 'nbhdMeanLuma', type: 'float' },
|
|
299
|
-
{ name: 'nbhdStddevLuma', type: 'float' }
|
|
300
|
-
]
|
|
301
206
|
} );
|
|
302
207
|
|
|
303
208
|
const toTextureNode = ( value ) => {
|
|
@@ -337,10 +242,10 @@ const toTextureNode = ( value ) => {
|
|
|
337
242
|
* The denoising kernel is selected at construction time via `mode`:
|
|
338
243
|
* `'diffuse'` (SSGI) or `'specular'` (SSR). The kernel uses a fixed 8-sample Vogel disk.
|
|
339
244
|
*
|
|
340
|
-
* @augments
|
|
245
|
+
* @augments Node
|
|
341
246
|
* @three_import import { recurrentDenoise } from 'three/addons/tsl/display/RecurrentDenoiseNode.js';
|
|
342
247
|
*/
|
|
343
|
-
class RecurrentDenoiseNode extends
|
|
248
|
+
class RecurrentDenoiseNode extends Node {
|
|
344
249
|
|
|
345
250
|
static get type() {
|
|
346
251
|
|
|
@@ -496,7 +401,6 @@ class RecurrentDenoiseNode extends TempNode {
|
|
|
496
401
|
|
|
497
402
|
if ( needsRestart === true ) {
|
|
498
403
|
|
|
499
|
-
renderer.initRenderTarget( this._renderTarget );
|
|
500
404
|
renderer.setRenderTarget( this._renderTarget );
|
|
501
405
|
renderer.clear();
|
|
502
406
|
renderer.setRenderTarget( null );
|
|
@@ -522,7 +426,7 @@ class RecurrentDenoiseNode extends TempNode {
|
|
|
522
426
|
const angle = r.mul( 2 ).mul( PI );
|
|
523
427
|
return mat2( cos( angle ), sin( angle ).negate(), sin( angle ), cos( angle ) );
|
|
524
428
|
|
|
525
|
-
} );
|
|
429
|
+
}, { r: 'float', return: 'mat2' } );
|
|
526
430
|
|
|
527
431
|
const sampleTexture = ( uvCoord ) => texture( this.textureNode, uvCoord ).max( 0 );
|
|
528
432
|
const sampleRaw = ( uvCoord ) => this.rawNode?.sample( uvCoord )?.max( 0 ) ?? vec3( 0 ).max( 0 );
|
|
@@ -588,13 +492,6 @@ class RecurrentDenoiseNode extends TempNode {
|
|
|
588
492
|
// vec3( avgRayLength, meanLuma, stddevLuma )
|
|
589
493
|
return vec4( avgRayLength, meanLuma, stddevLuma, hasEnvRay.toFloat() );
|
|
590
494
|
|
|
591
|
-
} ).setLayout( {
|
|
592
|
-
name: 'getNeighborhoodStats',
|
|
593
|
-
type: 'vec4',
|
|
594
|
-
inputs: [
|
|
595
|
-
{ name: 'uvCoord', type: 'vec2' },
|
|
596
|
-
{ name: 'centerSample', type: 'vec4' }
|
|
597
|
-
]
|
|
598
495
|
} );
|
|
599
496
|
|
|
600
497
|
const denoiseFn = Fn( ( [ uvCoord ] ) => {
|
|
@@ -870,7 +767,7 @@ class RecurrentDenoiseNode extends TempNode {
|
|
|
870
767
|
|
|
871
768
|
};
|
|
872
769
|
|
|
873
|
-
If(
|
|
770
|
+
If( isBackgroundDepth( depth ), () => {
|
|
874
771
|
|
|
875
772
|
Discard();
|
|
876
773
|
|
|
@@ -908,8 +805,8 @@ export default RecurrentDenoiseNode;
|
|
|
908
805
|
* @param {RecurrentDenoiseNodeOptions} [options={}]
|
|
909
806
|
* @returns {RecurrentDenoiseNode}
|
|
910
807
|
*/
|
|
911
|
-
export const recurrentDenoise = ( inputTexture, camera, options = {} ) =>
|
|
808
|
+
export const recurrentDenoise = ( inputTexture, camera, options = {} ) => new RecurrentDenoiseNode(
|
|
912
809
|
toTextureNode( inputTexture ),
|
|
913
810
|
camera,
|
|
914
811
|
options
|
|
915
|
-
)
|
|
812
|
+
);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HalfFloatType, LinearFilter, NearestFilter, RenderTarget, Texture, Vector2, QuadMesh, NodeMaterial,
|
|
1
|
+
import { HalfFloatType, LinearFilter, NearestFilter, RenderTarget, Texture, Vector2, QuadMesh, NodeMaterial, Node, RendererUtils } from 'three/webgpu';
|
|
2
2
|
import { abs, Fn, NodeUpdateType, uv, uniform, convertToTexture, vec2, vec4, passTexture, max, step, dot, float, texture, If, Loop, int, Break, sqrt, sign, mix, context } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
@@ -14,10 +14,10 @@ let _rendererState;
|
|
|
14
14
|
* Used Preset: SMAA 1x Medium (with color edge detection)
|
|
15
15
|
* Reference: {@link https://github.com/iryoku/smaa/releases/tag/v2.8}.
|
|
16
16
|
*
|
|
17
|
-
* @augments
|
|
17
|
+
* @augments Node
|
|
18
18
|
* @three_import import { smaa } from 'three/addons/tsl/display/SMAANode.js';
|
|
19
19
|
*/
|
|
20
|
-
class SMAANode extends
|
|
20
|
+
class SMAANode extends Node {
|
|
21
21
|
|
|
22
22
|
static get type() {
|
|
23
23
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RenderTarget, Vector2,
|
|
2
|
-
import { reference,
|
|
1
|
+
import { RenderTarget, Vector2, Node, QuadMesh, NodeMaterial, RendererUtils, RedFormat } from 'three/webgpu';
|
|
2
|
+
import { reference, getViewPosition, getScreenPositionFromClip, vogelDiskSample, interleavedGradientNoise, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, vec4, int, dot, max, clamp, length, screenCoordinate, PI2, texture, passTexture, context, isBackgroundDepth, projectionDepth } from 'three/tsl';
|
|
3
3
|
import { depthAwareBlur } from './depthAwareBlur.js';
|
|
4
4
|
|
|
5
5
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
@@ -26,10 +26,10 @@ let _rendererState;
|
|
|
26
26
|
* renderPipeline.outputNode = scenePassColor.mul( aoPass.r );
|
|
27
27
|
* ```
|
|
28
28
|
*
|
|
29
|
-
* @augments
|
|
29
|
+
* @augments Node
|
|
30
30
|
* @three_import import { ssao } from 'three/addons/tsl/display/SSAONode.js';
|
|
31
31
|
*/
|
|
32
|
-
class SSAONode extends
|
|
32
|
+
class SSAONode extends Node {
|
|
33
33
|
|
|
34
34
|
static get type() {
|
|
35
35
|
|
|
@@ -320,21 +320,7 @@ class SSAONode extends TempNode {
|
|
|
320
320
|
|
|
321
321
|
const uvNode = uv();
|
|
322
322
|
|
|
323
|
-
const sampleDepth = ( uv ) =>
|
|
324
|
-
|
|
325
|
-
const depth = this.depthNode.sample( uv ).r;
|
|
326
|
-
|
|
327
|
-
if ( builder.renderer.logarithmicDepthBuffer === true ) {
|
|
328
|
-
|
|
329
|
-
const viewZ = logarithmicDepthToViewZ( depth, this._cameraNear, this._cameraFar );
|
|
330
|
-
|
|
331
|
-
return viewZToPerspectiveDepth( viewZ, this._cameraNear, this._cameraFar );
|
|
332
|
-
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
return depth;
|
|
336
|
-
|
|
337
|
-
};
|
|
323
|
+
const sampleDepth = ( uv ) => projectionDepth( this.depthNode.sample( uv ).r, this._cameraNear, this._cameraFar );
|
|
338
324
|
|
|
339
325
|
// ambient occlusion
|
|
340
326
|
|
|
@@ -342,7 +328,7 @@ class SSAONode extends TempNode {
|
|
|
342
328
|
|
|
343
329
|
const depth = sampleDepth( uvNode ).toVar();
|
|
344
330
|
|
|
345
|
-
|
|
331
|
+
isBackgroundDepth( depth ).discard();
|
|
346
332
|
|
|
347
333
|
const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toVar();
|
|
348
334
|
const viewNormal = this.normalNode.sample( uvNode ).rgb.normalize().toVar();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RenderTarget, Vector2,
|
|
2
|
-
import { clamp, normalize, reference, Fn, NodeUpdateType, uniform, vec4, passTexture, uv,
|
|
1
|
+
import { RenderTarget, Vector2, Node, QuadMesh, NodeMaterial, RendererUtils, MathUtils, RGBFormat, RedFormat, UnsignedInt101111Type, UnsignedByteType } from 'three/webgpu';
|
|
2
|
+
import { clamp, normalize, reference, Fn, NodeUpdateType, uniform, vec4, passTexture, uv, getViewPosition, screenCoordinate, float, sub, fract, dot, vec2, rand, vec3, Loop, mul, PI, cos, sin, uint, cross, acos, sign, pow, luminance, If, max, abs, Break, sqrt, HALF_PI, div, ceil, shiftRight, convertToTexture, bool, getNormalFromDepth, countOneBits, interleavedGradientNoise, property, outputStruct, context, isBackgroundDepth, min, projectionDepth } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
@@ -37,10 +37,10 @@ let _rendererState;
|
|
|
37
37
|
* - Medium: `sliceCount` of `3`, `stepCount` of `8`.
|
|
38
38
|
* - High: `sliceCount` of `4`, `stepCount` of `12`.
|
|
39
39
|
*
|
|
40
|
-
* @augments
|
|
40
|
+
* @augments Node
|
|
41
41
|
* @three_import import { ssgi } from 'three/addons/tsl/display/SSGINode.js';
|
|
42
42
|
*/
|
|
43
|
-
class SSGINode extends
|
|
43
|
+
class SSGINode extends Node {
|
|
44
44
|
|
|
45
45
|
static get type() {
|
|
46
46
|
|
|
@@ -83,6 +83,16 @@ class SSGINode extends TempNode {
|
|
|
83
83
|
*/
|
|
84
84
|
this.normalNode = normalNode;
|
|
85
85
|
|
|
86
|
+
/**
|
|
87
|
+
* The resolution scale. Values towards `0.5` noticeably increase noise, so it's
|
|
88
|
+
* recommended to lower the renderer's pixel ratio first. Use this property only
|
|
89
|
+
* for fine-tuning performance.
|
|
90
|
+
*
|
|
91
|
+
* @type {number}
|
|
92
|
+
* @default 1
|
|
93
|
+
*/
|
|
94
|
+
this.resolutionScale = 1;
|
|
95
|
+
|
|
86
96
|
/**
|
|
87
97
|
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
|
|
88
98
|
* its effect once per frame in `updateBefore()`.
|
|
@@ -226,6 +236,14 @@ class SSGINode extends TempNode {
|
|
|
226
236
|
*/
|
|
227
237
|
this._temporalOffset = uniform( 0 );
|
|
228
238
|
|
|
239
|
+
/**
|
|
240
|
+
* Resolution scale uniform.
|
|
241
|
+
*
|
|
242
|
+
* @private
|
|
243
|
+
* @type {UniformNode<float>}
|
|
244
|
+
*/
|
|
245
|
+
this._resolutionScale = uniform( 0 );
|
|
246
|
+
|
|
229
247
|
/**
|
|
230
248
|
* Represents the projection matrix of the scene's camera.
|
|
231
249
|
*
|
|
@@ -342,6 +360,10 @@ class SSGINode extends TempNode {
|
|
|
342
360
|
*/
|
|
343
361
|
setSize( width, height ) {
|
|
344
362
|
|
|
363
|
+
width = Math.round( this.resolutionScale * width );
|
|
364
|
+
height = Math.round( this.resolutionScale * height );
|
|
365
|
+
|
|
366
|
+
this._resolutionScale.value = this.resolutionScale;
|
|
345
367
|
this._resolution.value.set( width, height );
|
|
346
368
|
this._ssgiRenderTarget.setSize( width, height );
|
|
347
369
|
|
|
@@ -421,19 +443,16 @@ class SSGINode extends TempNode {
|
|
|
421
443
|
const MAX_RAY = uint( 32 );
|
|
422
444
|
const globalOccludedBitfield = uint( 0 );
|
|
423
445
|
|
|
424
|
-
const sampleDepth = ( uv ) =>
|
|
446
|
+
const sampleDepth = ( uv ) => projectionDepth( this.depthNode.sample( uv ).r, this._cameraNear, this._cameraFar );
|
|
425
447
|
|
|
426
|
-
|
|
448
|
+
const sampleCenterDepth = ( uv ) => {
|
|
427
449
|
|
|
428
|
-
|
|
450
|
+
// Sidestep the nearest-rounding during depth access for the unjittered center pixel to avoid banding
|
|
429
451
|
|
|
430
|
-
|
|
452
|
+
const g = this.depthNode.gather().sample( uv );
|
|
453
|
+
const depth = builder.renderer.reversedDepthBuffer === true ? max( max( g.x, g.y ), max( g.z, g.w ) ) : min( min( g.x, g.y ), min( g.z, g.w ) );
|
|
431
454
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
return depth;
|
|
455
|
+
return projectionDepth( depth, this._cameraNear, this._cameraFar );
|
|
437
456
|
|
|
438
457
|
};
|
|
439
458
|
|
|
@@ -446,13 +465,7 @@ class SSGINode extends TempNode {
|
|
|
446
465
|
|
|
447
466
|
return float( 0.25 ).mul( sub( position.y, position.x ).bitAnd( 3 ) );
|
|
448
467
|
|
|
449
|
-
} )
|
|
450
|
-
name: 'spatialOffsets',
|
|
451
|
-
type: 'float',
|
|
452
|
-
inputs: [
|
|
453
|
-
{ name: 'position', type: 'vec2' }
|
|
454
|
-
]
|
|
455
|
-
} );
|
|
468
|
+
}, { position: 'vec2', return: 'float' } );
|
|
456
469
|
|
|
457
470
|
const GTAOFastAcos = Fn( ( [ value ] ) => {
|
|
458
471
|
|
|
@@ -464,13 +477,7 @@ class SSGINode extends TempNode {
|
|
|
464
477
|
|
|
465
478
|
return vec2( x, y );
|
|
466
479
|
|
|
467
|
-
} )
|
|
468
|
-
name: 'GTAOFastAcos',
|
|
469
|
-
type: 'vec2',
|
|
470
|
-
inputs: [
|
|
471
|
-
{ name: 'value', type: 'vec2' }
|
|
472
|
-
]
|
|
473
|
-
} );
|
|
480
|
+
}, { value: 'vec2', return: 'vec2' } );
|
|
474
481
|
|
|
475
482
|
const horizonSampling = Fn( ( [ directionIsRight, stepRadius, radiusVS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ] ) => {
|
|
476
483
|
|
|
@@ -563,9 +570,9 @@ class SSGINode extends TempNode {
|
|
|
563
570
|
|
|
564
571
|
const gi = Fn( () => {
|
|
565
572
|
|
|
566
|
-
const depth = sampleDepth( uvNode ).
|
|
573
|
+
const depth = this._resolutionScale.lessThan( 1 ).select( sampleCenterDepth( uvNode ), sampleDepth( uvNode ) ).toConst();
|
|
567
574
|
|
|
568
|
-
|
|
575
|
+
isBackgroundDepth( depth ).discard();
|
|
569
576
|
|
|
570
577
|
const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toVar();
|
|
571
578
|
const viewNormal = sampleNormal( uvNode ).toVar();
|