super-three 0.144.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 (450) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +735 -387
  3. package/build/three.js +735 -387
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +910 -408
  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 +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +125 -99
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +85 -170
  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 +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +141 -317
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +113 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  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 +25 -12
  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 +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +40 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +228 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +287 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +409 -706
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/NRRDLoader.js +44 -84
  98. package/examples/js/loaders/OBJLoader.js +50 -65
  99. package/examples/js/loaders/PCDLoader.js +34 -29
  100. package/examples/js/loaders/PDBLoader.js +17 -13
  101. package/examples/js/loaders/PLYLoader.js +62 -48
  102. package/examples/js/loaders/PRWMLoader.js +11 -22
  103. package/examples/js/loaders/PVRLoader.js +7 -16
  104. package/examples/js/loaders/RGBELoader.js +36 -61
  105. package/examples/js/loaders/RGBMLoader.js +26 -87
  106. package/examples/js/loaders/STLLoader.js +20 -27
  107. package/examples/js/loaders/SVGLoader.js +361 -233
  108. package/examples/js/loaders/TDSLoader.js +81 -118
  109. package/examples/js/loaders/TGALoader.js +39 -41
  110. package/examples/js/loaders/TIFFLoader.js +0 -1
  111. package/examples/js/loaders/TTFLoader.js +0 -8
  112. package/examples/js/loaders/TiltLoader.js +14 -15
  113. package/examples/js/loaders/VOXLoader.js +8 -16
  114. package/examples/js/loaders/VRMLLoader.js +243 -340
  115. package/examples/js/loaders/VTKLoader.js +101 -118
  116. package/examples/js/loaders/XYZLoader.js +2 -4
  117. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  118. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  119. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  120. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  121. package/examples/js/math/Capsule.js +0 -17
  122. package/examples/js/math/ColorConverter.js +3 -3
  123. package/examples/js/math/ConvexHull.js +185 -141
  124. package/examples/js/math/ImprovedNoise.js +1 -1
  125. package/examples/js/math/Lut.js +8 -15
  126. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  127. package/examples/js/math/OBB.js +90 -49
  128. package/examples/js/math/Octree.js +2 -57
  129. package/examples/js/math/SimplexNoise.js +74 -88
  130. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  131. package/examples/js/misc/GPUComputationRenderer.js +26 -16
  132. package/examples/js/misc/Gyroscope.js +5 -9
  133. package/examples/js/misc/MD2Character.js +14 -23
  134. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  135. package/examples/js/misc/MorphAnimMesh.js +0 -6
  136. package/examples/js/misc/MorphBlendMesh.js +3 -30
  137. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  138. package/examples/js/misc/RollerCoaster.js +17 -24
  139. package/examples/js/misc/TubePainter.js +18 -12
  140. package/examples/js/misc/Volume.js +16 -45
  141. package/examples/js/misc/VolumeSlice.js +14 -24
  142. package/examples/js/modifiers/CurveModifier.js +19 -21
  143. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  144. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  145. package/examples/js/modifiers/TessellateModifier.js +2 -9
  146. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  147. package/examples/js/objects/Lensflare.js +47 -38
  148. package/examples/js/objects/LightningStorm.js +10 -13
  149. package/examples/js/objects/MarchingCubes.js +80 -59
  150. package/examples/js/objects/Reflector.js +22 -20
  151. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  152. package/examples/js/objects/Refractor.js +52 -30
  153. package/examples/js/objects/ShadowMesh.js +1 -2
  154. package/examples/js/objects/Sky.js +2 -7
  155. package/examples/js/objects/Water.js +23 -18
  156. package/examples/js/objects/Water2.js +20 -19
  157. package/examples/js/physics/AmmoPhysics.js +23 -20
  158. package/examples/js/physics/OimoPhysics.js +19 -17
  159. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  160. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  161. package/examples/js/postprocessing/BloomPass.js +38 -17
  162. package/examples/js/postprocessing/BokehPass.js +29 -12
  163. package/examples/js/postprocessing/ClearPass.js +1 -6
  164. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  165. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  166. package/examples/js/postprocessing/EffectComposer.js +25 -32
  167. package/examples/js/postprocessing/FilmPass.js +7 -5
  168. package/examples/js/postprocessing/GlitchPass.js +10 -11
  169. package/examples/js/postprocessing/HalftonePass.js +9 -9
  170. package/examples/js/postprocessing/LUTPass.js +2 -15
  171. package/examples/js/postprocessing/MaskPass.js +20 -17
  172. package/examples/js/postprocessing/OutlinePass.js +45 -36
  173. package/examples/js/postprocessing/Pass.js +11 -14
  174. package/examples/js/postprocessing/RenderPass.js +3 -7
  175. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -8
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +236 -170
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  254. package/examples/jsm/animation/MMDPhysics.js +25 -0
  255. package/examples/jsm/capabilities/WebGPU.js +3 -1
  256. package/examples/jsm/controls/FirstPersonControls.js +20 -20
  257. package/examples/jsm/controls/FlyControls.js +16 -17
  258. package/examples/jsm/controls/OrbitControls.js +44 -4
  259. package/examples/jsm/controls/TrackballControls.js +14 -2
  260. package/examples/jsm/controls/TransformControls.js +1 -1
  261. package/examples/jsm/csm/CSM.js +1 -0
  262. package/examples/jsm/csm/CSMHelper.js +30 -0
  263. package/examples/jsm/exporters/GLTFExporter.js +0 -79
  264. package/examples/jsm/exporters/USDZExporter.js +93 -1
  265. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  266. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  267. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  268. package/examples/jsm/helpers/ViewHelper.js +24 -0
  269. package/examples/jsm/interactive/HTMLMesh.js +5 -6
  270. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  271. package/examples/jsm/libs/flow.module.js +610 -160
  272. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  273. package/examples/jsm/lines/LineSegments2.js +4 -0
  274. package/examples/jsm/loaders/3DMLoader.js +1 -2
  275. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  276. package/examples/jsm/loaders/FBXLoader.js +18 -2
  277. package/examples/jsm/loaders/GLTFLoader.js +269 -428
  278. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  279. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  280. package/examples/jsm/loaders/LottieLoader.js +4 -2
  281. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  282. package/examples/jsm/loaders/PCDLoader.js +1 -1
  283. package/examples/jsm/loaders/PLYLoader.js +68 -16
  284. package/examples/jsm/loaders/SVGLoader.js +227 -14
  285. package/examples/jsm/loaders/USDZLoader.js +351 -111
  286. package/examples/jsm/loaders/VRMLLoader.js +13 -1
  287. package/examples/jsm/math/ConvexHull.js +4 -4
  288. package/examples/jsm/math/Octree.js +1 -1
  289. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  290. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  291. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +6 -9
  292. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +6 -9
  293. package/examples/jsm/node-editor/math/AngleEditor.js +3 -3
  294. package/examples/jsm/node-editor/math/InvertEditor.js +2 -2
  295. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  296. package/examples/jsm/node-editor/utils/PreviewEditor.js +4 -0
  297. package/examples/jsm/nodes/Nodes.js +30 -3
  298. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  299. package/examples/jsm/nodes/accessors/NormalNode.js +6 -6
  300. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  301. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  302. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  303. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  304. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  305. package/examples/jsm/nodes/core/AttributeNode.js +31 -8
  306. package/examples/jsm/nodes/core/Node.js +1 -1
  307. package/examples/jsm/nodes/core/NodeBuilder.js +55 -6
  308. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  309. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  310. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  311. package/examples/jsm/nodes/core/constants.js +13 -13
  312. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  313. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -12
  314. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  315. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  316. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  317. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  318. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  319. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  320. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  321. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  322. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  323. package/examples/jsm/nodes/materials/Materials.js +9 -7
  324. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  325. package/examples/jsm/nodes/materialx/{Disclaimer.md → DISCLAIMER.md} +1 -1
  326. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  327. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_hsv.js +1 -1
  328. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_noise.js +13 -3
  329. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  330. package/examples/jsm/nodes/math/MathNode.js +5 -5
  331. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  332. package/examples/jsm/nodes/shadernode/ShaderNode.js +35 -20
  333. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +87 -63
  334. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +29 -0
  335. package/examples/jsm/nodes/utils/ConvertNode.js +15 -14
  336. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  337. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  338. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  339. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  340. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  341. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  342. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  343. package/examples/jsm/nodes/utils/TimerNode.js +21 -1
  344. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  345. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  346. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  347. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  348. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  349. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  350. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  351. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  352. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  353. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  354. package/examples/jsm/postprocessing/OutlinePass.js +21 -1
  355. package/examples/jsm/postprocessing/Pass.js +2 -0
  356. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  357. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  358. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  359. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  360. package/examples/jsm/postprocessing/SavePass.js +17 -1
  361. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  362. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  363. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  364. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  365. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +56 -35
  366. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  367. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  368. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  369. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  370. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +41 -9
  371. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  372. package/examples/jsm/shaders/VelocityShader.js +128 -0
  373. package/examples/jsm/utils/BufferGeometryUtils.js +174 -42
  374. package/examples/jsm/utils/SceneUtils.js +129 -4
  375. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  376. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  377. package/package.json +13 -13
  378. package/src/Three.js +1 -0
  379. package/src/animation/PropertyBinding.js +7 -0
  380. package/src/audio/AudioContext.js +5 -5
  381. package/src/cameras/CubeCamera.js +14 -14
  382. package/src/constants.js +1 -1
  383. package/src/core/InstancedBufferGeometry.js +1 -7
  384. package/src/core/InterleavedBufferAttribute.js +4 -4
  385. package/src/extras/Earcut.js +67 -67
  386. package/src/geometries/PolyhedronGeometry.js +1 -1
  387. package/src/geometries/ShapeGeometry.js +1 -1
  388. package/src/helpers/ArrowHelper.js +9 -0
  389. package/src/helpers/Box3Helper.js +7 -0
  390. package/src/helpers/BoxHelper.js +7 -1
  391. package/src/helpers/DirectionalLightHelper.js +5 -1
  392. package/src/helpers/GridHelper.js +7 -0
  393. package/src/helpers/HemisphereLightHelper.js +4 -1
  394. package/src/helpers/PlaneHelper.js +9 -0
  395. package/src/helpers/PointLightHelper.js +2 -1
  396. package/src/helpers/PolarGridHelper.js +7 -0
  397. package/src/helpers/SkeletonHelper.js +7 -0
  398. package/src/helpers/SpotLightHelper.js +4 -2
  399. package/src/lights/LightShadow.js +1 -2
  400. package/src/lights/PointLight.js +2 -2
  401. package/src/lights/SpotLight.js +2 -2
  402. package/src/loaders/FileLoader.js +4 -1
  403. package/src/loaders/ObjectLoader.js +5 -1
  404. package/src/materials/Material.js +1 -1
  405. package/src/materials/MeshPhysicalMaterial.js +1 -1
  406. package/src/math/Color.js +5 -5
  407. package/src/math/Matrix3.js +53 -18
  408. package/src/math/Ray.js +2 -5
  409. package/src/math/Sphere.js +36 -21
  410. package/src/objects/InstancedMesh.js +7 -0
  411. package/src/objects/LOD.js +25 -6
  412. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  413. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  414. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  415. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  416. package/src/renderers/WebGLRenderTarget.js +1 -1
  417. package/src/renderers/WebGLRenderer.js +36 -62
  418. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  419. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  420. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  421. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  422. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  423. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  424. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  425. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  426. package/src/renderers/shaders/ShaderChunk.js +3 -0
  427. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  428. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  429. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  430. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  431. package/src/renderers/shaders/ShaderLib.js +20 -6
  432. package/src/renderers/shaders/UniformsLib.js +1 -1
  433. package/src/renderers/shaders/UniformsUtils.js +15 -0
  434. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  435. package/src/renderers/webgl/WebGLBackground.js +15 -7
  436. package/src/renderers/webgl/WebGLLights.js +0 -4
  437. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  438. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  439. package/src/renderers/webgl/WebGLState.js +78 -41
  440. package/src/renderers/webgl/WebGLTextures.js +94 -39
  441. package/src/renderers/webgl/WebGLUniforms.js +152 -24
  442. package/src/renderers/webgl/WebGLUtils.js +1 -1
  443. package/src/renderers/webxr/WebXRController.js +46 -13
  444. package/src/renderers/webxr/WebXRManager.js +70 -2
  445. package/src/scenes/Scene.js +8 -0
  446. package/src/textures/CompressedArrayTexture.js +18 -0
  447. package/src/textures/Texture.js +2 -1
  448. package/examples/js/libs/lottie_canvas.js +0 -12751
  449. package/examples/js/shaders/PixelShader.js +0 -51
  450. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -217,7 +217,7 @@ class CCDIKSolver {
217
217
  */
218
218
  createHelper() {
219
219
 
220
- return new CCDIKHelper( this.mesh, this.mesh.geometry.userData.MMD.iks );
220
+ return new CCDIKHelper( this.mesh, this.iks );
221
221
 
222
222
  }
223
223
 
@@ -283,7 +283,7 @@ function setPositionOfBoneToAttributeArray( array, index, bone, matrixWorldInv )
283
283
  */
284
284
  class CCDIKHelper extends Object3D {
285
285
 
286
- constructor( mesh, iks = [] ) {
286
+ constructor( mesh, iks = [], sphereSize = 0.25 ) {
287
287
 
288
288
  super();
289
289
 
@@ -293,7 +293,7 @@ class CCDIKHelper extends Object3D {
293
293
  this.matrix.copy( mesh.matrixWorld );
294
294
  this.matrixAutoUpdate = false;
295
295
 
296
- this.sphereGeometry = new SphereGeometry( 0.25, 16, 8 );
296
+ this.sphereGeometry = new SphereGeometry( sphereSize, 16, 8 );
297
297
 
298
298
  this.targetSphereMaterial = new MeshBasicMaterial( {
299
299
  color: new Color( 0xff8888 ),
@@ -393,6 +393,30 @@ class CCDIKHelper extends Object3D {
393
393
 
394
394
  }
395
395
 
396
+ /**
397
+ * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
398
+ */
399
+ dispose() {
400
+
401
+ this.sphereGeometry.dispose();
402
+
403
+ this.targetSphereMaterial.dispose();
404
+ this.effectorSphereMaterial.dispose();
405
+ this.linkSphereMaterial.dispose();
406
+ this.lineMaterial.dispose();
407
+
408
+ const children = this.children;
409
+
410
+ for ( let i = 0; i < children.length; i ++ ) {
411
+
412
+ const child = children[ i ];
413
+
414
+ if ( child.isLine ) child.geometry.dispose();
415
+
416
+ }
417
+
418
+ }
419
+
396
420
  // private method
397
421
 
398
422
  _init() {
@@ -1292,6 +1292,31 @@ class MMDPhysicsHelper extends Object3D {
1292
1292
 
1293
1293
  }
1294
1294
 
1295
+
1296
+ /**
1297
+ * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
1298
+ */
1299
+ dispose() {
1300
+
1301
+ const materials = this.materials;
1302
+ const children = this.children;
1303
+
1304
+ for ( let i = 0; i < materials.length; i ++ ) {
1305
+
1306
+ materials[ i ].dispose();
1307
+
1308
+ }
1309
+
1310
+ for ( let i = 0; i < children.length; i ++ ) {
1311
+
1312
+ const child = children[ i ];
1313
+
1314
+ if ( child.isMesh ) child.geometry.dispose();
1315
+
1316
+ }
1317
+
1318
+ }
1319
+
1295
1320
  /**
1296
1321
  * Updates Rigid Bodies visualization.
1297
1322
  */
@@ -14,7 +14,9 @@ class WebGPU {
14
14
 
15
15
  static getErrorMessage() {
16
16
 
17
- const message = 'Your browser does not support <a href="https://gpuweb.github.io/gpuweb/" style="color:blue">WebGPU</a>';
17
+ let message = 'Your browser does not support <a href="https://gpuweb.github.io/gpuweb/" style="color:blue">WebGPU</a>';
18
+
19
+ if ( !! window.chrome ) message += '<br>Try: <b>chrome://flags/#enable-unsafe-webgpu</b>';
18
20
 
19
21
  const element = document.createElement( 'div' );
20
22
  element.id = 'webgpumessage';
@@ -42,8 +42,8 @@ class FirstPersonControls {
42
42
 
43
43
  this.autoSpeedFactor = 0.0;
44
44
 
45
- this.mouseX = 0;
46
- this.mouseY = 0;
45
+ this.pointerX = 0;
46
+ this.pointerY = 0;
47
47
 
48
48
  this.moveForward = false;
49
49
  this.moveBackward = false;
@@ -76,7 +76,7 @@ class FirstPersonControls {
76
76
 
77
77
  };
78
78
 
79
- this.onMouseDown = function ( event ) {
79
+ this.onPointerDown = function ( event ) {
80
80
 
81
81
  if ( this.domElement !== document ) {
82
82
 
@@ -99,7 +99,7 @@ class FirstPersonControls {
99
99
 
100
100
  };
101
101
 
102
- this.onMouseUp = function ( event ) {
102
+ this.onPointerUp = function ( event ) {
103
103
 
104
104
  if ( this.activeLook ) {
105
105
 
@@ -116,17 +116,17 @@ class FirstPersonControls {
116
116
 
117
117
  };
118
118
 
119
- this.onMouseMove = function ( event ) {
119
+ this.onPointerMove = function ( event ) {
120
120
 
121
121
  if ( this.domElement === document ) {
122
122
 
123
- this.mouseX = event.pageX - this.viewHalfX;
124
- this.mouseY = event.pageY - this.viewHalfY;
123
+ this.pointerX = event.pageX - this.viewHalfX;
124
+ this.pointerY = event.pageY - this.viewHalfY;
125
125
 
126
126
  } else {
127
127
 
128
- this.mouseX = event.pageX - this.domElement.offsetLeft - this.viewHalfX;
129
- this.mouseY = event.pageY - this.domElement.offsetTop - this.viewHalfY;
128
+ this.pointerX = event.pageX - this.domElement.offsetLeft - this.viewHalfX;
129
+ this.pointerY = event.pageY - this.domElement.offsetTop - this.viewHalfY;
130
130
 
131
131
  }
132
132
 
@@ -246,8 +246,8 @@ class FirstPersonControls {
246
246
 
247
247
  }
248
248
 
249
- lon -= this.mouseX * actualLookSpeed;
250
- if ( this.lookVertical ) lat -= this.mouseY * actualLookSpeed * verticalLookRatio;
249
+ lon -= this.pointerX * actualLookSpeed;
250
+ if ( this.lookVertical ) lat -= this.pointerY * actualLookSpeed * verticalLookRatio;
251
251
 
252
252
  lat = Math.max( - 85, Math.min( 85, lat ) );
253
253
 
@@ -273,25 +273,25 @@ class FirstPersonControls {
273
273
  this.dispose = function () {
274
274
 
275
275
  this.domElement.removeEventListener( 'contextmenu', contextmenu );
276
- this.domElement.removeEventListener( 'mousedown', _onMouseDown );
277
- this.domElement.removeEventListener( 'mousemove', _onMouseMove );
278
- this.domElement.removeEventListener( 'mouseup', _onMouseUp );
276
+ this.domElement.removeEventListener( 'pointerdown', _onPointerDown );
277
+ this.domElement.removeEventListener( 'pointermove', _onPointerMove );
278
+ this.domElement.removeEventListener( 'pointerup', _onPointerUp );
279
279
 
280
280
  window.removeEventListener( 'keydown', _onKeyDown );
281
281
  window.removeEventListener( 'keyup', _onKeyUp );
282
282
 
283
283
  };
284
284
 
285
- const _onMouseMove = this.onMouseMove.bind( this );
286
- const _onMouseDown = this.onMouseDown.bind( this );
287
- const _onMouseUp = this.onMouseUp.bind( this );
285
+ const _onPointerMove = this.onPointerMove.bind( this );
286
+ const _onPointerDown = this.onPointerDown.bind( this );
287
+ const _onPointerUp = this.onPointerUp.bind( this );
288
288
  const _onKeyDown = this.onKeyDown.bind( this );
289
289
  const _onKeyUp = this.onKeyUp.bind( this );
290
290
 
291
291
  this.domElement.addEventListener( 'contextmenu', contextmenu );
292
- this.domElement.addEventListener( 'mousemove', _onMouseMove );
293
- this.domElement.addEventListener( 'mousedown', _onMouseDown );
294
- this.domElement.addEventListener( 'mouseup', _onMouseUp );
292
+ this.domElement.addEventListener( 'pointerdown', _onPointerDown );
293
+ this.domElement.addEventListener( 'pointermove', _onPointerMove );
294
+ this.domElement.addEventListener( 'pointerup', _onPointerUp );
295
295
 
296
296
  window.addEventListener( 'keydown', _onKeyDown );
297
297
  window.addEventListener( 'keyup', _onKeyUp );
@@ -36,7 +36,7 @@ class FlyControls extends EventDispatcher {
36
36
 
37
37
  this.tmpQuaternion = new Quaternion();
38
38
 
39
- this.mouseStatus = 0;
39
+ this.status = 0;
40
40
 
41
41
  this.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 };
42
42
  this.moveVector = new Vector3( 0, 0, 0 );
@@ -112,11 +112,11 @@ class FlyControls extends EventDispatcher {
112
112
 
113
113
  };
114
114
 
115
- this.mousedown = function ( event ) {
115
+ this.pointerdown = function ( event ) {
116
116
 
117
117
  if ( this.dragToLook ) {
118
118
 
119
- this.mouseStatus ++;
119
+ this.status ++;
120
120
 
121
121
  } else {
122
122
 
@@ -133,9 +133,9 @@ class FlyControls extends EventDispatcher {
133
133
 
134
134
  };
135
135
 
136
- this.mousemove = function ( event ) {
136
+ this.pointermove = function ( event ) {
137
137
 
138
- if ( ! this.dragToLook || this.mouseStatus > 0 ) {
138
+ if ( ! this.dragToLook || this.status > 0 ) {
139
139
 
140
140
  const container = this.getContainerDimensions();
141
141
  const halfWidth = container.size[ 0 ] / 2;
@@ -150,11 +150,11 @@ class FlyControls extends EventDispatcher {
150
150
 
151
151
  };
152
152
 
153
- this.mouseup = function ( event ) {
153
+ this.pointerup = function ( event ) {
154
154
 
155
155
  if ( this.dragToLook ) {
156
156
 
157
- this.mouseStatus --;
157
+ this.status --;
158
158
 
159
159
  this.moveState.yawLeft = this.moveState.pitchDown = 0;
160
160
 
@@ -245,26 +245,25 @@ class FlyControls extends EventDispatcher {
245
245
  this.dispose = function () {
246
246
 
247
247
  this.domElement.removeEventListener( 'contextmenu', contextmenu );
248
- this.domElement.removeEventListener( 'mousedown', _mousedown );
249
- this.domElement.removeEventListener( 'mousemove', _mousemove );
250
- this.domElement.removeEventListener( 'mouseup', _mouseup );
248
+ this.domElement.removeEventListener( 'pointerdown', _pointerdown );
249
+ this.domElement.removeEventListener( 'pointermove', _pointermove );
250
+ this.domElement.removeEventListener( 'pointerup', _pointerup );
251
251
 
252
252
  window.removeEventListener( 'keydown', _keydown );
253
253
  window.removeEventListener( 'keyup', _keyup );
254
254
 
255
255
  };
256
256
 
257
- const _mousemove = this.mousemove.bind( this );
258
- const _mousedown = this.mousedown.bind( this );
259
- const _mouseup = this.mouseup.bind( this );
257
+ const _pointermove = this.pointermove.bind( this );
258
+ const _pointerdown = this.pointerdown.bind( this );
259
+ const _pointerup = this.pointerup.bind( this );
260
260
  const _keydown = this.keydown.bind( this );
261
261
  const _keyup = this.keyup.bind( this );
262
262
 
263
263
  this.domElement.addEventListener( 'contextmenu', contextmenu );
264
-
265
- this.domElement.addEventListener( 'mousemove', _mousemove );
266
- this.domElement.addEventListener( 'mousedown', _mousedown );
267
- this.domElement.addEventListener( 'mouseup', _mouseup );
264
+ this.domElement.addEventListener( 'pointerdown', _pointerdown );
265
+ this.domElement.addEventListener( 'pointermove', _pointermove );
266
+ this.domElement.addEventListener( 'pointerup', _pointerup );
268
267
 
269
268
  window.addEventListener( 'keydown', _keydown );
270
269
  window.addEventListener( 'keyup', _keyup );
@@ -601,22 +601,62 @@ class OrbitControls extends EventDispatcher {
601
601
  switch ( event.code ) {
602
602
 
603
603
  case scope.keys.UP:
604
- pan( 0, scope.keyPanSpeed );
604
+
605
+ if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
606
+
607
+ rotateUp( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
608
+
609
+ } else {
610
+
611
+ pan( 0, scope.keyPanSpeed );
612
+
613
+ }
614
+
605
615
  needsUpdate = true;
606
616
  break;
607
617
 
608
618
  case scope.keys.BOTTOM:
609
- pan( 0, - scope.keyPanSpeed );
619
+
620
+ if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
621
+
622
+ rotateUp( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
623
+
624
+ } else {
625
+
626
+ pan( 0, - scope.keyPanSpeed );
627
+
628
+ }
629
+
610
630
  needsUpdate = true;
611
631
  break;
612
632
 
613
633
  case scope.keys.LEFT:
614
- pan( scope.keyPanSpeed, 0 );
634
+
635
+ if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
636
+
637
+ rotateLeft( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
638
+
639
+ } else {
640
+
641
+ pan( scope.keyPanSpeed, 0 );
642
+
643
+ }
644
+
615
645
  needsUpdate = true;
616
646
  break;
617
647
 
618
648
  case scope.keys.RIGHT:
619
- pan( - scope.keyPanSpeed, 0 );
649
+
650
+ if ( event.ctrlKey || event.metaKey || event.shiftKey ) {
651
+
652
+ rotateLeft( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );
653
+
654
+ } else {
655
+
656
+ pan( - scope.keyPanSpeed, 0 );
657
+
658
+ }
659
+
620
660
  needsUpdate = true;
621
661
  break;
622
662
 
@@ -700,8 +700,20 @@ class TrackballControls extends EventDispatcher {
700
700
 
701
701
  case 2:
702
702
  _state = STATE.TOUCH_ZOOM_PAN;
703
- _moveCurr.copy( getMouseOnCircle( event.pageX - _movePrev.x, event.pageY - _movePrev.y ) );
704
- _movePrev.copy( _moveCurr );
703
+
704
+ for ( let i = 0; i < _pointers.length; i ++ ) {
705
+
706
+ if ( _pointers[ i ].pointerId !== event.pointerId ) {
707
+
708
+ const position = _pointerPositions[ _pointers[ i ].pointerId ];
709
+ _moveCurr.copy( getMouseOnCircle( position.x, position.y ) );
710
+ _movePrev.copy( _moveCurr );
711
+ break;
712
+
713
+ }
714
+
715
+ }
716
+
705
717
  break;
706
718
 
707
719
  }
@@ -207,7 +207,7 @@ class TransformControls extends Object3D {
207
207
 
208
208
  if ( this.camera.isOrthographicCamera ) {
209
209
 
210
- this.camera.getWorldDirection( this.eye );
210
+ this.camera.getWorldDirection( this.eye ).negate();
211
211
 
212
212
  } else {
213
213
 
@@ -343,6 +343,7 @@ export class CSM {
343
343
 
344
344
  for ( let i = 0; i < this.lights.length; i ++ ) {
345
345
 
346
+ this.parent.remove( this.lights[ i ].target );
346
347
  this.parent.remove( this.lights[ i ] );
347
348
 
348
349
  }
@@ -158,6 +158,36 @@ class CSMHelper extends Group {
158
158
 
159
159
  }
160
160
 
161
+ dispose() {
162
+
163
+ const frustumLines = this.frustumLines;
164
+ const cascadeLines = this.cascadeLines;
165
+ const cascadePlanes = this.cascadePlanes;
166
+ const shadowLines = this.shadowLines;
167
+
168
+ frustumLines.geometry.dispose();
169
+ frustumLines.material.dispose();
170
+
171
+ const cascades = this.csm.cascades;
172
+
173
+ for ( let i = 0; i < cascades; i ++ ) {
174
+
175
+ const cascadeLine = cascadeLines[ i ];
176
+ const cascadePlane = cascadePlanes[ i ];
177
+ const shadowLineGroup = shadowLines[ i ];
178
+ const shadowLine = shadowLineGroup.children[ 0 ];
179
+
180
+ cascadeLine.dispose(); // Box3Helper
181
+
182
+ cascadePlane.geometry.dispose();
183
+ cascadePlane.material.dispose();
184
+
185
+ shadowLine.dispose(); // Box3Helper
186
+
187
+ }
188
+
189
+ }
190
+
161
191
  }
162
192
 
163
193
  export { CSMHelper };
@@ -41,12 +41,6 @@ class GLTFExporter {
41
41
 
42
42
  } );
43
43
 
44
- this.register( function ( writer ) {
45
-
46
- return new GLTFMaterialsPBRSpecularGlossiness( writer );
47
-
48
- } );
49
-
50
44
  this.register( function ( writer ) {
51
45
 
52
46
  return new GLTFMaterialsTransmissionExtension( writer );
@@ -438,7 +432,6 @@ class GLTFWriter {
438
432
  binary: false,
439
433
  trs: false,
440
434
  onlyVisible: true,
441
- truncateDrawRange: true,
442
435
  maxTextureSize: Infinity,
443
436
  animations: [],
444
437
  includeCustomExtensions: false
@@ -987,7 +980,6 @@ class GLTFWriter {
987
980
  */
988
981
  processAccessor( attribute, geometry, start, count ) {
989
982
 
990
- const options = this.options;
991
983
  const json = this.json;
992
984
 
993
985
  const types = {
@@ -1028,21 +1020,6 @@ class GLTFWriter {
1028
1020
  if ( start === undefined ) start = 0;
1029
1021
  if ( count === undefined ) count = attribute.count;
1030
1022
 
1031
- // @TODO Indexed buffer geometry with drawRange not supported yet
1032
- if ( options.truncateDrawRange && geometry !== undefined && geometry.index === null ) {
1033
-
1034
- const end = start + count;
1035
- const end2 = geometry.drawRange.count === Infinity
1036
- ? attribute.count
1037
- : geometry.drawRange.start + geometry.drawRange.count;
1038
-
1039
- start = Math.max( start, geometry.drawRange.start );
1040
- count = Math.min( end, end2 ) - start;
1041
-
1042
- if ( count < 0 ) count = 0;
1043
-
1044
- }
1045
-
1046
1023
  // Skip creating an accessor if the attribute doesn't have data to export
1047
1024
  if ( count === 0 ) return null;
1048
1025
 
@@ -2298,62 +2275,6 @@ class GLTFMaterialsUnlitExtension {
2298
2275
 
2299
2276
  }
2300
2277
 
2301
- /**
2302
- * Specular-Glossiness Extension
2303
- *
2304
- * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness
2305
- */
2306
- class GLTFMaterialsPBRSpecularGlossiness {
2307
-
2308
- constructor( writer ) {
2309
-
2310
- this.writer = writer;
2311
- this.name = 'KHR_materials_pbrSpecularGlossiness';
2312
-
2313
- }
2314
-
2315
- writeMaterial( material, materialDef ) {
2316
-
2317
- if ( ! material.isGLTFSpecularGlossinessMaterial ) return;
2318
-
2319
- const writer = this.writer;
2320
- const extensionsUsed = writer.extensionsUsed;
2321
-
2322
- const extensionDef = {};
2323
-
2324
- if ( materialDef.pbrMetallicRoughness.baseColorFactor ) {
2325
-
2326
- extensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;
2327
-
2328
- }
2329
-
2330
- const specularFactor = [ 1, 1, 1 ];
2331
- material.specular.toArray( specularFactor, 0 );
2332
- extensionDef.specularFactor = specularFactor;
2333
- extensionDef.glossinessFactor = material.glossiness;
2334
-
2335
- if ( materialDef.pbrMetallicRoughness.baseColorTexture ) {
2336
-
2337
- extensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;
2338
-
2339
- }
2340
-
2341
- if ( material.specularMap ) {
2342
-
2343
- const specularMapDef = { index: writer.processTexture( material.specularMap ) };
2344
- writer.applyTextureTransform( specularMapDef, material.specularMap );
2345
- extensionDef.specularGlossinessTexture = specularMapDef;
2346
-
2347
- }
2348
-
2349
- materialDef.extensions = materialDef.extensions || {};
2350
- materialDef.extensions[ this.name ] = extensionDef;
2351
- extensionsUsed[ this.name ] = true;
2352
-
2353
- }
2354
-
2355
- }
2356
-
2357
2278
  /**
2358
2279
  * Clearcoat Materials Extension
2359
2280
  *
@@ -6,7 +6,7 @@ import * as fflate from '../libs/fflate.module.js';
6
6
 
7
7
  class USDZExporter {
8
8
 
9
- async parse( scene ) {
9
+ async parse( scene, options = { ar: { anchoring: { type: 'plane' }, planeAnchoring: { alignment: 'horizontal' } } } ) {
10
10
 
11
11
  const files = {};
12
12
  const modelFileName = 'model.usda';
@@ -16,6 +16,8 @@ class USDZExporter {
16
16
 
17
17
  let output = buildHeader();
18
18
 
19
+ output += buildSceneStart( options );
20
+
19
21
  const materials = {};
20
22
  const textures = {};
21
23
 
@@ -51,10 +53,17 @@ class USDZExporter {
51
53
 
52
54
  }
53
55
 
56
+ } else if ( object.isCamera ) {
57
+
58
+ output += buildCamera( object );
59
+
54
60
  }
55
61
 
56
62
  } );
57
63
 
64
+
65
+ output += buildSceneEnd();
66
+
58
67
  output += buildMaterials( materials, textures );
59
68
 
60
69
  files[ modelFileName ] = fflate.strToU8( output );
@@ -170,6 +179,40 @@ function buildHeader() {
170
179
 
171
180
  }
172
181
 
182
+ function buildSceneStart( options ) {
183
+
184
+ return `def Xform "Root"
185
+ {
186
+ def Scope "Scenes" (
187
+ kind = "sceneLibrary"
188
+ )
189
+ {
190
+ def Xform "Scene" (
191
+ customData = {
192
+ bool preliminary_collidesWithEnvironment = 0
193
+ string sceneName = "Scene"
194
+ }
195
+ sceneName = "Scene"
196
+ )
197
+ {
198
+ token preliminary:anchoring:type = "${options.ar.anchoring.type}"
199
+ token preliminary:planeAnchoring:alignment = "${options.ar.planeAnchoring.alignment}"
200
+
201
+ `;
202
+
203
+ }
204
+
205
+ function buildSceneEnd() {
206
+
207
+ return `
208
+ }
209
+ }
210
+ }
211
+
212
+ `;
213
+
214
+ }
215
+
173
216
  function buildUSDFileAsString( dataToInsert ) {
174
217
 
175
218
  let output = buildHeader();
@@ -555,4 +598,53 @@ function buildVector2( vector ) {
555
598
 
556
599
  }
557
600
 
601
+
602
+ function buildCamera( camera ) {
603
+
604
+ const name = camera.name ? camera.name : 'Camera_' + camera.id;
605
+
606
+ const transform = buildMatrix( camera.matrixWorld );
607
+
608
+ if ( camera.matrixWorld.determinant() < 0 ) {
609
+
610
+ console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', camera );
611
+
612
+ }
613
+
614
+ if ( camera.isOrthographicCamera ) {
615
+
616
+ return `def Camera "${name}"
617
+ {
618
+ matrix4d xformOp:transform = ${ transform }
619
+ uniform token[] xformOpOrder = ["xformOp:transform"]
620
+
621
+ float2 clippingRange = (${ camera.near.toPrecision( PRECISION ) }, ${ camera.far.toPrecision( PRECISION ) })
622
+ float horizontalAperture = ${ ( ( Math.abs( camera.left ) + Math.abs( camera.right ) ) * 10 ).toPrecision( PRECISION ) }
623
+ float verticalAperture = ${ ( ( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10 ).toPrecision( PRECISION ) }
624
+ token projection = "orthographic"
625
+ }
626
+
627
+ `;
628
+
629
+ } else {
630
+
631
+ return `def Camera "${name}"
632
+ {
633
+ matrix4d xformOp:transform = ${ transform }
634
+ uniform token[] xformOpOrder = ["xformOp:transform"]
635
+
636
+ float2 clippingRange = (${ camera.near.toPrecision( PRECISION ) }, ${ camera.far.toPrecision( PRECISION ) })
637
+ float focalLength = ${ camera.getFocalLength().toPrecision( PRECISION ) }
638
+ float focusDistance = ${ camera.focus.toPrecision( PRECISION ) }
639
+ float horizontalAperture = ${ camera.getFilmWidth().toPrecision( PRECISION ) }
640
+ token projection = "perspective"
641
+ float verticalAperture = ${ camera.getFilmHeight().toPrecision( PRECISION ) }
642
+ }
643
+
644
+ `;
645
+
646
+ }
647
+
648
+ }
649
+
558
650
  export { USDZExporter };