@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,40 +1,70 @@
|
|
|
1
|
-
// https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf
|
|
2
|
-
|
|
3
1
|
import {
|
|
4
2
|
ClampToEdgeWrapping,
|
|
5
3
|
Data3DTexture,
|
|
6
4
|
FileLoader,
|
|
7
|
-
FloatType,
|
|
8
5
|
LinearFilter,
|
|
9
6
|
Loader,
|
|
10
7
|
UnsignedByteType,
|
|
11
8
|
Vector3,
|
|
12
9
|
} from 'three';
|
|
13
10
|
|
|
11
|
+
/**
|
|
12
|
+
* A loader for the Cube LUT format.
|
|
13
|
+
*
|
|
14
|
+
* References:
|
|
15
|
+
* - [Cube LUT Specification]{@link https://web.archive.org/web/20220220033515/https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf}
|
|
16
|
+
*
|
|
17
|
+
* ```js
|
|
18
|
+
* const loader = new LUTCubeLoader();
|
|
19
|
+
* const map = loader.loadAsync( 'luts/Bourbon 64.CUBE' );
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @augments Loader
|
|
23
|
+
*/
|
|
14
24
|
export class LUTCubeLoader extends Loader {
|
|
15
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new Cube LUT loader.
|
|
28
|
+
*
|
|
29
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
30
|
+
*/
|
|
16
31
|
constructor( manager ) {
|
|
17
32
|
|
|
18
33
|
super( manager );
|
|
19
34
|
|
|
35
|
+
/**
|
|
36
|
+
* The texture type.
|
|
37
|
+
*
|
|
38
|
+
* @type {(UnsignedByteType|FloatType)}
|
|
39
|
+
* @default UnsignedByteType
|
|
40
|
+
*/
|
|
20
41
|
this.type = UnsignedByteType;
|
|
21
42
|
|
|
22
43
|
}
|
|
23
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Sets the texture type.
|
|
47
|
+
*
|
|
48
|
+
* @param {(UnsignedByteType|FloatType)} type - The texture type to set.
|
|
49
|
+
* @return {LUTCubeLoader} A reference to this loader.
|
|
50
|
+
*/
|
|
24
51
|
setType( type ) {
|
|
25
52
|
|
|
26
|
-
if ( type !== UnsignedByteType && type !== FloatType ) {
|
|
27
|
-
|
|
28
|
-
throw new Error( 'LUTCubeLoader: Unsupported type' );
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
53
|
this.type = type;
|
|
33
54
|
|
|
34
55
|
return this;
|
|
35
56
|
|
|
36
57
|
}
|
|
37
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Starts loading from the given URL and passes the loaded Cube LUT asset
|
|
61
|
+
* to the `onLoad()` callback.
|
|
62
|
+
*
|
|
63
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
64
|
+
* @param {function({title:string,size:number,domainMin:Vector3,domainMax:Vector3,texture3D:Data3DTexture})} onLoad - Executed when the loading process has been finished.
|
|
65
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
66
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
67
|
+
*/
|
|
38
68
|
load( url, onLoad, onProgress, onError ) {
|
|
39
69
|
|
|
40
70
|
const loader = new FileLoader( this.manager );
|
|
@@ -66,6 +96,12 @@ export class LUTCubeLoader extends Loader {
|
|
|
66
96
|
|
|
67
97
|
}
|
|
68
98
|
|
|
99
|
+
/**
|
|
100
|
+
* Parses the given Cube LUT data and returns the resulting 3D data texture.
|
|
101
|
+
*
|
|
102
|
+
* @param {string} input - The raw Cube LUT data as a string.
|
|
103
|
+
* @return {{title:string,size:number,domainMin:Vector3,domainMax:Vector3,texture3D:Data3DTexture}} The parsed Cube LUT.
|
|
104
|
+
*/
|
|
69
105
|
parse( input ) {
|
|
70
106
|
|
|
71
107
|
const regExpTitle = /TITLE +"([^"]*)"/;
|
|
@@ -8,19 +8,50 @@ import {
|
|
|
8
8
|
LinearFilter,
|
|
9
9
|
} from 'three';
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* A loader for loading LUT images.
|
|
13
|
+
*
|
|
14
|
+
* ```js
|
|
15
|
+
* const loader = new LUTImageLoader();
|
|
16
|
+
* const map = loader.loadAsync( 'luts/NeutralLUT.png' );
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @augments Loader
|
|
20
|
+
*/
|
|
11
21
|
export class LUTImageLoader extends Loader {
|
|
12
22
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new LUT loader.
|
|
25
|
+
*
|
|
26
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
27
|
+
*/
|
|
28
|
+
constructor( manager ) {
|
|
29
|
+
|
|
30
|
+
super( manager );
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Whether to vertically flip the LUT or not.
|
|
34
|
+
*
|
|
35
|
+
* Depending on the LUT's origin, the texture has green at the bottom (e.g. for Unreal)
|
|
36
|
+
* or green at the top (e.g. for Unity URP Color Lookup). If you're using lut image strips
|
|
37
|
+
* from a Unity pipeline, then set this property to `true`.
|
|
38
|
+
*
|
|
39
|
+
* @type {boolean}
|
|
40
|
+
* @default false
|
|
41
|
+
*/
|
|
42
|
+
this.flip = false;
|
|
21
43
|
|
|
22
44
|
}
|
|
23
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Starts loading from the given URL and passes the loaded LUT
|
|
48
|
+
* to the `onLoad()` callback.
|
|
49
|
+
*
|
|
50
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
51
|
+
* @param {function({size:number,texture3D:Data3DTexture})} onLoad - Executed when the loading process has been finished.
|
|
52
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
53
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
54
|
+
*/
|
|
24
55
|
load( url, onLoad, onProgress, onError ) {
|
|
25
56
|
|
|
26
57
|
const loader = new TextureLoader( this.manager );
|
|
@@ -36,11 +67,11 @@ export class LUTImageLoader extends Loader {
|
|
|
36
67
|
|
|
37
68
|
if ( texture.image.width < texture.image.height ) {
|
|
38
69
|
|
|
39
|
-
imageData = this.
|
|
70
|
+
imageData = this._getImageData( texture );
|
|
40
71
|
|
|
41
72
|
} else {
|
|
42
73
|
|
|
43
|
-
imageData = this.
|
|
74
|
+
imageData = this._horz2Vert( texture );
|
|
44
75
|
|
|
45
76
|
}
|
|
46
77
|
|
|
@@ -66,7 +97,42 @@ export class LUTImageLoader extends Loader {
|
|
|
66
97
|
|
|
67
98
|
}
|
|
68
99
|
|
|
69
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Parses the given LUT data and returns the resulting 3D data texture.
|
|
102
|
+
*
|
|
103
|
+
* @param {Uint8ClampedArray} dataArray - The raw LUT data.
|
|
104
|
+
* @param {number} size - The LUT size.
|
|
105
|
+
* @return {{size:number,texture3D:Data3DTexture}} An object representing the parsed LUT.
|
|
106
|
+
*/
|
|
107
|
+
parse( dataArray, size ) {
|
|
108
|
+
|
|
109
|
+
const data = new Uint8Array( dataArray );
|
|
110
|
+
|
|
111
|
+
const texture3D = new Data3DTexture();
|
|
112
|
+
texture3D.image.data = data;
|
|
113
|
+
texture3D.image.width = size;
|
|
114
|
+
texture3D.image.height = size;
|
|
115
|
+
texture3D.image.depth = size;
|
|
116
|
+
texture3D.format = RGBAFormat;
|
|
117
|
+
texture3D.type = UnsignedByteType;
|
|
118
|
+
texture3D.magFilter = LinearFilter;
|
|
119
|
+
texture3D.minFilter = LinearFilter;
|
|
120
|
+
texture3D.wrapS = ClampToEdgeWrapping;
|
|
121
|
+
texture3D.wrapT = ClampToEdgeWrapping;
|
|
122
|
+
texture3D.wrapR = ClampToEdgeWrapping;
|
|
123
|
+
texture3D.generateMipmaps = false;
|
|
124
|
+
texture3D.needsUpdate = true;
|
|
125
|
+
|
|
126
|
+
return {
|
|
127
|
+
size,
|
|
128
|
+
texture3D,
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// internal
|
|
134
|
+
|
|
135
|
+
_getImageData( texture ) {
|
|
70
136
|
|
|
71
137
|
const width = texture.image.width;
|
|
72
138
|
const height = texture.image.height;
|
|
@@ -90,7 +156,7 @@ export class LUTImageLoader extends Loader {
|
|
|
90
156
|
|
|
91
157
|
}
|
|
92
158
|
|
|
93
|
-
|
|
159
|
+
_horz2Vert( texture ) {
|
|
94
160
|
|
|
95
161
|
const width = texture.image.height;
|
|
96
162
|
const height = texture.image.width;
|
|
@@ -120,30 +186,4 @@ export class LUTImageLoader extends Loader {
|
|
|
120
186
|
|
|
121
187
|
}
|
|
122
188
|
|
|
123
|
-
parse( dataArray, size ) {
|
|
124
|
-
|
|
125
|
-
const data = new Uint8Array( dataArray );
|
|
126
|
-
|
|
127
|
-
const texture3D = new Data3DTexture();
|
|
128
|
-
texture3D.image.data = data;
|
|
129
|
-
texture3D.image.width = size;
|
|
130
|
-
texture3D.image.height = size;
|
|
131
|
-
texture3D.image.depth = size;
|
|
132
|
-
texture3D.format = RGBAFormat;
|
|
133
|
-
texture3D.type = UnsignedByteType;
|
|
134
|
-
texture3D.magFilter = LinearFilter;
|
|
135
|
-
texture3D.minFilter = LinearFilter;
|
|
136
|
-
texture3D.wrapS = ClampToEdgeWrapping;
|
|
137
|
-
texture3D.wrapT = ClampToEdgeWrapping;
|
|
138
|
-
texture3D.wrapR = ClampToEdgeWrapping;
|
|
139
|
-
texture3D.generateMipmaps = false;
|
|
140
|
-
texture3D.needsUpdate = true;
|
|
141
|
-
|
|
142
|
-
return {
|
|
143
|
-
size,
|
|
144
|
-
texture3D,
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
|
|
149
189
|
}
|
|
@@ -43,16 +43,47 @@ import { IFFParser } from './lwo/IFFParser.js';
|
|
|
43
43
|
|
|
44
44
|
let _lwoTree;
|
|
45
45
|
|
|
46
|
+
/**
|
|
47
|
+
* A loader for the LWO format.
|
|
48
|
+
*
|
|
49
|
+
* LWO3 and LWO2 formats are supported.
|
|
50
|
+
*
|
|
51
|
+
* References:
|
|
52
|
+
* - [LWO3 format specification]{@link https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo3.html}
|
|
53
|
+
* - [LWO2 format specification]{@link https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo2.html}
|
|
54
|
+
*
|
|
55
|
+
* ```js
|
|
56
|
+
* const loader = new LWOLoader();
|
|
57
|
+
* const lwoData = await loader.loadAsync( 'models/lwo/Objects/LWO3/Demo.lwo' );
|
|
58
|
+
*
|
|
59
|
+
* const mesh = object.meshes[ 0 ];
|
|
60
|
+
* scene.add( mesh );
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* @augments Loader
|
|
64
|
+
*/
|
|
46
65
|
class LWOLoader extends Loader {
|
|
47
66
|
|
|
48
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Constructs a new LWO loader.
|
|
69
|
+
*
|
|
70
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
71
|
+
*/
|
|
72
|
+
constructor( manager ) {
|
|
49
73
|
|
|
50
74
|
super( manager );
|
|
51
75
|
|
|
52
|
-
this.resourcePath = ( parameters.resourcePath !== undefined ) ? parameters.resourcePath : '';
|
|
53
|
-
|
|
54
76
|
}
|
|
55
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Starts loading from the given URL and passes the loaded LWO asset
|
|
80
|
+
* to the `onLoad()` callback.
|
|
81
|
+
*
|
|
82
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
83
|
+
* @param {function({meshes:Array<Mesh>,materials:Array<Material>})} onLoad - Executed when the loading process has been finished.
|
|
84
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
85
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
86
|
+
*/
|
|
56
87
|
load( url, onLoad, onProgress, onError ) {
|
|
57
88
|
|
|
58
89
|
const scope = this;
|
|
@@ -96,6 +127,14 @@ class LWOLoader extends Loader {
|
|
|
96
127
|
|
|
97
128
|
}
|
|
98
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Parses the given LWO data and returns the resulting meshes and materials.
|
|
132
|
+
*
|
|
133
|
+
* @param {ArrayBuffer} iffBuffer - The raw LWO data as an array buffer.
|
|
134
|
+
* @param {string} path - The URL base path.
|
|
135
|
+
* @param {string} modelName - The model name.
|
|
136
|
+
* @return {{meshes:Array<Mesh>,materials:Array<Material>}} An object holding the parse meshes and materials.
|
|
137
|
+
*/
|
|
99
138
|
parse( iffBuffer, path, modelName ) {
|
|
100
139
|
|
|
101
140
|
_lwoTree = new IFFParser().parse( iffBuffer );
|
|
@@ -312,7 +351,7 @@ class MaterialParser {
|
|
|
312
351
|
|
|
313
352
|
const maps = this.parseTextureNodes( connections.maps );
|
|
314
353
|
|
|
315
|
-
this.parseAttributeImageMaps( connections.attributes, textures, maps
|
|
354
|
+
this.parseAttributeImageMaps( connections.attributes, textures, maps );
|
|
316
355
|
|
|
317
356
|
const attributes = this.parseAttributes( connections.attributes, maps );
|
|
318
357
|
|
|
@@ -496,7 +535,7 @@ class MaterialParser {
|
|
|
496
535
|
|
|
497
536
|
const mapData = attribute.maps[ 0 ];
|
|
498
537
|
|
|
499
|
-
const path = this.getTexturePathByIndex( mapData.imageIndex
|
|
538
|
+
const path = this.getTexturePathByIndex( mapData.imageIndex );
|
|
500
539
|
if ( ! path ) return;
|
|
501
540
|
|
|
502
541
|
const texture = this.loadTexture( path );
|
|
@@ -783,8 +822,8 @@ class GeometryParser {
|
|
|
783
822
|
|
|
784
823
|
geometry.computeVertexNormals();
|
|
785
824
|
|
|
786
|
-
this.parseUVs( geometry, layer
|
|
787
|
-
this.parseMorphTargets( geometry, layer
|
|
825
|
+
this.parseUVs( geometry, layer );
|
|
826
|
+
this.parseMorphTargets( geometry, layer );
|
|
788
827
|
|
|
789
828
|
// TODO: z may need to be reversed to account for coordinate system change
|
|
790
829
|
geometry.translate( - layer.pivot[ 0 ], - layer.pivot[ 1 ], - layer.pivot[ 2 ] );
|
|
@@ -8,14 +8,51 @@ import {
|
|
|
8
8
|
|
|
9
9
|
import lottie from '../libs/lottie_canvas.module.js';
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* A loader for the Lottie texture animation format.
|
|
13
|
+
*
|
|
14
|
+
* The loader returns an instance of {@link CanvasTexture} to represent
|
|
15
|
+
* the animated texture. Two additional properties are added to each texture:
|
|
16
|
+
* - `animation`: The return value of `lottie.loadAnimation()` which is an object
|
|
17
|
+
* with an API for controlling the animation's playback.
|
|
18
|
+
* - `image`: The image container.
|
|
19
|
+
*
|
|
20
|
+
* ```js
|
|
21
|
+
* const loader = new LottieLoader();
|
|
22
|
+
* loader.setQuality( 2 );
|
|
23
|
+
* const texture = await loader.loadAsync( 'textures/lottie/24017-lottie-logo-animation.json' );
|
|
24
|
+
*
|
|
25
|
+
* const geometry = new THREE.BoxGeometry();
|
|
26
|
+
* const material = new THREE.MeshBasicMaterial( { map: texture } );
|
|
27
|
+
* const mesh = new THREE.Mesh( geometry, material );
|
|
28
|
+
* scene.add( mesh );
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @augments Loader
|
|
32
|
+
*/
|
|
11
33
|
class LottieLoader extends Loader {
|
|
12
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Sets the texture quality.
|
|
37
|
+
*
|
|
38
|
+
* @param {number} value - The texture quality.
|
|
39
|
+
*/
|
|
13
40
|
setQuality( value ) {
|
|
14
41
|
|
|
15
42
|
this._quality = value;
|
|
16
43
|
|
|
17
44
|
}
|
|
18
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Starts loading from the given URL and passes the loaded Lottie asset
|
|
48
|
+
* to the `onLoad()` callback.
|
|
49
|
+
*
|
|
50
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
51
|
+
* @param {function(CanvasTexture)} onLoad - Executed when the loading process has been finished.
|
|
52
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
53
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
54
|
+
* @returns {CanvasTexture} The Lottie texture.
|
|
55
|
+
*/
|
|
19
56
|
load( url, onLoad, onProgress, onError ) {
|
|
20
57
|
|
|
21
58
|
const quality = this._quality || 1;
|
|
@@ -91,14 +91,43 @@ const _normalData = [
|
|
|
91
91
|
[ - 0.587785, - 0.425325, - 0.688191 ], [ - 0.688191, - 0.587785, - 0.425325 ]
|
|
92
92
|
];
|
|
93
93
|
|
|
94
|
+
/**
|
|
95
|
+
* A loader for the MD2 format.
|
|
96
|
+
*
|
|
97
|
+
* The loader represents the animations of the MD2 asset as an array of animation
|
|
98
|
+
* clips and stores them in the `animations` property of the geometry.
|
|
99
|
+
*
|
|
100
|
+
* ```js
|
|
101
|
+
* const loader = new MD2Loader();
|
|
102
|
+
* const geometry = await loader.loadAsync( './models/md2/ogro/ogro.md2' );
|
|
103
|
+
*
|
|
104
|
+
* const animations = geometry.animations;
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @augments Loader
|
|
108
|
+
*/
|
|
94
109
|
class MD2Loader extends Loader {
|
|
95
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Constructs a new MD2 loader.
|
|
113
|
+
*
|
|
114
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
115
|
+
*/
|
|
96
116
|
constructor( manager ) {
|
|
97
117
|
|
|
98
118
|
super( manager );
|
|
99
119
|
|
|
100
120
|
}
|
|
101
121
|
|
|
122
|
+
/**
|
|
123
|
+
* Starts loading from the given URL and passes the loaded MD2 asset
|
|
124
|
+
* to the `onLoad()` callback.
|
|
125
|
+
*
|
|
126
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
127
|
+
* @param {function(BufferGeometry)} onLoad - Executed when the loading process has been finished.
|
|
128
|
+
* @param {onProgressCallback} [onProgress] - Executed while the loading is in progress.
|
|
129
|
+
* @param {onErrorCallback} [onError] - Executed when errors occur.
|
|
130
|
+
*/
|
|
102
131
|
load( url, onLoad, onProgress, onError ) {
|
|
103
132
|
|
|
104
133
|
const scope = this;
|
|
@@ -134,6 +163,12 @@ class MD2Loader extends Loader {
|
|
|
134
163
|
|
|
135
164
|
}
|
|
136
165
|
|
|
166
|
+
/**
|
|
167
|
+
* Parses the given MD2 data and returns a geometry.
|
|
168
|
+
*
|
|
169
|
+
* @param {ArrayBuffer} buffer - The raw MD2 data as an array buffer.
|
|
170
|
+
* @return {BufferGeometry} The parsed geometry data.
|
|
171
|
+
*/
|
|
137
172
|
parse( buffer ) {
|
|
138
173
|
|
|
139
174
|
const data = new DataView( buffer );
|
|
@@ -388,7 +423,7 @@ class MD2Loader extends Loader {
|
|
|
388
423
|
geometry.morphAttributes.normal = morphNormals;
|
|
389
424
|
geometry.morphTargetsRelative = false;
|
|
390
425
|
|
|
391
|
-
geometry.animations = AnimationClip.CreateClipsFromMorphTargetSequences( frames, 10 );
|
|
426
|
+
geometry.animations = AnimationClip.CreateClipsFromMorphTargetSequences( frames, 10, false );
|
|
392
427
|
|
|
393
428
|
return geometry;
|
|
394
429
|
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MDD is a special format that stores a position for every vertex in a model for every frame in an animation.
|
|
3
|
-
* Similar to BVH, it can be used to transfer animation data between different 3D applications or engines.
|
|
4
|
-
*
|
|
5
|
-
* MDD stores its data in binary format (big endian) in the following way:
|
|
6
|
-
*
|
|
7
|
-
* number of frames (a single uint32)
|
|
8
|
-
* number of vertices (a single uint32)
|
|
9
|
-
* time values for each frame (sequence of float32)
|
|
10
|
-
* vertex data for each frame (sequence of float32)
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
1
|
import {
|
|
14
2
|
AnimationClip,
|
|
15
3
|
BufferAttribute,
|
|
@@ -18,14 +6,63 @@ import {
|
|
|
18
6
|
NumberKeyframeTrack
|
|
19
7
|
} from 'three';
|
|
20
8
|
|
|
9
|
+
/**
|
|
10
|
+
* A loader for the MDD format.
|
|
11
|
+
*
|
|
12
|
+
* MDD stores a position for every vertex in a model for every frame in an animation.
|
|
13
|
+
* Similar to BVH, it can be used to transfer animation data between different 3D applications or engines.
|
|
14
|
+
*
|
|
15
|
+
* MDD stores its data in binary format (big endian) in the following way:
|
|
16
|
+
*
|
|
17
|
+
* - number of frames (a single uint32)
|
|
18
|
+
* - number of vertices (a single uint32)
|
|
19
|
+
* - time values for each frame (sequence of float32)
|
|
20
|
+
* - vertex data for each frame (sequence of float32)
|
|
21
|
+
*
|
|
22
|
+
* ```js
|
|
23
|
+
* const loader = new MDDLoader();
|
|
24
|
+
* const result = await loader.loadAsync( 'models/mdd/cube.mdd' );
|
|
25
|
+
*
|
|
26
|
+
* const morphTargets = result.morphTargets;
|
|
27
|
+
* const clip = result.clip;
|
|
28
|
+
* // clip.optimize(); // optional
|
|
29
|
+
*
|
|
30
|
+
* const geometry = new THREE.BoxGeometry();
|
|
31
|
+
* geometry.morphAttributes.position = morphTargets; // apply morph targets (vertex data must match)
|
|
32
|
+
*
|
|
33
|
+
* const material = new THREE.MeshBasicMaterial();
|
|
34
|
+
*
|
|
35
|
+
* const mesh = new THREE.Mesh( geometry, material );
|
|
36
|
+
* scene.add( mesh );
|
|
37
|
+
*
|
|
38
|
+
* const mixer = new THREE.AnimationMixer( mesh );
|
|
39
|
+
* mixer.clipAction( clip ).play();
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @augments Loader
|
|
43
|
+
*/
|
|
21
44
|
class MDDLoader extends Loader {
|
|
22
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Constructs a new MDD loader.
|
|
48
|
+
*
|
|
49
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
50
|
+
*/
|
|
23
51
|
constructor( manager ) {
|
|
24
52
|
|
|
25
53
|
super( manager );
|
|
26
54
|
|
|
27
55
|
}
|
|
28
56
|
|
|
57
|
+
/**
|
|
58
|
+
* Starts loading from the given URL and passes the loaded MDD asset
|
|
59
|
+
* to the `onLoad()` callback.
|
|
60
|
+
*
|
|
61
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
62
|
+
* @param {function({clip:AnimationClip, morphTargets:Array<BufferAttribute>})} onLoad - Executed when the loading process has been finished.
|
|
63
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
64
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
65
|
+
*/
|
|
29
66
|
load( url, onLoad, onProgress, onError ) {
|
|
30
67
|
|
|
31
68
|
const scope = this;
|
|
@@ -41,6 +78,13 @@ class MDDLoader extends Loader {
|
|
|
41
78
|
|
|
42
79
|
}
|
|
43
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Parses the given MDD data and returns an object holding the animation clip and the respective
|
|
83
|
+
* morph targets.
|
|
84
|
+
*
|
|
85
|
+
* @param {ArrayBuffer} data - The raw XYZ data as an array buffer.
|
|
86
|
+
* @return {{clip:AnimationClip, morphTargets:Array<BufferAttribute>}} The result object.
|
|
87
|
+
*/
|
|
44
88
|
parse( data ) {
|
|
45
89
|
|
|
46
90
|
const view = new DataView( data );
|
|
@@ -14,9 +14,22 @@ import {
|
|
|
14
14
|
} from 'three';
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* A loader for the MTL format.
|
|
18
|
+
*
|
|
19
|
+
* The Material Template Library format (MTL) or .MTL File Format is a companion file format
|
|
20
|
+
* to OBJ that describes surface shading (material) properties of objects within one or more
|
|
21
|
+
* OBJ files.
|
|
22
|
+
*
|
|
23
|
+
* ```js
|
|
24
|
+
* const loader = new MTLLoader();
|
|
25
|
+
* const materials = await loader.loadAsync( 'models/obj/male02/male02.mtl' );
|
|
26
|
+
*
|
|
27
|
+
* const objLoader = new OBJLoader();
|
|
28
|
+
* objLoader.setMaterials( materials );
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @augments Loader
|
|
18
32
|
*/
|
|
19
|
-
|
|
20
33
|
class MTLLoader extends Loader {
|
|
21
34
|
|
|
22
35
|
constructor( manager ) {
|
|
@@ -26,17 +39,13 @@ class MTLLoader extends Loader {
|
|
|
26
39
|
}
|
|
27
40
|
|
|
28
41
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* @param {string} url - URL to the MTL file.
|
|
32
|
-
* @param {Function} [onLoad] - Callback invoked with the loaded object.
|
|
33
|
-
* @param {Function} [onProgress] - Callback for download progress.
|
|
34
|
-
* @param {Function} [onError] - Callback for download errors.
|
|
42
|
+
* Starts loading from the given URL and passes the loaded MTL asset
|
|
43
|
+
* to the `onLoad()` callback.
|
|
35
44
|
*
|
|
36
|
-
* @
|
|
37
|
-
*
|
|
38
|
-
* @
|
|
39
|
-
*
|
|
45
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
46
|
+
* @param {function(MaterialCreator)} onLoad - Executed when the loading process has been finished.
|
|
47
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
48
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
40
49
|
*/
|
|
41
50
|
load( url, onLoad, onProgress, onError ) {
|
|
42
51
|
|
|
@@ -74,6 +83,12 @@ class MTLLoader extends Loader {
|
|
|
74
83
|
|
|
75
84
|
}
|
|
76
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Sets the material options.
|
|
88
|
+
*
|
|
89
|
+
* @param {MTLLoader~MaterialOptions} value - The material options.
|
|
90
|
+
* @return {MTLLoader} A reference to this loader.
|
|
91
|
+
*/
|
|
77
92
|
setMaterialOptions( value ) {
|
|
78
93
|
|
|
79
94
|
this.materialOptions = value;
|
|
@@ -82,16 +97,11 @@ class MTLLoader extends Loader {
|
|
|
82
97
|
}
|
|
83
98
|
|
|
84
99
|
/**
|
|
85
|
-
* Parses
|
|
86
|
-
*
|
|
87
|
-
* @param {string} text - Content of MTL file
|
|
88
|
-
* @param {string} path
|
|
89
|
-
* @return {MaterialCreator}
|
|
90
|
-
*
|
|
91
|
-
* @see {@link FileLoader#setPath} {@link FileLoader#setResourcePath}
|
|
100
|
+
* Parses the given MTL data and returns the resulting material creator.
|
|
92
101
|
*
|
|
93
|
-
* @
|
|
94
|
-
*
|
|
102
|
+
* @param {string} text - The raw MTL data as a string.
|
|
103
|
+
* @param {string} path - The URL base path.
|
|
104
|
+
* @return {MaterialCreator} The material creator.
|
|
95
105
|
*/
|
|
96
106
|
parse( text, path ) {
|
|
97
107
|
|
|
@@ -155,18 +165,13 @@ class MTLLoader extends Loader {
|
|
|
155
165
|
}
|
|
156
166
|
|
|
157
167
|
/**
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
* @
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
* normalizeRGB: RGBs need to be normalized to 0-1 from 0-255
|
|
166
|
-
* Default: false, assumed to be already normalized
|
|
167
|
-
* ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's
|
|
168
|
-
* Default: false
|
|
169
|
-
* @constructor
|
|
168
|
+
* Material options of `MTLLoader`.
|
|
169
|
+
*
|
|
170
|
+
* @typedef {Object} MTLLoader~MaterialOptions
|
|
171
|
+
* @property {(FrontSide|BackSide|DoubleSide)} [side=FrontSide] - Which side to apply the material.
|
|
172
|
+
* @property {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)} [wrap=RepeatWrapping] - What type of wrapping to apply for textures.
|
|
173
|
+
* @property {boolean} [normalizeRGB=false] - Whether RGB colors should be normalized to `0-1` from `0-255`.
|
|
174
|
+
* @property {boolean} [ignoreZeroRGBs=false] - Ignore values of RGBs (Ka,Kd,Ks) that are all 0's.
|
|
170
175
|
*/
|
|
171
176
|
|
|
172
177
|
class MaterialCreator {
|