super-three 0.181.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HalfFloatType, RenderTarget, Vector2, RendererUtils, QuadMesh, TempNode, NodeMaterial, NodeUpdateType, LinearFilter, LinearMipmapLinearFilter } from 'three/webgpu';
|
|
2
|
-
import { texture, reference, viewZToPerspectiveDepth, logarithmicDepthToViewZ, getScreenPosition, getViewPosition,
|
|
2
|
+
import { texture, reference, viewZToPerspectiveDepth, logarithmicDepthToViewZ, getScreenPosition, getViewPosition, mul, div, cross, float, Continue, Break, Loop, int, max, abs, sub, If, dot, reflect, normalize, screenCoordinate, nodeObject, Fn, passTexture, uv, uniform, perspectiveDepthToViewZ, orthographicDepthToViewZ, vec2, vec3, vec4 } from 'three/tsl';
|
|
3
3
|
import { boxBlur } from './boxBlur.js';
|
|
4
4
|
|
|
5
5
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
@@ -206,7 +206,7 @@ class SSRNode extends TempNode {
|
|
|
206
206
|
* @private
|
|
207
207
|
* @type {UniformNode<bool>}
|
|
208
208
|
*/
|
|
209
|
-
this._isPerspectiveCamera = uniform( camera.isPerspectiveCamera );
|
|
209
|
+
this._isPerspectiveCamera = uniform( camera.isPerspectiveCamera === true );
|
|
210
210
|
|
|
211
211
|
/**
|
|
212
212
|
* The resolution of the pass.
|
|
@@ -275,7 +275,8 @@ class SSRNode extends TempNode {
|
|
|
275
275
|
if ( this.roughnessNode !== null ) {
|
|
276
276
|
|
|
277
277
|
const mips = this._blurRenderTarget.texture.mipmaps.length - 1;
|
|
278
|
-
const
|
|
278
|
+
const r = float( this.roughnessNode );
|
|
279
|
+
const lod = r.mul( r ).mul( mips ).clamp( 0, mips );
|
|
279
280
|
|
|
280
281
|
blurredTextureNode = passTexture( this, this._blurRenderTarget.texture ).level( lod );
|
|
281
282
|
|
|
@@ -399,10 +400,9 @@ class SSRNode extends TempNode {
|
|
|
399
400
|
// https://en.wikipedia.org/wiki/Plane_(geometry)
|
|
400
401
|
// http://paulbourke.net/geometry/pointlineplane/
|
|
401
402
|
|
|
403
|
+
// planeNormal is already normalized, so denominator is 1
|
|
402
404
|
const d = mul( planeNormal.x, planePoint.x ).add( mul( planeNormal.y, planePoint.y ) ).add( mul( planeNormal.z, planePoint.z ) ).negate().toVar();
|
|
403
|
-
|
|
404
|
-
const denominator = sqrt( mul( planeNormal.x, planeNormal.x, ).add( mul( planeNormal.y, planeNormal.y ) ).add( mul( planeNormal.z, planeNormal.z ) ) ).toVar();
|
|
405
|
-
const distance = div( mul( planeNormal.x, point.x ).add( mul( planeNormal.y, point.y ) ).add( mul( planeNormal.z, point.z ) ).add( d ), denominator );
|
|
405
|
+
const distance = mul( planeNormal.x, point.x ).add( mul( planeNormal.y, point.y ) ).add( mul( planeNormal.z, point.z ) ).add( d );
|
|
406
406
|
return distance;
|
|
407
407
|
|
|
408
408
|
} );
|
|
@@ -589,7 +589,7 @@ class SSRNode extends TempNode {
|
|
|
589
589
|
|
|
590
590
|
// output
|
|
591
591
|
const reflectColor = this.colorNode.sample( uvNode );
|
|
592
|
-
output.assign( vec4( reflectColor.rgb
|
|
592
|
+
output.assign( vec4( reflectColor.rgb.mul( op ), 1 ) );
|
|
593
593
|
Break();
|
|
594
594
|
|
|
595
595
|
} );
|
|
@@ -653,4 +653,4 @@ export default SSRNode;
|
|
|
653
653
|
* @param {?Camera} [camera=null] - The camera the scene is rendered with.
|
|
654
654
|
* @returns {SSRNode}
|
|
655
655
|
*/
|
|
656
|
-
export const ssr = ( colorNode, depthNode, normalNode, metalnessNode, roughnessNode = null, camera = null ) =>
|
|
656
|
+
export const ssr = ( colorNode, depthNode, normalNode, metalnessNode, roughnessNode = null, camera = null ) => new SSRNode( nodeObject( colorNode ), nodeObject( depthNode ), nodeObject( normalNode ), nodeObject( metalnessNode ), nodeObject( roughnessNode ), camera );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RedFormat, RenderTarget, Vector2, RendererUtils, QuadMesh, TempNode, NodeMaterial, NodeUpdateType, UnsignedByteType } from 'three/webgpu';
|
|
2
|
-
import { reference, viewZToPerspectiveDepth, logarithmicDepthToViewZ, getScreenPosition, getViewPosition, float, Break, Loop, int, max, abs, If, interleavedGradientNoise, screenCoordinate,
|
|
2
|
+
import { reference, viewZToPerspectiveDepth, logarithmicDepthToViewZ, getScreenPosition, getViewPosition, float, Break, Loop, int, max, abs, If, interleavedGradientNoise, screenCoordinate, Fn, passTexture, uv, uniform, perspectiveDepthToViewZ, orthographicDepthToViewZ, vec2, lightPosition, lightTargetPosition, fract, rand, mix } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
@@ -90,9 +90,9 @@ class SSSNode extends TempNode {
|
|
|
90
90
|
* Shadow intensity. Must be in the range `[0, 1]`.
|
|
91
91
|
*
|
|
92
92
|
* @type {UniformNode<float>}
|
|
93
|
-
* @default 0
|
|
93
|
+
* @default 1.0
|
|
94
94
|
*/
|
|
95
|
-
this.shadowIntensity = uniform( 0
|
|
95
|
+
this.shadowIntensity = uniform( 1.0, 'float' );
|
|
96
96
|
|
|
97
97
|
/**
|
|
98
98
|
* This parameter controls how detailed the raymarching process works.
|
|
@@ -192,6 +192,7 @@ class SSSNode extends TempNode {
|
|
|
192
192
|
/**
|
|
193
193
|
* Temporal offset added to the initial ray step.
|
|
194
194
|
*
|
|
195
|
+
* @private
|
|
195
196
|
* @type {UniformNode<float>}
|
|
196
197
|
*/
|
|
197
198
|
this._temporalOffset = uniform( 0 );
|
|
@@ -199,6 +200,7 @@ class SSSNode extends TempNode {
|
|
|
199
200
|
/**
|
|
200
201
|
* The frame ID use when temporal filtering is enabled.
|
|
201
202
|
*
|
|
203
|
+
* @private
|
|
202
204
|
* @type {UniformNode<uint>}
|
|
203
205
|
*/
|
|
204
206
|
this._frameId = uniform( 0 );
|
|
@@ -485,4 +487,4 @@ export default SSSNode;
|
|
|
485
487
|
* @param {DirectionalLight} mainLight - The main directional light of the scene.
|
|
486
488
|
* @returns {SSSNode}
|
|
487
489
|
*/
|
|
488
|
-
export const sss = ( depthNode, camera, mainLight ) =>
|
|
490
|
+
export const sss = ( depthNode, camera, mainLight ) => new SSSNode( depthNode, camera, mainLight );
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Fn, float, length, smoothstep, uv } from 'three/tsl';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns a radial gradient from center (white) to edges (black).
|
|
5
|
+
* Useful for masking effects based on distance from center.
|
|
6
|
+
*
|
|
7
|
+
* @tsl
|
|
8
|
+
* @function
|
|
9
|
+
* @param {Node<float>} [scale=1.0] - Controls the size of the gradient (0 = all black, 1 = full circle).
|
|
10
|
+
* @param {Node<float>} [softness=0.5] - Controls the edge softness (0 = hard edge, 1 = soft gradient).
|
|
11
|
+
* @param {Node<vec2>} [coord=uv()] - The input UV coordinates.
|
|
12
|
+
* @return {Node<float>} 1.0 at center, 0.0 at edges.
|
|
13
|
+
*/
|
|
14
|
+
export const circle = Fn( ( [ scale = float( 1.0 ), softness = float( 0.5 ), coord = uv() ] ) => {
|
|
15
|
+
|
|
16
|
+
// Center UV coordinates (-0.5 to 0.5)
|
|
17
|
+
const centered = coord.sub( 0.5 );
|
|
18
|
+
|
|
19
|
+
// Calculate distance from center (0 at center, ~0.707 at corners)
|
|
20
|
+
const dist = length( centered ).mul( 2.0 );
|
|
21
|
+
|
|
22
|
+
// Calculate inner and outer edges based on scale and softness
|
|
23
|
+
const outer = scale;
|
|
24
|
+
const inner = scale.sub( softness.mul( scale ) );
|
|
25
|
+
|
|
26
|
+
// Smoothstep for soft/hard transition
|
|
27
|
+
return smoothstep( outer, inner, dist );
|
|
28
|
+
|
|
29
|
+
} );
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { HalfFloatType, RenderTarget, Vector2, NodeMaterial, RendererUtils, QuadMesh, TempNode, NodeUpdateType } from 'three/webgpu';
|
|
2
|
+
import { Fn, float, vec3, vec4, ivec2, int, uv, floor, abs, max, min, exp2, nodeObject, passTexture, textureSize, textureLoad, convertToTexture } from 'three/tsl';
|
|
3
|
+
|
|
4
|
+
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
|
+
const _size = /*@__PURE__*/ new Vector2();
|
|
6
|
+
|
|
7
|
+
let _rendererState;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Post processing node for contrast-adaptive sharpening (RCAS).
|
|
11
|
+
*
|
|
12
|
+
* Reference: {@link https://gpuopen.com/fidelityfx-superresolution/}.
|
|
13
|
+
*
|
|
14
|
+
* @augments TempNode
|
|
15
|
+
* @three_import import { sharpen } from 'three/addons/tsl/display/SharpenNode.js';
|
|
16
|
+
*/
|
|
17
|
+
class SharpenNode extends TempNode {
|
|
18
|
+
|
|
19
|
+
static get type() {
|
|
20
|
+
|
|
21
|
+
return 'SharpenNode';
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new sharpen node.
|
|
27
|
+
*
|
|
28
|
+
* @param {TextureNode} textureNode - The texture node that represents the input of the effect.
|
|
29
|
+
* @param {Node<float>} [sharpness=0.2] - Sharpening strength. 0 = maximum sharpening, 2 = no sharpening.
|
|
30
|
+
* @param {Node<bool>} [denoise=false] - Whether to attenuate sharpening in noisy areas.
|
|
31
|
+
*/
|
|
32
|
+
constructor( textureNode, sharpness = 0.2, denoise = false ) {
|
|
33
|
+
|
|
34
|
+
super( 'vec4' );
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* This flag can be used for type testing.
|
|
38
|
+
*
|
|
39
|
+
* @type {boolean}
|
|
40
|
+
* @readonly
|
|
41
|
+
* @default true
|
|
42
|
+
*/
|
|
43
|
+
this.isSharpenNode = true;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The texture node that represents the input of the effect.
|
|
47
|
+
*
|
|
48
|
+
* @type {TextureNode}
|
|
49
|
+
*/
|
|
50
|
+
this.textureNode = textureNode;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Sharpening strength. 0 = maximum, 2 = none.
|
|
54
|
+
*
|
|
55
|
+
* @type {Node<float>}
|
|
56
|
+
* @default 0.2
|
|
57
|
+
*/
|
|
58
|
+
this.sharpness = nodeObject( sharpness );
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Whether to attenuate sharpening in noisy areas.
|
|
62
|
+
*
|
|
63
|
+
* @type {Node<bool>}
|
|
64
|
+
* @default false
|
|
65
|
+
*/
|
|
66
|
+
this.denoise = nodeObject( denoise );
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The render target for the sharpening pass.
|
|
70
|
+
*
|
|
71
|
+
* @private
|
|
72
|
+
* @type {RenderTarget}
|
|
73
|
+
*/
|
|
74
|
+
this._renderTarget = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType } );
|
|
75
|
+
this._renderTarget.texture.name = 'SharpenNode.output';
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The result of the effect as a texture node.
|
|
79
|
+
*
|
|
80
|
+
* @private
|
|
81
|
+
* @type {PassTextureNode}
|
|
82
|
+
*/
|
|
83
|
+
this._textureNode = passTexture( this, this._renderTarget.texture );
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* The material for the sharpening pass.
|
|
87
|
+
*
|
|
88
|
+
* @private
|
|
89
|
+
* @type {?NodeMaterial}
|
|
90
|
+
*/
|
|
91
|
+
this._material = null;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
|
|
95
|
+
* its effect once per frame in `updateBefore()`.
|
|
96
|
+
*
|
|
97
|
+
* @type {string}
|
|
98
|
+
* @default 'frame'
|
|
99
|
+
*/
|
|
100
|
+
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Sets the output size of the effect.
|
|
106
|
+
*
|
|
107
|
+
* @param {number} width - The width in pixels.
|
|
108
|
+
* @param {number} height - The height in pixels.
|
|
109
|
+
*/
|
|
110
|
+
setSize( width, height ) {
|
|
111
|
+
|
|
112
|
+
this._renderTarget.setSize( width, height );
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* This method is used to render the effect once per frame.
|
|
118
|
+
*
|
|
119
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
120
|
+
*/
|
|
121
|
+
updateBefore( frame ) {
|
|
122
|
+
|
|
123
|
+
const { renderer } = frame;
|
|
124
|
+
|
|
125
|
+
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
|
|
126
|
+
|
|
127
|
+
//
|
|
128
|
+
|
|
129
|
+
renderer.getDrawingBufferSize( _size );
|
|
130
|
+
this.setSize( _size.x, _size.y );
|
|
131
|
+
|
|
132
|
+
renderer.setRenderTarget( this._renderTarget );
|
|
133
|
+
|
|
134
|
+
_quadMesh.material = this._material;
|
|
135
|
+
_quadMesh.name = 'Sharpen [ RCAS ]';
|
|
136
|
+
_quadMesh.render( renderer );
|
|
137
|
+
|
|
138
|
+
//
|
|
139
|
+
|
|
140
|
+
RendererUtils.restoreRendererState( renderer, _rendererState );
|
|
141
|
+
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Returns the result of the effect as a texture node.
|
|
146
|
+
*
|
|
147
|
+
* @return {PassTextureNode} A texture node that represents the result of the effect.
|
|
148
|
+
*/
|
|
149
|
+
getTextureNode() {
|
|
150
|
+
|
|
151
|
+
return this._textureNode;
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* This method is used to setup the effect's TSL code.
|
|
157
|
+
*
|
|
158
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
159
|
+
* @return {PassTextureNode}
|
|
160
|
+
*/
|
|
161
|
+
setup( builder ) {
|
|
162
|
+
|
|
163
|
+
const textureNode = this.textureNode;
|
|
164
|
+
const inputTex = textureNode.value;
|
|
165
|
+
|
|
166
|
+
// RCAS: Robust Contrast-Adaptive Sharpening.
|
|
167
|
+
//
|
|
168
|
+
// Ported from AMD FidelityFX FSR 1 (ffx_fsr1.h). Uses a 5-tap
|
|
169
|
+
// cross pattern (center + up/down/left/right) to compute a
|
|
170
|
+
// per-pixel sharpening weight that is automatically limited by
|
|
171
|
+
// local contrast to avoid ringing. An optional noise-attenuation
|
|
172
|
+
// factor reduces sharpening in noisy areas.
|
|
173
|
+
|
|
174
|
+
const rcas = Fn( () => {
|
|
175
|
+
|
|
176
|
+
const targetUV = uv();
|
|
177
|
+
const texSize = textureSize( textureLoad( inputTex ) );
|
|
178
|
+
|
|
179
|
+
const p = ivec2( int( floor( targetUV.x.mul( texSize.x ) ) ), int( floor( targetUV.y.mul( texSize.y ) ) ) ).toConst();
|
|
180
|
+
|
|
181
|
+
const e = textureLoad( inputTex, p );
|
|
182
|
+
const b = textureLoad( inputTex, p.add( ivec2( 0, - 1 ) ) );
|
|
183
|
+
const d = textureLoad( inputTex, p.add( ivec2( - 1, 0 ) ) );
|
|
184
|
+
const f = textureLoad( inputTex, p.add( ivec2( 1, 0 ) ) );
|
|
185
|
+
const h = textureLoad( inputTex, p.add( ivec2( 0, 1 ) ) );
|
|
186
|
+
|
|
187
|
+
// Approximate luminance (luma times 2).
|
|
188
|
+
|
|
189
|
+
const luma = ( s ) => s.g.add( s.b.add( s.r ).mul( 0.5 ) );
|
|
190
|
+
|
|
191
|
+
const bL = luma( b );
|
|
192
|
+
const dL = luma( d );
|
|
193
|
+
const eL = luma( e );
|
|
194
|
+
const fL = luma( f );
|
|
195
|
+
const hL = luma( h );
|
|
196
|
+
|
|
197
|
+
// Sharpening amount from user parameter.
|
|
198
|
+
|
|
199
|
+
const con = exp2( this.sharpness.negate() ).toConst();
|
|
200
|
+
|
|
201
|
+
// Min and max of ring.
|
|
202
|
+
|
|
203
|
+
const mn4 = min( min( b.rgb, d.rgb ), min( f.rgb, h.rgb ) ).toConst();
|
|
204
|
+
const mx4 = max( max( b.rgb, d.rgb ), max( f.rgb, h.rgb ) ).toConst();
|
|
205
|
+
|
|
206
|
+
// Compute adaptive lobe weight.
|
|
207
|
+
// Limiters based on how much sharpening the local contrast can tolerate.
|
|
208
|
+
|
|
209
|
+
const RCAS_LIMIT = float( 0.25 - 1.0 / 16.0 ).toConst();
|
|
210
|
+
|
|
211
|
+
const hitMin = min( mn4, e.rgb ).div( mx4.mul( 4.0 ) ).toConst();
|
|
212
|
+
const hitMax = vec3( 1.0 ).sub( max( mx4, e.rgb ) ).div( mn4.mul( 4.0 ).sub( 4.0 ) ).toConst();
|
|
213
|
+
const lobeRGB = max( hitMin.negate(), hitMax ).toConst();
|
|
214
|
+
|
|
215
|
+
const lobe = max(
|
|
216
|
+
RCAS_LIMIT.negate(),
|
|
217
|
+
min( max( lobeRGB.r, max( lobeRGB.g, lobeRGB.b ) ), float( 0.0 ) )
|
|
218
|
+
).mul( con ).toConst();
|
|
219
|
+
|
|
220
|
+
// Noise attenuation.
|
|
221
|
+
|
|
222
|
+
const nz = bL.add( dL ).add( fL ).add( hL ).mul( 0.25 ).sub( eL ).toConst();
|
|
223
|
+
const nzRange = max( max( bL, dL ), max( eL, max( fL, hL ) ) ).sub( min( min( bL, dL ), min( eL, min( fL, hL ) ) ) ).toConst();
|
|
224
|
+
const nzFactor = float( 1.0 ).sub( abs( nz ).div( max( nzRange, float( 1.0 / 65536.0 ) ) ).saturate().mul( 0.5 ) ).toConst();
|
|
225
|
+
|
|
226
|
+
const effectiveLobe = this.denoise.equal( true ).select( lobe.mul( nzFactor ), lobe ).toConst();
|
|
227
|
+
|
|
228
|
+
// Resolve: weighted blend of cross neighbors and center.
|
|
229
|
+
|
|
230
|
+
const result = b.rgb.add( d.rgb ).add( f.rgb ).add( h.rgb ).mul( effectiveLobe ).add( e.rgb )
|
|
231
|
+
.div( effectiveLobe.mul( 4.0 ).add( 1.0 ) ).toConst();
|
|
232
|
+
|
|
233
|
+
return vec4( result, e.a );
|
|
234
|
+
|
|
235
|
+
} );
|
|
236
|
+
|
|
237
|
+
//
|
|
238
|
+
|
|
239
|
+
const context = builder.getSharedContext();
|
|
240
|
+
|
|
241
|
+
const material = this._material || ( this._material = new NodeMaterial() );
|
|
242
|
+
material.fragmentNode = rcas().context( context );
|
|
243
|
+
material.name = 'Sharpen_RCAS';
|
|
244
|
+
material.needsUpdate = true;
|
|
245
|
+
|
|
246
|
+
//
|
|
247
|
+
|
|
248
|
+
const properties = builder.getNodeProperties( this );
|
|
249
|
+
properties.textureNode = textureNode;
|
|
250
|
+
|
|
251
|
+
//
|
|
252
|
+
|
|
253
|
+
return this._textureNode;
|
|
254
|
+
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Frees internal resources. This method should be called
|
|
259
|
+
* when the effect is no longer required.
|
|
260
|
+
*/
|
|
261
|
+
dispose() {
|
|
262
|
+
|
|
263
|
+
this._renderTarget.dispose();
|
|
264
|
+
|
|
265
|
+
if ( this._material !== null ) this._material.dispose();
|
|
266
|
+
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export default SharpenNode;
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* TSL function for creating a sharpen node for post processing.
|
|
275
|
+
*
|
|
276
|
+
* @tsl
|
|
277
|
+
* @function
|
|
278
|
+
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
279
|
+
* @param {(number|Node<float>)} [sharpness=0.2] - Sharpening strength. 0 = maximum, 2 = none.
|
|
280
|
+
* @param {(boolean|Node<bool>)} [denoise=false] - Whether to attenuate sharpening in noisy areas.
|
|
281
|
+
* @returns {SharpenNode}
|
|
282
|
+
*/
|
|
283
|
+
export const sharpen = ( node, sharpness, denoise ) => new SharpenNode( convertToTexture( node ), sharpness, denoise );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Vector2, TempNode, NodeUpdateType } from 'three/webgpu';
|
|
2
|
-
import {
|
|
2
|
+
import { Fn, uv, uniform, convertToTexture, vec2, vec3, vec4, mat3, luminance, add } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Post processing node for detecting edges with a sobel filter.
|
|
@@ -165,4 +165,4 @@ export default SobelOperatorNode;
|
|
|
165
165
|
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
166
166
|
* @returns {SobelOperatorNode}
|
|
167
167
|
*/
|
|
168
|
-
export const sobel = ( node ) =>
|
|
168
|
+
export const sobel = ( node ) => new SobelOperatorNode( convertToTexture( node ) );
|
|
@@ -50,11 +50,13 @@ class StereoCompositePassNode extends PassNode {
|
|
|
50
50
|
* @type {StereoCamera}
|
|
51
51
|
*/
|
|
52
52
|
this.stereo = new StereoCamera();
|
|
53
|
+
|
|
53
54
|
const _params = { minFilter: LinearFilter, magFilter: NearestFilter, type: HalfFloatType };
|
|
54
55
|
|
|
55
56
|
/**
|
|
56
57
|
* The render target for rendering the left eye's view.
|
|
57
58
|
*
|
|
59
|
+
* @private
|
|
58
60
|
* @type {RenderTarget}
|
|
59
61
|
*/
|
|
60
62
|
this._renderTargetL = new RenderTarget( 1, 1, _params );
|
|
@@ -62,6 +64,7 @@ class StereoCompositePassNode extends PassNode {
|
|
|
62
64
|
/**
|
|
63
65
|
* The render target for rendering the right eye's view.
|
|
64
66
|
*
|
|
67
|
+
* @private
|
|
65
68
|
* @type {RenderTarget}
|
|
66
69
|
*/
|
|
67
70
|
this._renderTargetR = new RenderTarget( 1, 1, _params );
|
|
@@ -69,6 +72,7 @@ class StereoCompositePassNode extends PassNode {
|
|
|
69
72
|
/**
|
|
70
73
|
* A texture node representing the left's eye view.
|
|
71
74
|
*
|
|
75
|
+
* @private
|
|
72
76
|
* @type {TextureNode}
|
|
73
77
|
*/
|
|
74
78
|
this._mapLeft = texture( this._renderTargetL.texture );
|
|
@@ -76,6 +80,7 @@ class StereoCompositePassNode extends PassNode {
|
|
|
76
80
|
/**
|
|
77
81
|
* A texture node representing the right's eye view.
|
|
78
82
|
*
|
|
83
|
+
* @private
|
|
79
84
|
* @type {TextureNode}
|
|
80
85
|
*/
|
|
81
86
|
this._mapRight = texture( this._renderTargetR.texture );
|
|
@@ -84,7 +89,9 @@ class StereoCompositePassNode extends PassNode {
|
|
|
84
89
|
* The node material that implements the composite. All
|
|
85
90
|
* derived effect passes must provide an instance for rendering.
|
|
86
91
|
*
|
|
87
|
-
* @
|
|
92
|
+
* @private
|
|
93
|
+
* @type {?NodeMaterial}
|
|
94
|
+
* @default null
|
|
88
95
|
*/
|
|
89
96
|
this._material = null;
|
|
90
97
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { StereoCamera, Vector2, PassNode, RendererUtils } from 'three/webgpu';
|
|
2
|
-
import { nodeObject } from 'three/tsl';
|
|
3
2
|
|
|
4
3
|
const _size = /*@__PURE__*/ new Vector2();
|
|
5
4
|
|
|
@@ -117,4 +116,4 @@ export default StereoPassNode;
|
|
|
117
116
|
* @param {Camera} camera - The camera to render the scene with.
|
|
118
117
|
* @returns {StereoPassNode}
|
|
119
118
|
*/
|
|
120
|
-
export const stereoPass = ( scene, camera ) =>
|
|
119
|
+
export const stereoPass = ( scene, camera ) => new StereoPassNode( scene, camera );
|