super-three 0.171.0 → 0.173.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 +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -2,6 +2,18 @@ import { DataTexture, RepeatWrapping, Vector2, Vector3, TempNode } from 'three/w
|
|
|
2
2
|
import { texture, getNormalFromDepth, getViewPosition, convertToTexture, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, luminance, vec2, vec3, vec4, uniformArray, int, dot, max, pow, abs, If, textureSize, sin, cos, mat2, PI } from 'three/tsl';
|
|
3
3
|
import { SimplexNoise } from '../../math/SimplexNoise.js';
|
|
4
4
|
|
|
5
|
+
/** @module DenoiseNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Post processing node for denoising data like raw screen-space ambient occlusion output.
|
|
9
|
+
* Denoise can noticeably improve the quality of ambient occlusion but also add quite some
|
|
10
|
+
* overhead to the post processing setup. It's best to make its usage optional (e.g. via
|
|
11
|
+
* graphic settings).
|
|
12
|
+
*
|
|
13
|
+
* Reference: {@link https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf}.
|
|
14
|
+
*
|
|
15
|
+
* @augments TempNode
|
|
16
|
+
*/
|
|
5
17
|
class DenoiseNode extends TempNode {
|
|
6
18
|
|
|
7
19
|
static get type() {
|
|
@@ -10,32 +22,123 @@ class DenoiseNode extends TempNode {
|
|
|
10
22
|
|
|
11
23
|
}
|
|
12
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new denoise node.
|
|
27
|
+
*
|
|
28
|
+
* @param {TextureNode} textureNode - The texture node that represents the input of the effect (e.g. AO).
|
|
29
|
+
* @param {Node<float>} depthNode - A node that represents the scene's depth.
|
|
30
|
+
* @param {Node<vec3>?} normalNode - A node that represents the scene's normals.
|
|
31
|
+
* @param {Camera} camera - The camera the scene is rendered with.
|
|
32
|
+
*/
|
|
13
33
|
constructor( textureNode, depthNode, normalNode, camera ) {
|
|
14
34
|
|
|
15
35
|
super( 'vec4' );
|
|
16
36
|
|
|
37
|
+
/**
|
|
38
|
+
* The texture node that represents the input of the effect (e.g. AO).
|
|
39
|
+
*
|
|
40
|
+
* @type {TextureNode}
|
|
41
|
+
*/
|
|
17
42
|
this.textureNode = textureNode;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* A node that represents the scene's depth.
|
|
46
|
+
*
|
|
47
|
+
* @type {Node<float>}
|
|
48
|
+
*/
|
|
18
49
|
this.depthNode = depthNode;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* A node that represents the scene's normals. If no normals are passed to the
|
|
53
|
+
* constructor (because MRT is not available), normals can be automatically
|
|
54
|
+
* reconstructed from depth values in the shader.
|
|
55
|
+
*
|
|
56
|
+
* @type {Node<vec3>?}
|
|
57
|
+
*/
|
|
19
58
|
this.normalNode = normalNode;
|
|
20
59
|
|
|
60
|
+
/**
|
|
61
|
+
* The node represents the internal noise texture.
|
|
62
|
+
*
|
|
63
|
+
* @type {TextureNode}
|
|
64
|
+
*/
|
|
21
65
|
this.noiseNode = texture( generateDefaultNoise() );
|
|
22
66
|
|
|
67
|
+
/**
|
|
68
|
+
* The luma Phi value.
|
|
69
|
+
*
|
|
70
|
+
* @type {UniformNode<float>}
|
|
71
|
+
*/
|
|
23
72
|
this.lumaPhi = uniform( 5 );
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The depth Phi value.
|
|
76
|
+
*
|
|
77
|
+
* @type {UniformNode<float>}
|
|
78
|
+
*/
|
|
24
79
|
this.depthPhi = uniform( 5 );
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* The normal Phi value.
|
|
83
|
+
*
|
|
84
|
+
* @type {UniformNode<float>}
|
|
85
|
+
*/
|
|
25
86
|
this.normalPhi = uniform( 5 );
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The radius.
|
|
90
|
+
*
|
|
91
|
+
* @type {UniformNode<float>}
|
|
92
|
+
*/
|
|
26
93
|
this.radius = uniform( 5 );
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* The index.
|
|
97
|
+
*
|
|
98
|
+
* @type {UniformNode<float>}
|
|
99
|
+
*/
|
|
27
100
|
this.index = uniform( 0 );
|
|
28
101
|
|
|
102
|
+
/**
|
|
103
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
|
|
104
|
+
* its internal uniforms once per frame in `updateBefore()`.
|
|
105
|
+
*
|
|
106
|
+
* @type {String}
|
|
107
|
+
* @default 'frame'
|
|
108
|
+
*/
|
|
29
109
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
30
110
|
|
|
31
|
-
|
|
32
|
-
|
|
111
|
+
/**
|
|
112
|
+
* The resolution of the effect.
|
|
113
|
+
*
|
|
114
|
+
* @private
|
|
115
|
+
* @type {UniformNode<vec2>}
|
|
116
|
+
*/
|
|
33
117
|
this._resolution = uniform( new Vector2() );
|
|
34
|
-
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* An array of sample vectors.
|
|
121
|
+
*
|
|
122
|
+
* @private
|
|
123
|
+
* @type {UniformArrayNode<vec3>}
|
|
124
|
+
*/
|
|
125
|
+
this._sampleVectors = uniformArray( generateDenoiseSamples( 16, 2, 1 ) );
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Represents the inverse projection matrix of the scene's camera.
|
|
129
|
+
*
|
|
130
|
+
* @private
|
|
131
|
+
* @type {UniformNode<mat4>}
|
|
132
|
+
*/
|
|
35
133
|
this._cameraProjectionMatrixInverse = uniform( camera.projectionMatrixInverse );
|
|
36
134
|
|
|
37
135
|
}
|
|
38
136
|
|
|
137
|
+
/**
|
|
138
|
+
* This method is used to update internal uniforms once per frame.
|
|
139
|
+
*
|
|
140
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
141
|
+
*/
|
|
39
142
|
updateBefore() {
|
|
40
143
|
|
|
41
144
|
const map = this.textureNode.value;
|
|
@@ -44,14 +147,20 @@ class DenoiseNode extends TempNode {
|
|
|
44
147
|
|
|
45
148
|
}
|
|
46
149
|
|
|
47
|
-
|
|
150
|
+
/**
|
|
151
|
+
* This method is used to setup the effect's TSL code.
|
|
152
|
+
*
|
|
153
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
154
|
+
* @return {ShaderCallNodeInternal}
|
|
155
|
+
*/
|
|
156
|
+
setup( /* builder */ ) {
|
|
48
157
|
|
|
49
158
|
const uvNode = uv();
|
|
50
159
|
|
|
51
|
-
const sampleTexture = ( uv ) => this.textureNode.
|
|
52
|
-
const sampleDepth = ( uv ) => this.depthNode.
|
|
53
|
-
const sampleNormal = ( uv ) => ( this.normalNode !== null ) ? this.normalNode.
|
|
54
|
-
const sampleNoise = ( uv ) => this.noiseNode.
|
|
160
|
+
const sampleTexture = ( uv ) => this.textureNode.sample( uv );
|
|
161
|
+
const sampleDepth = ( uv ) => this.depthNode.sample( uv ).x;
|
|
162
|
+
const sampleNormal = ( uv ) => ( this.normalNode !== null ) ? this.normalNode.sample( uv ).rgb.normalize() : getNormalFromDepth( uv, this.depthNode.value, this._cameraProjectionMatrixInverse );
|
|
163
|
+
const sampleNoise = ( uv ) => this.noiseNode.sample( uv );
|
|
55
164
|
|
|
56
165
|
const denoiseSample = Fn( ( [ center, viewNormal, viewPosition, sampleUv ] ) => {
|
|
57
166
|
|
|
@@ -149,23 +258,14 @@ class DenoiseNode extends TempNode {
|
|
|
149
258
|
|
|
150
259
|
export default DenoiseNode;
|
|
151
260
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
const sample = poissonDisk[ i ];
|
|
161
|
-
array.push( sample );
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
return array;
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
|
|
261
|
+
/**
|
|
262
|
+
* Generates denoise samples based on the given parameters.
|
|
263
|
+
*
|
|
264
|
+
* @param {Number} numSamples - The number of samples.
|
|
265
|
+
* @param {Number} numRings - The number of rings.
|
|
266
|
+
* @param {Number} radiusExponent - The radius exponent.
|
|
267
|
+
* @return {Array<Vector3>} The denoise samples.
|
|
268
|
+
*/
|
|
169
269
|
function generateDenoiseSamples( numSamples, numRings, radiusExponent ) {
|
|
170
270
|
|
|
171
271
|
const samples = [];
|
|
@@ -182,6 +282,12 @@ function generateDenoiseSamples( numSamples, numRings, radiusExponent ) {
|
|
|
182
282
|
|
|
183
283
|
}
|
|
184
284
|
|
|
285
|
+
/**
|
|
286
|
+
* Generates a default noise texture for the given size.
|
|
287
|
+
*
|
|
288
|
+
* @param {Number} [size=64] - The texture size.
|
|
289
|
+
* @return {DataTexture} The generated noise texture.
|
|
290
|
+
*/
|
|
185
291
|
function generateDefaultNoise( size = 64 ) {
|
|
186
292
|
|
|
187
293
|
const simplex = new SimplexNoise();
|
|
@@ -214,4 +320,14 @@ function generateDefaultNoise( size = 64 ) {
|
|
|
214
320
|
|
|
215
321
|
}
|
|
216
322
|
|
|
323
|
+
/**
|
|
324
|
+
* TSL function for creating a denoise effect.
|
|
325
|
+
*
|
|
326
|
+
* @function
|
|
327
|
+
* @param {Node} node - The node that represents the input of the effect (e.g. AO).
|
|
328
|
+
* @param {Node<float>} depthNode - A node that represents the scene's depth.
|
|
329
|
+
* @param {Node<vec3>?} normalNode - A node that represents the scene's normals.
|
|
330
|
+
* @param {Camera} camera - The camera the scene is rendered with.
|
|
331
|
+
* @returns {DenoiseNode}
|
|
332
|
+
*/
|
|
217
333
|
export const denoise = ( node, depthNode, normalNode, camera ) => nodeObject( new DenoiseNode( convertToTexture( node ), nodeObject( depthNode ), nodeObject( normalNode ), camera ) );
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { TempNode, NodeUpdateType } from 'three/webgpu';
|
|
2
2
|
import { convertToTexture, nodeObject, Fn, uv, uniform, vec2, vec4, clamp } from 'three/tsl';
|
|
3
3
|
|
|
4
|
+
/** @module DepthOfFieldNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Post processing node for creating depth of field (DOF) effect.
|
|
8
|
+
*
|
|
9
|
+
* @augments TempNode
|
|
10
|
+
*/
|
|
4
11
|
class DepthOfFieldNode extends TempNode {
|
|
5
12
|
|
|
6
13
|
static get type() {
|
|
@@ -9,23 +16,78 @@ class DepthOfFieldNode extends TempNode {
|
|
|
9
16
|
|
|
10
17
|
}
|
|
11
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new DOF node.
|
|
21
|
+
*
|
|
22
|
+
* @param {TextureNode} textureNode - The texture node that represents the input of the effect.
|
|
23
|
+
* @param {Node<float>} viewZNode - Represents the viewZ depth values of the scene.
|
|
24
|
+
* @param {Node<float>} focusNode - Defines the effect's focus which is the distance along the camera's look direction in world units.
|
|
25
|
+
* @param {Node<float>} apertureNode - Defines the effect's aperture.
|
|
26
|
+
* @param {Node<float>} maxblurNode - Defines the effect's maximum blur.
|
|
27
|
+
*/
|
|
12
28
|
constructor( textureNode, viewZNode, focusNode, apertureNode, maxblurNode ) {
|
|
13
29
|
|
|
14
30
|
super( 'vec4' );
|
|
15
31
|
|
|
32
|
+
/**
|
|
33
|
+
* The texture node that represents the input of the effect.
|
|
34
|
+
*
|
|
35
|
+
* @type {TextureNode}
|
|
36
|
+
*/
|
|
16
37
|
this.textureNode = textureNode;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Represents the viewZ depth values of the scene.
|
|
41
|
+
*
|
|
42
|
+
* @type {Node<float>}
|
|
43
|
+
*/
|
|
17
44
|
this.viewZNode = viewZNode;
|
|
18
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Defines the effect's focus which is the distance along the camera's look direction in world units.
|
|
48
|
+
*
|
|
49
|
+
* @type {Node<float>}
|
|
50
|
+
*/
|
|
19
51
|
this.focusNode = focusNode;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Defines the effect's aperture.
|
|
55
|
+
*
|
|
56
|
+
* @type {Node<float>}
|
|
57
|
+
*/
|
|
20
58
|
this.apertureNode = apertureNode;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Defines the effect's maximum blur.
|
|
62
|
+
*
|
|
63
|
+
* @type {Node<float>}
|
|
64
|
+
*/
|
|
21
65
|
this.maxblurNode = maxblurNode;
|
|
22
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Represents the input's aspect ratio.
|
|
69
|
+
*
|
|
70
|
+
* @private
|
|
71
|
+
* @type {UniformNode<float>}
|
|
72
|
+
*/
|
|
23
73
|
this._aspect = uniform( 0 );
|
|
24
74
|
|
|
75
|
+
/**
|
|
76
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
|
|
77
|
+
* its internal uniforms once per frame in `updateBefore()`.
|
|
78
|
+
*
|
|
79
|
+
* @type {String}
|
|
80
|
+
* @default 'frame'
|
|
81
|
+
*/
|
|
25
82
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
26
83
|
|
|
27
84
|
}
|
|
28
85
|
|
|
86
|
+
/**
|
|
87
|
+
* This method is used to update the effect's uniforms once per frame.
|
|
88
|
+
*
|
|
89
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
90
|
+
*/
|
|
29
91
|
updateBefore() {
|
|
30
92
|
|
|
31
93
|
const map = this.textureNode.value;
|
|
@@ -34,12 +96,18 @@ class DepthOfFieldNode extends TempNode {
|
|
|
34
96
|
|
|
35
97
|
}
|
|
36
98
|
|
|
99
|
+
/**
|
|
100
|
+
* This method is used to setup the effect's TSL code.
|
|
101
|
+
*
|
|
102
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
103
|
+
* @return {ShaderCallNodeInternal}
|
|
104
|
+
*/
|
|
37
105
|
setup() {
|
|
38
106
|
|
|
39
107
|
const textureNode = this.textureNode;
|
|
40
108
|
const uvNode = textureNode.uvNode || uv();
|
|
41
109
|
|
|
42
|
-
const sampleTexture = ( uv ) => textureNode.
|
|
110
|
+
const sampleTexture = ( uv ) => textureNode.sample( uv );
|
|
43
111
|
|
|
44
112
|
const dof = Fn( () => {
|
|
45
113
|
|
|
@@ -116,4 +184,15 @@ class DepthOfFieldNode extends TempNode {
|
|
|
116
184
|
|
|
117
185
|
export default DepthOfFieldNode;
|
|
118
186
|
|
|
187
|
+
/**
|
|
188
|
+
* TSL function for creating a depth-of-field effect (DOF) for post processing.
|
|
189
|
+
*
|
|
190
|
+
* @function
|
|
191
|
+
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
192
|
+
* @param {Node<float>} viewZNode - Represents the viewZ depth values of the scene.
|
|
193
|
+
* @param {Node<float> | Number} focus - Defines the effect's focus which is the distance along the camera's look direction in world units.
|
|
194
|
+
* @param {Node<float> | Number} aperture - Defines the effect's aperture.
|
|
195
|
+
* @param {Node<float> | Number} maxblur - Defines the effect's maximum blur.
|
|
196
|
+
* @returns {DepthOfFieldNode}
|
|
197
|
+
*/
|
|
119
198
|
export const dof = ( node, viewZNode, focus = 1, aperture = 0.025, maxblur = 1 ) => nodeObject( new DepthOfFieldNode( convertToTexture( node ), nodeObject( viewZNode ), nodeObject( focus ), nodeObject( aperture ), nodeObject( maxblur ) ) );
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TempNode } from 'three/webgpu';
|
|
2
2
|
import { nodeObject, Fn, uv, uniform, vec2, vec3, sin, cos, add, vec4, screenSize } from 'three/tsl';
|
|
3
3
|
|
|
4
|
+
/** @module DotScreenNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Post processing node for creating dot-screen effect.
|
|
8
|
+
*
|
|
9
|
+
* @augments TempNode
|
|
10
|
+
*/
|
|
4
11
|
class DotScreenNode extends TempNode {
|
|
5
12
|
|
|
6
13
|
static get type() {
|
|
@@ -9,17 +16,46 @@ class DotScreenNode extends TempNode {
|
|
|
9
16
|
|
|
10
17
|
}
|
|
11
18
|
|
|
12
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new dot screen node.
|
|
21
|
+
*
|
|
22
|
+
* @param {Node} inputNode - The node that represents the input of the effect.
|
|
23
|
+
* @param {Number} [angle=1.57] - The rotation of the effect in radians.
|
|
24
|
+
* @param {Number} [scale=1] - The scale of the effect. A higher value means smaller dots.
|
|
25
|
+
*/
|
|
26
|
+
constructor( inputNode, angle = 1.57, scale = 1 ) {
|
|
13
27
|
|
|
14
28
|
super( 'vec4' );
|
|
15
29
|
|
|
30
|
+
/**
|
|
31
|
+
* The node that represents the input of the effect.
|
|
32
|
+
*
|
|
33
|
+
* @type {Node}
|
|
34
|
+
*/
|
|
16
35
|
this.inputNode = inputNode;
|
|
17
|
-
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* A uniform node that represents the rotation of the effect in radians.
|
|
39
|
+
*
|
|
40
|
+
* @type {UniformNode<float>}
|
|
41
|
+
*/
|
|
18
42
|
this.angle = uniform( angle );
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* A uniform node that represents the scale of the effect. A higher value means smaller dots.
|
|
46
|
+
*
|
|
47
|
+
* @type {UniformNode<float>}
|
|
48
|
+
*/
|
|
19
49
|
this.scale = uniform( scale );
|
|
20
50
|
|
|
21
51
|
}
|
|
22
52
|
|
|
53
|
+
/**
|
|
54
|
+
* This method is used to setup the effect's TSL code.
|
|
55
|
+
*
|
|
56
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
57
|
+
* @return {ShaderCallNodeInternal}
|
|
58
|
+
*/
|
|
23
59
|
setup() {
|
|
24
60
|
|
|
25
61
|
const inputNode = this.inputNode;
|
|
@@ -29,7 +65,7 @@ class DotScreenNode extends TempNode {
|
|
|
29
65
|
const s = sin( this.angle );
|
|
30
66
|
const c = cos( this.angle );
|
|
31
67
|
|
|
32
|
-
const tex = uv().mul( screenSize )
|
|
68
|
+
const tex = uv().mul( screenSize );
|
|
33
69
|
const point = vec2( c.mul( tex.x ).sub( s.mul( tex.y ) ), s.mul( tex.x ).add( c.mul( tex.y ) ) ).mul( this.scale );
|
|
34
70
|
|
|
35
71
|
return sin( point.x ).mul( sin( point.y ) ).mul( 4 );
|
|
@@ -56,4 +92,13 @@ class DotScreenNode extends TempNode {
|
|
|
56
92
|
|
|
57
93
|
export default DotScreenNode;
|
|
58
94
|
|
|
59
|
-
|
|
95
|
+
/**
|
|
96
|
+
* TSL function for creating a dot-screen node for post processing.
|
|
97
|
+
*
|
|
98
|
+
* @function
|
|
99
|
+
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
100
|
+
* @param {Number} [angle=1.57] - The rotation of the effect in radians.
|
|
101
|
+
* @param {Number} [scale=1] - The scale of the effect. A higher value means smaller dots.
|
|
102
|
+
* @returns {DotScreenNode}
|
|
103
|
+
*/
|
|
104
|
+
export const dotScreen = ( node, angle, scale ) => nodeObject( new DotScreenNode( nodeObject( node ), angle, scale ) );
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { Vector2, TempNode } from 'three/webgpu';
|
|
2
2
|
import { nodeObject, Fn, uniformArray, select, float, NodeUpdateType, uv, dot, clamp, uniform, convertToTexture, smoothstep, bool, vec2, vec3, If, Loop, max, min, Break, abs } from 'three/tsl';
|
|
3
3
|
|
|
4
|
+
/** @module FXAANode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Post processing node for applying FXAA. This node requires sRGB input
|
|
8
|
+
* so tone mapping and color space conversion must happen before the anti-aliasing.
|
|
9
|
+
*
|
|
10
|
+
* @augments TempNode
|
|
11
|
+
*/
|
|
4
12
|
class FXAANode extends TempNode {
|
|
5
13
|
|
|
6
14
|
static get type() {
|
|
@@ -9,19 +17,47 @@ class FXAANode extends TempNode {
|
|
|
9
17
|
|
|
10
18
|
}
|
|
11
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new FXAA node.
|
|
22
|
+
*
|
|
23
|
+
* @param {TextureNode} textureNode - The texture node that represents the input of the effect.
|
|
24
|
+
*/
|
|
12
25
|
constructor( textureNode ) {
|
|
13
26
|
|
|
14
27
|
super( 'vec4' );
|
|
15
28
|
|
|
29
|
+
/**
|
|
30
|
+
* The texture node that represents the input of the effect.
|
|
31
|
+
*
|
|
32
|
+
* @type {TextureNode}
|
|
33
|
+
*/
|
|
16
34
|
this.textureNode = textureNode;
|
|
17
35
|
|
|
36
|
+
/**
|
|
37
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
|
|
38
|
+
* its internal uniforms once per frame in `updateBefore()`.
|
|
39
|
+
*
|
|
40
|
+
* @type {String}
|
|
41
|
+
* @default 'frame'
|
|
42
|
+
*/
|
|
18
43
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
19
44
|
|
|
45
|
+
/**
|
|
46
|
+
* A uniform node holding the inverse resolution value.
|
|
47
|
+
*
|
|
48
|
+
* @private
|
|
49
|
+
* @type {UniformNode<vec2>}
|
|
50
|
+
*/
|
|
20
51
|
this._invSize = uniform( new Vector2() );
|
|
21
52
|
|
|
22
53
|
}
|
|
23
54
|
|
|
24
|
-
|
|
55
|
+
/**
|
|
56
|
+
* This method is used to update the effect's uniforms once per frame.
|
|
57
|
+
*
|
|
58
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
59
|
+
*/
|
|
60
|
+
updateBefore( /* frame */ ) {
|
|
25
61
|
|
|
26
62
|
const map = this.textureNode.value;
|
|
27
63
|
|
|
@@ -29,7 +65,13 @@ class FXAANode extends TempNode {
|
|
|
29
65
|
|
|
30
66
|
}
|
|
31
67
|
|
|
32
|
-
|
|
68
|
+
/**
|
|
69
|
+
* This method is used to setup the effect's TSL code.
|
|
70
|
+
*
|
|
71
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
72
|
+
* @return {ShaderCallNodeInternal}
|
|
73
|
+
*/
|
|
74
|
+
setup( /* builder */ ) {
|
|
33
75
|
|
|
34
76
|
const textureNode = this.textureNode.bias( - 100 );
|
|
35
77
|
const uvNode = textureNode.uvNode || uv();
|
|
@@ -44,7 +86,7 @@ class FXAANode extends TempNode {
|
|
|
44
86
|
|
|
45
87
|
const Sample = Fn( ( [ uv ] ) => {
|
|
46
88
|
|
|
47
|
-
return textureNode.
|
|
89
|
+
return textureNode.sample( uv );
|
|
48
90
|
|
|
49
91
|
} );
|
|
50
92
|
|
|
@@ -313,4 +355,11 @@ class FXAANode extends TempNode {
|
|
|
313
355
|
|
|
314
356
|
export default FXAANode;
|
|
315
357
|
|
|
358
|
+
/**
|
|
359
|
+
* TSL function for creating a FXAA node for anti-aliasing via post processing.
|
|
360
|
+
*
|
|
361
|
+
* @function
|
|
362
|
+
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
363
|
+
* @returns {FXAANode}
|
|
364
|
+
*/
|
|
316
365
|
export const fxaa = ( node ) => nodeObject( new FXAANode( convertToTexture( node ) ) );
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { TempNode } from 'three/webgpu';
|
|
2
2
|
import { rand, Fn, fract, time, uv, clamp, mix, vec4, nodeProxy } from 'three/tsl';
|
|
3
3
|
|
|
4
|
+
/** @module FilmNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Post processing node for creating a film grain effect.
|
|
8
|
+
*
|
|
9
|
+
* @augments TempNode
|
|
10
|
+
*/
|
|
4
11
|
class FilmNode extends TempNode {
|
|
5
12
|
|
|
6
13
|
static get type() {
|
|
@@ -9,17 +16,47 @@ class FilmNode extends TempNode {
|
|
|
9
16
|
|
|
10
17
|
}
|
|
11
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new film node.
|
|
21
|
+
*
|
|
22
|
+
* @param {Node} inputNode - The node that represents the input of the effect.
|
|
23
|
+
* @param {Node<float>?} [intensityNode=null] - A node that represents the effect's intensity.
|
|
24
|
+
* @param {Node<vec2>?} [uvNode=null] - A node that allows to pass custom (e.g. animated) uv data.
|
|
25
|
+
*/
|
|
12
26
|
constructor( inputNode, intensityNode = null, uvNode = null ) {
|
|
13
27
|
|
|
14
28
|
super( 'vec4' );
|
|
15
29
|
|
|
30
|
+
/**
|
|
31
|
+
* The node that represents the input of the effect.
|
|
32
|
+
*
|
|
33
|
+
* @type {Node}
|
|
34
|
+
*/
|
|
16
35
|
this.inputNode = inputNode;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* A node that represents the effect's intensity.
|
|
39
|
+
*
|
|
40
|
+
* @type {Node<float>}
|
|
41
|
+
*/
|
|
17
42
|
this.intensityNode = intensityNode;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* A node that allows to pass custom (e.g. animated) uv data.
|
|
46
|
+
*
|
|
47
|
+
* @type {Node<vec2>}
|
|
48
|
+
*/
|
|
18
49
|
this.uvNode = uvNode;
|
|
19
50
|
|
|
20
51
|
}
|
|
21
52
|
|
|
22
|
-
|
|
53
|
+
/**
|
|
54
|
+
* This method is used to setup the effect's TSL code.
|
|
55
|
+
*
|
|
56
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
57
|
+
* @return {ShaderCallNodeInternal}
|
|
58
|
+
*/
|
|
59
|
+
setup( /* builder */ ) {
|
|
23
60
|
|
|
24
61
|
const uvNode = this.uvNode || uv();
|
|
25
62
|
|
|
@@ -50,4 +87,13 @@ class FilmNode extends TempNode {
|
|
|
50
87
|
|
|
51
88
|
export default FilmNode;
|
|
52
89
|
|
|
90
|
+
/**
|
|
91
|
+
* TSL function for creating a film node for post processing.
|
|
92
|
+
*
|
|
93
|
+
* @function
|
|
94
|
+
* @param {Node<vec4>} inputNode - The node that represents the input of the effect.
|
|
95
|
+
* @param {Node<float>?} [intensityNode=null] - A node that represents the effect's intensity.
|
|
96
|
+
* @param {Node<vec2>?} [uvNode=null] - A node that allows to pass custom (e.g. animated) uv data.
|
|
97
|
+
* @returns {FilmNode}
|
|
98
|
+
*/
|
|
53
99
|
export const film = /*@__PURE__*/ nodeProxy( FilmNode );
|