super-three 0.141.0 → 0.147.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/build/three.cjs +2441 -1569
- package/build/three.js +2441 -1569
- package/build/three.min.js +1 -1
- package/build/three.module.js +2847 -1576
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +50 -67
- package/examples/js/animation/MMDAnimationHelper.js +66 -137
- package/examples/js/animation/MMDPhysics.js +71 -150
- package/examples/js/cameras/CinematicCamera.js +33 -22
- package/examples/js/controls/ArcballControls.js +149 -403
- package/examples/js/controls/DragControls.js +8 -33
- package/examples/js/controls/FirstPersonControls.js +32 -61
- package/examples/js/controls/FlyControls.js +29 -63
- package/examples/js/controls/OrbitControls.js +125 -103
- package/examples/js/controls/PointerLockControls.js +5 -22
- package/examples/js/controls/TrackballControls.js +33 -88
- package/examples/js/controls/TransformControls.js +101 -182
- package/examples/js/csm/CSM.js +4 -39
- package/examples/js/csm/CSMFrustum.js +3 -9
- package/examples/js/csm/CSMHelper.js +24 -4
- package/examples/js/csm/CSMShader.js +2 -6
- package/examples/js/curves/CurveExtras.js +27 -27
- package/examples/js/curves/NURBSCurve.js +4 -16
- package/examples/js/curves/NURBSSurface.js +3 -9
- package/examples/js/curves/NURBSUtils.js +8 -45
- package/examples/js/effects/AnaglyphEffect.js +6 -20
- package/examples/js/effects/AsciiEffect.js +32 -31
- package/examples/js/effects/OutlineEffect.js +30 -54
- package/examples/js/effects/ParallaxBarrierEffect.js +2 -15
- package/examples/js/effects/PeppersGhostEffect.js +14 -41
- package/examples/js/effects/StereoEffect.js +2 -6
- package/examples/js/environments/RoomEnvironment.js +32 -8
- package/examples/js/exporters/ColladaExporter.js +52 -78
- package/examples/js/exporters/DRACOExporter.js +22 -34
- package/examples/js/exporters/EXRExporter.js +15 -18
- package/examples/js/exporters/GLTFExporter.js +168 -345
- package/examples/js/exporters/MMDExporter.js +5 -12
- package/examples/js/exporters/OBJExporter.js +40 -52
- package/examples/js/exporters/PLYExporter.js +50 -57
- package/examples/js/exporters/STLExporter.js +5 -14
- package/examples/js/exporters/USDZExporter.js +119 -27
- package/examples/js/geometries/BoxLineGeometry.js +0 -1
- package/examples/js/geometries/ConvexGeometry.js +12 -7
- package/examples/js/geometries/DecalGeometry.js +53 -20
- package/examples/js/geometries/LightningStrike.js +54 -67
- package/examples/js/geometries/ParametricGeometries.js +8 -7
- package/examples/js/geometries/ParametricGeometry.js +23 -17
- package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
- package/examples/js/geometries/TeapotGeometry.js +54 -50
- package/examples/js/geometries/TextGeometry.js +6 -4
- package/examples/js/helpers/LightProbeHelper.js +1 -2
- package/examples/js/helpers/OctreeHelper.js +22 -20
- package/examples/js/helpers/PositionalAudioHelper.js +8 -6
- package/examples/js/helpers/RectAreaLightHelper.js +6 -7
- package/examples/js/helpers/VertexNormalsHelper.js +15 -13
- package/examples/js/helpers/VertexTangentsHelper.js +15 -9
- package/examples/js/helpers/ViewHelper.js +31 -16
- package/examples/js/interactive/HTMLMesh.js +25 -39
- package/examples/js/interactive/InteractiveGroup.js +9 -14
- package/examples/js/interactive/SelectionBox.js +3 -70
- package/examples/js/interactive/SelectionHelper.js +2 -8
- package/examples/js/libs/ktx-parse.umd.js +1 -0
- package/examples/js/libs/meshopt_decoder.js +98 -32
- package/examples/js/lights/LightProbeGenerator.js +32 -39
- package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
- package/examples/js/lines/LineGeometry.js +3 -5
- package/examples/js/lines/LineMaterial.js +4 -11
- package/examples/js/lines/LineSegments2.js +40 -89
- package/examples/js/lines/LineSegmentsGeometry.js +7 -28
- package/examples/js/lines/Wireframe.js +2 -7
- package/examples/js/lines/WireframeGeometry2.js +3 -1
- package/examples/js/loaders/3DMLoader.js +58 -155
- package/examples/js/loaders/3MFLoader.js +72 -106
- package/examples/js/loaders/AMFLoader.js +0 -25
- package/examples/js/loaders/BVHLoader.js +44 -43
- package/examples/js/loaders/BasisTextureLoader.js +16 -46
- package/examples/js/loaders/ColladaLoader.js +229 -359
- package/examples/js/loaders/DDSLoader.js +24 -25
- package/examples/js/loaders/DRACOLoader.js +30 -90
- package/examples/js/loaders/EXRLoader.js +69 -177
- package/examples/js/loaders/FBXLoader.js +294 -441
- package/examples/js/loaders/FontLoader.js +9 -31
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +458 -739
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -17
- package/examples/js/loaders/KMZLoader.js +3 -7
- package/examples/js/loaders/KTXLoader.js +12 -30
- package/examples/js/loaders/LDrawLoader.js +309 -355
- package/examples/js/loaders/LUT3dlLoader.js +7 -11
- package/examples/js/loaders/LUTCubeLoader.js +0 -8
- package/examples/js/loaders/LWOLoader.js +59 -124
- package/examples/js/loaders/LogLuvLoader.js +27 -77
- package/examples/js/loaders/LottieLoader.js +4 -4
- package/examples/js/loaders/MD2Loader.js +26 -27
- package/examples/js/loaders/MDDLoader.js +6 -10
- package/examples/js/loaders/MMDLoader.js +180 -189
- package/examples/js/loaders/MTLLoader.js +18 -47
- package/examples/js/loaders/NRRDLoader.js +44 -84
- package/examples/js/loaders/OBJLoader.js +56 -77
- package/examples/js/loaders/PCDLoader.js +92 -42
- package/examples/js/loaders/PDBLoader.js +17 -13
- package/examples/js/loaders/PLYLoader.js +65 -51
- package/examples/js/loaders/PRWMLoader.js +11 -22
- package/examples/js/loaders/PVRLoader.js +7 -16
- package/examples/js/loaders/RGBELoader.js +36 -61
- package/examples/js/loaders/RGBMLoader.js +26 -87
- package/examples/js/loaders/STLLoader.js +20 -27
- package/examples/js/loaders/SVGLoader.js +365 -236
- package/examples/js/loaders/TDSLoader.js +81 -118
- package/examples/js/loaders/TGALoader.js +39 -41
- package/examples/js/loaders/TIFFLoader.js +30 -0
- package/examples/js/loaders/TTFLoader.js +0 -8
- package/examples/js/loaders/TiltLoader.js +14 -15
- package/examples/js/loaders/VOXLoader.js +8 -16
- package/examples/js/loaders/VRMLLoader.js +266 -354
- package/examples/js/loaders/VTKLoader.js +102 -119
- package/examples/js/loaders/XYZLoader.js +2 -4
- package/examples/js/loaders/lwo/IFFParser.js +55 -136
- package/examples/js/loaders/lwo/LWO2Parser.js +39 -89
- package/examples/js/loaders/lwo/LWO3Parser.js +38 -79
- package/examples/js/materials/MeshGouraudMaterial.js +387 -0
- package/examples/js/math/Capsule.js +0 -17
- package/examples/js/math/ColorConverter.js +3 -53
- package/examples/js/math/ConvexHull.js +185 -141
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/math/Lut.js +8 -15
- package/examples/js/math/MeshSurfaceSampler.js +6 -28
- package/examples/js/math/OBB.js +90 -49
- package/examples/js/math/Octree.js +2 -57
- package/examples/js/math/SimplexNoise.js +74 -88
- package/examples/js/misc/ConvexObjectBreaker.js +37 -48
- package/examples/js/misc/GPUComputationRenderer.js +47 -14
- package/examples/js/misc/Gyroscope.js +5 -9
- package/examples/js/misc/MD2Character.js +14 -23
- package/examples/js/misc/MD2CharacterComplex.js +73 -54
- package/examples/js/misc/MorphAnimMesh.js +0 -6
- package/examples/js/misc/MorphBlendMesh.js +3 -30
- package/examples/js/misc/ProgressiveLightMap.js +47 -43
- package/examples/js/misc/RollerCoaster.js +17 -24
- package/examples/js/misc/TubePainter.js +18 -12
- package/examples/js/misc/Volume.js +173 -194
- package/examples/js/misc/VolumeSlice.js +91 -99
- package/examples/js/modifiers/CurveModifier.js +19 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
- package/examples/js/modifiers/SimplifyModifier.js +57 -60
- package/examples/js/modifiers/TessellateModifier.js +2 -9
- package/examples/js/objects/GroundProjectedEnv.js +181 -0
- package/examples/js/objects/Lensflare.js +47 -38
- package/examples/js/objects/LightningStorm.js +10 -13
- package/examples/js/objects/MarchingCubes.js +80 -59
- package/examples/js/objects/Reflector.js +31 -22
- package/examples/js/objects/ReflectorForSSRPass.js +20 -25
- package/examples/js/objects/Refractor.js +61 -33
- package/examples/js/objects/ShadowMesh.js +6 -3
- package/examples/js/objects/Sky.js +2 -7
- package/examples/js/objects/Water.js +23 -18
- package/examples/js/objects/Water2.js +20 -19
- package/examples/js/physics/AmmoPhysics.js +23 -20
- package/examples/js/physics/OimoPhysics.js +19 -17
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
- package/examples/js/postprocessing/AfterimagePass.js +19 -12
- package/examples/js/postprocessing/BloomPass.js +38 -17
- package/examples/js/postprocessing/BokehPass.js +29 -12
- package/examples/js/postprocessing/ClearPass.js +1 -6
- package/examples/js/postprocessing/CubeTexturePass.js +12 -9
- package/examples/js/postprocessing/DotScreenPass.js +7 -5
- package/examples/js/postprocessing/EffectComposer.js +25 -32
- package/examples/js/postprocessing/FilmPass.js +7 -5
- package/examples/js/postprocessing/GlitchPass.js +10 -11
- package/examples/js/postprocessing/HalftonePass.js +9 -9
- package/examples/js/postprocessing/LUTPass.js +2 -15
- package/examples/js/postprocessing/MaskPass.js +20 -17
- package/examples/js/postprocessing/OutlinePass.js +49 -38
- package/examples/js/postprocessing/Pass.js +11 -14
- package/examples/js/postprocessing/RenderPass.js +3 -7
- package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
- package/examples/js/postprocessing/SAOPass.js +40 -32
- package/examples/js/postprocessing/SMAAPass.js +34 -17
- package/examples/js/postprocessing/SSAARenderPass.js +14 -14
- package/examples/js/postprocessing/SSAOPass.js +56 -42
- package/examples/js/postprocessing/SSRPass.js +78 -61
- package/examples/js/postprocessing/SavePass.js +14 -6
- package/examples/js/postprocessing/ShaderPass.js +9 -8
- package/examples/js/postprocessing/TAARenderPass.js +11 -9
- package/examples/js/postprocessing/TexturePass.js +7 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
- package/examples/js/renderers/CSS2DRenderer.js +4 -23
- package/examples/js/renderers/CSS3DRenderer.js +5 -26
- package/examples/js/renderers/Projector.js +31 -108
- package/examples/js/renderers/SVGRenderer.js +4 -50
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
- package/examples/js/shaders/AfterimageShader.js +3 -6
- package/examples/js/shaders/BasicShader.js +3 -6
- package/examples/js/shaders/BleachBypassShader.js +3 -6
- package/examples/js/shaders/BlendShader.js +3 -6
- package/examples/js/shaders/BokehShader.js +3 -6
- package/examples/js/shaders/BokehShader2.js +4 -13
- package/examples/js/shaders/BrightnessContrastShader.js +3 -6
- package/examples/js/shaders/ColorCorrectionShader.js +2 -6
- package/examples/js/shaders/ColorifyShader.js +2 -6
- package/examples/js/shaders/ConvolutionShader.js +5 -10
- package/examples/js/shaders/CopyShader.js +3 -6
- package/examples/js/shaders/DOFMipMapShader.js +3 -6
- package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
- package/examples/js/shaders/DigitalGlitch.js +3 -6
- package/examples/js/shaders/DotScreenShader.js +2 -6
- package/examples/js/shaders/FXAAShader.js +1 -3
- package/examples/js/shaders/FilmShader.js +3 -6
- package/examples/js/shaders/FocusShader.js +3 -6
- package/examples/js/shaders/FreiChenShader.js +2 -6
- package/examples/js/shaders/GammaCorrectionShader.js +3 -6
- package/examples/js/shaders/GodRaysShader.js +11 -24
- package/examples/js/shaders/HalftoneShader.js +3 -6
- package/examples/js/shaders/HorizontalBlurShader.js +3 -6
- package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
- package/examples/js/shaders/HueSaturationShader.js +3 -6
- package/examples/js/shaders/KaleidoShader.js +3 -6
- package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
- package/examples/js/shaders/LuminosityShader.js +4 -7
- package/examples/js/shaders/MMDToonShader.js +2 -4
- package/examples/js/shaders/MirrorShader.js +3 -6
- package/examples/js/shaders/NormalMapShader.js +2 -6
- package/examples/js/shaders/RGBShiftShader.js +3 -6
- package/examples/js/shaders/SAOShader.js +2 -6
- package/examples/js/shaders/SMAAShader.js +6 -18
- package/examples/js/shaders/SSAOShader.js +2 -6
- package/examples/js/shaders/SSRShader.js +6 -18
- package/examples/js/shaders/SepiaShader.js +3 -6
- package/examples/js/shaders/SobelOperatorShader.js +2 -6
- package/examples/js/shaders/TechnicolorShader.js +3 -6
- package/examples/js/shaders/ToneMapShader.js +4 -7
- package/examples/js/shaders/ToonShader.js +8 -24
- package/examples/js/shaders/TriangleBlurShader.js +2 -6
- package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
- package/examples/js/shaders/VelocityShader.js +126 -0
- package/examples/js/shaders/VerticalBlurShader.js +3 -6
- package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
- package/examples/js/shaders/VignetteShader.js +3 -6
- package/examples/js/shaders/VolumeShader.js +2 -6
- package/examples/js/shaders/WaterRefractionShader.js +2 -6
- package/examples/js/textures/FlakesTexture.js +0 -1
- package/examples/js/utils/BufferGeometryUtils.js +237 -171
- package/examples/js/utils/CameraUtils.js +5 -20
- package/examples/js/utils/GPUStatsPanel.js +3 -12
- package/examples/js/utils/GeometryCompressionUtils.js +19 -44
- package/examples/js/utils/GeometryUtils.js +15 -36
- package/examples/js/utils/LDrawUtils.js +8 -11
- package/examples/js/utils/PackedPhongMaterial.js +6 -4
- package/examples/js/utils/SceneUtils.js +109 -14
- package/examples/js/utils/ShadowMapViewer.js +17 -14
- package/examples/js/utils/SkeletonUtils.js +13 -27
- package/examples/js/utils/UVsDebug.js +20 -12
- package/examples/js/utils/WorkerPool.js +1 -11
- package/examples/jsm/animation/CCDIKSolver.js +27 -3
- package/examples/jsm/animation/MMDPhysics.js +28 -22
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/ArcballControls.js +17 -2
- package/examples/jsm/controls/FirstPersonControls.js +20 -27
- package/examples/jsm/controls/FlyControls.js +16 -24
- package/examples/jsm/controls/OrbitControls.js +44 -9
- package/examples/jsm/controls/PointerLockControls.js +0 -7
- package/examples/jsm/controls/TrackballControls.js +14 -5
- package/examples/jsm/controls/TransformControls.js +18 -16
- package/examples/jsm/csm/CSM.js +1 -0
- package/examples/jsm/csm/CSMHelper.js +30 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -2
- package/examples/jsm/effects/OutlineEffect.js +4 -25
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
- package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
- package/examples/jsm/effects/StereoEffect.js +2 -2
- package/examples/jsm/environments/RoomEnvironment.js +23 -0
- package/examples/jsm/exporters/ColladaExporter.js +4 -13
- package/examples/jsm/exporters/DRACOExporter.js +0 -13
- package/examples/jsm/exporters/GLTFExporter.js +29 -110
- package/examples/jsm/exporters/KTX2Exporter.js +29 -29
- package/examples/jsm/exporters/OBJExporter.js +0 -18
- package/examples/jsm/exporters/PLYExporter.js +14 -22
- package/examples/jsm/exporters/STLExporter.js +1 -9
- package/examples/jsm/exporters/USDZExporter.js +107 -4
- package/examples/jsm/geometries/ConvexGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +0 -6
- package/examples/jsm/helpers/OctreeHelper.js +22 -8
- package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
- package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
- package/examples/jsm/helpers/ViewHelper.js +24 -0
- package/examples/jsm/interactive/HTMLMesh.js +14 -15
- package/examples/jsm/interactive/InteractiveGroup.js +4 -2
- package/examples/jsm/interactive/SelectionHelper.js +5 -3
- package/examples/jsm/libs/flow.module.js +610 -160
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
- package/examples/jsm/libs/utif.module.js +1579 -0
- package/examples/jsm/libs/zstddec.module.js +1 -0
- package/examples/jsm/lines/LineSegments2.js +4 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +29 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -28
- package/examples/jsm/loaders/EXRLoader.js +3 -13
- package/examples/jsm/loaders/FBXLoader.js +26 -3
- package/examples/jsm/loaders/FontLoader.js +3 -16
- package/examples/jsm/loaders/GLTFLoader.js +321 -464
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
- package/examples/jsm/loaders/KTX2Loader.js +254 -53
- package/examples/jsm/loaders/LDrawLoader.js +149 -87
- package/examples/jsm/loaders/LottieLoader.js +4 -2
- package/examples/jsm/loaders/MaterialXLoader.js +728 -0
- package/examples/jsm/loaders/OBJLoader.js +6 -14
- package/examples/jsm/loaders/PCDLoader.js +60 -14
- package/examples/jsm/loaders/PLYLoader.js +71 -19
- package/examples/jsm/loaders/RGBELoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +231 -17
- package/examples/jsm/loaders/TIFFLoader.js +36 -0
- package/examples/jsm/loaders/USDZLoader.js +633 -0
- package/examples/jsm/loaders/VRMLLoader.js +36 -26
- package/examples/jsm/loaders/VTKLoader.js +1 -1
- package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
- package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
- package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
- package/examples/jsm/math/ColorConverter.js +1 -49
- package/examples/jsm/math/ConvexHull.js +4 -4
- package/examples/jsm/math/Octree.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
- package/examples/jsm/misc/Volume.js +169 -171
- package/examples/jsm/misc/VolumeSlice.js +78 -80
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/node-editor/NodeEditor.js +91 -12
- package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
- package/examples/jsm/node-editor/core/BaseNode.js +10 -3
- package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
- package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +7 -10
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +7 -10
- package/examples/jsm/node-editor/math/AngleEditor.js +4 -4
- package/examples/jsm/node-editor/math/DotEditor.js +1 -1
- package/examples/jsm/node-editor/math/InvertEditor.js +3 -3
- package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
- package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
- package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
- package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
- package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
- package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
- package/examples/jsm/node-editor/utils/PreviewEditor.js +7 -3
- package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
- package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
- package/examples/jsm/nodes/Nodes.js +70 -13
- package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
- package/examples/jsm/nodes/accessors/NormalNode.js +8 -8
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +11 -5
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
- package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
- package/examples/jsm/nodes/core/AttributeNode.js +32 -9
- package/examples/jsm/nodes/core/CodeNode.js +3 -3
- package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
- package/examples/jsm/nodes/core/FunctionNode.js +2 -2
- package/examples/jsm/nodes/core/Node.js +15 -13
- package/examples/jsm/nodes/core/NodeBuilder.js +67 -18
- package/examples/jsm/nodes/core/NodeFrame.js +2 -2
- package/examples/jsm/nodes/core/NodeUtils.js +23 -1
- package/examples/jsm/nodes/core/NodeVarying.js +17 -0
- package/examples/jsm/nodes/core/VaryingNode.js +56 -0
- package/examples/jsm/nodes/core/constants.js +13 -13
- package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +84 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
- package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +3 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
- package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
- package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +33 -0
- package/examples/jsm/nodes/materials/Materials.js +21 -31
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +11 -3
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
- package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -0
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +56 -0
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +617 -0
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +7 -17
- package/examples/jsm/nodes/math/OperatorNode.js +16 -3
- package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
- package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
- package/examples/jsm/nodes/shadernode/ShaderNode.js +40 -25
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +95 -68
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +49 -6
- package/examples/jsm/nodes/utils/ConvertNode.js +18 -12
- package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
- package/examples/jsm/nodes/utils/JoinNode.js +15 -9
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +3 -2
- package/examples/jsm/nodes/utils/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +34 -0
- package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
- package/examples/jsm/nodes/utils/SplitNode.js +21 -5
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +23 -3
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
- package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
- package/examples/jsm/objects/Reflector.js +12 -5
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
- package/examples/jsm/objects/Refractor.js +12 -6
- package/examples/jsm/objects/ShadowMesh.js +8 -2
- package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
- package/examples/jsm/postprocessing/BloomPass.js +22 -3
- package/examples/jsm/postprocessing/BokehPass.js +18 -4
- package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
- package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
- package/examples/jsm/postprocessing/EffectComposer.js +9 -0
- package/examples/jsm/postprocessing/FilmPass.js +8 -0
- package/examples/jsm/postprocessing/GlitchPass.js +13 -1
- package/examples/jsm/postprocessing/HalftonePass.js +8 -0
- package/examples/jsm/postprocessing/OutlinePass.js +25 -3
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
- package/examples/jsm/postprocessing/SAOPass.js +20 -0
- package/examples/jsm/postprocessing/SMAAPass.js +16 -0
- package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
- package/examples/jsm/postprocessing/SavePass.js +17 -1
- package/examples/jsm/postprocessing/ShaderPass.js +8 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
- package/examples/jsm/postprocessing/TexturePass.js +8 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
- package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
- package/examples/jsm/renderers/Projector.js +2 -24
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +363 -231
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
- package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +68 -3
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
- package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +113 -93
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +63 -36
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/LuminosityShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +2 -4
- package/examples/jsm/shaders/ToneMapShader.js +1 -1
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +176 -43
- package/examples/jsm/utils/GeometryUtils.js +17 -25
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
- package/examples/jsm/utils/SceneUtils.js +117 -12
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
- package/examples/jsm/webxr/VRButton.js +1 -7
- package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
- package/package.json +22 -18
- package/src/Three.Legacy.js +262 -36
- package/src/Three.js +4 -2
- package/src/animation/AnimationAction.js +6 -5
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +1 -1
- package/src/animation/AnimationUtils.js +204 -199
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/PropertyBinding.js +31 -5
- package/src/audio/AudioContext.js +5 -5
- package/src/cameras/CubeCamera.js +14 -21
- package/src/constants.js +2 -4
- package/src/core/BufferAttribute.js +81 -111
- package/src/core/BufferGeometry.js +3 -41
- package/src/core/InstancedBufferAttribute.js +0 -10
- package/src/core/InstancedBufferGeometry.js +1 -7
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +57 -8
- package/src/core/Object3D.js +22 -5
- package/src/core/Uniform.js +0 -7
- package/src/core/UniformsGroup.js +92 -0
- package/src/extras/DataUtils.js +104 -88
- package/src/extras/Earcut.js +67 -67
- package/src/extras/core/Path.js +1 -0
- package/src/extras/core/ShapePath.js +1 -4
- package/src/extras/curves/CatmullRomCurve3.js +4 -2
- package/src/geometries/BoxGeometry.js +1 -1
- package/src/geometries/CapsuleGeometry.js +1 -1
- package/src/geometries/CircleGeometry.js +1 -1
- package/src/geometries/ConeGeometry.js +1 -1
- package/src/geometries/CylinderGeometry.js +2 -1
- package/src/geometries/DodecahedronGeometry.js +1 -1
- package/src/geometries/EdgesGeometry.js +5 -4
- package/src/geometries/ExtrudeGeometry.js +2 -11
- package/src/geometries/IcosahedronGeometry.js +1 -1
- package/src/geometries/LatheGeometry.js +2 -2
- package/src/geometries/OctahedronGeometry.js +1 -1
- package/src/geometries/PlaneGeometry.js +2 -1
- package/src/geometries/PolyhedronGeometry.js +2 -2
- package/src/geometries/RingGeometry.js +1 -1
- package/src/geometries/ShapeGeometry.js +3 -2
- package/src/geometries/SphereGeometry.js +2 -1
- package/src/geometries/TetrahedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +2 -1
- package/src/geometries/TorusKnotGeometry.js +2 -1
- package/src/geometries/TubeGeometry.js +2 -1
- package/src/geometries/WireframeGeometry.js +1 -0
- package/src/helpers/ArrowHelper.js +9 -0
- package/src/helpers/Box3Helper.js +7 -0
- package/src/helpers/BoxHelper.js +7 -1
- package/src/helpers/CameraHelper.js +97 -38
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/GridHelper.js +7 -0
- package/src/helpers/HemisphereLightHelper.js +5 -1
- package/src/helpers/PlaneHelper.js +15 -9
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/PolarGridHelper.js +25 -14
- package/src/helpers/SkeletonHelper.js +7 -0
- package/src/helpers/SpotLightHelper.js +5 -2
- package/src/lights/LightShadow.js +1 -2
- package/src/lights/PointLight.js +2 -2
- package/src/lights/SpotLight.js +4 -2
- package/src/loaders/FileLoader.js +16 -2
- package/src/loaders/LoadingManager.js +1 -1
- package/src/loaders/MaterialLoader.js +49 -7
- package/src/loaders/ObjectLoader.js +9 -42
- package/src/materials/Material.js +2 -34
- package/src/materials/Materials.js +0 -27
- package/src/materials/MeshLambertMaterial.js +28 -1
- package/src/materials/MeshPhysicalMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +3 -7
- package/src/math/Color.js +8 -18
- package/src/math/MathUtils.js +1 -7
- package/src/math/Matrix3.js +54 -25
- package/src/math/Matrix4.js +3 -27
- package/src/math/Quaternion.js +1 -21
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +36 -21
- package/src/math/Vector2.js +4 -24
- package/src/math/Vector3.js +7 -46
- package/src/math/Vector4.js +4 -24
- package/src/objects/InstancedMesh.js +7 -0
- package/src/objects/LOD.js +25 -6
- package/src/renderers/WebGL3DRenderTarget.js +1 -1
- package/src/renderers/WebGLArrayRenderTarget.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
- package/src/renderers/WebGLRenderTarget.js +1 -1
- package/src/renderers/WebGLRenderer.js +119 -69
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -13
- package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +7 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
- package/src/renderers/shaders/ShaderLib.js +50 -36
- package/src/renderers/shaders/UniformsLib.js +13 -12
- package/src/renderers/shaders/UniformsUtils.js +29 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -0
- package/src/renderers/webgl/WebGLBackground.js +17 -9
- package/src/renderers/webgl/WebGLLights.js +37 -17
- package/src/renderers/webgl/WebGLMaterials.js +2 -1
- package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
- package/src/renderers/webgl/WebGLProgram.js +6 -11
- package/src/renderers/webgl/WebGLPrograms.js +30 -26
- package/src/renderers/webgl/WebGLRenderLists.js +5 -4
- package/src/renderers/webgl/WebGLRenderStates.js +5 -4
- package/src/renderers/webgl/WebGLShaderCache.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -16
- package/src/renderers/webgl/WebGLState.js +125 -41
- package/src/renderers/webgl/WebGLTextures.js +94 -39
- package/src/renderers/webgl/WebGLUniforms.js +156 -28
- package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
- package/src/renderers/webgl/WebGLUtils.js +3 -1
- package/src/renderers/webvr/WebVRManager.js +42 -9
- package/src/renderers/webvr/WebVRUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +91 -50
- package/src/renderers/webxr/WebXRManager.js +127 -34
- package/src/scenes/Scene.js +24 -3
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +2 -1
- package/src/utils.js +1 -1
- package/examples/js/controls/experimental/CameraControls.js +0 -1048
- package/examples/js/libs/lottie_canvas.js +0 -12751
- package/examples/js/loaders/KTX2Loader.js +0 -558
- package/examples/js/shaders/PixelShader.js +0 -51
- package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
- package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
- package/examples/jsm/nodes/core/NodeVary.js +0 -14
- package/examples/jsm/nodes/core/VaryNode.js +0 -54
- package/examples/jsm/package.json +0 -3
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
- package/examples/jsm/shaders/PixelShader.js +0 -44
- package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
unitName: null,
|
|
25
25
|
unitMeter: null
|
|
26
26
|
}, options );
|
|
27
|
-
|
|
28
27
|
if ( options.upAxis.match( /^[XYZ]_UP$/ ) === null ) {
|
|
29
28
|
|
|
30
29
|
console.error( 'ColladaExporter: Invalid upAxis: valid values are X_UP, Y_UP or Z_UP.' );
|
|
@@ -53,23 +52,20 @@
|
|
|
53
52
|
}
|
|
54
53
|
|
|
55
54
|
const version = options.version;
|
|
56
|
-
|
|
57
55
|
if ( version !== '1.4.1' && version !== '1.5.0' ) {
|
|
58
56
|
|
|
59
57
|
console.warn( `ColladaExporter : Version ${version} not supported for export. Only 1.4.1 and 1.5.0.` );
|
|
60
58
|
return null;
|
|
61
59
|
|
|
62
|
-
}
|
|
63
|
-
|
|
60
|
+
}
|
|
64
61
|
|
|
62
|
+
// Convert the urdf xml into a well-formatted, indented format
|
|
65
63
|
function format( urdf ) {
|
|
66
64
|
|
|
67
65
|
const IS_END_TAG = /^<\//;
|
|
68
66
|
const IS_SELF_CLOSING = /(\?>$)|(\/>$)/;
|
|
69
67
|
const HAS_TEXT = /<[^>]+>[^<]*<\/[^<]+>/;
|
|
70
|
-
|
|
71
68
|
const pad = ( ch, num ) => num > 0 ? ch + pad( ch, num - 1 ) : '';
|
|
72
|
-
|
|
73
69
|
let tagnum = 0;
|
|
74
70
|
return urdf.match( /(<[^>]+>[^<]+<\/[^<]+>)|(<[^>]+>)/g ).map( tag => {
|
|
75
71
|
|
|
@@ -80,7 +76,6 @@
|
|
|
80
76
|
}
|
|
81
77
|
|
|
82
78
|
const res = `${pad( ' ', tagnum )}${tag}`;
|
|
83
|
-
|
|
84
79
|
if ( ! HAS_TEXT.test( tag ) && ! IS_SELF_CLOSING.test( tag ) && ! IS_END_TAG.test( tag ) ) {
|
|
85
80
|
|
|
86
81
|
tagnum ++;
|
|
@@ -91,14 +86,13 @@
|
|
|
91
86
|
|
|
92
87
|
} ).join( '\n' );
|
|
93
88
|
|
|
94
|
-
}
|
|
95
|
-
|
|
89
|
+
}
|
|
96
90
|
|
|
91
|
+
// Convert an image into a png format for saving
|
|
97
92
|
function base64ToBuffer( str ) {
|
|
98
93
|
|
|
99
94
|
const b = atob( str );
|
|
100
95
|
const buf = new Uint8Array( b.length );
|
|
101
|
-
|
|
102
96
|
for ( let i = 0, l = buf.length; i < l; i ++ ) {
|
|
103
97
|
|
|
104
98
|
buf[ i ] = b.charCodeAt( i );
|
|
@@ -110,25 +104,25 @@
|
|
|
110
104
|
}
|
|
111
105
|
|
|
112
106
|
let canvas, ctx;
|
|
113
|
-
|
|
114
107
|
function imageToData( image, ext ) {
|
|
115
108
|
|
|
116
109
|
canvas = canvas || document.createElement( 'canvas' );
|
|
117
110
|
ctx = ctx || canvas.getContext( '2d' );
|
|
118
111
|
canvas.width = image.width;
|
|
119
112
|
canvas.height = image.height;
|
|
120
|
-
ctx.drawImage( image, 0, 0 );
|
|
113
|
+
ctx.drawImage( image, 0, 0 );
|
|
121
114
|
|
|
122
|
-
|
|
115
|
+
// Get the base64 encoded data
|
|
116
|
+
const base64data = canvas.toDataURL( `image/${ext}`, 1 ).replace( /^data:image\/(png|jpg);base64,/, '' );
|
|
123
117
|
|
|
118
|
+
// Convert to a uint8 array
|
|
124
119
|
return base64ToBuffer( base64data );
|
|
125
120
|
|
|
126
|
-
}
|
|
127
|
-
|
|
121
|
+
}
|
|
128
122
|
|
|
123
|
+
// gets the attribute array. Generate a new array if the attribute is interleaved
|
|
129
124
|
const getFuncs = [ 'getX', 'getY', 'getZ', 'getW' ];
|
|
130
125
|
const tempColor = new THREE.Color();
|
|
131
|
-
|
|
132
126
|
function attrBufferToArray( attr, isColor = false ) {
|
|
133
127
|
|
|
134
128
|
if ( isColor ) {
|
|
@@ -136,7 +130,6 @@
|
|
|
136
130
|
// convert the colors to srgb before export
|
|
137
131
|
// colors are always written as floats
|
|
138
132
|
const arr = new Float32Array( attr.count * 3 );
|
|
139
|
-
|
|
140
133
|
for ( let i = 0, l = attr.count; i < l; i ++ ) {
|
|
141
134
|
|
|
142
135
|
tempColor.fromBufferAttribute( attr, i ).convertLinearToSRGB();
|
|
@@ -153,7 +146,6 @@
|
|
|
153
146
|
// use the typed array constructor to save on memory
|
|
154
147
|
const arr = new attr.array.constructor( attr.count * attr.itemSize );
|
|
155
148
|
const size = attr.itemSize;
|
|
156
|
-
|
|
157
149
|
for ( let i = 0, l = attr.count; i < l; i ++ ) {
|
|
158
150
|
|
|
159
151
|
for ( let j = 0; j < size; j ++ ) {
|
|
@@ -172,28 +164,27 @@
|
|
|
172
164
|
|
|
173
165
|
}
|
|
174
166
|
|
|
175
|
-
}
|
|
176
|
-
// and `ct` length
|
|
177
|
-
|
|
167
|
+
}
|
|
178
168
|
|
|
169
|
+
// Returns an array of the same type starting at the `st` index,
|
|
170
|
+
// and `ct` length
|
|
179
171
|
function subArray( arr, st, ct ) {
|
|
180
172
|
|
|
181
173
|
if ( Array.isArray( arr ) ) return arr.slice( st, st + ct ); else return new arr.constructor( arr.buffer, st * arr.BYTES_PER_ELEMENT, ct );
|
|
182
174
|
|
|
183
|
-
}
|
|
184
|
-
|
|
175
|
+
}
|
|
185
176
|
|
|
177
|
+
// Returns the string for a geometry's attribute
|
|
186
178
|
function getAttribute( attr, name, params, type, isColor = false ) {
|
|
187
179
|
|
|
188
180
|
const array = attrBufferToArray( attr, isColor );
|
|
189
181
|
const res = `<source id="${name}">` + `<float_array id="${name}-array" count="${array.length}">` + array.join( ' ' ) + '</float_array>' + '<technique_common>' + `<accessor source="#${name}-array" count="${Math.floor( array.length / attr.itemSize )}" stride="${attr.itemSize}">` + params.map( n => `<param name="${n}" type="${type}" />` ).join( '' ) + '</accessor>' + '</technique_common>' + '</source>';
|
|
190
182
|
return res;
|
|
191
183
|
|
|
192
|
-
}
|
|
193
|
-
|
|
184
|
+
}
|
|
194
185
|
|
|
186
|
+
// Returns the string for a node's transform information
|
|
195
187
|
let transMat;
|
|
196
|
-
|
|
197
188
|
function getTransform( o ) {
|
|
198
189
|
|
|
199
190
|
// ensure the object's matrix is up to date
|
|
@@ -204,25 +195,15 @@
|
|
|
204
195
|
transMat.transpose();
|
|
205
196
|
return `<matrix>${transMat.toArray().join( ' ' )}</matrix>`;
|
|
206
197
|
|
|
207
|
-
}
|
|
208
|
-
// Returns the mesh id
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
function processGeometry( g ) {
|
|
198
|
+
}
|
|
212
199
|
|
|
213
|
-
|
|
200
|
+
// Process the given piece of geometry into the geometry library
|
|
201
|
+
// Returns the mesh id
|
|
202
|
+
function processGeometry( bufferGeometry ) {
|
|
214
203
|
|
|
204
|
+
let info = geometryInfo.get( bufferGeometry );
|
|
215
205
|
if ( ! info ) {
|
|
216
206
|
|
|
217
|
-
// convert the geometry to bufferGeometry if it isn't already
|
|
218
|
-
const bufferGeometry = g;
|
|
219
|
-
|
|
220
|
-
if ( bufferGeometry.isBufferGeometry !== true ) {
|
|
221
|
-
|
|
222
|
-
throw new Error( 'THREE.ColladaExporter: Geometry is not of type THREE.BufferGeometry.' );
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
|
|
226
207
|
const meshid = `Mesh${libraryGeometries.length + 1}`;
|
|
227
208
|
const indexCount = bufferGeometry.index ? bufferGeometry.index.count * bufferGeometry.index.itemSize : bufferGeometry.attributes.position.count;
|
|
228
209
|
const groups = bufferGeometry.groups != null && bufferGeometry.groups.length !== 0 ? bufferGeometry.groups : [ {
|
|
@@ -230,47 +211,49 @@
|
|
|
230
211
|
count: indexCount,
|
|
231
212
|
materialIndex: 0
|
|
232
213
|
} ];
|
|
233
|
-
const gname =
|
|
234
|
-
let gnode = `<geometry id="${meshid}"${gname}><mesh>`;
|
|
214
|
+
const gname = bufferGeometry.name ? ` name="${bufferGeometry.name}"` : '';
|
|
215
|
+
let gnode = `<geometry id="${meshid}"${gname}><mesh>`;
|
|
235
216
|
|
|
217
|
+
// define the geometry node and the vertices for the geometry
|
|
236
218
|
const posName = `${meshid}-position`;
|
|
237
219
|
const vertName = `${meshid}-vertices`;
|
|
238
220
|
gnode += getAttribute( bufferGeometry.attributes.position, posName, [ 'X', 'Y', 'Z' ], 'float' );
|
|
239
|
-
gnode += `<vertices id="${vertName}"><input semantic="POSITION" source="#${posName}" /></vertices>`;
|
|
221
|
+
gnode += `<vertices id="${vertName}"><input semantic="POSITION" source="#${posName}" /></vertices>`;
|
|
222
|
+
|
|
223
|
+
// NOTE: We're not optimizing the attribute arrays here, so they're all the same length and
|
|
240
224
|
// can therefore share the same triangle indices. However, MeshLab seems to have trouble opening
|
|
241
225
|
// models with attributes that share an offset.
|
|
242
226
|
// MeshLab Bug#424: https://sourceforge.net/p/meshlab/bugs/424/
|
|
243
|
-
// serialize normals
|
|
244
227
|
|
|
228
|
+
// serialize normals
|
|
245
229
|
let triangleInputs = `<input semantic="VERTEX" source="#${vertName}" offset="0" />`;
|
|
246
|
-
|
|
247
230
|
if ( 'normal' in bufferGeometry.attributes ) {
|
|
248
231
|
|
|
249
232
|
const normName = `${meshid}-normal`;
|
|
250
233
|
gnode += getAttribute( bufferGeometry.attributes.normal, normName, [ 'X', 'Y', 'Z' ], 'float' );
|
|
251
234
|
triangleInputs += `<input semantic="NORMAL" source="#${normName}" offset="0" />`;
|
|
252
235
|
|
|
253
|
-
}
|
|
254
|
-
|
|
236
|
+
}
|
|
255
237
|
|
|
238
|
+
// serialize uvs
|
|
256
239
|
if ( 'uv' in bufferGeometry.attributes ) {
|
|
257
240
|
|
|
258
241
|
const uvName = `${meshid}-texcoord`;
|
|
259
242
|
gnode += getAttribute( bufferGeometry.attributes.uv, uvName, [ 'S', 'T' ], 'float' );
|
|
260
243
|
triangleInputs += `<input semantic="TEXCOORD" source="#${uvName}" offset="0" set="0" />`;
|
|
261
244
|
|
|
262
|
-
}
|
|
263
|
-
|
|
245
|
+
}
|
|
264
246
|
|
|
247
|
+
// serialize lightmap uvs
|
|
265
248
|
if ( 'uv2' in bufferGeometry.attributes ) {
|
|
266
249
|
|
|
267
250
|
const uvName = `${meshid}-texcoord2`;
|
|
268
251
|
gnode += getAttribute( bufferGeometry.attributes.uv2, uvName, [ 'S', 'T' ], 'float' );
|
|
269
252
|
triangleInputs += `<input semantic="TEXCOORD" source="#${uvName}" offset="0" set="1" />`;
|
|
270
253
|
|
|
271
|
-
}
|
|
272
|
-
|
|
254
|
+
}
|
|
273
255
|
|
|
256
|
+
// serialize colors
|
|
274
257
|
if ( 'color' in bufferGeometry.attributes ) {
|
|
275
258
|
|
|
276
259
|
// colors are always written as floats
|
|
@@ -281,7 +264,6 @@
|
|
|
281
264
|
}
|
|
282
265
|
|
|
283
266
|
let indexArray = null;
|
|
284
|
-
|
|
285
267
|
if ( bufferGeometry.index ) {
|
|
286
268
|
|
|
287
269
|
indexArray = attrBufferToArray( bufferGeometry.index );
|
|
@@ -289,7 +271,6 @@
|
|
|
289
271
|
} else {
|
|
290
272
|
|
|
291
273
|
indexArray = new Array( indexCount );
|
|
292
|
-
|
|
293
274
|
for ( let i = 0, l = indexArray.length; i < l; i ++ ) indexArray[ i ] = i;
|
|
294
275
|
|
|
295
276
|
}
|
|
@@ -312,27 +293,25 @@
|
|
|
312
293
|
meshid: meshid,
|
|
313
294
|
bufferGeometry: bufferGeometry
|
|
314
295
|
};
|
|
315
|
-
geometryInfo.set(
|
|
296
|
+
geometryInfo.set( bufferGeometry, info );
|
|
316
297
|
|
|
317
298
|
}
|
|
318
299
|
|
|
319
300
|
return info;
|
|
320
301
|
|
|
321
|
-
}
|
|
322
|
-
// Returns the image library
|
|
323
|
-
|
|
302
|
+
}
|
|
324
303
|
|
|
304
|
+
// Process the given texture into the image library
|
|
305
|
+
// Returns the image library
|
|
325
306
|
function processTexture( tex ) {
|
|
326
307
|
|
|
327
308
|
let texid = imageMap.get( tex );
|
|
328
|
-
|
|
329
309
|
if ( texid == null ) {
|
|
330
310
|
|
|
331
311
|
texid = `image-${libraryImages.length + 1}`;
|
|
332
312
|
const ext = 'png';
|
|
333
313
|
const name = tex.name || texid;
|
|
334
314
|
let imageNode = `<image id="${texid}" name="${name}">`;
|
|
335
|
-
|
|
336
315
|
if ( version === '1.5.0' ) {
|
|
337
316
|
|
|
338
317
|
imageNode += `<init_from><ref>${options.textureDirectory}${name}.${ext}</ref></init_from>`;
|
|
@@ -359,19 +338,17 @@
|
|
|
359
338
|
|
|
360
339
|
return texid;
|
|
361
340
|
|
|
362
|
-
}
|
|
363
|
-
// Returns the material id
|
|
364
|
-
|
|
341
|
+
}
|
|
365
342
|
|
|
343
|
+
// Process the given material into the material and effect libraries
|
|
344
|
+
// Returns the material id
|
|
366
345
|
function processMaterial( m ) {
|
|
367
346
|
|
|
368
347
|
let matid = materialMap.get( m );
|
|
369
|
-
|
|
370
348
|
if ( matid == null ) {
|
|
371
349
|
|
|
372
350
|
matid = `Mat${libraryEffects.length + 1}`;
|
|
373
351
|
let type = 'phong';
|
|
374
|
-
|
|
375
352
|
if ( m.isMeshLambertMaterial === true ) {
|
|
376
353
|
|
|
377
354
|
type = 'lambert';
|
|
@@ -379,7 +356,6 @@
|
|
|
379
356
|
} else if ( m.isMeshBasicMaterial === true ) {
|
|
380
357
|
|
|
381
358
|
type = 'constant';
|
|
382
|
-
|
|
383
359
|
if ( m.map !== null ) {
|
|
384
360
|
|
|
385
361
|
// The Collada spec does not support diffuse texture maps with the
|
|
@@ -398,16 +374,15 @@
|
|
|
398
374
|
const reflectivity = m.reflectivity || 0;
|
|
399
375
|
emissive.convertLinearToSRGB();
|
|
400
376
|
specular.convertLinearToSRGB();
|
|
401
|
-
diffuse.convertLinearToSRGB();
|
|
377
|
+
diffuse.convertLinearToSRGB();
|
|
378
|
+
|
|
379
|
+
// Do not export and alpha map for the reasons mentioned in issue (#13792)
|
|
402
380
|
// in three.js alpha maps are black and white, but collada expects the alpha
|
|
403
381
|
// channel to specify the transparency
|
|
404
|
-
|
|
405
382
|
let transparencyNode = '';
|
|
406
|
-
|
|
407
383
|
if ( m.transparent === true ) {
|
|
408
384
|
|
|
409
385
|
transparencyNode += '<transparent>' + ( m.map ? '<texture texture="diffuse-sampler"></texture>' : '<float>1</float>' ) + '</transparent>';
|
|
410
|
-
|
|
411
386
|
if ( m.opacity < 1 ) {
|
|
412
387
|
|
|
413
388
|
transparencyNode += `<transparency><float>${m.opacity}</float></transparency>`;
|
|
@@ -428,30 +403,30 @@
|
|
|
428
403
|
|
|
429
404
|
return matid;
|
|
430
405
|
|
|
431
|
-
}
|
|
432
|
-
|
|
406
|
+
}
|
|
433
407
|
|
|
408
|
+
// Recursively process the object into a scene
|
|
434
409
|
function processObject( o ) {
|
|
435
410
|
|
|
436
411
|
let node = `<node name="${o.name}">`;
|
|
437
412
|
node += getTransform( o );
|
|
438
|
-
|
|
439
413
|
if ( o.isMesh === true && o.geometry !== null ) {
|
|
440
414
|
|
|
441
415
|
// function returns the id associated with the mesh and a "BufferGeometry" version
|
|
442
416
|
// of the geometry in case it's not a geometry.
|
|
443
417
|
const geomInfo = processGeometry( o.geometry );
|
|
444
418
|
const meshid = geomInfo.meshid;
|
|
445
|
-
const geometry = geomInfo.bufferGeometry;
|
|
419
|
+
const geometry = geomInfo.bufferGeometry;
|
|
446
420
|
|
|
421
|
+
// ids of the materials to bind to the geometry
|
|
447
422
|
let matids = null;
|
|
448
|
-
let matidsArray;
|
|
423
|
+
let matidsArray;
|
|
424
|
+
|
|
425
|
+
// get a list of materials to bind to the sub groups of the geometry.
|
|
449
426
|
// If the amount of subgroups is greater than the materials, than reuse
|
|
450
427
|
// the materials.
|
|
451
|
-
|
|
452
428
|
const mat = o.material || new THREE.MeshBasicMaterial();
|
|
453
429
|
const materials = Array.isArray( mat ) ? mat : [ mat ];
|
|
454
|
-
|
|
455
430
|
if ( geometry.groups.length > materials.length ) {
|
|
456
431
|
|
|
457
432
|
matidsArray = new Array( geometry.groups.length );
|
|
@@ -495,7 +470,6 @@
|
|
|
495
470
|
data: format( dae ),
|
|
496
471
|
textures
|
|
497
472
|
};
|
|
498
|
-
|
|
499
473
|
if ( typeof onDone === 'function' ) {
|
|
500
474
|
|
|
501
475
|
requestAnimationFrame( () => onDone( res ) );
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
/* global DracoEncoderModule */
|
|
18
|
+
|
|
18
19
|
class DRACOExporter {
|
|
19
20
|
|
|
20
21
|
parse( object, options = {
|
|
@@ -27,12 +28,6 @@
|
|
|
27
28
|
exportColor: false
|
|
28
29
|
} ) {
|
|
29
30
|
|
|
30
|
-
if ( object.isBufferGeometry === true ) {
|
|
31
|
-
|
|
32
|
-
throw new Error( 'DRACOExporter: The first parameter of parse() is now an instance of Mesh or Points.' );
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
31
|
if ( DracoEncoderModule === undefined ) {
|
|
37
32
|
|
|
38
33
|
throw new Error( 'THREE.DRACOExporter: required the draco_encoder to work.' );
|
|
@@ -44,13 +39,6 @@
|
|
|
44
39
|
const encoder = new dracoEncoder.Encoder();
|
|
45
40
|
let builder;
|
|
46
41
|
let dracoObject;
|
|
47
|
-
|
|
48
|
-
if ( geometry.isBufferGeometry !== true ) {
|
|
49
|
-
|
|
50
|
-
throw new Error( 'THREE.DRACOExporter.parse(geometry, options): geometry is not a THREE.BufferGeometry instance.' );
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
42
|
if ( object.isMesh === true ) {
|
|
55
43
|
|
|
56
44
|
builder = new dracoEncoder.MeshBuilder();
|
|
@@ -58,7 +46,6 @@
|
|
|
58
46
|
const vertices = geometry.getAttribute( 'position' );
|
|
59
47
|
builder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array );
|
|
60
48
|
const faces = geometry.getIndex();
|
|
61
|
-
|
|
62
49
|
if ( faces !== null ) {
|
|
63
50
|
|
|
64
51
|
builder.AddFacesToMesh( dracoObject, faces.count / 3, faces.array );
|
|
@@ -66,7 +53,6 @@
|
|
|
66
53
|
} else {
|
|
67
54
|
|
|
68
55
|
const faces = new ( vertices.count > 65535 ? Uint32Array : Uint16Array )( vertices.count );
|
|
69
|
-
|
|
70
56
|
for ( let i = 0; i < faces.length; i ++ ) {
|
|
71
57
|
|
|
72
58
|
faces[ i ] = i;
|
|
@@ -80,7 +66,6 @@
|
|
|
80
66
|
if ( options.exportNormals === true ) {
|
|
81
67
|
|
|
82
68
|
const normals = geometry.getAttribute( 'normal' );
|
|
83
|
-
|
|
84
69
|
if ( normals !== undefined ) {
|
|
85
70
|
|
|
86
71
|
builder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.NORMAL, normals.count, normals.itemSize, normals.array );
|
|
@@ -92,7 +77,6 @@
|
|
|
92
77
|
if ( options.exportUvs === true ) {
|
|
93
78
|
|
|
94
79
|
const uvs = geometry.getAttribute( 'uv' );
|
|
95
|
-
|
|
96
80
|
if ( uvs !== undefined ) {
|
|
97
81
|
|
|
98
82
|
builder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.TEX_COORD, uvs.count, uvs.itemSize, uvs.array );
|
|
@@ -104,7 +88,6 @@
|
|
|
104
88
|
if ( options.exportColor === true ) {
|
|
105
89
|
|
|
106
90
|
const colors = geometry.getAttribute( 'color' );
|
|
107
|
-
|
|
108
91
|
if ( colors !== undefined ) {
|
|
109
92
|
|
|
110
93
|
builder.AddFloatAttributeToMesh( dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, colors.array );
|
|
@@ -119,11 +102,9 @@
|
|
|
119
102
|
dracoObject = new dracoEncoder.PointCloud();
|
|
120
103
|
const vertices = geometry.getAttribute( 'position' );
|
|
121
104
|
builder.AddFloatAttribute( dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array );
|
|
122
|
-
|
|
123
105
|
if ( options.exportColor === true ) {
|
|
124
106
|
|
|
125
107
|
const colors = geometry.getAttribute( 'color' );
|
|
126
|
-
|
|
127
108
|
if ( colors !== undefined ) {
|
|
128
109
|
|
|
129
110
|
builder.AddFloatAttribute( dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, colors.array );
|
|
@@ -136,23 +117,28 @@
|
|
|
136
117
|
|
|
137
118
|
throw new Error( 'DRACOExporter: Unsupported object type.' );
|
|
138
119
|
|
|
139
|
-
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
//Compress using draco encoder
|
|
140
123
|
|
|
124
|
+
const encodedData = new dracoEncoder.DracoInt8Array();
|
|
141
125
|
|
|
142
|
-
|
|
126
|
+
//Sets the desired encoding and decoding speed for the given options from 0 (slowest speed, but the best compression) to 10 (fastest, but the worst compression).
|
|
143
127
|
|
|
144
128
|
const encodeSpeed = options.encodeSpeed !== undefined ? options.encodeSpeed : 5;
|
|
145
129
|
const decodeSpeed = options.decodeSpeed !== undefined ? options.decodeSpeed : 5;
|
|
146
|
-
encoder.SetSpeedOptions( encodeSpeed, decodeSpeed );
|
|
130
|
+
encoder.SetSpeedOptions( encodeSpeed, decodeSpeed );
|
|
131
|
+
|
|
132
|
+
// Sets the desired encoding method for a given geometry.
|
|
147
133
|
|
|
148
134
|
if ( options.encoderMethod !== undefined ) {
|
|
149
135
|
|
|
150
136
|
encoder.SetEncodingMethod( options.encoderMethod );
|
|
151
137
|
|
|
152
|
-
}
|
|
153
|
-
// The attribute values will be quantized in a box defined by the maximum extent of the attribute values.
|
|
154
|
-
|
|
138
|
+
}
|
|
155
139
|
|
|
140
|
+
// Sets the quantization (number of bits used to represent) compression options for a named attribute.
|
|
141
|
+
// The attribute values will be quantized in a box defined by the maximum extent of the attribute values.
|
|
156
142
|
if ( options.quantization !== undefined ) {
|
|
157
143
|
|
|
158
144
|
for ( let i = 0; i < 5; i ++ ) {
|
|
@@ -168,7 +154,6 @@
|
|
|
168
154
|
}
|
|
169
155
|
|
|
170
156
|
let length;
|
|
171
|
-
|
|
172
157
|
if ( object.isMesh === true ) {
|
|
173
158
|
|
|
174
159
|
length = encoder.EncodeMeshToDracoBuffer( dracoObject, encodedData );
|
|
@@ -180,16 +165,14 @@
|
|
|
180
165
|
}
|
|
181
166
|
|
|
182
167
|
dracoEncoder.destroy( dracoObject );
|
|
183
|
-
|
|
184
168
|
if ( length === 0 ) {
|
|
185
169
|
|
|
186
170
|
throw new Error( 'THREE.DRACOExporter: Draco encoding failed.' );
|
|
187
171
|
|
|
188
|
-
}
|
|
189
|
-
|
|
172
|
+
}
|
|
190
173
|
|
|
174
|
+
//Copy encoded data to buffer.
|
|
191
175
|
const outputData = new Int8Array( new ArrayBuffer( length ) );
|
|
192
|
-
|
|
193
176
|
for ( let i = 0; i < length; i ++ ) {
|
|
194
177
|
|
|
195
178
|
outputData[ i ] = encodedData.GetValue( i );
|
|
@@ -203,14 +186,19 @@
|
|
|
203
186
|
|
|
204
187
|
}
|
|
205
188
|
|
|
206
|
-
}
|
|
189
|
+
}
|
|
207
190
|
|
|
191
|
+
// Encoder methods
|
|
208
192
|
|
|
209
193
|
DRACOExporter.MESH_EDGEBREAKER_ENCODING = 1;
|
|
210
|
-
DRACOExporter.MESH_SEQUENTIAL_ENCODING = 0;
|
|
194
|
+
DRACOExporter.MESH_SEQUENTIAL_ENCODING = 0;
|
|
195
|
+
|
|
196
|
+
// Geometry type
|
|
211
197
|
|
|
212
198
|
DRACOExporter.POINT_CLOUD = 0;
|
|
213
|
-
DRACOExporter.TRIANGULAR_MESH = 1;
|
|
199
|
+
DRACOExporter.TRIANGULAR_MESH = 1;
|
|
200
|
+
|
|
201
|
+
// Attribute type
|
|
214
202
|
|
|
215
203
|
DRACOExporter.INVALID = - 1;
|
|
216
204
|
DRACOExporter.POSITION = 0;
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
const NO_COMPRESSION = 0;
|
|
11
11
|
const ZIPS_COMPRESSION = 2;
|
|
12
12
|
const ZIP_COMPRESSION = 3;
|
|
13
|
-
|
|
14
13
|
class EXRExporter {
|
|
15
14
|
|
|
16
15
|
parse( renderer, renderTarget, options ) {
|
|
@@ -25,7 +24,6 @@
|
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
}
|
|
28
|
-
|
|
29
27
|
function supported( renderer, renderTarget ) {
|
|
30
28
|
|
|
31
29
|
if ( ! renderer || ! renderer.isWebGLRenderer ) {
|
|
@@ -97,7 +95,6 @@
|
|
|
97
95
|
function getPixelData( renderer, rtt, info ) {
|
|
98
96
|
|
|
99
97
|
let dataBuffer;
|
|
100
|
-
|
|
101
98
|
if ( info.type === THREE.FloatType ) {
|
|
102
99
|
|
|
103
100
|
dataBuffer = new Float32Array( info.width * info.height * info.numInputChannels );
|
|
@@ -131,7 +128,6 @@
|
|
|
131
128
|
setValue = info.dataType == 1 ? setFloat16 : setFloat32,
|
|
132
129
|
outBuffer = new Uint8Array( info.width * info.height * info.numOutputChannels * info.dataSize ),
|
|
133
130
|
dv = new DataView( outBuffer.buffer );
|
|
134
|
-
|
|
135
131
|
for ( let y = 0; y < h; ++ y ) {
|
|
136
132
|
|
|
137
133
|
for ( let x = 0; x < w; ++ x ) {
|
|
@@ -170,13 +166,11 @@
|
|
|
170
166
|
totalSize: 0
|
|
171
167
|
},
|
|
172
168
|
size = info.width * info.numOutputChannels * info.blockLines * info.dataSize;
|
|
173
|
-
|
|
174
169
|
switch ( info.compression ) {
|
|
175
170
|
|
|
176
171
|
case 0:
|
|
177
172
|
compress = compressNONE;
|
|
178
173
|
break;
|
|
179
|
-
|
|
180
174
|
case 2:
|
|
181
175
|
case 3:
|
|
182
176
|
compress = compressZIP;
|
|
@@ -218,11 +212,11 @@
|
|
|
218
212
|
//
|
|
219
213
|
// Reorder the pixel data.
|
|
220
214
|
//
|
|
215
|
+
|
|
221
216
|
let t1 = 0,
|
|
222
217
|
t2 = Math.floor( ( data.length + 1 ) / 2 ),
|
|
223
218
|
s = 0;
|
|
224
219
|
const stop = data.length - 1;
|
|
225
|
-
|
|
226
220
|
while ( true ) {
|
|
227
221
|
|
|
228
222
|
if ( s > stop ) break;
|
|
@@ -230,13 +224,13 @@
|
|
|
230
224
|
if ( s > stop ) break;
|
|
231
225
|
tmpBuffer[ t2 ++ ] = data[ s ++ ];
|
|
232
226
|
|
|
233
|
-
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
//
|
|
234
230
|
// Predictor.
|
|
235
231
|
//
|
|
236
232
|
|
|
237
|
-
|
|
238
233
|
let p = tmpBuffer[ 0 ];
|
|
239
|
-
|
|
240
234
|
for ( let t = 1; t < tmpBuffer.length; t ++ ) {
|
|
241
235
|
|
|
242
236
|
const d = tmpBuffer[ t ] - p + ( 128 + 256 );
|
|
@@ -264,8 +258,8 @@
|
|
|
264
258
|
};
|
|
265
259
|
const dv = new DataView( outBuffer.buffer );
|
|
266
260
|
setUint32( dv, 20000630, offset ); // magic
|
|
267
|
-
|
|
268
261
|
setUint32( dv, 2, offset ); // mask
|
|
262
|
+
|
|
269
263
|
// = HEADER =
|
|
270
264
|
|
|
271
265
|
setString( dv, 'compression', offset );
|
|
@@ -326,12 +320,14 @@
|
|
|
326
320
|
offset.value += 4;
|
|
327
321
|
setUint32( dv, 1, offset );
|
|
328
322
|
setUint32( dv, 1, offset );
|
|
329
|
-
setUint8( dv, 0, offset );
|
|
323
|
+
setUint8( dv, 0, offset );
|
|
330
324
|
|
|
331
|
-
|
|
325
|
+
// null-byte
|
|
326
|
+
setUint8( dv, 0, offset );
|
|
332
327
|
|
|
333
|
-
|
|
328
|
+
// = OFFSET TABLE =
|
|
334
329
|
|
|
330
|
+
let sum = offset.value + info.numBlocks * 8;
|
|
335
331
|
for ( let i = 0; i < chunks.data.length; ++ i ) {
|
|
336
332
|
|
|
337
333
|
setUint64( dv, sum, offset );
|
|
@@ -352,7 +348,6 @@
|
|
|
352
348
|
outBuffer = new Uint8Array( HeaderSize + TableSize + chunks.totalSize + info.numBlocks * 8 ),
|
|
353
349
|
dv = new DataView( outBuffer.buffer );
|
|
354
350
|
fillHeader( outBuffer, chunks, info );
|
|
355
|
-
|
|
356
351
|
for ( let i = 0; i < chunks.data.length; ++ i ) {
|
|
357
352
|
|
|
358
353
|
const data = chunks.data[ i ].dataChunk;
|
|
@@ -375,13 +370,16 @@
|
|
|
375
370
|
dec.b = b;
|
|
376
371
|
dec.a = a;
|
|
377
372
|
|
|
378
|
-
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// function decodeSRGB( dec, r, g, b, a ) {
|
|
376
|
+
|
|
379
377
|
// dec.r = r > 0.04045 ? Math.pow( r * 0.9478672986 + 0.0521327014, 2.4 ) : r * 0.0773993808;
|
|
380
378
|
// dec.g = g > 0.04045 ? Math.pow( g * 0.9478672986 + 0.0521327014, 2.4 ) : g * 0.0773993808;
|
|
381
379
|
// dec.b = b > 0.04045 ? Math.pow( b * 0.9478672986 + 0.0521327014, 2.4 ) : b * 0.0773993808;
|
|
382
380
|
// dec.a = a;
|
|
383
|
-
// }
|
|
384
381
|
|
|
382
|
+
// }
|
|
385
383
|
|
|
386
384
|
function setUint8( dv, value, offset ) {
|
|
387
385
|
|
|
@@ -421,7 +419,6 @@
|
|
|
421
419
|
function setString( dv, string, offset ) {
|
|
422
420
|
|
|
423
421
|
const tmp = textEncoder.encode( string + '\0' );
|
|
424
|
-
|
|
425
422
|
for ( let i = 0; i < tmp.length; ++ i ) {
|
|
426
423
|
|
|
427
424
|
setUint8( dv, tmp[ i ], offset );
|