@plastic-software/three 0.181.3 → 0.183.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/README.md +3 -4
- package/build/three.cjs +11330 -10017
- package/build/three.core.js +10011 -9493
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1414 -631
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +21 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +8007 -5427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +8005 -5426
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +109 -6
- package/examples/jsm/controls/TrackballControls.js +6 -6
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Inspector.js +74 -14
- package/examples/jsm/inspector/RendererInspector.js +12 -2
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Parameters.js +18 -2
- package/examples/jsm/inspector/tabs/Performance.js +2 -2
- package/examples/jsm/inspector/tabs/Viewer.js +4 -4
- package/examples/jsm/inspector/ui/Profiler.js +1836 -31
- package/examples/jsm/inspector/ui/Style.js +973 -14
- package/examples/jsm/inspector/ui/Tab.js +188 -1
- package/examples/jsm/inspector/ui/Values.js +17 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -4
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/HDRLoader.js +0 -1
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +19 -3
- package/examples/jsm/loaders/LDrawLoader.js +2 -3
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +1 -1
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +127 -10
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +268 -30
- package/examples/jsm/renderers/SVGRenderer.js +193 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +5 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +3 -3
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -20
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TRAANode.js +273 -125
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/math/Bayer.js +40 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/package.json +20 -26
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +19 -11
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +2 -1
- package/src/loaders/ObjectLoader.js +21 -2
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +7 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +72 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +74 -65
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Vector3.js +3 -5
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +6 -6
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +98 -12
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +20 -1
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
- package/src/nodes/accessors/ReferenceNode.js +4 -4
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +4 -21
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +4 -2
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionNode.js +1 -2
- package/src/nodes/core/ArrayNode.js +20 -1
- package/src/nodes/core/AssignNode.js +2 -2
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +103 -4
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +170 -53
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +10 -8
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +3 -3
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +65 -16
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +16 -2
- package/src/nodes/core/StructTypeNode.js +11 -17
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +47 -22
- package/src/nodes/core/VaryingNode.js +1 -18
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +98 -9
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +3 -1
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportTextureNode.js +21 -4
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +2 -2
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +97 -41
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLCore.js +17 -14
- package/src/nodes/utils/ArrayElementNode.js +13 -0
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/EventNode.js +1 -2
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +27 -14
- package/src/objects/InstancedMesh.js +11 -0
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/renderers/WebGLRenderer.js +178 -92
- package/src/renderers/common/Backend.js +29 -0
- package/src/renderers/common/Background.js +24 -11
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +27 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +15 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +257 -72
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +17 -1
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +61 -0
- package/src/renderers/common/XRManager.js +3 -2
- package/src/renderers/common/extras/PMREMGenerator.js +2 -8
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -5
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLCapabilities.js +3 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +45 -109
- package/src/renderers/webgl/WebGLPrograms.js +45 -49
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +32 -37
- package/src/renderers/webgl/WebGLTextures.js +89 -28
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
- package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +119 -13
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +3 -3
- package/src/utils.js +258 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -18,8 +18,11 @@ import {
|
|
|
18
18
|
RGBA_ASTC_4x4_Format,
|
|
19
19
|
RGBA_ASTC_6x6_Format,
|
|
20
20
|
RGBA_BPTC_Format,
|
|
21
|
-
RGBA_S3TC_DXT3_Format,
|
|
22
21
|
RGBA_ETC2_EAC_Format,
|
|
22
|
+
R11_EAC_Format,
|
|
23
|
+
SIGNED_R11_EAC_Format,
|
|
24
|
+
RG11_EAC_Format,
|
|
25
|
+
SIGNED_RG11_EAC_Format,
|
|
23
26
|
RGBA_PVRTC_4BPPV1_Format,
|
|
24
27
|
RGBA_PVRTC_2BPPV1_Format,
|
|
25
28
|
RGBA_S3TC_DXT1_Format,
|
|
@@ -71,6 +74,10 @@ import {
|
|
|
71
74
|
VK_FORMAT_BC7_UNORM_BLOCK,
|
|
72
75
|
VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
|
|
73
76
|
VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
|
|
77
|
+
VK_FORMAT_EAC_R11_UNORM_BLOCK,
|
|
78
|
+
VK_FORMAT_EAC_R11_SNORM_BLOCK,
|
|
79
|
+
VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
|
|
80
|
+
VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
|
|
74
81
|
VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
|
|
75
82
|
VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
|
|
76
83
|
VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
|
|
@@ -244,6 +251,7 @@ class KTX2Loader extends Loader {
|
|
|
244
251
|
};
|
|
245
252
|
|
|
246
253
|
if ( typeof navigator !== 'undefined' &&
|
|
254
|
+
typeof navigator.platform !== 'undefined' && typeof navigator.userAgent !== 'undefined' &&
|
|
247
255
|
navigator.platform.indexOf( 'Linux' ) >= 0 && navigator.userAgent.indexOf( 'Firefox' ) >= 0 &&
|
|
248
256
|
this.workerConfig.astcSupported && this.workerConfig.etc2Supported &&
|
|
249
257
|
this.workerConfig.bptcSupported && this.workerConfig.dxtSupported ) {
|
|
@@ -968,6 +976,10 @@ const FORMAT_MAP = {
|
|
|
968
976
|
|
|
969
977
|
[ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK ]: RGBA_ETC2_EAC_Format,
|
|
970
978
|
[ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: RGB_ETC2_Format,
|
|
979
|
+
[ VK_FORMAT_EAC_R11_UNORM_BLOCK ]: R11_EAC_Format,
|
|
980
|
+
[ VK_FORMAT_EAC_R11_SNORM_BLOCK ]: SIGNED_R11_EAC_Format,
|
|
981
|
+
[ VK_FORMAT_EAC_R11G11_UNORM_BLOCK ]: RG11_EAC_Format,
|
|
982
|
+
[ VK_FORMAT_EAC_R11G11_SNORM_BLOCK ]: SIGNED_RG11_EAC_Format,
|
|
971
983
|
|
|
972
984
|
[ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT ]: RGBA_ASTC_4x4_Format,
|
|
973
985
|
[ VK_FORMAT_ASTC_4x4_SRGB_BLOCK ]: RGBA_ASTC_4x4_Format,
|
|
@@ -981,8 +993,8 @@ const FORMAT_MAP = {
|
|
|
981
993
|
[ VK_FORMAT_BC1_RGB_SRGB_BLOCK ]: RGB_S3TC_DXT1_Format,
|
|
982
994
|
[ VK_FORMAT_BC1_RGB_UNORM_BLOCK ]: RGB_S3TC_DXT1_Format,
|
|
983
995
|
|
|
984
|
-
[ VK_FORMAT_BC3_SRGB_BLOCK ]:
|
|
985
|
-
[ VK_FORMAT_BC3_UNORM_BLOCK ]:
|
|
996
|
+
[ VK_FORMAT_BC3_SRGB_BLOCK ]: RGBA_S3TC_DXT5_Format,
|
|
997
|
+
[ VK_FORMAT_BC3_UNORM_BLOCK ]: RGBA_S3TC_DXT5_Format,
|
|
986
998
|
|
|
987
999
|
[ VK_FORMAT_BC4_SNORM_BLOCK ]: SIGNED_RED_RGTC1_Format,
|
|
988
1000
|
[ VK_FORMAT_BC4_UNORM_BLOCK ]: RED_RGTC1_Format,
|
|
@@ -1022,6 +1034,10 @@ const TYPE_MAP = {
|
|
|
1022
1034
|
|
|
1023
1035
|
[ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK ]: UnsignedByteType,
|
|
1024
1036
|
[ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK ]: UnsignedByteType,
|
|
1037
|
+
[ VK_FORMAT_EAC_R11_UNORM_BLOCK ]: UnsignedByteType,
|
|
1038
|
+
[ VK_FORMAT_EAC_R11_SNORM_BLOCK ]: UnsignedByteType,
|
|
1039
|
+
[ VK_FORMAT_EAC_R11G11_UNORM_BLOCK ]: UnsignedByteType,
|
|
1040
|
+
[ VK_FORMAT_EAC_R11G11_SNORM_BLOCK ]: UnsignedByteType,
|
|
1025
1041
|
|
|
1026
1042
|
[ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT ]: HalfFloatType,
|
|
1027
1043
|
[ VK_FORMAT_ASTC_4x4_SRGB_BLOCK ]: UnsignedByteType,
|
|
@@ -1664,7 +1664,7 @@ function createObject( loader, elements, elementSize, isConditionalSegments = fa
|
|
|
1664
1664
|
|
|
1665
1665
|
if ( numGroupVerts > 0 ) {
|
|
1666
1666
|
|
|
1667
|
-
bufferGeometry.addGroup( index0,
|
|
1667
|
+
bufferGeometry.addGroup( index0, numGroupVerts, materials.length - 1 );
|
|
1668
1668
|
|
|
1669
1669
|
}
|
|
1670
1670
|
|
|
@@ -1749,7 +1749,7 @@ function createObject( loader, elements, elementSize, isConditionalSegments = fa
|
|
|
1749
1749
|
/**
|
|
1750
1750
|
* A loader for the LDraw format.
|
|
1751
1751
|
*
|
|
1752
|
-
* [LDraw](https://ldraw.org/} (LEGO Draw) is an [open format specification]
|
|
1752
|
+
* [LDraw](https://ldraw.org/} (LEGO Draw) is an [open format specification](https://ldraw.org/article/218.html)
|
|
1753
1753
|
* for describing LEGO and other construction set 3D models.
|
|
1754
1754
|
*
|
|
1755
1755
|
* An LDraw asset (a text file usually with extension .ldr, .dat or .txt) can describe just a single construction
|
|
@@ -2400,7 +2400,6 @@ class LDrawLoader extends Loader {
|
|
|
2400
2400
|
|
|
2401
2401
|
material.color.setStyle( fillColor, COLOR_SPACE_LDRAW );
|
|
2402
2402
|
material.transparent = isTransparent;
|
|
2403
|
-
material.premultipliedAlpha = true;
|
|
2404
2403
|
material.opacity = alpha;
|
|
2405
2404
|
material.depthWrite = ! isTransparent;
|
|
2406
2405
|
|
|
@@ -23,7 +23,8 @@ import {
|
|
|
23
23
|
RepeatWrapping,
|
|
24
24
|
SRGBColorSpace,
|
|
25
25
|
TextureLoader,
|
|
26
|
-
Vector2
|
|
26
|
+
Vector2,
|
|
27
|
+
Vector3
|
|
27
28
|
} from 'three';
|
|
28
29
|
|
|
29
30
|
import { IFFParser } from './lwo/IFFParser.js';
|
|
@@ -185,8 +186,6 @@ class LWOTreeParser {
|
|
|
185
186
|
|
|
186
187
|
} );
|
|
187
188
|
|
|
188
|
-
this.applyPivots( finalMeshes );
|
|
189
|
-
|
|
190
189
|
return finalMeshes;
|
|
191
190
|
|
|
192
191
|
}
|
|
@@ -204,38 +203,14 @@ class LWOTreeParser {
|
|
|
204
203
|
if ( layer.name ) mesh.name = layer.name;
|
|
205
204
|
else mesh.name = this.defaultLayerName + '_layer_' + layer.number;
|
|
206
205
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
return mesh;
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// TODO: may need to be reversed in z to convert LWO to three.js coordinates
|
|
214
|
-
applyPivots( meshes ) {
|
|
215
|
-
|
|
216
|
-
meshes.forEach( function ( mesh ) {
|
|
217
|
-
|
|
218
|
-
mesh.traverse( function ( child ) {
|
|
219
|
-
|
|
220
|
-
const pivot = child.userData.pivot;
|
|
221
|
-
|
|
222
|
-
child.position.x += pivot[ 0 ];
|
|
223
|
-
child.position.y += pivot[ 1 ];
|
|
224
|
-
child.position.z += pivot[ 2 ];
|
|
206
|
+
const pivot = layer.pivot;
|
|
207
|
+
if ( pivot[ 0 ] !== 0 || pivot[ 1 ] !== 0 || pivot[ 2 ] !== 0 ) {
|
|
225
208
|
|
|
226
|
-
|
|
209
|
+
mesh.pivot = new Vector3( pivot[ 0 ], pivot[ 1 ], pivot[ 2 ] );
|
|
227
210
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
child.position.x -= parentPivot[ 0 ];
|
|
231
|
-
child.position.y -= parentPivot[ 1 ];
|
|
232
|
-
child.position.z -= parentPivot[ 2 ];
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
} );
|
|
211
|
+
}
|
|
237
212
|
|
|
238
|
-
|
|
213
|
+
return mesh;
|
|
239
214
|
|
|
240
215
|
}
|
|
241
216
|
|
|
@@ -813,13 +788,6 @@ class GeometryParser {
|
|
|
813
788
|
this.parseUVs( geometry, layer );
|
|
814
789
|
this.parseMorphTargets( geometry, layer );
|
|
815
790
|
|
|
816
|
-
// TODO: z may need to be reversed to account for coordinate system change
|
|
817
|
-
geometry.translate( - layer.pivot[ 0 ], - layer.pivot[ 1 ], - layer.pivot[ 2 ] );
|
|
818
|
-
|
|
819
|
-
// let userData = geometry.userData;
|
|
820
|
-
// geometry = geometry.toNonIndexed()
|
|
821
|
-
// geometry.userData = userData;
|
|
822
|
-
|
|
823
791
|
return geometry;
|
|
824
792
|
|
|
825
793
|
}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
Matrix4,
|
|
5
5
|
Vector3
|
|
6
6
|
} from 'three';
|
|
7
|
-
import
|
|
7
|
+
import { gunzipSync } from '../libs/fflate.module.js';
|
|
8
8
|
import { Volume } from '../misc/Volume.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -356,7 +356,7 @@ class NRRDLoader extends Loader {
|
|
|
356
356
|
|
|
357
357
|
// we need to decompress the datastream
|
|
358
358
|
// here we start the unzipping and get a typed Uint8Array back
|
|
359
|
-
_data =
|
|
359
|
+
_data = gunzipSync( new Uint8Array( _data ) );
|
|
360
360
|
|
|
361
361
|
} else if ( headerObject.encoding === 'ascii' || headerObject.encoding === 'text' || headerObject.encoding === 'txt' || headerObject.encoding === 'hex' ) {
|
|
362
362
|
|
|
@@ -100,6 +100,7 @@ class PCDLoader extends Loader {
|
|
|
100
100
|
/**
|
|
101
101
|
* Get dataview value by field type and size.
|
|
102
102
|
*
|
|
103
|
+
* @private
|
|
103
104
|
* @param {DataView} dataview - The DataView to read from.
|
|
104
105
|
* @param {number} offset - The offset to start reading from.
|
|
105
106
|
* @param {'F' | 'U' | 'I'} type - Field type.
|
|
@@ -517,7 +518,7 @@ class PCDLoader extends Loader {
|
|
|
517
518
|
if ( offset.label !== undefined ) {
|
|
518
519
|
|
|
519
520
|
const labelIndex = PCDheader.fields.indexOf( 'label' );
|
|
520
|
-
label.push(
|
|
521
|
+
label.push( this._getDataView( dataview, ( PCDheader.points * offset.label ) + PCDheader.size[ labelIndex ] * i, PCDheader.type[ labelIndex ], PCDheader.size[ labelIndex ] ) );
|
|
521
522
|
|
|
522
523
|
}
|
|
523
524
|
|
|
@@ -577,7 +578,8 @@ class PCDLoader extends Loader {
|
|
|
577
578
|
|
|
578
579
|
if ( offset.label !== undefined ) {
|
|
579
580
|
|
|
580
|
-
|
|
581
|
+
const labelIndex = PCDheader.fields.indexOf( 'label' );
|
|
582
|
+
label.push( this._getDataView( dataview, row + offset.label, PCDheader.type[ labelIndex ], PCDheader.size[ labelIndex ] ) );
|
|
581
583
|
|
|
582
584
|
}
|
|
583
585
|
|
|
@@ -1082,7 +1082,7 @@ class SVGLoader extends Loader {
|
|
|
1082
1082
|
};
|
|
1083
1083
|
|
|
1084
1084
|
if ( node.hasAttribute( svgName ) ) style[ jsName ] = adjustFunction( node.getAttribute( svgName ) );
|
|
1085
|
-
if ( stylesheetStyles[
|
|
1085
|
+
if ( stylesheetStyles[ jsName ] ) style[ jsName ] = adjustFunction( stylesheetStyles[ jsName ] );
|
|
1086
1086
|
if ( node.style && node.style[ svgName ] !== '' ) style[ jsName ] = adjustFunction( node.style[ svgName ] );
|
|
1087
1087
|
|
|
1088
1088
|
}
|
|
@@ -684,11 +684,9 @@ class TDSLoader extends Loader {
|
|
|
684
684
|
|
|
685
685
|
case INT_PERCENTAGE:
|
|
686
686
|
return ( subChunk.readShort( ) / 100 );
|
|
687
|
-
break;
|
|
688
687
|
|
|
689
688
|
case FLOAT_PERCENTAGE:
|
|
690
689
|
return subChunk.readFloat( );
|
|
691
|
-
break;
|
|
692
690
|
|
|
693
691
|
default:
|
|
694
692
|
this.debugMessage( ' Unknown percentage chunk: ' + subChunk.hexId );
|
|
@@ -389,7 +389,6 @@ class TGALoader extends DataTextureLoader {
|
|
|
389
389
|
|
|
390
390
|
default:
|
|
391
391
|
throw new Error( 'THREE.TGALoader: Format not supported.' );
|
|
392
|
-
break;
|
|
393
392
|
|
|
394
393
|
}
|
|
395
394
|
|
|
@@ -415,7 +414,6 @@ class TGALoader extends DataTextureLoader {
|
|
|
415
414
|
|
|
416
415
|
default:
|
|
417
416
|
throw new Error( 'THREE.TGALoader: Format not supported.' );
|
|
418
|
-
break;
|
|
419
417
|
|
|
420
418
|
}
|
|
421
419
|
|
|
@@ -3,18 +3,20 @@ import {
|
|
|
3
3
|
Loader
|
|
4
4
|
} from 'three';
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
import { unzipSync } from '../libs/fflate.module.js';
|
|
7
7
|
import { USDAParser } from './usd/USDAParser.js';
|
|
8
8
|
import { USDCParser } from './usd/USDCParser.js';
|
|
9
|
+
import { USDComposer } from './usd/USDComposer.js';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
|
-
* A loader for the
|
|
12
|
+
* A loader for the USD format (USD, USDA, USDC, USDZ).
|
|
12
13
|
*
|
|
13
|
-
*
|
|
14
|
+
* Supports both ASCII (USDA) and binary (USDC) USD files, as well as
|
|
15
|
+
* USDZ archives containing either format.
|
|
14
16
|
*
|
|
15
17
|
* ```js
|
|
16
|
-
* const loader = new
|
|
17
|
-
* const model = await loader.loadAsync( '
|
|
18
|
+
* const loader = new USDLoader();
|
|
19
|
+
* const model = await loader.loadAsync( 'model.usdz' );
|
|
18
20
|
* scene.add( model );
|
|
19
21
|
* ```
|
|
20
22
|
*
|
|
@@ -88,34 +90,60 @@ class USDLoader extends Loader {
|
|
|
88
90
|
|
|
89
91
|
const usda = new USDAParser();
|
|
90
92
|
const usdc = new USDCParser();
|
|
93
|
+
const textDecoder = new TextDecoder();
|
|
94
|
+
|
|
95
|
+
function toArrayBuffer( data ) {
|
|
96
|
+
|
|
97
|
+
if ( data instanceof ArrayBuffer ) return data;
|
|
98
|
+
|
|
99
|
+
if ( data.byteOffset === 0 && data.byteLength === data.buffer.byteLength ) {
|
|
100
|
+
|
|
101
|
+
return data.buffer;
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return data.buffer.slice( data.byteOffset, data.byteOffset + data.byteLength );
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function getLowercaseExtension( filename ) {
|
|
110
|
+
|
|
111
|
+
const lastDot = filename.lastIndexOf( '.' );
|
|
112
|
+
if ( lastDot < 0 ) return '';
|
|
113
|
+
|
|
114
|
+
const lastSlash = filename.lastIndexOf( '/' );
|
|
115
|
+
if ( lastSlash > lastDot ) return '';
|
|
116
|
+
|
|
117
|
+
return filename.slice( lastDot + 1 ).toLowerCase();
|
|
118
|
+
|
|
119
|
+
}
|
|
91
120
|
|
|
92
121
|
function parseAssets( zip ) {
|
|
93
122
|
|
|
94
123
|
const data = {};
|
|
95
|
-
const loader = new FileLoader();
|
|
96
|
-
loader.setResponseType( 'arraybuffer' );
|
|
97
124
|
|
|
98
125
|
for ( const filename in zip ) {
|
|
99
126
|
|
|
100
|
-
|
|
127
|
+
const fileBytes = zip[ filename ];
|
|
128
|
+
const ext = getLowercaseExtension( filename );
|
|
101
129
|
|
|
102
|
-
|
|
103
|
-
data[ filename ] = URL.createObjectURL( blob );
|
|
130
|
+
if ( ext === 'png' || ext === 'jpg' || ext === 'jpeg' || ext === 'avif' ) {
|
|
104
131
|
|
|
105
|
-
|
|
132
|
+
// Keep raw image bytes and create object URLs lazily in USDComposer.
|
|
133
|
+
data[ filename ] = fileBytes;
|
|
134
|
+
continue;
|
|
106
135
|
|
|
107
|
-
|
|
136
|
+
}
|
|
108
137
|
|
|
109
|
-
|
|
138
|
+
if ( ext !== 'usd' && ext !== 'usda' && ext !== 'usdc' ) continue;
|
|
110
139
|
|
|
111
|
-
|
|
140
|
+
if ( isCrateFile( fileBytes ) ) {
|
|
112
141
|
|
|
113
|
-
|
|
142
|
+
data[ filename ] = usdc.parseData( toArrayBuffer( fileBytes ) );
|
|
114
143
|
|
|
115
|
-
|
|
116
|
-
data[ filename ] = usda.parseText( text );
|
|
144
|
+
} else {
|
|
117
145
|
|
|
118
|
-
|
|
146
|
+
data[ filename ] = usda.parseData( textDecoder.decode( fileBytes ) );
|
|
119
147
|
|
|
120
148
|
}
|
|
121
149
|
|
|
@@ -128,10 +156,9 @@ class USDLoader extends Loader {
|
|
|
128
156
|
function isCrateFile( buffer ) {
|
|
129
157
|
|
|
130
158
|
const crateHeader = new Uint8Array( [ 0x50, 0x58, 0x52, 0x2D, 0x55, 0x53, 0x44, 0x43 ] ); // PXR-USDC
|
|
159
|
+
const view = buffer instanceof Uint8Array ? buffer : new Uint8Array( buffer );
|
|
131
160
|
|
|
132
|
-
if (
|
|
133
|
-
|
|
134
|
-
const view = new Uint8Array( buffer, 0, crateHeader.length );
|
|
161
|
+
if ( view.byteLength < crateHeader.length ) return false;
|
|
135
162
|
|
|
136
163
|
for ( let i = 0; i < crateHeader.length; i ++ ) {
|
|
137
164
|
|
|
@@ -145,26 +172,30 @@ class USDLoader extends Loader {
|
|
|
145
172
|
|
|
146
173
|
function findUSD( zip ) {
|
|
147
174
|
|
|
148
|
-
|
|
175
|
+
const fileNames = Object.keys( zip );
|
|
176
|
+
if ( fileNames.length < 1 ) return { file: undefined, filename: '', basePath: '' };
|
|
149
177
|
|
|
150
|
-
const firstFileName =
|
|
178
|
+
const firstFileName = fileNames[ 0 ];
|
|
179
|
+
const ext = getLowercaseExtension( firstFileName );
|
|
151
180
|
let isCrate = false;
|
|
152
181
|
|
|
153
|
-
|
|
182
|
+
const lastSlash = firstFileName.lastIndexOf( '/' );
|
|
183
|
+
const basePath = lastSlash >= 0 ? firstFileName.slice( 0, lastSlash ) : '';
|
|
184
|
+
|
|
185
|
+
// Per AOUSD core spec v1.0.1 section 16.4.1.2, the first ZIP entry is the root layer.
|
|
154
186
|
// ASCII files can end in either .usda or .usd.
|
|
155
|
-
|
|
156
|
-
if ( firstFileName.endsWith( 'usda' ) ) return zip[ firstFileName ];
|
|
187
|
+
if ( ext === 'usda' ) return { file: zip[ firstFileName ], filename: firstFileName, basePath };
|
|
157
188
|
|
|
158
|
-
if (
|
|
189
|
+
if ( ext === 'usdc' ) {
|
|
159
190
|
|
|
160
191
|
isCrate = true;
|
|
161
192
|
|
|
162
|
-
} else if (
|
|
193
|
+
} else if ( ext === 'usd' ) {
|
|
163
194
|
|
|
164
195
|
// If this is not a crate file, we assume it is a plain USDA file.
|
|
165
196
|
if ( ! isCrateFile( zip[ firstFileName ] ) ) {
|
|
166
197
|
|
|
167
|
-
return zip[ firstFileName ];
|
|
198
|
+
return { file: zip[ firstFileName ], filename: firstFileName, basePath };
|
|
168
199
|
|
|
169
200
|
} else {
|
|
170
201
|
|
|
@@ -176,41 +207,70 @@ class USDLoader extends Loader {
|
|
|
176
207
|
|
|
177
208
|
if ( isCrate ) {
|
|
178
209
|
|
|
179
|
-
return zip[ firstFileName ];
|
|
210
|
+
return { file: zip[ firstFileName ], filename: firstFileName, basePath };
|
|
180
211
|
|
|
181
212
|
}
|
|
182
213
|
|
|
214
|
+
return { file: undefined, filename: '', basePath: '' };
|
|
215
|
+
|
|
183
216
|
}
|
|
184
217
|
|
|
185
|
-
|
|
218
|
+
const scope = this;
|
|
219
|
+
|
|
220
|
+
// USDA (standalone)
|
|
186
221
|
|
|
187
222
|
if ( typeof buffer === 'string' ) {
|
|
188
223
|
|
|
189
|
-
|
|
224
|
+
const composer = new USDComposer( scope.manager );
|
|
225
|
+
const data = usda.parseData( buffer );
|
|
226
|
+
return composer.compose( data, {} );
|
|
190
227
|
|
|
191
228
|
}
|
|
192
229
|
|
|
193
|
-
// USDC
|
|
230
|
+
// USDC (standalone)
|
|
194
231
|
|
|
195
232
|
if ( isCrateFile( buffer ) ) {
|
|
196
233
|
|
|
197
|
-
|
|
234
|
+
const composer = new USDComposer( scope.manager );
|
|
235
|
+
const data = usdc.parseData( toArrayBuffer( buffer ) );
|
|
236
|
+
return composer.compose( data, {} );
|
|
198
237
|
|
|
199
238
|
}
|
|
200
239
|
|
|
240
|
+
const bytes = new Uint8Array( buffer );
|
|
241
|
+
|
|
201
242
|
// USDZ
|
|
202
243
|
|
|
203
|
-
|
|
244
|
+
if ( bytes[ 0 ] === 0x50 && bytes[ 1 ] === 0x4B ) {
|
|
245
|
+
|
|
246
|
+
const zip = unzipSync( bytes );
|
|
247
|
+
const assets = parseAssets( zip );
|
|
248
|
+
const { file, filename, basePath } = findUSD( zip );
|
|
204
249
|
|
|
205
|
-
|
|
250
|
+
if ( ! file ) {
|
|
206
251
|
|
|
207
|
-
|
|
252
|
+
throw new Error( 'USDLoader: Invalid USDZ package. The first ZIP entry must be a USD layer (.usd/.usda/.usdc).' );
|
|
208
253
|
|
|
209
|
-
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
const composer = new USDComposer( scope.manager );
|
|
257
|
+
const data = assets[ filename ];
|
|
258
|
+
if ( ! data ) {
|
|
259
|
+
|
|
260
|
+
throw new Error( 'USDLoader: Failed to parse root layer "' + filename + '".' );
|
|
261
|
+
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return composer.compose( data, assets, {}, basePath );
|
|
265
|
+
|
|
266
|
+
}
|
|
210
267
|
|
|
211
|
-
|
|
268
|
+
// USDA (standalone, as ArrayBuffer)
|
|
212
269
|
|
|
213
|
-
|
|
270
|
+
const composer = new USDComposer( scope.manager );
|
|
271
|
+
const text = textDecoder.decode( bytes );
|
|
272
|
+
const data = usda.parseData( text );
|
|
273
|
+
return composer.compose( data, {} );
|
|
214
274
|
|
|
215
275
|
}
|
|
216
276
|
|