super-three 0.152.0 → 0.154.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +778 -557
- package/build/three.js +778 -557
- package/build/three.min.js +1 -1
- package/build/three.module.js +769 -539
- package/build/three.module.min.js +1 -1
- package/examples/jsm/cameras/CinematicCamera.js +1 -2
- package/examples/jsm/capabilities/WebGPU.js +15 -1
- package/examples/jsm/controls/ArcballControls.js +2 -1
- package/examples/jsm/controls/FlyControls.js +25 -9
- package/examples/jsm/controls/OrbitControls.js +5 -1
- package/examples/jsm/csm/CSM.js +1 -3
- package/examples/jsm/effects/AnaglyphEffect.js +6 -20
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
- package/examples/jsm/environments/RoomEnvironment.js +6 -2
- package/examples/jsm/exporters/GLTFExporter.js +74 -2
- package/examples/jsm/exporters/USDZExporter.js +170 -129
- package/examples/jsm/helpers/ViewHelper.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +5 -1
- package/examples/jsm/loaders/AMFLoader.js +5 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -1
- package/examples/jsm/loaders/DRACOLoader.js +2 -0
- package/examples/jsm/loaders/FBXLoader.js +9 -2
- package/examples/jsm/loaders/GLTFLoader.js +230 -94
- package/examples/jsm/loaders/KTX2Loader.js +106 -47
- package/examples/jsm/loaders/LDrawLoader.js +4 -7
- package/examples/jsm/loaders/MMDLoader.js +40 -13
- package/examples/jsm/loaders/PCDLoader.js +25 -10
- package/examples/jsm/loaders/PDBLoader.js +7 -2
- package/examples/jsm/loaders/PLYLoader.js +30 -8
- package/examples/jsm/loaders/STLLoader.js +8 -3
- package/examples/jsm/loaders/VRMLLoader.js +55 -7
- package/examples/jsm/loaders/VTKLoader.js +12 -4
- package/examples/jsm/loaders/XYZLoader.js +9 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -2
- package/examples/jsm/math/Lut.js +5 -4
- package/examples/jsm/math/MeshSurfaceSampler.js +82 -37
- package/examples/jsm/misc/GPUComputationRenderer.js +1 -0
- package/examples/jsm/misc/VolumeSlice.js +3 -1
- package/examples/jsm/nodes/Nodes.js +22 -16
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
- package/examples/jsm/nodes/accessors/BufferNode.js +2 -2
- package/examples/jsm/nodes/accessors/CameraNode.js +25 -4
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +7 -1
- package/examples/jsm/nodes/accessors/InstanceNode.js +29 -12
- package/examples/jsm/nodes/accessors/MaterialNode.js +55 -47
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +3 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +4 -9
- package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +3 -2
- package/examples/jsm/nodes/accessors/Object3DNode.js +10 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +2 -2
- package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
- package/examples/jsm/nodes/accessors/SkinningNode.js +43 -62
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +2 -2
- package/examples/jsm/nodes/accessors/TangentNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +68 -6
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
- package/examples/jsm/nodes/accessors/UVNode.js +1 -1
- package/examples/jsm/nodes/code/CodeNode.js +3 -0
- package/examples/jsm/nodes/code/FunctionNode.js +25 -4
- package/examples/jsm/nodes/core/AttributeNode.js +1 -1
- package/examples/jsm/nodes/core/BypassNode.js +2 -2
- package/examples/jsm/nodes/core/ContextNode.js +2 -0
- package/examples/jsm/nodes/core/IndexNode.js +66 -0
- package/examples/jsm/nodes/core/LightingModel.js +2 -1
- package/examples/jsm/nodes/core/Node.js +13 -16
- package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +86 -8
- package/examples/jsm/nodes/core/NodeUtils.js +10 -0
- package/examples/jsm/nodes/core/PropertyNode.js +6 -2
- package/examples/jsm/nodes/core/StackNode.js +8 -1
- package/examples/jsm/nodes/core/UniformNode.js +1 -1
- package/examples/jsm/nodes/core/VarNode.js +1 -3
- package/examples/jsm/nodes/display/BlendModeNode.js +9 -9
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +7 -7
- package/examples/jsm/nodes/display/ColorSpaceNode.js +50 -49
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -3
- package/examples/jsm/nodes/display/ToneMappingNode.js +24 -15
- package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +7 -6
- package/examples/jsm/nodes/display/ViewportTextureNode.js +33 -19
- package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +5 -5
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -8
- package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +4 -4
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +2 -2
- package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
- package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +2 -4
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/examples/jsm/nodes/functions/PhongLightingModel.js +7 -7
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +132 -19
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/examples/jsm/nodes/functions/material/getRoughness.js +3 -3
- package/examples/jsm/nodes/geometry/RangeNode.js +33 -51
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +6 -3
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -2
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +107 -62
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightUtils.js +2 -2
- package/examples/jsm/nodes/lighting/LightingContextNode.js +17 -15
- package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/SpotLightNode.js +3 -3
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -15
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -15
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -9
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +41 -0
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +1 -14
- package/examples/jsm/nodes/materials/NodeMaterial.js +119 -29
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -9
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -14
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -4
- package/examples/jsm/nodes/math/MathNode.js +6 -0
- package/examples/jsm/nodes/math/OperatorNode.js +1 -1
- package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
- package/examples/jsm/nodes/shadernode/ShaderNode.js +60 -33
- package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -3
- package/examples/jsm/nodes/utils/LoopNode.js +186 -0
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +1 -1
- package/examples/jsm/objects/GroundProjectedSkybox.js +1 -1
- package/examples/jsm/objects/Lensflare.js +3 -4
- package/examples/jsm/objects/MarchingCubes.js +5 -1
- package/examples/jsm/objects/Reflector.js +4 -1
- package/examples/jsm/objects/Refractor.js +1 -1
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -1
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/offscreen/scene.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +93 -133
- package/examples/jsm/postprocessing/AfterimagePass.js +3 -0
- package/examples/jsm/postprocessing/BloomPass.js +7 -2
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -1
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +8 -9
- package/examples/jsm/postprocessing/OutputPass.js +72 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +4 -2
- package/examples/jsm/postprocessing/SMAAPass.js +5 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +5 -13
- package/examples/jsm/postprocessing/SSAOPass.js +4 -2
- package/examples/jsm/postprocessing/SSRPass.js +3 -1
- package/examples/jsm/postprocessing/SavePass.js +5 -2
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
- package/examples/jsm/postprocessing/TexturePass.js +2 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -13
- package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +2 -2
- package/examples/jsm/renderers/common/Attributes.js +75 -0
- package/examples/jsm/renderers/common/Backend.js +162 -0
- package/examples/jsm/renderers/common/Background.js +134 -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/{webgpu/WebGPUWeakMap.js → common/ChainMap.js} +11 -5
- 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/{webgpu/WebGPUGeometries.js → common/Geometries.js} +38 -37
- 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 +321 -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} +2 -39
- package/examples/jsm/renderers/common/RenderLists.js +38 -0
- package/examples/jsm/renderers/common/RenderObject.js +113 -0
- package/examples/jsm/renderers/common/RenderObjects.js +92 -0
- package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
- package/examples/jsm/renderers/{webgpu/WebGPURenderTarget.js → common/RenderTarget.js} +2 -2
- package/examples/jsm/renderers/common/Renderer.js +864 -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/{webgpu/nodes/WebGPUNodes.js → common/nodes/NodeRender.js} +3 -3
- 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/GLSLNodeBuilder.js +340 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +23 -19
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -1131
- package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +75 -45
- 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 +255 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
- package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +6 -7
- package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +154 -247
- package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +3 -25
- package/examples/jsm/renderers/webgpu/{WebGPUTextures.js → utils/WebGPUTextureUtils.js} +392 -505
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
- package/examples/jsm/shaders/BleachBypassShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +1 -2
- 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 +4 -2
- 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/OutputShader.js +61 -0
- package/examples/jsm/shaders/RGBShiftShader.js +2 -0
- package/examples/jsm/shaders/SepiaShader.js +2 -0
- package/examples/jsm/shaders/ToonShader.js +13 -5
- 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 +17 -1
- package/examples/jsm/utils/TextureUtils.js +86 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
- package/examples/jsm/webxr/XRPlanes.js +100 -0
- package/package.json +3 -1
- package/src/Three.Legacy.js +0 -228
- 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 +13 -1
- package/src/core/BufferAttribute.js +3 -25
- package/src/core/BufferGeometry.js +1 -8
- package/src/core/Object3D.js +1 -1
- package/src/extras/core/Curve.js +1 -1
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/Loader.js +2 -0
- package/src/loaders/MaterialLoader.js +5 -0
- package/src/loaders/ObjectLoader.js +1 -0
- package/src/materials/Material.js +13 -1
- package/src/materials/MeshPhysicalMaterial.js +32 -6
- package/src/math/Color.js +16 -11
- package/src/math/Frustum.js +16 -2
- package/src/math/MathUtils.js +16 -0
- package/src/math/Matrix3.js +26 -6
- package/src/math/Matrix4.js +74 -19
- package/src/objects/InstancedMesh.js +3 -0
- package/src/objects/Mesh.js +14 -10
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +36 -8
- package/src/renderers/WebGLRenderer.js +126 -21
- package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
- package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +9 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +26 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +10 -2
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +10 -5
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +6 -1
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +7 -1
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +6 -1
- package/src/renderers/shaders/ShaderChunk.js +10 -6
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -2
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +12 -2
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/points.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib.js +4 -1
- package/src/renderers/shaders/UniformsLib.js +2 -0
- package/src/renderers/webgl/WebGLBindingStates.js +13 -5
- package/src/renderers/webgl/WebGLGeometries.js +12 -0
- package/src/renderers/webgl/WebGLInfo.js +0 -1
- package/src/renderers/webgl/WebGLMaterials.js +18 -0
- package/src/renderers/webgl/WebGLObjects.js +23 -3
- package/src/renderers/webgl/WebGLProgram.js +43 -5
- package/src/renderers/webgl/WebGLPrograms.js +19 -7
- package/src/renderers/webgl/WebGLTextures.js +19 -1
- package/src/renderers/webvr/WebVRManager.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +39 -99
- package/src/scenes/Scene.js +0 -14
- 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 +1 -1
- package/examples/jsm/exporters/ColladaExporter.js +0 -725
- package/examples/jsm/geometries/LightningStrike.js +0 -1017
- package/examples/jsm/loaders/PRWMLoader.js +0 -299
- package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -26
- package/examples/jsm/objects/LightningStorm.js +0 -245
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -361
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -197
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -190
- package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -270
- package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
- package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
- package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -44
- package/examples/jsm/renderers/webgpu/WebGPURenderObject.js +0 -40
- package/examples/jsm/renderers/webgpu/WebGPURenderObjects.js +0 -50
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -274
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -54
- package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -75
- 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 -38
- package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
- package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -88
- package/examples/jsm/shaders/ToneMapShader.js +0 -73
- /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
- /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
|
@@ -142,6 +142,12 @@ class GLTFLoader extends Loader {
|
|
|
142
142
|
|
|
143
143
|
} );
|
|
144
144
|
|
|
145
|
+
this.register( function ( parser ) {
|
|
146
|
+
|
|
147
|
+
return new GLTFMaterialsAnisotropyExtension( parser );
|
|
148
|
+
|
|
149
|
+
} );
|
|
150
|
+
|
|
145
151
|
this.register( function ( parser ) {
|
|
146
152
|
|
|
147
153
|
return new GLTFLightsExtension( parser );
|
|
@@ -472,6 +478,7 @@ const EXTENSIONS = {
|
|
|
472
478
|
KHR_MATERIALS_SPECULAR: 'KHR_materials_specular',
|
|
473
479
|
KHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',
|
|
474
480
|
KHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',
|
|
481
|
+
KHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',
|
|
475
482
|
KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',
|
|
476
483
|
KHR_MATERIALS_VOLUME: 'KHR_materials_volume',
|
|
477
484
|
KHR_TEXTURE_BASISU: 'KHR_texture_basisu',
|
|
@@ -1187,6 +1194,70 @@ class GLTFMaterialsSpecularExtension {
|
|
|
1187
1194
|
|
|
1188
1195
|
}
|
|
1189
1196
|
|
|
1197
|
+
/**
|
|
1198
|
+
* Materials anisotropy Extension
|
|
1199
|
+
*
|
|
1200
|
+
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy
|
|
1201
|
+
*/
|
|
1202
|
+
class GLTFMaterialsAnisotropyExtension {
|
|
1203
|
+
|
|
1204
|
+
constructor( parser ) {
|
|
1205
|
+
|
|
1206
|
+
this.parser = parser;
|
|
1207
|
+
this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;
|
|
1208
|
+
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
getMaterialType( materialIndex ) {
|
|
1212
|
+
|
|
1213
|
+
const parser = this.parser;
|
|
1214
|
+
const materialDef = parser.json.materials[ materialIndex ];
|
|
1215
|
+
|
|
1216
|
+
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
|
|
1217
|
+
|
|
1218
|
+
return MeshPhysicalMaterial;
|
|
1219
|
+
|
|
1220
|
+
}
|
|
1221
|
+
|
|
1222
|
+
extendMaterialParams( materialIndex, materialParams ) {
|
|
1223
|
+
|
|
1224
|
+
const parser = this.parser;
|
|
1225
|
+
const materialDef = parser.json.materials[ materialIndex ];
|
|
1226
|
+
|
|
1227
|
+
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
1228
|
+
|
|
1229
|
+
return Promise.resolve();
|
|
1230
|
+
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
const pending = [];
|
|
1234
|
+
|
|
1235
|
+
const extension = materialDef.extensions[ this.name ];
|
|
1236
|
+
|
|
1237
|
+
if ( extension.anisotropyStrength !== undefined ) {
|
|
1238
|
+
|
|
1239
|
+
materialParams.anisotropy = extension.anisotropyStrength;
|
|
1240
|
+
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
if ( extension.anisotropyRotation !== undefined ) {
|
|
1244
|
+
|
|
1245
|
+
materialParams.anisotropyRotation = extension.anisotropyRotation;
|
|
1246
|
+
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
if ( extension.anisotropyTexture !== undefined ) {
|
|
1250
|
+
|
|
1251
|
+
pending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );
|
|
1252
|
+
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1255
|
+
return Promise.all( pending );
|
|
1256
|
+
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1190
1261
|
/**
|
|
1191
1262
|
* BasisU Texture Extension
|
|
1192
1263
|
*
|
|
@@ -2255,9 +2326,10 @@ function updateMorphTargets( mesh, meshDef ) {
|
|
|
2255
2326
|
|
|
2256
2327
|
function createPrimitiveKey( primitiveDef ) {
|
|
2257
2328
|
|
|
2258
|
-
const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];
|
|
2259
2329
|
let geometryKey;
|
|
2260
2330
|
|
|
2331
|
+
const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];
|
|
2332
|
+
|
|
2261
2333
|
if ( dracoExtension ) {
|
|
2262
2334
|
|
|
2263
2335
|
geometryKey = 'draco:' + dracoExtension.bufferView
|
|
@@ -2270,6 +2342,16 @@ function createPrimitiveKey( primitiveDef ) {
|
|
|
2270
2342
|
|
|
2271
2343
|
}
|
|
2272
2344
|
|
|
2345
|
+
if ( primitiveDef.targets !== undefined ) {
|
|
2346
|
+
|
|
2347
|
+
for ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {
|
|
2348
|
+
|
|
2349
|
+
geometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );
|
|
2350
|
+
|
|
2351
|
+
}
|
|
2352
|
+
|
|
2353
|
+
}
|
|
2354
|
+
|
|
2273
2355
|
return geometryKey;
|
|
2274
2356
|
|
|
2275
2357
|
}
|
|
@@ -3429,17 +3511,17 @@ class GLTFParser {
|
|
|
3429
3511
|
|
|
3430
3512
|
const sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );
|
|
3431
3513
|
|
|
3432
|
-
|
|
3514
|
+
if ( sanitizedName in this.nodeNamesUsed ) {
|
|
3433
3515
|
|
|
3434
|
-
|
|
3516
|
+
return sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );
|
|
3435
3517
|
|
|
3436
|
-
|
|
3518
|
+
} else {
|
|
3437
3519
|
|
|
3438
|
-
|
|
3520
|
+
this.nodeNamesUsed[ sanitizedName ] = 0;
|
|
3439
3521
|
|
|
3440
|
-
|
|
3522
|
+
return sanitizedName;
|
|
3441
3523
|
|
|
3442
|
-
|
|
3524
|
+
}
|
|
3443
3525
|
|
|
3444
3526
|
}
|
|
3445
3527
|
|
|
@@ -3637,12 +3719,16 @@ class GLTFParser {
|
|
|
3637
3719
|
|
|
3638
3720
|
if ( meshes.length === 1 ) {
|
|
3639
3721
|
|
|
3722
|
+
if ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );
|
|
3723
|
+
|
|
3640
3724
|
return meshes[ 0 ];
|
|
3641
3725
|
|
|
3642
3726
|
}
|
|
3643
3727
|
|
|
3644
3728
|
const group = new Group();
|
|
3645
3729
|
|
|
3730
|
+
if ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );
|
|
3731
|
+
|
|
3646
3732
|
parser.associations.set( group, { meshes: meshIndex } );
|
|
3647
3733
|
|
|
3648
3734
|
for ( let i = 0, il = meshes.length; i < il; i ++ ) {
|
|
@@ -3771,6 +3857,7 @@ class GLTFParser {
|
|
|
3771
3857
|
loadAnimation( animationIndex ) {
|
|
3772
3858
|
|
|
3773
3859
|
const json = this.json;
|
|
3860
|
+
const parser = this;
|
|
3774
3861
|
|
|
3775
3862
|
const animationDef = json.animations[ animationIndex ];
|
|
3776
3863
|
const animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;
|
|
@@ -3828,103 +3915,23 @@ class GLTFParser {
|
|
|
3828
3915
|
|
|
3829
3916
|
if ( node === undefined ) continue;
|
|
3830
3917
|
|
|
3831
|
-
node.updateMatrix
|
|
3918
|
+
if ( node.updateMatrix ) {
|
|
3832
3919
|
|
|
3833
|
-
|
|
3834
|
-
|
|
3835
|
-
switch ( PATH_PROPERTIES[ target.path ] ) {
|
|
3836
|
-
|
|
3837
|
-
case PATH_PROPERTIES.weights:
|
|
3838
|
-
|
|
3839
|
-
TypedKeyframeTrack = NumberKeyframeTrack;
|
|
3840
|
-
break;
|
|
3841
|
-
|
|
3842
|
-
case PATH_PROPERTIES.rotation:
|
|
3843
|
-
|
|
3844
|
-
TypedKeyframeTrack = QuaternionKeyframeTrack;
|
|
3845
|
-
break;
|
|
3846
|
-
|
|
3847
|
-
case PATH_PROPERTIES.position:
|
|
3848
|
-
case PATH_PROPERTIES.scale:
|
|
3849
|
-
default:
|
|
3850
|
-
|
|
3851
|
-
TypedKeyframeTrack = VectorKeyframeTrack;
|
|
3852
|
-
break;
|
|
3920
|
+
node.updateMatrix();
|
|
3921
|
+
node.matrixAutoUpdate = true;
|
|
3853
3922
|
|
|
3854
3923
|
}
|
|
3855
3924
|
|
|
3856
|
-
const
|
|
3857
|
-
|
|
3858
|
-
const interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;
|
|
3859
|
-
|
|
3860
|
-
const targetNames = [];
|
|
3861
|
-
|
|
3862
|
-
if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
|
|
3863
|
-
|
|
3864
|
-
node.traverse( function ( object ) {
|
|
3865
|
-
|
|
3866
|
-
if ( object.morphTargetInfluences ) {
|
|
3925
|
+
const createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );
|
|
3867
3926
|
|
|
3868
|
-
|
|
3927
|
+
if ( createdTracks ) {
|
|
3869
3928
|
|
|
3870
|
-
|
|
3871
|
-
|
|
3872
|
-
} );
|
|
3929
|
+
for ( let k = 0; k < createdTracks.length; k ++ ) {
|
|
3873
3930
|
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
targetNames.push( targetName );
|
|
3877
|
-
|
|
3878
|
-
}
|
|
3879
|
-
|
|
3880
|
-
let outputArray = outputAccessor.array;
|
|
3881
|
-
|
|
3882
|
-
if ( outputAccessor.normalized ) {
|
|
3883
|
-
|
|
3884
|
-
const scale = getNormalizedComponentScale( outputArray.constructor );
|
|
3885
|
-
const scaled = new Float32Array( outputArray.length );
|
|
3886
|
-
|
|
3887
|
-
for ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {
|
|
3888
|
-
|
|
3889
|
-
scaled[ j ] = outputArray[ j ] * scale;
|
|
3931
|
+
tracks.push( createdTracks[ k ] );
|
|
3890
3932
|
|
|
3891
3933
|
}
|
|
3892
3934
|
|
|
3893
|
-
outputArray = scaled;
|
|
3894
|
-
|
|
3895
|
-
}
|
|
3896
|
-
|
|
3897
|
-
for ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {
|
|
3898
|
-
|
|
3899
|
-
const track = new TypedKeyframeTrack(
|
|
3900
|
-
targetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],
|
|
3901
|
-
inputAccessor.array,
|
|
3902
|
-
outputArray,
|
|
3903
|
-
interpolation
|
|
3904
|
-
);
|
|
3905
|
-
|
|
3906
|
-
// Override interpolation with custom factory method.
|
|
3907
|
-
if ( sampler.interpolation === 'CUBICSPLINE' ) {
|
|
3908
|
-
|
|
3909
|
-
track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {
|
|
3910
|
-
|
|
3911
|
-
// A CUBICSPLINE keyframe in glTF has three output values for each input value,
|
|
3912
|
-
// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()
|
|
3913
|
-
// must be divided by three to get the interpolant's sampleSize argument.
|
|
3914
|
-
|
|
3915
|
-
const interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;
|
|
3916
|
-
|
|
3917
|
-
return new interpolantType( this.times, this.values, this.getValueSize() / 3, result );
|
|
3918
|
-
|
|
3919
|
-
};
|
|
3920
|
-
|
|
3921
|
-
// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.
|
|
3922
|
-
track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;
|
|
3923
|
-
|
|
3924
|
-
}
|
|
3925
|
-
|
|
3926
|
-
tracks.push( track );
|
|
3927
|
-
|
|
3928
3935
|
}
|
|
3929
3936
|
|
|
3930
3937
|
}
|
|
@@ -4255,6 +4262,135 @@ class GLTFParser {
|
|
|
4255
4262
|
|
|
4256
4263
|
}
|
|
4257
4264
|
|
|
4265
|
+
_createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {
|
|
4266
|
+
|
|
4267
|
+
const tracks = [];
|
|
4268
|
+
|
|
4269
|
+
const targetName = node.name ? node.name : node.uuid;
|
|
4270
|
+
|
|
4271
|
+
const targetNames = [];
|
|
4272
|
+
|
|
4273
|
+
if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
|
|
4274
|
+
|
|
4275
|
+
node.traverse( function ( object ) {
|
|
4276
|
+
|
|
4277
|
+
if ( object.morphTargetInfluences ) {
|
|
4278
|
+
|
|
4279
|
+
targetNames.push( object.name ? object.name : object.uuid );
|
|
4280
|
+
|
|
4281
|
+
}
|
|
4282
|
+
|
|
4283
|
+
} );
|
|
4284
|
+
|
|
4285
|
+
} else {
|
|
4286
|
+
|
|
4287
|
+
targetNames.push( targetName );
|
|
4288
|
+
|
|
4289
|
+
}
|
|
4290
|
+
|
|
4291
|
+
let TypedKeyframeTrack;
|
|
4292
|
+
|
|
4293
|
+
switch ( PATH_PROPERTIES[ target.path ] ) {
|
|
4294
|
+
|
|
4295
|
+
case PATH_PROPERTIES.weights:
|
|
4296
|
+
|
|
4297
|
+
TypedKeyframeTrack = NumberKeyframeTrack;
|
|
4298
|
+
break;
|
|
4299
|
+
|
|
4300
|
+
case PATH_PROPERTIES.rotation:
|
|
4301
|
+
|
|
4302
|
+
TypedKeyframeTrack = QuaternionKeyframeTrack;
|
|
4303
|
+
break;
|
|
4304
|
+
|
|
4305
|
+
case PATH_PROPERTIES.position:
|
|
4306
|
+
case PATH_PROPERTIES.scale:
|
|
4307
|
+
default:
|
|
4308
|
+
switch ( outputAccessor.itemSize ) {
|
|
4309
|
+
|
|
4310
|
+
case 1:
|
|
4311
|
+
TypedKeyframeTrack = NumberKeyframeTrack;
|
|
4312
|
+
break;
|
|
4313
|
+
case 2:
|
|
4314
|
+
case 3:
|
|
4315
|
+
TypedKeyframeTrack = VectorKeyframeTrack;
|
|
4316
|
+
break;
|
|
4317
|
+
|
|
4318
|
+
}
|
|
4319
|
+
|
|
4320
|
+
break;
|
|
4321
|
+
|
|
4322
|
+
}
|
|
4323
|
+
|
|
4324
|
+
const interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;
|
|
4325
|
+
|
|
4326
|
+
const outputArray = this._getArrayFromAccessor( outputAccessor );
|
|
4327
|
+
|
|
4328
|
+
for ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {
|
|
4329
|
+
|
|
4330
|
+
const track = new TypedKeyframeTrack(
|
|
4331
|
+
targetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],
|
|
4332
|
+
inputAccessor.array,
|
|
4333
|
+
outputArray,
|
|
4334
|
+
interpolation
|
|
4335
|
+
);
|
|
4336
|
+
|
|
4337
|
+
// Override interpolation with custom factory method.
|
|
4338
|
+
if ( interpolation === 'CUBICSPLINE' ) {
|
|
4339
|
+
|
|
4340
|
+
this._createCubicSplineTrackInterpolant( track );
|
|
4341
|
+
|
|
4342
|
+
}
|
|
4343
|
+
|
|
4344
|
+
tracks.push( track );
|
|
4345
|
+
|
|
4346
|
+
}
|
|
4347
|
+
|
|
4348
|
+
return tracks;
|
|
4349
|
+
|
|
4350
|
+
}
|
|
4351
|
+
|
|
4352
|
+
_getArrayFromAccessor( accessor ) {
|
|
4353
|
+
|
|
4354
|
+
let outputArray = accessor.array;
|
|
4355
|
+
|
|
4356
|
+
if ( accessor.normalized ) {
|
|
4357
|
+
|
|
4358
|
+
const scale = getNormalizedComponentScale( outputArray.constructor );
|
|
4359
|
+
const scaled = new Float32Array( outputArray.length );
|
|
4360
|
+
|
|
4361
|
+
for ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {
|
|
4362
|
+
|
|
4363
|
+
scaled[ j ] = outputArray[ j ] * scale;
|
|
4364
|
+
|
|
4365
|
+
}
|
|
4366
|
+
|
|
4367
|
+
outputArray = scaled;
|
|
4368
|
+
|
|
4369
|
+
}
|
|
4370
|
+
|
|
4371
|
+
return outputArray;
|
|
4372
|
+
|
|
4373
|
+
}
|
|
4374
|
+
|
|
4375
|
+
_createCubicSplineTrackInterpolant( track ) {
|
|
4376
|
+
|
|
4377
|
+
track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {
|
|
4378
|
+
|
|
4379
|
+
// A CUBICSPLINE keyframe in glTF has three output values for each input value,
|
|
4380
|
+
// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()
|
|
4381
|
+
// must be divided by three to get the interpolant's sampleSize argument.
|
|
4382
|
+
|
|
4383
|
+
const interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;
|
|
4384
|
+
|
|
4385
|
+
return new interpolantType( this.times, this.values, this.getValueSize() / 3, result );
|
|
4386
|
+
|
|
4387
|
+
};
|
|
4388
|
+
|
|
4389
|
+
// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.
|
|
4390
|
+
track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;
|
|
4391
|
+
|
|
4392
|
+
}
|
|
4393
|
+
|
|
4258
4394
|
}
|
|
4259
4395
|
|
|
4260
4396
|
/**
|
|
@@ -253,16 +253,30 @@ class KTX2Loader extends Loader {
|
|
|
253
253
|
|
|
254
254
|
_createTextureFrom( transcodeResult, container ) {
|
|
255
255
|
|
|
256
|
-
const {
|
|
256
|
+
const { faces, width, height, format, type, error, dfdTransferFn, dfdFlags } = transcodeResult;
|
|
257
257
|
|
|
258
258
|
if ( type === 'error' ) return Promise.reject( error );
|
|
259
259
|
|
|
260
|
-
|
|
261
|
-
? new CompressedArrayTexture( mipmaps, width, height, container.layerCount, format, UnsignedByteType )
|
|
262
|
-
: new CompressedTexture( mipmaps, width, height, format, UnsignedByteType );
|
|
260
|
+
let texture;
|
|
263
261
|
|
|
262
|
+
if ( container.faceCount === 6 ) {
|
|
264
263
|
|
|
265
|
-
|
|
264
|
+
texture = new CompressedTexture();
|
|
265
|
+
texture.image = faces;
|
|
266
|
+
texture.format = format;
|
|
267
|
+
texture.type = UnsignedByteType;
|
|
268
|
+
|
|
269
|
+
} else {
|
|
270
|
+
|
|
271
|
+
const mipmaps = faces[ 0 ].mipmaps;
|
|
272
|
+
|
|
273
|
+
texture = container.layerCount > 1
|
|
274
|
+
? new CompressedArrayTexture( mipmaps, width, height, container.layerCount, format, UnsignedByteType )
|
|
275
|
+
: new CompressedTexture( mipmaps, width, height, format, UnsignedByteType );
|
|
276
|
+
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
texture.minFilter = faces[ 0 ].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;
|
|
266
280
|
texture.magFilter = LinearFilter;
|
|
267
281
|
texture.generateMipmaps = false;
|
|
268
282
|
|
|
@@ -286,7 +300,31 @@ class KTX2Loader extends Loader {
|
|
|
286
300
|
|
|
287
301
|
if ( container.vkFormat !== VK_FORMAT_UNDEFINED ) {
|
|
288
302
|
|
|
289
|
-
|
|
303
|
+
const mipmaps = [];
|
|
304
|
+
const pendings = [];
|
|
305
|
+
|
|
306
|
+
for ( let levelIndex = 0; levelIndex < container.levels.length; levelIndex ++ ) {
|
|
307
|
+
|
|
308
|
+
pendings.push( createDataTexture( container, levelIndex ).then( function ( dataTexture ) {
|
|
309
|
+
|
|
310
|
+
mipmaps[ levelIndex ] = dataTexture;
|
|
311
|
+
|
|
312
|
+
} ) );
|
|
313
|
+
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
await Promise.all( pendings );
|
|
317
|
+
|
|
318
|
+
const texture = mipmaps[ 0 ];
|
|
319
|
+
texture.mipmaps = mipmaps.map( dt => {
|
|
320
|
+
return {
|
|
321
|
+
data: dt.source.data,
|
|
322
|
+
width: dt.source.data.width,
|
|
323
|
+
height: dt.source.data.height,
|
|
324
|
+
depth: dt.source.data.depth
|
|
325
|
+
};
|
|
326
|
+
} );
|
|
327
|
+
return texture;
|
|
290
328
|
|
|
291
329
|
}
|
|
292
330
|
|
|
@@ -388,17 +426,9 @@ KTX2Loader.BasisWorker = function () {
|
|
|
388
426
|
|
|
389
427
|
try {
|
|
390
428
|
|
|
391
|
-
const { width, height, hasAlpha,
|
|
392
|
-
|
|
393
|
-
const buffers = [];
|
|
394
|
-
|
|
395
|
-
for ( let i = 0; i < mipmaps.length; ++ i ) {
|
|
396
|
-
|
|
397
|
-
buffers.push( mipmaps[ i ].data.buffer );
|
|
398
|
-
|
|
399
|
-
}
|
|
429
|
+
const { faces, buffers, width, height, hasAlpha, format, dfdTransferFn, dfdFlags } = transcode( message.buffer );
|
|
400
430
|
|
|
401
|
-
self.postMessage( { type: 'transcode', id: message.id, width, height, hasAlpha,
|
|
431
|
+
self.postMessage( { type: 'transcode', id: message.id, faces, width, height, hasAlpha, format, dfdTransferFn, dfdFlags }, buffers );
|
|
402
432
|
|
|
403
433
|
} catch ( error ) {
|
|
404
434
|
|
|
@@ -457,15 +487,16 @@ KTX2Loader.BasisWorker = function () {
|
|
|
457
487
|
const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S;
|
|
458
488
|
const width = ktx2File.getWidth();
|
|
459
489
|
const height = ktx2File.getHeight();
|
|
460
|
-
const
|
|
461
|
-
const
|
|
490
|
+
const layerCount = ktx2File.getLayers() || 1;
|
|
491
|
+
const levelCount = ktx2File.getLevels();
|
|
492
|
+
const faceCount = ktx2File.getFaces();
|
|
462
493
|
const hasAlpha = ktx2File.getHasAlpha();
|
|
463
494
|
const dfdTransferFn = ktx2File.getDFDTransferFunc();
|
|
464
495
|
const dfdFlags = ktx2File.getDFDFlags();
|
|
465
496
|
|
|
466
497
|
const { transcoderFormat, engineFormat } = getTranscoderFormat( basisFormat, width, height, hasAlpha );
|
|
467
498
|
|
|
468
|
-
if ( ! width || ! height || !
|
|
499
|
+
if ( ! width || ! height || ! levelCount ) {
|
|
469
500
|
|
|
470
501
|
cleanup();
|
|
471
502
|
throw new Error( 'THREE.KTX2Loader: Invalid texture' );
|
|
@@ -479,49 +510,72 @@ KTX2Loader.BasisWorker = function () {
|
|
|
479
510
|
|
|
480
511
|
}
|
|
481
512
|
|
|
482
|
-
const
|
|
513
|
+
const faces = [];
|
|
514
|
+
const buffers = [];
|
|
483
515
|
|
|
484
|
-
for ( let
|
|
516
|
+
for ( let face = 0; face < faceCount; face ++ ) {
|
|
485
517
|
|
|
486
|
-
const
|
|
518
|
+
const mipmaps = [];
|
|
487
519
|
|
|
488
|
-
let
|
|
520
|
+
for ( let mip = 0; mip < levelCount; mip ++ ) {
|
|
489
521
|
|
|
490
|
-
|
|
522
|
+
const layerMips = [];
|
|
491
523
|
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
mip
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
transcoderFormat,
|
|
502
|
-
0,
|
|
503
|
-
- 1,
|
|
504
|
-
- 1,
|
|
505
|
-
);
|
|
524
|
+
let mipWidth, mipHeight;
|
|
525
|
+
|
|
526
|
+
for ( let layer = 0; layer < layerCount; layer ++ ) {
|
|
527
|
+
|
|
528
|
+
const levelInfo = ktx2File.getImageLevelInfo( mip, layer, face );
|
|
529
|
+
|
|
530
|
+
if ( face === 0 && mip === 0 && layer === 0 && ( levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0 ) ) {
|
|
531
|
+
|
|
532
|
+
console.warn( 'THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.' );
|
|
506
533
|
|
|
507
|
-
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
if ( levelCount > 1 ) {
|
|
537
|
+
|
|
538
|
+
mipWidth = levelInfo.origWidth;
|
|
539
|
+
mipHeight = levelInfo.origHeight;
|
|
508
540
|
|
|
509
|
-
|
|
510
|
-
|
|
541
|
+
} else {
|
|
542
|
+
|
|
543
|
+
// Handles non-multiple-of-four dimensions in textures without mipmaps. Textures with
|
|
544
|
+
// mipmaps must use multiple-of-four dimensions, for some texture formats and APIs.
|
|
545
|
+
// See mrdoob/three.js#25908.
|
|
546
|
+
mipWidth = levelInfo.width;
|
|
547
|
+
mipHeight = levelInfo.height;
|
|
548
|
+
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
const dst = new Uint8Array( ktx2File.getImageTranscodedSizeInBytes( mip, layer, 0, transcoderFormat ) );
|
|
552
|
+
const status = ktx2File.transcodeImage( dst, mip, layer, face, transcoderFormat, 0, - 1, - 1 );
|
|
553
|
+
|
|
554
|
+
if ( ! status ) {
|
|
555
|
+
|
|
556
|
+
cleanup();
|
|
557
|
+
throw new Error( 'THREE.KTX2Loader: .transcodeImage failed.' );
|
|
558
|
+
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
layerMips.push( dst );
|
|
511
562
|
|
|
512
563
|
}
|
|
513
564
|
|
|
514
|
-
|
|
565
|
+
const mipData = concat( layerMips );
|
|
566
|
+
|
|
567
|
+
mipmaps.push( { data: mipData, width: mipWidth, height: mipHeight } );
|
|
568
|
+
buffers.push( mipData.buffer );
|
|
515
569
|
|
|
516
570
|
}
|
|
517
571
|
|
|
518
|
-
|
|
572
|
+
faces.push( { mipmaps, width, height, format: engineFormat } );
|
|
519
573
|
|
|
520
574
|
}
|
|
521
575
|
|
|
522
576
|
cleanup();
|
|
523
577
|
|
|
524
|
-
return { width, height, hasAlpha,
|
|
578
|
+
return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdTransferFn, dfdFlags };
|
|
525
579
|
|
|
526
580
|
}
|
|
527
581
|
|
|
@@ -645,6 +699,8 @@ KTX2Loader.BasisWorker = function () {
|
|
|
645
699
|
/** Concatenates N byte arrays. */
|
|
646
700
|
function concat( arrays ) {
|
|
647
701
|
|
|
702
|
+
if ( arrays.length === 1 ) return arrays[ 0 ];
|
|
703
|
+
|
|
648
704
|
let totalByteLength = 0;
|
|
649
705
|
|
|
650
706
|
for ( let i = 0; i < arrays.length; i ++ ) {
|
|
@@ -722,9 +778,12 @@ const COLOR_SPACE_MAP = {
|
|
|
722
778
|
|
|
723
779
|
};
|
|
724
780
|
|
|
725
|
-
async function createDataTexture( container ) {
|
|
781
|
+
async function createDataTexture( container, levelIndex = 0 ) {
|
|
726
782
|
|
|
727
|
-
const { vkFormat
|
|
783
|
+
const { vkFormat } = container;
|
|
784
|
+
const pixelWidth = Math.max( 1, container.pixelWidth >> levelIndex );
|
|
785
|
+
const pixelHeight = Math.max( 1, container.pixelHeight >> levelIndex );
|
|
786
|
+
const pixelDepth = Math.max( 1, container.pixelDepth >> levelIndex );
|
|
728
787
|
|
|
729
788
|
if ( FORMAT_MAP[ vkFormat ] === undefined ) {
|
|
730
789
|
|
|
@@ -732,7 +791,7 @@ async function createDataTexture( container ) {
|
|
|
732
791
|
|
|
733
792
|
}
|
|
734
793
|
|
|
735
|
-
const level = container.levels[
|
|
794
|
+
const level = container.levels[ levelIndex ];
|
|
736
795
|
|
|
737
796
|
let levelData;
|
|
738
797
|
let view;
|
|
@@ -133,7 +133,7 @@ class LDrawConditionalLineMaterial extends ShaderMaterial {
|
|
|
133
133
|
outgoingLight = diffuseColor.rgb; // simple shader
|
|
134
134
|
gl_FragColor = vec4( outgoingLight, diffuseColor.a );
|
|
135
135
|
#include <tonemapping_fragment>
|
|
136
|
-
#include <
|
|
136
|
+
#include <colorspace_fragment>
|
|
137
137
|
#include <fog_fragment>
|
|
138
138
|
#include <premultiplied_alpha_fragment>
|
|
139
139
|
}
|
|
@@ -1903,12 +1903,9 @@ class LDrawLoader extends Loader {
|
|
|
1903
1903
|
this.partsLibraryPath = '';
|
|
1904
1904
|
|
|
1905
1905
|
// Material assigned to not available colors for meshes and edges
|
|
1906
|
-
this.missingColorMaterial = new MeshStandardMaterial( { color: 0xFF00FF, roughness: 0.3, metalness: 0 } );
|
|
1907
|
-
this.
|
|
1908
|
-
this.
|
|
1909
|
-
this.missingEdgeColorMaterial.name = 'Missing material - Edge';
|
|
1910
|
-
this.missingConditionalEdgeColorMaterial = new LDrawConditionalLineMaterial( { fog: true, color: 0xFF00FF } );
|
|
1911
|
-
this.missingConditionalEdgeColorMaterial.name = 'Missing material - Conditional Edge';
|
|
1906
|
+
this.missingColorMaterial = new MeshStandardMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, color: 0xFF00FF, roughness: 0.3, metalness: 0 } );
|
|
1907
|
+
this.missingEdgeColorMaterial = new LineBasicMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, color: 0xFF00FF } );
|
|
1908
|
+
this.missingConditionalEdgeColorMaterial = new LDrawConditionalLineMaterial( { name: Loader.DEFAULT_MATERIAL_NAME, fog: true, color: 0xFF00FF } );
|
|
1912
1909
|
this.missingColorMaterial.userData.edgeMaterial = this.missingEdgeColorMaterial;
|
|
1913
1910
|
this.missingEdgeColorMaterial.userData.conditionalEdgeMaterial = this.missingConditionalEdgeColorMaterial;
|
|
1914
1911
|
|