super-three 0.141.0 → 0.147.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 (646) hide show
  1. package/README.md +9 -9
  2. package/build/three.cjs +2441 -1569
  3. package/build/three.js +2441 -1569
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +2847 -1576
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +50 -67
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +71 -150
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +149 -403
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -61
  14. package/examples/js/controls/FlyControls.js +29 -63
  15. package/examples/js/controls/OrbitControls.js +125 -103
  16. package/examples/js/controls/PointerLockControls.js +5 -22
  17. package/examples/js/controls/TrackballControls.js +33 -88
  18. package/examples/js/controls/TransformControls.js +101 -182
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +6 -20
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +30 -54
  30. package/examples/js/effects/ParallaxBarrierEffect.js +2 -15
  31. package/examples/js/effects/PeppersGhostEffect.js +14 -41
  32. package/examples/js/effects/StereoEffect.js +2 -6
  33. package/examples/js/environments/RoomEnvironment.js +32 -8
  34. package/examples/js/exporters/ColladaExporter.js +52 -78
  35. package/examples/js/exporters/DRACOExporter.js +22 -34
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +168 -345
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +40 -52
  40. package/examples/js/exporters/PLYExporter.js +50 -57
  41. package/examples/js/exporters/STLExporter.js +5 -14
  42. package/examples/js/exporters/USDZExporter.js +119 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +12 -7
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +23 -17
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +25 -39
  60. package/examples/js/interactive/InteractiveGroup.js +9 -14
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +2 -8
  63. package/examples/js/libs/ktx-parse.umd.js +1 -0
  64. package/examples/js/libs/meshopt_decoder.js +98 -32
  65. package/examples/js/lights/LightProbeGenerator.js +32 -39
  66. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  67. package/examples/js/lines/LineGeometry.js +3 -5
  68. package/examples/js/lines/LineMaterial.js +4 -11
  69. package/examples/js/lines/LineSegments2.js +40 -89
  70. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  71. package/examples/js/lines/Wireframe.js +2 -7
  72. package/examples/js/lines/WireframeGeometry2.js +3 -1
  73. package/examples/js/loaders/3DMLoader.js +58 -155
  74. package/examples/js/loaders/3MFLoader.js +72 -106
  75. package/examples/js/loaders/AMFLoader.js +0 -25
  76. package/examples/js/loaders/BVHLoader.js +44 -43
  77. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  78. package/examples/js/loaders/ColladaLoader.js +229 -359
  79. package/examples/js/loaders/DDSLoader.js +24 -25
  80. package/examples/js/loaders/DRACOLoader.js +30 -90
  81. package/examples/js/loaders/EXRLoader.js +69 -177
  82. package/examples/js/loaders/FBXLoader.js +294 -441
  83. package/examples/js/loaders/FontLoader.js +9 -31
  84. package/examples/js/loaders/GCodeLoader.js +15 -16
  85. package/examples/js/loaders/GLTFLoader.js +458 -739
  86. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -17
  87. package/examples/js/loaders/KMZLoader.js +3 -7
  88. package/examples/js/loaders/KTXLoader.js +12 -30
  89. package/examples/js/loaders/LDrawLoader.js +309 -355
  90. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  91. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  92. package/examples/js/loaders/LWOLoader.js +59 -124
  93. package/examples/js/loaders/LogLuvLoader.js +27 -77
  94. package/examples/js/loaders/LottieLoader.js +4 -4
  95. package/examples/js/loaders/MD2Loader.js +26 -27
  96. package/examples/js/loaders/MDDLoader.js +6 -10
  97. package/examples/js/loaders/MMDLoader.js +180 -189
  98. package/examples/js/loaders/MTLLoader.js +18 -47
  99. package/examples/js/loaders/NRRDLoader.js +44 -84
  100. package/examples/js/loaders/OBJLoader.js +56 -77
  101. package/examples/js/loaders/PCDLoader.js +92 -42
  102. package/examples/js/loaders/PDBLoader.js +17 -13
  103. package/examples/js/loaders/PLYLoader.js +65 -51
  104. package/examples/js/loaders/PRWMLoader.js +11 -22
  105. package/examples/js/loaders/PVRLoader.js +7 -16
  106. package/examples/js/loaders/RGBELoader.js +36 -61
  107. package/examples/js/loaders/RGBMLoader.js +26 -87
  108. package/examples/js/loaders/STLLoader.js +20 -27
  109. package/examples/js/loaders/SVGLoader.js +365 -236
  110. package/examples/js/loaders/TDSLoader.js +81 -118
  111. package/examples/js/loaders/TGALoader.js +39 -41
  112. package/examples/js/loaders/TIFFLoader.js +30 -0
  113. package/examples/js/loaders/TTFLoader.js +0 -8
  114. package/examples/js/loaders/TiltLoader.js +14 -15
  115. package/examples/js/loaders/VOXLoader.js +8 -16
  116. package/examples/js/loaders/VRMLLoader.js +266 -354
  117. package/examples/js/loaders/VTKLoader.js +102 -119
  118. package/examples/js/loaders/XYZLoader.js +2 -4
  119. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  120. package/examples/js/loaders/lwo/LWO2Parser.js +39 -89
  121. package/examples/js/loaders/lwo/LWO3Parser.js +38 -79
  122. package/examples/js/materials/MeshGouraudMaterial.js +387 -0
  123. package/examples/js/math/Capsule.js +0 -17
  124. package/examples/js/math/ColorConverter.js +3 -53
  125. package/examples/js/math/ConvexHull.js +185 -141
  126. package/examples/js/math/ImprovedNoise.js +1 -1
  127. package/examples/js/math/Lut.js +8 -15
  128. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  129. package/examples/js/math/OBB.js +90 -49
  130. package/examples/js/math/Octree.js +2 -57
  131. package/examples/js/math/SimplexNoise.js +74 -88
  132. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  133. package/examples/js/misc/GPUComputationRenderer.js +47 -14
  134. package/examples/js/misc/Gyroscope.js +5 -9
  135. package/examples/js/misc/MD2Character.js +14 -23
  136. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  137. package/examples/js/misc/MorphAnimMesh.js +0 -6
  138. package/examples/js/misc/MorphBlendMesh.js +3 -30
  139. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  140. package/examples/js/misc/RollerCoaster.js +17 -24
  141. package/examples/js/misc/TubePainter.js +18 -12
  142. package/examples/js/misc/Volume.js +173 -194
  143. package/examples/js/misc/VolumeSlice.js +91 -99
  144. package/examples/js/modifiers/CurveModifier.js +19 -21
  145. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  146. package/examples/js/modifiers/SimplifyModifier.js +57 -60
  147. package/examples/js/modifiers/TessellateModifier.js +2 -9
  148. package/examples/js/objects/GroundProjectedEnv.js +181 -0
  149. package/examples/js/objects/Lensflare.js +47 -38
  150. package/examples/js/objects/LightningStorm.js +10 -13
  151. package/examples/js/objects/MarchingCubes.js +80 -59
  152. package/examples/js/objects/Reflector.js +31 -22
  153. package/examples/js/objects/ReflectorForSSRPass.js +20 -25
  154. package/examples/js/objects/Refractor.js +61 -33
  155. package/examples/js/objects/ShadowMesh.js +6 -3
  156. package/examples/js/objects/Sky.js +2 -7
  157. package/examples/js/objects/Water.js +23 -18
  158. package/examples/js/objects/Water2.js +20 -19
  159. package/examples/js/physics/AmmoPhysics.js +23 -20
  160. package/examples/js/physics/OimoPhysics.js +19 -17
  161. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  162. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  163. package/examples/js/postprocessing/BloomPass.js +38 -17
  164. package/examples/js/postprocessing/BokehPass.js +29 -12
  165. package/examples/js/postprocessing/ClearPass.js +1 -6
  166. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  167. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  168. package/examples/js/postprocessing/EffectComposer.js +25 -32
  169. package/examples/js/postprocessing/FilmPass.js +7 -5
  170. package/examples/js/postprocessing/GlitchPass.js +10 -11
  171. package/examples/js/postprocessing/HalftonePass.js +9 -9
  172. package/examples/js/postprocessing/LUTPass.js +2 -15
  173. package/examples/js/postprocessing/MaskPass.js +20 -17
  174. package/examples/js/postprocessing/OutlinePass.js +49 -38
  175. package/examples/js/postprocessing/Pass.js +11 -14
  176. package/examples/js/postprocessing/RenderPass.js +3 -7
  177. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  178. package/examples/js/postprocessing/SAOPass.js +40 -32
  179. package/examples/js/postprocessing/SMAAPass.js +34 -17
  180. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  181. package/examples/js/postprocessing/SSAOPass.js +56 -42
  182. package/examples/js/postprocessing/SSRPass.js +78 -61
  183. package/examples/js/postprocessing/SavePass.js +14 -6
  184. package/examples/js/postprocessing/ShaderPass.js +9 -8
  185. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  186. package/examples/js/postprocessing/TexturePass.js +7 -4
  187. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  188. package/examples/js/renderers/CSS2DRenderer.js +4 -23
  189. package/examples/js/renderers/CSS3DRenderer.js +5 -26
  190. package/examples/js/renderers/Projector.js +31 -108
  191. package/examples/js/renderers/SVGRenderer.js +4 -50
  192. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  193. package/examples/js/shaders/AfterimageShader.js +3 -6
  194. package/examples/js/shaders/BasicShader.js +3 -6
  195. package/examples/js/shaders/BleachBypassShader.js +3 -6
  196. package/examples/js/shaders/BlendShader.js +3 -6
  197. package/examples/js/shaders/BokehShader.js +3 -6
  198. package/examples/js/shaders/BokehShader2.js +4 -13
  199. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  200. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  201. package/examples/js/shaders/ColorifyShader.js +2 -6
  202. package/examples/js/shaders/ConvolutionShader.js +5 -10
  203. package/examples/js/shaders/CopyShader.js +3 -6
  204. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  205. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  206. package/examples/js/shaders/DigitalGlitch.js +3 -6
  207. package/examples/js/shaders/DotScreenShader.js +2 -6
  208. package/examples/js/shaders/FXAAShader.js +1 -3
  209. package/examples/js/shaders/FilmShader.js +3 -6
  210. package/examples/js/shaders/FocusShader.js +3 -6
  211. package/examples/js/shaders/FreiChenShader.js +2 -6
  212. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  213. package/examples/js/shaders/GodRaysShader.js +11 -24
  214. package/examples/js/shaders/HalftoneShader.js +3 -6
  215. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  216. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  217. package/examples/js/shaders/HueSaturationShader.js +3 -6
  218. package/examples/js/shaders/KaleidoShader.js +3 -6
  219. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  220. package/examples/js/shaders/LuminosityShader.js +4 -7
  221. package/examples/js/shaders/MMDToonShader.js +2 -4
  222. package/examples/js/shaders/MirrorShader.js +3 -6
  223. package/examples/js/shaders/NormalMapShader.js +2 -6
  224. package/examples/js/shaders/RGBShiftShader.js +3 -6
  225. package/examples/js/shaders/SAOShader.js +2 -6
  226. package/examples/js/shaders/SMAAShader.js +6 -18
  227. package/examples/js/shaders/SSAOShader.js +2 -6
  228. package/examples/js/shaders/SSRShader.js +6 -18
  229. package/examples/js/shaders/SepiaShader.js +3 -6
  230. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  231. package/examples/js/shaders/TechnicolorShader.js +3 -6
  232. package/examples/js/shaders/ToneMapShader.js +4 -7
  233. package/examples/js/shaders/ToonShader.js +8 -24
  234. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  235. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  236. package/examples/js/shaders/VelocityShader.js +126 -0
  237. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  238. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  239. package/examples/js/shaders/VignetteShader.js +3 -6
  240. package/examples/js/shaders/VolumeShader.js +2 -6
  241. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  242. package/examples/js/textures/FlakesTexture.js +0 -1
  243. package/examples/js/utils/BufferGeometryUtils.js +237 -171
  244. package/examples/js/utils/CameraUtils.js +5 -20
  245. package/examples/js/utils/GPUStatsPanel.js +3 -12
  246. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  247. package/examples/js/utils/GeometryUtils.js +15 -36
  248. package/examples/js/utils/LDrawUtils.js +8 -11
  249. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  250. package/examples/js/utils/SceneUtils.js +109 -14
  251. package/examples/js/utils/ShadowMapViewer.js +17 -14
  252. package/examples/js/utils/SkeletonUtils.js +13 -27
  253. package/examples/js/utils/UVsDebug.js +20 -12
  254. package/examples/js/utils/WorkerPool.js +1 -11
  255. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  256. package/examples/jsm/animation/MMDPhysics.js +28 -22
  257. package/examples/jsm/capabilities/WebGPU.js +3 -1
  258. package/examples/jsm/controls/ArcballControls.js +17 -2
  259. package/examples/jsm/controls/FirstPersonControls.js +20 -27
  260. package/examples/jsm/controls/FlyControls.js +16 -24
  261. package/examples/jsm/controls/OrbitControls.js +44 -9
  262. package/examples/jsm/controls/PointerLockControls.js +0 -7
  263. package/examples/jsm/controls/TrackballControls.js +14 -5
  264. package/examples/jsm/controls/TransformControls.js +18 -16
  265. package/examples/jsm/csm/CSM.js +1 -0
  266. package/examples/jsm/csm/CSMHelper.js +30 -0
  267. package/examples/jsm/effects/AnaglyphEffect.js +2 -2
  268. package/examples/jsm/effects/OutlineEffect.js +4 -25
  269. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  270. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  271. package/examples/jsm/effects/StereoEffect.js +2 -2
  272. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  273. package/examples/jsm/exporters/ColladaExporter.js +4 -13
  274. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  275. package/examples/jsm/exporters/GLTFExporter.js +29 -110
  276. package/examples/jsm/exporters/KTX2Exporter.js +29 -29
  277. package/examples/jsm/exporters/OBJExporter.js +0 -18
  278. package/examples/jsm/exporters/PLYExporter.js +14 -22
  279. package/examples/jsm/exporters/STLExporter.js +1 -9
  280. package/examples/jsm/exporters/USDZExporter.js +107 -4
  281. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  282. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  283. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  284. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  285. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  286. package/examples/jsm/helpers/ViewHelper.js +24 -0
  287. package/examples/jsm/interactive/HTMLMesh.js +14 -15
  288. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  289. package/examples/jsm/interactive/SelectionHelper.js +5 -3
  290. package/examples/jsm/libs/flow.module.js +610 -160
  291. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  292. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  293. package/examples/jsm/libs/utif.module.js +1579 -0
  294. package/examples/jsm/libs/zstddec.module.js +1 -0
  295. package/examples/jsm/lines/LineSegments2.js +4 -0
  296. package/examples/jsm/loaders/3DMLoader.js +1 -2
  297. package/examples/jsm/loaders/ColladaLoader.js +29 -0
  298. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  299. package/examples/jsm/loaders/EXRLoader.js +3 -13
  300. package/examples/jsm/loaders/FBXLoader.js +26 -3
  301. package/examples/jsm/loaders/FontLoader.js +3 -16
  302. package/examples/jsm/loaders/GLTFLoader.js +321 -464
  303. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  304. package/examples/jsm/loaders/KTX2Loader.js +254 -53
  305. package/examples/jsm/loaders/LDrawLoader.js +149 -87
  306. package/examples/jsm/loaders/LottieLoader.js +4 -2
  307. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  308. package/examples/jsm/loaders/OBJLoader.js +6 -14
  309. package/examples/jsm/loaders/PCDLoader.js +60 -14
  310. package/examples/jsm/loaders/PLYLoader.js +71 -19
  311. package/examples/jsm/loaders/RGBELoader.js +1 -1
  312. package/examples/jsm/loaders/SVGLoader.js +231 -17
  313. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  314. package/examples/jsm/loaders/USDZLoader.js +633 -0
  315. package/examples/jsm/loaders/VRMLLoader.js +36 -26
  316. package/examples/jsm/loaders/VTKLoader.js +1 -1
  317. package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
  318. package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
  319. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  320. package/examples/jsm/math/ColorConverter.js +1 -49
  321. package/examples/jsm/math/ConvexHull.js +4 -4
  322. package/examples/jsm/math/Octree.js +1 -1
  323. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  324. package/examples/jsm/misc/Volume.js +169 -171
  325. package/examples/jsm/misc/VolumeSlice.js +78 -80
  326. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  327. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  328. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
  329. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  330. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  331. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  332. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  333. package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
  334. package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
  335. package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
  336. package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
  337. package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
  338. package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
  339. package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
  340. package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
  341. package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
  342. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +7 -10
  343. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
  344. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +7 -10
  345. package/examples/jsm/node-editor/math/AngleEditor.js +4 -4
  346. package/examples/jsm/node-editor/math/DotEditor.js +1 -1
  347. package/examples/jsm/node-editor/math/InvertEditor.js +3 -3
  348. package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
  349. package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
  350. package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
  351. package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
  352. package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
  353. package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
  354. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  355. package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
  356. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  357. package/examples/jsm/node-editor/utils/PreviewEditor.js +7 -3
  358. package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
  359. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  360. package/examples/jsm/nodes/Nodes.js +70 -13
  361. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  362. package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
  363. package/examples/jsm/nodes/accessors/NormalNode.js +8 -8
  364. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  365. package/examples/jsm/nodes/accessors/PositionNode.js +11 -5
  366. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  367. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  368. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  369. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  370. package/examples/jsm/nodes/core/AttributeNode.js +32 -9
  371. package/examples/jsm/nodes/core/CodeNode.js +3 -3
  372. package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
  373. package/examples/jsm/nodes/core/FunctionNode.js +2 -2
  374. package/examples/jsm/nodes/core/Node.js +15 -13
  375. package/examples/jsm/nodes/core/NodeBuilder.js +67 -18
  376. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  377. package/examples/jsm/nodes/core/NodeUtils.js +23 -1
  378. package/examples/jsm/nodes/core/NodeVarying.js +17 -0
  379. package/examples/jsm/nodes/core/VaryingNode.js +56 -0
  380. package/examples/jsm/nodes/core/constants.js +13 -13
  381. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  382. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +84 -0
  383. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  384. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  385. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  386. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  387. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  388. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  389. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  390. package/examples/jsm/nodes/gpgpu/ComputeNode.js +3 -1
  391. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  392. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
  393. package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
  394. package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
  395. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +33 -0
  396. package/examples/jsm/nodes/materials/Materials.js +21 -31
  397. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  398. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
  399. package/examples/jsm/nodes/materials/NodeMaterial.js +11 -3
  400. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
  401. package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -0
  402. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  403. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +56 -0
  404. package/examples/jsm/nodes/materialx/lib/mx_noise.js +617 -0
  405. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  406. package/examples/jsm/nodes/math/MathNode.js +7 -17
  407. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  408. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
  409. package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
  410. package/examples/jsm/nodes/shadernode/ShaderNode.js +40 -25
  411. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +95 -68
  412. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +49 -6
  413. package/examples/jsm/nodes/utils/ConvertNode.js +18 -12
  414. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  415. package/examples/jsm/nodes/utils/JoinNode.js +15 -9
  416. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  417. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +3 -2
  418. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  419. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  420. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  421. package/examples/jsm/nodes/utils/SplitNode.js +21 -5
  422. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  423. package/examples/jsm/nodes/utils/TimerNode.js +23 -3
  424. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  425. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  426. package/examples/jsm/objects/Reflector.js +12 -5
  427. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
  428. package/examples/jsm/objects/Refractor.js +12 -6
  429. package/examples/jsm/objects/ShadowMesh.js +8 -2
  430. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  431. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  432. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  433. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  434. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  435. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  436. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  437. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  438. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  439. package/examples/jsm/postprocessing/OutlinePass.js +25 -3
  440. package/examples/jsm/postprocessing/Pass.js +2 -0
  441. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  442. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  443. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  444. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  445. package/examples/jsm/postprocessing/SavePass.js +17 -1
  446. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  447. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  448. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  449. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  450. package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
  451. package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
  452. package/examples/jsm/renderers/Projector.js +2 -24
  453. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  454. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +363 -231
  455. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
  456. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  457. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  458. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +68 -3
  459. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
  460. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  461. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  462. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
  463. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
  464. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
  465. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +113 -93
  466. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
  467. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
  468. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  469. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +63 -36
  470. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  471. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  472. package/examples/jsm/shaders/MMDToonShader.js +2 -4
  473. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  474. package/examples/jsm/shaders/VelocityShader.js +128 -0
  475. package/examples/jsm/utils/BufferGeometryUtils.js +176 -43
  476. package/examples/jsm/utils/GeometryUtils.js +17 -25
  477. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  478. package/examples/jsm/utils/SceneUtils.js +117 -12
  479. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  480. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
  481. package/examples/jsm/webxr/VRButton.js +1 -7
  482. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  483. package/package.json +22 -18
  484. package/src/Three.Legacy.js +262 -36
  485. package/src/Three.js +4 -2
  486. package/src/animation/AnimationAction.js +6 -5
  487. package/src/animation/AnimationClip.js +1 -1
  488. package/src/animation/AnimationMixer.js +1 -1
  489. package/src/animation/AnimationUtils.js +204 -199
  490. package/src/animation/KeyframeTrack.js +1 -1
  491. package/src/animation/PropertyBinding.js +31 -5
  492. package/src/audio/AudioContext.js +5 -5
  493. package/src/cameras/CubeCamera.js +14 -21
  494. package/src/constants.js +2 -4
  495. package/src/core/BufferAttribute.js +81 -111
  496. package/src/core/BufferGeometry.js +3 -41
  497. package/src/core/InstancedBufferAttribute.js +0 -10
  498. package/src/core/InstancedBufferGeometry.js +1 -7
  499. package/src/core/InterleavedBuffer.js +1 -1
  500. package/src/core/InterleavedBufferAttribute.js +57 -8
  501. package/src/core/Object3D.js +22 -5
  502. package/src/core/Uniform.js +0 -7
  503. package/src/core/UniformsGroup.js +92 -0
  504. package/src/extras/DataUtils.js +104 -88
  505. package/src/extras/Earcut.js +67 -67
  506. package/src/extras/core/Path.js +1 -0
  507. package/src/extras/core/ShapePath.js +1 -4
  508. package/src/extras/curves/CatmullRomCurve3.js +4 -2
  509. package/src/geometries/BoxGeometry.js +1 -1
  510. package/src/geometries/CapsuleGeometry.js +1 -1
  511. package/src/geometries/CircleGeometry.js +1 -1
  512. package/src/geometries/ConeGeometry.js +1 -1
  513. package/src/geometries/CylinderGeometry.js +2 -1
  514. package/src/geometries/DodecahedronGeometry.js +1 -1
  515. package/src/geometries/EdgesGeometry.js +5 -4
  516. package/src/geometries/ExtrudeGeometry.js +2 -11
  517. package/src/geometries/IcosahedronGeometry.js +1 -1
  518. package/src/geometries/LatheGeometry.js +2 -2
  519. package/src/geometries/OctahedronGeometry.js +1 -1
  520. package/src/geometries/PlaneGeometry.js +2 -1
  521. package/src/geometries/PolyhedronGeometry.js +2 -2
  522. package/src/geometries/RingGeometry.js +1 -1
  523. package/src/geometries/ShapeGeometry.js +3 -2
  524. package/src/geometries/SphereGeometry.js +2 -1
  525. package/src/geometries/TetrahedronGeometry.js +1 -1
  526. package/src/geometries/TorusGeometry.js +2 -1
  527. package/src/geometries/TorusKnotGeometry.js +2 -1
  528. package/src/geometries/TubeGeometry.js +2 -1
  529. package/src/geometries/WireframeGeometry.js +1 -0
  530. package/src/helpers/ArrowHelper.js +9 -0
  531. package/src/helpers/Box3Helper.js +7 -0
  532. package/src/helpers/BoxHelper.js +7 -1
  533. package/src/helpers/CameraHelper.js +97 -38
  534. package/src/helpers/DirectionalLightHelper.js +6 -1
  535. package/src/helpers/GridHelper.js +7 -0
  536. package/src/helpers/HemisphereLightHelper.js +5 -1
  537. package/src/helpers/PlaneHelper.js +15 -9
  538. package/src/helpers/PointLightHelper.js +2 -1
  539. package/src/helpers/PolarGridHelper.js +25 -14
  540. package/src/helpers/SkeletonHelper.js +7 -0
  541. package/src/helpers/SpotLightHelper.js +5 -2
  542. package/src/lights/LightShadow.js +1 -2
  543. package/src/lights/PointLight.js +2 -2
  544. package/src/lights/SpotLight.js +4 -2
  545. package/src/loaders/FileLoader.js +16 -2
  546. package/src/loaders/LoadingManager.js +1 -1
  547. package/src/loaders/MaterialLoader.js +49 -7
  548. package/src/loaders/ObjectLoader.js +9 -42
  549. package/src/materials/Material.js +2 -34
  550. package/src/materials/Materials.js +0 -27
  551. package/src/materials/MeshLambertMaterial.js +28 -1
  552. package/src/materials/MeshPhysicalMaterial.js +1 -1
  553. package/src/materials/ShaderMaterial.js +3 -7
  554. package/src/math/Color.js +8 -18
  555. package/src/math/MathUtils.js +1 -7
  556. package/src/math/Matrix3.js +54 -25
  557. package/src/math/Matrix4.js +3 -27
  558. package/src/math/Quaternion.js +1 -21
  559. package/src/math/Ray.js +2 -5
  560. package/src/math/Sphere.js +36 -21
  561. package/src/math/Vector2.js +4 -24
  562. package/src/math/Vector3.js +7 -46
  563. package/src/math/Vector4.js +4 -24
  564. package/src/objects/InstancedMesh.js +7 -0
  565. package/src/objects/LOD.js +25 -6
  566. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  567. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  568. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  569. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  570. package/src/renderers/WebGLRenderTarget.js +1 -1
  571. package/src/renderers/WebGLRenderer.js +119 -69
  572. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
  573. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  574. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
  575. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
  576. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  577. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  578. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  579. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  580. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
  581. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -13
  582. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  583. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
  584. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  585. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
  586. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
  587. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  588. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  589. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  590. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  591. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  592. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  593. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  594. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  595. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  597. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  598. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  599. package/src/renderers/shaders/ShaderChunk.js +7 -2
  600. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  601. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  602. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  603. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
  604. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
  605. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  606. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  607. package/src/renderers/shaders/ShaderLib.js +50 -36
  608. package/src/renderers/shaders/UniformsLib.js +13 -12
  609. package/src/renderers/shaders/UniformsUtils.js +29 -0
  610. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  611. package/src/renderers/webgl/WebGLBackground.js +17 -9
  612. package/src/renderers/webgl/WebGLLights.js +37 -17
  613. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  614. package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
  615. package/src/renderers/webgl/WebGLProgram.js +6 -11
  616. package/src/renderers/webgl/WebGLPrograms.js +30 -26
  617. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  618. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  619. package/src/renderers/webgl/WebGLShaderCache.js +9 -6
  620. package/src/renderers/webgl/WebGLShadowMap.js +13 -16
  621. package/src/renderers/webgl/WebGLState.js +125 -41
  622. package/src/renderers/webgl/WebGLTextures.js +94 -39
  623. package/src/renderers/webgl/WebGLUniforms.js +156 -28
  624. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  625. package/src/renderers/webgl/WebGLUtils.js +3 -1
  626. package/src/renderers/webvr/WebVRManager.js +42 -9
  627. package/src/renderers/webvr/WebVRUtils.js +1 -1
  628. package/src/renderers/webxr/WebXRController.js +91 -50
  629. package/src/renderers/webxr/WebXRManager.js +127 -34
  630. package/src/scenes/Scene.js +24 -3
  631. package/src/textures/CompressedArrayTexture.js +18 -0
  632. package/src/textures/Source.js +1 -1
  633. package/src/textures/Texture.js +2 -1
  634. package/src/utils.js +1 -1
  635. package/examples/js/controls/experimental/CameraControls.js +0 -1048
  636. package/examples/js/libs/lottie_canvas.js +0 -12751
  637. package/examples/js/loaders/KTX2Loader.js +0 -558
  638. package/examples/js/shaders/PixelShader.js +0 -51
  639. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  640. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
  641. package/examples/jsm/nodes/core/NodeVary.js +0 -14
  642. package/examples/jsm/nodes/core/VaryNode.js +0 -54
  643. package/examples/jsm/package.json +0 -3
  644. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  645. package/examples/jsm/shaders/PixelShader.js +0 -44
  646. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -2,9 +2,9 @@ import {
2
2
  BufferAttribute,
3
3
  BufferGeometry,
4
4
  Float32BufferAttribute,
5
+ InstancedBufferAttribute,
5
6
  InterleavedBuffer,
6
7
  InterleavedBufferAttribute,
7
- MathUtils,
8
8
  TriangleFanDrawMode,
9
9
  TriangleStripDrawMode,
10
10
  TrianglesDrawMode,
@@ -35,17 +35,16 @@ function computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {
35
35
 
36
36
  if ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {
37
37
 
38
- const srcArray = attribute.isInterleavedBufferAttribute ? attribute.data.array : attribute.array;
39
38
  const dstArray = new Float32Array( attribute.getCount() * attribute.itemSize );
40
39
 
41
40
  for ( let i = 0, j = 0; i < attribute.getCount(); i ++ ) {
42
41
 
43
- dstArray[ j ++ ] = MathUtils.denormalize( attribute.getX( i ), srcArray );
44
- dstArray[ j ++ ] = MathUtils.denormalize( attribute.getY( i ), srcArray );
42
+ dstArray[ j ++ ] = attribute.getX( i );
43
+ dstArray[ j ++ ] = attribute.getY( i );
45
44
 
46
45
  if ( attribute.itemSize > 2 ) {
47
46
 
48
- dstArray[ j ++ ] = MathUtils.denormalize( attribute.getZ( i ), srcArray );
47
+ dstArray[ j ++ ] = attribute.getZ( i );
49
48
 
50
49
  }
51
50
 
@@ -98,7 +97,7 @@ function computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {
98
97
 
99
98
  if ( geometry !== _geometry ) {
100
99
 
101
- geometry.copy( _geometry )
100
+ geometry.copy( _geometry );
102
101
 
103
102
  }
104
103
 
@@ -193,11 +192,6 @@ function mergeBufferGeometries( geometries, useGroups = false ) {
193
192
 
194
193
  }
195
194
 
196
- // gather .userData
197
-
198
- mergedGeometry.userData.mergedUserData = mergedGeometry.userData.mergedUserData || [];
199
- mergedGeometry.userData.mergedUserData.push( geometry.userData );
200
-
201
195
  if ( useGroups ) {
202
196
 
203
197
  let count;
@@ -372,6 +366,28 @@ function mergeBufferAttributes( attributes ) {
372
366
 
373
367
  }
374
368
 
369
+ /**
370
+ * @param {BufferAttribute}
371
+ * @return {BufferAttribute}
372
+ */
373
+ export function deepCloneAttribute( attribute ) {
374
+
375
+ if ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {
376
+
377
+ return deinterleaveAttribute( attribute );
378
+
379
+ }
380
+
381
+ if ( attribute.isInstancedBufferAttribute ) {
382
+
383
+ return new InstancedBufferAttribute().copy( attribute );
384
+
385
+ }
386
+
387
+ return new BufferAttribute().copy( attribute );
388
+
389
+ }
390
+
375
391
  /**
376
392
  * @param {Array<BufferAttribute>} attributes
377
393
  * @return {Array<InterleavedBufferAttribute>}
@@ -384,7 +400,7 @@ function interleaveAttributes( attributes ) {
384
400
  let arrayLength = 0;
385
401
  let stride = 0;
386
402
 
387
- // calculate the the length and type of the interleavedBuffer
403
+ // calculate the length and type of the interleavedBuffer
388
404
  for ( let i = 0, l = attributes.length; i < l; ++ i ) {
389
405
 
390
406
  const attribute = attributes[ i ];
@@ -554,7 +570,7 @@ function estimateBytesUsed( geometry ) {
554
570
  /**
555
571
  * @param {BufferGeometry} geometry
556
572
  * @param {number} tolerance
557
- * @return {BufferGeometry>}
573
+ * @return {BufferGeometry}
558
574
  */
559
575
  function mergeVertices( geometry, tolerance = 1e-4 ) {
560
576
 
@@ -572,22 +588,33 @@ function mergeVertices( geometry, tolerance = 1e-4 ) {
572
588
 
573
589
  // attributes and new attribute arrays
574
590
  const attributeNames = Object.keys( geometry.attributes );
575
- const attrArrays = {};
576
- const morphAttrsArrays = {};
591
+ const tmpAttributes = {};
592
+ const tmpMorphAttributes = {};
577
593
  const newIndices = [];
578
594
  const getters = [ 'getX', 'getY', 'getZ', 'getW' ];
595
+ const setters = [ 'setX', 'setY', 'setZ', 'setW' ];
579
596
 
580
- // initialize the arrays
597
+ // Initialize the arrays, allocating space conservatively. Extra
598
+ // space will be trimmed in the last step.
581
599
  for ( let i = 0, l = attributeNames.length; i < l; i ++ ) {
582
600
 
583
601
  const name = attributeNames[ i ];
602
+ const attr = geometry.attributes[ name ];
584
603
 
585
- attrArrays[ name ] = [];
604
+ tmpAttributes[ name ] = new BufferAttribute(
605
+ new attr.array.constructor( attr.count * attr.itemSize ),
606
+ attr.itemSize,
607
+ attr.normalized
608
+ );
586
609
 
587
610
  const morphAttr = geometry.morphAttributes[ name ];
588
611
  if ( morphAttr ) {
589
612
 
590
- morphAttrsArrays[ name ] = new Array( morphAttr.length ).fill().map( () => [] );
613
+ tmpMorphAttributes[ name ] = new BufferAttribute(
614
+ new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize ),
615
+ morphAttr.itemSize,
616
+ morphAttr.normalized
617
+ );
591
618
 
592
619
  }
593
620
 
@@ -625,26 +652,27 @@ function mergeVertices( geometry, tolerance = 1e-4 ) {
625
652
 
626
653
  } else {
627
654
 
628
- // copy data to the new index in the attribute arrays
655
+ // copy data to the new index in the temporary attributes
629
656
  for ( let j = 0, l = attributeNames.length; j < l; j ++ ) {
630
657
 
631
658
  const name = attributeNames[ j ];
632
659
  const attribute = geometry.getAttribute( name );
633
660
  const morphAttr = geometry.morphAttributes[ name ];
634
661
  const itemSize = attribute.itemSize;
635
- const newarray = attrArrays[ name ];
636
- const newMorphArrays = morphAttrsArrays[ name ];
662
+ const newarray = tmpAttributes[ name ];
663
+ const newMorphArrays = tmpMorphAttributes[ name ];
637
664
 
638
665
  for ( let k = 0; k < itemSize; k ++ ) {
639
666
 
640
667
  const getterFunc = getters[ k ];
641
- newarray.push( attribute[ getterFunc ]( index ) );
668
+ const setterFunc = setters[ k ];
669
+ newarray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );
642
670
 
643
671
  if ( morphAttr ) {
644
672
 
645
673
  for ( let m = 0, ml = morphAttr.length; m < ml; m ++ ) {
646
674
 
647
- newMorphArrays[ m ].push( morphAttr[ m ][ getterFunc ]( index ) );
675
+ newMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttr[ m ][ getterFunc ]( index ) );
648
676
 
649
677
  }
650
678
 
@@ -662,31 +690,29 @@ function mergeVertices( geometry, tolerance = 1e-4 ) {
662
690
 
663
691
  }
664
692
 
665
- // Generate typed arrays from new attribute arrays and update
666
- // the attributeBuffers
693
+ // generate result BufferGeometry
667
694
  const result = geometry.clone();
668
- for ( let i = 0, l = attributeNames.length; i < l; i ++ ) {
669
-
670
- const name = attributeNames[ i ];
671
- const oldAttribute = geometry.getAttribute( name );
672
-
673
- const buffer = new oldAttribute.array.constructor( attrArrays[ name ] );
674
- const attribute = new BufferAttribute( buffer, oldAttribute.itemSize, oldAttribute.normalized );
695
+ for ( const name in geometry.attributes ) {
675
696
 
676
- result.setAttribute( name, attribute );
697
+ const tmpAttribute = tmpAttributes[ name ];
677
698
 
678
- // Update the attribute arrays
679
- if ( name in morphAttrsArrays ) {
699
+ result.setAttribute( name, new BufferAttribute(
700
+ tmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),
701
+ tmpAttribute.itemSize,
702
+ tmpAttribute.normalized,
703
+ ) );
680
704
 
681
- for ( let j = 0; j < morphAttrsArrays[ name ].length; j ++ ) {
705
+ if ( ! ( name in tmpMorphAttributes ) ) continue;
682
706
 
683
- const oldMorphAttribute = geometry.morphAttributes[ name ][ j ];
707
+ for ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {
684
708
 
685
- const buffer = new oldMorphAttribute.array.constructor( morphAttrsArrays[ name ][ j ] );
686
- const morphAttribute = new BufferAttribute( buffer, oldMorphAttribute.itemSize, oldMorphAttribute.normalized );
687
- result.morphAttributes[ name ][ j ] = morphAttribute;
709
+ const tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];
688
710
 
689
- }
711
+ result.morphAttributes[ name ][ j ] = new BufferAttribute(
712
+ tmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),
713
+ tmpMorphAttribute.itemSize,
714
+ tmpMorphAttribute.normalized,
715
+ );
690
716
 
691
717
  }
692
718
 
@@ -703,7 +729,7 @@ function mergeVertices( geometry, tolerance = 1e-4 ) {
703
729
  /**
704
730
  * @param {BufferGeometry} geometry
705
731
  * @param {number} drawMode
706
- * @return {BufferGeometry>}
732
+ * @return {BufferGeometry}
707
733
  */
708
734
  function toTrianglesDrawMode( geometry, drawMode ) {
709
735
 
@@ -1199,6 +1225,112 @@ function mergeGroups( geometry ) {
1199
1225
 
1200
1226
  }
1201
1227
 
1228
+
1229
+ // Creates a new, non-indexed geometry with smooth normals everywhere except faces that meet at
1230
+ // an angle greater than the crease angle.
1231
+ function toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {
1232
+
1233
+ const creaseDot = Math.cos( creaseAngle );
1234
+ const hashMultiplier = ( 1 + 1e-10 ) * 1e2;
1235
+
1236
+ // reusable vertors
1237
+ const verts = [ new Vector3(), new Vector3(), new Vector3() ];
1238
+ const tempVec1 = new Vector3();
1239
+ const tempVec2 = new Vector3();
1240
+ const tempNorm = new Vector3();
1241
+ const tempNorm2 = new Vector3();
1242
+
1243
+ // hashes a vector
1244
+ function hashVertex( v ) {
1245
+
1246
+ const x = ~ ~ ( v.x * hashMultiplier );
1247
+ const y = ~ ~ ( v.y * hashMultiplier );
1248
+ const z = ~ ~ ( v.z * hashMultiplier );
1249
+ return `${x},${y},${z}`;
1250
+
1251
+ }
1252
+
1253
+ const resultGeometry = geometry.toNonIndexed();
1254
+ const posAttr = resultGeometry.attributes.position;
1255
+ const vertexMap = {};
1256
+
1257
+ // find all the normals shared by commonly located vertices
1258
+ for ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {
1259
+
1260
+ const i3 = 3 * i;
1261
+ const a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );
1262
+ const b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );
1263
+ const c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );
1264
+
1265
+ tempVec1.subVectors( c, b );
1266
+ tempVec2.subVectors( a, b );
1267
+
1268
+ // add the normal to the map for all vertices
1269
+ const normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();
1270
+ for ( let n = 0; n < 3; n ++ ) {
1271
+
1272
+ const vert = verts[ n ];
1273
+ const hash = hashVertex( vert );
1274
+ if ( ! ( hash in vertexMap ) ) {
1275
+
1276
+ vertexMap[ hash ] = [];
1277
+
1278
+ }
1279
+
1280
+ vertexMap[ hash ].push( normal );
1281
+
1282
+ }
1283
+
1284
+ }
1285
+
1286
+ // average normals from all vertices that share a common location if they are within the
1287
+ // provided crease threshold
1288
+ const normalArray = new Float32Array( posAttr.count * 3 );
1289
+ const normAttr = new BufferAttribute( normalArray, 3, false );
1290
+ for ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {
1291
+
1292
+ // get the face normal for this vertex
1293
+ const i3 = 3 * i;
1294
+ const a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );
1295
+ const b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );
1296
+ const c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );
1297
+
1298
+ tempVec1.subVectors( c, b );
1299
+ tempVec2.subVectors( a, b );
1300
+
1301
+ tempNorm.crossVectors( tempVec1, tempVec2 ).normalize();
1302
+
1303
+ // average all normals that meet the threshold and set the normal value
1304
+ for ( let n = 0; n < 3; n ++ ) {
1305
+
1306
+ const vert = verts[ n ];
1307
+ const hash = hashVertex( vert );
1308
+ const otherNormals = vertexMap[ hash ];
1309
+ tempNorm2.set( 0, 0, 0 );
1310
+
1311
+ for ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {
1312
+
1313
+ const otherNorm = otherNormals[ k ];
1314
+ if ( tempNorm.dot( otherNorm ) > creaseDot ) {
1315
+
1316
+ tempNorm2.add( otherNorm );
1317
+
1318
+ }
1319
+
1320
+ }
1321
+
1322
+ tempNorm2.normalize();
1323
+ normAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );
1324
+
1325
+ }
1326
+
1327
+ }
1328
+
1329
+ resultGeometry.setAttribute( 'normal', normAttr );
1330
+ return resultGeometry;
1331
+
1332
+ }
1333
+
1202
1334
  export {
1203
1335
  computeTangents,
1204
1336
  computeMikkTSpaceTangents,
@@ -1209,5 +1341,6 @@ export {
1209
1341
  mergeVertices,
1210
1342
  toTrianglesDrawMode,
1211
1343
  computeMorphedAttributes,
1212
- mergeGroups
1344
+ mergeGroups,
1345
+ toCreasedNormals
1213
1346
  };
@@ -1,6 +1,4 @@
1
- import {
2
- Vector3
3
- } from 'three';
1
+ import { Vector3 } from 'three';
4
2
 
5
3
 
6
4
  /**
@@ -38,15 +36,12 @@ function hilbert2D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1,
38
36
  // Recurse iterations
39
37
  if ( 0 <= -- iterations ) {
40
38
 
41
- const tmp = [];
42
-
43
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 0 ], half, iterations, v0, v3, v2, v1 ) );
44
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 1 ], half, iterations, v0, v1, v2, v3 ) );
45
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 2 ], half, iterations, v0, v1, v2, v3 ) );
46
- Array.prototype.push.apply( tmp, hilbert2D( vec[ 3 ], half, iterations, v2, v1, v0, v3 ) );
47
-
48
- // Return recursive call
49
- return tmp;
39
+ return [
40
+ ...hilbert2D( vec[ 0 ], half, iterations, v0, v3, v2, v1 ),
41
+ ...hilbert2D( vec[ 1 ], half, iterations, v0, v1, v2, v3 ),
42
+ ...hilbert2D( vec[ 2 ], half, iterations, v0, v1, v2, v3 ),
43
+ ...hilbert2D( vec[ 3 ], half, iterations, v2, v1, v0, v3 )
44
+ ];
50
45
 
51
46
  }
52
47
 
@@ -103,19 +98,16 @@ function hilbert3D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1,
103
98
  // Recurse iterations
104
99
  if ( -- iterations >= 0 ) {
105
100
 
106
- const tmp = [];
107
-
108
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 0 ], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1 ) );
109
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 1 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ) );
110
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 2 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ) );
111
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 3 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ) );
112
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 4 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ) );
113
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 5 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ) );
114
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 6 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ) );
115
- Array.prototype.push.apply( tmp, hilbert3D( vec[ 7 ], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7 ) );
116
-
117
- // Return recursive call
118
- return tmp;
101
+ return [
102
+ ...hilbert3D( vec[ 0 ], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1 ),
103
+ ...hilbert3D( vec[ 1 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ),
104
+ ...hilbert3D( vec[ 2 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ),
105
+ ...hilbert3D( vec[ 3 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ),
106
+ ...hilbert3D( vec[ 4 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ),
107
+ ...hilbert3D( vec[ 5 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ),
108
+ ...hilbert3D( vec[ 6 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ),
109
+ ...hilbert3D( vec[ 7 ], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7 )
110
+ ];
119
111
 
120
112
  }
121
113
 
@@ -189,7 +189,6 @@ class PackedPhongMaterial extends MeshPhongMaterial {
189
189
  ShaderChunk.emissivemap_pars_fragment,
190
190
  ShaderChunk.envmap_common_pars_fragment,
191
191
  ShaderChunk.envmap_pars_fragment,
192
- ShaderChunk.cube_uv_reflection_fragment,
193
192
  ShaderChunk.fog_pars_fragment,
194
193
  ShaderChunk.bsdfs,
195
194
  ShaderChunk.lights_pars_begin,
@@ -1,11 +1,17 @@
1
1
  import {
2
+ BufferAttribute,
3
+ BufferGeometry,
4
+ Color,
2
5
  Group,
6
+ Matrix4,
3
7
  Mesh,
4
- BufferAttribute,
5
- BufferGeometry
8
+ Vector3
6
9
  } from 'three';
7
10
 
8
- import { mergeGroups } from './BufferGeometryUtils.js';
11
+ import { mergeGroups, deepCloneAttribute } from './BufferGeometryUtils.js';
12
+
13
+ const _color = /*@__PURE__*/new Color();
14
+ const _matrix = /*@__PURE__*/new Matrix4();
9
15
 
10
16
  function createMeshesFromInstancedMesh( instancedMesh ) {
11
17
 
@@ -118,28 +124,127 @@ function createMultiMaterialObject( geometry, materials ) {
118
124
 
119
125
  }
120
126
 
121
- function detach( child, parent, scene ) {
127
+ function reduceVertices( object, func, initialValue ) {
122
128
 
123
- console.warn( 'THREE.SceneUtils: detach() has been deprecated. Use scene.attach( child ) instead.' );
129
+ let value = initialValue;
130
+ const vertex = new Vector3();
124
131
 
125
- scene.attach( child );
132
+ object.updateWorldMatrix( true, true );
126
133
 
127
- }
134
+ object.traverseVisible( ( child ) => {
135
+
136
+ const { geometry } = child;
137
+
138
+ if ( geometry !== undefined ) {
139
+
140
+ const { position } = geometry.attributes;
141
+
142
+ if ( position !== undefined ) {
128
143
 
129
- function attach( child, scene, parent ) {
144
+ for ( let i = 0, l = position.count; i < l; i ++ ) {
130
145
 
131
- console.warn( 'THREE.SceneUtils: attach() has been deprecated. Use parent.attach( child ) instead.' );
146
+ vertex.fromBufferAttribute( position, i );
132
147
 
133
- parent.attach( child );
148
+ if ( child.isSkinnedMesh ) {
149
+
150
+ child.boneTransform( i, vertex );
151
+
152
+ } else {
153
+
154
+ vertex.applyMatrix4( child.matrixWorld );
155
+
156
+ }
157
+
158
+ value = func( value, vertex );
159
+
160
+ }
161
+
162
+ }
163
+
164
+ }
165
+
166
+ } );
167
+
168
+ return value;
134
169
 
135
170
  }
136
171
 
172
+ /**
173
+ * @param {InstancedMesh}
174
+ * @param {function(int, int):int}
175
+ */
176
+ function sortInstancedMesh( mesh, compareFn ) {
177
+
178
+ // store copy of instanced attributes for lookups
179
+
180
+ const instanceMatrixRef = deepCloneAttribute( mesh.instanceMatrix );
181
+ const instanceColorRef = mesh.instanceColor ? deepCloneAttribute( mesh.instanceColor ) : null;
182
+
183
+ const attributeRefs = new Map();
184
+
185
+ for ( const name in mesh.geometry.attributes ) {
186
+
187
+ const attribute = mesh.geometry.attributes[ name ];
188
+
189
+ if ( attribute.isInstancedBufferAttribute ) {
190
+
191
+ attributeRefs.set( attribute, deepCloneAttribute( attribute ) );
192
+
193
+ }
137
194
 
195
+ }
196
+
197
+
198
+ // compute sort order
199
+
200
+ const tokens = [];
201
+
202
+ for ( let i = 0; i < mesh.count; i ++ ) tokens.push( i );
203
+
204
+ tokens.sort( compareFn );
205
+
206
+
207
+ // apply sort order
208
+
209
+ for ( let i = 0; i < tokens.length; i ++ ) {
210
+
211
+ const refIndex = tokens[ i ];
212
+
213
+ _matrix.fromArray( instanceMatrixRef.array, refIndex * mesh.instanceMatrix.itemSize );
214
+ _matrix.toArray( mesh.instanceMatrix.array, i * mesh.instanceMatrix.itemSize );
215
+
216
+ if ( mesh.instanceColor ) {
217
+
218
+ _color.fromArray( instanceColorRef.array, refIndex * mesh.instanceColor.itemSize );
219
+ _color.toArray( mesh.instanceColor.array, i * mesh.instanceColor.itemSize );
220
+
221
+ }
222
+
223
+ for ( const name in mesh.geometry.attributes ) {
224
+
225
+ const attribute = mesh.geometry.attributes[ name ];
226
+
227
+ if ( attribute.isInstancedBufferAttribute ) {
228
+
229
+ const attributeRef = attributeRefs.get( attribute );
230
+
231
+ attribute.setX( i, attributeRef.getX( refIndex ) );
232
+ if ( attribute.itemSize > 1 ) attribute.setY( i, attributeRef.getY( refIndex ) );
233
+ if ( attribute.itemSize > 2 ) attribute.setZ( i, attributeRef.getZ( refIndex ) );
234
+ if ( attribute.itemSize > 3 ) attribute.setW( i, attributeRef.getW( refIndex ) );
235
+
236
+ }
237
+
238
+ }
239
+
240
+ }
241
+
242
+ }
138
243
 
139
244
  export {
140
245
  createMeshesFromInstancedMesh,
141
246
  createMeshesFromMultiMaterialMesh,
142
247
  createMultiMaterialObject,
143
- detach,
144
- attach,
248
+ reduceVertices,
249
+ sortInstancedMesh
145
250
  };
@@ -6,13 +6,14 @@ const POINTING_JOINT = 'index-finger-tip';
6
6
 
7
7
  class OculusHandModel extends Object3D {
8
8
 
9
- constructor( controller ) {
9
+ constructor( controller, loader = null ) {
10
10
 
11
11
  super();
12
12
 
13
13
  this.controller = controller;
14
14
  this.motionController = null;
15
15
  this.envMap = null;
16
+ this.loader = loader;
16
17
 
17
18
  this.mesh = null;
18
19
 
@@ -24,7 +25,7 @@ class OculusHandModel extends Object3D {
24
25
 
25
26
  this.xrInputSource = xrInputSource;
26
27
 
27
- this.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness );
28
+ this.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness, this.loader );
28
29
 
29
30
  }
30
31
 
@@ -46,12 +46,17 @@ class OculusHandPointerModel extends THREE.Object3D {
46
46
  hand.addEventListener( 'connected', ( event ) => {
47
47
 
48
48
  const xrInputSource = event.data;
49
+
49
50
  if ( xrInputSource.hand ) {
50
51
 
51
52
  this.visible = true;
52
53
  this.xrInputSource = xrInputSource;
53
54
 
54
- this.createPointer();
55
+ if ( this.pointerObject === null ) {
56
+
57
+ this.createPointer();
58
+
59
+ }
55
60
 
56
61
  }
57
62
 
@@ -1,12 +1,6 @@
1
1
  class VRButton {
2
2
 
3
- static createButton( renderer, options ) {
4
-
5
- if ( options ) {
6
-
7
- console.error( 'THREE.VRButton: The "options" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.' );
8
-
9
- }
3
+ static createButton( renderer ) {
10
4
 
11
5
  const button = document.createElement( 'button' );
12
6
 
@@ -4,15 +4,20 @@ const DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-pro
4
4
 
5
5
  class XRHandMeshModel {
6
6
 
7
- constructor( handModel, controller, path, handedness ) {
7
+ constructor( handModel, controller, path, handedness, loader = null ) {
8
8
 
9
9
  this.controller = controller;
10
10
  this.handModel = handModel;
11
11
 
12
12
  this.bones = [];
13
13
 
14
- const loader = new GLTFLoader();
15
- loader.setPath( path || DEFAULT_HAND_PROFILE_PATH );
14
+ if ( loader === null ) {
15
+
16
+ loader = new GLTFLoader();
17
+ loader.setPath( path || DEFAULT_HAND_PROFILE_PATH );
18
+
19
+ }
20
+
16
21
  loader.load( `${handedness}.glb`, gltf => {
17
22
 
18
23
  const object = gltf.scene.children[ 0 ];