@plastic-software/three 0.175.14 → 0.179.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/README.md +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +22 -8
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +57 -38
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +679 -300
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -2
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +213 -30
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +4 -3
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +22 -19
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +149 -13
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +22 -19
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +12 -10
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { add, float, If, Loop, int, Fn, min, max, clamp, nodeObject, texture, uniform, uv, vec2, vec4, luminance } from 'three/tsl';
|
|
1
|
+
import { HalfFloatType, Vector2, RenderTarget, RendererUtils, QuadMesh, NodeMaterial, TempNode, NodeUpdateType, Matrix4 } from 'three/webgpu';
|
|
2
|
+
import { add, float, If, Loop, int, Fn, min, max, clamp, nodeObject, texture, uniform, uv, vec2, vec4, luminance, convertToTexture, passTexture, velocity } from 'three/tsl';
|
|
3
3
|
|
|
4
4
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
5
5
|
const _size = /*@__PURE__*/ new Vector2();
|
|
@@ -8,33 +8,34 @@ let _rendererState;
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* A special
|
|
12
|
-
*
|
|
13
|
-
* Note: The current implementation does not yet support MRT setups.
|
|
11
|
+
* A special node that applies TRAA (Temporal Reprojection Anti-Aliasing).
|
|
14
12
|
*
|
|
15
13
|
* References:
|
|
16
14
|
* - {@link https://alextardif.com/TAA.html}
|
|
17
15
|
* - {@link https://www.elopezr.com/temporal-aa-and-the-quest-for-the-holy-trail/}
|
|
18
16
|
*
|
|
19
|
-
* @augments
|
|
17
|
+
* @augments TempNode
|
|
18
|
+
* @three_import import { traa } from 'three/addons/tsl/display/TRAANode.js';
|
|
20
19
|
*/
|
|
21
|
-
class
|
|
20
|
+
class TRAANode extends TempNode {
|
|
22
21
|
|
|
23
22
|
static get type() {
|
|
24
23
|
|
|
25
|
-
return '
|
|
24
|
+
return 'TRAANode';
|
|
26
25
|
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
/**
|
|
30
|
-
* Constructs a new TRAA
|
|
29
|
+
* Constructs a new TRAA node.
|
|
31
30
|
*
|
|
32
|
-
* @param {
|
|
33
|
-
* @param {
|
|
31
|
+
* @param {TextureNode} beautyNode - The texture node that represents the input of the effect.
|
|
32
|
+
* @param {TextureNode} depthNode - A node that represents the scene's depth.
|
|
33
|
+
* @param {TextureNode} velocityNode - A node that represents the scene's velocity.
|
|
34
|
+
* @param {Camera} camera - The camera the scene is rendered with.
|
|
34
35
|
*/
|
|
35
|
-
constructor(
|
|
36
|
+
constructor( beautyNode, depthNode, velocityNode, camera ) {
|
|
36
37
|
|
|
37
|
-
super(
|
|
38
|
+
super( 'vec4' );
|
|
38
39
|
|
|
39
40
|
/**
|
|
40
41
|
* This flag can be used for type testing.
|
|
@@ -43,40 +44,53 @@ class TRAAPassNode extends PassNode {
|
|
|
43
44
|
* @readonly
|
|
44
45
|
* @default true
|
|
45
46
|
*/
|
|
46
|
-
this.
|
|
47
|
+
this.isTRAANode = true;
|
|
47
48
|
|
|
48
49
|
/**
|
|
49
|
-
* The
|
|
50
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
|
|
51
|
+
* its effect once per frame in `updateBefore()`.
|
|
50
52
|
*
|
|
51
|
-
* @type {
|
|
52
|
-
* @default
|
|
53
|
+
* @type {string}
|
|
54
|
+
* @default 'frame'
|
|
53
55
|
*/
|
|
54
|
-
this.
|
|
56
|
+
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
55
57
|
|
|
56
58
|
/**
|
|
57
|
-
* The
|
|
59
|
+
* The texture node that represents the input of the effect.
|
|
58
60
|
*
|
|
59
|
-
* @type {
|
|
60
|
-
* @default 0
|
|
61
|
+
* @type {TextureNode}
|
|
61
62
|
*/
|
|
62
|
-
this.
|
|
63
|
+
this.beautyNode = beautyNode;
|
|
63
64
|
|
|
64
65
|
/**
|
|
65
|
-
*
|
|
66
|
+
* A node that represents the scene's velocity.
|
|
66
67
|
*
|
|
67
|
-
* @
|
|
68
|
-
* @type {number}
|
|
69
|
-
* @default 0
|
|
68
|
+
* @type {TextureNode}
|
|
70
69
|
*/
|
|
71
|
-
this.
|
|
70
|
+
this.depthNode = depthNode;
|
|
72
71
|
|
|
73
72
|
/**
|
|
74
|
-
*
|
|
73
|
+
* A node that represents the scene's velocity.
|
|
74
|
+
*
|
|
75
|
+
* @type {TextureNode}
|
|
76
|
+
*/
|
|
77
|
+
this.velocityNode = velocityNode;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The camera the scene is rendered with.
|
|
81
|
+
*
|
|
82
|
+
* @type {TextureNode}
|
|
83
|
+
*/
|
|
84
|
+
this.camera = camera;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* The jitter index selects the current camera offset value.
|
|
75
88
|
*
|
|
76
89
|
* @private
|
|
77
|
-
* @type {
|
|
90
|
+
* @type {number}
|
|
91
|
+
* @default 0
|
|
78
92
|
*/
|
|
79
|
-
this.
|
|
93
|
+
this._jitterIndex = 0;
|
|
80
94
|
|
|
81
95
|
/**
|
|
82
96
|
* A uniform node holding the inverse resolution value.
|
|
@@ -87,22 +101,22 @@ class TRAAPassNode extends PassNode {
|
|
|
87
101
|
this._invSize = uniform( new Vector2() );
|
|
88
102
|
|
|
89
103
|
/**
|
|
90
|
-
* The render target that
|
|
104
|
+
* The render target that represents the history of frame data.
|
|
91
105
|
*
|
|
92
106
|
* @private
|
|
93
107
|
* @type {?RenderTarget}
|
|
94
|
-
* @default null
|
|
95
108
|
*/
|
|
96
|
-
this.
|
|
109
|
+
this._historyRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType } );
|
|
110
|
+
this._historyRenderTarget.texture.name = 'TRAANode.history';
|
|
97
111
|
|
|
98
112
|
/**
|
|
99
|
-
* The render target
|
|
113
|
+
* The render target for the resolve.
|
|
100
114
|
*
|
|
101
115
|
* @private
|
|
102
116
|
* @type {?RenderTarget}
|
|
103
|
-
* @default null
|
|
104
117
|
*/
|
|
105
|
-
this.
|
|
118
|
+
this._resolveRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType } );
|
|
119
|
+
this._resolveRenderTarget.texture.name = 'TRAANode.resolve';
|
|
106
120
|
|
|
107
121
|
/**
|
|
108
122
|
* Material used for the resolve step.
|
|
@@ -111,7 +125,41 @@ class TRAAPassNode extends PassNode {
|
|
|
111
125
|
* @type {NodeMaterial}
|
|
112
126
|
*/
|
|
113
127
|
this._resolveMaterial = new NodeMaterial();
|
|
114
|
-
this._resolveMaterial.name = 'TRAA.
|
|
128
|
+
this._resolveMaterial.name = 'TRAA.resolve';
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* The result of the effect is represented as a separate texture node.
|
|
132
|
+
*
|
|
133
|
+
* @private
|
|
134
|
+
* @type {PassTextureNode}
|
|
135
|
+
*/
|
|
136
|
+
this._textureNode = passTexture( this, this._resolveRenderTarget.texture );
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Used to save the original/unjittered projection matrix.
|
|
140
|
+
*
|
|
141
|
+
* @private
|
|
142
|
+
* @type {Matrix4}
|
|
143
|
+
*/
|
|
144
|
+
this._originalProjectionMatrix = new Matrix4();
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Sync the post processing stack with the TRAA node.
|
|
148
|
+
* @private
|
|
149
|
+
* @type {boolean}
|
|
150
|
+
*/
|
|
151
|
+
this._needsPostProcessingSync = false;
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Returns the result of the effect as a texture node.
|
|
157
|
+
*
|
|
158
|
+
* @return {PassTextureNode} A texture node that represents the result of the effect.
|
|
159
|
+
*/
|
|
160
|
+
getTextureNode() {
|
|
161
|
+
|
|
162
|
+
return this._textureNode;
|
|
115
163
|
|
|
116
164
|
}
|
|
117
165
|
|
|
@@ -120,78 +168,48 @@ class TRAAPassNode extends PassNode {
|
|
|
120
168
|
*
|
|
121
169
|
* @param {number} width - The width of the effect.
|
|
122
170
|
* @param {number} height - The height of the effect.
|
|
123
|
-
* @return {boolean} Whether the TRAA needs a restart or not. That is required after a resize since buffer data with different sizes can't be resolved.
|
|
124
171
|
*/
|
|
125
172
|
setSize( width, height ) {
|
|
126
173
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
let needsRestart = false;
|
|
130
|
-
|
|
131
|
-
if ( this.renderTarget.width !== this._sampleRenderTarget.width || this.renderTarget.height !== this._sampleRenderTarget.height ) {
|
|
174
|
+
this._historyRenderTarget.setSize( width, height );
|
|
175
|
+
this._resolveRenderTarget.setSize( width, height );
|
|
132
176
|
|
|
133
|
-
|
|
134
|
-
this._historyRenderTarget.setSize( this.renderTarget.width, this.renderTarget.height );
|
|
135
|
-
|
|
136
|
-
this._invSize.value.set( 1 / this.renderTarget.width, 1 / this.renderTarget.height );
|
|
137
|
-
|
|
138
|
-
needsRestart = true;
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return needsRestart;
|
|
177
|
+
this._invSize.value.set( 1 / width, 1 / height );
|
|
143
178
|
|
|
144
179
|
}
|
|
145
180
|
|
|
146
181
|
/**
|
|
147
|
-
*
|
|
182
|
+
* Defines the TRAA's current jitter as a view offset
|
|
183
|
+
* to the scene's camera.
|
|
148
184
|
*
|
|
149
|
-
* @param {
|
|
185
|
+
* @param {number} width - The width of the effect.
|
|
186
|
+
* @param {number} height - The height of the effect.
|
|
150
187
|
*/
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const { renderer } = frame;
|
|
154
|
-
const { scene, camera } = this;
|
|
155
|
-
|
|
156
|
-
_rendererState = RendererUtils.resetRendererAndSceneState( renderer, scene, _rendererState );
|
|
157
|
-
|
|
158
|
-
//
|
|
159
|
-
|
|
160
|
-
this._pixelRatio = renderer.getPixelRatio();
|
|
161
|
-
const size = renderer.getSize( _size );
|
|
162
|
-
|
|
163
|
-
const needsRestart = this.setSize( size.width, size.height );
|
|
188
|
+
setViewOffset( width, height ) {
|
|
164
189
|
|
|
165
190
|
// save original/unjittered projection matrix for velocity pass
|
|
166
191
|
|
|
167
|
-
camera.updateProjectionMatrix();
|
|
168
|
-
this._originalProjectionMatrix.copy( camera.projectionMatrix );
|
|
192
|
+
this.camera.updateProjectionMatrix();
|
|
193
|
+
this._originalProjectionMatrix.copy( this.camera.projectionMatrix );
|
|
169
194
|
|
|
170
|
-
|
|
195
|
+
velocity.setProjectionMatrix( this._originalProjectionMatrix );
|
|
171
196
|
|
|
172
|
-
|
|
173
|
-
this._cameraFar.value = camera.far;
|
|
174
|
-
|
|
175
|
-
// configure jitter as view offset
|
|
197
|
+
//
|
|
176
198
|
|
|
177
199
|
const viewOffset = {
|
|
178
200
|
|
|
179
|
-
fullWidth:
|
|
180
|
-
fullHeight:
|
|
201
|
+
fullWidth: width,
|
|
202
|
+
fullHeight: height,
|
|
181
203
|
offsetX: 0,
|
|
182
204
|
offsetY: 0,
|
|
183
|
-
width:
|
|
184
|
-
height:
|
|
205
|
+
width: width,
|
|
206
|
+
height: height
|
|
185
207
|
|
|
186
208
|
};
|
|
187
209
|
|
|
188
|
-
const originalViewOffset = Object.assign( {}, camera.view );
|
|
189
|
-
|
|
190
|
-
if ( originalViewOffset.enabled ) Object.assign( viewOffset, originalViewOffset );
|
|
191
|
-
|
|
192
210
|
const jitterOffset = _JitterVectors[ this._jitterIndex ];
|
|
193
211
|
|
|
194
|
-
camera.setViewOffset(
|
|
212
|
+
this.camera.setViewOffset(
|
|
195
213
|
|
|
196
214
|
viewOffset.fullWidth, viewOffset.fullHeight,
|
|
197
215
|
|
|
@@ -201,97 +219,90 @@ class TRAAPassNode extends PassNode {
|
|
|
201
219
|
|
|
202
220
|
);
|
|
203
221
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
const mrt = this.getMRT();
|
|
207
|
-
const velocityOutput = mrt.get( 'velocity' );
|
|
208
|
-
|
|
209
|
-
if ( velocityOutput !== undefined ) {
|
|
210
|
-
|
|
211
|
-
velocityOutput.setProjectionMatrix( this._originalProjectionMatrix );
|
|
212
|
-
|
|
213
|
-
} else {
|
|
214
|
-
|
|
215
|
-
throw new Error( 'THREE:TRAAPassNode: Missing velocity output in MRT configuration.' );
|
|
216
|
-
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
// render sample
|
|
222
|
+
}
|
|
220
223
|
|
|
221
|
-
|
|
224
|
+
/**
|
|
225
|
+
* Clears the view offset from the scene's camera.
|
|
226
|
+
*/
|
|
227
|
+
clearViewOffset() {
|
|
222
228
|
|
|
223
|
-
|
|
224
|
-
renderer.setRenderTarget( this._sampleRenderTarget );
|
|
225
|
-
renderer.render( scene, camera );
|
|
229
|
+
this.camera.clearViewOffset();
|
|
226
230
|
|
|
227
|
-
|
|
228
|
-
renderer.setMRT( null );
|
|
231
|
+
velocity.setProjectionMatrix( null );
|
|
229
232
|
|
|
230
|
-
//
|
|
231
|
-
// into the history and final render target (no AA happens at that point).
|
|
233
|
+
// update jitter index
|
|
232
234
|
|
|
233
|
-
|
|
235
|
+
this._jitterIndex ++;
|
|
236
|
+
this._jitterIndex = this._jitterIndex % ( _JitterVectors.length - 1 );
|
|
234
237
|
|
|
235
|
-
|
|
238
|
+
}
|
|
236
239
|
|
|
237
|
-
|
|
238
|
-
|
|
240
|
+
/**
|
|
241
|
+
* This method is used to render the effect once per frame.
|
|
242
|
+
*
|
|
243
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
244
|
+
*/
|
|
245
|
+
updateBefore( frame ) {
|
|
239
246
|
|
|
240
|
-
|
|
241
|
-
renderer.clear();
|
|
247
|
+
const { renderer } = frame;
|
|
242
248
|
|
|
243
|
-
|
|
249
|
+
// keep the TRAA in sync with the dimensions of the beauty node
|
|
244
250
|
|
|
245
|
-
|
|
246
|
-
renderer.copyTextureToTexture( this._sampleRenderTarget.texture, this.renderTarget.texture );
|
|
251
|
+
const beautyRenderTarget = ( this.beautyNode.isRTTNode ) ? this.beautyNode.renderTarget : this.beautyNode.passNode.renderTarget;
|
|
247
252
|
|
|
248
|
-
|
|
253
|
+
const width = beautyRenderTarget.texture.width;
|
|
254
|
+
const height = beautyRenderTarget.texture.height;
|
|
249
255
|
|
|
250
|
-
|
|
256
|
+
//
|
|
251
257
|
|
|
252
|
-
|
|
253
|
-
_quadMesh.material = this._resolveMaterial;
|
|
254
|
-
_quadMesh.render( renderer );
|
|
255
|
-
renderer.setRenderTarget( null );
|
|
258
|
+
if ( this._needsPostProcessingSync === true ) {
|
|
256
259
|
|
|
257
|
-
|
|
260
|
+
this.setViewOffset( width, height );
|
|
258
261
|
|
|
259
|
-
|
|
262
|
+
this._needsPostProcessingSync = false;
|
|
260
263
|
|
|
261
264
|
}
|
|
262
265
|
|
|
263
|
-
|
|
266
|
+
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
|
|
264
267
|
|
|
265
|
-
|
|
268
|
+
//
|
|
266
269
|
|
|
267
|
-
|
|
270
|
+
const needsRestart = this._historyRenderTarget.width !== width || this._historyRenderTarget.height !== height;
|
|
271
|
+
this.setSize( width, height );
|
|
268
272
|
|
|
269
|
-
|
|
270
|
-
this._jitterIndex = this._jitterIndex % ( _JitterVectors.length - 1 );
|
|
273
|
+
// every time when the dimensions change we need fresh history data
|
|
271
274
|
|
|
272
|
-
|
|
275
|
+
if ( needsRestart === true ) {
|
|
273
276
|
|
|
274
|
-
|
|
277
|
+
// bind and clear render target to make sure they are initialized after the resize which triggers a dispose()
|
|
275
278
|
|
|
276
|
-
|
|
279
|
+
renderer.setRenderTarget( this._historyRenderTarget );
|
|
280
|
+
renderer.clear();
|
|
277
281
|
|
|
278
|
-
|
|
282
|
+
renderer.setRenderTarget( this._resolveRenderTarget );
|
|
283
|
+
renderer.clear();
|
|
279
284
|
|
|
280
|
-
|
|
285
|
+
// make sure to reset the history with the contents of the beauty buffer otherwise subsequent frames after the
|
|
286
|
+
// resize will fade from a darker color to the correct one because the history was cleared with black.
|
|
281
287
|
|
|
282
|
-
|
|
288
|
+
renderer.copyTextureToTexture( beautyRenderTarget.texture, this._historyRenderTarget.texture );
|
|
283
289
|
|
|
284
|
-
|
|
290
|
+
}
|
|
285
291
|
|
|
286
|
-
|
|
292
|
+
// resolve
|
|
287
293
|
|
|
288
|
-
|
|
294
|
+
renderer.setRenderTarget( this._resolveRenderTarget );
|
|
295
|
+
_quadMesh.material = this._resolveMaterial;
|
|
296
|
+
_quadMesh.render( renderer );
|
|
297
|
+
renderer.setRenderTarget( null );
|
|
289
298
|
|
|
290
|
-
|
|
299
|
+
// update history
|
|
291
300
|
|
|
292
|
-
|
|
301
|
+
renderer.copyTextureToTexture( this._resolveRenderTarget.texture, this._historyRenderTarget.texture );
|
|
293
302
|
|
|
294
|
-
|
|
303
|
+
// restore
|
|
304
|
+
|
|
305
|
+
RendererUtils.restoreRendererState( renderer, _rendererState );
|
|
295
306
|
|
|
296
307
|
}
|
|
297
308
|
|
|
@@ -303,28 +314,31 @@ class TRAAPassNode extends PassNode {
|
|
|
303
314
|
*/
|
|
304
315
|
setup( builder ) {
|
|
305
316
|
|
|
306
|
-
|
|
317
|
+
const postProcessing = builder.context.postProcessing;
|
|
307
318
|
|
|
308
|
-
|
|
309
|
-
this._historyRenderTarget = this.renderTarget.clone();
|
|
319
|
+
if ( postProcessing ) {
|
|
310
320
|
|
|
311
|
-
this.
|
|
312
|
-
this._sampleRenderTarget.texture.magFilter = NearestFilter;
|
|
321
|
+
this._needsPostProcessingSync = true;
|
|
313
322
|
|
|
314
|
-
|
|
315
|
-
velocityTarget.isRenderTargetTexture = true;
|
|
316
|
-
velocityTarget.name = 'velocity';
|
|
323
|
+
postProcessing.context.onBeforePostProcessing = () => {
|
|
317
324
|
|
|
318
|
-
|
|
325
|
+
const size = builder.renderer.getDrawingBufferSize( _size );
|
|
326
|
+
this.setViewOffset( size.width, size.height );
|
|
319
327
|
|
|
320
|
-
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
postProcessing.context.onAfterPostProcessing = () => {
|
|
321
331
|
|
|
322
|
-
|
|
332
|
+
this.clearViewOffset();
|
|
333
|
+
|
|
334
|
+
};
|
|
335
|
+
|
|
336
|
+
}
|
|
323
337
|
|
|
324
338
|
const historyTexture = texture( this._historyRenderTarget.texture );
|
|
325
|
-
const sampleTexture =
|
|
326
|
-
const
|
|
327
|
-
const
|
|
339
|
+
const sampleTexture = this.beautyNode;
|
|
340
|
+
const depthTexture = this.depthNode;
|
|
341
|
+
const velocityTexture = this.velocityNode;
|
|
328
342
|
|
|
329
343
|
const resolve = Fn( () => {
|
|
330
344
|
|
|
@@ -379,8 +393,8 @@ class TRAAPassNode extends PassNode {
|
|
|
379
393
|
const currentWeight = float( 0.05 ).toVar();
|
|
380
394
|
const historyWeight = currentWeight.oneMinus().toVar();
|
|
381
395
|
|
|
382
|
-
const compressedCurrent = currentColor.mul( float( 1 ).div( ( max(
|
|
383
|
-
const compressedHistory = clampedHistoryColor.mul( float( 1 ).div( ( max(
|
|
396
|
+
const compressedCurrent = currentColor.mul( float( 1 ).div( ( max( currentColor.r, currentColor.g, currentColor.b ).add( 1.0 ) ) ) );
|
|
397
|
+
const compressedHistory = clampedHistoryColor.mul( float( 1 ).div( ( max( clampedHistoryColor.r, clampedHistoryColor.g, clampedHistoryColor.b ).add( 1.0 ) ) ) );
|
|
384
398
|
|
|
385
399
|
const luminanceCurrent = luminance( compressedCurrent.rgb );
|
|
386
400
|
const luminanceHistory = luminance( compressedHistory.rgb );
|
|
@@ -394,9 +408,9 @@ class TRAAPassNode extends PassNode {
|
|
|
394
408
|
|
|
395
409
|
// materials
|
|
396
410
|
|
|
397
|
-
this._resolveMaterial.
|
|
411
|
+
this._resolveMaterial.colorNode = resolve();
|
|
398
412
|
|
|
399
|
-
return
|
|
413
|
+
return this._textureNode;
|
|
400
414
|
|
|
401
415
|
}
|
|
402
416
|
|
|
@@ -406,14 +420,8 @@ class TRAAPassNode extends PassNode {
|
|
|
406
420
|
*/
|
|
407
421
|
dispose() {
|
|
408
422
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
if ( this._sampleRenderTarget !== null ) {
|
|
412
|
-
|
|
413
|
-
this._sampleRenderTarget.dispose();
|
|
414
|
-
this._historyRenderTarget.dispose();
|
|
415
|
-
|
|
416
|
-
}
|
|
423
|
+
this._historyRenderTarget.dispose();
|
|
424
|
+
this._resolveRenderTarget.dispose();
|
|
417
425
|
|
|
418
426
|
this._resolveMaterial.dispose();
|
|
419
427
|
|
|
@@ -421,7 +429,7 @@ class TRAAPassNode extends PassNode {
|
|
|
421
429
|
|
|
422
430
|
}
|
|
423
431
|
|
|
424
|
-
export default
|
|
432
|
+
export default TRAANode;
|
|
425
433
|
|
|
426
434
|
// These jitter vectors are specified in integers because it is easier.
|
|
427
435
|
// I am assuming a [-8,8) integer grid, but it needs to be mapped onto [-0.5,0.5)
|
|
@@ -440,12 +448,14 @@ const _JitterVectors = [
|
|
|
440
448
|
];
|
|
441
449
|
|
|
442
450
|
/**
|
|
443
|
-
* TSL function for creating a TRAA
|
|
451
|
+
* TSL function for creating a TRAA node for Temporal Reprojection Anti-Aliasing.
|
|
444
452
|
*
|
|
445
453
|
* @tsl
|
|
446
454
|
* @function
|
|
447
|
-
* @param {
|
|
448
|
-
* @param {
|
|
449
|
-
* @
|
|
455
|
+
* @param {TextureNode} beautyNode - The texture node that represents the input of the effect.
|
|
456
|
+
* @param {TextureNode} depthNode - A node that represents the scene's depth.
|
|
457
|
+
* @param {TextureNode} velocityNode - A node that represents the scene's velocity.
|
|
458
|
+
* @param {Camera} camera - The camera the scene is rendered with.
|
|
459
|
+
* @returns {TRAANode}
|
|
450
460
|
*/
|
|
451
|
-
export const
|
|
461
|
+
export const traa = ( beautyNode, depthNode, velocityNode, camera ) => nodeObject( new TRAANode( convertToTexture( beautyNode ), depthNode, velocityNode, camera ) );
|
|
@@ -5,6 +5,7 @@ import { nodeObject, Fn, float, uv, convertToTexture, vec4, If, int, clamp, sub,
|
|
|
5
5
|
* Post processing node for creating a transition effect between scenes.
|
|
6
6
|
*
|
|
7
7
|
* @augments TempNode
|
|
8
|
+
* @three_import import { transition } from 'three/addons/tsl/display/TransitionNode.js';
|
|
8
9
|
*/
|
|
9
10
|
class TransitionNode extends TempNode {
|
|
10
11
|
|
|
@@ -1,20 +1,42 @@
|
|
|
1
|
-
import { float, Fn, vec2, uv, sin, rand, degrees, cos, Loop, vec4 } from 'three/tsl';
|
|
1
|
+
import { float, Fn, vec2, uv, sin, rand, degrees, cos, Loop, vec4, premultiplyAlpha, unpremultiplyAlpha } from 'three/tsl';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Applies a hash blur effect to the given texture node.
|
|
5
5
|
*
|
|
6
6
|
* Reference: {@link https://www.shadertoy.com/view/4lXXWn}.
|
|
7
7
|
*
|
|
8
|
-
* @tsl
|
|
9
8
|
* @function
|
|
10
9
|
* @param {Node<vec4>} textureNode - The texture node that should be blurred.
|
|
11
10
|
* @param {Node<float>} [bluramount=float(0.1)] - This node determines the amount of blur.
|
|
12
|
-
* @param {
|
|
11
|
+
* @param {Object} [options={}] - Additional options for the hash blur effect.
|
|
12
|
+
* @param {Node<float>} [options.repeats=float(45)] - The number of iterations for the blur effect.
|
|
13
|
+
* @param {Node<vec4>} [options.mask=null] - A mask node to control the alpha blending of the blur.
|
|
14
|
+
* @param {boolean} [options.premultipliedAlpha=false] - Whether to use premultiplied alpha for the blur effect.
|
|
13
15
|
* @return {Node<vec4>} The blurred texture node.
|
|
14
16
|
*/
|
|
15
|
-
export const hashBlur = /*#__PURE__*/ Fn( ( [ textureNode, bluramount = float( 0.1 ),
|
|
17
|
+
export const hashBlur = /*#__PURE__*/ Fn( ( [ textureNode, bluramount = float( 0.1 ), options = {} ] ) => {
|
|
16
18
|
|
|
17
|
-
const
|
|
19
|
+
const {
|
|
20
|
+
repeats = float( 45 ),
|
|
21
|
+
mask = null,
|
|
22
|
+
premultipliedAlpha = false
|
|
23
|
+
} = options;
|
|
24
|
+
|
|
25
|
+
const draw = ( uv ) => {
|
|
26
|
+
|
|
27
|
+
let sample = textureNode.sample( uv );
|
|
28
|
+
|
|
29
|
+
if ( mask !== null ) {
|
|
30
|
+
|
|
31
|
+
const alpha = mask.sample( uv ).x;
|
|
32
|
+
|
|
33
|
+
sample = vec4( sample.rgb, sample.a.mul( alpha ) );
|
|
34
|
+
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return premultipliedAlpha ? premultiplyAlpha( sample ) : sample;
|
|
38
|
+
|
|
39
|
+
};
|
|
18
40
|
|
|
19
41
|
const targetUV = textureNode.uvNode || uv();
|
|
20
42
|
const blurred_image = vec4( 0. ).toVar();
|
|
@@ -29,6 +51,6 @@ export const hashBlur = /*#__PURE__*/ Fn( ( [ textureNode, bluramount = float( 0
|
|
|
29
51
|
|
|
30
52
|
blurred_image.divAssign( repeats );
|
|
31
53
|
|
|
32
|
-
return blurred_image;
|
|
54
|
+
return premultipliedAlpha ? unpremultiplyAlpha( blurred_image ) : blurred_image;
|
|
33
55
|
|
|
34
56
|
} );
|
|
@@ -40,6 +40,7 @@ const _size = /*@__PURE__*/ new Vector2();
|
|
|
40
40
|
* a custom implementation.
|
|
41
41
|
*
|
|
42
42
|
* @augments LightsNode
|
|
43
|
+
* @three_import import { tiledLights } from 'three/addons/tsl/lighting/TiledLightsNode.js';
|
|
43
44
|
*/
|
|
44
45
|
class TiledLightsNode extends LightsNode {
|
|
45
46
|
|
|
@@ -233,8 +234,8 @@ class TiledLightsNode extends LightsNode {
|
|
|
233
234
|
const lightingModel = builder.context.reflectedLight;
|
|
234
235
|
|
|
235
236
|
// force declaration order, before of the loop
|
|
236
|
-
lightingModel.directDiffuse.
|
|
237
|
-
lightingModel.directSpecular.
|
|
237
|
+
lightingModel.directDiffuse.toStack();
|
|
238
|
+
lightingModel.directSpecular.toStack();
|
|
238
239
|
|
|
239
240
|
super.setupLights( builder, lightNodes );
|
|
240
241
|
|
|
@@ -261,7 +262,7 @@ class TiledLightsNode extends LightsNode {
|
|
|
261
262
|
|
|
262
263
|
} );
|
|
263
264
|
|
|
264
|
-
} )()
|
|
265
|
+
}, 'void' )();
|
|
265
266
|
|
|
266
267
|
}
|
|
267
268
|
|
|
@@ -321,7 +322,7 @@ class TiledLightsNode extends LightsNode {
|
|
|
321
322
|
const lightsTexture = new DataTexture( lightsData, lightsData.length / 8, 2, RGBAFormat, FloatType );
|
|
322
323
|
|
|
323
324
|
const lightIndexesArray = new Int32Array( count * 4 * 2 );
|
|
324
|
-
const lightIndexes = attributeArray( lightIndexesArray, 'ivec4' ).
|
|
325
|
+
const lightIndexes = attributeArray( lightIndexesArray, 'ivec4' ).setName( 'lightIndexes' );
|
|
325
326
|
|
|
326
327
|
// compute
|
|
327
328
|
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { TextureLoader } from 'three';
|
|
2
2
|
import { Fn, int, ivec2, textureLoad } from 'three/tsl';
|
|
3
3
|
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* @module Bayer
|
|
6
|
+
* @three_import import { bayer16 } from 'three/addons/tsl/math/Bayer.js';
|
|
7
|
+
*/
|
|
5
8
|
|
|
6
9
|
let bayer16Texture = null;
|
|
7
10
|
|