super-three 0.141.0 → 0.144.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 (353) hide show
  1. package/README.md +8 -8
  2. package/build/three.cjs +1558 -1034
  3. package/build/three.js +1558 -1034
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +2012 -1243
  6. package/examples/js/animation/MMDPhysics.js +1 -16
  7. package/examples/js/controls/ArcballControls.js +16 -3
  8. package/examples/js/controls/FirstPersonControls.js +0 -7
  9. package/examples/js/controls/FlyControls.js +0 -8
  10. package/examples/js/controls/OrbitControls.js +0 -4
  11. package/examples/js/controls/PointerLockControls.js +0 -8
  12. package/examples/js/controls/TrackballControls.js +0 -2
  13. package/examples/js/controls/TransformControls.js +20 -16
  14. package/examples/js/effects/AnaglyphEffect.js +2 -2
  15. package/examples/js/effects/OutlineEffect.js +4 -24
  16. package/examples/js/effects/ParallaxBarrierEffect.js +2 -2
  17. package/examples/js/effects/PeppersGhostEffect.js +2 -2
  18. package/examples/js/effects/StereoEffect.js +2 -2
  19. package/examples/js/environments/RoomEnvironment.js +22 -0
  20. package/examples/js/exporters/ColladaExporter.js +4 -13
  21. package/examples/js/exporters/DRACOExporter.js +0 -12
  22. package/examples/js/exporters/GLTFExporter.js +28 -29
  23. package/examples/js/exporters/OBJExporter.js +2 -23
  24. package/examples/js/exporters/PLYExporter.js +12 -24
  25. package/examples/js/exporters/STLExporter.js +0 -7
  26. package/examples/js/exporters/USDZExporter.js +6 -0
  27. package/examples/js/geometries/ConvexGeometry.js +1 -1
  28. package/examples/js/geometries/ParametricGeometry.js +1 -8
  29. package/examples/js/interactive/SelectionHelper.js +2 -0
  30. package/examples/js/libs/ktx-parse.umd.js +1 -0
  31. package/examples/js/libs/meshopt_decoder.js +98 -32
  32. package/examples/js/loaders/ColladaLoader.js +1 -0
  33. package/examples/js/loaders/DRACOLoader.js +2 -25
  34. package/examples/js/loaders/EXRLoader.js +2 -13
  35. package/examples/js/loaders/FBXLoader.js +10 -3
  36. package/examples/js/loaders/FontLoader.js +3 -16
  37. package/examples/js/loaders/GLTFLoader.js +52 -36
  38. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -11
  39. package/examples/js/loaders/LDrawLoader.js +139 -74
  40. package/examples/js/loaders/OBJLoader.js +7 -13
  41. package/examples/js/loaders/PCDLoader.js +59 -14
  42. package/examples/js/loaders/PLYLoader.js +3 -3
  43. package/examples/js/loaders/SVGLoader.js +4 -3
  44. package/examples/js/loaders/TIFFLoader.js +31 -0
  45. package/examples/js/loaders/VRMLLoader.js +33 -24
  46. package/examples/js/loaders/VTKLoader.js +1 -1
  47. package/examples/js/loaders/lwo/LWO2Parser.js +8 -7
  48. package/examples/js/loaders/lwo/LWO3Parser.js +8 -7
  49. package/examples/js/materials/MeshGouraudMaterial.js +385 -0
  50. package/examples/js/math/ColorConverter.js +0 -50
  51. package/examples/js/misc/GPUComputationRenderer.js +23 -0
  52. package/examples/js/misc/Volume.js +198 -190
  53. package/examples/js/misc/VolumeSlice.js +90 -88
  54. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  55. package/examples/js/objects/GroundProjectedEnv.js +193 -0
  56. package/examples/js/objects/Reflector.js +9 -2
  57. package/examples/js/objects/ReflectorForSSRPass.js +3 -4
  58. package/examples/js/objects/Refractor.js +10 -4
  59. package/examples/js/objects/ShadowMesh.js +5 -1
  60. package/examples/js/postprocessing/OutlinePass.js +5 -3
  61. package/examples/js/renderers/CSS2DRenderer.js +2 -2
  62. package/examples/js/renderers/CSS3DRenderer.js +2 -2
  63. package/examples/js/renderers/Projector.js +2 -23
  64. package/examples/js/shaders/LuminosityShader.js +1 -1
  65. package/examples/js/shaders/MMDToonShader.js +6 -2
  66. package/examples/js/shaders/ToneMapShader.js +1 -1
  67. package/examples/js/utils/BufferGeometryUtils.js +1 -1
  68. package/examples/js/utils/GeometryUtils.js +2 -18
  69. package/examples/js/utils/PackedPhongMaterial.js +1 -1
  70. package/examples/js/utils/SceneUtils.js +0 -16
  71. package/examples/jsm/animation/MMDPhysics.js +3 -22
  72. package/examples/jsm/controls/ArcballControls.js +17 -2
  73. package/examples/jsm/controls/FirstPersonControls.js +0 -7
  74. package/examples/jsm/controls/FlyControls.js +0 -7
  75. package/examples/jsm/controls/OrbitControls.js +0 -5
  76. package/examples/jsm/controls/PointerLockControls.js +0 -7
  77. package/examples/jsm/controls/TrackballControls.js +0 -3
  78. package/examples/jsm/controls/TransformControls.js +18 -16
  79. package/examples/jsm/effects/AnaglyphEffect.js +2 -2
  80. package/examples/jsm/effects/OutlineEffect.js +4 -25
  81. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  82. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  83. package/examples/jsm/effects/StereoEffect.js +2 -2
  84. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  85. package/examples/jsm/exporters/ColladaExporter.js +4 -13
  86. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  87. package/examples/jsm/exporters/GLTFExporter.js +29 -31
  88. package/examples/jsm/exporters/KTX2Exporter.js +29 -29
  89. package/examples/jsm/exporters/OBJExporter.js +0 -18
  90. package/examples/jsm/exporters/PLYExporter.js +14 -22
  91. package/examples/jsm/exporters/STLExporter.js +1 -9
  92. package/examples/jsm/exporters/USDZExporter.js +14 -3
  93. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  94. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  95. package/examples/jsm/interactive/HTMLMesh.js +9 -9
  96. package/examples/jsm/interactive/SelectionHelper.js +5 -3
  97. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  98. package/examples/jsm/libs/utif.module.js +1579 -0
  99. package/examples/jsm/libs/zstddec.module.js +1 -0
  100. package/examples/jsm/loaders/ColladaLoader.js +1 -0
  101. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  102. package/examples/jsm/loaders/EXRLoader.js +3 -13
  103. package/examples/jsm/loaders/FBXLoader.js +10 -3
  104. package/examples/jsm/loaders/FontLoader.js +3 -16
  105. package/examples/jsm/loaders/GLTFLoader.js +52 -36
  106. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  107. package/examples/jsm/loaders/KTX2Loader.js +192 -30
  108. package/examples/jsm/loaders/LDrawLoader.js +135 -74
  109. package/examples/jsm/loaders/OBJLoader.js +6 -14
  110. package/examples/jsm/loaders/PCDLoader.js +59 -13
  111. package/examples/jsm/loaders/PLYLoader.js +3 -3
  112. package/examples/jsm/loaders/RGBELoader.js +1 -1
  113. package/examples/jsm/loaders/SVGLoader.js +4 -3
  114. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  115. package/examples/jsm/loaders/USDZLoader.js +393 -0
  116. package/examples/jsm/loaders/VRMLLoader.js +23 -25
  117. package/examples/jsm/loaders/VTKLoader.js +1 -1
  118. package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
  119. package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
  120. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  121. package/examples/jsm/math/ColorConverter.js +1 -49
  122. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  123. package/examples/jsm/misc/Volume.js +169 -171
  124. package/examples/jsm/misc/VolumeSlice.js +78 -80
  125. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  126. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
  127. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  128. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  129. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  130. package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
  131. package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
  132. package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
  133. package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
  134. package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
  135. package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
  136. package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
  137. package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
  138. package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
  139. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +1 -1
  140. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
  141. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +1 -1
  142. package/examples/jsm/node-editor/math/AngleEditor.js +1 -1
  143. package/examples/jsm/node-editor/math/DotEditor.js +1 -1
  144. package/examples/jsm/node-editor/math/InvertEditor.js +1 -1
  145. package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
  146. package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
  147. package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
  148. package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
  149. package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
  150. package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
  151. package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
  152. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  153. package/examples/jsm/node-editor/utils/PreviewEditor.js +3 -3
  154. package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
  155. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  156. package/examples/jsm/nodes/Nodes.js +43 -13
  157. package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
  158. package/examples/jsm/nodes/accessors/NormalNode.js +4 -4
  159. package/examples/jsm/nodes/accessors/PositionNode.js +5 -5
  160. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  161. package/examples/jsm/nodes/core/AttributeNode.js +3 -3
  162. package/examples/jsm/nodes/core/CodeNode.js +3 -3
  163. package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
  164. package/examples/jsm/nodes/core/FunctionNode.js +2 -2
  165. package/examples/jsm/nodes/core/Node.js +14 -12
  166. package/examples/jsm/nodes/core/NodeBuilder.js +12 -12
  167. package/examples/jsm/nodes/core/NodeUtils.js +23 -1
  168. package/examples/jsm/nodes/core/{NodeVary.js → NodeVarying.js} +3 -3
  169. package/examples/jsm/nodes/core/{VaryNode.js → VaryingNode.js} +7 -7
  170. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +94 -0
  171. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  172. package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -0
  173. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
  174. package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
  175. package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
  176. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +31 -0
  177. package/examples/jsm/nodes/materials/Materials.js +13 -25
  178. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  179. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
  180. package/examples/jsm/nodes/materials/NodeMaterial.js +2 -2
  181. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
  182. package/examples/jsm/nodes/materialx/Disclaimer.md +199 -0
  183. package/examples/jsm/nodes/materialx/functions/lib/mx_hsv.js +56 -0
  184. package/examples/jsm/nodes/materialx/functions/lib/mx_noise.js +607 -0
  185. package/examples/jsm/nodes/math/MathNode.js +2 -12
  186. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
  187. package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
  188. package/examples/jsm/nodes/shadernode/ShaderNode.js +5 -5
  189. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +8 -5
  190. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +20 -6
  191. package/examples/jsm/nodes/utils/ConvertNode.js +8 -3
  192. package/examples/jsm/nodes/utils/JoinNode.js +7 -7
  193. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +2 -1
  194. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  195. package/examples/jsm/nodes/utils/SplitNode.js +21 -5
  196. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  197. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  198. package/examples/jsm/objects/Reflector.js +12 -5
  199. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
  200. package/examples/jsm/objects/Refractor.js +12 -6
  201. package/examples/jsm/objects/ShadowMesh.js +8 -2
  202. package/examples/jsm/postprocessing/OutlinePass.js +5 -3
  203. package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
  204. package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
  205. package/examples/jsm/renderers/Projector.js +2 -24
  206. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  207. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +329 -218
  208. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
  209. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +39 -3
  210. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
  211. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  212. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  213. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
  214. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
  215. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
  216. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +66 -81
  217. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
  218. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
  219. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  220. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +25 -30
  221. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  222. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  223. package/examples/jsm/shaders/MMDToonShader.js +2 -2
  224. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  225. package/examples/jsm/utils/BufferGeometryUtils.js +2 -1
  226. package/examples/jsm/utils/GeometryUtils.js +17 -25
  227. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  228. package/examples/jsm/utils/SceneUtils.js +1 -21
  229. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
  230. package/examples/jsm/webxr/VRButton.js +1 -7
  231. package/package.json +18 -14
  232. package/src/Three.Legacy.js +262 -36
  233. package/src/Three.js +3 -2
  234. package/src/animation/AnimationAction.js +6 -5
  235. package/src/animation/AnimationClip.js +1 -1
  236. package/src/animation/AnimationMixer.js +1 -1
  237. package/src/animation/AnimationUtils.js +204 -199
  238. package/src/animation/KeyframeTrack.js +1 -1
  239. package/src/animation/PropertyBinding.js +24 -5
  240. package/src/cameras/CubeCamera.js +0 -7
  241. package/src/constants.js +2 -4
  242. package/src/core/BufferAttribute.js +81 -111
  243. package/src/core/BufferGeometry.js +3 -41
  244. package/src/core/InstancedBufferAttribute.js +0 -10
  245. package/src/core/InterleavedBuffer.js +1 -1
  246. package/src/core/InterleavedBufferAttribute.js +56 -7
  247. package/src/core/Object3D.js +22 -5
  248. package/src/core/Uniform.js +0 -7
  249. package/src/core/UniformsGroup.js +92 -0
  250. package/src/extras/DataUtils.js +104 -88
  251. package/src/extras/core/Path.js +1 -0
  252. package/src/extras/core/ShapePath.js +1 -4
  253. package/src/extras/curves/CatmullRomCurve3.js +4 -2
  254. package/src/geometries/BoxGeometry.js +1 -1
  255. package/src/geometries/CapsuleGeometry.js +1 -1
  256. package/src/geometries/CircleGeometry.js +1 -1
  257. package/src/geometries/ConeGeometry.js +1 -1
  258. package/src/geometries/CylinderGeometry.js +2 -1
  259. package/src/geometries/DodecahedronGeometry.js +1 -1
  260. package/src/geometries/EdgesGeometry.js +5 -4
  261. package/src/geometries/ExtrudeGeometry.js +2 -11
  262. package/src/geometries/IcosahedronGeometry.js +1 -1
  263. package/src/geometries/LatheGeometry.js +2 -2
  264. package/src/geometries/OctahedronGeometry.js +1 -1
  265. package/src/geometries/PlaneGeometry.js +2 -1
  266. package/src/geometries/PolyhedronGeometry.js +1 -1
  267. package/src/geometries/RingGeometry.js +1 -1
  268. package/src/geometries/ShapeGeometry.js +2 -1
  269. package/src/geometries/SphereGeometry.js +2 -1
  270. package/src/geometries/TetrahedronGeometry.js +1 -1
  271. package/src/geometries/TorusGeometry.js +2 -1
  272. package/src/geometries/TorusKnotGeometry.js +2 -1
  273. package/src/geometries/TubeGeometry.js +2 -1
  274. package/src/geometries/WireframeGeometry.js +1 -0
  275. package/src/helpers/CameraHelper.js +97 -38
  276. package/src/helpers/DirectionalLightHelper.js +1 -0
  277. package/src/helpers/HemisphereLightHelper.js +1 -0
  278. package/src/helpers/PlaneHelper.js +6 -9
  279. package/src/helpers/PolarGridHelper.js +18 -14
  280. package/src/helpers/SpotLightHelper.js +1 -0
  281. package/src/lights/SpotLight.js +2 -0
  282. package/src/loaders/FileLoader.js +12 -1
  283. package/src/loaders/LoadingManager.js +1 -1
  284. package/src/loaders/MaterialLoader.js +49 -7
  285. package/src/loaders/ObjectLoader.js +4 -41
  286. package/src/materials/Material.js +1 -33
  287. package/src/materials/Materials.js +0 -27
  288. package/src/materials/MeshLambertMaterial.js +28 -1
  289. package/src/materials/ShaderMaterial.js +3 -7
  290. package/src/math/Color.js +3 -13
  291. package/src/math/MathUtils.js +1 -7
  292. package/src/math/Matrix3.js +1 -7
  293. package/src/math/Matrix4.js +3 -27
  294. package/src/math/Quaternion.js +1 -21
  295. package/src/math/Vector2.js +4 -24
  296. package/src/math/Vector3.js +7 -46
  297. package/src/math/Vector4.js +4 -24
  298. package/src/renderers/WebGLRenderer.js +84 -8
  299. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
  300. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  301. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
  302. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
  303. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  304. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  305. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  306. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
  307. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -12
  308. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  309. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +30 -0
  310. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
  311. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
  312. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  313. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  314. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  315. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  316. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  317. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  318. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  319. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  320. package/src/renderers/shaders/ShaderChunk.js +4 -2
  321. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
  322. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
  323. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  324. package/src/renderers/shaders/ShaderLib.js +31 -31
  325. package/src/renderers/shaders/UniformsLib.js +12 -11
  326. package/src/renderers/shaders/UniformsUtils.js +14 -0
  327. package/src/renderers/webgl/WebGLBackground.js +2 -2
  328. package/src/renderers/webgl/WebGLLights.js +37 -13
  329. package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
  330. package/src/renderers/webgl/WebGLProgram.js +6 -11
  331. package/src/renderers/webgl/WebGLPrograms.js +30 -26
  332. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  333. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  334. package/src/renderers/webgl/WebGLShaderCache.js +9 -6
  335. package/src/renderers/webgl/WebGLShadowMap.js +10 -15
  336. package/src/renderers/webgl/WebGLState.js +47 -0
  337. package/src/renderers/webgl/WebGLUniforms.js +4 -4
  338. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  339. package/src/renderers/webgl/WebGLUtils.js +2 -0
  340. package/src/renderers/webvr/WebVRManager.js +42 -9
  341. package/src/renderers/webvr/WebVRUtils.js +1 -1
  342. package/src/renderers/webxr/WebXRController.js +45 -37
  343. package/src/renderers/webxr/WebXRManager.js +58 -33
  344. package/src/scenes/Scene.js +16 -3
  345. package/src/textures/Source.js +1 -1
  346. package/src/utils.js +1 -1
  347. package/examples/js/controls/experimental/CameraControls.js +0 -1048
  348. package/examples/js/loaders/KTX2Loader.js +0 -558
  349. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  350. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
  351. package/examples/jsm/package.json +0 -3
  352. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  353. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -23,6 +23,7 @@ const _material_library_pattern = /^mtllib /;
23
23
  const _material_use_pattern = /^usemtl /;
24
24
  // usemap map_name
25
25
  const _map_use_pattern = /^usemap /;
26
+ const _face_vertex_data_separator_pattern = /\s+/;
26
27
 
27
28
  const _vA = new Vector3();
28
29
  const _vB = new Vector3();
@@ -503,31 +504,22 @@ class OBJLoader extends Loader {
503
504
  }
504
505
 
505
506
  const lines = text.split( '\n' );
506
- let line = '', lineFirstChar = '';
507
- let lineLength = 0;
508
507
  let result = [];
509
508
 
510
- // Faster to just trim left side of the line. Use if available.
511
- const trimLeft = ( typeof ''.trimLeft === 'function' );
512
-
513
509
  for ( let i = 0, l = lines.length; i < l; i ++ ) {
514
510
 
515
- line = lines[ i ];
516
-
517
- line = trimLeft ? line.trimLeft() : line.trim();
518
-
519
- lineLength = line.length;
511
+ const line = lines[ i ].trimStart();
520
512
 
521
- if ( lineLength === 0 ) continue;
513
+ if ( line.length === 0 ) continue;
522
514
 
523
- lineFirstChar = line.charAt( 0 );
515
+ const lineFirstChar = line.charAt( 0 );
524
516
 
525
517
  // @todo invoke passed in handler if any
526
518
  if ( lineFirstChar === '#' ) continue;
527
519
 
528
520
  if ( lineFirstChar === 'v' ) {
529
521
 
530
- const data = line.split( /\s+/ );
522
+ const data = line.split( _face_vertex_data_separator_pattern );
531
523
 
532
524
  switch ( data[ 0 ] ) {
533
525
 
@@ -575,7 +567,7 @@ class OBJLoader extends Loader {
575
567
  } else if ( lineFirstChar === 'f' ) {
576
568
 
577
569
  const lineData = line.slice( 1 ).trim();
578
- const vertexData = lineData.split( /\s+/ );
570
+ const vertexData = lineData.split( _face_vertex_data_separator_pattern );
579
571
  const faceVertices = [];
580
572
 
581
573
  // Parse the face vertex data into an easy to work with format
@@ -2,6 +2,7 @@ import {
2
2
  BufferGeometry,
3
3
  FileLoader,
4
4
  Float32BufferAttribute,
5
+ Int32BufferAttribute,
5
6
  Loader,
6
7
  LoaderUtils,
7
8
  Points,
@@ -229,6 +230,8 @@ class PCDLoader extends Loader {
229
230
  const position = [];
230
231
  const normal = [];
231
232
  const color = [];
233
+ const intensity = [];
234
+ const label = [];
232
235
 
233
236
  // ascii
234
237
 
@@ -285,6 +288,18 @@ class PCDLoader extends Loader {
285
288
 
286
289
  }
287
290
 
291
+ if ( offset.intensity !== undefined ) {
292
+
293
+ intensity.push( parseFloat( line[ offset.intensity ] ) );
294
+
295
+ }
296
+
297
+ if ( offset.label !== undefined ) {
298
+
299
+ label.push( parseInt( line[ offset.label ] ) );
300
+
301
+ }
302
+
288
303
  }
289
304
 
290
305
  }
@@ -309,25 +324,46 @@ class PCDLoader extends Loader {
309
324
 
310
325
  if ( offset.x !== undefined ) {
311
326
 
312
- position.push( dataview.getFloat32( ( PCDheader.points * offset.x ) + PCDheader.size[ 0 ] * i, this.littleEndian ) );
313
- position.push( dataview.getFloat32( ( PCDheader.points * offset.y ) + PCDheader.size[ 1 ] * i, this.littleEndian ) );
314
- position.push( dataview.getFloat32( ( PCDheader.points * offset.z ) + PCDheader.size[ 2 ] * i, this.littleEndian ) );
327
+ const xIndex = PCDheader.fields.indexOf( 'x' );
328
+ const yIndex = PCDheader.fields.indexOf( 'y' );
329
+ const zIndex = PCDheader.fields.indexOf( 'z' );
330
+ position.push( dataview.getFloat32( ( PCDheader.points * offset.x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );
331
+ position.push( dataview.getFloat32( ( PCDheader.points * offset.y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );
332
+ position.push( dataview.getFloat32( ( PCDheader.points * offset.z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );
315
333
 
316
334
  }
317
335
 
318
336
  if ( offset.rgb !== undefined ) {
319
337
 
320
- color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ 3 ] * i + 2 ) / 255.0 );
321
- color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ 3 ] * i + 1 ) / 255.0 );
322
- color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ 3 ] * i + 0 ) / 255.0 );
338
+ const rgbIndex = PCDheader.fields.indexOf( 'rgb' );
339
+ color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 2 ) / 255.0 );
340
+ color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 1 ) / 255.0 );
341
+ color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 0 ) / 255.0 );
323
342
 
324
343
  }
325
344
 
326
345
  if ( offset.normal_x !== undefined ) {
327
346
 
328
- normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_x ) + PCDheader.size[ 4 ] * i, this.littleEndian ) );
329
- normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_y ) + PCDheader.size[ 5 ] * i, this.littleEndian ) );
330
- normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_z ) + PCDheader.size[ 6 ] * i, this.littleEndian ) );
347
+ const xIndex = PCDheader.fields.indexOf( 'normal_x' );
348
+ const yIndex = PCDheader.fields.indexOf( 'normal_y' );
349
+ const zIndex = PCDheader.fields.indexOf( 'normal_z' );
350
+ normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );
351
+ normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );
352
+ normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );
353
+
354
+ }
355
+
356
+ if ( offset.intensity !== undefined ) {
357
+
358
+ const intensityIndex = PCDheader.fields.indexOf( 'intensity' );
359
+ intensity.push( dataview.getFloat32( ( PCDheader.points * offset.intensity ) + PCDheader.size[ intensityIndex ] * i, this.littleEndian ) );
360
+
361
+ }
362
+
363
+ if ( offset.label !== undefined ) {
364
+
365
+ const labelIndex = PCDheader.fields.indexOf( 'label' );
366
+ label.push( dataview.getInt32( ( PCDheader.points * offset.label ) + PCDheader.size[ labelIndex ] * i, this.littleEndian ) );
331
367
 
332
368
  }
333
369
 
@@ -368,6 +404,18 @@ class PCDLoader extends Loader {
368
404
 
369
405
  }
370
406
 
407
+ if ( offset.intensity !== undefined ) {
408
+
409
+ intensity.push( dataview.getFloat32( row + offset.intensity, this.littleEndian ) );
410
+
411
+ }
412
+
413
+ if ( offset.label !== undefined ) {
414
+
415
+ label.push( dataview.getInt32( row + offset.label, this.littleEndian ) );
416
+
417
+ }
418
+
371
419
  }
372
420
 
373
421
  }
@@ -379,6 +427,8 @@ class PCDLoader extends Loader {
379
427
  if ( position.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );
380
428
  if ( normal.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );
381
429
  if ( color.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );
430
+ if ( intensity.length > 0 ) geometry.setAttribute( 'intensity', new Float32BufferAttribute( intensity, 1 ) );
431
+ if ( label.length > 0 ) geometry.setAttribute( 'label', new Int32BufferAttribute( label, 1 ) );
382
432
 
383
433
  geometry.computeBoundingSphere();
384
434
 
@@ -390,10 +440,6 @@ class PCDLoader extends Loader {
390
440
 
391
441
  material.vertexColors = true;
392
442
 
393
- } else {
394
-
395
- material.color.setHex( Math.random() * 0xffffff );
396
-
397
443
  }
398
444
 
399
445
  // build point cloud
@@ -90,7 +90,7 @@ class PLYLoader extends Loader {
90
90
 
91
91
  function parseHeader( data ) {
92
92
 
93
- const patternHeader = /^ply([\s\S]*)end_header\r?\n/;
93
+ const patternHeader = /^ply([\s\S]*)end_header(\r\n|\r|\n)/;
94
94
  let headerText = '';
95
95
  let headerLength = 0;
96
96
  const result = patternHeader.exec( data );
@@ -109,7 +109,7 @@ class PLYLoader extends Loader {
109
109
  objInfo: ''
110
110
  };
111
111
 
112
- const lines = headerText.split( '\n' );
112
+ const lines = headerText.split( /\r\n|\r|\n/ );
113
113
  let currentElement;
114
114
 
115
115
  function make_ply_element_property( propertValues, propertyNameMapping ) {
@@ -283,7 +283,7 @@ class PLYLoader extends Loader {
283
283
 
284
284
  }
285
285
 
286
- const lines = body.split( '\n' );
286
+ const lines = body.split( /\r\n|\r|\n/ );
287
287
  let currentElement = 0;
288
288
  let currentElementCount = 0;
289
289
 
@@ -450,7 +450,7 @@ class RGBELoader extends DataTextureLoader {
450
450
  texture.magFilter = LinearFilter;
451
451
  texture.generateMipmaps = false;
452
452
  texture.flipY = true;
453
-
453
+
454
454
  break;
455
455
 
456
456
  }
@@ -78,6 +78,7 @@ class SVGLoader extends Loader {
78
78
  switch ( node.nodeName ) {
79
79
 
80
80
  case 'svg':
81
+ style = parseStyle( node, style );
81
82
  break;
82
83
 
83
84
  case 'style':
@@ -1458,7 +1459,7 @@ class SVGLoader extends Loader {
1458
1459
  if ( array.length >= 1 ) {
1459
1460
 
1460
1461
  const tx = array[ 0 ];
1461
- let ty = tx;
1462
+ let ty = 0;
1462
1463
 
1463
1464
  if ( array.length >= 2 ) {
1464
1465
 
@@ -2106,7 +2107,7 @@ class SVGLoader extends Loader {
2106
2107
  simplePaths = simplePaths.filter( sp => sp.points.length > 1 );
2107
2108
 
2108
2109
  // check if path is solid or a hole
2109
- const isAHole = simplePaths.map( p => isHoleTo( p, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData.style.fillRule ) );
2110
+ const isAHole = simplePaths.map( p => isHoleTo( p, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData?.style.fillRule ) );
2110
2111
 
2111
2112
 
2112
2113
  const shapesToReturn = [];
@@ -2312,7 +2313,7 @@ class SVGLoader extends Loader {
2312
2313
  const dot = Math.abs( normal1.dot( tempV2_3 ) );
2313
2314
 
2314
2315
  // If path is straight, don't create join
2315
- if ( dot !== 0 ) {
2316
+ if ( dot > Number.EPSILON ) {
2316
2317
 
2317
2318
  // Compute inner and outer segment intersections
2318
2319
  const miterSide = strokeWidth2 / dot;
@@ -0,0 +1,36 @@
1
+ import {
2
+ DataTextureLoader,
3
+ LinearFilter,
4
+ LinearMipmapLinearFilter
5
+ } from 'three';
6
+
7
+ import UTIF from '../libs/utif.module.js';
8
+
9
+ class TIFFLoader extends DataTextureLoader {
10
+
11
+ constructor( manager ) {
12
+
13
+ super( manager );
14
+
15
+ }
16
+
17
+ parse( buffer ) {
18
+
19
+ const ifds = UTIF.decode( buffer );
20
+ UTIF.decodeImage( buffer, ifds[ 0 ] );
21
+ const rgba = UTIF.toRGBA8( ifds[ 0 ] );
22
+
23
+ return {
24
+ width: ifds[ 0 ].width,
25
+ height: ifds[ 0 ].height,
26
+ data: rgba,
27
+ flipY: true,
28
+ magFilter: LinearFilter,
29
+ minFilter: LinearMipmapLinearFilter
30
+ };
31
+
32
+ }
33
+
34
+ }
35
+
36
+ export { TIFFLoader };
@@ -0,0 +1,393 @@
1
+ import {
2
+ BufferAttribute,
3
+ BufferGeometry,
4
+ FileLoader,
5
+ Group,
6
+ Loader,
7
+ Mesh,
8
+ MeshStandardMaterial,
9
+ TextureLoader
10
+ } from 'three';
11
+
12
+ import * as fflate from '../libs/fflate.module.js';
13
+
14
+ class USDZLoader extends Loader {
15
+
16
+ constructor( manager ) {
17
+
18
+ super( manager );
19
+
20
+ }
21
+
22
+ load( url, onLoad, onProgress, onError ) {
23
+
24
+ const scope = this;
25
+
26
+ const loader = new FileLoader( scope.manager );
27
+ loader.setPath( scope.path );
28
+ loader.setResponseType( 'arraybuffer' );
29
+ loader.setRequestHeader( scope.requestHeader );
30
+ loader.setWithCredentials( scope.withCredentials );
31
+ loader.load( url, function ( text ) {
32
+
33
+ try {
34
+
35
+ onLoad( scope.parse( text ) );
36
+
37
+ } catch ( e ) {
38
+
39
+ if ( onError ) {
40
+
41
+ onError( e );
42
+
43
+ } else {
44
+
45
+ console.error( e );
46
+
47
+ }
48
+
49
+ scope.manager.itemError( url );
50
+
51
+ }
52
+
53
+ }, onProgress, onError );
54
+
55
+ }
56
+
57
+ parse( buffer ) {
58
+
59
+ function createImages( zip ) {
60
+
61
+ const data = {};
62
+ const loader = new FileLoader();
63
+ loader.setResponseType( 'arraybuffer' );
64
+
65
+ for ( const filename in zip ) {
66
+
67
+ if ( filename.endsWith( 'png' ) ) {
68
+
69
+ const blob = new Blob( [ zip[ filename ] ], { type: { type: 'image/png' } } );
70
+ data[ filename ] = URL.createObjectURL( blob );
71
+
72
+ }
73
+
74
+ }
75
+
76
+ return data;
77
+
78
+ }
79
+
80
+ function findUSD( zip ) {
81
+
82
+ for ( const filename in zip ) {
83
+
84
+ if ( filename.endsWith( 'usda' ) ) {
85
+
86
+ return zip[ filename ];
87
+
88
+ }
89
+
90
+ }
91
+
92
+ }
93
+
94
+ const zip = fflate.unzipSync( new Uint8Array( buffer ) ); // eslint-disable-line no-undef
95
+
96
+ // console.log( zip );
97
+
98
+ const images = createImages( zip );
99
+ const file = findUSD( zip );
100
+
101
+ if ( file === undefined ) {
102
+
103
+ console.warn( 'THREE.USDZLoader: No usda file found.' );
104
+
105
+ return {};
106
+
107
+ }
108
+
109
+ // Parse file
110
+
111
+ const text = fflate.strFromU8( file );
112
+ const lines = text.split( '\n' );
113
+ const length = lines.length;
114
+
115
+ const data = {};
116
+
117
+ let current = 0;
118
+ let string = null;
119
+ let target = data;
120
+
121
+ const stack = [ data ];
122
+
123
+ // debugger;
124
+
125
+ function parseNextLine() {
126
+
127
+ const line = lines[ current ];
128
+
129
+ // console.log( line );
130
+
131
+ if ( line.includes( '=' ) ) {
132
+
133
+ const assignment = line.split( '=' );
134
+
135
+ const lhs = assignment[ 0 ].trim();
136
+ const rhs = assignment[ 1 ].trim();
137
+
138
+ if ( rhs.endsWith( '{' ) ) {
139
+
140
+ const group = {};
141
+ stack.push( group );
142
+
143
+ target[ lhs ] = group;
144
+ target = group;
145
+
146
+ } else {
147
+
148
+ target[ lhs ] = rhs;
149
+
150
+ }
151
+
152
+ } else if ( line.endsWith( '{' ) ) {
153
+
154
+ const group = target[ string ] || {};
155
+ stack.push( group );
156
+
157
+ target[ string ] = group;
158
+ target = group;
159
+
160
+ } else if ( line.endsWith( '}' ) ) {
161
+
162
+ stack.pop();
163
+
164
+ if ( stack.length === 0 ) return;
165
+
166
+ target = stack[ stack.length - 1 ];
167
+
168
+ } else if ( line.endsWith( '(' ) ) {
169
+
170
+ const meta = {};
171
+ stack.push( meta );
172
+
173
+ string = line.split( '(' )[ 0 ].trim() || string;
174
+
175
+ target[ string ] = meta;
176
+ target = meta;
177
+
178
+ } else if ( line.endsWith( ')' ) ) {
179
+
180
+ stack.pop();
181
+
182
+ target = stack[ stack.length - 1 ];
183
+
184
+ } else {
185
+
186
+ string = line.trim();
187
+
188
+ }
189
+
190
+ current ++;
191
+
192
+ if ( current < length ) {
193
+
194
+ parseNextLine();
195
+
196
+ }
197
+
198
+ }
199
+
200
+ parseNextLine();
201
+
202
+ // Build scene
203
+
204
+ function findGeometry( data ) {
205
+
206
+ for ( const name in data ) {
207
+
208
+ const object = data[ name ];
209
+
210
+ if ( name.startsWith( 'def Mesh' ) ) {
211
+
212
+ // Move st indices to Mesh
213
+
214
+ if ( data[ 'int[] primvars:st:indices' ] ) {
215
+
216
+ object[ 'int[] primvars:st:indices' ] = data[ 'int[] primvars:st:indices' ];
217
+
218
+ }
219
+
220
+ return object;
221
+
222
+ }
223
+
224
+
225
+ if ( typeof object === 'object' ) {
226
+
227
+ const geometry = findGeometry( object );
228
+
229
+ if ( geometry ) return geometry;
230
+
231
+ }
232
+
233
+ }
234
+
235
+ }
236
+
237
+ function buildGeometry( data ) {
238
+
239
+ const geometry = new BufferGeometry();
240
+
241
+ const positions = JSON.parse( data[ 'point3f[] points' ].replace( /[()]*/g, '' ) );
242
+ const attribute = new BufferAttribute( new Float32Array( positions ), 3 );
243
+
244
+ if ( data[ 'int[] faceVertexIndices' ] ) {
245
+
246
+ const indices = JSON.parse( data[ 'int[] faceVertexIndices' ] );
247
+ geometry.setAttribute( 'position', toFlatBufferAttribute( attribute, indices ) );
248
+
249
+ } else {
250
+
251
+ geometry.setAttribute( 'position', attribute );
252
+
253
+ }
254
+
255
+
256
+ if ( data[ 'texCoord2f[] primvars:st' ] ) {
257
+
258
+ const uvs = JSON.parse( data[ 'texCoord2f[] primvars:st' ].replace( /[()]*/g, '' ) );
259
+ const attribute = new BufferAttribute( new Float32Array( uvs ), 2 );
260
+
261
+ if ( data[ 'int[] primvars:st:indices' ] ) {
262
+
263
+ const indices = JSON.parse( data[ 'int[] primvars:st:indices' ] );
264
+ geometry.setAttribute( 'uv', toFlatBufferAttribute( attribute, indices ) );
265
+
266
+ } else {
267
+
268
+ geometry.setAttribute( 'uv', attribute );
269
+
270
+ }
271
+
272
+ }
273
+
274
+ geometry.computeVertexNormals();
275
+
276
+ return geometry;
277
+
278
+ }
279
+
280
+ function toFlatBufferAttribute( attribute, indices ) {
281
+
282
+ const array = attribute.array;
283
+ const itemSize = attribute.itemSize;
284
+
285
+ const array2 = new array.constructor( indices.length * itemSize );
286
+
287
+ let index = 0, index2 = 0;
288
+
289
+ for ( let i = 0, l = indices.length; i < l; i ++ ) {
290
+
291
+ index = indices[ i ] * itemSize;
292
+
293
+ for ( let j = 0; j < itemSize; j ++ ) {
294
+
295
+ array2[ index2 ++ ] = array[ index ++ ];
296
+
297
+ }
298
+
299
+ }
300
+
301
+ return new BufferAttribute( array2, itemSize );
302
+
303
+ }
304
+
305
+ function findMaterial( data ) {
306
+
307
+ for ( const name in data ) {
308
+
309
+ const object = data[ name ];
310
+
311
+ if ( name.startsWith( 'def Material' ) ) {
312
+
313
+ return object;
314
+
315
+ }
316
+
317
+
318
+ if ( typeof object === 'object' ) {
319
+
320
+ const material = findMaterial( object );
321
+
322
+ if ( material ) return material;
323
+
324
+ }
325
+
326
+ }
327
+
328
+ }
329
+
330
+ function buildMaterial( data ) {
331
+
332
+ const material = new MeshStandardMaterial();
333
+
334
+ // console.log( data );
335
+
336
+ if ( data[ 'def Shader "diffuseColor_texture"' ] ) {
337
+
338
+ const texture = data[ 'def Shader "diffuseColor_texture"' ];
339
+ const file = texture[ 'asset inputs:file' ].replace( /@*/g, '' );
340
+
341
+ material.map = new TextureLoader().load( images[ file ] );
342
+
343
+ }
344
+
345
+ if ( data[ 'def Shader "normal_texture"' ] ) {
346
+
347
+ const texture = data[ 'def Shader "normal_texture"' ];
348
+ const file = texture[ 'asset inputs:file' ].replace( /@*/g, '' );
349
+
350
+ material.normalMap = new TextureLoader().load( images[ file ] );
351
+
352
+ }
353
+
354
+
355
+ return material;
356
+
357
+ }
358
+
359
+ function buildMesh( data ) {
360
+
361
+ const geometry = buildGeometry( findGeometry( data ) );
362
+ const material = buildMaterial( findMaterial( data ) );
363
+
364
+ const mesh = new Mesh( geometry, material );
365
+
366
+ return mesh;
367
+
368
+ }
369
+
370
+ // console.log( data );
371
+
372
+ const group = new Group();
373
+
374
+ for ( const name in data ) {
375
+
376
+ if ( name.startsWith( 'def Xform' ) ) {
377
+
378
+ const mesh = buildMesh( data[ name ] );
379
+ group.add( mesh );
380
+
381
+ }
382
+
383
+ }
384
+
385
+ // console.log( group );
386
+
387
+ return group;
388
+
389
+ }
390
+
391
+ }
392
+
393
+ export { USDZLoader };