@plastic-software/three 0.175.14 → 0.179.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.
Files changed (572) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8402 -6787
  3. package/build/three.core.js +8007 -6688
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +397 -102
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6831 -2838
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6648 -2838
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +2 -1
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +22 -8
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +57 -38
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +679 -300
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +11 -2
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  534. package/src/renderers/webgl/WebGLProgram.js +22 -16
  535. package/src/renderers/webgl/WebGLPrograms.js +8 -6
  536. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  537. package/src/renderers/webgl/WebGLState.js +4 -4
  538. package/src/renderers/webgl/WebGLTextures.js +163 -11
  539. package/src/renderers/webgl/WebGLUtils.js +1 -3
  540. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  541. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  542. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  544. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  545. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  546. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  547. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  548. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  549. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  551. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  552. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  553. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  554. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  555. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  556. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  557. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  558. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  559. package/src/renderers/webxr/WebXRController.js +1 -1
  560. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  561. package/src/renderers/webxr/WebXRManager.js +70 -9
  562. package/src/textures/DepthTexture.js +6 -10
  563. package/src/textures/ExternalTexture.js +45 -0
  564. package/src/textures/FramebufferTexture.js +2 -2
  565. package/src/textures/Source.js +32 -0
  566. package/src/textures/Texture.js +118 -1
  567. package/src/textures/VideoTexture.js +31 -3
  568. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  569. package/src/core/RenderTargetArray.js +0 -40
  570. package/src/nodes/utils/EquirectUVNode.js +0 -65
  571. package/src/nodes/utils/MatcapUVNode.js +0 -49
  572. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,903 +1,16 @@
1
- import {
2
- BufferAttribute,
3
- BufferGeometry,
4
- ClampToEdgeWrapping,
5
- FileLoader,
6
- Group,
7
- NoColorSpace,
8
- Loader,
9
- Mesh,
10
- MeshPhysicalMaterial,
11
- MirroredRepeatWrapping,
12
- RepeatWrapping,
13
- SRGBColorSpace,
14
- TextureLoader,
15
- Object3D,
16
- Vector2
17
- } from 'three';
1
+ import { USDLoader } from './USDLoader.js';
18
2
 
19
- import * as fflate from '../libs/fflate.module.js';
3
+ // @deprecated, r179
20
4
 
21
- class USDAParser {
5
+ class USDZLoader extends USDLoader {
22
6
 
23
- parse( text ) {
24
-
25
- const data = {};
26
-
27
- const lines = text.split( '\n' );
28
-
29
- let string = null;
30
- let target = data;
31
-
32
- const stack = [ data ];
33
-
34
- // debugger;
35
-
36
- for ( const line of lines ) {
37
-
38
- // console.log( line );
39
-
40
- if ( line.includes( '=' ) ) {
41
-
42
- const assignment = line.split( '=' );
43
-
44
- const lhs = assignment[ 0 ].trim();
45
- const rhs = assignment[ 1 ].trim();
46
-
47
- if ( rhs.endsWith( '{' ) ) {
48
-
49
- const group = {};
50
- stack.push( group );
51
-
52
- target[ lhs ] = group;
53
- target = group;
54
-
55
- } else if ( rhs.endsWith( '(' ) ) {
56
-
57
- // see #28631
58
-
59
- const values = rhs.slice( 0, - 1 );
60
- target[ lhs ] = values;
61
-
62
- const meta = {};
63
- stack.push( meta );
64
-
65
- target = meta;
66
-
67
- } else {
68
-
69
- target[ lhs ] = rhs;
70
-
71
- }
72
-
73
- } else if ( line.endsWith( '{' ) ) {
74
-
75
- const group = target[ string ] || {};
76
- stack.push( group );
77
-
78
- target[ string ] = group;
79
- target = group;
80
-
81
- } else if ( line.endsWith( '}' ) ) {
82
-
83
- stack.pop();
84
-
85
- if ( stack.length === 0 ) continue;
86
-
87
- target = stack[ stack.length - 1 ];
88
-
89
- } else if ( line.endsWith( '(' ) ) {
90
-
91
- const meta = {};
92
- stack.push( meta );
93
-
94
- string = line.split( '(' )[ 0 ].trim() || string;
95
-
96
- target[ string ] = meta;
97
- target = meta;
98
-
99
- } else if ( line.endsWith( ')' ) ) {
100
-
101
- stack.pop();
102
-
103
- target = stack[ stack.length - 1 ];
104
-
105
- } else {
106
-
107
- string = line.trim();
108
-
109
- }
110
-
111
- }
112
-
113
- return data;
114
-
115
- }
116
-
117
- }
118
-
119
- /**
120
- * A loader for the USDZ format.
121
- *
122
- * USDZ files that use USDC internally are not yet supported, only USDA.
123
- *
124
- * ```js
125
- * const loader = new USDZLoader();
126
- * const model = await loader.loadAsync( 'saeukkang.usdz' );
127
- * scene.add( model );
128
- * ```
129
- *
130
- * @augments Loader
131
- */
132
- class USDZLoader extends Loader {
133
-
134
- /**
135
- * Constructs a new USDZ loader.
136
- *
137
- * @param {LoadingManager} [manager] - The loading manager.
138
- */
139
7
  constructor( manager ) {
140
8
 
9
+ console.warn( 'USDZLoader has been deprecated. Please use USDLoader instead.' );
141
10
  super( manager );
142
11
 
143
12
  }
144
13
 
145
- /**
146
- * Starts loading from the given URL and passes the loaded USDZ asset
147
- * to the `onLoad()` callback.
148
- *
149
- * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
150
- * @param {function(Group)} onLoad - Executed when the loading process has been finished.
151
- * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
152
- * @param {onErrorCallback} onError - Executed when errors occur.
153
- */
154
- load( url, onLoad, onProgress, onError ) {
155
-
156
- const scope = this;
157
-
158
- const loader = new FileLoader( scope.manager );
159
- loader.setPath( scope.path );
160
- loader.setResponseType( 'arraybuffer' );
161
- loader.setRequestHeader( scope.requestHeader );
162
- loader.setWithCredentials( scope.withCredentials );
163
- loader.load( url, function ( text ) {
164
-
165
- try {
166
-
167
- onLoad( scope.parse( text ) );
168
-
169
- } catch ( e ) {
170
-
171
- if ( onError ) {
172
-
173
- onError( e );
174
-
175
- } else {
176
-
177
- console.error( e );
178
-
179
- }
180
-
181
- scope.manager.itemError( url );
182
-
183
- }
184
-
185
- }, onProgress, onError );
186
-
187
- }
188
-
189
- /**
190
- * Parses the given USDZ data and returns the resulting group.
191
- *
192
- * @param {ArrayBuffer} buffer - The raw USDZ data as an array buffer.
193
- * @return {Group} The parsed asset as a group.
194
- */
195
- parse( buffer ) {
196
-
197
- const parser = new USDAParser();
198
-
199
- function parseAssets( zip ) {
200
-
201
- const data = {};
202
- const loader = new FileLoader();
203
- loader.setResponseType( 'arraybuffer' );
204
-
205
- for ( const filename in zip ) {
206
-
207
- if ( filename.endsWith( 'png' ) ) {
208
-
209
- const blob = new Blob( [ zip[ filename ] ], { type: 'image/png' } );
210
- data[ filename ] = URL.createObjectURL( blob );
211
-
212
- }
213
-
214
- if ( filename.endsWith( 'usd' ) || filename.endsWith( 'usda' ) ) {
215
-
216
- if ( isCrateFile( zip[ filename ] ) ) {
217
-
218
- throw Error( 'THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported.' );
219
-
220
- }
221
-
222
- const text = fflate.strFromU8( zip[ filename ] );
223
- data[ filename ] = parser.parse( text );
224
-
225
- }
226
-
227
- }
228
-
229
- return data;
230
-
231
- }
232
-
233
- function isCrateFile( buffer ) {
234
-
235
- // Check if this a crate file. First 7 bytes of a crate file are "PXR-USDC".
236
- const fileHeader = buffer.slice( 0, 7 );
237
- const crateHeader = new Uint8Array( [ 0x50, 0x58, 0x52, 0x2D, 0x55, 0x53, 0x44, 0x43 ] );
238
-
239
- // If this is not a crate file, we assume it is a plain USDA file.
240
- return fileHeader.every( ( value, index ) => value === crateHeader[ index ] );
241
-
242
- }
243
-
244
- function findUSD( zip ) {
245
-
246
- if ( zip.length < 1 ) return undefined;
247
-
248
- const firstFileName = Object.keys( zip )[ 0 ];
249
- let isCrate = false;
250
-
251
- // As per the USD specification, the first entry in the zip archive is used as the main file ("UsdStage").
252
- // ASCII files can end in either .usda or .usd.
253
- // See https://openusd.org/release/spec_usdz.html#layout
254
- if ( firstFileName.endsWith( 'usda' ) ) return zip[ firstFileName ];
255
-
256
- if ( firstFileName.endsWith( 'usdc' ) ) {
257
-
258
- isCrate = true;
259
-
260
- } else if ( firstFileName.endsWith( 'usd' ) ) {
261
-
262
- // If this is not a crate file, we assume it is a plain USDA file.
263
- if ( ! isCrateFile( zip[ firstFileName ] ) ) {
264
-
265
- return zip[ firstFileName ];
266
-
267
- } else {
268
-
269
- isCrate = true;
270
-
271
- }
272
-
273
- }
274
-
275
- if ( isCrate ) {
276
-
277
- throw Error( 'THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported.' );
278
-
279
- }
280
-
281
- }
282
-
283
- const zip = fflate.unzipSync( new Uint8Array( buffer ) );
284
-
285
- // console.log( zip );
286
-
287
- const assets = parseAssets( zip );
288
-
289
- // console.log( assets )
290
-
291
- const file = findUSD( zip );
292
-
293
- // Parse file
294
-
295
- const text = fflate.strFromU8( file );
296
- const root = parser.parse( text );
297
-
298
- // Build scene
299
-
300
- function findMeshGeometry( data ) {
301
-
302
- if ( ! data ) return undefined;
303
-
304
- if ( 'prepend references' in data ) {
305
-
306
- const reference = data[ 'prepend references' ];
307
- const parts = reference.split( '@' );
308
- const path = parts[ 1 ].replace( /^.\//, '' );
309
- const id = parts[ 2 ].replace( /^<\//, '' ).replace( />$/, '' );
310
-
311
- return findGeometry( assets[ path ], id );
312
-
313
- }
314
-
315
- return findGeometry( data );
316
-
317
- }
318
-
319
- function findGeometry( data, id ) {
320
-
321
- if ( ! data ) return undefined;
322
-
323
- if ( id !== undefined ) {
324
-
325
- const def = `def Mesh "${id}"`;
326
-
327
- if ( def in data ) {
328
-
329
- return data[ def ];
330
-
331
- }
332
-
333
- }
334
-
335
- for ( const name in data ) {
336
-
337
- const object = data[ name ];
338
-
339
- if ( name.startsWith( 'def Mesh' ) ) {
340
-
341
- return object;
342
-
343
- }
344
-
345
-
346
- if ( typeof object === 'object' ) {
347
-
348
- const geometry = findGeometry( object );
349
-
350
- if ( geometry ) return geometry;
351
-
352
- }
353
-
354
- }
355
-
356
- }
357
-
358
- function buildGeometry( data ) {
359
-
360
- if ( ! data ) return undefined;
361
-
362
- const geometry = new BufferGeometry();
363
- let indices = null;
364
- let counts = null;
365
- let uvs = null;
366
-
367
- let positionsLength = - 1;
368
-
369
- // index
370
-
371
- if ( 'int[] faceVertexIndices' in data ) {
372
-
373
- indices = JSON.parse( data[ 'int[] faceVertexIndices' ] );
374
-
375
- }
376
-
377
- // face count
378
-
379
- if ( 'int[] faceVertexCounts' in data ) {
380
-
381
- counts = JSON.parse( data[ 'int[] faceVertexCounts' ] );
382
- indices = toTriangleIndices( indices, counts );
383
-
384
- }
385
-
386
- // position
387
-
388
- if ( 'point3f[] points' in data ) {
389
-
390
- const positions = JSON.parse( data[ 'point3f[] points' ].replace( /[()]*/g, '' ) );
391
- positionsLength = positions.length;
392
- let attribute = new BufferAttribute( new Float32Array( positions ), 3 );
393
-
394
- if ( indices !== null ) attribute = toFlatBufferAttribute( attribute, indices );
395
-
396
- geometry.setAttribute( 'position', attribute );
397
-
398
- }
399
-
400
- // uv
401
-
402
- if ( 'float2[] primvars:st' in data ) {
403
-
404
- data[ 'texCoord2f[] primvars:st' ] = data[ 'float2[] primvars:st' ];
405
-
406
- }
407
-
408
- if ( 'texCoord2f[] primvars:st' in data ) {
409
-
410
- uvs = JSON.parse( data[ 'texCoord2f[] primvars:st' ].replace( /[()]*/g, '' ) );
411
- let attribute = new BufferAttribute( new Float32Array( uvs ), 2 );
412
-
413
- if ( indices !== null ) attribute = toFlatBufferAttribute( attribute, indices );
414
-
415
- geometry.setAttribute( 'uv', attribute );
416
-
417
- }
418
-
419
- if ( 'int[] primvars:st:indices' in data && uvs !== null ) {
420
-
421
- // custom uv index, overwrite uvs with new data
422
-
423
- const attribute = new BufferAttribute( new Float32Array( uvs ), 2 );
424
- let indices = JSON.parse( data[ 'int[] primvars:st:indices' ] );
425
- indices = toTriangleIndices( indices, counts );
426
- geometry.setAttribute( 'uv', toFlatBufferAttribute( attribute, indices ) );
427
-
428
- }
429
-
430
- // normal
431
-
432
- if ( 'normal3f[] normals' in data ) {
433
-
434
- const normals = JSON.parse( data[ 'normal3f[] normals' ].replace( /[()]*/g, '' ) );
435
- let attribute = new BufferAttribute( new Float32Array( normals ), 3 );
436
-
437
- // normals require a special treatment in USD
438
-
439
- if ( normals.length === positionsLength ) {
440
-
441
- // raw normal and position data have equal length (like produced by USDZExporter)
442
-
443
- if ( indices !== null ) attribute = toFlatBufferAttribute( attribute, indices );
444
-
445
- } else {
446
-
447
- // unequal length, normals are independent of faceVertexIndices
448
-
449
- let indices = Array.from( Array( normals.length / 3 ).keys() ); // [ 0, 1, 2, 3 ... ]
450
- indices = toTriangleIndices( indices, counts );
451
- attribute = toFlatBufferAttribute( attribute, indices );
452
-
453
- }
454
-
455
- geometry.setAttribute( 'normal', attribute );
456
-
457
- } else {
458
-
459
- // compute flat vertex normals
460
-
461
- geometry.computeVertexNormals();
462
-
463
- }
464
-
465
- return geometry;
466
-
467
- }
468
-
469
- function toTriangleIndices( rawIndices, counts ) {
470
-
471
- const indices = [];
472
-
473
- for ( let i = 0; i < counts.length; i ++ ) {
474
-
475
- const count = counts[ i ];
476
-
477
- const stride = i * count;
478
-
479
- if ( count === 3 ) {
480
-
481
- const a = rawIndices[ stride + 0 ];
482
- const b = rawIndices[ stride + 1 ];
483
- const c = rawIndices[ stride + 2 ];
484
-
485
- indices.push( a, b, c );
486
-
487
- } else if ( count === 4 ) {
488
-
489
- const a = rawIndices[ stride + 0 ];
490
- const b = rawIndices[ stride + 1 ];
491
- const c = rawIndices[ stride + 2 ];
492
- const d = rawIndices[ stride + 3 ];
493
-
494
- indices.push( a, b, c );
495
- indices.push( a, c, d );
496
-
497
- } else {
498
-
499
- console.warn( 'THREE.USDZLoader: Face vertex count of %s unsupported.', count );
500
-
501
- }
502
-
503
- }
504
-
505
- return indices;
506
-
507
- }
508
-
509
- function toFlatBufferAttribute( attribute, indices ) {
510
-
511
- const array = attribute.array;
512
- const itemSize = attribute.itemSize;
513
-
514
- const array2 = new array.constructor( indices.length * itemSize );
515
-
516
- let index = 0, index2 = 0;
517
-
518
- for ( let i = 0, l = indices.length; i < l; i ++ ) {
519
-
520
- index = indices[ i ] * itemSize;
521
-
522
- for ( let j = 0; j < itemSize; j ++ ) {
523
-
524
- array2[ index2 ++ ] = array[ index ++ ];
525
-
526
- }
527
-
528
- }
529
-
530
- return new BufferAttribute( array2, itemSize );
531
-
532
- }
533
-
534
- function findMeshMaterial( data ) {
535
-
536
- if ( ! data ) return undefined;
537
-
538
- if ( 'rel material:binding' in data ) {
539
-
540
- const reference = data[ 'rel material:binding' ];
541
- const id = reference.replace( /^<\//, '' ).replace( />$/, '' );
542
- const parts = id.split( '/' );
543
-
544
- return findMaterial( root, ` "${ parts[ 1 ] }"` );
545
-
546
- }
547
-
548
- return findMaterial( data );
549
-
550
- }
551
-
552
- function findMaterial( data, id = '' ) {
553
-
554
- for ( const name in data ) {
555
-
556
- const object = data[ name ];
557
-
558
- if ( name.startsWith( 'def Material' + id ) ) {
559
-
560
- return object;
561
-
562
- }
563
-
564
- if ( typeof object === 'object' ) {
565
-
566
- const material = findMaterial( object, id );
567
-
568
- if ( material ) return material;
569
-
570
- }
571
-
572
- }
573
-
574
- }
575
-
576
- function setTextureParams( map, data_value ) {
577
-
578
- // rotation, scale and translation
579
-
580
- if ( data_value[ 'float inputs:rotation' ] ) {
581
-
582
- map.rotation = parseFloat( data_value[ 'float inputs:rotation' ] );
583
-
584
- }
585
-
586
- if ( data_value[ 'float2 inputs:scale' ] ) {
587
-
588
- map.repeat = new Vector2().fromArray( JSON.parse( '[' + data_value[ 'float2 inputs:scale' ].replace( /[()]*/g, '' ) + ']' ) );
589
-
590
- }
591
-
592
- if ( data_value[ 'float2 inputs:translation' ] ) {
593
-
594
- map.offset = new Vector2().fromArray( JSON.parse( '[' + data_value[ 'float2 inputs:translation' ].replace( /[()]*/g, '' ) + ']' ) );
595
-
596
- }
597
-
598
- }
599
-
600
- function buildMaterial( data ) {
601
-
602
- const material = new MeshPhysicalMaterial();
603
-
604
- if ( data !== undefined ) {
605
-
606
- const surfaceConnection = data[ 'token outputs:surface.connect' ];
607
- const surfaceName = /(\w+).output/.exec( surfaceConnection )[ 1 ];
608
- const surface = data[ `def Shader "${surfaceName}"` ];
609
-
610
- if ( surface !== undefined ) {
611
-
612
- if ( 'color3f inputs:diffuseColor.connect' in surface ) {
613
-
614
- const path = surface[ 'color3f inputs:diffuseColor.connect' ];
615
- const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
616
-
617
- material.map = buildTexture( sampler );
618
- material.map.colorSpace = SRGBColorSpace;
619
-
620
- if ( 'def Shader "Transform2d_diffuse"' in data ) {
621
-
622
- setTextureParams( material.map, data[ 'def Shader "Transform2d_diffuse"' ] );
623
-
624
- }
625
-
626
- } else if ( 'color3f inputs:diffuseColor' in surface ) {
627
-
628
- const color = surface[ 'color3f inputs:diffuseColor' ].replace( /[()]*/g, '' );
629
- material.color.fromArray( JSON.parse( '[' + color + ']' ) );
630
-
631
- }
632
-
633
- if ( 'color3f inputs:emissiveColor.connect' in surface ) {
634
-
635
- const path = surface[ 'color3f inputs:emissiveColor.connect' ];
636
- const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
637
-
638
- material.emissiveMap = buildTexture( sampler );
639
- material.emissiveMap.colorSpace = SRGBColorSpace;
640
- material.emissive.set( 0xffffff );
641
-
642
- if ( 'def Shader "Transform2d_emissive"' in data ) {
643
-
644
- setTextureParams( material.emissiveMap, data[ 'def Shader "Transform2d_emissive"' ] );
645
-
646
- }
647
-
648
- } else if ( 'color3f inputs:emissiveColor' in surface ) {
649
-
650
- const color = surface[ 'color3f inputs:emissiveColor' ].replace( /[()]*/g, '' );
651
- material.emissive.fromArray( JSON.parse( '[' + color + ']' ) );
652
-
653
- }
654
-
655
- if ( 'normal3f inputs:normal.connect' in surface ) {
656
-
657
- const path = surface[ 'normal3f inputs:normal.connect' ];
658
- const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
659
-
660
- material.normalMap = buildTexture( sampler );
661
- material.normalMap.colorSpace = NoColorSpace;
662
-
663
- if ( 'def Shader "Transform2d_normal"' in data ) {
664
-
665
- setTextureParams( material.normalMap, data[ 'def Shader "Transform2d_normal"' ] );
666
-
667
- }
668
-
669
- }
670
-
671
- if ( 'float inputs:roughness.connect' in surface ) {
672
-
673
- const path = surface[ 'float inputs:roughness.connect' ];
674
- const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
675
-
676
- material.roughness = 1.0;
677
- material.roughnessMap = buildTexture( sampler );
678
- material.roughnessMap.colorSpace = NoColorSpace;
679
-
680
- if ( 'def Shader "Transform2d_roughness"' in data ) {
681
-
682
- setTextureParams( material.roughnessMap, data[ 'def Shader "Transform2d_roughness"' ] );
683
-
684
- }
685
-
686
- } else if ( 'float inputs:roughness' in surface ) {
687
-
688
- material.roughness = parseFloat( surface[ 'float inputs:roughness' ] );
689
-
690
- }
691
-
692
- if ( 'float inputs:metallic.connect' in surface ) {
693
-
694
- const path = surface[ 'float inputs:metallic.connect' ];
695
- const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
696
-
697
- material.metalness = 1.0;
698
- material.metalnessMap = buildTexture( sampler );
699
- material.metalnessMap.colorSpace = NoColorSpace;
700
-
701
- if ( 'def Shader "Transform2d_metallic"' in data ) {
702
-
703
- setTextureParams( material.metalnessMap, data[ 'def Shader "Transform2d_metallic"' ] );
704
-
705
- }
706
-
707
- } else if ( 'float inputs:metallic' in surface ) {
708
-
709
- material.metalness = parseFloat( surface[ 'float inputs:metallic' ] );
710
-
711
- }
712
-
713
- if ( 'float inputs:clearcoat.connect' in surface ) {
714
-
715
- const path = surface[ 'float inputs:clearcoat.connect' ];
716
- const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
717
-
718
- material.clearcoat = 1.0;
719
- material.clearcoatMap = buildTexture( sampler );
720
- material.clearcoatMap.colorSpace = NoColorSpace;
721
-
722
- if ( 'def Shader "Transform2d_clearcoat"' in data ) {
723
-
724
- setTextureParams( material.clearcoatMap, data[ 'def Shader "Transform2d_clearcoat"' ] );
725
-
726
- }
727
-
728
- } else if ( 'float inputs:clearcoat' in surface ) {
729
-
730
- material.clearcoat = parseFloat( surface[ 'float inputs:clearcoat' ] );
731
-
732
- }
733
-
734
- if ( 'float inputs:clearcoatRoughness.connect' in surface ) {
735
-
736
- const path = surface[ 'float inputs:clearcoatRoughness.connect' ];
737
- const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
738
-
739
- material.clearcoatRoughness = 1.0;
740
- material.clearcoatRoughnessMap = buildTexture( sampler );
741
- material.clearcoatRoughnessMap.colorSpace = NoColorSpace;
742
-
743
- if ( 'def Shader "Transform2d_clearcoatRoughness"' in data ) {
744
-
745
- setTextureParams( material.clearcoatRoughnessMap, data[ 'def Shader "Transform2d_clearcoatRoughness"' ] );
746
-
747
- }
748
-
749
- } else if ( 'float inputs:clearcoatRoughness' in surface ) {
750
-
751
- material.clearcoatRoughness = parseFloat( surface[ 'float inputs:clearcoatRoughness' ] );
752
-
753
- }
754
-
755
- if ( 'float inputs:ior' in surface ) {
756
-
757
- material.ior = parseFloat( surface[ 'float inputs:ior' ] );
758
-
759
- }
760
-
761
- if ( 'float inputs:occlusion.connect' in surface ) {
762
-
763
- const path = surface[ 'float inputs:occlusion.connect' ];
764
- const sampler = findTexture( root, /(\w+).output/.exec( path )[ 1 ] );
765
-
766
- material.aoMap = buildTexture( sampler );
767
- material.aoMap.colorSpace = NoColorSpace;
768
-
769
- if ( 'def Shader "Transform2d_occlusion"' in data ) {
770
-
771
- setTextureParams( material.aoMap, data[ 'def Shader "Transform2d_occlusion"' ] );
772
-
773
- }
774
-
775
- }
776
-
777
- }
778
-
779
- }
780
-
781
- return material;
782
-
783
- }
784
-
785
- function findTexture( data, id ) {
786
-
787
- for ( const name in data ) {
788
-
789
- const object = data[ name ];
790
-
791
- if ( name.startsWith( `def Shader "${ id }"` ) ) {
792
-
793
- return object;
794
-
795
- }
796
-
797
- if ( typeof object === 'object' ) {
798
-
799
- const texture = findTexture( object, id );
800
-
801
- if ( texture ) return texture;
802
-
803
- }
804
-
805
- }
806
-
807
- }
808
-
809
- function buildTexture( data ) {
810
-
811
- if ( 'asset inputs:file' in data ) {
812
-
813
- const path = data[ 'asset inputs:file' ].replace( /@*/g, '' ).trim();
814
-
815
- const loader = new TextureLoader();
816
-
817
- const texture = loader.load( assets[ path ] );
818
-
819
- const map = {
820
- '"clamp"': ClampToEdgeWrapping,
821
- '"mirror"': MirroredRepeatWrapping,
822
- '"repeat"': RepeatWrapping
823
- };
824
-
825
- if ( 'token inputs:wrapS' in data ) {
826
-
827
- texture.wrapS = map[ data[ 'token inputs:wrapS' ] ];
828
-
829
- }
830
-
831
- if ( 'token inputs:wrapT' in data ) {
832
-
833
- texture.wrapT = map[ data[ 'token inputs:wrapT' ] ];
834
-
835
- }
836
-
837
- return texture;
838
-
839
- }
840
-
841
- return null;
842
-
843
- }
844
-
845
- function buildObject( data ) {
846
-
847
- const geometry = buildGeometry( findMeshGeometry( data ) );
848
- const material = buildMaterial( findMeshMaterial( data ) );
849
-
850
- const mesh = geometry ? new Mesh( geometry, material ) : new Object3D();
851
-
852
- if ( 'matrix4d xformOp:transform' in data ) {
853
-
854
- const array = JSON.parse( '[' + data[ 'matrix4d xformOp:transform' ].replace( /[()]*/g, '' ) + ']' );
855
-
856
- mesh.matrix.fromArray( array );
857
- mesh.matrix.decompose( mesh.position, mesh.quaternion, mesh.scale );
858
-
859
- }
860
-
861
- return mesh;
862
-
863
- }
864
-
865
- function buildHierarchy( data, group ) {
866
-
867
- for ( const name in data ) {
868
-
869
- if ( name.startsWith( 'def Scope' ) ) {
870
-
871
- buildHierarchy( data[ name ], group );
872
-
873
- } else if ( name.startsWith( 'def Xform' ) ) {
874
-
875
- const mesh = buildObject( data[ name ] );
876
-
877
- if ( /def Xform "(\w+)"/.test( name ) ) {
878
-
879
- mesh.name = /def Xform "(\w+)"/.exec( name )[ 1 ];
880
-
881
- }
882
-
883
- group.add( mesh );
884
-
885
- buildHierarchy( data[ name ], mesh );
886
-
887
- }
888
-
889
- }
890
-
891
- }
892
-
893
- const group = new Group();
894
-
895
- buildHierarchy( root, group );
896
-
897
- return group;
898
-
899
- }
900
-
901
14
  }
902
15
 
903
16
  export { USDZLoader };