@plastic-software/three 0.174.0 → 0.175.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/build/three.cjs +10655 -1446
- package/build/three.core.js +9626 -1094
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +834 -157
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1429 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -3,20 +3,70 @@ import {
|
|
|
3
3
|
} from 'three';
|
|
4
4
|
import { Pass } from './Pass.js';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* This class can be used to force a clear operation for the current read or
|
|
8
|
+
* default framebuffer (when rendering to screen).
|
|
9
|
+
*
|
|
10
|
+
* ```js
|
|
11
|
+
* const clearPass = new ClearPass();
|
|
12
|
+
* composer.addPass( clearPass );
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @augments Pass
|
|
16
|
+
*/
|
|
6
17
|
class ClearPass extends Pass {
|
|
7
18
|
|
|
8
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new clear pass.
|
|
21
|
+
*
|
|
22
|
+
* @param {(number|Color|string)} [clearColor=0x000000] - The clear color.
|
|
23
|
+
* @param {number} [clearAlpha=0] - The clear alpha.
|
|
24
|
+
*/
|
|
25
|
+
constructor( clearColor = 0x000000, clearAlpha = 0 ) {
|
|
9
26
|
|
|
10
27
|
super();
|
|
11
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Overwritten to disable the swap.
|
|
31
|
+
*
|
|
32
|
+
* @type {boolean}
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
12
35
|
this.needsSwap = false;
|
|
13
36
|
|
|
14
|
-
|
|
15
|
-
|
|
37
|
+
/**
|
|
38
|
+
* The clear color.
|
|
39
|
+
*
|
|
40
|
+
* @type {(number|Color|string)}
|
|
41
|
+
* @default 0x000000
|
|
42
|
+
*/
|
|
43
|
+
this.clearColor = clearColor;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The clear alpha.
|
|
47
|
+
*
|
|
48
|
+
* @type {number}
|
|
49
|
+
* @default 0
|
|
50
|
+
*/
|
|
51
|
+
this.clearAlpha = clearAlpha;
|
|
52
|
+
|
|
53
|
+
// internals
|
|
54
|
+
|
|
16
55
|
this._oldClearColor = new Color();
|
|
17
56
|
|
|
18
57
|
}
|
|
19
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Performs the clear operation. This affects the current read or the default framebuffer.
|
|
61
|
+
*
|
|
62
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
63
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
64
|
+
* destination for the pass.
|
|
65
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
66
|
+
* previous pass from this buffer.
|
|
67
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
68
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
69
|
+
*/
|
|
20
70
|
render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
|
|
21
71
|
|
|
22
72
|
let oldClearAlpha;
|
|
@@ -10,30 +10,78 @@ import {
|
|
|
10
10
|
} from 'three';
|
|
11
11
|
import { Pass } from './Pass.js';
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* This pass can be used to render a cube texture over the entire screen.
|
|
15
|
+
*
|
|
16
|
+
* ```js
|
|
17
|
+
* const cubeMap = new THREE.CubeTextureLoader().load( urls );
|
|
18
|
+
*
|
|
19
|
+
* const cubeTexturePass = new CubeTexturePass( camera, cubemap );
|
|
20
|
+
* composer.addPass( cubeTexturePass );
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @augments Pass
|
|
24
|
+
*/
|
|
13
25
|
class CubeTexturePass extends Pass {
|
|
14
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new cube texture pass.
|
|
29
|
+
*
|
|
30
|
+
* @param {PerspectiveCamera} camera - The camera.
|
|
31
|
+
* @param {CubeTexture} tCube - The cube texture to render.
|
|
32
|
+
* @param {number} [opacity=1] - The opacity.
|
|
33
|
+
*/
|
|
15
34
|
constructor( camera, tCube, opacity = 1 ) {
|
|
16
35
|
|
|
17
36
|
super();
|
|
18
37
|
|
|
38
|
+
/**
|
|
39
|
+
* The camera.
|
|
40
|
+
*
|
|
41
|
+
* @type {PerspectiveCamera}
|
|
42
|
+
*/
|
|
19
43
|
this.camera = camera;
|
|
20
44
|
|
|
45
|
+
/**
|
|
46
|
+
* The cube texture to render.
|
|
47
|
+
*
|
|
48
|
+
* @type {CubeTexture}
|
|
49
|
+
*/
|
|
50
|
+
this.tCube = tCube;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The opacity.
|
|
54
|
+
*
|
|
55
|
+
* @type {number}
|
|
56
|
+
* @default 1
|
|
57
|
+
*/
|
|
58
|
+
this.opacity = opacity;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Overwritten to disable the swap.
|
|
62
|
+
*
|
|
63
|
+
* @type {boolean}
|
|
64
|
+
* @default false
|
|
65
|
+
*/
|
|
21
66
|
this.needsSwap = false;
|
|
22
67
|
|
|
23
|
-
|
|
24
|
-
|
|
68
|
+
// internals
|
|
69
|
+
|
|
70
|
+
const cubeShader = ShaderLib[ 'cube' ];
|
|
71
|
+
|
|
72
|
+
this._cubeMesh = new Mesh(
|
|
25
73
|
new BoxGeometry( 10, 10, 10 ),
|
|
26
74
|
new ShaderMaterial( {
|
|
27
|
-
uniforms: UniformsUtils.clone(
|
|
28
|
-
vertexShader:
|
|
29
|
-
fragmentShader:
|
|
75
|
+
uniforms: UniformsUtils.clone( cubeShader.uniforms ),
|
|
76
|
+
vertexShader: cubeShader.vertexShader,
|
|
77
|
+
fragmentShader: cubeShader.fragmentShader,
|
|
30
78
|
depthTest: false,
|
|
31
79
|
depthWrite: false,
|
|
32
80
|
side: BackSide
|
|
33
81
|
} )
|
|
34
82
|
);
|
|
35
83
|
|
|
36
|
-
Object.defineProperty( this.
|
|
84
|
+
Object.defineProperty( this._cubeMesh.material, 'envMap', {
|
|
37
85
|
|
|
38
86
|
get: function () {
|
|
39
87
|
|
|
@@ -43,40 +91,52 @@ class CubeTexturePass extends Pass {
|
|
|
43
91
|
|
|
44
92
|
} );
|
|
45
93
|
|
|
46
|
-
this.
|
|
47
|
-
this.
|
|
48
|
-
|
|
49
|
-
this.cubeScene = new Scene();
|
|
50
|
-
this.cubeCamera = new PerspectiveCamera();
|
|
51
|
-
this.cubeScene.add( this.cubeMesh );
|
|
94
|
+
this._cubeScene = new Scene();
|
|
95
|
+
this._cubeCamera = new PerspectiveCamera();
|
|
96
|
+
this._cubeScene.add( this._cubeMesh );
|
|
52
97
|
|
|
53
98
|
}
|
|
54
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Performs the cube texture pass.
|
|
102
|
+
*
|
|
103
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
104
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
105
|
+
* destination for the pass.
|
|
106
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
107
|
+
* previous pass from this buffer.
|
|
108
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
109
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
110
|
+
*/
|
|
55
111
|
render( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {
|
|
56
112
|
|
|
57
113
|
const oldAutoClear = renderer.autoClear;
|
|
58
114
|
renderer.autoClear = false;
|
|
59
115
|
|
|
60
|
-
this.
|
|
61
|
-
this.
|
|
116
|
+
this._cubeCamera.projectionMatrix.copy( this.camera.projectionMatrix );
|
|
117
|
+
this._cubeCamera.quaternion.setFromRotationMatrix( this.camera.matrixWorld );
|
|
62
118
|
|
|
63
|
-
this.
|
|
64
|
-
this.
|
|
65
|
-
this.
|
|
66
|
-
this.
|
|
119
|
+
this._cubeMesh.material.uniforms.tCube.value = this.tCube;
|
|
120
|
+
this._cubeMesh.material.uniforms.tFlip.value = ( this.tCube.isCubeTexture && this.tCube.isRenderTargetTexture === false ) ? - 1 : 1;
|
|
121
|
+
this._cubeMesh.material.uniforms.opacity.value = this.opacity;
|
|
122
|
+
this._cubeMesh.material.transparent = ( this.opacity < 1.0 );
|
|
67
123
|
|
|
68
124
|
renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );
|
|
69
125
|
if ( this.clear ) renderer.clear();
|
|
70
|
-
renderer.render( this.
|
|
126
|
+
renderer.render( this._cubeScene, this._cubeCamera );
|
|
71
127
|
|
|
72
128
|
renderer.autoClear = oldAutoClear;
|
|
73
129
|
|
|
74
130
|
}
|
|
75
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
134
|
+
* method whenever the pass is no longer used in your app.
|
|
135
|
+
*/
|
|
76
136
|
dispose() {
|
|
77
137
|
|
|
78
|
-
this.
|
|
79
|
-
this.
|
|
138
|
+
this._cubeMesh.geometry.dispose();
|
|
139
|
+
this._cubeMesh.material.dispose();
|
|
80
140
|
|
|
81
141
|
}
|
|
82
142
|
|
|
@@ -5,33 +5,77 @@ import {
|
|
|
5
5
|
import { Pass, FullScreenQuad } from './Pass.js';
|
|
6
6
|
import { DotScreenShader } from '../shaders/DotScreenShader.js';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Pass for creating a dot-screen effect.
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* const pass = new DotScreenPass( new THREE.Vector2( 0, 0 ), 0.5, 0.8 );
|
|
13
|
+
* composer.addPass( pass );
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @augments Pass
|
|
17
|
+
*/
|
|
8
18
|
class DotScreenPass extends Pass {
|
|
9
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new dot screen pass.
|
|
22
|
+
*
|
|
23
|
+
* @param {Vector2} center - The center point.
|
|
24
|
+
* @param {number} angle - The rotation of the effect in radians.
|
|
25
|
+
* @param {number} scale - The scale of the effect. A higher value means smaller dots.
|
|
26
|
+
*/
|
|
10
27
|
constructor( center, angle, scale ) {
|
|
11
28
|
|
|
12
29
|
super();
|
|
13
30
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
31
|
+
/**
|
|
32
|
+
* The pass uniforms. Use this object if you want to update the
|
|
33
|
+
* `center`, `angle` or `scale` values at runtime.
|
|
34
|
+
* ```js
|
|
35
|
+
* pass.uniforms.center.value.copy( center );
|
|
36
|
+
* pass.uniforms.angle.value = 0;
|
|
37
|
+
* pass.uniforms.scale.value = 0.5;
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @type {Object}
|
|
41
|
+
*/
|
|
42
|
+
this.uniforms = UniformsUtils.clone( DotScreenShader.uniforms );
|
|
17
43
|
|
|
18
44
|
if ( center !== undefined ) this.uniforms[ 'center' ].value.copy( center );
|
|
19
45
|
if ( angle !== undefined ) this.uniforms[ 'angle' ].value = angle;
|
|
20
46
|
if ( scale !== undefined ) this.uniforms[ 'scale' ].value = scale;
|
|
21
47
|
|
|
48
|
+
/**
|
|
49
|
+
* The pass material.
|
|
50
|
+
*
|
|
51
|
+
* @type {ShaderMaterial}
|
|
52
|
+
*/
|
|
22
53
|
this.material = new ShaderMaterial( {
|
|
23
54
|
|
|
24
|
-
name:
|
|
55
|
+
name: DotScreenShader.name,
|
|
25
56
|
uniforms: this.uniforms,
|
|
26
|
-
vertexShader:
|
|
27
|
-
fragmentShader:
|
|
57
|
+
vertexShader: DotScreenShader.vertexShader,
|
|
58
|
+
fragmentShader: DotScreenShader.fragmentShader
|
|
28
59
|
|
|
29
60
|
} );
|
|
30
61
|
|
|
31
|
-
|
|
62
|
+
// internals
|
|
63
|
+
|
|
64
|
+
this._fsQuad = new FullScreenQuad( this.material );
|
|
32
65
|
|
|
33
66
|
}
|
|
34
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Performs the dot screen pass.
|
|
70
|
+
*
|
|
71
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
72
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
73
|
+
* destination for the pass.
|
|
74
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
75
|
+
* previous pass from this buffer.
|
|
76
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
77
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
78
|
+
*/
|
|
35
79
|
render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
|
|
36
80
|
|
|
37
81
|
this.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
|
|
@@ -40,23 +84,27 @@ class DotScreenPass extends Pass {
|
|
|
40
84
|
if ( this.renderToScreen ) {
|
|
41
85
|
|
|
42
86
|
renderer.setRenderTarget( null );
|
|
43
|
-
this.
|
|
87
|
+
this._fsQuad.render( renderer );
|
|
44
88
|
|
|
45
89
|
} else {
|
|
46
90
|
|
|
47
91
|
renderer.setRenderTarget( writeBuffer );
|
|
48
92
|
if ( this.clear ) renderer.clear();
|
|
49
|
-
this.
|
|
93
|
+
this._fsQuad.render( renderer );
|
|
50
94
|
|
|
51
95
|
}
|
|
52
96
|
|
|
53
97
|
}
|
|
54
98
|
|
|
99
|
+
/**
|
|
100
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
101
|
+
* method whenever the pass is no longer used in your app.
|
|
102
|
+
*/
|
|
55
103
|
dispose() {
|
|
56
104
|
|
|
57
105
|
this.material.dispose();
|
|
58
106
|
|
|
59
|
-
this.
|
|
107
|
+
this._fsQuad.dispose();
|
|
60
108
|
|
|
61
109
|
}
|
|
62
110
|
|
|
@@ -9,10 +9,51 @@ import { CopyShader } from '../shaders/CopyShader.js';
|
|
|
9
9
|
import { ShaderPass } from './ShaderPass.js';
|
|
10
10
|
import { ClearMaskPass, MaskPass } from './MaskPass.js';
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Used to implement post-processing effects in three.js.
|
|
14
|
+
* The class manages a chain of post-processing passes to produce the final visual result.
|
|
15
|
+
* Post-processing passes are executed in order of their addition/insertion.
|
|
16
|
+
* The last pass is automatically rendered to screen.
|
|
17
|
+
*
|
|
18
|
+
* This module can only be used with {@link WebGLRenderer}.
|
|
19
|
+
*
|
|
20
|
+
* ```js
|
|
21
|
+
* const composer = new EffectComposer( renderer );
|
|
22
|
+
*
|
|
23
|
+
* // adding some passes
|
|
24
|
+
* const renderPass = new RenderPass( scene, camera );
|
|
25
|
+
* composer.addPass( renderPass );
|
|
26
|
+
*
|
|
27
|
+
* const glitchPass = new GlitchPass();
|
|
28
|
+
* composer.addPass( glitchPass );
|
|
29
|
+
*
|
|
30
|
+
* const outputPass = new OutputPass()
|
|
31
|
+
* composer.addPass( outputPass );
|
|
32
|
+
*
|
|
33
|
+
* function animate() {
|
|
34
|
+
*
|
|
35
|
+
* composer.render(); // instead of renderer.render()
|
|
36
|
+
*
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
12
40
|
class EffectComposer {
|
|
13
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Constructs a new effect composer.
|
|
44
|
+
*
|
|
45
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
46
|
+
* @param {WebGLRenderTarget} [renderTarget] - This render target and a clone will
|
|
47
|
+
* be used as the internal read and write buffers. If not given, the composer creates
|
|
48
|
+
* the buffers automatically.
|
|
49
|
+
*/
|
|
14
50
|
constructor( renderer, renderTarget ) {
|
|
15
51
|
|
|
52
|
+
/**
|
|
53
|
+
* The renderer.
|
|
54
|
+
*
|
|
55
|
+
* @type {WebGLRenderer}
|
|
56
|
+
*/
|
|
16
57
|
this.renderer = renderer;
|
|
17
58
|
|
|
18
59
|
this._pixelRatio = renderer.getPixelRatio();
|
|
@@ -37,20 +78,59 @@ class EffectComposer {
|
|
|
37
78
|
this.renderTarget2 = renderTarget.clone();
|
|
38
79
|
this.renderTarget2.texture.name = 'EffectComposer.rt2';
|
|
39
80
|
|
|
81
|
+
/**
|
|
82
|
+
* A reference to the internal write buffer. Passes usually write
|
|
83
|
+
* their result into this buffer.
|
|
84
|
+
*
|
|
85
|
+
* @type {WebGLRenderTarget}
|
|
86
|
+
*/
|
|
40
87
|
this.writeBuffer = this.renderTarget1;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* A reference to the internal read buffer. Passes usually read
|
|
91
|
+
* the previous render result from this buffer.
|
|
92
|
+
*
|
|
93
|
+
* @type {WebGLRenderTarget}
|
|
94
|
+
*/
|
|
41
95
|
this.readBuffer = this.renderTarget2;
|
|
42
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Whether the final pass is rendered to the screen (default framebuffer) or not.
|
|
99
|
+
*
|
|
100
|
+
* @type {boolean}
|
|
101
|
+
* @default true
|
|
102
|
+
*/
|
|
43
103
|
this.renderToScreen = true;
|
|
44
104
|
|
|
105
|
+
/**
|
|
106
|
+
* An array representing the (ordered) chain of post-processing passes.
|
|
107
|
+
*
|
|
108
|
+
* @type {Array<Pass>}
|
|
109
|
+
*/
|
|
45
110
|
this.passes = [];
|
|
46
111
|
|
|
112
|
+
/**
|
|
113
|
+
* A copy pass used for internal swap operations.
|
|
114
|
+
*
|
|
115
|
+
* @private
|
|
116
|
+
* @type {ShaderPass}
|
|
117
|
+
*/
|
|
47
118
|
this.copyPass = new ShaderPass( CopyShader );
|
|
48
119
|
this.copyPass.material.blending = NoBlending;
|
|
49
120
|
|
|
121
|
+
/**
|
|
122
|
+
* The intenral clock for managing time data.
|
|
123
|
+
*
|
|
124
|
+
* @private
|
|
125
|
+
* @type {Clock}
|
|
126
|
+
*/
|
|
50
127
|
this.clock = new Clock();
|
|
51
128
|
|
|
52
129
|
}
|
|
53
130
|
|
|
131
|
+
/**
|
|
132
|
+
* Swaps the internal read/write buffers.
|
|
133
|
+
*/
|
|
54
134
|
swapBuffers() {
|
|
55
135
|
|
|
56
136
|
const tmp = this.readBuffer;
|
|
@@ -59,6 +139,11 @@ class EffectComposer {
|
|
|
59
139
|
|
|
60
140
|
}
|
|
61
141
|
|
|
142
|
+
/**
|
|
143
|
+
* Adds the given pass to the pass chain.
|
|
144
|
+
*
|
|
145
|
+
* @param {Pass} pass - The pass to add.
|
|
146
|
+
*/
|
|
62
147
|
addPass( pass ) {
|
|
63
148
|
|
|
64
149
|
this.passes.push( pass );
|
|
@@ -66,6 +151,12 @@ class EffectComposer {
|
|
|
66
151
|
|
|
67
152
|
}
|
|
68
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Inserts the given pass at a given index.
|
|
156
|
+
*
|
|
157
|
+
* @param {Pass} pass - The pass to insert.
|
|
158
|
+
* @param {number} index - The index into the pass chain.
|
|
159
|
+
*/
|
|
69
160
|
insertPass( pass, index ) {
|
|
70
161
|
|
|
71
162
|
this.passes.splice( index, 0, pass );
|
|
@@ -73,6 +164,11 @@ class EffectComposer {
|
|
|
73
164
|
|
|
74
165
|
}
|
|
75
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Removes the given pass from the pass chain.
|
|
169
|
+
*
|
|
170
|
+
* @param {Pass} pass - The pass to remove.
|
|
171
|
+
*/
|
|
76
172
|
removePass( pass ) {
|
|
77
173
|
|
|
78
174
|
const index = this.passes.indexOf( pass );
|
|
@@ -85,6 +181,12 @@ class EffectComposer {
|
|
|
85
181
|
|
|
86
182
|
}
|
|
87
183
|
|
|
184
|
+
/**
|
|
185
|
+
* Returns `true` if the pass for the given index is the last enabled pass in the pass chain.
|
|
186
|
+
*
|
|
187
|
+
* @param {number} passIndex - The pass index.
|
|
188
|
+
* @return {boolean} Whether the the pass for the given index is the last pass in the pass chain.
|
|
189
|
+
*/
|
|
88
190
|
isLastEnabledPass( passIndex ) {
|
|
89
191
|
|
|
90
192
|
for ( let i = passIndex + 1; i < this.passes.length; i ++ ) {
|
|
@@ -101,6 +203,12 @@ class EffectComposer {
|
|
|
101
203
|
|
|
102
204
|
}
|
|
103
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Executes all enabled post-processing passes in order to produce the final frame.
|
|
208
|
+
*
|
|
209
|
+
* @param {number} deltaTime - The delta time in seconds. If not given, the composer computes
|
|
210
|
+
* its own time delta value.
|
|
211
|
+
*/
|
|
104
212
|
render( deltaTime ) {
|
|
105
213
|
|
|
106
214
|
// deltaTime value is in seconds
|
|
@@ -165,6 +273,12 @@ class EffectComposer {
|
|
|
165
273
|
|
|
166
274
|
}
|
|
167
275
|
|
|
276
|
+
/**
|
|
277
|
+
* Resets the internal state of the EffectComposer.
|
|
278
|
+
*
|
|
279
|
+
* @param {WebGLRenderTarget} [renderTarget] - This render target has the same purpose like
|
|
280
|
+
* the one from the constructor. If set, it is used to setup the read and write buffers.
|
|
281
|
+
*/
|
|
168
282
|
reset( renderTarget ) {
|
|
169
283
|
|
|
170
284
|
if ( renderTarget === undefined ) {
|
|
@@ -189,6 +303,13 @@ class EffectComposer {
|
|
|
189
303
|
|
|
190
304
|
}
|
|
191
305
|
|
|
306
|
+
/**
|
|
307
|
+
* Resizes the internal read and write buffers as well as all passes. Similar to {@link WebGLRenderer#setSize},
|
|
308
|
+
* this method honors the current pixel ration.
|
|
309
|
+
*
|
|
310
|
+
* @param {number} width - The width in logical pixels.
|
|
311
|
+
* @param {number} height - The height in logical pixels.
|
|
312
|
+
*/
|
|
192
313
|
setSize( width, height ) {
|
|
193
314
|
|
|
194
315
|
this._width = width;
|
|
@@ -208,6 +329,12 @@ class EffectComposer {
|
|
|
208
329
|
|
|
209
330
|
}
|
|
210
331
|
|
|
332
|
+
/**
|
|
333
|
+
* Sets device pixel ratio. This is usually used for HiDPI device to prevent blurring output.
|
|
334
|
+
* Setting the pixel ratio will automatically resize the composer.
|
|
335
|
+
*
|
|
336
|
+
* @param {number} pixelRatio - The pixel ratio to set.
|
|
337
|
+
*/
|
|
211
338
|
setPixelRatio( pixelRatio ) {
|
|
212
339
|
|
|
213
340
|
this._pixelRatio = pixelRatio;
|
|
@@ -216,6 +343,10 @@ class EffectComposer {
|
|
|
216
343
|
|
|
217
344
|
}
|
|
218
345
|
|
|
346
|
+
/**
|
|
347
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
348
|
+
* method whenever the composer is no longer used in your app.
|
|
349
|
+
*/
|
|
219
350
|
dispose() {
|
|
220
351
|
|
|
221
352
|
this.renderTarget1.dispose();
|
|
@@ -5,16 +5,47 @@ import {
|
|
|
5
5
|
import { Pass, FullScreenQuad } from './Pass.js';
|
|
6
6
|
import { FilmShader } from '../shaders/FilmShader.js';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* This pass can be used to create a film grain effect.
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* const filmPass = new FilmPass();
|
|
13
|
+
* composer.addPass( filmPass );
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @augments Pass
|
|
17
|
+
*/
|
|
8
18
|
class FilmPass extends Pass {
|
|
9
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new film pass.
|
|
22
|
+
*
|
|
23
|
+
* @param {number} [intensity=0.5] - The grain intensity in the range `[0,1]` (0 = no effect, 1 = full effect).
|
|
24
|
+
* @param {boolean} [grayscale=false] - Whether to apply a grayscale effect or not.
|
|
25
|
+
*/
|
|
10
26
|
constructor( intensity = 0.5, grayscale = false ) {
|
|
11
27
|
|
|
12
28
|
super();
|
|
13
29
|
|
|
14
30
|
const shader = FilmShader;
|
|
15
31
|
|
|
32
|
+
/**
|
|
33
|
+
* The pass uniforms. Use this object if you want to update the
|
|
34
|
+
* `intensity` or `grayscale` values at runtime.
|
|
35
|
+
* ```js
|
|
36
|
+
* pass.uniforms.intensity.value = 1;
|
|
37
|
+
* pass.uniforms.grayscale.value = true;
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @type {Object}
|
|
41
|
+
*/
|
|
16
42
|
this.uniforms = UniformsUtils.clone( shader.uniforms );
|
|
17
43
|
|
|
44
|
+
/**
|
|
45
|
+
* The pass material.
|
|
46
|
+
*
|
|
47
|
+
* @type {ShaderMaterial}
|
|
48
|
+
*/
|
|
18
49
|
this.material = new ShaderMaterial( {
|
|
19
50
|
|
|
20
51
|
name: shader.name,
|
|
@@ -24,13 +55,26 @@ class FilmPass extends Pass {
|
|
|
24
55
|
|
|
25
56
|
} );
|
|
26
57
|
|
|
27
|
-
this.uniforms.intensity.value = intensity;
|
|
58
|
+
this.uniforms.intensity.value = intensity;
|
|
28
59
|
this.uniforms.grayscale.value = grayscale;
|
|
29
60
|
|
|
30
|
-
|
|
61
|
+
// internals
|
|
62
|
+
|
|
63
|
+
this._fsQuad = new FullScreenQuad( this.material );
|
|
31
64
|
|
|
32
65
|
}
|
|
33
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Performs the film pass.
|
|
69
|
+
*
|
|
70
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
71
|
+
* @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering
|
|
72
|
+
* destination for the pass.
|
|
73
|
+
* @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the
|
|
74
|
+
* previous pass from this buffer.
|
|
75
|
+
* @param {number} deltaTime - The delta time in seconds.
|
|
76
|
+
* @param {boolean} maskActive - Whether masking is active or not.
|
|
77
|
+
*/
|
|
34
78
|
render( renderer, writeBuffer, readBuffer, deltaTime /*, maskActive */ ) {
|
|
35
79
|
|
|
36
80
|
this.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
|
|
@@ -39,23 +83,27 @@ class FilmPass extends Pass {
|
|
|
39
83
|
if ( this.renderToScreen ) {
|
|
40
84
|
|
|
41
85
|
renderer.setRenderTarget( null );
|
|
42
|
-
this.
|
|
86
|
+
this._fsQuad.render( renderer );
|
|
43
87
|
|
|
44
88
|
} else {
|
|
45
89
|
|
|
46
90
|
renderer.setRenderTarget( writeBuffer );
|
|
47
91
|
if ( this.clear ) renderer.clear();
|
|
48
|
-
this.
|
|
92
|
+
this._fsQuad.render( renderer );
|
|
49
93
|
|
|
50
94
|
}
|
|
51
95
|
|
|
52
96
|
}
|
|
53
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
100
|
+
* method whenever the pass is no longer used in your app.
|
|
101
|
+
*/
|
|
54
102
|
dispose() {
|
|
55
103
|
|
|
56
104
|
this.material.dispose();
|
|
57
105
|
|
|
58
|
-
this.
|
|
106
|
+
this._fsQuad.dispose();
|
|
59
107
|
|
|
60
108
|
}
|
|
61
109
|
|