@plastic-software/three 0.174.0 → 0.175.1
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 +10744 -1476
- package/build/three.core.js +9633 -1096
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +918 -189
- 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 +1432 -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 +58 -1
- 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/ShaderChunk/alphamap_fragment.glsl.js +10 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +6 -5
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLProgram.js +25 -5
- package/src/renderers/webgl/WebGLPrograms.js +21 -7
- 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
|
@@ -1,21 +1,69 @@
|
|
|
1
1
|
import { Texture } from './Texture.js';
|
|
2
2
|
import { CubeReflectionMapping } from '../constants.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Creates a cube texture made up of six images.
|
|
6
|
+
*
|
|
7
|
+
* ```js
|
|
8
|
+
* const loader = new THREE.CubeTextureLoader();
|
|
9
|
+
* loader.setPath( 'textures/cube/pisa/' );
|
|
10
|
+
*
|
|
11
|
+
* const textureCube = loader.load( [
|
|
12
|
+
* 'px.png', 'nx.png', 'py.png', 'ny.png', 'pz.png', 'nz.png'
|
|
13
|
+
* ] );
|
|
14
|
+
*
|
|
15
|
+
* const material = new THREE.MeshBasicMaterial( { color: 0xffffff, envMap: textureCube } );
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @augments Texture
|
|
19
|
+
*/
|
|
4
20
|
class CubeTexture extends Texture {
|
|
5
21
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new cube texture.
|
|
24
|
+
*
|
|
25
|
+
* @param {Array<Image>} [images=[]] - An array holding a image for each side of a cube.
|
|
26
|
+
* @param {number} [mapping=CubeReflectionMapping] - The texture mapping.
|
|
27
|
+
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
28
|
+
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
29
|
+
* @param {number} [magFilter=LinearFilter] - The mag filter value.
|
|
30
|
+
* @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
|
|
31
|
+
* @param {number} [format=RGBAFormat] - The texture format.
|
|
32
|
+
* @param {number} [type=UnsignedByteType] - The texture type.
|
|
33
|
+
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
34
|
+
* @param {string} [colorSpace=NoColorSpace] - The color space value.
|
|
35
|
+
*/
|
|
36
|
+
constructor( images = [], mapping = CubeReflectionMapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace ) {
|
|
10
37
|
|
|
11
38
|
super( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
|
|
12
39
|
|
|
40
|
+
/**
|
|
41
|
+
* This flag can be used for type testing.
|
|
42
|
+
*
|
|
43
|
+
* @type {boolean}
|
|
44
|
+
* @readonly
|
|
45
|
+
* @default true
|
|
46
|
+
*/
|
|
13
47
|
this.isCubeTexture = true;
|
|
14
48
|
|
|
49
|
+
/**
|
|
50
|
+
* If set to `true`, the texture is flipped along the vertical axis when
|
|
51
|
+
* uploaded to the GPU.
|
|
52
|
+
*
|
|
53
|
+
* Overwritten and set to `false` by default.
|
|
54
|
+
*
|
|
55
|
+
* @type {boolean}
|
|
56
|
+
* @default false
|
|
57
|
+
*/
|
|
15
58
|
this.flipY = false;
|
|
16
59
|
|
|
17
60
|
}
|
|
18
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Alias for {@link CubeTexture#image}.
|
|
64
|
+
*
|
|
65
|
+
* @type {Array<Image>}
|
|
66
|
+
*/
|
|
19
67
|
get images() {
|
|
20
68
|
|
|
21
69
|
return this.image;
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { Texture } from './Texture.js';
|
|
2
2
|
import { ClampToEdgeWrapping, NearestFilter } from '../constants.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Creates a three-dimensional texture from raw data, with parameters to
|
|
6
|
+
* divide it into width, height, and depth.
|
|
7
|
+
*
|
|
8
|
+
* @augments Texture
|
|
9
|
+
*/
|
|
4
10
|
class Data3DTexture extends Texture {
|
|
5
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new data array texture.
|
|
14
|
+
*
|
|
15
|
+
* @param {?TypedArray} [data=null] - The buffer data.
|
|
16
|
+
* @param {number} [width=1] - The width of the texture.
|
|
17
|
+
* @param {number} [height=1] - The height of the texture.
|
|
18
|
+
* @param {number} [depth=1] - The depth of the texture.
|
|
19
|
+
*/
|
|
6
20
|
constructor( data = null, width = 1, height = 1, depth = 1 ) {
|
|
7
21
|
|
|
8
22
|
// We're going to add .setXXX() methods for setting properties later.
|
|
@@ -15,17 +29,80 @@ class Data3DTexture extends Texture {
|
|
|
15
29
|
|
|
16
30
|
super( null );
|
|
17
31
|
|
|
32
|
+
/**
|
|
33
|
+
* This flag can be used for type testing.
|
|
34
|
+
*
|
|
35
|
+
* @type {boolean}
|
|
36
|
+
* @readonly
|
|
37
|
+
* @default true
|
|
38
|
+
*/
|
|
18
39
|
this.isData3DTexture = true;
|
|
19
40
|
|
|
41
|
+
/**
|
|
42
|
+
* The image definition of a data texture.
|
|
43
|
+
*
|
|
44
|
+
* @type {{data:TypedArray,width:number,height:number,depth:number}}
|
|
45
|
+
*/
|
|
20
46
|
this.image = { data, width, height, depth };
|
|
21
47
|
|
|
48
|
+
/**
|
|
49
|
+
* How the texture is sampled when a texel covers more than one pixel.
|
|
50
|
+
*
|
|
51
|
+
* Overwritten and set to `NearestFilter` by default.
|
|
52
|
+
*
|
|
53
|
+
* @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
|
|
54
|
+
* @default NearestFilter
|
|
55
|
+
*/
|
|
22
56
|
this.magFilter = NearestFilter;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* How the texture is sampled when a texel covers less than one pixel.
|
|
60
|
+
*
|
|
61
|
+
* Overwritten and set to `NearestFilter` by default.
|
|
62
|
+
*
|
|
63
|
+
* @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
|
|
64
|
+
* @default NearestFilter
|
|
65
|
+
*/
|
|
23
66
|
this.minFilter = NearestFilter;
|
|
24
67
|
|
|
68
|
+
/**
|
|
69
|
+
* This defines how the texture is wrapped in the depth and corresponds to
|
|
70
|
+
* *W* in UVW mapping.
|
|
71
|
+
*
|
|
72
|
+
* @type {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)}
|
|
73
|
+
* @default ClampToEdgeWrapping
|
|
74
|
+
*/
|
|
25
75
|
this.wrapR = ClampToEdgeWrapping;
|
|
26
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Whether to generate mipmaps (if possible) for a texture.
|
|
79
|
+
*
|
|
80
|
+
* Overwritten and set to `false` by default.
|
|
81
|
+
*
|
|
82
|
+
* @type {boolean}
|
|
83
|
+
* @default false
|
|
84
|
+
*/
|
|
27
85
|
this.generateMipmaps = false;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* If set to `true`, the texture is flipped along the vertical axis when
|
|
89
|
+
* uploaded to the GPU.
|
|
90
|
+
*
|
|
91
|
+
* Overwritten and set to `false` by default.
|
|
92
|
+
*
|
|
93
|
+
* @type {boolean}
|
|
94
|
+
* @default false
|
|
95
|
+
*/
|
|
28
96
|
this.flipY = false;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Specifies the alignment requirements for the start of each pixel row in memory.
|
|
100
|
+
*
|
|
101
|
+
* Overwritten and set to `1` by default.
|
|
102
|
+
*
|
|
103
|
+
* @type {boolean}
|
|
104
|
+
* @default 1
|
|
105
|
+
*/
|
|
29
106
|
this.unpackAlignment = 1;
|
|
30
107
|
|
|
31
108
|
}
|
|
@@ -1,35 +1,128 @@
|
|
|
1
1
|
import { Texture } from './Texture.js';
|
|
2
2
|
import { ClampToEdgeWrapping, NearestFilter } from '../constants.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Creates an array of textures directly from raw buffer data.
|
|
6
|
+
*
|
|
7
|
+
* @augments Texture
|
|
8
|
+
*/
|
|
4
9
|
class DataArrayTexture extends Texture {
|
|
5
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Constructs a new data array texture.
|
|
13
|
+
*
|
|
14
|
+
* @param {?TypedArray} [data=null] - The buffer data.
|
|
15
|
+
* @param {number} [width=1] - The width of the texture.
|
|
16
|
+
* @param {number} [height=1] - The height of the texture.
|
|
17
|
+
* @param {number} [depth=1] - The depth of the texture.
|
|
18
|
+
*/
|
|
6
19
|
constructor( data = null, width = 1, height = 1, depth = 1 ) {
|
|
7
20
|
|
|
8
21
|
super( null );
|
|
9
22
|
|
|
23
|
+
/**
|
|
24
|
+
* This flag can be used for type testing.
|
|
25
|
+
*
|
|
26
|
+
* @type {boolean}
|
|
27
|
+
* @readonly
|
|
28
|
+
* @default true
|
|
29
|
+
*/
|
|
10
30
|
this.isDataArrayTexture = true;
|
|
11
31
|
|
|
32
|
+
/**
|
|
33
|
+
* The image definition of a data texture.
|
|
34
|
+
*
|
|
35
|
+
* @type {{data:TypedArray,width:number,height:number,depth:number}}
|
|
36
|
+
*/
|
|
12
37
|
this.image = { data, width, height, depth };
|
|
13
38
|
|
|
39
|
+
/**
|
|
40
|
+
* How the texture is sampled when a texel covers more than one pixel.
|
|
41
|
+
*
|
|
42
|
+
* Overwritten and set to `NearestFilter` by default.
|
|
43
|
+
*
|
|
44
|
+
* @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
|
|
45
|
+
* @default NearestFilter
|
|
46
|
+
*/
|
|
14
47
|
this.magFilter = NearestFilter;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* How the texture is sampled when a texel covers less than one pixel.
|
|
51
|
+
*
|
|
52
|
+
* Overwritten and set to `NearestFilter` by default.
|
|
53
|
+
*
|
|
54
|
+
* @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
|
|
55
|
+
* @default NearestFilter
|
|
56
|
+
*/
|
|
15
57
|
this.minFilter = NearestFilter;
|
|
16
58
|
|
|
59
|
+
/**
|
|
60
|
+
* This defines how the texture is wrapped in the depth and corresponds to
|
|
61
|
+
* *W* in UVW mapping.
|
|
62
|
+
*
|
|
63
|
+
* @type {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)}
|
|
64
|
+
* @default ClampToEdgeWrapping
|
|
65
|
+
*/
|
|
17
66
|
this.wrapR = ClampToEdgeWrapping;
|
|
18
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Whether to generate mipmaps (if possible) for a texture.
|
|
70
|
+
*
|
|
71
|
+
* Overwritten and set to `false` by default.
|
|
72
|
+
*
|
|
73
|
+
* @type {boolean}
|
|
74
|
+
* @default false
|
|
75
|
+
*/
|
|
19
76
|
this.generateMipmaps = false;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* If set to `true`, the texture is flipped along the vertical axis when
|
|
80
|
+
* uploaded to the GPU.
|
|
81
|
+
*
|
|
82
|
+
* Overwritten and set to `false` by default.
|
|
83
|
+
*
|
|
84
|
+
* @type {boolean}
|
|
85
|
+
* @default false
|
|
86
|
+
*/
|
|
20
87
|
this.flipY = false;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Specifies the alignment requirements for the start of each pixel row in memory.
|
|
91
|
+
*
|
|
92
|
+
* Overwritten and set to `1` by default.
|
|
93
|
+
*
|
|
94
|
+
* @type {boolean}
|
|
95
|
+
* @default 1
|
|
96
|
+
*/
|
|
21
97
|
this.unpackAlignment = 1;
|
|
22
98
|
|
|
99
|
+
/**
|
|
100
|
+
* A set of all layers which need to be updated in the texture.
|
|
101
|
+
*
|
|
102
|
+
* @type {Set<number>}
|
|
103
|
+
*/
|
|
23
104
|
this.layerUpdates = new Set();
|
|
24
105
|
|
|
25
106
|
}
|
|
26
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Describes that a specific layer of the texture needs to be updated.
|
|
110
|
+
* Normally when {@link Texture#needsUpdate} is set to `true`, the
|
|
111
|
+
* entire data texture array is sent to the GPU. Marking specific
|
|
112
|
+
* layers will only transmit subsets of all mipmaps associated with a
|
|
113
|
+
* specific depth in the array which is often much more performant.
|
|
114
|
+
*
|
|
115
|
+
* @param {number} layerIndex - The layer index that should be updated.
|
|
116
|
+
*/
|
|
27
117
|
addLayerUpdate( layerIndex ) {
|
|
28
118
|
|
|
29
119
|
this.layerUpdates.add( layerIndex );
|
|
30
120
|
|
|
31
121
|
}
|
|
32
122
|
|
|
123
|
+
/**
|
|
124
|
+
* Resets the layer updates registry.
|
|
125
|
+
*/
|
|
33
126
|
clearLayerUpdates() {
|
|
34
127
|
|
|
35
128
|
this.layerUpdates.clear();
|
|
@@ -1,18 +1,83 @@
|
|
|
1
1
|
import { Texture } from './Texture.js';
|
|
2
2
|
import { NearestFilter } from '../constants.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Creates a texture directly from raw buffer data.
|
|
6
|
+
*
|
|
7
|
+
* The interpretation of the data depends on type and format: If the type is
|
|
8
|
+
* `UnsignedByteType`, a `Uint8Array` will be useful for addressing the
|
|
9
|
+
* texel data. If the format is `RGBAFormat`, data needs four values for
|
|
10
|
+
* one texel; Red, Green, Blue and Alpha (typically the opacity).
|
|
11
|
+
*
|
|
12
|
+
* @augments Texture
|
|
13
|
+
*/
|
|
4
14
|
class DataTexture extends Texture {
|
|
5
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Constructs a new data texture.
|
|
18
|
+
*
|
|
19
|
+
* @param {?TypedArray} [data=null] - The buffer data.
|
|
20
|
+
* @param {number} [width=1] - The width of the texture.
|
|
21
|
+
* @param {number} [height=1] - The height of the texture.
|
|
22
|
+
* @param {number} [format=RGBAFormat] - The texture format.
|
|
23
|
+
* @param {number} [type=UnsignedByteType] - The texture type.
|
|
24
|
+
* @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
|
|
25
|
+
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
26
|
+
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
27
|
+
* @param {number} [magFilter=NearestFilter] - The mag filter value.
|
|
28
|
+
* @param {number} [minFilter=NearestFilter] - The min filter value.
|
|
29
|
+
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
30
|
+
* @param {string} [colorSpace=NoColorSpace] - The color space.
|
|
31
|
+
*/
|
|
6
32
|
constructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace ) {
|
|
7
33
|
|
|
8
34
|
super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
|
|
9
35
|
|
|
36
|
+
/**
|
|
37
|
+
* This flag can be used for type testing.
|
|
38
|
+
*
|
|
39
|
+
* @type {boolean}
|
|
40
|
+
* @readonly
|
|
41
|
+
* @default true
|
|
42
|
+
*/
|
|
10
43
|
this.isDataTexture = true;
|
|
11
44
|
|
|
45
|
+
/**
|
|
46
|
+
* The image definition of a data texture.
|
|
47
|
+
*
|
|
48
|
+
* @type {{data:TypedArray,width:number,height:number}}
|
|
49
|
+
*/
|
|
12
50
|
this.image = { data: data, width: width, height: height };
|
|
13
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Whether to generate mipmaps (if possible) for a texture.
|
|
54
|
+
*
|
|
55
|
+
* Overwritten and set to `false` by default.
|
|
56
|
+
*
|
|
57
|
+
* @type {boolean}
|
|
58
|
+
* @default false
|
|
59
|
+
*/
|
|
14
60
|
this.generateMipmaps = false;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* If set to `true`, the texture is flipped along the vertical axis when
|
|
64
|
+
* uploaded to the GPU.
|
|
65
|
+
*
|
|
66
|
+
* Overwritten and set to `false` by default.
|
|
67
|
+
*
|
|
68
|
+
* @type {boolean}
|
|
69
|
+
* @default false
|
|
70
|
+
*/
|
|
15
71
|
this.flipY = false;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Specifies the alignment requirements for the start of each pixel row in memory.
|
|
75
|
+
*
|
|
76
|
+
* Overwritten and set to `1` by default.
|
|
77
|
+
*
|
|
78
|
+
* @type {boolean}
|
|
79
|
+
* @default 1
|
|
80
|
+
*/
|
|
16
81
|
this.unpackAlignment = 1;
|
|
17
82
|
|
|
18
83
|
}
|
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
import { Source } from './Source.js';
|
|
2
2
|
import { Texture } from './Texture.js';
|
|
3
|
-
import { NearestFilter, UnsignedIntType,
|
|
4
|
-
|
|
3
|
+
import { NearestFilter, UnsignedIntType, DepthFormat, DepthStencilFormat } from '../constants.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* This class can be used to automatically save the depth information of a
|
|
7
|
+
* rendering into a texture.
|
|
8
|
+
*
|
|
9
|
+
* @augments Texture
|
|
10
|
+
*/
|
|
5
11
|
class DepthTexture extends Texture {
|
|
6
12
|
|
|
7
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new depth texture.
|
|
15
|
+
*
|
|
16
|
+
* @param {number} width - The width of the texture.
|
|
17
|
+
* @param {number} height - The height of the texture.
|
|
18
|
+
* @param {number} [type=UnsignedIntType] - The texture type.
|
|
19
|
+
* @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
|
|
20
|
+
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
21
|
+
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
22
|
+
* @param {number} [magFilter=LinearFilter] - The mag filter value.
|
|
23
|
+
* @param {number} [minFilter=LinearFilter] - The min filter value.
|
|
24
|
+
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
25
|
+
* @param {number} [format=DepthFormat] - The texture format.
|
|
26
|
+
*/
|
|
27
|
+
constructor( width, height, type = UnsignedIntType, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat ) {
|
|
8
28
|
|
|
9
29
|
if ( format !== DepthFormat && format !== DepthStencilFormat ) {
|
|
10
30
|
|
|
@@ -12,21 +32,51 @@ class DepthTexture extends Texture {
|
|
|
12
32
|
|
|
13
33
|
}
|
|
14
34
|
|
|
15
|
-
if ( type === undefined && format === DepthFormat ) type = UnsignedIntType;
|
|
16
|
-
if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;
|
|
17
|
-
|
|
18
35
|
super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
|
|
19
36
|
|
|
37
|
+
/**
|
|
38
|
+
* This flag can be used for type testing.
|
|
39
|
+
*
|
|
40
|
+
* @type {boolean}
|
|
41
|
+
* @readonly
|
|
42
|
+
* @default true
|
|
43
|
+
*/
|
|
20
44
|
this.isDepthTexture = true;
|
|
21
45
|
|
|
46
|
+
/**
|
|
47
|
+
* The image property of a depth texture just defines its dimensions.
|
|
48
|
+
*
|
|
49
|
+
* @type {{width:number,height:number}}
|
|
50
|
+
*/
|
|
22
51
|
this.image = { width: width, height: height };
|
|
23
52
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
53
|
+
/**
|
|
54
|
+
* If set to `true`, the texture is flipped along the vertical axis when
|
|
55
|
+
* uploaded to the GPU.
|
|
56
|
+
*
|
|
57
|
+
* Overwritten and set to `false` by default.
|
|
58
|
+
*
|
|
59
|
+
* @type {boolean}
|
|
60
|
+
* @default false
|
|
61
|
+
*/
|
|
27
62
|
this.flipY = false;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Whether to generate mipmaps (if possible) for a texture.
|
|
66
|
+
*
|
|
67
|
+
* Overwritten and set to `false` by default.
|
|
68
|
+
*
|
|
69
|
+
* @type {boolean}
|
|
70
|
+
* @default false
|
|
71
|
+
*/
|
|
28
72
|
this.generateMipmaps = false;
|
|
29
73
|
|
|
74
|
+
/**
|
|
75
|
+
* The depth compare function.
|
|
76
|
+
*
|
|
77
|
+
* @type {?(NeverCompare|LessCompare|EqualCompare|LessEqualCompare|GreaterCompare|NotEqualCompare|GreaterEqualCompare|AlwaysCompare)}
|
|
78
|
+
* @default null
|
|
79
|
+
*/
|
|
30
80
|
this.compareFunction = null;
|
|
31
81
|
|
|
32
82
|
}
|
|
@@ -1,17 +1,79 @@
|
|
|
1
1
|
import { Texture } from './Texture.js';
|
|
2
2
|
import { NearestFilter } from '../constants.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* This class can only be used in combination with `copyFramebufferToTexture()` methods
|
|
6
|
+
* of renderers. It extracts the contents of the current bound framebuffer and provides it
|
|
7
|
+
* as a texture for further usage.
|
|
8
|
+
*
|
|
9
|
+
* ```js
|
|
10
|
+
* const pixelRatio = window.devicePixelRatio;
|
|
11
|
+
* const textureSize = 128 * pixelRatio;
|
|
12
|
+
*
|
|
13
|
+
* const frameTexture = new FramebufferTexture( textureSize, textureSize );
|
|
14
|
+
*
|
|
15
|
+
* // calculate start position for copying part of the frame data
|
|
16
|
+
* const vector = new Vector2();
|
|
17
|
+
* vector.x = ( window.innerWidth * pixelRatio / 2 ) - ( textureSize / 2 );
|
|
18
|
+
* vector.y = ( window.innerHeight * pixelRatio / 2 ) - ( textureSize / 2 );
|
|
19
|
+
*
|
|
20
|
+
* renderer.render( scene, camera );
|
|
21
|
+
*
|
|
22
|
+
* // copy part of the rendered frame into the framebuffer texture
|
|
23
|
+
* renderer.copyFramebufferToTexture( frameTexture, vector );
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @augments Texture
|
|
27
|
+
*/
|
|
4
28
|
class FramebufferTexture extends Texture {
|
|
5
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Constructs a new framebuffer texture.
|
|
32
|
+
*
|
|
33
|
+
* @param {number} width - The width of the texture.
|
|
34
|
+
* @param {number} height - The height of the texture.
|
|
35
|
+
*/
|
|
6
36
|
constructor( width, height ) {
|
|
7
37
|
|
|
8
38
|
super( { width, height } );
|
|
9
39
|
|
|
40
|
+
/**
|
|
41
|
+
* This flag can be used for type testing.
|
|
42
|
+
*
|
|
43
|
+
* @type {boolean}
|
|
44
|
+
* @readonly
|
|
45
|
+
* @default true
|
|
46
|
+
*/
|
|
10
47
|
this.isFramebufferTexture = true;
|
|
11
48
|
|
|
49
|
+
/**
|
|
50
|
+
* How the texture is sampled when a texel covers more than one pixel.
|
|
51
|
+
*
|
|
52
|
+
* Overwritten and set to `NearestFilter` by default to disable filtering.
|
|
53
|
+
*
|
|
54
|
+
* @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
|
|
55
|
+
* @default NearestFilter
|
|
56
|
+
*/
|
|
12
57
|
this.magFilter = NearestFilter;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* How the texture is sampled when a texel covers less than one pixel.
|
|
61
|
+
*
|
|
62
|
+
* Overwritten and set to `NearestFilter` by default to disable filtering.
|
|
63
|
+
*
|
|
64
|
+
* @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
|
|
65
|
+
* @default NearestFilter
|
|
66
|
+
*/
|
|
13
67
|
this.minFilter = NearestFilter;
|
|
14
68
|
|
|
69
|
+
/**
|
|
70
|
+
* Whether to generate mipmaps (if possible) for a texture.
|
|
71
|
+
*
|
|
72
|
+
* Overwritten and set to `false` by default.
|
|
73
|
+
*
|
|
74
|
+
* @type {boolean}
|
|
75
|
+
* @default false
|
|
76
|
+
*/
|
|
15
77
|
this.generateMipmaps = false;
|
|
16
78
|
|
|
17
79
|
this.needsUpdate = true;
|
package/src/textures/Source.js
CHANGED
|
@@ -3,29 +3,98 @@ import { generateUUID } from '../math/MathUtils.js';
|
|
|
3
3
|
|
|
4
4
|
let _sourceId = 0;
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Represents the data source of a texture.
|
|
8
|
+
*
|
|
9
|
+
* The main purpose of this class is to decouple the data definition from the texture
|
|
10
|
+
* definition so the same data can be used with multiple texture instances.
|
|
11
|
+
*/
|
|
6
12
|
class Source {
|
|
7
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new video texture.
|
|
16
|
+
*
|
|
17
|
+
* @param {any} [data=null] - The data definition of a texture.
|
|
18
|
+
*/
|
|
8
19
|
constructor( data = null ) {
|
|
9
20
|
|
|
21
|
+
/**
|
|
22
|
+
* This flag can be used for type testing.
|
|
23
|
+
*
|
|
24
|
+
* @type {boolean}
|
|
25
|
+
* @readonly
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
10
28
|
this.isSource = true;
|
|
11
29
|
|
|
30
|
+
/**
|
|
31
|
+
* The ID of the source.
|
|
32
|
+
*
|
|
33
|
+
* @name Source#id
|
|
34
|
+
* @type {number}
|
|
35
|
+
* @readonly
|
|
36
|
+
*/
|
|
12
37
|
Object.defineProperty( this, 'id', { value: _sourceId ++ } );
|
|
13
38
|
|
|
39
|
+
/**
|
|
40
|
+
* The UUID of the source.
|
|
41
|
+
*
|
|
42
|
+
* @type {string}
|
|
43
|
+
* @readonly
|
|
44
|
+
*/
|
|
14
45
|
this.uuid = generateUUID();
|
|
15
46
|
|
|
47
|
+
/**
|
|
48
|
+
* The data definition of a texture.
|
|
49
|
+
*
|
|
50
|
+
* @type {any}
|
|
51
|
+
*/
|
|
16
52
|
this.data = data;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* This property is only relevant when {@link Source#needsUpdate} is set to `true` and
|
|
56
|
+
* provides more control on how texture data should be processed. When `dataReady` is set
|
|
57
|
+
* to `false`, the engine performs the memory allocation (if necessary) but does not transfer
|
|
58
|
+
* the data into the GPU memory.
|
|
59
|
+
*
|
|
60
|
+
* @type {boolean}
|
|
61
|
+
* @default true
|
|
62
|
+
*/
|
|
17
63
|
this.dataReady = true;
|
|
18
64
|
|
|
65
|
+
/**
|
|
66
|
+
* This starts at `0` and counts how many times {@link Source#needsUpdate} is set to `true`.
|
|
67
|
+
*
|
|
68
|
+
* @type {number}
|
|
69
|
+
* @readonly
|
|
70
|
+
* @default 0
|
|
71
|
+
*/
|
|
19
72
|
this.version = 0;
|
|
20
73
|
|
|
21
74
|
}
|
|
22
75
|
|
|
76
|
+
/**
|
|
77
|
+
* When the property is set to `true`, the engine allocates the memory
|
|
78
|
+
* for the texture (if necessary) and triggers the actual texture upload
|
|
79
|
+
* to the GPU next time the source is used.
|
|
80
|
+
*
|
|
81
|
+
* @type {boolean}
|
|
82
|
+
* @default false
|
|
83
|
+
* @param {boolean} value
|
|
84
|
+
*/
|
|
23
85
|
set needsUpdate( value ) {
|
|
24
86
|
|
|
25
87
|
if ( value === true ) this.version ++;
|
|
26
88
|
|
|
27
89
|
}
|
|
28
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Serializes the source into JSON.
|
|
93
|
+
*
|
|
94
|
+
* @param {?(Object|string)} meta - An optional value holding meta information about the serialization.
|
|
95
|
+
* @return {Object} A JSON object representing the serialized source.
|
|
96
|
+
* @see {@link ObjectLoader#parse}
|
|
97
|
+
*/
|
|
29
98
|
toJSON( meta ) {
|
|
30
99
|
|
|
31
100
|
const isRootObject = ( meta === undefined || typeof meta === 'string' );
|
package/src/textures/Texture.js
CHANGED
|
@@ -35,11 +35,11 @@ class Texture extends EventDispatcher {
|
|
|
35
35
|
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
36
36
|
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
37
37
|
* @param {number} [magFilter=LinearFilter] - The mag filter value.
|
|
38
|
-
* @param {number} [minFilter=
|
|
39
|
-
* @param {number} [format=RGBAFormat] - The
|
|
40
|
-
* @param {number} [type=UnsignedByteType] - The
|
|
41
|
-
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The
|
|
42
|
-
* @param {string} [colorSpace=NoColorSpace] - The
|
|
38
|
+
* @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
|
|
39
|
+
* @param {number} [format=RGBAFormat] - The texture format.
|
|
40
|
+
* @param {number} [type=UnsignedByteType] - The texture type.
|
|
41
|
+
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
42
|
+
* @param {string} [colorSpace=NoColorSpace] - The color space.
|
|
43
43
|
*/
|
|
44
44
|
constructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {
|
|
45
45
|
|