@needle-tools/three 0.146.9 → 0.153.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/LICENSE +1 -1
- package/build/three.cjs +39486 -20286
- package/build/three.js +39471 -20270
- package/build/three.min.js +3 -2
- package/build/three.module.js +6717 -5427
- package/build/three.module.min.js +6 -0
- package/examples/jsm/animation/AnimationClipCreator.js +5 -3
- package/examples/jsm/cameras/CinematicCamera.js +1 -2
- package/examples/jsm/capabilities/WebGPU.js +17 -5
- package/examples/jsm/controls/ArcballControls.js +1828 -1821
- package/examples/jsm/controls/MapControls.js +28 -0
- package/examples/jsm/controls/OrbitControls.js +25 -46
- package/examples/jsm/controls/PointerLockControls.js +70 -65
- package/examples/jsm/controls/TrackballControls.js +18 -4
- package/examples/jsm/controls/TransformControls.js +0 -1
- package/examples/jsm/csm/CSM.js +11 -5
- package/examples/jsm/csm/CSMShader.js +7 -6
- package/examples/jsm/effects/AnaglyphEffect.js +6 -20
- package/examples/jsm/effects/AsciiEffect.js +3 -6
- package/examples/jsm/effects/OutlineEffect.js +1 -15
- package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +53 -11
- package/examples/jsm/exporters/EXRExporter.js +3 -9
- package/examples/jsm/exporters/GLTFExporter.js +561 -154
- package/examples/jsm/exporters/KTX2Exporter.js +34 -23
- package/examples/jsm/exporters/MMDExporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +8 -1
- package/examples/jsm/exporters/STLExporter.js +8 -4
- package/examples/jsm/exporters/USDZExporter.js +305 -792
- package/examples/jsm/geometries/ConvexGeometry.js +0 -6
- package/examples/jsm/geometries/ParametricGeometry.js +10 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +71 -57
- package/examples/jsm/interactive/HTMLMesh.js +16 -3
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/{js → jsm}/libs/basis/README.md +4 -4
- package/examples/jsm/libs/draco/draco_decoder.js +34 -0
- package/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
- package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
- package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -0
- package/examples/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/examples/jsm/libs/lil-gui.module.min.js +2 -2
- package/examples/jsm/libs/tween.module.js +803 -0
- package/examples/jsm/lights/IESSpotLight.js +25 -0
- package/examples/jsm/lights/LightProbeGenerator.js +11 -9
- package/examples/jsm/lines/LineSegments2.js +16 -10
- package/examples/jsm/loaders/3DMLoader.js +8 -5
- package/examples/jsm/loaders/3MFLoader.js +12 -11
- package/examples/jsm/loaders/AMFLoader.js +2 -3
- package/examples/jsm/loaders/BVHLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +15 -16
- package/examples/jsm/loaders/DRACOLoader.js +69 -18
- package/examples/jsm/loaders/EXRLoader.js +23 -24
- package/examples/jsm/loaders/FBXLoader.js +34 -50
- package/examples/jsm/loaders/GCodeLoader.js +1 -2
- package/examples/jsm/loaders/GLTFLoader.js +417 -895
- package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +684 -0
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +4 -4
- package/examples/jsm/loaders/IESLoader.js +337 -0
- package/examples/jsm/loaders/KMZLoader.js +4 -4
- package/examples/jsm/loaders/KTX2Loader.js +145 -69
- package/examples/jsm/loaders/LDrawLoader.js +20 -18
- package/examples/jsm/loaders/LWOLoader.js +12 -29
- package/examples/jsm/loaders/LottieLoader.js +3 -1
- package/examples/jsm/loaders/MMDLoader.js +49 -18
- package/examples/jsm/loaders/MTLLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +9 -3
- package/examples/jsm/loaders/NRRDLoader.js +33 -5
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +26 -12
- package/examples/jsm/loaders/PDBLoader.js +7 -2
- package/examples/jsm/loaders/PLYLoader.js +254 -109
- package/examples/jsm/loaders/RGBELoader.js +3 -3
- package/examples/jsm/loaders/STLLoader.js +9 -5
- package/examples/jsm/loaders/SVGLoader.js +36 -27
- package/examples/jsm/loaders/TTFLoader.js +1 -8
- package/examples/jsm/loaders/TiltLoader.js +13 -7
- package/examples/jsm/loaders/USDZLoader.js +6 -6
- package/examples/jsm/loaders/VOXLoader.js +8 -2
- package/examples/jsm/loaders/VRMLLoader.js +44 -16
- package/examples/jsm/loaders/VTKLoader.js +19 -10
- package/examples/jsm/loaders/XYZLoader.js +9 -3
- package/examples/jsm/loaders/lwo/IFFParser.js +19 -19
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -3
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/Lut.js +5 -4
- package/examples/jsm/math/MeshSurfaceSampler.js +7 -9
- package/examples/jsm/math/Octree.js +1 -1
- package/examples/jsm/misc/ConvexObjectBreaker.js +2 -8
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -5
- package/examples/jsm/misc/MD2Character.js +2 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +2 -2
- package/examples/jsm/misc/ProgressiveLightMap.js +12 -10
- package/examples/jsm/misc/RollerCoaster.js +7 -1
- package/examples/jsm/misc/Volume.js +20 -5
- package/examples/jsm/misc/VolumeSlice.js +3 -1
- package/examples/jsm/modifiers/CurveModifier.js +1 -0
- package/examples/jsm/modifiers/TessellateModifier.js +19 -19
- package/examples/jsm/nodes/Nodes.js +144 -335
- package/examples/jsm/nodes/accessors/BitangentNode.js +43 -16
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +86 -0
- package/examples/jsm/nodes/accessors/BufferNode.js +6 -0
- package/examples/jsm/nodes/accessors/CameraNode.js +12 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +27 -33
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +58 -0
- package/examples/jsm/nodes/accessors/InstanceNode.js +41 -26
- package/examples/jsm/nodes/accessors/MaterialNode.js +155 -38
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +16 -0
- package/examples/jsm/nodes/accessors/ModelNode.js +11 -0
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +13 -14
- package/examples/jsm/nodes/accessors/NormalNode.js +35 -19
- package/examples/jsm/nodes/accessors/Object3DNode.js +32 -12
- package/examples/jsm/nodes/accessors/PointUVNode.js +6 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +38 -23
- package/examples/jsm/nodes/accessors/ReferenceNode.js +21 -14
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +11 -7
- package/examples/jsm/nodes/accessors/SkinningNode.js +43 -40
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +6 -0
- package/examples/jsm/nodes/accessors/TangentNode.js +28 -20
- package/examples/jsm/nodes/accessors/TextureNode.js +80 -12
- package/examples/jsm/nodes/accessors/UVNode.js +6 -0
- package/examples/jsm/nodes/accessors/UserDataNode.js +6 -0
- package/examples/jsm/nodes/code/CodeNode.js +75 -0
- package/examples/jsm/nodes/code/ExpressionNode.js +37 -0
- package/examples/jsm/nodes/{core → code}/FunctionCallNode.js +15 -1
- package/examples/jsm/nodes/{core → code}/FunctionNode.js +8 -7
- package/examples/jsm/nodes/code/ScriptableNode.js +488 -0
- package/examples/jsm/nodes/code/ScriptableValueNode.js +167 -0
- package/examples/jsm/nodes/core/ArrayUniformNode.js +3 -0
- package/examples/jsm/nodes/core/AttributeNode.js +17 -9
- package/examples/jsm/nodes/core/BypassNode.js +9 -2
- package/examples/jsm/nodes/core/CacheNode.js +46 -0
- package/examples/jsm/nodes/core/ConstNode.js +3 -0
- package/examples/jsm/nodes/core/ContextNode.js +8 -1
- package/examples/jsm/nodes/core/InputNode.js +26 -5
- package/examples/jsm/nodes/core/InstanceIndexNode.js +26 -2
- package/examples/jsm/nodes/core/LightingModel.js +16 -0
- package/examples/jsm/nodes/core/Node.js +129 -35
- package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +271 -121
- package/examples/jsm/nodes/core/NodeCache.js +26 -0
- package/examples/jsm/nodes/core/NodeFrame.js +56 -5
- package/examples/jsm/nodes/core/NodeUtils.js +115 -28
- package/examples/jsm/nodes/core/PropertyNode.js +19 -2
- package/examples/jsm/nodes/core/StackNode.js +99 -0
- package/examples/jsm/nodes/core/TempNode.js +11 -3
- package/examples/jsm/nodes/core/UniformNode.js +16 -1
- package/examples/jsm/nodes/core/VarNode.js +21 -29
- package/examples/jsm/nodes/core/VaryingNode.js +15 -2
- package/examples/jsm/nodes/core/constants.js +6 -0
- package/examples/jsm/nodes/display/BlendModeNode.js +25 -11
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +30 -14
- package/examples/jsm/nodes/display/ColorSpaceNode.js +39 -27
- package/examples/jsm/nodes/display/FrontFacingNode.js +7 -1
- package/examples/jsm/nodes/display/NormalMapNode.js +31 -18
- package/examples/jsm/nodes/display/PosterizeNode.js +10 -3
- package/examples/jsm/nodes/display/ToneMappingNode.js +101 -11
- package/examples/jsm/nodes/display/ViewportNode.js +27 -18
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +30 -0
- package/examples/jsm/nodes/display/ViewportTextureNode.js +67 -0
- package/examples/jsm/nodes/fog/FogExp2Node.js +35 -0
- package/examples/jsm/nodes/fog/FogNode.js +12 -6
- package/examples/jsm/nodes/fog/FogRangeNode.js +12 -5
- package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +30 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -13
- package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -6
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +4 -4
- package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +3 -3
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +7 -5
- package/examples/jsm/nodes/functions/PhongLightingModel.js +28 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +35 -36
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +4 -3
- package/examples/jsm/nodes/functions/material/getRoughness.js +4 -4
- package/examples/jsm/nodes/geometry/RangeNode.js +50 -55
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +9 -2
- package/examples/jsm/nodes/lighting/AONode.js +5 -3
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +27 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +114 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +43 -0
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +121 -35
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +15 -10
- package/examples/jsm/nodes/lighting/IESSpotLightNode.js +39 -0
- package/examples/jsm/nodes/lighting/LightNode.js +57 -0
- package/examples/jsm/nodes/lighting/LightUtils.js +17 -0
- package/examples/jsm/nodes/lighting/LightingContextNode.js +30 -8
- package/examples/jsm/nodes/lighting/LightingNode.js +3 -1
- package/examples/jsm/nodes/lighting/LightsNode.js +18 -10
- package/examples/jsm/nodes/lighting/PointLightNode.js +71 -0
- package/examples/jsm/nodes/lighting/SpotLightNode.js +92 -0
- package/examples/jsm/nodes/loaders/NodeLoader.js +5 -4
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +4 -20
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +6 -9
- package/examples/jsm/nodes/materials/Materials.js +11 -55
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +5 -11
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +48 -0
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +74 -0
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +21 -96
- package/examples/jsm/nodes/materials/NodeMaterial.js +284 -62
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +7 -1
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +29 -25
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +31 -22
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +1 -1
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +2 -1
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +2 -1
- package/examples/jsm/nodes/math/CondNode.js +43 -17
- package/examples/jsm/nodes/math/MathNode.js +178 -73
- package/examples/jsm/nodes/math/OperatorNode.js +52 -2
- package/examples/jsm/nodes/procedural/CheckerNode.js +14 -6
- package/examples/jsm/nodes/shadernode/ShaderNode.js +186 -63
- package/examples/jsm/nodes/utils/ArrayElementNode.js +4 -2
- package/examples/jsm/nodes/utils/ConvertNode.js +19 -1
- package/examples/jsm/nodes/utils/DiscardNode.js +26 -0
- package/examples/jsm/nodes/utils/EquirectUVNode.js +10 -4
- package/examples/jsm/nodes/utils/JoinNode.js +4 -1
- package/examples/jsm/nodes/utils/LoopNode.js +186 -0
- package/examples/jsm/nodes/utils/MatcapUVNode.js +11 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +18 -5
- package/examples/jsm/nodes/utils/OscNode.js +21 -14
- package/examples/jsm/nodes/utils/PackingNode.js +55 -0
- package/examples/jsm/nodes/utils/RemapNode.js +13 -5
- package/examples/jsm/nodes/utils/RotateUVNode.js +18 -7
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +37 -0
- package/examples/jsm/nodes/utils/SplitNode.js +7 -5
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +15 -30
- package/examples/jsm/nodes/utils/TimerNode.js +16 -6
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +21 -10
- package/examples/jsm/objects/GroundProjectedSkybox.js +172 -0
- package/examples/jsm/objects/Lensflare.js +3 -4
- package/examples/jsm/objects/MarchingCubes.js +5 -1
- package/examples/jsm/objects/Reflector.js +7 -4
- package/examples/jsm/objects/Refractor.js +4 -4
- package/examples/jsm/objects/ShadowMesh.js +3 -3
- package/examples/jsm/objects/Water.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +27 -28
- package/examples/jsm/physics/RapierPhysics.js +199 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +3 -2
- package/examples/jsm/postprocessing/BloomPass.js +7 -4
- package/examples/jsm/postprocessing/BokehPass.js +3 -8
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -2
- package/examples/jsm/postprocessing/EffectComposer.js +5 -95
- package/examples/jsm/postprocessing/FilmPass.js +1 -2
- package/examples/jsm/postprocessing/GlitchPass.js +0 -2
- package/examples/jsm/postprocessing/HalftonePass.js +0 -6
- package/examples/jsm/postprocessing/OutlinePass.js +7 -7
- package/examples/jsm/postprocessing/OutputPass.js +72 -0
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +4 -26
- package/examples/jsm/postprocessing/SMAAPass.js +5 -8
- package/examples/jsm/postprocessing/SSAARenderPass.js +15 -6
- package/examples/jsm/postprocessing/SSAOPass.js +4 -14
- package/examples/jsm/postprocessing/SSRPass.js +3 -7
- package/examples/jsm/postprocessing/SavePass.js +2 -3
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +3 -2
- package/examples/jsm/postprocessing/TexturePass.js +0 -2
- package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -11
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +27 -5
- package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +4 -4
- package/examples/jsm/renderers/common/Attributes.js +75 -0
- package/examples/jsm/renderers/common/Backend.js +160 -0
- package/examples/jsm/renderers/common/Background.js +133 -0
- package/examples/jsm/renderers/common/Binding.js +11 -0
- package/examples/jsm/renderers/common/Bindings.js +169 -0
- package/examples/jsm/renderers/common/Buffer.js +38 -0
- package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
- package/examples/jsm/renderers/common/ChainMap.js +89 -0
- package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
- package/examples/jsm/renderers/common/Constants.js +14 -0
- package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
- package/examples/jsm/renderers/common/DataMap.js +54 -0
- package/examples/jsm/renderers/common/Geometries.js +215 -0
- package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
- package/examples/jsm/renderers/common/Pipeline.js +13 -0
- package/examples/jsm/renderers/common/Pipelines.js +309 -0
- package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
- package/examples/jsm/renderers/common/RenderContext.js +37 -0
- package/examples/jsm/renderers/common/RenderContexts.js +38 -0
- package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +26 -47
- package/examples/jsm/renderers/common/RenderLists.js +38 -0
- package/examples/jsm/renderers/common/RenderObject.js +95 -0
- package/examples/jsm/renderers/common/RenderObjects.js +92 -0
- package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
- package/examples/jsm/renderers/common/RenderTarget.js +15 -0
- package/examples/jsm/renderers/common/Renderer.js +822 -0
- package/examples/jsm/renderers/common/SampledTexture.js +80 -0
- package/examples/jsm/renderers/common/Sampler.js +18 -0
- package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
- package/examples/jsm/renderers/common/Textures.js +206 -0
- package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
- package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
- package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
- package/examples/jsm/renderers/common/nodes/NodeRender.js +302 -0
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
- package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +35 -31
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +765 -0
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -987
- package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +117 -90
- package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
- package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +251 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
- package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +73 -12
- package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +135 -285
- package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +5 -25
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +855 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +88 -0
- package/examples/jsm/shaders/BleachBypassShader.js +2 -0
- package/examples/jsm/shaders/BokehShader2.js +3 -0
- package/examples/jsm/shaders/ColorifyShader.js +2 -0
- package/examples/jsm/shaders/ConvolutionShader.js +2 -0
- package/examples/jsm/shaders/CopyShader.js +2 -0
- package/examples/jsm/shaders/DotScreenShader.js +2 -0
- package/examples/jsm/shaders/ExposureShader.js +44 -0
- package/examples/jsm/shaders/FilmShader.js +2 -0
- package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
- package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +15 -4
- package/examples/jsm/shaders/OutputShader.js +61 -0
- package/examples/jsm/shaders/RGBShiftShader.js +4 -2
- package/examples/jsm/shaders/SepiaShader.js +2 -0
- package/examples/jsm/shaders/ToonShader.js +13 -5
- package/examples/jsm/shaders/VelocityShader.js +1 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
- package/examples/jsm/shaders/VignetteShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +54 -36
- package/examples/jsm/utils/LDrawUtils.js +4 -4
- package/examples/jsm/utils/PackedPhongMaterial.js +5 -78
- package/examples/jsm/utils/SceneUtils.js +8 -4
- package/examples/jsm/utils/SkeletonUtils.js +27 -210
- package/examples/jsm/utils/TextureUtils.js +41 -40
- package/examples/jsm/webxr/VRButton.js +1 -2
- package/examples/jsm/webxr/XRButton.js +198 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
- package/examples/jsm/webxr/XRPlanes.js +100 -0
- package/package.json +34 -87
- package/src/Three.Legacy.js +19 -110
- package/src/Three.js +4 -3
- package/src/animation/AnimationUtils.js +13 -1
- package/src/audio/Audio.js +7 -2
- package/src/audio/PositionalAudio.js +8 -0
- package/src/cameras/Camera.js +5 -0
- package/src/cameras/CubeCamera.js +76 -13
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +22 -2
- package/src/core/BufferAttribute.js +150 -9
- package/src/core/BufferGeometry.js +4 -10
- package/src/core/GLBufferAttribute.js +2 -0
- package/src/core/InterleavedBufferAttribute.js +5 -5
- package/src/core/Object3D.js +37 -8
- package/src/extras/DataUtils.js +7 -1
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +5 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/curves/LineCurve.js +6 -4
- package/src/extras/curves/LineCurve3.js +13 -0
- package/src/geometries/BoxGeometry.js +10 -0
- package/src/geometries/CircleGeometry.js +11 -1
- package/src/geometries/ConeGeometry.js +1 -1
- package/src/geometries/CylinderGeometry.js +11 -1
- package/src/geometries/EdgesGeometry.js +10 -0
- package/src/geometries/ExtrudeGeometry.js +11 -1
- package/src/geometries/LatheGeometry.js +10 -0
- package/src/geometries/PlaneGeometry.js +10 -0
- package/src/geometries/PolyhedronGeometry.js +11 -1
- package/src/geometries/RingGeometry.js +11 -1
- package/src/geometries/ShapeGeometry.js +11 -1
- package/src/geometries/SphereGeometry.js +12 -2
- package/src/geometries/TorusGeometry.js +11 -1
- package/src/geometries/TorusKnotGeometry.js +10 -0
- package/src/geometries/TubeGeometry.js +10 -0
- package/src/geometries/WireframeGeometry.js +10 -0
- package/src/helpers/Box3Helper.js +1 -2
- package/src/lights/DirectionalLight.js +1 -1
- package/src/lights/HemisphereLight.js +1 -1
- package/src/lights/SpotLight.js +1 -1
- package/src/loaders/AudioLoader.js +14 -8
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +5 -1
- package/src/loaders/MaterialLoader.js +8 -0
- package/src/loaders/ObjectLoader.js +10 -2
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +16 -4
- package/src/materials/MeshDistanceMaterial.js +0 -9
- package/src/materials/MeshPhysicalMaterial.js +32 -6
- package/src/materials/ShaderMaterial.js +6 -1
- package/src/math/Box2.js +3 -2
- package/src/math/Box3.js +49 -64
- package/src/math/Color.js +88 -66
- package/src/math/ColorManagement.js +75 -16
- package/src/math/Euler.js +2 -11
- package/src/math/Frustum.js +29 -5
- package/src/math/MathUtils.js +43 -1
- package/src/math/Matrix3.js +26 -6
- package/src/math/Matrix4.js +74 -19
- package/src/math/Plane.js +2 -2
- package/src/math/Quaternion.js +6 -0
- package/src/math/Ray.js +7 -7
- package/src/math/Triangle.js +37 -7
- package/src/math/Vector2.js +16 -0
- package/src/math/Vector3.js +10 -0
- package/src/math/interpolants/CubicInterpolant.js +1 -2
- package/src/objects/InstancedMesh.js +82 -1
- package/src/objects/Mesh.js +108 -76
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/SkinnedMesh.js +123 -8
- package/src/objects/Sprite.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +12 -3
- package/src/renderers/WebGLMultipleRenderTargets.js +4 -2
- package/src/renderers/WebGLRenderTarget.js +14 -2
- package/src/renderers/WebGLRenderer.js +1433 -1236
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +0 -271
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +32 -0
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +10 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +39 -13
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +306 -10
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +9 -1
- package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +10 -2
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +32 -10
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -13
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +11 -5
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +4 -11
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +39 -34
- package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +101 -16
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +113 -1
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +134 -6
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +116 -1
- package/src/renderers/shaders/ShaderChunk.js +0 -6
- package/src/renderers/shaders/ShaderLib/background.glsl.js +0 -8
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +5 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -4
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -3
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +3 -3
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -3
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +16 -12
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -3
- package/src/renderers/shaders/ShaderLib/points.glsl.js +13 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +5 -0
- package/src/renderers/shaders/ShaderLib.js +18 -4
- package/src/renderers/shaders/UniformsLib.js +27 -15
- package/src/renderers/shaders/UniformsUtils.js +12 -3
- package/src/renderers/webgl/WebGLBackground.js +23 -12
- package/src/renderers/webgl/WebGLBindingStates.js +13 -5
- package/src/renderers/webgl/WebGLCapabilities.js +1 -2
- package/src/renderers/webgl/WebGLClipping.js +7 -3
- package/src/renderers/webgl/WebGLGeometries.js +12 -0
- package/src/renderers/webgl/WebGLInfo.js +0 -1
- package/src/renderers/webgl/WebGLLights.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +123 -234
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -1
- package/src/renderers/webgl/WebGLProgram.js +130 -48
- package/src/renderers/webgl/WebGLPrograms.js +210 -130
- package/src/renderers/webgl/WebGLRenderStates.js +2 -2
- package/src/renderers/webgl/WebGLShadowMap.js +40 -27
- package/src/renderers/webgl/WebGLState.js +23 -9
- package/src/renderers/webgl/WebGLTextures.js +39 -19
- package/src/renderers/webgl/WebGLUniformsGroups.js +74 -33
- package/src/renderers/webgl/WebGLUtils.js +41 -29
- package/src/renderers/webxr/WebXRController.js +3 -0
- package/src/renderers/webxr/WebXRManager.js +85 -141
- package/src/scenes/Scene.js +4 -6
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/CubeTexture.js +2 -2
- package/src/textures/DataTexture.js +2 -2
- package/src/textures/DepthTexture.js +22 -0
- package/src/textures/FramebufferTexture.js +1 -3
- package/src/textures/Source.js +4 -0
- package/src/textures/Texture.js +43 -13
- package/src/utils.js +13 -1
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
- package/examples/fonts/open-sans/open-sans.css +0 -9
- package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +0 -3966
- package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
- package/examples/fonts/tabler-icons/tabler-icons.min.css +0 -4
- package/examples/js/animation/AnimationClipCreator.js +0 -89
- package/examples/js/animation/CCDIKSolver.js +0 -416
- package/examples/js/animation/MMDAnimationHelper.js +0 -1046
- package/examples/js/animation/MMDPhysics.js +0 -1174
- package/examples/js/cameras/CinematicCamera.js +0 -168
- package/examples/js/controls/ArcballControls.js +0 -2770
- package/examples/js/controls/DragControls.js +0 -205
- package/examples/js/controls/FirstPersonControls.js +0 -312
- package/examples/js/controls/FlyControls.js +0 -321
- package/examples/js/controls/OrbitControls.js +0 -1065
- package/examples/js/controls/PointerLockControls.js +0 -144
- package/examples/js/controls/TrackballControls.js +0 -729
- package/examples/js/controls/TransformControls.js +0 -1301
- package/examples/js/csm/CSM.js +0 -347
- package/examples/js/csm/CSMFrustum.js +0 -127
- package/examples/js/csm/CSMHelper.js +0 -165
- package/examples/js/csm/CSMShader.js +0 -253
- package/examples/js/curves/CurveExtras.js +0 -348
- package/examples/js/curves/NURBSCurve.js +0 -63
- package/examples/js/curves/NURBSSurface.js +0 -48
- package/examples/js/curves/NURBSUtils.js +0 -439
- package/examples/js/effects/AnaglyphEffect.js +0 -86
- package/examples/js/effects/AsciiEffect.js +0 -260
- package/examples/js/effects/OutlineEffect.js +0 -450
- package/examples/js/effects/ParallaxBarrierEffect.js +0 -62
- package/examples/js/effects/PeppersGhostEffect.js +0 -139
- package/examples/js/effects/StereoEffect.js +0 -46
- package/examples/js/environments/DebugEnvironment.js +0 -53
- package/examples/js/environments/RoomEnvironment.js +0 -124
- package/examples/js/exporters/ColladaExporter.js +0 -487
- package/examples/js/exporters/DRACOExporter.js +0 -212
- package/examples/js/exporters/EXRExporter.js +0 -455
- package/examples/js/exporters/GLTFExporter.js +0 -2425
- package/examples/js/exporters/MMDExporter.js +0 -187
- package/examples/js/exporters/OBJExporter.js +0 -260
- package/examples/js/exporters/PLYExporter.js +0 -427
- package/examples/js/exporters/STLExporter.js +0 -188
- package/examples/js/exporters/USDZExporter.js +0 -608
- package/examples/js/geometries/BoxLineGeometry.js +0 -59
- package/examples/js/geometries/ConvexGeometry.js +0 -53
- package/examples/js/geometries/DecalGeometry.js +0 -324
- package/examples/js/geometries/LightningStrike.js +0 -861
- package/examples/js/geometries/ParametricGeometries.js +0 -216
- package/examples/js/geometries/ParametricGeometry.js +0 -121
- package/examples/js/geometries/RoundedBoxGeometry.js +0 -142
- package/examples/js/geometries/TeapotGeometry.js +0 -335
- package/examples/js/geometries/TextGeometry.js +0 -53
- package/examples/js/helpers/LightProbeHelper.js +0 -48
- package/examples/js/helpers/OctreeHelper.js +0 -76
- package/examples/js/helpers/PositionalAudioHelper.js +0 -91
- package/examples/js/helpers/RectAreaLightHelper.js +0 -73
- package/examples/js/helpers/VertexNormalsHelper.js +0 -74
- package/examples/js/helpers/VertexTangentsHelper.js +0 -68
- package/examples/js/helpers/ViewHelper.js +0 -281
- package/examples/js/interactive/HTMLMesh.js +0 -497
- package/examples/js/interactive/InteractiveGroup.js +0 -95
- package/examples/js/interactive/SelectionBox.js +0 -195
- package/examples/js/interactive/SelectionHelper.js +0 -83
- package/examples/js/libs/chevrotain.min.js +0 -3
- package/examples/js/libs/draco/draco_decoder.js +0 -52
- package/examples/js/libs/draco/draco_decoder.wasm +0 -0
- package/examples/js/libs/draco/draco_wasm_wrapper.js +0 -104
- package/examples/js/libs/draco/gltf/draco_decoder.js +0 -48
- package/examples/js/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/examples/js/libs/draco/gltf/draco_wasm_wrapper.js +0 -104
- package/examples/js/libs/fflate.min.js +0 -7
- package/examples/js/libs/ktx-parse.umd.js +0 -1
- package/examples/js/libs/meshopt_decoder.js +0 -188
- package/examples/js/libs/opentype.min.js +0 -1
- package/examples/js/libs/stats.min.js +0 -5
- package/examples/js/lights/LightProbeGenerator.js +0 -221
- package/examples/js/lights/RectAreaLightUniformsLib.js +0 -60
- package/examples/js/lines/Line2.js +0 -19
- package/examples/js/lines/LineGeometry.js +0 -69
- package/examples/js/lines/LineMaterial.js +0 -635
- package/examples/js/lines/LineSegments2.js +0 -311
- package/examples/js/lines/LineSegmentsGeometry.js +0 -198
- package/examples/js/lines/Wireframe.js +0 -47
- package/examples/js/lines/WireframeGeometry2.js +0 -20
- package/examples/js/loaders/3DMLoader.js +0 -1273
- package/examples/js/loaders/3MFLoader.js +0 -1306
- package/examples/js/loaders/AMFLoader.js +0 -504
- package/examples/js/loaders/BVHLoader.js +0 -395
- package/examples/js/loaders/BasisTextureLoader.js +0 -706
- package/examples/js/loaders/ColladaLoader.js +0 -3663
- package/examples/js/loaders/DDSLoader.js +0 -244
- package/examples/js/loaders/DRACOLoader.js +0 -511
- package/examples/js/loaders/EXRLoader.js +0 -2039
- package/examples/js/loaders/FBXLoader.js +0 -3680
- package/examples/js/loaders/FontLoader.js +0 -160
- package/examples/js/loaders/GCodeLoader.js +0 -255
- package/examples/js/loaders/GLTFLoader.js +0 -4108
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -87
- package/examples/js/loaders/KMZLoader.js +0 -121
- package/examples/js/loaders/KTXLoader.js +0 -159
- package/examples/js/loaders/LDrawLoader.js +0 -2263
- package/examples/js/loaders/LUT3dlLoader.js +0 -135
- package/examples/js/loaders/LUTCubeLoader.js +0 -132
- package/examples/js/loaders/LWOLoader.js +0 -901
- package/examples/js/loaders/LogLuvLoader.js +0 -715
- package/examples/js/loaders/LottieLoader.js +0 -62
- package/examples/js/loaders/MD2Loader.js +0 -248
- package/examples/js/loaders/MDDLoader.js +0 -91
- package/examples/js/loaders/MMDLoader.js +0 -1915
- package/examples/js/loaders/MTLLoader.js +0 -472
- package/examples/js/loaders/MaterialXLoader.js +0 -392
- package/examples/js/loaders/NRRDLoader.js +0 -609
- package/examples/js/loaders/OBJLoader.js +0 -789
- package/examples/js/loaders/PCDLoader.js +0 -413
- package/examples/js/loaders/PDBLoader.js +0 -317
- package/examples/js/loaders/PLYLoader.js +0 -532
- package/examples/js/loaders/PRWMLoader.js +0 -249
- package/examples/js/loaders/PVRLoader.js +0 -218
- package/examples/js/loaders/RGBELoader.js +0 -442
- package/examples/js/loaders/RGBMLoader.js +0 -1354
- package/examples/js/loaders/STLLoader.js +0 -364
- package/examples/js/loaders/SVGLoader.js +0 -2783
- package/examples/js/loaders/TDSLoader.js +0 -992
- package/examples/js/loaders/TGALoader.js +0 -484
- package/examples/js/loaders/TIFFLoader.js +0 -30
- package/examples/js/loaders/TTFLoader.js +0 -203
- package/examples/js/loaders/TiltLoader.js +0 -459
- package/examples/js/loaders/VOXLoader.js +0 -240
- package/examples/js/loaders/VRMLLoader.js +0 -3140
- package/examples/js/loaders/VTKLoader.js +0 -1078
- package/examples/js/loaders/XYZLoader.js +0 -89
- package/examples/js/loaders/lwo/IFFParser.js +0 -1067
- package/examples/js/loaders/lwo/LWO2Parser.js +0 -397
- package/examples/js/loaders/lwo/LWO3Parser.js +0 -360
- package/examples/js/materials/MeshGouraudMaterial.js +0 -387
- package/examples/js/math/Capsule.js +0 -103
- package/examples/js/math/ColorConverter.js +0 -33
- package/examples/js/math/ConvexHull.js +0 -1154
- package/examples/js/math/ImprovedNoise.js +0 -66
- package/examples/js/math/Lut.js +0 -164
- package/examples/js/math/MeshSurfaceSampler.js +0 -171
- package/examples/js/math/OBB.js +0 -382
- package/examples/js/math/Octree.js +0 -410
- package/examples/js/math/SimplexNoise.js +0 -445
- package/examples/js/misc/ConvexObjectBreaker.js +0 -474
- package/examples/js/misc/GPUComputationRenderer.js +0 -393
- package/examples/js/misc/Gyroscope.js +0 -56
- package/examples/js/misc/MD2Character.js +0 -235
- package/examples/js/misc/MD2CharacterComplex.js +0 -513
- package/examples/js/misc/MorphAnimMesh.js +0 -63
- package/examples/js/misc/MorphBlendMesh.js +0 -265
- package/examples/js/misc/ProgressiveLightMap.js +0 -335
- package/examples/js/misc/RollerCoaster.js +0 -430
- package/examples/js/misc/TubePainter.js +0 -167
- package/examples/js/misc/Volume.js +0 -437
- package/examples/js/misc/VolumeSlice.js +0 -214
- package/examples/js/modifiers/CurveModifier.js +0 -309
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -228
- package/examples/js/modifiers/SimplifyModifier.js +0 -465
- package/examples/js/modifiers/TessellateModifier.js +0 -276
- package/examples/js/objects/GroundProjectedEnv.js +0 -181
- package/examples/js/objects/Lensflare.js +0 -356
- package/examples/js/objects/LightningStorm.js +0 -206
- package/examples/js/objects/MarchingCubes.js +0 -759
- package/examples/js/objects/Reflector.js +0 -216
- package/examples/js/objects/ReflectorForSSRPass.js +0 -315
- package/examples/js/objects/Refractor.js +0 -283
- package/examples/js/objects/ShadowMesh.js +0 -59
- package/examples/js/objects/Sky.js +0 -218
- package/examples/js/objects/Water.js +0 -292
- package/examples/js/objects/Water2.js +0 -307
- package/examples/js/physics/AmmoPhysics.js +0 -259
- package/examples/js/physics/OimoPhysics.js +0 -217
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +0 -335
- package/examples/js/postprocessing/AfterimagePass.js +0 -77
- package/examples/js/postprocessing/BloomPass.js +0 -135
- package/examples/js/postprocessing/BokehPass.js +0 -120
- package/examples/js/postprocessing/ClearPass.js +0 -39
- package/examples/js/postprocessing/CubeTexturePass.js +0 -60
- package/examples/js/postprocessing/DotScreenPass.js +0 -51
- package/examples/js/postprocessing/EffectComposer.js +0 -272
- package/examples/js/postprocessing/FilmPass.js +0 -52
- package/examples/js/postprocessing/GlitchPass.js +0 -104
- package/examples/js/postprocessing/HalftonePass.js +0 -75
- package/examples/js/postprocessing/LUTPass.js +0 -171
- package/examples/js/postprocessing/MaskPass.js +0 -95
- package/examples/js/postprocessing/OutlinePass.js +0 -598
- package/examples/js/postprocessing/Pass.js +0 -72
- package/examples/js/postprocessing/RenderPass.js +0 -70
- package/examples/js/postprocessing/SAOPass.js +0 -374
- package/examples/js/postprocessing/SMAAPass.js +0 -170
- package/examples/js/postprocessing/SSAARenderPass.js +0 -156
- package/examples/js/postprocessing/SSAOPass.js +0 -365
- package/examples/js/postprocessing/SSRPass.js +0 -567
- package/examples/js/postprocessing/SavePass.js +0 -59
- package/examples/js/postprocessing/ShaderPass.js +0 -64
- package/examples/js/postprocessing/TAARenderPass.js +0 -130
- package/examples/js/postprocessing/TexturePass.js +0 -49
- package/examples/js/postprocessing/UnrealBloomPass.js +0 -375
- package/examples/js/renderers/CSS2DRenderer.js +0 -178
- package/examples/js/renderers/CSS3DRenderer.js +0 -237
- package/examples/js/renderers/Projector.js +0 -818
- package/examples/js/renderers/SVGRenderer.js +0 -491
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +0 -89
- package/examples/js/shaders/AfterimageShader.js +0 -60
- package/examples/js/shaders/BasicShader.js +0 -27
- package/examples/js/shaders/BleachBypassShader.js +0 -62
- package/examples/js/shaders/BlendShader.js +0 -54
- package/examples/js/shaders/BokehShader.js +0 -156
- package/examples/js/shaders/BokehShader2.js +0 -419
- package/examples/js/shaders/BrightnessContrastShader.js +0 -58
- package/examples/js/shaders/ColorCorrectionShader.js +0 -52
- package/examples/js/shaders/ColorifyShader.js +0 -47
- package/examples/js/shaders/ConvolutionShader.js +0 -92
- package/examples/js/shaders/CopyShader.js +0 -45
- package/examples/js/shaders/DOFMipMapShader.js +0 -60
- package/examples/js/shaders/DepthLimitedBlurShader.js +0 -173
- package/examples/js/shaders/DigitalGlitch.js +0 -127
- package/examples/js/shaders/DotScreenShader.js +0 -72
- package/examples/js/shaders/FXAAShader.js +0 -284
- package/examples/js/shaders/FilmShader.js +0 -110
- package/examples/js/shaders/FocusShader.js +0 -95
- package/examples/js/shaders/FreiChenShader.js +0 -93
- package/examples/js/shaders/GammaCorrectionShader.js +0 -41
- package/examples/js/shaders/GodRaysShader.js +0 -284
- package/examples/js/shaders/HalftoneShader.js +0 -336
- package/examples/js/shaders/HorizontalBlurShader.js +0 -59
- package/examples/js/shaders/HorizontalTiltShiftShader.js +0 -65
- package/examples/js/shaders/HueSaturationShader.js +0 -69
- package/examples/js/shaders/KaleidoShader.js +0 -60
- package/examples/js/shaders/LuminosityHighPassShader.js +0 -67
- package/examples/js/shaders/LuminosityShader.js +0 -46
- package/examples/js/shaders/MMDToonShader.js +0 -96
- package/examples/js/shaders/MirrorShader.js +0 -56
- package/examples/js/shaders/NormalMapShader.js +0 -55
- package/examples/js/shaders/RGBShiftShader.js +0 -56
- package/examples/js/shaders/SAOShader.js +0 -209
- package/examples/js/shaders/SMAAShader.js +0 -454
- package/examples/js/shaders/SSAOShader.js +0 -295
- package/examples/js/shaders/SSRShader.js +0 -381
- package/examples/js/shaders/SepiaShader.js +0 -52
- package/examples/js/shaders/SobelOperatorShader.js +0 -88
- package/examples/js/shaders/SubsurfaceScatteringShader.js +0 -49
- package/examples/js/shaders/TechnicolorShader.js +0 -43
- package/examples/js/shaders/ToneMapShader.js +0 -84
- package/examples/js/shaders/ToonShader.js +0 -335
- package/examples/js/shaders/TriangleBlurShader.js +0 -70
- package/examples/js/shaders/UnpackDepthRGBAShader.js +0 -47
- package/examples/js/shaders/VelocityShader.js +0 -126
- package/examples/js/shaders/VerticalBlurShader.js +0 -59
- package/examples/js/shaders/VerticalTiltShiftShader.js +0 -65
- package/examples/js/shaders/VignetteShader.js +0 -53
- package/examples/js/shaders/VolumeShader.js +0 -296
- package/examples/js/shaders/WaterRefractionShader.js +0 -84
- package/examples/js/textures/FlakesTexture.js +0 -40
- package/examples/js/utils/BufferGeometryUtils.js +0 -1160
- package/examples/js/utils/CameraUtils.js +0 -71
- package/examples/js/utils/GPUStatsPanel.js +0 -125
- package/examples/js/utils/GeometryCompressionUtils.js +0 -549
- package/examples/js/utils/GeometryUtils.js +0 -168
- package/examples/js/utils/LDrawUtils.js +0 -179
- package/examples/js/utils/PackedPhongMaterial.js +0 -109
- package/examples/js/utils/SceneUtils.js +0 -214
- package/examples/js/utils/ShadowMapViewer.js +0 -183
- package/examples/js/utils/SkeletonUtils.js +0 -493
- package/examples/js/utils/UVsDebug.js +0 -143
- package/examples/js/utils/WorkerPool.js +0 -105
- package/examples/jsm/exporters/ColladaExporter.js +0 -713
- package/examples/jsm/geometries/LightningStrike.js +0 -1017
- package/examples/jsm/libs/OimoPhysics/OimoPhysics.js +0 -37071
- package/examples/jsm/libs/OimoPhysics/index.js +0 -43
- package/examples/jsm/libs/flow.module.js +0 -4552
- package/examples/jsm/libs/tween.module.min.js +0 -3
- package/examples/jsm/loaders/BasisTextureLoader.js +0 -790
- package/examples/jsm/loaders/IFCLoader.js +0 -2431
- package/examples/jsm/loaders/PRWMLoader.js +0 -299
- package/examples/jsm/loaders/ifc/web-ifc-api.js +0 -47504
- package/examples/jsm/loaders/ifc/web-ifc.wasm +0 -0
- package/examples/jsm/node-editor/NodeEditor.js +0 -857
- package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +0 -14
- package/examples/jsm/node-editor/accessors/NormalEditor.js +0 -30
- package/examples/jsm/node-editor/accessors/PositionEditor.js +0 -30
- package/examples/jsm/node-editor/accessors/UVEditor.js +0 -25
- package/examples/jsm/node-editor/core/BaseNode.js +0 -96
- package/examples/jsm/node-editor/core/DataFile.js +0 -59
- package/examples/jsm/node-editor/core/FileEditor.js +0 -20
- package/examples/jsm/node-editor/core/FileURLEditor.js +0 -29
- package/examples/jsm/node-editor/display/BlendEditor.js +0 -44
- package/examples/jsm/node-editor/display/NormalMapEditor.js +0 -49
- package/examples/jsm/node-editor/examples/animate-uv.json +0 -1
- package/examples/jsm/node-editor/examples/fake-top-light.json +0 -1
- package/examples/jsm/node-editor/examples/matcap.json +0 -1
- package/examples/jsm/node-editor/examples/oscillator-color.json +0 -1
- package/examples/jsm/node-editor/examples/rim.json +0 -1
- package/examples/jsm/node-editor/inputs/ColorEditor.js +0 -96
- package/examples/jsm/node-editor/inputs/FloatEditor.js +0 -23
- package/examples/jsm/node-editor/inputs/SliderEditor.js +0 -67
- package/examples/jsm/node-editor/inputs/TextureEditor.js +0 -155
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +0 -28
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +0 -30
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +0 -37
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +0 -84
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +0 -102
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +0 -118
- package/examples/jsm/node-editor/math/AngleEditor.js +0 -40
- package/examples/jsm/node-editor/math/DotEditor.js +0 -35
- package/examples/jsm/node-editor/math/InvertEditor.js +0 -39
- package/examples/jsm/node-editor/math/LimiterEditor.js +0 -62
- package/examples/jsm/node-editor/math/NormalizeEditor.js +0 -28
- package/examples/jsm/node-editor/math/OperatorEditor.js +0 -63
- package/examples/jsm/node-editor/math/PowerEditor.js +0 -44
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +0 -45
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +0 -27
- package/examples/jsm/node-editor/scene/MeshEditor.js +0 -102
- package/examples/jsm/node-editor/scene/Object3DEditor.js +0 -160
- package/examples/jsm/node-editor/scene/PointsEditor.js +0 -99
- package/examples/jsm/node-editor/utils/JoinEditor.js +0 -58
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +0 -43
- package/examples/jsm/node-editor/utils/PreviewEditor.js +0 -170
- package/examples/jsm/node-editor/utils/SplitEditor.js +0 -39
- package/examples/jsm/node-editor/utils/TimerEditor.js +0 -58
- package/examples/jsm/nodes/core/CodeNode.js +0 -50
- package/examples/jsm/nodes/core/ExpressionNode.js +0 -32
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +0 -22
- package/examples/jsm/nodes/lighting/PunctualLightNode.js +0 -68
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +0 -301
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +0 -149
- package/examples/jsm/objects/GroundProjectedEnv.js +0 -186
- package/examples/jsm/objects/LightningStorm.js +0 -245
- package/examples/jsm/physics/OimoPhysics.js +0 -231
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -369
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -187
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -173
- package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -255
- package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
- package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +0 -82
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -36
- package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
- package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -38
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -296
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -66
- package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -73
- package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
- package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
- package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -40
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +0 -794
- package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
- package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -81
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +0 -83
- package/examples/jsm/shaders/ToneMapShader.js +0 -73
- package/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js +0 -7
- package/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js +0 -10
- package/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js +0 -7
- /package/examples/{js → jsm}/libs/ammo.wasm.js +0 -0
- /package/examples/{js → jsm}/libs/ammo.wasm.wasm +0 -0
- /package/examples/{js → jsm}/libs/basis/basis_transcoder.js +0 -0
- /package/examples/{js → jsm}/libs/basis/basis_transcoder.wasm +0 -0
- /package/examples/{js → jsm}/libs/draco/README.md +0 -0
- /package/examples/{js → jsm}/libs/draco/draco_encoder.js +0 -0
- /package/examples/{js → jsm}/libs/draco/gltf/draco_encoder.js +0 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BufferAttribute,
|
|
3
3
|
ClampToEdgeWrapping,
|
|
4
|
+
Color,
|
|
4
5
|
DoubleSide,
|
|
5
6
|
InterpolateDiscrete,
|
|
6
7
|
InterpolateLinear,
|
|
7
|
-
|
|
8
|
+
NoColorSpace,
|
|
8
9
|
LinearFilter,
|
|
9
10
|
LinearMipmapLinearFilter,
|
|
10
11
|
LinearMipmapNearestFilter,
|
|
@@ -19,12 +20,48 @@ import {
|
|
|
19
20
|
RepeatWrapping,
|
|
20
21
|
Scene,
|
|
21
22
|
Source,
|
|
22
|
-
|
|
23
|
+
SRGBColorSpace,
|
|
23
24
|
CompressedTexture,
|
|
24
25
|
Vector3
|
|
25
26
|
} from 'three';
|
|
26
27
|
import { decompress } from './../utils/TextureUtils.js';
|
|
27
28
|
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The KHR_mesh_quantization extension allows these extra attribute component types
|
|
32
|
+
*
|
|
33
|
+
* @see https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md#extending-mesh-attributes
|
|
34
|
+
*/
|
|
35
|
+
const KHR_mesh_quantization_ExtraAttrTypes = {
|
|
36
|
+
POSITION: [
|
|
37
|
+
'byte',
|
|
38
|
+
'byte normalized',
|
|
39
|
+
'unsigned byte',
|
|
40
|
+
'unsigned byte normalized',
|
|
41
|
+
'short',
|
|
42
|
+
'short normalized',
|
|
43
|
+
'unsigned short',
|
|
44
|
+
'unsigned short normalized',
|
|
45
|
+
],
|
|
46
|
+
NORMAL: [
|
|
47
|
+
'byte normalized',
|
|
48
|
+
'short normalized',
|
|
49
|
+
],
|
|
50
|
+
TANGENT: [
|
|
51
|
+
'byte normalized',
|
|
52
|
+
'short normalized',
|
|
53
|
+
],
|
|
54
|
+
TEXCOORD: [
|
|
55
|
+
'byte',
|
|
56
|
+
'byte normalized',
|
|
57
|
+
'unsigned byte',
|
|
58
|
+
'short',
|
|
59
|
+
'short normalized',
|
|
60
|
+
'unsigned short',
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
|
|
28
65
|
class GLTFExporter {
|
|
29
66
|
|
|
30
67
|
constructor() {
|
|
@@ -55,6 +92,18 @@ class GLTFExporter {
|
|
|
55
92
|
|
|
56
93
|
} );
|
|
57
94
|
|
|
95
|
+
this.register( function ( writer ) {
|
|
96
|
+
|
|
97
|
+
return new GLTFMaterialsIorExtension( writer );
|
|
98
|
+
|
|
99
|
+
} );
|
|
100
|
+
|
|
101
|
+
this.register( function ( writer ) {
|
|
102
|
+
|
|
103
|
+
return new GLTFMaterialsSpecularExtension( writer );
|
|
104
|
+
|
|
105
|
+
} );
|
|
106
|
+
|
|
58
107
|
this.register( function ( writer ) {
|
|
59
108
|
|
|
60
109
|
return new GLTFMaterialsClearcoatExtension( writer );
|
|
@@ -67,6 +116,24 @@ class GLTFExporter {
|
|
|
67
116
|
|
|
68
117
|
} );
|
|
69
118
|
|
|
119
|
+
this.register( function ( writer ) {
|
|
120
|
+
|
|
121
|
+
return new GLTFMaterialsSheenExtension( writer );
|
|
122
|
+
|
|
123
|
+
} );
|
|
124
|
+
|
|
125
|
+
this.register( function ( writer ) {
|
|
126
|
+
|
|
127
|
+
return new GLTFMaterialsAnisotropyExtension( writer );
|
|
128
|
+
|
|
129
|
+
} );
|
|
130
|
+
|
|
131
|
+
this.register( function ( writer ) {
|
|
132
|
+
|
|
133
|
+
return new GLTFMaterialsEmissiveStrengthExtension( writer );
|
|
134
|
+
|
|
135
|
+
} );
|
|
136
|
+
|
|
70
137
|
}
|
|
71
138
|
|
|
72
139
|
register( callback ) {
|
|
@@ -147,8 +214,10 @@ const WEBGL_CONSTANTS = {
|
|
|
147
214
|
UNSIGNED_BYTE: 0x1401,
|
|
148
215
|
SHORT: 0x1402,
|
|
149
216
|
UNSIGNED_SHORT: 0x1403,
|
|
150
|
-
|
|
217
|
+
INT: 0x1404,
|
|
151
218
|
UNSIGNED_INT: 0x1405,
|
|
219
|
+
FLOAT: 0x1406,
|
|
220
|
+
|
|
152
221
|
ARRAY_BUFFER: 0x8892,
|
|
153
222
|
ELEMENT_ARRAY_BUFFER: 0x8893,
|
|
154
223
|
|
|
@@ -164,6 +233,8 @@ const WEBGL_CONSTANTS = {
|
|
|
164
233
|
REPEAT: 10497
|
|
165
234
|
};
|
|
166
235
|
|
|
236
|
+
const KHR_MESH_QUANTIZATION = 'KHR_mesh_quantization';
|
|
237
|
+
|
|
167
238
|
const THREE_TO_WEBGL = {};
|
|
168
239
|
|
|
169
240
|
THREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;
|
|
@@ -184,6 +255,8 @@ const PATH_PROPERTIES = {
|
|
|
184
255
|
morphTargetInfluences: 'weights'
|
|
185
256
|
};
|
|
186
257
|
|
|
258
|
+
const DEFAULT_SPECULAR_COLOR = new Color();
|
|
259
|
+
|
|
187
260
|
// GLB constants
|
|
188
261
|
// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
|
|
189
262
|
|
|
@@ -273,6 +346,12 @@ function getMinMax( attribute, start, count ) {
|
|
|
273
346
|
else if ( a === 2 ) value = attribute.getZ( i );
|
|
274
347
|
else if ( a === 3 ) value = attribute.getW( i );
|
|
275
348
|
|
|
349
|
+
if ( attribute.normalized === true ) {
|
|
350
|
+
|
|
351
|
+
value = MathUtils.normalize( value, attribute.array );
|
|
352
|
+
|
|
353
|
+
}
|
|
354
|
+
|
|
276
355
|
}
|
|
277
356
|
|
|
278
357
|
output.min[ a ] = Math.min( output.min[ a ], value );
|
|
@@ -394,7 +473,9 @@ class GLTFWriter {
|
|
|
394
473
|
this.buffers = [];
|
|
395
474
|
this.nodeMap = new Map();
|
|
396
475
|
this.skins = [];
|
|
476
|
+
|
|
397
477
|
this.extensionsUsed = {};
|
|
478
|
+
this.extensionsRequired = {};
|
|
398
479
|
|
|
399
480
|
this.uids = new Map();
|
|
400
481
|
this.uid = 0;
|
|
@@ -429,9 +510,9 @@ class GLTFWriter {
|
|
|
429
510
|
* @param {Function} onDone Callback on completed
|
|
430
511
|
* @param {Object} options options
|
|
431
512
|
*/
|
|
432
|
-
async write( input, onDone, options ) {
|
|
513
|
+
async write( input, onDone, options = {} ) {
|
|
433
514
|
|
|
434
|
-
this.options = Object.assign( {
|
|
515
|
+
this.options = Object.assign( {
|
|
435
516
|
// default options
|
|
436
517
|
binary: false,
|
|
437
518
|
trs: false,
|
|
@@ -456,15 +537,19 @@ class GLTFWriter {
|
|
|
456
537
|
const buffers = writer.buffers;
|
|
457
538
|
const json = writer.json;
|
|
458
539
|
options = writer.options;
|
|
540
|
+
|
|
459
541
|
const extensionsUsed = writer.extensionsUsed;
|
|
542
|
+
const extensionsRequired = writer.extensionsRequired;
|
|
460
543
|
|
|
461
544
|
// Merge buffers.
|
|
462
545
|
const blob = new Blob( buffers, { type: 'application/octet-stream' } );
|
|
463
546
|
|
|
464
547
|
// Declare extensions.
|
|
465
548
|
const extensionsUsedList = Object.keys( extensionsUsed );
|
|
549
|
+
const extensionsRequiredList = Object.keys( extensionsRequired );
|
|
466
550
|
|
|
467
551
|
if ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;
|
|
552
|
+
if ( extensionsRequiredList.length > 0 ) json.extensionsRequired = extensionsRequiredList;
|
|
468
553
|
|
|
469
554
|
// Update bytelength of the single buffer.
|
|
470
555
|
if ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;
|
|
@@ -539,6 +624,7 @@ class GLTFWriter {
|
|
|
539
624
|
|
|
540
625
|
}
|
|
541
626
|
|
|
627
|
+
|
|
542
628
|
}
|
|
543
629
|
|
|
544
630
|
/**
|
|
@@ -721,11 +807,9 @@ class GLTFWriter {
|
|
|
721
807
|
|
|
722
808
|
if ( metalnessMap === roughnessMap ) return metalnessMap;
|
|
723
809
|
|
|
724
|
-
// if ( occlusion === roughness && roughness === metalness ) return material.aoMap;
|
|
725
|
-
|
|
726
810
|
function getEncodingConversion( map ) {
|
|
727
811
|
|
|
728
|
-
if ( map.
|
|
812
|
+
if ( map.colorSpace === SRGBColorSpace ) {
|
|
729
813
|
|
|
730
814
|
return function SRGBToLinear( c ) {
|
|
731
815
|
|
|
@@ -745,27 +829,23 @@ class GLTFWriter {
|
|
|
745
829
|
|
|
746
830
|
console.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );
|
|
747
831
|
|
|
748
|
-
if (
|
|
749
|
-
|
|
750
|
-
if ( metalnessMap instanceof CompressedTexture ) {
|
|
751
|
-
|
|
752
|
-
metalnessMap = decompress( metalnessMap );
|
|
832
|
+
if ( metalnessMap instanceof CompressedTexture ) {
|
|
753
833
|
|
|
754
|
-
|
|
834
|
+
metalnessMap = decompress( metalnessMap );
|
|
755
835
|
|
|
756
|
-
|
|
836
|
+
}
|
|
757
837
|
|
|
758
|
-
|
|
838
|
+
if ( roughnessMap instanceof CompressedTexture ) {
|
|
759
839
|
|
|
760
|
-
|
|
840
|
+
roughnessMap = decompress( roughnessMap );
|
|
761
841
|
|
|
762
842
|
}
|
|
763
843
|
|
|
764
|
-
const metalness = metalnessMap
|
|
765
|
-
const roughness = roughnessMap
|
|
844
|
+
const metalness = metalnessMap ? metalnessMap.image : null;
|
|
845
|
+
const roughness = roughnessMap ? roughnessMap.image : null;
|
|
766
846
|
|
|
767
|
-
const width = Math.max( metalness
|
|
768
|
-
const height = Math.max( metalness
|
|
847
|
+
const width = Math.max( metalness ? metalness.width : 0, roughness ? roughness.width : 0 );
|
|
848
|
+
const height = Math.max( metalness ? metalness.height : 0, roughness ? roughness.height : 0 );
|
|
769
849
|
|
|
770
850
|
const canvas = getCanvas();
|
|
771
851
|
canvas.width = width;
|
|
@@ -816,7 +896,14 @@ class GLTFWriter {
|
|
|
816
896
|
const texture = reference.clone();
|
|
817
897
|
|
|
818
898
|
texture.source = new Source( canvas );
|
|
819
|
-
texture.
|
|
899
|
+
texture.colorSpace = NoColorSpace;
|
|
900
|
+
texture.channel = ( metalnessMap || roughnessMap ).channel;
|
|
901
|
+
|
|
902
|
+
if ( metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel ) {
|
|
903
|
+
|
|
904
|
+
console.warn( 'THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match.' );
|
|
905
|
+
|
|
906
|
+
}
|
|
820
907
|
|
|
821
908
|
return texture;
|
|
822
909
|
|
|
@@ -860,17 +947,25 @@ class GLTFWriter {
|
|
|
860
947
|
|
|
861
948
|
let componentSize;
|
|
862
949
|
|
|
863
|
-
|
|
950
|
+
switch ( componentType ) {
|
|
864
951
|
|
|
865
|
-
|
|
952
|
+
case WEBGL_CONSTANTS.BYTE:
|
|
953
|
+
case WEBGL_CONSTANTS.UNSIGNED_BYTE:
|
|
866
954
|
|
|
867
|
-
|
|
955
|
+
componentSize = 1;
|
|
868
956
|
|
|
869
|
-
|
|
957
|
+
break;
|
|
870
958
|
|
|
871
|
-
|
|
959
|
+
case WEBGL_CONSTANTS.SHORT:
|
|
960
|
+
case WEBGL_CONSTANTS.UNSIGNED_SHORT:
|
|
872
961
|
|
|
873
|
-
|
|
962
|
+
componentSize = 2;
|
|
963
|
+
|
|
964
|
+
break;
|
|
965
|
+
|
|
966
|
+
default:
|
|
967
|
+
|
|
968
|
+
componentSize = 4;
|
|
874
969
|
|
|
875
970
|
}
|
|
876
971
|
|
|
@@ -897,31 +992,41 @@ class GLTFWriter {
|
|
|
897
992
|
else if ( a === 2 ) value = attribute.getZ( i );
|
|
898
993
|
else if ( a === 3 ) value = attribute.getW( i );
|
|
899
994
|
|
|
995
|
+
if ( attribute.normalized === true ) {
|
|
996
|
+
|
|
997
|
+
value = MathUtils.normalize( value, attribute.array );
|
|
998
|
+
|
|
999
|
+
}
|
|
1000
|
+
|
|
900
1001
|
}
|
|
901
1002
|
|
|
902
1003
|
if ( componentType === WEBGL_CONSTANTS.FLOAT ) {
|
|
903
1004
|
|
|
904
1005
|
dataView.setFloat32( offset, value, true );
|
|
905
1006
|
|
|
1007
|
+
} else if ( componentType === WEBGL_CONSTANTS.INT ) {
|
|
1008
|
+
|
|
1009
|
+
dataView.setInt32( offset, value, true );
|
|
1010
|
+
|
|
906
1011
|
} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {
|
|
907
1012
|
|
|
908
1013
|
dataView.setUint32( offset, value, true );
|
|
909
1014
|
|
|
910
|
-
} else if ( componentType === WEBGL_CONSTANTS.
|
|
1015
|
+
} else if ( componentType === WEBGL_CONSTANTS.SHORT ) {
|
|
911
1016
|
|
|
912
|
-
dataView.
|
|
1017
|
+
dataView.setInt16( offset, value, true );
|
|
913
1018
|
|
|
914
|
-
} else if ( componentType === WEBGL_CONSTANTS.
|
|
1019
|
+
} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {
|
|
915
1020
|
|
|
916
|
-
dataView.
|
|
1021
|
+
dataView.setUint16( offset, value, true );
|
|
917
1022
|
|
|
918
1023
|
} else if ( componentType === WEBGL_CONSTANTS.BYTE ) {
|
|
919
1024
|
|
|
920
1025
|
dataView.setInt8( offset, value );
|
|
921
1026
|
|
|
922
|
-
} else if ( componentType === WEBGL_CONSTANTS.
|
|
1027
|
+
} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {
|
|
923
1028
|
|
|
924
|
-
dataView.
|
|
1029
|
+
dataView.setUint8( offset, value );
|
|
925
1030
|
|
|
926
1031
|
}
|
|
927
1032
|
|
|
@@ -1017,40 +1122,45 @@ class GLTFWriter {
|
|
|
1017
1122
|
2: 'VEC2',
|
|
1018
1123
|
3: 'VEC3',
|
|
1019
1124
|
4: 'VEC4',
|
|
1125
|
+
9: 'MAT3',
|
|
1020
1126
|
16: 'MAT4'
|
|
1021
1127
|
|
|
1022
1128
|
};
|
|
1023
1129
|
|
|
1024
1130
|
let componentType;
|
|
1025
1131
|
|
|
1026
|
-
// Detect the component type of the attribute array
|
|
1132
|
+
// Detect the component type of the attribute array
|
|
1027
1133
|
if ( attribute.array.constructor === Float32Array ) {
|
|
1028
1134
|
|
|
1029
1135
|
componentType = WEBGL_CONSTANTS.FLOAT;
|
|
1030
1136
|
|
|
1137
|
+
} else if ( attribute.array.constructor === Int32Array ) {
|
|
1138
|
+
|
|
1139
|
+
componentType = WEBGL_CONSTANTS.INT;
|
|
1140
|
+
|
|
1031
1141
|
} else if ( attribute.array.constructor === Uint32Array ) {
|
|
1032
1142
|
|
|
1033
1143
|
componentType = WEBGL_CONSTANTS.UNSIGNED_INT;
|
|
1034
1144
|
|
|
1035
|
-
} else if ( attribute.array.constructor ===
|
|
1145
|
+
} else if ( attribute.array.constructor === Int16Array ) {
|
|
1036
1146
|
|
|
1037
|
-
componentType = WEBGL_CONSTANTS.
|
|
1147
|
+
componentType = WEBGL_CONSTANTS.SHORT;
|
|
1038
1148
|
|
|
1039
|
-
} else if ( attribute.array.constructor ===
|
|
1149
|
+
} else if ( attribute.array.constructor === Uint16Array ) {
|
|
1040
1150
|
|
|
1041
|
-
componentType = WEBGL_CONSTANTS.
|
|
1151
|
+
componentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;
|
|
1042
1152
|
|
|
1043
1153
|
} else if ( attribute.array.constructor === Int8Array ) {
|
|
1044
1154
|
|
|
1045
1155
|
componentType = WEBGL_CONSTANTS.BYTE;
|
|
1046
1156
|
|
|
1047
|
-
} else if ( attribute.array.constructor ===
|
|
1157
|
+
} else if ( attribute.array.constructor === Uint8Array ) {
|
|
1048
1158
|
|
|
1049
|
-
componentType = WEBGL_CONSTANTS.
|
|
1159
|
+
componentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;
|
|
1050
1160
|
|
|
1051
1161
|
} else {
|
|
1052
1162
|
|
|
1053
|
-
throw new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type: ' + attribute.array.constructor );
|
|
1163
|
+
throw new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type: ' + attribute.array.constructor.name );
|
|
1054
1164
|
|
|
1055
1165
|
}
|
|
1056
1166
|
|
|
@@ -1102,55 +1212,45 @@ class GLTFWriter {
|
|
|
1102
1212
|
*/
|
|
1103
1213
|
processImage( image, format, flipY, mimeType = 'image/png' ) {
|
|
1104
1214
|
|
|
1105
|
-
|
|
1106
|
-
const cache = writer.cache;
|
|
1107
|
-
const json = writer.json;
|
|
1108
|
-
const options = writer.options;
|
|
1109
|
-
const pending = writer.pending;
|
|
1215
|
+
if ( image !== null ) {
|
|
1110
1216
|
|
|
1111
|
-
|
|
1217
|
+
const writer = this;
|
|
1218
|
+
const cache = writer.cache;
|
|
1219
|
+
const json = writer.json;
|
|
1220
|
+
const options = writer.options;
|
|
1221
|
+
const pending = writer.pending;
|
|
1112
1222
|
|
|
1113
|
-
|
|
1223
|
+
if ( ! cache.images.has( image ) ) cache.images.set( image, {} );
|
|
1114
1224
|
|
|
1115
|
-
|
|
1225
|
+
const cachedImages = cache.images.get( image );
|
|
1116
1226
|
|
|
1117
|
-
|
|
1227
|
+
const key = mimeType + ':flipY/' + flipY.toString();
|
|
1118
1228
|
|
|
1119
|
-
|
|
1229
|
+
if ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];
|
|
1120
1230
|
|
|
1121
|
-
|
|
1231
|
+
if ( ! json.images ) json.images = [];
|
|
1122
1232
|
|
|
1123
|
-
|
|
1233
|
+
const imageDef = { mimeType: mimeType };
|
|
1124
1234
|
|
|
1125
|
-
|
|
1126
|
-
canvas.height = Math.min( image.height, options.maxTextureSize );
|
|
1235
|
+
const canvas = getCanvas();
|
|
1127
1236
|
|
|
1128
|
-
|
|
1237
|
+
canvas.width = Math.min( image.width, options.maxTextureSize );
|
|
1238
|
+
canvas.height = Math.min( image.height, options.maxTextureSize );
|
|
1129
1239
|
|
|
1130
|
-
|
|
1240
|
+
const ctx = canvas.getContext( '2d' );
|
|
1131
1241
|
|
|
1132
|
-
|
|
1133
|
-
ctx.scale( 1, - 1 );
|
|
1242
|
+
if ( flipY === true ) {
|
|
1134
1243
|
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
if ( image.data !== undefined ) { // THREE.DataTexture
|
|
1138
|
-
|
|
1139
|
-
if ( format !== RGBAFormat ) {
|
|
1140
|
-
|
|
1141
|
-
console.error( 'GLTFExporter: Only RGBAFormat is supported.' );
|
|
1244
|
+
ctx.translate( 0, canvas.height );
|
|
1245
|
+
ctx.scale( 1, - 1 );
|
|
1142
1246
|
|
|
1143
1247
|
}
|
|
1144
1248
|
|
|
1145
|
-
if ( image.
|
|
1146
|
-
|
|
1147
|
-
ctx.drawImage( image, 0, 0, canvas.width, canvas.height );
|
|
1148
|
-
|
|
1149
|
-
} else {
|
|
1249
|
+
if ( image.data !== undefined ) { // THREE.DataTexture
|
|
1150
1250
|
|
|
1151
1251
|
if ( format !== RGBAFormat ) {
|
|
1152
1252
|
|
|
1153
|
-
console.error( 'GLTFExporter: Only RGBAFormat is supported.',
|
|
1253
|
+
console.error( 'GLTFExporter: Only RGBAFormat is supported.', format );
|
|
1154
1254
|
|
|
1155
1255
|
}
|
|
1156
1256
|
|
|
@@ -1173,69 +1273,60 @@ class GLTFWriter {
|
|
|
1173
1273
|
|
|
1174
1274
|
ctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );
|
|
1175
1275
|
|
|
1176
|
-
}
|
|
1177
|
-
|
|
1178
|
-
const data = new Uint8ClampedArray( image.height * image.width * 4 );
|
|
1179
|
-
|
|
1180
|
-
for ( let i = 0; i < data.length; i += 4 ) {
|
|
1276
|
+
} else {
|
|
1181
1277
|
|
|
1182
|
-
|
|
1183
|
-
data[ i + 1 ] = image.data[ i + 1 ];
|
|
1184
|
-
data[ i + 2 ] = image.data[ i + 2 ];
|
|
1185
|
-
data[ i + 3 ] = image.data[ i + 3 ];
|
|
1278
|
+
ctx.drawImage( image, 0, 0, canvas.width, canvas.height );
|
|
1186
1279
|
|
|
1187
1280
|
}
|
|
1188
1281
|
|
|
1189
|
-
|
|
1282
|
+
if ( options.binary === true ) {
|
|
1190
1283
|
|
|
1191
|
-
|
|
1284
|
+
pending.push(
|
|
1192
1285
|
|
|
1193
|
-
|
|
1286
|
+
getToBlobPromise( canvas, mimeType )
|
|
1287
|
+
.then( blob => writer.processBufferViewImage( blob ) )
|
|
1288
|
+
.then( bufferViewIndex => {
|
|
1194
1289
|
|
|
1195
|
-
|
|
1290
|
+
imageDef.bufferView = bufferViewIndex;
|
|
1196
1291
|
|
|
1197
|
-
|
|
1292
|
+
} )
|
|
1198
1293
|
|
|
1199
|
-
|
|
1294
|
+
);
|
|
1200
1295
|
|
|
1201
|
-
|
|
1202
|
-
.then( blob => writer.processBufferViewImage( blob ) )
|
|
1203
|
-
.then( bufferViewIndex => {
|
|
1296
|
+
} else {
|
|
1204
1297
|
|
|
1205
|
-
|
|
1298
|
+
if ( canvas.toDataURL !== undefined ) {
|
|
1206
1299
|
|
|
1207
|
-
|
|
1300
|
+
imageDef.uri = canvas.toDataURL( mimeType );
|
|
1208
1301
|
|
|
1209
|
-
|
|
1302
|
+
} else {
|
|
1210
1303
|
|
|
1211
|
-
|
|
1304
|
+
pending.push(
|
|
1212
1305
|
|
|
1213
|
-
|
|
1306
|
+
getToBlobPromise( canvas, mimeType )
|
|
1307
|
+
.then( blob => new FileReader().readAsDataURL( blob ) )
|
|
1308
|
+
.then( dataURL => {
|
|
1214
1309
|
|
|
1215
|
-
|
|
1310
|
+
imageDef.uri = dataURL;
|
|
1216
1311
|
|
|
1217
|
-
|
|
1312
|
+
} )
|
|
1218
1313
|
|
|
1219
|
-
|
|
1314
|
+
);
|
|
1220
1315
|
|
|
1221
|
-
|
|
1222
|
-
.then( blob => new FileReader().readAsDataURL( blob ) )
|
|
1223
|
-
.then( dataURL => {
|
|
1316
|
+
}
|
|
1224
1317
|
|
|
1225
|
-
|
|
1318
|
+
}
|
|
1226
1319
|
|
|
1227
|
-
|
|
1320
|
+
const index = json.images.push( imageDef ) - 1;
|
|
1321
|
+
cachedImages[ key ] = index;
|
|
1322
|
+
return index;
|
|
1228
1323
|
|
|
1229
|
-
|
|
1324
|
+
} else {
|
|
1230
1325
|
|
|
1231
|
-
|
|
1326
|
+
throw new Error( 'THREE.GLTFExporter: No valid image data found. Unable to process texture.' );
|
|
1232
1327
|
|
|
1233
1328
|
}
|
|
1234
1329
|
|
|
1235
|
-
const index = json.images.push( imageDef ) - 1;
|
|
1236
|
-
cachedImages[ key ] = index;
|
|
1237
|
-
return index;
|
|
1238
|
-
|
|
1239
1330
|
}
|
|
1240
1331
|
|
|
1241
1332
|
/**
|
|
@@ -1276,32 +1367,27 @@ class GLTFWriter {
|
|
|
1276
1367
|
|
|
1277
1368
|
if ( ! json.textures ) json.textures = [];
|
|
1278
1369
|
|
|
1279
|
-
|
|
1280
|
-
let modifiedMap = map;
|
|
1281
|
-
|
|
1282
1370
|
// make non-readable textures (e.g. CompressedTexture) readable by blitting them into a new texture
|
|
1283
|
-
if (
|
|
1371
|
+
if ( map instanceof CompressedTexture ) {
|
|
1284
1372
|
|
|
1285
|
-
|
|
1286
|
-
// remove from cache, as the underlaying canvas is always the same between decompressed textures
|
|
1287
|
-
cache.images.delete( modifiedMap.image );
|
|
1373
|
+
map = decompress( map, options.maxTextureSize );
|
|
1288
1374
|
|
|
1289
1375
|
}
|
|
1290
1376
|
|
|
1291
|
-
let mimeType =
|
|
1377
|
+
let mimeType = map.userData.mimeType;
|
|
1292
1378
|
|
|
1293
1379
|
if ( mimeType === 'image/webp' ) mimeType = 'image/png';
|
|
1294
1380
|
|
|
1295
1381
|
const textureDef = {
|
|
1296
1382
|
sampler: this.processSampler( map ),
|
|
1297
|
-
source: this.processImage(
|
|
1383
|
+
source: this.processImage( map.image, map.format, map.flipY, mimeType )
|
|
1298
1384
|
};
|
|
1299
1385
|
|
|
1300
1386
|
if ( map.name ) textureDef.name = map.name;
|
|
1301
1387
|
|
|
1302
1388
|
this._invokeAll( function ( ext ) {
|
|
1303
1389
|
|
|
1304
|
-
ext.writeTexture && ext.writeTexture(
|
|
1390
|
+
ext.writeTexture && ext.writeTexture( map, textureDef );
|
|
1305
1391
|
|
|
1306
1392
|
} );
|
|
1307
1393
|
|
|
@@ -1369,16 +1455,22 @@ class GLTFWriter {
|
|
|
1369
1455
|
|
|
1370
1456
|
const metalRoughTexture = this.buildMetalRoughTexture( metalnessMap, roughnessMap );
|
|
1371
1457
|
|
|
1372
|
-
const metalRoughMapDef = {
|
|
1458
|
+
const metalRoughMapDef = {
|
|
1459
|
+
index: this.processTexture( metalRoughTexture ),
|
|
1460
|
+
channel: metalRoughTexture.channel
|
|
1461
|
+
};
|
|
1373
1462
|
this.applyTextureTransform( metalRoughMapDef, metalRoughTexture );
|
|
1374
1463
|
materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;
|
|
1375
1464
|
|
|
1376
1465
|
}
|
|
1377
1466
|
|
|
1378
|
-
// pbrMetallicRoughness.baseColorTexture
|
|
1379
|
-
if ( material.map
|
|
1467
|
+
// pbrMetallicRoughness.baseColorTexture
|
|
1468
|
+
if ( material.map ) {
|
|
1380
1469
|
|
|
1381
|
-
const baseColorMapDef = {
|
|
1470
|
+
const baseColorMapDef = {
|
|
1471
|
+
index: this.processTexture( material.map ),
|
|
1472
|
+
texCoord: material.map.channel
|
|
1473
|
+
};
|
|
1382
1474
|
this.applyTextureTransform( baseColorMapDef, material.map );
|
|
1383
1475
|
materialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;
|
|
1384
1476
|
|
|
@@ -1386,28 +1478,22 @@ class GLTFWriter {
|
|
|
1386
1478
|
|
|
1387
1479
|
if ( material.emissive ) {
|
|
1388
1480
|
|
|
1389
|
-
|
|
1390
|
-
const emissive = material.emissive.clone().multiplyScalar( material.emissiveIntensity );
|
|
1481
|
+
const emissive = material.emissive;
|
|
1391
1482
|
const maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );
|
|
1392
1483
|
|
|
1393
|
-
if ( maxEmissiveComponent > 1 ) {
|
|
1394
|
-
|
|
1395
|
-
emissive.multiplyScalar( 1 / maxEmissiveComponent );
|
|
1396
|
-
|
|
1397
|
-
console.warn( 'THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited' );
|
|
1398
|
-
|
|
1399
|
-
}
|
|
1400
|
-
|
|
1401
1484
|
if ( maxEmissiveComponent > 0 ) {
|
|
1402
1485
|
|
|
1403
|
-
materialDef.emissiveFactor = emissive.toArray();
|
|
1486
|
+
materialDef.emissiveFactor = material.emissive.toArray();
|
|
1404
1487
|
|
|
1405
1488
|
}
|
|
1406
1489
|
|
|
1407
1490
|
// emissiveTexture
|
|
1408
1491
|
if ( material.emissiveMap?.image ) {
|
|
1409
1492
|
|
|
1410
|
-
const emissiveMapDef = {
|
|
1493
|
+
const emissiveMapDef = {
|
|
1494
|
+
index: this.processTexture( material.emissiveMap ),
|
|
1495
|
+
texCoord: material.emissiveMap.channel
|
|
1496
|
+
};
|
|
1411
1497
|
this.applyTextureTransform( emissiveMapDef, material.emissiveMap );
|
|
1412
1498
|
materialDef.emissiveTexture = emissiveMapDef;
|
|
1413
1499
|
|
|
@@ -1418,7 +1504,10 @@ class GLTFWriter {
|
|
|
1418
1504
|
// normalTexture
|
|
1419
1505
|
if ( material.normalMap?.image ) {
|
|
1420
1506
|
|
|
1421
|
-
const normalMapDef = {
|
|
1507
|
+
const normalMapDef = {
|
|
1508
|
+
index: this.processTexture( material.normalMap ),
|
|
1509
|
+
texCoord: material.normalMap.channel
|
|
1510
|
+
};
|
|
1422
1511
|
|
|
1423
1512
|
if ( material.normalScale && material.normalScale.x !== 1 ) {
|
|
1424
1513
|
|
|
@@ -1438,7 +1527,7 @@ class GLTFWriter {
|
|
|
1438
1527
|
|
|
1439
1528
|
const occlusionMapDef = {
|
|
1440
1529
|
index: this.processTexture( material.aoMap ),
|
|
1441
|
-
texCoord:
|
|
1530
|
+
texCoord: material.aoMap.channel
|
|
1442
1531
|
};
|
|
1443
1532
|
|
|
1444
1533
|
if ( material.aoMapIntensity !== 1.0 ) {
|
|
@@ -1551,7 +1640,7 @@ class GLTFWriter {
|
|
|
1551
1640
|
// Conversion between attributes names in threejs and gltf spec
|
|
1552
1641
|
const nameConversion = {
|
|
1553
1642
|
uv: 'TEXCOORD_0',
|
|
1554
|
-
|
|
1643
|
+
uv1: 'TEXCOORD_1',
|
|
1555
1644
|
color: 'COLOR_0',
|
|
1556
1645
|
skinWeight: 'WEIGHTS_0',
|
|
1557
1646
|
skinIndex: 'JOINTS_0'
|
|
@@ -1610,6 +1699,12 @@ class GLTFWriter {
|
|
|
1610
1699
|
|
|
1611
1700
|
if ( accessor !== null ) {
|
|
1612
1701
|
|
|
1702
|
+
if ( ! attributeName.startsWith( '_' ) ) {
|
|
1703
|
+
|
|
1704
|
+
this.detectMeshQuantization( attributeName, attribute );
|
|
1705
|
+
|
|
1706
|
+
}
|
|
1707
|
+
|
|
1613
1708
|
attributes[ attributeName ] = accessor;
|
|
1614
1709
|
cache.attributes.set( this.getUID( attribute ), accessor );
|
|
1615
1710
|
|
|
@@ -1686,12 +1781,14 @@ class GLTFWriter {
|
|
|
1686
1781
|
|
|
1687
1782
|
for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {
|
|
1688
1783
|
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
attribute.getX( j ) - baseAttribute.getX( j )
|
|
1692
|
-
attribute.getY( j ) - baseAttribute.getY( j )
|
|
1693
|
-
attribute.getZ( j ) - baseAttribute.getZ( j )
|
|
1694
|
-
|
|
1784
|
+
for ( let a = 0; a < attribute.itemSize; a ++ ) {
|
|
1785
|
+
|
|
1786
|
+
if ( a === 0 ) relativeAttribute.setX( j, attribute.getX( j ) - baseAttribute.getX( j ) );
|
|
1787
|
+
if ( a === 1 ) relativeAttribute.setY( j, attribute.getY( j ) - baseAttribute.getY( j ) );
|
|
1788
|
+
if ( a === 2 ) relativeAttribute.setZ( j, attribute.getZ( j ) - baseAttribute.getZ( j ) );
|
|
1789
|
+
if ( a === 3 ) relativeAttribute.setW( j, attribute.getW( j ) - baseAttribute.getW( j ) );
|
|
1790
|
+
|
|
1791
|
+
}
|
|
1695
1792
|
|
|
1696
1793
|
}
|
|
1697
1794
|
|
|
@@ -1788,6 +1885,68 @@ class GLTFWriter {
|
|
|
1788
1885
|
|
|
1789
1886
|
}
|
|
1790
1887
|
|
|
1888
|
+
/**
|
|
1889
|
+
* If a vertex attribute with a
|
|
1890
|
+
* [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview)
|
|
1891
|
+
* is used, it is checked whether it is a valid data type according to the
|
|
1892
|
+
* [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)
|
|
1893
|
+
* extension.
|
|
1894
|
+
* In this case the extension is automatically added to the list of used extensions.
|
|
1895
|
+
*
|
|
1896
|
+
* @param {string} attributeName
|
|
1897
|
+
* @param {THREE.BufferAttribute} attribute
|
|
1898
|
+
*/
|
|
1899
|
+
detectMeshQuantization( attributeName, attribute ) {
|
|
1900
|
+
|
|
1901
|
+
if ( this.extensionsUsed[ KHR_MESH_QUANTIZATION ] ) return;
|
|
1902
|
+
|
|
1903
|
+
let attrType = undefined;
|
|
1904
|
+
|
|
1905
|
+
switch ( attribute.array.constructor ) {
|
|
1906
|
+
|
|
1907
|
+
case Int8Array:
|
|
1908
|
+
|
|
1909
|
+
attrType = 'byte';
|
|
1910
|
+
|
|
1911
|
+
break;
|
|
1912
|
+
|
|
1913
|
+
case Uint8Array:
|
|
1914
|
+
|
|
1915
|
+
attrType = 'unsigned byte';
|
|
1916
|
+
|
|
1917
|
+
break;
|
|
1918
|
+
|
|
1919
|
+
case Int16Array:
|
|
1920
|
+
|
|
1921
|
+
attrType = 'short';
|
|
1922
|
+
|
|
1923
|
+
break;
|
|
1924
|
+
|
|
1925
|
+
case Uint16Array:
|
|
1926
|
+
|
|
1927
|
+
attrType = 'unsigned short';
|
|
1928
|
+
|
|
1929
|
+
break;
|
|
1930
|
+
|
|
1931
|
+
default:
|
|
1932
|
+
|
|
1933
|
+
return;
|
|
1934
|
+
|
|
1935
|
+
}
|
|
1936
|
+
|
|
1937
|
+
if ( attribute.normalized ) attrType += ' normalized';
|
|
1938
|
+
|
|
1939
|
+
const attrNamePrefix = attributeName.split( '_', 1 )[ 0 ];
|
|
1940
|
+
|
|
1941
|
+
if ( KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ] && KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ].includes( attrType ) ) {
|
|
1942
|
+
|
|
1943
|
+
this.extensionsUsed[ KHR_MESH_QUANTIZATION ] = true;
|
|
1944
|
+
this.extensionsRequired[ KHR_MESH_QUANTIZATION ] = true;
|
|
1945
|
+
|
|
1946
|
+
}
|
|
1947
|
+
|
|
1948
|
+
}
|
|
1949
|
+
|
|
1791
1950
|
/**
|
|
1792
1951
|
* Process camera
|
|
1793
1952
|
* @param {THREE.Camera} camera Camera to process
|
|
@@ -2371,7 +2530,7 @@ class GLTFMaterialsClearcoatExtension {
|
|
|
2371
2530
|
|
|
2372
2531
|
writeMaterial( material, materialDef ) {
|
|
2373
2532
|
|
|
2374
|
-
if ( ! material.isMeshPhysicalMaterial ) return;
|
|
2533
|
+
if ( ! material.isMeshPhysicalMaterial || material.clearcoat === 0 ) return;
|
|
2375
2534
|
|
|
2376
2535
|
const writer = this.writer;
|
|
2377
2536
|
const extensionsUsed = writer.extensionsUsed;
|
|
@@ -2382,7 +2541,10 @@ class GLTFMaterialsClearcoatExtension {
|
|
|
2382
2541
|
|
|
2383
2542
|
if ( material.clearcoatMap ) {
|
|
2384
2543
|
|
|
2385
|
-
const clearcoatMapDef = {
|
|
2544
|
+
const clearcoatMapDef = {
|
|
2545
|
+
index: writer.processTexture( material.clearcoatMap ),
|
|
2546
|
+
texCoord: material.clearcoatMap.channel
|
|
2547
|
+
};
|
|
2386
2548
|
writer.applyTextureTransform( clearcoatMapDef, material.clearcoatMap );
|
|
2387
2549
|
extensionDef.clearcoatTexture = clearcoatMapDef;
|
|
2388
2550
|
|
|
@@ -2392,7 +2554,10 @@ class GLTFMaterialsClearcoatExtension {
|
|
|
2392
2554
|
|
|
2393
2555
|
if ( material.clearcoatRoughnessMap ) {
|
|
2394
2556
|
|
|
2395
|
-
const clearcoatRoughnessMapDef = {
|
|
2557
|
+
const clearcoatRoughnessMapDef = {
|
|
2558
|
+
index: writer.processTexture( material.clearcoatRoughnessMap ),
|
|
2559
|
+
texCoord: material.clearcoatRoughnessMap.channel
|
|
2560
|
+
};
|
|
2396
2561
|
writer.applyTextureTransform( clearcoatRoughnessMapDef, material.clearcoatRoughnessMap );
|
|
2397
2562
|
extensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef;
|
|
2398
2563
|
|
|
@@ -2400,7 +2565,10 @@ class GLTFMaterialsClearcoatExtension {
|
|
|
2400
2565
|
|
|
2401
2566
|
if ( material.clearcoatNormalMap ) {
|
|
2402
2567
|
|
|
2403
|
-
const clearcoatNormalMapDef = {
|
|
2568
|
+
const clearcoatNormalMapDef = {
|
|
2569
|
+
index: writer.processTexture( material.clearcoatNormalMap ),
|
|
2570
|
+
texCoord: material.clearcoatNormalMap.channel
|
|
2571
|
+
};
|
|
2404
2572
|
writer.applyTextureTransform( clearcoatNormalMapDef, material.clearcoatNormalMap );
|
|
2405
2573
|
extensionDef.clearcoatNormalTexture = clearcoatNormalMapDef;
|
|
2406
2574
|
|
|
@@ -2432,7 +2600,7 @@ class GLTFMaterialsIridescenceExtension {
|
|
|
2432
2600
|
|
|
2433
2601
|
writeMaterial( material, materialDef ) {
|
|
2434
2602
|
|
|
2435
|
-
if ( ! material.isMeshPhysicalMaterial ) return;
|
|
2603
|
+
if ( ! material.isMeshPhysicalMaterial || material.iridescence === 0 ) return;
|
|
2436
2604
|
|
|
2437
2605
|
const writer = this.writer;
|
|
2438
2606
|
const extensionsUsed = writer.extensionsUsed;
|
|
@@ -2443,7 +2611,10 @@ class GLTFMaterialsIridescenceExtension {
|
|
|
2443
2611
|
|
|
2444
2612
|
if ( material.iridescenceMap ) {
|
|
2445
2613
|
|
|
2446
|
-
const iridescenceMapDef = {
|
|
2614
|
+
const iridescenceMapDef = {
|
|
2615
|
+
index: writer.processTexture( material.iridescenceMap ),
|
|
2616
|
+
texCoord: material.iridescenceMap.channel
|
|
2617
|
+
};
|
|
2447
2618
|
writer.applyTextureTransform( iridescenceMapDef, material.iridescenceMap );
|
|
2448
2619
|
extensionDef.iridescenceTexture = iridescenceMapDef;
|
|
2449
2620
|
|
|
@@ -2455,7 +2626,10 @@ class GLTFMaterialsIridescenceExtension {
|
|
|
2455
2626
|
|
|
2456
2627
|
if ( material.iridescenceThicknessMap ) {
|
|
2457
2628
|
|
|
2458
|
-
const iridescenceThicknessMapDef = {
|
|
2629
|
+
const iridescenceThicknessMapDef = {
|
|
2630
|
+
index: writer.processTexture( material.iridescenceThicknessMap ),
|
|
2631
|
+
texCoord: material.iridescenceThicknessMap.channel
|
|
2632
|
+
};
|
|
2459
2633
|
writer.applyTextureTransform( iridescenceThicknessMapDef, material.iridescenceThicknessMap );
|
|
2460
2634
|
extensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef;
|
|
2461
2635
|
|
|
@@ -2497,7 +2671,10 @@ class GLTFMaterialsTransmissionExtension {
|
|
|
2497
2671
|
|
|
2498
2672
|
if ( material.transmissionMap ) {
|
|
2499
2673
|
|
|
2500
|
-
const transmissionMapDef = {
|
|
2674
|
+
const transmissionMapDef = {
|
|
2675
|
+
index: writer.processTexture( material.transmissionMap ),
|
|
2676
|
+
texCoord: material.transmissionMap.channel
|
|
2677
|
+
};
|
|
2501
2678
|
writer.applyTextureTransform( transmissionMapDef, material.transmissionMap );
|
|
2502
2679
|
extensionDef.transmissionTexture = transmissionMapDef;
|
|
2503
2680
|
|
|
@@ -2539,7 +2716,10 @@ class GLTFMaterialsVolumeExtension {
|
|
|
2539
2716
|
|
|
2540
2717
|
if ( material.thicknessMap ) {
|
|
2541
2718
|
|
|
2542
|
-
const thicknessMapDef = {
|
|
2719
|
+
const thicknessMapDef = {
|
|
2720
|
+
index: writer.processTexture( material.thicknessMap ),
|
|
2721
|
+
texCoord: material.thicknessMap.channel
|
|
2722
|
+
};
|
|
2543
2723
|
writer.applyTextureTransform( thicknessMapDef, material.thicknessMap );
|
|
2544
2724
|
extensionDef.thicknessTexture = thicknessMapDef;
|
|
2545
2725
|
|
|
@@ -2557,6 +2737,233 @@ class GLTFMaterialsVolumeExtension {
|
|
|
2557
2737
|
|
|
2558
2738
|
}
|
|
2559
2739
|
|
|
2740
|
+
/**
|
|
2741
|
+
* Materials ior Extension
|
|
2742
|
+
*
|
|
2743
|
+
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior
|
|
2744
|
+
*/
|
|
2745
|
+
class GLTFMaterialsIorExtension {
|
|
2746
|
+
|
|
2747
|
+
constructor( writer ) {
|
|
2748
|
+
|
|
2749
|
+
this.writer = writer;
|
|
2750
|
+
this.name = 'KHR_materials_ior';
|
|
2751
|
+
|
|
2752
|
+
}
|
|
2753
|
+
|
|
2754
|
+
writeMaterial( material, materialDef ) {
|
|
2755
|
+
|
|
2756
|
+
if ( ! material.isMeshPhysicalMaterial || material.ior === 1.5 ) return;
|
|
2757
|
+
|
|
2758
|
+
const writer = this.writer;
|
|
2759
|
+
const extensionsUsed = writer.extensionsUsed;
|
|
2760
|
+
|
|
2761
|
+
const extensionDef = {};
|
|
2762
|
+
|
|
2763
|
+
extensionDef.ior = material.ior;
|
|
2764
|
+
|
|
2765
|
+
materialDef.extensions = materialDef.extensions || {};
|
|
2766
|
+
materialDef.extensions[ this.name ] = extensionDef;
|
|
2767
|
+
|
|
2768
|
+
extensionsUsed[ this.name ] = true;
|
|
2769
|
+
|
|
2770
|
+
}
|
|
2771
|
+
|
|
2772
|
+
}
|
|
2773
|
+
|
|
2774
|
+
/**
|
|
2775
|
+
* Materials specular Extension
|
|
2776
|
+
*
|
|
2777
|
+
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular
|
|
2778
|
+
*/
|
|
2779
|
+
class GLTFMaterialsSpecularExtension {
|
|
2780
|
+
|
|
2781
|
+
constructor( writer ) {
|
|
2782
|
+
|
|
2783
|
+
this.writer = writer;
|
|
2784
|
+
this.name = 'KHR_materials_specular';
|
|
2785
|
+
|
|
2786
|
+
}
|
|
2787
|
+
|
|
2788
|
+
writeMaterial( material, materialDef ) {
|
|
2789
|
+
|
|
2790
|
+
if ( ! material.isMeshPhysicalMaterial || ( material.specularIntensity === 1.0 &&
|
|
2791
|
+
material.specularColor.equals( DEFAULT_SPECULAR_COLOR ) &&
|
|
2792
|
+
! material.specularIntensityMap && ! material.specularColorTexture ) ) return;
|
|
2793
|
+
|
|
2794
|
+
const writer = this.writer;
|
|
2795
|
+
const extensionsUsed = writer.extensionsUsed;
|
|
2796
|
+
|
|
2797
|
+
const extensionDef = {};
|
|
2798
|
+
|
|
2799
|
+
if ( material.specularIntensityMap ) {
|
|
2800
|
+
|
|
2801
|
+
const specularIntensityMapDef = {
|
|
2802
|
+
index: writer.processTexture( material.specularIntensityMap ),
|
|
2803
|
+
texCoord: material.specularIntensityMap.channel
|
|
2804
|
+
};
|
|
2805
|
+
writer.applyTextureTransform( specularIntensityMapDef, material.specularIntensityMap );
|
|
2806
|
+
extensionDef.specularTexture = specularIntensityMapDef;
|
|
2807
|
+
|
|
2808
|
+
}
|
|
2809
|
+
|
|
2810
|
+
if ( material.specularColorMap ) {
|
|
2811
|
+
|
|
2812
|
+
const specularColorMapDef = {
|
|
2813
|
+
index: writer.processTexture( material.specularColorMap ),
|
|
2814
|
+
texCoord: material.specularColorMap.channel
|
|
2815
|
+
};
|
|
2816
|
+
writer.applyTextureTransform( specularColorMapDef, material.specularColorMap );
|
|
2817
|
+
extensionDef.specularColorTexture = specularColorMapDef;
|
|
2818
|
+
|
|
2819
|
+
}
|
|
2820
|
+
|
|
2821
|
+
extensionDef.specularFactor = material.specularIntensity;
|
|
2822
|
+
extensionDef.specularColorFactor = material.specularColor.toArray();
|
|
2823
|
+
|
|
2824
|
+
materialDef.extensions = materialDef.extensions || {};
|
|
2825
|
+
materialDef.extensions[ this.name ] = extensionDef;
|
|
2826
|
+
|
|
2827
|
+
extensionsUsed[ this.name ] = true;
|
|
2828
|
+
|
|
2829
|
+
}
|
|
2830
|
+
|
|
2831
|
+
}
|
|
2832
|
+
|
|
2833
|
+
/**
|
|
2834
|
+
* Sheen Materials Extension
|
|
2835
|
+
*
|
|
2836
|
+
* Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen
|
|
2837
|
+
*/
|
|
2838
|
+
class GLTFMaterialsSheenExtension {
|
|
2839
|
+
|
|
2840
|
+
constructor( writer ) {
|
|
2841
|
+
|
|
2842
|
+
this.writer = writer;
|
|
2843
|
+
this.name = 'KHR_materials_sheen';
|
|
2844
|
+
|
|
2845
|
+
}
|
|
2846
|
+
|
|
2847
|
+
writeMaterial( material, materialDef ) {
|
|
2848
|
+
|
|
2849
|
+
if ( ! material.isMeshPhysicalMaterial || material.sheen == 0.0 ) return;
|
|
2850
|
+
|
|
2851
|
+
const writer = this.writer;
|
|
2852
|
+
const extensionsUsed = writer.extensionsUsed;
|
|
2853
|
+
|
|
2854
|
+
const extensionDef = {};
|
|
2855
|
+
|
|
2856
|
+
if ( material.sheenRoughnessMap ) {
|
|
2857
|
+
|
|
2858
|
+
const sheenRoughnessMapDef = {
|
|
2859
|
+
index: writer.processTexture( material.sheenRoughnessMap ),
|
|
2860
|
+
texCoord: material.sheenRoughnessMap.channel
|
|
2861
|
+
};
|
|
2862
|
+
writer.applyTextureTransform( sheenRoughnessMapDef, material.sheenRoughnessMap );
|
|
2863
|
+
extensionDef.sheenRoughnessTexture = sheenRoughnessMapDef;
|
|
2864
|
+
|
|
2865
|
+
}
|
|
2866
|
+
|
|
2867
|
+
if ( material.sheenColorMap ) {
|
|
2868
|
+
|
|
2869
|
+
const sheenColorMapDef = {
|
|
2870
|
+
index: writer.processTexture( material.sheenColorMap ),
|
|
2871
|
+
texCoord: material.sheenColorMap.channel
|
|
2872
|
+
};
|
|
2873
|
+
writer.applyTextureTransform( sheenColorMapDef, material.sheenColorMap );
|
|
2874
|
+
extensionDef.sheenColorTexture = sheenColorMapDef;
|
|
2875
|
+
|
|
2876
|
+
}
|
|
2877
|
+
|
|
2878
|
+
extensionDef.sheenRoughnessFactor = material.sheenRoughness;
|
|
2879
|
+
extensionDef.sheenColorFactor = material.sheenColor.toArray();
|
|
2880
|
+
|
|
2881
|
+
materialDef.extensions = materialDef.extensions || {};
|
|
2882
|
+
materialDef.extensions[ this.name ] = extensionDef;
|
|
2883
|
+
|
|
2884
|
+
extensionsUsed[ this.name ] = true;
|
|
2885
|
+
|
|
2886
|
+
}
|
|
2887
|
+
|
|
2888
|
+
}
|
|
2889
|
+
|
|
2890
|
+
/**
|
|
2891
|
+
* Anisotropy Materials Extension
|
|
2892
|
+
*
|
|
2893
|
+
* Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_anisotropy
|
|
2894
|
+
*/
|
|
2895
|
+
class GLTFMaterialsAnisotropyExtension {
|
|
2896
|
+
|
|
2897
|
+
constructor( writer ) {
|
|
2898
|
+
|
|
2899
|
+
this.writer = writer;
|
|
2900
|
+
this.name = 'KHR_materials_anisotropy';
|
|
2901
|
+
|
|
2902
|
+
}
|
|
2903
|
+
|
|
2904
|
+
writeMaterial( material, materialDef ) {
|
|
2905
|
+
|
|
2906
|
+
if ( ! material.isMeshPhysicalMaterial || material.anisotropy == 0.0 ) return;
|
|
2907
|
+
|
|
2908
|
+
const writer = this.writer;
|
|
2909
|
+
const extensionsUsed = writer.extensionsUsed;
|
|
2910
|
+
|
|
2911
|
+
const extensionDef = {};
|
|
2912
|
+
|
|
2913
|
+
if ( material.anisotropyMap ) {
|
|
2914
|
+
|
|
2915
|
+
const anisotropyMapDef = { index: writer.processTexture( material.anisotropyMap ) };
|
|
2916
|
+
writer.applyTextureTransform( anisotropyMapDef, material.anisotropyMap );
|
|
2917
|
+
extensionDef.anisotropyTexture = anisotropyMapDef;
|
|
2918
|
+
|
|
2919
|
+
}
|
|
2920
|
+
|
|
2921
|
+
extensionDef.anisotropyStrength = material.anisotropy;
|
|
2922
|
+
extensionDef.anisotropyRotation = material.anisotropyRotation;
|
|
2923
|
+
|
|
2924
|
+
materialDef.extensions = materialDef.extensions || {};
|
|
2925
|
+
materialDef.extensions[ this.name ] = extensionDef;
|
|
2926
|
+
|
|
2927
|
+
extensionsUsed[ this.name ] = true;
|
|
2928
|
+
|
|
2929
|
+
}
|
|
2930
|
+
|
|
2931
|
+
}
|
|
2932
|
+
|
|
2933
|
+
/**
|
|
2934
|
+
* Materials Emissive Strength Extension
|
|
2935
|
+
*
|
|
2936
|
+
* Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md
|
|
2937
|
+
*/
|
|
2938
|
+
class GLTFMaterialsEmissiveStrengthExtension {
|
|
2939
|
+
|
|
2940
|
+
constructor( writer ) {
|
|
2941
|
+
|
|
2942
|
+
this.writer = writer;
|
|
2943
|
+
this.name = 'KHR_materials_emissive_strength';
|
|
2944
|
+
|
|
2945
|
+
}
|
|
2946
|
+
|
|
2947
|
+
writeMaterial( material, materialDef ) {
|
|
2948
|
+
|
|
2949
|
+
if ( ! material.isMeshStandardMaterial || material.emissiveIntensity === 1.0 ) return;
|
|
2950
|
+
|
|
2951
|
+
const writer = this.writer;
|
|
2952
|
+
const extensionsUsed = writer.extensionsUsed;
|
|
2953
|
+
|
|
2954
|
+
const extensionDef = {};
|
|
2955
|
+
|
|
2956
|
+
extensionDef.emissiveStrength = material.emissiveIntensity;
|
|
2957
|
+
|
|
2958
|
+
materialDef.extensions = materialDef.extensions || {};
|
|
2959
|
+
materialDef.extensions[ this.name ] = extensionDef;
|
|
2960
|
+
|
|
2961
|
+
extensionsUsed[ this.name ] = true;
|
|
2962
|
+
|
|
2963
|
+
}
|
|
2964
|
+
|
|
2965
|
+
}
|
|
2966
|
+
|
|
2560
2967
|
/**
|
|
2561
2968
|
* Static utility functions
|
|
2562
2969
|
*/
|