super-three 0.133.4 → 0.136.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.js +2285 -1983
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +5983 -5358
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  6. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  7. package/examples/fonts/open-sans/open-sans.css +9 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  12. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  13. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  14. package/examples/js/animation/CCDIKSolver.js +0 -1
  15. package/examples/js/animation/MMDPhysics.js +2 -4
  16. package/examples/js/cameras/CinematicCamera.js +2 -7
  17. package/examples/js/controls/ArcballControls.js +99 -72
  18. package/examples/js/controls/DragControls.js +7 -0
  19. package/examples/js/controls/OrbitControls.js +5 -36
  20. package/examples/js/controls/TrackballControls.js +3 -2
  21. package/examples/js/controls/TransformControls.js +24 -1
  22. package/examples/js/csm/CSM.js +2 -2
  23. package/examples/js/csm/CSMFrustum.js +133 -0
  24. package/examples/js/curves/CurveExtras.js +0 -2
  25. package/examples/js/effects/AsciiEffect.js +2 -9
  26. package/examples/js/exporters/GLTFExporter.js +148 -64
  27. package/examples/js/exporters/MMDExporter.js +1 -1
  28. package/examples/js/exporters/USDZExporter.js +45 -26
  29. package/examples/js/geometries/ConvexGeometry.js +1 -1
  30. package/examples/js/geometries/TeapotGeometry.js +0 -1
  31. package/examples/js/interactive/SelectionBox.js +2 -0
  32. package/examples/js/interactive/SelectionHelper.js +22 -7
  33. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  34. package/examples/js/lines/LineMaterial.js +58 -20
  35. package/examples/js/lines/LineSegments2.js +29 -24
  36. package/examples/js/loaders/3DMLoader.js +24 -11
  37. package/examples/js/loaders/3MFLoader.js +2 -2
  38. package/examples/js/loaders/AMFLoader.js +0 -2
  39. package/examples/js/loaders/BasisTextureLoader.js +1 -0
  40. package/examples/js/loaders/ColladaLoader.js +61 -4
  41. package/examples/js/loaders/EXRLoader.js +201 -272
  42. package/examples/js/loaders/FBXLoader.js +4 -5
  43. package/examples/js/loaders/GLTFLoader.js +98 -35
  44. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
  45. package/examples/js/loaders/KTX2Loader.js +23 -2
  46. package/examples/js/loaders/KTXLoader.js +1 -1
  47. package/examples/js/loaders/LDrawLoader.js +1169 -901
  48. package/examples/js/loaders/LUT3dlLoader.js +19 -10
  49. package/examples/js/loaders/LUTCubeLoader.js +5 -4
  50. package/examples/js/loaders/LWOLoader.js +8 -6
  51. package/examples/js/loaders/LogLuvLoader.js +766 -0
  52. package/examples/js/loaders/MMDLoader.js +0 -1
  53. package/examples/js/loaders/NRRDLoader.js +9 -2
  54. package/examples/js/loaders/OBJLoader.js +0 -2
  55. package/examples/js/loaders/PLYLoader.js +33 -8
  56. package/examples/js/loaders/RGBELoader.js +8 -22
  57. package/examples/js/loaders/RGBMLoader.js +56 -6
  58. package/examples/js/loaders/SVGLoader.js +12 -6
  59. package/examples/js/loaders/TDSLoader.js +237 -271
  60. package/examples/js/loaders/VOXLoader.js +1 -0
  61. package/examples/js/loaders/VRMLLoader.js +11 -22
  62. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  63. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  64. package/examples/js/math/ConvexHull.js +7 -13
  65. package/examples/js/math/ImprovedNoise.js +1 -1
  66. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  67. package/examples/js/misc/Volume.js +2 -2
  68. package/examples/js/modifiers/CurveModifier.js +8 -7
  69. package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
  70. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  71. package/examples/js/objects/Lensflare.js +2 -10
  72. package/examples/js/objects/MarchingCubes.js +42 -128
  73. package/examples/js/objects/Reflector.js +8 -13
  74. package/examples/js/objects/ReflectorForSSRPass.js +0 -10
  75. package/examples/js/objects/Refractor.js +8 -13
  76. package/examples/js/objects/Sky.js +1 -1
  77. package/examples/js/objects/Water.js +3 -15
  78. package/examples/js/objects/Water2.js +4 -7
  79. package/examples/js/postprocessing/GlitchPass.js +6 -5
  80. package/examples/js/postprocessing/SMAAPass.js +2 -9
  81. package/examples/js/postprocessing/SSAOPass.js +10 -21
  82. package/examples/js/postprocessing/SavePass.js +1 -5
  83. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  84. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  85. package/examples/js/shaders/ConvolutionShader.js +0 -1
  86. package/examples/js/shaders/DigitalGlitch.js +3 -3
  87. package/examples/js/shaders/FXAAShader.js +1 -1
  88. package/examples/js/shaders/FilmShader.js +1 -1
  89. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  90. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  91. package/examples/js/shaders/MMDToonShader.js +0 -1
  92. package/examples/js/shaders/SSAOShader.js +1 -1
  93. package/examples/js/shaders/SSRShader.js +1 -1
  94. package/examples/js/shaders/SSRrShader.js +1 -1
  95. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  96. package/examples/js/utils/GeometryUtils.js +1 -1
  97. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  98. package/examples/jsm/animation/MMDPhysics.js +1 -3
  99. package/examples/jsm/cameras/CinematicCamera.js +2 -5
  100. package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
  101. package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
  102. package/examples/jsm/controls/ArcballControls.js +80 -77
  103. package/examples/jsm/controls/DragControls.js +7 -0
  104. package/examples/jsm/controls/OrbitControls.js +9 -51
  105. package/examples/jsm/controls/TrackballControls.js +1 -1
  106. package/examples/jsm/controls/TransformControls.js +24 -1
  107. package/examples/jsm/csm/CSM.js +3 -3
  108. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  109. package/examples/jsm/curves/CurveExtras.js +0 -2
  110. package/examples/jsm/effects/AsciiEffect.js +2 -9
  111. package/examples/jsm/exporters/GLTFExporter.js +169 -99
  112. package/examples/jsm/exporters/MMDExporter.js +1 -1
  113. package/examples/jsm/exporters/USDZExporter.js +47 -26
  114. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  115. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  116. package/examples/jsm/interactive/SelectionBox.js +1 -0
  117. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  118. package/examples/jsm/libs/flow.module.js +3338 -0
  119. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  120. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  121. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  122. package/examples/jsm/lines/LineMaterial.js +59 -23
  123. package/examples/jsm/lines/LineSegments2.js +22 -18
  124. package/examples/jsm/loaders/3DMLoader.js +18 -12
  125. package/examples/jsm/loaders/3MFLoader.js +2 -2
  126. package/examples/jsm/loaders/AMFLoader.js +0 -2
  127. package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
  128. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  129. package/examples/jsm/loaders/EXRLoader.js +200 -306
  130. package/examples/jsm/loaders/FBXLoader.js +4 -5
  131. package/examples/jsm/loaders/GLTFLoader.js +102 -40
  132. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
  133. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  134. package/examples/jsm/loaders/KTXLoader.js +1 -1
  135. package/examples/jsm/loaders/LDrawLoader.js +1159 -898
  136. package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
  137. package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
  138. package/examples/jsm/loaders/LWOLoader.js +8 -6
  139. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  140. package/examples/jsm/loaders/MMDLoader.js +0 -1
  141. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  142. package/examples/jsm/loaders/OBJLoader.js +0 -2
  143. package/examples/jsm/loaders/PLYLoader.js +34 -8
  144. package/examples/jsm/loaders/RGBELoader.js +7 -28
  145. package/examples/jsm/loaders/RGBMLoader.js +62 -8
  146. package/examples/jsm/loaders/SVGLoader.js +15 -7
  147. package/examples/jsm/loaders/TDSLoader.js +236 -275
  148. package/examples/jsm/loaders/VOXLoader.js +1 -0
  149. package/examples/jsm/loaders/VRMLLoader.js +11 -23
  150. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  151. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  152. package/examples/jsm/math/ConvexHull.js +7 -13
  153. package/examples/jsm/math/ImprovedNoise.js +1 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  155. package/examples/jsm/misc/Volume.js +2 -2
  156. package/examples/jsm/modifiers/CurveModifier.js +9 -8
  157. package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
  158. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  159. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  160. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  161. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  162. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  163. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  164. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  165. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  166. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  167. package/examples/jsm/node-editor/examples/rim.json +1 -0
  168. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  169. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  170. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  171. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  172. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  173. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  174. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  175. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  176. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  177. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  178. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  179. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  180. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  181. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  182. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  183. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  184. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  185. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  186. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  187. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  188. package/examples/jsm/nodes/math/MathNode.js +12 -0
  189. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  190. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  191. package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
  192. package/examples/jsm/objects/Lensflare.js +5 -16
  193. package/examples/jsm/objects/MarchingCubes.js +46 -152
  194. package/examples/jsm/objects/Reflector.js +8 -16
  195. package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
  196. package/examples/jsm/objects/Refractor.js +8 -16
  197. package/examples/jsm/objects/Sky.js +1 -1
  198. package/examples/jsm/objects/Water.js +3 -18
  199. package/examples/jsm/objects/Water2.js +4 -8
  200. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  201. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  202. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  203. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  204. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  205. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  206. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  207. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  208. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  209. package/examples/jsm/postprocessing/GlitchPass.js +10 -7
  210. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  211. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  212. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  213. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  214. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  215. package/examples/jsm/postprocessing/SMAAPass.js +3 -12
  216. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  217. package/examples/jsm/postprocessing/SSAOPass.js +15 -26
  218. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  219. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  220. package/examples/jsm/postprocessing/SavePass.js +2 -4
  221. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  222. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  223. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  224. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  225. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  226. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  227. package/examples/jsm/renderers/nodes/Nodes.js +17 -13
  228. package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
  229. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  230. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  231. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  232. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  233. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  234. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  235. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  236. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  237. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  238. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  239. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  240. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  241. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  242. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  243. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  244. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  245. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  246. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  247. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  248. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  249. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  250. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  251. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  252. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  253. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  254. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  255. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  256. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
  257. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  258. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  259. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  260. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  261. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  262. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
  263. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  264. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  265. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  266. package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
  267. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  268. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  269. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  270. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  271. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  272. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  273. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  274. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  275. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  276. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  277. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  278. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  279. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  280. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  281. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  282. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  283. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  284. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  285. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  286. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  287. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  288. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  289. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  290. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  291. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
  292. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  293. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
  294. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  295. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
  296. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  297. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  298. package/examples/jsm/shaders/DigitalGlitch.js +3 -3
  299. package/examples/jsm/shaders/FXAAShader.js +1 -1
  300. package/examples/jsm/shaders/FilmShader.js +1 -1
  301. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  302. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  303. package/examples/jsm/shaders/MMDToonShader.js +0 -1
  304. package/examples/jsm/shaders/SSAOShader.js +1 -1
  305. package/examples/jsm/shaders/SSRShader.js +1 -1
  306. package/examples/jsm/shaders/SSRrShader.js +1 -1
  307. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  308. package/examples/jsm/utils/GeometryUtils.js +1 -1
  309. package/examples/jsm/utils/LDrawUtils.js +195 -0
  310. package/examples/jsm/utils/WorkerPool.js +11 -11
  311. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  312. package/examples/jsm/webxr/VRButton.js +24 -0
  313. package/examples/jsm/webxr/XREstimatedLight.js +2 -0
  314. package/package.json +27 -18
  315. package/src/Three.Legacy.js +18 -0
  316. package/src/Three.js +1 -3
  317. package/src/animation/AnimationMixer.js +1 -0
  318. package/src/cameras/CubeCamera.js +2 -0
  319. package/src/cameras/StereoCamera.js +8 -7
  320. package/src/constants.js +3 -23
  321. package/src/core/Layers.js +7 -1
  322. package/src/core/Object3D.js +3 -1
  323. package/src/extras/ImageUtils.js +63 -0
  324. package/src/extras/PMREMGenerator.js +49 -185
  325. package/src/extras/core/Interpolations.js +1 -1
  326. package/src/geometries/LatheGeometry.js +70 -47
  327. package/src/helpers/CameraHelper.js +1 -1
  328. package/src/loaders/FileLoader.js +98 -144
  329. package/src/loaders/ImageLoader.js +9 -4
  330. package/src/loaders/LoaderUtils.js +26 -0
  331. package/src/loaders/MaterialLoader.js +8 -5
  332. package/src/loaders/ObjectLoader.js +2 -0
  333. package/src/materials/Material.js +8 -8
  334. package/src/materials/MeshPhysicalMaterial.js +20 -14
  335. package/src/math/Color.js +1 -39
  336. package/src/math/MathUtils.js +5 -16
  337. package/src/math/Quaternion.js +1 -1
  338. package/src/math/Ray.js +2 -2
  339. package/src/math/Sphere.js +10 -1
  340. package/src/objects/Skeleton.js +1 -0
  341. package/src/renderers/WebGLCubeRenderTarget.js +0 -2
  342. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  343. package/src/renderers/WebGLRenderer.js +106 -199
  344. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  345. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  346. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  347. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
  348. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
  349. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  350. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
  351. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  352. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  353. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  354. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  355. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  356. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
  357. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
  358. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  359. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  360. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
  361. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
  362. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
  363. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
  364. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
  365. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  366. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  367. package/src/renderers/shaders/ShaderLib.js +8 -6
  368. package/src/renderers/shaders/UniformsLib.js +1 -2
  369. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  370. package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
  371. package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
  372. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  373. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  374. package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
  375. package/src/renderers/webgl/WebGLProgram.js +12 -37
  376. package/src/renderers/webgl/WebGLPrograms.js +192 -70
  377. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  378. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  379. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  380. package/src/renderers/webgl/WebGLState.js +157 -17
  381. package/src/renderers/webgl/WebGLTextures.js +442 -83
  382. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  383. package/src/renderers/webgl/WebGLUtils.js +86 -28
  384. package/src/renderers/webxr/WebXRManager.js +77 -109
  385. package/src/scenes/Scene.js +1 -1
  386. package/src/textures/DataTexture.js +0 -2
  387. package/src/textures/DataTexture2DArray.js +0 -2
  388. package/src/textures/DataTexture3D.js +0 -2
  389. package/src/textures/FramebufferTexture.js +25 -0
  390. package/src/textures/Texture.js +8 -1
  391. package/src/textures/VideoTexture.js +1 -3
  392. package/examples/js/WebGL.js +0 -90
  393. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  394. package/examples/js/libs/dat.gui.min.js +0 -14
  395. package/examples/js/utils/RoughnessMipmapper.js +0 -278
  396. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  397. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  398. package/examples/jsm/libs/glslang.js +0 -78
  399. package/examples/jsm/libs/glslang.wasm +0 -0
  400. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  401. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  402. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  403. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  404. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  405. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  406. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  407. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  408. package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
  409. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -15,7 +15,6 @@ import {
15
15
  NearestMipmapNearestFilter,
16
16
  PropertyBinding,
17
17
  RGBAFormat,
18
- RGBFormat,
19
18
  RepeatWrapping,
20
19
  Scene,
21
20
  Vector3
@@ -58,6 +57,12 @@ class GLTFExporter {
58
57
 
59
58
  } );
60
59
 
60
+ this.register( function ( writer ) {
61
+
62
+ return new GLTFMaterialsClearcoatExtension( writer );
63
+
64
+ } );
65
+
61
66
  }
62
67
 
63
68
  register( callback ) {
@@ -88,9 +93,18 @@ class GLTFExporter {
88
93
  * Parse scenes and generate GLTF output
89
94
  * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes
90
95
  * @param {Function} onDone Callback on completed
96
+ * @param {Function} onError Callback on errors
91
97
  * @param {Object} options options
92
98
  */
93
- parse( input, onDone, options ) {
99
+ parse( input, onDone, onError, options ) {
100
+
101
+ if ( typeof onError === 'object' ) {
102
+
103
+ console.warn( 'THREE.GLTFExporter: parse() expects options as the fourth argument now.' );
104
+
105
+ options = onError;
106
+
107
+ }
94
108
 
95
109
  const writer = new GLTFWriter();
96
110
  const plugins = [];
@@ -102,7 +116,19 @@ class GLTFExporter {
102
116
  }
103
117
 
104
118
  writer.setPlugins( plugins );
105
- writer.write( input, onDone, options );
119
+ writer.write( input, onDone, options ).catch( onError );
120
+
121
+ }
122
+
123
+ parseAsync( input, options ) {
124
+
125
+ const scope = this;
126
+
127
+ return new Promise( function ( resolve, reject ) {
128
+
129
+ scope.parse( input, resolve, reject, options );
130
+
131
+ } );
106
132
 
107
133
  }
108
134
 
@@ -381,7 +407,7 @@ class GLTFWriter {
381
407
  * @param {Function} onDone Callback on completed
382
408
  * @param {Object} options options
383
409
  */
384
- write( input, onDone, options ) {
410
+ async write( input, onDone, options ) {
385
411
 
386
412
  this.options = Object.assign( {}, {
387
413
  // default options
@@ -404,97 +430,95 @@ class GLTFWriter {
404
430
 
405
431
  this.processInput( input );
406
432
 
407
- const writer = this;
408
-
409
- Promise.all( this.pending ).then( function () {
433
+ await Promise.all( this.pending );
410
434
 
411
- const buffers = writer.buffers;
412
- const json = writer.json;
413
- const options = writer.options;
414
- const extensionsUsed = writer.extensionsUsed;
435
+ const writer = this;
436
+ const buffers = writer.buffers;
437
+ const json = writer.json;
438
+ options = writer.options;
439
+ const extensionsUsed = writer.extensionsUsed;
415
440
 
416
- // Merge buffers.
417
- const blob = new Blob( buffers, { type: 'application/octet-stream' } );
441
+ // Merge buffers.
442
+ const blob = new Blob( buffers, { type: 'application/octet-stream' } );
418
443
 
419
- // Declare extensions.
420
- const extensionsUsedList = Object.keys( extensionsUsed );
444
+ // Declare extensions.
445
+ const extensionsUsedList = Object.keys( extensionsUsed );
421
446
 
422
- if ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;
447
+ if ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;
423
448
 
424
- // Update bytelength of the single buffer.
425
- if ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;
449
+ // Update bytelength of the single buffer.
450
+ if ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;
426
451
 
427
- if ( options.binary === true ) {
452
+ if ( options.binary === true ) {
428
453
 
429
- // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
454
+ // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
430
455
 
431
- const reader = new window.FileReader();
432
- reader.readAsArrayBuffer( blob );
433
- reader.onloadend = function () {
456
+ const reader = new window.FileReader();
457
+ reader.readAsArrayBuffer( blob );
458
+ reader.onloadend = function () {
434
459
 
435
- // Binary chunk.
436
- const binaryChunk = getPaddedArrayBuffer( reader.result );
437
- const binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
438
- binaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );
439
- binaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );
440
-
441
- // JSON chunk.
442
- const jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );
443
- const jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
444
- jsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );
445
- jsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );
446
-
447
- // GLB header.
448
- const header = new ArrayBuffer( GLB_HEADER_BYTES );
449
- const headerView = new DataView( header );
450
- headerView.setUint32( 0, GLB_HEADER_MAGIC, true );
451
- headerView.setUint32( 4, GLB_VERSION, true );
452
- const totalByteLength = GLB_HEADER_BYTES
453
- + jsonChunkPrefix.byteLength + jsonChunk.byteLength
454
- + binaryChunkPrefix.byteLength + binaryChunk.byteLength;
455
- headerView.setUint32( 8, totalByteLength, true );
456
-
457
- const glbBlob = new Blob( [
458
- header,
459
- jsonChunkPrefix,
460
- jsonChunk,
461
- binaryChunkPrefix,
462
- binaryChunk
463
- ], { type: 'application/octet-stream' } );
464
-
465
- const glbReader = new window.FileReader();
466
- glbReader.readAsArrayBuffer( glbBlob );
467
- glbReader.onloadend = function () {
468
-
469
- onDone( glbReader.result );
470
-
471
- };
460
+ // Binary chunk.
461
+ const binaryChunk = getPaddedArrayBuffer( reader.result );
462
+ const binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
463
+ binaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );
464
+ binaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );
465
+
466
+ // JSON chunk.
467
+ const jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );
468
+ const jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
469
+ jsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );
470
+ jsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );
471
+
472
+ // GLB header.
473
+ const header = new ArrayBuffer( GLB_HEADER_BYTES );
474
+ const headerView = new DataView( header );
475
+ headerView.setUint32( 0, GLB_HEADER_MAGIC, true );
476
+ headerView.setUint32( 4, GLB_VERSION, true );
477
+ const totalByteLength = GLB_HEADER_BYTES
478
+ + jsonChunkPrefix.byteLength + jsonChunk.byteLength
479
+ + binaryChunkPrefix.byteLength + binaryChunk.byteLength;
480
+ headerView.setUint32( 8, totalByteLength, true );
481
+
482
+ const glbBlob = new Blob( [
483
+ header,
484
+ jsonChunkPrefix,
485
+ jsonChunk,
486
+ binaryChunkPrefix,
487
+ binaryChunk
488
+ ], { type: 'application/octet-stream' } );
489
+
490
+ const glbReader = new window.FileReader();
491
+ glbReader.readAsArrayBuffer( glbBlob );
492
+ glbReader.onloadend = function () {
493
+
494
+ onDone( glbReader.result );
472
495
 
473
496
  };
474
497
 
475
- } else {
498
+ };
476
499
 
477
- if ( json.buffers && json.buffers.length > 0 ) {
500
+ } else {
478
501
 
479
- const reader = new window.FileReader();
480
- reader.readAsDataURL( blob );
481
- reader.onloadend = function () {
502
+ if ( json.buffers && json.buffers.length > 0 ) {
482
503
 
483
- const base64data = reader.result;
484
- json.buffers[ 0 ].uri = base64data;
485
- onDone( json );
504
+ const reader = new window.FileReader();
505
+ reader.readAsDataURL( blob );
506
+ reader.onloadend = function () {
486
507
 
487
- };
508
+ const base64data = reader.result;
509
+ json.buffers[ 0 ].uri = base64data;
510
+ onDone( json );
488
511
 
489
- } else {
512
+ };
490
513
 
491
- onDone( json );
514
+ } else {
492
515
 
493
- }
516
+ onDone( json );
494
517
 
495
518
  }
496
519
 
497
- } );
520
+ }
521
+
498
522
 
499
523
  }
500
524
 
@@ -937,7 +961,7 @@ class GLTFWriter {
937
961
  /**
938
962
  * Process image
939
963
  * @param {Image} image to process
940
- * @param {Integer} format of the image (e.g. RGBFormat, RGBAFormat etc)
964
+ * @param {Integer} format of the image (RGBAFormat)
941
965
  * @param {Boolean} flipY before writing out the image
942
966
  * @return {Integer} Index of the processed texture in the "images" array
943
967
  */
@@ -986,9 +1010,9 @@ class GLTFWriter {
986
1010
 
987
1011
  } else {
988
1012
 
989
- if ( format !== RGBAFormat && format !== RGBFormat ) {
1013
+ if ( format !== RGBAFormat ) {
990
1014
 
991
- console.error( 'GLTFExporter: Only RGB and RGBA formats are supported.' );
1015
+ console.error( 'GLTFExporter: Only RGBAFormat is supported.' );
992
1016
 
993
1017
  }
994
1018
 
@@ -1000,27 +1024,12 @@ class GLTFWriter {
1000
1024
 
1001
1025
  const data = new Uint8ClampedArray( image.height * image.width * 4 );
1002
1026
 
1003
- if ( format === RGBAFormat ) {
1004
-
1005
- for ( let i = 0; i < data.length; i += 4 ) {
1006
-
1007
- data[ i + 0 ] = image.data[ i + 0 ];
1008
- data[ i + 1 ] = image.data[ i + 1 ];
1009
- data[ i + 2 ] = image.data[ i + 2 ];
1010
- data[ i + 3 ] = image.data[ i + 3 ];
1027
+ for ( let i = 0; i < data.length; i += 4 ) {
1011
1028
 
1012
- }
1013
-
1014
- } else {
1015
-
1016
- for ( let i = 0, j = 0; i < data.length; i += 4, j += 3 ) {
1017
-
1018
- data[ i + 0 ] = image.data[ j + 0 ];
1019
- data[ i + 1 ] = image.data[ j + 1 ];
1020
- data[ i + 2 ] = image.data[ j + 2 ];
1021
- data[ i + 3 ] = 255;
1022
-
1023
- }
1029
+ data[ i + 0 ] = image.data[ i + 0 ];
1030
+ data[ i + 1 ] = image.data[ i + 1 ];
1031
+ data[ i + 2 ] = image.data[ i + 2 ];
1032
+ data[ i + 3 ] = image.data[ i + 3 ];
1024
1033
 
1025
1034
  }
1026
1035
 
@@ -2174,7 +2183,7 @@ class GLTFMaterialsUnlitExtension {
2174
2183
  /**
2175
2184
  * Specular-Glossiness Extension
2176
2185
  *
2177
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness
2186
+ * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness
2178
2187
  */
2179
2188
  class GLTFMaterialsPBRSpecularGlossiness {
2180
2189
 
@@ -2227,6 +2236,67 @@ class GLTFMaterialsPBRSpecularGlossiness {
2227
2236
 
2228
2237
  }
2229
2238
 
2239
+ /**
2240
+ * Clearcoat Materials Extension
2241
+ *
2242
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat
2243
+ */
2244
+ class GLTFMaterialsClearcoatExtension {
2245
+
2246
+ constructor( writer ) {
2247
+
2248
+ this.writer = writer;
2249
+ this.name = 'KHR_materials_clearcoat';
2250
+
2251
+ }
2252
+
2253
+ writeMaterial( material, materialDef ) {
2254
+
2255
+ if ( ! material.isMeshPhysicalMaterial ) return;
2256
+
2257
+ const writer = this.writer;
2258
+ const extensionsUsed = writer.extensionsUsed;
2259
+
2260
+ const extensionDef = {};
2261
+
2262
+ extensionDef.clearcoatFactor = material.clearcoat;
2263
+
2264
+ if ( material.clearcoatMap ) {
2265
+
2266
+ const clearcoatMapDef = { index: writer.processTexture( material.clearcoatMap ) };
2267
+ writer.applyTextureTransform( clearcoatMapDef, material.clearcoatMap );
2268
+ extensionDef.clearcoatTexture = clearcoatMapDef;
2269
+
2270
+ }
2271
+
2272
+ extensionDef.clearcoatRoughnessFactor = material.clearcoatRoughness;
2273
+
2274
+ if ( material.clearcoatRoughnessMap ) {
2275
+
2276
+ const clearcoatRoughnessMapDef = { index: writer.processTexture( material.clearcoatRoughnessMap ) };
2277
+ writer.applyTextureTransform( clearcoatRoughnessMapDef, material.clearcoatRoughnessMap );
2278
+ extensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef;
2279
+
2280
+ }
2281
+
2282
+ if ( material.clearcoatNormalMap ) {
2283
+
2284
+ const clearcoatNormalMapDef = { index: writer.processTexture( material.clearcoatNormalMap ) };
2285
+ writer.applyTextureTransform( clearcoatNormalMapDef, material.clearcoatNormalMap );
2286
+ extensionDef.clearcoatNormalTexture = clearcoatNormalMapDef;
2287
+
2288
+ }
2289
+
2290
+ materialDef.extensions = materialDef.extensions || {};
2291
+ materialDef.extensions[ this.name ] = extensionDef;
2292
+
2293
+ extensionsUsed[ this.name ] = true;
2294
+
2295
+
2296
+ }
2297
+
2298
+ }
2299
+
2230
2300
  /**
2231
2301
  * Transmission Materials Extension
2232
2302
  *
@@ -2285,7 +2355,7 @@ class GLTFMaterialsVolumeExtension {
2285
2355
 
2286
2356
  writeMaterial( material, materialDef ) {
2287
2357
 
2288
- if ( ! material.isMeshPhysicalMaterial || material.thickness === 0 ) return;
2358
+ if ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;
2289
2359
 
2290
2360
  const writer = this.writer;
2291
2361
  const extensionsUsed = writer.extensionsUsed;
@@ -2303,7 +2373,7 @@ class GLTFMaterialsVolumeExtension {
2303
2373
  }
2304
2374
 
2305
2375
  extensionDef.attenuationDistance = material.attenuationDistance;
2306
- extensionDef.attenuationColor = material.attenuationTint.toArray();
2376
+ extensionDef.attenuationColor = material.attenuationColor.toArray();
2307
2377
 
2308
2378
  materialDef.extensions = materialDef.extensions || {};
2309
2379
  materialDef.extensions[ this.name ] = extensionDef;
@@ -186,7 +186,7 @@ function unicodeToShiftjis( str ) {
186
186
 
187
187
  if ( value === undefined ) {
188
188
 
189
- throw 'cannot convert charcode 0x' + code.toString( 16 );
189
+ throw new Error( 'cannot convert charcode 0x' + code.toString( 16 ) );
190
190
 
191
191
  } else if ( value > 0xff ) {
192
192
 
@@ -17,27 +17,35 @@ class USDZExporter {
17
17
 
18
18
  scene.traverseVisible( ( object ) => {
19
19
 
20
- if ( object.isMesh && object.material.isMeshStandardMaterial ) {
20
+ if ( object.isMesh ) {
21
21
 
22
- const geometry = object.geometry;
23
- const material = object.material;
22
+ if ( object.material.isMeshStandardMaterial ) {
24
23
 
25
- const geometryFileName = 'geometries/Geometry_' + geometry.id + '.usd';
24
+ const geometry = object.geometry;
25
+ const material = object.material;
26
26
 
27
- if ( ! ( geometryFileName in files ) ) {
27
+ const geometryFileName = 'geometries/Geometry_' + geometry.id + '.usd';
28
28
 
29
- const meshObject = buildMeshObject( geometry );
30
- files[ geometryFileName ] = buildUSDFileAsString( meshObject );
29
+ if ( ! ( geometryFileName in files ) ) {
31
30
 
32
- }
31
+ const meshObject = buildMeshObject( geometry );
32
+ files[ geometryFileName ] = buildUSDFileAsString( meshObject );
33
33
 
34
- if ( ! ( material.uuid in materials ) ) {
34
+ }
35
35
 
36
- materials[ material.uuid ] = material;
36
+ if ( ! ( material.uuid in materials ) ) {
37
37
 
38
- }
38
+ materials[ material.uuid ] = material;
39
+
40
+ }
41
+
42
+ output += buildXform( object, geometry, material );
43
+
44
+ } else {
39
45
 
40
- output += buildXform( object, geometry, material );
46
+ console.warn( 'THREE.USDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)', object );
47
+
48
+ }
41
49
 
42
50
  }
43
51
 
@@ -247,7 +255,7 @@ function buildMesh( geometry ) {
247
255
 
248
256
  function buildMeshVertexCount( geometry ) {
249
257
 
250
- const count = geometry.index !== null ? geometry.index.array.length : geometry.attributes.position.count;
258
+ const count = geometry.index !== null ? geometry.index.count : geometry.attributes.position.count;
251
259
 
252
260
  return Array( count / 3 ).fill( 3 ).join( ', ' );
253
261
 
@@ -255,18 +263,26 @@ function buildMeshVertexCount( geometry ) {
255
263
 
256
264
  function buildMeshVertexIndices( geometry ) {
257
265
 
258
- if ( geometry.index !== null ) {
266
+ const index = geometry.index;
267
+ const array = [];
259
268
 
260
- return geometry.index.array.join( ', ' );
269
+ if ( index !== null ) {
261
270
 
262
- }
271
+ for ( let i = 0; i < index.count; i ++ ) {
263
272
 
264
- const array = [];
265
- const length = geometry.attributes.position.count;
273
+ array.push( index.getX( i ) );
266
274
 
267
- for ( let i = 0; i < length; i ++ ) {
275
+ }
276
+
277
+ } else {
278
+
279
+ const length = geometry.attributes.position.count;
280
+
281
+ for ( let i = 0; i < length; i ++ ) {
268
282
 
269
- array.push( i );
283
+ array.push( i );
284
+
285
+ }
270
286
 
271
287
  }
272
288
 
@@ -284,11 +300,14 @@ function buildVector3Array( attribute, count ) {
284
300
  }
285
301
 
286
302
  const array = [];
287
- const data = attribute.array;
288
303
 
289
- for ( let i = 0; i < data.length; i += 3 ) {
304
+ for ( let i = 0; i < attribute.count; i ++ ) {
290
305
 
291
- array.push( `(${ data[ i + 0 ].toPrecision( PRECISION ) }, ${ data[ i + 1 ].toPrecision( PRECISION ) }, ${ data[ i + 2 ].toPrecision( PRECISION ) })` );
306
+ const x = attribute.getX( i );
307
+ const y = attribute.getY( i );
308
+ const z = attribute.getZ( i );
309
+
310
+ array.push( `(${ x.toPrecision( PRECISION ) }, ${ y.toPrecision( PRECISION ) }, ${ z.toPrecision( PRECISION ) })` );
292
311
 
293
312
  }
294
313
 
@@ -306,11 +325,13 @@ function buildVector2Array( attribute, count ) {
306
325
  }
307
326
 
308
327
  const array = [];
309
- const data = attribute.array;
310
328
 
311
- for ( let i = 0; i < data.length; i += 2 ) {
329
+ for ( let i = 0; i < attribute.count; i ++ ) {
330
+
331
+ const x = attribute.getX( i );
332
+ const y = attribute.getY( i );
312
333
 
313
- array.push( `(${ data[ i + 0 ].toPrecision( PRECISION ) }, ${ 1 - data[ i + 1 ].toPrecision( PRECISION ) })` );
334
+ array.push( `(${ x.toPrecision( PRECISION ) }, ${ 1 - y.toPrecision( PRECISION ) })` );
314
335
 
315
336
  }
316
337
 
@@ -6,7 +6,7 @@ import { ConvexHull } from '../math/ConvexHull.js';
6
6
 
7
7
  class ConvexGeometry extends BufferGeometry {
8
8
 
9
- constructor( points ) {
9
+ constructor( points = [] ) {
10
10
 
11
11
  super();
12
12
 
@@ -48,7 +48,6 @@ import {
48
48
  *
49
49
  * Code converted from my ancient SPD software, http://tog.acm.org/resources/SPD/
50
50
  * Created for the Udacity course "Interactive Rendering", http://bit.ly/ericity
51
- * Lesson: https://www.udacity.com/course/viewer#!/c-cs291/l-68866048/m-106482448
52
51
  * YouTube video on teapot history: https://www.youtube.com/watch?v=DxMfblPzFNc
53
52
  *
54
53
  * See https://en.wikipedia.org/wiki/Utah_teapot for the history of the teapot
@@ -182,6 +182,7 @@ class SelectionBox {
182
182
 
183
183
  object.getMatrixAt( instanceId, _matrix );
184
184
  _matrix.decompose( _center, _quaternion, _scale );
185
+ _center.applyMatrix4( object.matrixWorld );
185
186
 
186
187
  if ( frustum.containsPoint( _center ) ) {
187
188
 
@@ -18,14 +18,14 @@ class SelectionHelper {
18
18
 
19
19
  this.isDown = false;
20
20
 
21
- this.renderer.domElement.addEventListener( 'pointerdown', function ( event ) {
21
+ this.onPointerDown = function ( event ) {
22
22
 
23
23
  this.isDown = true;
24
24
  this.onSelectStart( event );
25
25
 
26
- }.bind( this ) );
26
+ }.bind( this );
27
27
 
28
- this.renderer.domElement.addEventListener( 'pointermove', function ( event ) {
28
+ this.onPointerMove = function ( event ) {
29
29
 
30
30
  if ( this.isDown ) {
31
31
 
@@ -33,14 +33,26 @@ class SelectionHelper {
33
33
 
34
34
  }
35
35
 
36
- }.bind( this ) );
36
+ }.bind( this );
37
37
 
38
- this.renderer.domElement.addEventListener( 'pointerup', function ( event ) {
38
+ this.onPointerUp = function ( ) {
39
39
 
40
40
  this.isDown = false;
41
- this.onSelectOver( event );
41
+ this.onSelectOver();
42
42
 
43
- }.bind( this ) );
43
+ }.bind( this );
44
+
45
+ this.renderer.domElement.addEventListener( 'pointerdown', this.onPointerDown );
46
+ this.renderer.domElement.addEventListener( 'pointermove', this.onPointerMove );
47
+ this.renderer.domElement.addEventListener( 'pointerup', this.onPointerUp );
48
+
49
+ }
50
+
51
+ dispose() {
52
+
53
+ this.renderer.domElement.removeEventListener( 'pointerdown', this.onPointerDown );
54
+ this.renderer.domElement.removeEventListener( 'pointermove', this.onPointerMove );
55
+ this.renderer.domElement.removeEventListener( 'pointerup', this.onPointerUp );
44
56
 
45
57
  }
46
58