@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
|
@@ -10,9 +10,19 @@ import {
|
|
|
10
10
|
|
|
11
11
|
import { mergeGroups, deepCloneAttribute } from './BufferGeometryUtils.js';
|
|
12
12
|
|
|
13
|
+
/** @module SceneUtils */
|
|
14
|
+
|
|
13
15
|
const _color = /*@__PURE__*/new Color();
|
|
14
16
|
const _matrix = /*@__PURE__*/new Matrix4();
|
|
15
17
|
|
|
18
|
+
/**
|
|
19
|
+
* This function creates a mesh for each instance of the given instanced mesh and
|
|
20
|
+
* adds it to a group. Each mesh will honor the current 3D transformation of its
|
|
21
|
+
* corresponding instance.
|
|
22
|
+
*
|
|
23
|
+
* @param {InstancedMesh} instancedMesh - The instanced mesh.
|
|
24
|
+
* @return {Group} A group of meshes.
|
|
25
|
+
*/
|
|
16
26
|
function createMeshesFromInstancedMesh( instancedMesh ) {
|
|
17
27
|
|
|
18
28
|
const group = new Group();
|
|
@@ -39,6 +49,13 @@ function createMeshesFromInstancedMesh( instancedMesh ) {
|
|
|
39
49
|
|
|
40
50
|
}
|
|
41
51
|
|
|
52
|
+
/**
|
|
53
|
+
* This function creates a mesh for each geometry-group of the given multi-material mesh and
|
|
54
|
+
* adds it to a group.
|
|
55
|
+
*
|
|
56
|
+
* @param {Mesh} mesh - The multi-material mesh.
|
|
57
|
+
* @return {Group} A group of meshes.
|
|
58
|
+
*/
|
|
42
59
|
function createMeshesFromMultiMaterialMesh( mesh ) {
|
|
43
60
|
|
|
44
61
|
if ( Array.isArray( mesh.material ) === false ) {
|
|
@@ -110,6 +127,16 @@ function createMeshesFromMultiMaterialMesh( mesh ) {
|
|
|
110
127
|
|
|
111
128
|
}
|
|
112
129
|
|
|
130
|
+
/**
|
|
131
|
+
* This function represents an alternative way to create 3D objects with multiple materials.
|
|
132
|
+
* Normally, {@link BufferGeometry#groups} are used which might introduce issues e.g. when
|
|
133
|
+
* exporting the object to a 3D format. This function accepts a geometry and an array of
|
|
134
|
+
* materials and creates for each material a mesh that is added to a group.
|
|
135
|
+
*
|
|
136
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
137
|
+
* @param {Array<Material>} materials - An array of materials.
|
|
138
|
+
* @return {Group} A group representing a multi-material object.
|
|
139
|
+
*/
|
|
113
140
|
function createMultiMaterialObject( geometry, materials ) {
|
|
114
141
|
|
|
115
142
|
const group = new Group();
|
|
@@ -124,6 +151,18 @@ function createMultiMaterialObject( geometry, materials ) {
|
|
|
124
151
|
|
|
125
152
|
}
|
|
126
153
|
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Executes a reducer function for each vertex of the given 3D object.
|
|
157
|
+
* `reduceVertices()` returns a single value: the function's accumulated result.
|
|
158
|
+
*
|
|
159
|
+
* @param {Object3D} object - The 3D object that should be processed. It must have a
|
|
160
|
+
* geometry with a `position` attribute.
|
|
161
|
+
* @param {function(number,Vector3):number} func - The reducer function. First argument
|
|
162
|
+
* is the current value, second argument the current vertex.
|
|
163
|
+
* @param {any} initialValue - The initial value.
|
|
164
|
+
* @return {any} The result.
|
|
165
|
+
*/
|
|
127
166
|
function reduceVertices( object, func, initialValue ) {
|
|
128
167
|
|
|
129
168
|
let value = initialValue;
|
|
@@ -174,8 +213,10 @@ function reduceVertices( object, func, initialValue ) {
|
|
|
174
213
|
}
|
|
175
214
|
|
|
176
215
|
/**
|
|
177
|
-
*
|
|
178
|
-
*
|
|
216
|
+
* Sorts the instances of the given instanced mesh.
|
|
217
|
+
*
|
|
218
|
+
* @param {InstancedMesh} mesh - The instanced mesh to sort.
|
|
219
|
+
* @param {function(number, number):number} compareFn - A custom compare function for the sort.
|
|
179
220
|
*/
|
|
180
221
|
function sortInstancedMesh( mesh, compareFn ) {
|
|
181
222
|
|
|
@@ -246,7 +287,9 @@ function sortInstancedMesh( mesh, compareFn ) {
|
|
|
246
287
|
}
|
|
247
288
|
|
|
248
289
|
/**
|
|
249
|
-
*
|
|
290
|
+
* Generator based alternative to {@link Object3D#traverse}.
|
|
291
|
+
*
|
|
292
|
+
* @param {Object3D} object - Object to traverse.
|
|
250
293
|
* @yields {Object3D} Objects that passed the filter condition.
|
|
251
294
|
*/
|
|
252
295
|
function* traverseGenerator( object ) {
|
|
@@ -264,6 +307,8 @@ function* traverseGenerator( object ) {
|
|
|
264
307
|
}
|
|
265
308
|
|
|
266
309
|
/**
|
|
310
|
+
* Generator based alternative to {@link Object3D#traverseVisible}.
|
|
311
|
+
*
|
|
267
312
|
* @param {Object3D} object Object to traverse.
|
|
268
313
|
* @yields {Object3D} Objects that passed the filter condition.
|
|
269
314
|
*/
|
|
@@ -284,6 +329,8 @@ function* traverseVisibleGenerator( object ) {
|
|
|
284
329
|
}
|
|
285
330
|
|
|
286
331
|
/**
|
|
332
|
+
* Generator based alternative to {@link Object3D#traverseAncestors}.
|
|
333
|
+
*
|
|
287
334
|
* @param {Object3D} object Object to traverse.
|
|
288
335
|
* @yields {Object3D} Objects that passed the filter condition.
|
|
289
336
|
*/
|
|
@@ -16,30 +16,25 @@ import { UnpackDepthRGBAShader } from '../shaders/UnpackDepthRGBAShader.js';
|
|
|
16
16
|
* It works for shadow casting lights: DirectionalLight and SpotLight.
|
|
17
17
|
* It renders out the shadow map and displays it on a HUD.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},
|
|
20
|
+
* import the class from `ShadowMapViewerGPU.js`.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* shadowMapViewer.position.set( 10, 10 ); //x, y in pixel default: 0, 0 (top left corner)
|
|
31
|
-
*
|
|
32
|
-
* 4) Render the shadow map viewer in your render loop:
|
|
33
|
-
* shadowMapViewer.render( renderer );
|
|
34
|
-
*
|
|
35
|
-
* 5) Optionally: Update the shadow map viewer on window resize:
|
|
36
|
-
* shadowMapViewer.updateForWindowResize();
|
|
37
|
-
*
|
|
38
|
-
* 6) If you set the position or size members directly, you need to call shadowMapViewer.update();
|
|
22
|
+
* ```js
|
|
23
|
+
* const lightShadowMapViewer = new ShadowMapViewer( light );
|
|
24
|
+
* lightShadowMapViewer.position.x = 10;
|
|
25
|
+
* lightShadowMapViewer.position.y = SCREEN_HEIGHT - ( SHADOW_MAP_HEIGHT / 4 ) - 10;
|
|
26
|
+
* lightShadowMapViewer.size.width = SHADOW_MAP_WIDTH / 4;
|
|
27
|
+
* lightShadowMapViewer.size.height = SHADOW_MAP_HEIGHT / 4;
|
|
28
|
+
* lightShadowMapViewer.update();
|
|
29
|
+
* ```
|
|
39
30
|
*/
|
|
40
|
-
|
|
41
31
|
class ShadowMapViewer {
|
|
42
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Constructs a new shadow map viewer.
|
|
35
|
+
*
|
|
36
|
+
* @param {Light} light - The shadow casting light.
|
|
37
|
+
*/
|
|
43
38
|
constructor( light ) {
|
|
44
39
|
|
|
45
40
|
//- Internals
|
|
@@ -110,11 +105,21 @@ class ShadowMapViewer {
|
|
|
110
105
|
|
|
111
106
|
}
|
|
112
107
|
|
|
113
|
-
|
|
114
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Whether to display the shadow map viewer or not.
|
|
110
|
+
*
|
|
111
|
+
* @type {boolean}
|
|
112
|
+
* @default true
|
|
113
|
+
*/
|
|
115
114
|
this.enabled = true;
|
|
116
115
|
|
|
117
|
-
|
|
116
|
+
/**
|
|
117
|
+
* The size of the viewer. When changing this property, make sure
|
|
118
|
+
* to call {@link ShadowMapViewer#update}.
|
|
119
|
+
*
|
|
120
|
+
* @type {{width:number,height:number}}
|
|
121
|
+
* @default true
|
|
122
|
+
*/
|
|
118
123
|
this.size = {
|
|
119
124
|
width: frame.width,
|
|
120
125
|
height: frame.height,
|
|
@@ -131,7 +136,13 @@ class ShadowMapViewer {
|
|
|
131
136
|
}
|
|
132
137
|
};
|
|
133
138
|
|
|
134
|
-
|
|
139
|
+
/**
|
|
140
|
+
* The position of the viewer. When changing this property, make sure
|
|
141
|
+
* to call {@link ShadowMapViewer#update}.
|
|
142
|
+
*
|
|
143
|
+
* @type {{x:number,y:number, set:function(number,number)}}
|
|
144
|
+
* @default true
|
|
145
|
+
*/
|
|
135
146
|
this.position = {
|
|
136
147
|
x: frame.x,
|
|
137
148
|
y: frame.y,
|
|
@@ -150,6 +161,11 @@ class ShadowMapViewer {
|
|
|
150
161
|
}
|
|
151
162
|
};
|
|
152
163
|
|
|
164
|
+
/**
|
|
165
|
+
* Renders the viewer. This method must be called in the app's animation loop.
|
|
166
|
+
*
|
|
167
|
+
* @param {WebGLRenderer} renderer - The renderer.
|
|
168
|
+
*/
|
|
153
169
|
this.render = function ( renderer ) {
|
|
154
170
|
|
|
155
171
|
if ( this.enabled ) {
|
|
@@ -171,6 +187,10 @@ class ShadowMapViewer {
|
|
|
171
187
|
|
|
172
188
|
};
|
|
173
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Resizes the viewer. This method should be called whenever the app's
|
|
192
|
+
* window is resized.
|
|
193
|
+
*/
|
|
174
194
|
this.updateForWindowResize = function () {
|
|
175
195
|
|
|
176
196
|
if ( this.enabled ) {
|
|
@@ -187,6 +207,9 @@ class ShadowMapViewer {
|
|
|
187
207
|
|
|
188
208
|
};
|
|
189
209
|
|
|
210
|
+
/**
|
|
211
|
+
* Updates the viewer.
|
|
212
|
+
*/
|
|
190
213
|
this.update = function () {
|
|
191
214
|
|
|
192
215
|
this.position.set( this.position.x, this.position.y );
|
|
@@ -16,30 +16,25 @@ import { texture } from 'three/tsl';
|
|
|
16
16
|
* It works for shadow casting lights: DirectionalLight and SpotLight.
|
|
17
17
|
* It renders out the shadow map and displays it on a HUD.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* This module can only be used with {@link WebGPURenderer}. When using {@link WebGLRenderer},
|
|
20
|
+
* import the class from `ShadowMapViewer.js`.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* shadowMapViewer.position.set( 10, 10 ); //x, y in pixel default: 0, 0 (top left corner)
|
|
31
|
-
*
|
|
32
|
-
* 4) Render the shadow map viewer in your render loop:
|
|
33
|
-
* shadowMapViewer.render( renderer );
|
|
34
|
-
*
|
|
35
|
-
* 5) Optionally: Update the shadow map viewer on window resize:
|
|
36
|
-
* shadowMapViewer.updateForWindowResize();
|
|
37
|
-
*
|
|
38
|
-
* 6) If you set the position or size members directly, you need to call shadowMapViewer.update();
|
|
22
|
+
* ```js
|
|
23
|
+
* const lightShadowMapViewer = new ShadowMapViewer( light );
|
|
24
|
+
* lightShadowMapViewer.position.x = 10;
|
|
25
|
+
* lightShadowMapViewer.position.y = SCREEN_HEIGHT - ( SHADOW_MAP_HEIGHT / 4 ) - 10;
|
|
26
|
+
* lightShadowMapViewer.size.width = SHADOW_MAP_WIDTH / 4;
|
|
27
|
+
* lightShadowMapViewer.size.height = SHADOW_MAP_HEIGHT / 4;
|
|
28
|
+
* lightShadowMapViewer.update();
|
|
29
|
+
* ```
|
|
39
30
|
*/
|
|
40
|
-
|
|
41
31
|
class ShadowMapViewer {
|
|
42
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Constructs a new shadow map viewer.
|
|
35
|
+
*
|
|
36
|
+
* @param {Light} light - The shadow casting light.
|
|
37
|
+
*/
|
|
43
38
|
constructor( light ) {
|
|
44
39
|
|
|
45
40
|
//- Internals
|
|
@@ -106,11 +101,21 @@ class ShadowMapViewer {
|
|
|
106
101
|
|
|
107
102
|
}
|
|
108
103
|
|
|
109
|
-
|
|
110
|
-
|
|
104
|
+
/**
|
|
105
|
+
* Whether to display the shadow map viewer or not.
|
|
106
|
+
*
|
|
107
|
+
* @type {boolean}
|
|
108
|
+
* @default true
|
|
109
|
+
*/
|
|
111
110
|
this.enabled = true;
|
|
112
111
|
|
|
113
|
-
|
|
112
|
+
/**
|
|
113
|
+
* The size of the viewer. When changing this property, make sure
|
|
114
|
+
* to call {@link ShadowMapViewer#update}.
|
|
115
|
+
*
|
|
116
|
+
* @type {{width:number,height:number}}
|
|
117
|
+
* @default true
|
|
118
|
+
*/
|
|
114
119
|
this.size = {
|
|
115
120
|
width: frame.width,
|
|
116
121
|
height: frame.height,
|
|
@@ -127,7 +132,13 @@ class ShadowMapViewer {
|
|
|
127
132
|
}
|
|
128
133
|
};
|
|
129
134
|
|
|
130
|
-
|
|
135
|
+
/**
|
|
136
|
+
* The position of the viewer. When changing this property, make sure
|
|
137
|
+
* to call {@link ShadowMapViewer#update}.
|
|
138
|
+
*
|
|
139
|
+
* @type {{width:number,height:number}}
|
|
140
|
+
* @default true
|
|
141
|
+
*/
|
|
131
142
|
this.position = {
|
|
132
143
|
x: frame.x,
|
|
133
144
|
y: frame.y,
|
|
@@ -146,6 +157,11 @@ class ShadowMapViewer {
|
|
|
146
157
|
}
|
|
147
158
|
};
|
|
148
159
|
|
|
160
|
+
/**
|
|
161
|
+
* Renders the viewer. This method must be called in the app's animation loop.
|
|
162
|
+
*
|
|
163
|
+
* @param {WebGPURenderer} renderer - The renderer.
|
|
164
|
+
*/
|
|
149
165
|
this.render = function ( renderer ) {
|
|
150
166
|
|
|
151
167
|
if ( this.enabled ) {
|
|
@@ -167,6 +183,10 @@ class ShadowMapViewer {
|
|
|
167
183
|
|
|
168
184
|
};
|
|
169
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Resizes the viewer. This method should be called whenever the app's
|
|
188
|
+
* window is resized.
|
|
189
|
+
*/
|
|
170
190
|
this.updateForWindowResize = function () {
|
|
171
191
|
|
|
172
192
|
if ( this.enabled ) {
|
|
@@ -183,6 +203,9 @@ class ShadowMapViewer {
|
|
|
183
203
|
|
|
184
204
|
};
|
|
185
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Updates the viewer.
|
|
208
|
+
*/
|
|
186
209
|
this.update = function () {
|
|
187
210
|
|
|
188
211
|
this.position.set( this.position.x, this.position.y );
|
|
@@ -9,6 +9,8 @@ import {
|
|
|
9
9
|
VectorKeyframeTrack
|
|
10
10
|
} from 'three';
|
|
11
11
|
|
|
12
|
+
/** @module SkeletonUtils */
|
|
13
|
+
|
|
12
14
|
function getBoneName( bone, options ) {
|
|
13
15
|
|
|
14
16
|
if ( options.getBoneName !== undefined ) {
|
|
@@ -21,6 +23,14 @@ function getBoneName( bone, options ) {
|
|
|
21
23
|
|
|
22
24
|
}
|
|
23
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Retargets the skeleton from the given source 3D object to the
|
|
28
|
+
* target 3D object.
|
|
29
|
+
*
|
|
30
|
+
* @param {Object3D} target - The target 3D object.
|
|
31
|
+
* @param {Object3D} source - The source 3D object.
|
|
32
|
+
* @param {module:SkeletonUtils~RetargetOptions} options - The options.
|
|
33
|
+
*/
|
|
24
34
|
function retarget( target, source, options = {} ) {
|
|
25
35
|
|
|
26
36
|
const quat = new Quaternion(),
|
|
@@ -196,6 +206,16 @@ function retarget( target, source, options = {} ) {
|
|
|
196
206
|
|
|
197
207
|
}
|
|
198
208
|
|
|
209
|
+
/**
|
|
210
|
+
* Retargets the animation clip of the source object to the
|
|
211
|
+
* target 3D object.
|
|
212
|
+
*
|
|
213
|
+
* @param {Object3D} target - The target 3D object.
|
|
214
|
+
* @param {Object3D} source - The source 3D object.
|
|
215
|
+
* @param {AnimationClip} clip - The animation clip.
|
|
216
|
+
* @param {module:SkeletonUtils~RetargetOptions} options - The options.
|
|
217
|
+
* @return {AnimationClip} The retargeted animation clip.
|
|
218
|
+
*/
|
|
199
219
|
function retargetClip( target, source, clip, options = {} ) {
|
|
200
220
|
|
|
201
221
|
options.useFirstFramePosition = options.useFirstFramePosition !== undefined ? options.useFirstFramePosition : false;
|
|
@@ -354,6 +374,14 @@ function retargetClip( target, source, clip, options = {} ) {
|
|
|
354
374
|
|
|
355
375
|
}
|
|
356
376
|
|
|
377
|
+
/**
|
|
378
|
+
* Clones the given 3D object and its descendants, ensuring that any `SkinnedMesh` instances are
|
|
379
|
+
* correctly associated with their bones. Bones are also cloned, and must be descendants of the
|
|
380
|
+
* object passed to this method. Other data, like geometries and materials, are reused by reference.
|
|
381
|
+
*
|
|
382
|
+
* @param {Object3D} source - The 3D object to clone.
|
|
383
|
+
* @return {Object3D} The cloned 3D object.
|
|
384
|
+
*/
|
|
357
385
|
function clone( source ) {
|
|
358
386
|
|
|
359
387
|
const sourceLookup = new Map();
|
|
@@ -435,6 +463,23 @@ function parallelTraverse( a, b, callback ) {
|
|
|
435
463
|
|
|
436
464
|
}
|
|
437
465
|
|
|
466
|
+
/**
|
|
467
|
+
* Retarget options of `SkeletonUtils`.
|
|
468
|
+
*
|
|
469
|
+
* @typedef {Object} module:SkeletonUtils~RetargetOptions
|
|
470
|
+
* @property {boolean} [useFirstFramePosition=false] - Whether to use the position of the first frame or not.
|
|
471
|
+
* @property {number} [fps] - The FPS of the clip.
|
|
472
|
+
* @property {Object<string,string>} [names] - A dictionary for mapping target to source bone names.
|
|
473
|
+
* @property {function(string):string} [getBoneName] - A function for mapping bone names. Alternative to `names`.
|
|
474
|
+
* @property {Array<number>} [trim] - Whether to trim the clip or not. If set the array should hold two values for the start and end.
|
|
475
|
+
* @property {boolean} [preserveBoneMatrix=true] - Whether to preserve bone matrices or not.
|
|
476
|
+
* @property {boolean} [preserveBonePositions=true] - Whether to preserve bone positions or not.
|
|
477
|
+
* @property {boolean} [useTargetMatrix=false] - Whether to use the target matrix or not.
|
|
478
|
+
* @property {string} [hip='hip'] - The name of the source's hip bone.
|
|
479
|
+
* @property {Vector3} [hipInfluence=(1,1,1)] - The hip influence.
|
|
480
|
+
* @property {number} [scale=1] - The scale.
|
|
481
|
+
**/
|
|
482
|
+
|
|
438
483
|
export {
|
|
439
484
|
retarget,
|
|
440
485
|
retargetClip,
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// - https://github.com/mrdoob/three.js/pull/27202#issuecomment-1817640271
|
|
4
|
-
//
|
|
5
|
-
// expects unsigned 32b integer values
|
|
1
|
+
|
|
2
|
+
/** @module SortUtils */
|
|
6
3
|
|
|
7
4
|
const POWER = 3;
|
|
8
5
|
const BIT_MAX = 32;
|
|
@@ -24,6 +21,18 @@ for ( let i = 0; i < ( ITERATIONS + 1 ); i ++ ) {
|
|
|
24
21
|
|
|
25
22
|
const defaultGet = ( el ) => el;
|
|
26
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Hybrid radix sort from.
|
|
26
|
+
*
|
|
27
|
+
* - {@link https://gist.github.com/sciecode/93ed864dd77c5c8803c6a86698d68dab}
|
|
28
|
+
* - {@link https://github.com/mrdoob/three.js/pull/27202#issuecomment-1817640271}
|
|
29
|
+
*
|
|
30
|
+
* Expects unsigned 32b integer values.
|
|
31
|
+
*
|
|
32
|
+
* @function
|
|
33
|
+
* @param {Array<Object>} arr - The array to sort.
|
|
34
|
+
* @param {Object} opt - The options
|
|
35
|
+
*/
|
|
27
36
|
export const radixSort = ( arr, opt ) => {
|
|
28
37
|
|
|
29
38
|
const len = arr.length;
|
|
@@ -2,14 +2,19 @@ import {
|
|
|
2
2
|
Vector2
|
|
3
3
|
} from 'three';
|
|
4
4
|
|
|
5
|
+
/** @module UVsDebug */
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
|
-
*
|
|
8
|
+
* Function for "unwrapping" and debugging three.js geometries UV mapping.
|
|
7
9
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
+
* ```js
|
|
11
|
+
* document.body.appendChild( UVsDebug( new THREE.SphereGeometry() ) );
|
|
12
|
+
* ```
|
|
10
13
|
*
|
|
14
|
+
* @param {BufferGeometry} geometry - The geometry whose uv coordinates should be inspected.
|
|
15
|
+
* @param {number} [size=1024] - The size of the debug canvas.
|
|
16
|
+
* @return {HTMLCanvasElement} A canvas element with visualized uv coordinates.
|
|
11
17
|
*/
|
|
12
|
-
|
|
13
18
|
function UVsDebug( geometry, size = 1024 ) {
|
|
14
19
|
|
|
15
20
|
// handles wrapping of uv.x > 1 only
|
|
@@ -10,11 +10,24 @@ import {
|
|
|
10
10
|
SRGBColorSpace
|
|
11
11
|
} from 'three';
|
|
12
12
|
|
|
13
|
+
/** @module WebGLTextureUtils */
|
|
14
|
+
|
|
13
15
|
let _renderer;
|
|
14
16
|
let fullscreenQuadGeometry;
|
|
15
17
|
let fullscreenQuadMaterial;
|
|
16
18
|
let fullscreenQuad;
|
|
17
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Returns an uncompressed version of the given compressed texture.
|
|
22
|
+
*
|
|
23
|
+
* This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},
|
|
24
|
+
* import the function from {@link WebGPUTextureUtils}.
|
|
25
|
+
*
|
|
26
|
+
* @param {CompressedTexture} texture - The compressed texture.
|
|
27
|
+
* @param {number} [maxTextureSize=Infinity] - The maximum size of the uncompressed texture.
|
|
28
|
+
* @param {?WebGLRenderer} [renderer=null] - A reference to a renderer.
|
|
29
|
+
* @return {CanvasTexture} The uncompressed texture.
|
|
30
|
+
*/
|
|
18
31
|
export function decompress( texture, maxTextureSize = Infinity, renderer = null ) {
|
|
19
32
|
|
|
20
33
|
if ( ! fullscreenQuadGeometry ) fullscreenQuadGeometry = new PlaneGeometry( 2, 2, 1, 1 );
|
|
@@ -6,9 +6,23 @@ import {
|
|
|
6
6
|
} from 'three';
|
|
7
7
|
import { texture, uv } from 'three/tsl';
|
|
8
8
|
|
|
9
|
+
/** @module WebGPUTextureUtils */
|
|
10
|
+
|
|
9
11
|
let _renderer;
|
|
10
12
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
11
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Returns an uncompressed version of the given compressed texture.
|
|
16
|
+
*
|
|
17
|
+
* This module can only be used with {@link WebGPURenderer}. When using {@link WebGLRenderer},
|
|
18
|
+
* import the function from {@link WebGLTextureUtils}.
|
|
19
|
+
*
|
|
20
|
+
* @async
|
|
21
|
+
* @param {CompressedTexture} blitTexture - The compressed texture.
|
|
22
|
+
* @param {number} [maxTextureSize=Infinity] - The maximum size of the uncompressed texture.
|
|
23
|
+
* @param {?WebGPURenderer} [renderer=null] - A reference to a renderer.
|
|
24
|
+
* @return {Promise<CanvasTexture>} A Promise that resolved with the uncompressed texture.
|
|
25
|
+
*/
|
|
12
26
|
export async function decompress( blitTexture, maxTextureSize = Infinity, renderer = null ) {
|
|
13
27
|
|
|
14
28
|
if ( renderer === null ) {
|
|
@@ -1,17 +1,58 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* A simple pool for managing Web Workers.
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
4
|
export class WorkerPool {
|
|
6
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Constructs a new Worker pool.
|
|
8
|
+
*
|
|
9
|
+
* @param {number} [pool=4] - The size of the pool.
|
|
10
|
+
*/
|
|
7
11
|
constructor( pool = 4 ) {
|
|
8
12
|
|
|
13
|
+
/**
|
|
14
|
+
* The size of the pool.
|
|
15
|
+
*
|
|
16
|
+
* @type {number}
|
|
17
|
+
* @default 4
|
|
18
|
+
*/
|
|
9
19
|
this.pool = pool;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* A message queue.
|
|
23
|
+
*
|
|
24
|
+
* @type {Array<Object>}
|
|
25
|
+
*/
|
|
10
26
|
this.queue = [];
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* An array of Workers.
|
|
30
|
+
*
|
|
31
|
+
* @type {Array<Worker>}
|
|
32
|
+
*/
|
|
11
33
|
this.workers = [];
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* An array with resolve functions for messages.
|
|
37
|
+
*
|
|
38
|
+
* @type {Array<Function>}
|
|
39
|
+
*/
|
|
12
40
|
this.workersResolve = [];
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The current worker status.
|
|
44
|
+
*
|
|
45
|
+
* @type {number}
|
|
46
|
+
*/
|
|
13
47
|
this.workerStatus = 0;
|
|
14
48
|
|
|
49
|
+
/**
|
|
50
|
+
* A factory function for creating workers.
|
|
51
|
+
*
|
|
52
|
+
* @type {?Function}
|
|
53
|
+
*/
|
|
54
|
+
this.workerCreator = null;
|
|
55
|
+
|
|
15
56
|
}
|
|
16
57
|
|
|
17
58
|
_initWorker( workerId ) {
|
|
@@ -54,18 +95,36 @@ export class WorkerPool {
|
|
|
54
95
|
|
|
55
96
|
}
|
|
56
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Sets a function that is responsible for creating Workers.
|
|
100
|
+
*
|
|
101
|
+
* @param {Function} workerCreator - The worker creator function.
|
|
102
|
+
*/
|
|
57
103
|
setWorkerCreator( workerCreator ) {
|
|
58
104
|
|
|
59
105
|
this.workerCreator = workerCreator;
|
|
60
106
|
|
|
61
107
|
}
|
|
62
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Sets the Worker limit
|
|
111
|
+
*
|
|
112
|
+
* @param {number} pool - The size of the pool.
|
|
113
|
+
*/
|
|
63
114
|
setWorkerLimit( pool ) {
|
|
64
115
|
|
|
65
116
|
this.pool = pool;
|
|
66
117
|
|
|
67
118
|
}
|
|
68
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Post a message to an idle Worker. If no Worker is available,
|
|
122
|
+
* the message is pushed into a message queue for later processing.
|
|
123
|
+
*
|
|
124
|
+
* @param {Object} msg - The message.
|
|
125
|
+
* @param {Array<ArrayBuffer>} transfer - An array with array buffers for data transfer.
|
|
126
|
+
* @return {Promise} A Promise that resolves when the message has been processed.
|
|
127
|
+
*/
|
|
69
128
|
postMessage( msg, transfer ) {
|
|
70
129
|
|
|
71
130
|
return new Promise( ( resolve ) => {
|
|
@@ -89,6 +148,10 @@ export class WorkerPool {
|
|
|
89
148
|
|
|
90
149
|
}
|
|
91
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Terminates all Workers of this pool. Call this method whenever this
|
|
153
|
+
* Worker pool is no longer used in your app.
|
|
154
|
+
*/
|
|
92
155
|
dispose() {
|
|
93
156
|
|
|
94
157
|
this.workers.forEach( ( worker ) => worker.terminate() );
|
|
@@ -1,5 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A utility class for creating a button that allows to initiate
|
|
3
|
+
* immersive AR sessions based on WebXR. The button can be created
|
|
4
|
+
* with a factory method and then appended ot the website's DOM.
|
|
5
|
+
*
|
|
6
|
+
* ```js
|
|
7
|
+
* document.body.appendChild( ARButton.createButton( renderer ) );
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* @hideconstructor
|
|
11
|
+
*/
|
|
1
12
|
class ARButton {
|
|
2
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new AR button.
|
|
16
|
+
*
|
|
17
|
+
* @param {WebGLRenderer|WebGPURenderer} renderer - The renderer.
|
|
18
|
+
* @param {XRSessionInit} [sessionInit] - The a configuration object for the AR session.
|
|
19
|
+
* @return {HTMLElement} The button or an error message if `immersive-ar` isn't supported.
|
|
20
|
+
*/
|
|
3
21
|
static createButton( renderer, sessionInit = {} ) {
|
|
4
22
|
|
|
5
23
|
const button = document.createElement( 'button' );
|