@playdrop/playdrop-cli 0.3.5-build.1 → 0.3.8-build.2

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 (1288) hide show
  1. package/config/client-meta.json +5 -5
  2. package/dist/apps/upload.js +1 -0
  3. package/dist/catalogue.d.ts +7 -0
  4. package/dist/catalogue.js +70 -33
  5. package/dist/commands/create.js +129 -70
  6. package/dist/commands/createRemixContent.d.ts +3 -0
  7. package/dist/commands/createRemixContent.js +310 -0
  8. package/dist/commands/generation.d.ts +0 -1
  9. package/dist/commands/generation.js +0 -18
  10. package/dist/commands/init.js +3 -3
  11. package/dist/commands/upload.js +11 -0
  12. package/dist/index.js +17 -4
  13. package/node_modules/@playdrop/ai-client/dist/index.d.ts +1 -1
  14. package/node_modules/@playdrop/ai-client/dist/index.d.ts.map +1 -1
  15. package/node_modules/@playdrop/ai-client/dist/index.js +1 -1
  16. package/node_modules/@playdrop/api-client/dist/client.d.ts +8 -2
  17. package/node_modules/@playdrop/api-client/dist/client.d.ts.map +1 -1
  18. package/node_modules/@playdrop/api-client/dist/client.js +2 -0
  19. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts +3 -2
  20. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts.map +1 -1
  21. package/node_modules/@playdrop/api-client/dist/domains/apps.js +24 -2
  22. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts +3 -1
  23. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts.map +1 -1
  24. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.js +19 -1
  25. package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts +3 -1
  26. package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts.map +1 -1
  27. package/node_modules/@playdrop/api-client/dist/domains/assets.js +19 -1
  28. package/node_modules/@playdrop/api-client/dist/index.d.ts +3 -0
  29. package/node_modules/@playdrop/api-client/dist/index.d.ts.map +1 -1
  30. package/node_modules/@playdrop/api-client/dist/index.js +9 -0
  31. package/node_modules/@playdrop/config/client-meta.json +5 -5
  32. package/node_modules/@playdrop/types/dist/api.d.ts +22 -1
  33. package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
  34. package/node_modules/@playdrop/types/dist/asset-pack.d.ts +1 -0
  35. package/node_modules/@playdrop/types/dist/asset-pack.d.ts.map +1 -1
  36. package/node_modules/@playdrop/types/dist/asset.d.ts +27 -0
  37. package/node_modules/@playdrop/types/dist/asset.d.ts.map +1 -1
  38. package/node_modules/@playdrop/types/dist/graph.d.ts +21 -0
  39. package/node_modules/@playdrop/types/dist/graph.d.ts.map +1 -1
  40. package/node_modules/@playdrop/types/dist/graph.js +66 -0
  41. package/node_modules/@playdrop/types/dist/version.d.ts +1 -0
  42. package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
  43. package/node_modules/@playdrop/vox-three/dist/src/index.d.ts +1 -0
  44. package/node_modules/@playdrop/vox-three/dist/src/index.js +18 -0
  45. package/node_modules/@playdrop/vox-three/dist/src/index.js.map +1 -0
  46. package/node_modules/@playdrop/vox-three/dist/src/vox.d.ts +25 -0
  47. package/node_modules/@playdrop/vox-three/dist/src/vox.js +425 -0
  48. package/node_modules/@playdrop/vox-three/dist/src/vox.js.map +1 -0
  49. package/node_modules/@playdrop/vox-three/dist/test/vox.test.d.ts +1 -0
  50. package/node_modules/@playdrop/vox-three/dist/test/vox.test.js +79 -0
  51. package/node_modules/@playdrop/vox-three/dist/test/vox.test.js.map +1 -0
  52. package/node_modules/@playdrop/vox-three/package.json +25 -0
  53. package/node_modules/three/LICENSE +1 -1
  54. package/node_modules/three/README.md +7 -7
  55. package/node_modules/three/build/three.cjs +49655 -25499
  56. package/node_modules/three/build/three.core.js +58952 -0
  57. package/node_modules/three/build/three.core.min.js +6 -0
  58. package/node_modules/three/build/three.module.js +11162 -45962
  59. package/node_modules/three/build/three.module.min.js +2 -2
  60. package/node_modules/three/build/three.tsl.js +640 -0
  61. package/node_modules/three/build/three.tsl.min.js +6 -0
  62. package/node_modules/three/build/three.webgpu.js +79685 -0
  63. package/node_modules/three/build/three.webgpu.min.js +6 -0
  64. package/node_modules/three/build/three.webgpu.nodes.js +79456 -0
  65. package/node_modules/three/build/three.webgpu.nodes.min.js +6 -0
  66. package/node_modules/three/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  67. package/node_modules/three/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  68. package/node_modules/three/examples/jsm/Addons.js +8 -18
  69. package/node_modules/three/examples/jsm/animation/AnimationClipCreator.js +59 -7
  70. package/node_modules/three/examples/jsm/animation/CCDIKSolver.js +154 -45
  71. package/node_modules/three/examples/jsm/capabilities/WebGL.js +28 -23
  72. package/node_modules/three/examples/jsm/capabilities/WebGPU.js +19 -17
  73. package/node_modules/three/examples/jsm/controls/ArcballControls.js +636 -324
  74. package/node_modules/three/examples/jsm/controls/DragControls.js +332 -101
  75. package/node_modules/three/examples/jsm/controls/FirstPersonControls.js +291 -169
  76. package/node_modules/three/examples/jsm/controls/FlyControls.js +245 -191
  77. package/node_modules/three/examples/jsm/controls/MapControls.js +43 -9
  78. package/node_modules/three/examples/jsm/controls/OrbitControls.js +1156 -802
  79. package/node_modules/three/examples/jsm/controls/PointerLockControls.js +137 -35
  80. package/node_modules/three/examples/jsm/controls/TrackballControls.js +629 -456
  81. package/node_modules/three/examples/jsm/controls/TransformControls.js +442 -97
  82. package/node_modules/three/examples/jsm/csm/CSM.js +230 -17
  83. package/node_modules/three/examples/jsm/csm/CSMFrustum.js +61 -4
  84. package/node_modules/three/examples/jsm/csm/CSMHelper.js +50 -0
  85. package/node_modules/three/examples/jsm/csm/CSMShader.js +17 -5
  86. package/node_modules/three/examples/jsm/csm/CSMShadowNode.js +599 -0
  87. package/node_modules/three/examples/jsm/curves/CurveExtras.js +303 -31
  88. package/node_modules/three/examples/jsm/curves/NURBSCurve.js +91 -16
  89. package/node_modules/three/examples/jsm/curves/NURBSSurface.js +52 -6
  90. package/node_modules/three/examples/jsm/curves/NURBSUtils.js +102 -112
  91. package/node_modules/three/examples/jsm/curves/NURBSVolume.js +24 -4
  92. package/node_modules/three/examples/jsm/effects/AnaglyphEffect.js +39 -14
  93. package/node_modules/three/examples/jsm/effects/AsciiEffect.js +69 -22
  94. package/node_modules/three/examples/jsm/effects/OutlineEffect.js +61 -111
  95. package/node_modules/three/examples/jsm/effects/ParallaxBarrierEffect.js +48 -12
  96. package/node_modules/three/examples/jsm/effects/StereoEffect.js +37 -1
  97. package/node_modules/three/examples/jsm/environments/DebugEnvironment.js +50 -0
  98. package/node_modules/three/examples/jsm/environments/RoomEnvironment.js +82 -48
  99. package/node_modules/three/examples/jsm/exporters/DRACOExporter.js +59 -15
  100. package/node_modules/three/examples/jsm/exporters/EXRExporter.js +58 -19
  101. package/node_modules/three/examples/jsm/exporters/GLTFExporter.js +460 -174
  102. package/node_modules/three/examples/jsm/exporters/KTX2Exporter.js +80 -25
  103. package/node_modules/three/examples/jsm/exporters/OBJExporter.js +25 -1
  104. package/node_modules/three/examples/jsm/exporters/PLYExporter.js +51 -17
  105. package/node_modules/three/examples/jsm/exporters/STLExporter.js +27 -5
  106. package/node_modules/three/examples/jsm/exporters/USDZExporter.js +783 -268
  107. package/node_modules/three/examples/jsm/geometries/BoxLineGeometry.js +23 -0
  108. package/node_modules/three/examples/jsm/geometries/ConvexGeometry.js +19 -0
  109. package/node_modules/three/examples/jsm/geometries/DecalGeometry.js +94 -30
  110. package/node_modules/three/examples/jsm/geometries/ParametricFunctions.js +100 -0
  111. package/node_modules/three/examples/jsm/geometries/ParametricGeometry.js +38 -5
  112. package/node_modules/three/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
  113. package/node_modules/three/examples/jsm/geometries/TeapotGeometry.js +23 -38
  114. package/node_modules/three/examples/jsm/geometries/TextGeometry.js +48 -21
  115. package/node_modules/three/examples/jsm/gpgpu/BitonicSort.js +715 -0
  116. package/node_modules/three/examples/jsm/helpers/LightProbeHelper.js +79 -44
  117. package/node_modules/three/examples/jsm/helpers/LightProbeHelperGPU.js +102 -0
  118. package/node_modules/three/examples/jsm/helpers/OctreeHelper.js +36 -0
  119. package/node_modules/three/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
  120. package/node_modules/three/examples/jsm/helpers/RapierHelper.js +59 -0
  121. package/node_modules/three/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
  122. package/node_modules/three/examples/jsm/helpers/TextureHelper.js +28 -0
  123. package/node_modules/three/examples/jsm/helpers/TextureHelperGPU.js +214 -0
  124. package/node_modules/three/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
  125. package/node_modules/three/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
  126. package/node_modules/three/examples/jsm/helpers/ViewHelper.js +192 -65
  127. package/node_modules/three/examples/jsm/inspector/Inspector.js +427 -0
  128. package/node_modules/three/examples/jsm/inspector/RendererInspector.js +415 -0
  129. package/node_modules/three/examples/jsm/inspector/tabs/Console.js +204 -0
  130. package/node_modules/three/examples/jsm/inspector/tabs/Parameters.js +332 -0
  131. package/node_modules/three/examples/jsm/inspector/tabs/Performance.js +268 -0
  132. package/node_modules/three/examples/jsm/inspector/tabs/Viewer.js +166 -0
  133. package/node_modules/three/examples/jsm/inspector/ui/Graph.js +95 -0
  134. package/node_modules/three/examples/jsm/inspector/ui/Item.js +170 -0
  135. package/node_modules/three/examples/jsm/inspector/ui/List.js +75 -0
  136. package/node_modules/three/examples/jsm/inspector/ui/Profiler.js +170 -0
  137. package/node_modules/three/examples/jsm/inspector/ui/Style.js +654 -0
  138. package/node_modules/three/examples/jsm/inspector/ui/Tab.js +46 -0
  139. package/node_modules/three/examples/jsm/inspector/ui/Values.js +423 -0
  140. package/node_modules/three/examples/jsm/inspector/ui/utils.js +56 -0
  141. package/node_modules/three/examples/jsm/interactive/HTMLMesh.js +50 -21
  142. package/node_modules/three/examples/jsm/interactive/InteractiveGroup.js +170 -62
  143. package/node_modules/three/examples/jsm/interactive/SelectionBox.js +106 -9
  144. package/node_modules/three/examples/jsm/interactive/SelectionHelper.js +76 -30
  145. package/node_modules/three/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  146. package/node_modules/three/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  147. package/node_modules/three/examples/jsm/libs/demuxer_mp4.js +109 -0
  148. package/node_modules/three/examples/jsm/libs/draco/README.md +2 -2
  149. package/node_modules/three/examples/jsm/libs/fflate.module.js +694 -496
  150. package/node_modules/three/examples/jsm/libs/ktx-parse.module.js +1 -1
  151. package/node_modules/three/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  152. package/node_modules/three/examples/jsm/libs/motion-controllers.module.js +1 -1
  153. package/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.js +1 -8723
  154. package/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.module.js +1 -8734
  155. package/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  156. package/node_modules/three/examples/jsm/libs/tween.module.js +32 -14
  157. package/node_modules/three/examples/jsm/lighting/TiledLighting.js +42 -0
  158. package/node_modules/three/examples/jsm/lights/LightProbeGenerator.js +65 -14
  159. package/node_modules/three/examples/jsm/lights/RectAreaLightTexturesLib.js +127 -0
  160. package/node_modules/three/examples/jsm/lights/RectAreaLightUniformsLib.js +20 -59
  161. package/node_modules/three/examples/jsm/lines/Line2.js +41 -4
  162. package/node_modules/three/examples/jsm/lines/LineGeometry.js +80 -2
  163. package/node_modules/three/examples/jsm/lines/LineMaterial.js +100 -22
  164. package/node_modules/three/examples/jsm/lines/LineSegments2.js +69 -4
  165. package/node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
  166. package/node_modules/three/examples/jsm/lines/Wireframe.js +58 -6
  167. package/node_modules/three/examples/jsm/lines/WireframeGeometry2.js +27 -2
  168. package/node_modules/three/examples/jsm/lines/webgpu/Line2.js +46 -0
  169. package/node_modules/three/examples/jsm/lines/webgpu/LineSegments2.js +411 -0
  170. package/node_modules/three/examples/jsm/lines/webgpu/Wireframe.js +86 -0
  171. package/node_modules/three/examples/jsm/loaders/3DMLoader.js +86 -23
  172. package/node_modules/three/examples/jsm/loaders/3MFLoader.js +148 -5
  173. package/node_modules/three/examples/jsm/loaders/AMFLoader.js +32 -12
  174. package/node_modules/three/examples/jsm/loaders/BVHLoader.js +59 -12
  175. package/node_modules/three/examples/jsm/loaders/ColladaLoader.js +51 -12
  176. package/node_modules/three/examples/jsm/loaders/DDSLoader.js +68 -1
  177. package/node_modules/three/examples/jsm/loaders/DRACOLoader.js +149 -23
  178. package/node_modules/three/examples/jsm/loaders/EXRLoader.js +584 -109
  179. package/node_modules/three/examples/jsm/loaders/FBXLoader.js +165 -97
  180. package/node_modules/three/examples/jsm/loaders/FontLoader.js +83 -6
  181. package/node_modules/three/examples/jsm/loaders/GCodeLoader.js +37 -6
  182. package/node_modules/three/examples/jsm/loaders/GLTFLoader.js +337 -108
  183. package/node_modules/three/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
  184. package/node_modules/three/examples/jsm/loaders/HDRLoader.js +486 -0
  185. package/node_modules/three/examples/jsm/loaders/IESLoader.js +42 -0
  186. package/node_modules/three/examples/jsm/loaders/KMZLoader.js +33 -0
  187. package/node_modules/three/examples/jsm/loaders/KTX2Loader.js +441 -138
  188. package/node_modules/three/examples/jsm/loaders/KTXLoader.js +31 -10
  189. package/node_modules/three/examples/jsm/loaders/LDrawLoader.js +194 -145
  190. package/node_modules/three/examples/jsm/loaders/LUT3dlLoader.js +47 -25
  191. package/node_modules/three/examples/jsm/loaders/LUTCubeLoader.js +46 -23
  192. package/node_modules/three/examples/jsm/loaders/LUTImageLoader.js +79 -52
  193. package/node_modules/three/examples/jsm/loaders/LWOLoader.js +47 -20
  194. package/node_modules/three/examples/jsm/loaders/LottieLoader.js +54 -1
  195. package/node_modules/three/examples/jsm/loaders/MD2Loader.js +37 -1
  196. package/node_modules/three/examples/jsm/loaders/MDDLoader.js +57 -12
  197. package/node_modules/three/examples/jsm/loaders/MTLLoader.js +61 -35
  198. package/node_modules/three/examples/jsm/loaders/MaterialXLoader.js +291 -39
  199. package/node_modules/three/examples/jsm/loaders/NRRDLoader.js +38 -6
  200. package/node_modules/three/examples/jsm/loaders/OBJLoader.js +54 -4
  201. package/node_modules/three/examples/jsm/loaders/PCDLoader.js +183 -32
  202. package/node_modules/three/examples/jsm/loaders/PDBLoader.js +44 -4
  203. package/node_modules/three/examples/jsm/loaders/PLYLoader.js +78 -44
  204. package/node_modules/three/examples/jsm/loaders/PVRLoader.js +25 -6
  205. package/node_modules/three/examples/jsm/loaders/RGBELoader.js +6 -438
  206. package/node_modules/three/examples/jsm/loaders/STLLoader.js +51 -40
  207. package/node_modules/three/examples/jsm/loaders/SVGLoader.js +118 -24
  208. package/node_modules/three/examples/jsm/loaders/TDSLoader.js +92 -72
  209. package/node_modules/three/examples/jsm/loaders/TGALoader.js +23 -0
  210. package/node_modules/three/examples/jsm/loaders/TIFFLoader.js +23 -0
  211. package/node_modules/three/examples/jsm/loaders/TTFLoader.js +50 -3
  212. package/node_modules/three/examples/jsm/loaders/USDLoader.js +219 -0
  213. package/node_modules/three/examples/jsm/loaders/USDZLoader.js +4 -810
  214. package/node_modules/three/examples/jsm/loaders/UltraHDRLoader.js +630 -0
  215. package/node_modules/three/examples/jsm/loaders/VOXLoader.js +67 -2
  216. package/node_modules/three/examples/jsm/loaders/VRMLLoader.js +57 -21
  217. package/node_modules/three/examples/jsm/loaders/VTKLoader.js +119 -6
  218. package/node_modules/three/examples/jsm/loaders/XYZLoader.js +39 -2
  219. package/node_modules/three/examples/jsm/loaders/lwo/IFFParser.js +81 -78
  220. package/node_modules/three/examples/jsm/loaders/usd/USDAParser.js +741 -0
  221. package/node_modules/three/examples/jsm/loaders/usd/USDCParser.js +17 -0
  222. package/node_modules/three/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
  223. package/node_modules/three/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
  224. package/node_modules/three/examples/jsm/materials/MeshGouraudMaterial.js +9 -1
  225. package/node_modules/three/examples/jsm/materials/MeshPostProcessingMaterial.js +25 -2
  226. package/node_modules/three/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  227. package/node_modules/three/examples/jsm/math/Capsule.js +91 -14
  228. package/node_modules/three/examples/jsm/math/ColorConverter.js +22 -0
  229. package/node_modules/three/examples/jsm/math/ColorSpaces.js +147 -0
  230. package/node_modules/three/examples/jsm/math/ConvexHull.js +517 -93
  231. package/node_modules/three/examples/jsm/math/ImprovedNoise.js +32 -15
  232. package/node_modules/three/examples/jsm/math/Lut.js +113 -0
  233. package/node_modules/three/examples/jsm/math/MeshSurfaceSampler.js +78 -13
  234. package/node_modules/three/examples/jsm/math/OBB.js +141 -29
  235. package/node_modules/three/examples/jsm/math/Octree.js +177 -25
  236. package/node_modules/three/examples/jsm/math/SimplexNoise.js +68 -42
  237. package/node_modules/three/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
  238. package/node_modules/three/examples/jsm/misc/GPUComputationRenderer.js +105 -45
  239. package/node_modules/three/examples/jsm/misc/Gyroscope.js +12 -0
  240. package/node_modules/three/examples/jsm/misc/MD2Character.js +117 -2
  241. package/node_modules/three/examples/jsm/misc/MD2CharacterComplex.js +175 -11
  242. package/node_modules/three/examples/jsm/misc/MorphAnimMesh.js +44 -0
  243. package/node_modules/three/examples/jsm/misc/MorphBlendMesh.js +103 -0
  244. package/node_modules/three/examples/jsm/misc/ProgressiveLightMap.js +101 -54
  245. package/node_modules/three/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
  246. package/node_modules/three/examples/jsm/misc/RollerCoaster.js +57 -0
  247. package/node_modules/three/examples/jsm/misc/TubePainter.js +437 -40
  248. package/node_modules/three/examples/jsm/misc/Volume.js +123 -75
  249. package/node_modules/three/examples/jsm/misc/VolumeSlice.js +95 -48
  250. package/node_modules/three/examples/jsm/modifiers/CurveModifier.js +77 -47
  251. package/node_modules/three/examples/jsm/modifiers/CurveModifierGPU.js +256 -0
  252. package/node_modules/three/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
  253. package/node_modules/three/examples/jsm/modifiers/SimplifyModifier.js +26 -11
  254. package/node_modules/three/examples/jsm/modifiers/TessellateModifier.js +35 -2
  255. package/node_modules/three/examples/jsm/objects/GroundedSkybox.js +25 -6
  256. package/node_modules/three/examples/jsm/objects/Lensflare.js +96 -4
  257. package/node_modules/three/examples/jsm/objects/LensflareMesh.js +376 -0
  258. package/node_modules/three/examples/jsm/objects/MarchingCubes.js +90 -5
  259. package/node_modules/three/examples/jsm/objects/Reflector.js +76 -2
  260. package/node_modules/three/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
  261. package/node_modules/three/examples/jsm/objects/Refractor.js +62 -0
  262. package/node_modules/three/examples/jsm/objects/ShadowMesh.js +54 -4
  263. package/node_modules/three/examples/jsm/objects/Sky.js +30 -12
  264. package/node_modules/three/examples/jsm/objects/SkyMesh.js +243 -0
  265. package/node_modules/three/examples/jsm/objects/Water.js +45 -5
  266. package/node_modules/three/examples/jsm/objects/Water2.js +44 -4
  267. package/node_modules/three/examples/jsm/objects/Water2Mesh.js +199 -0
  268. package/node_modules/three/examples/jsm/objects/WaterMesh.js +196 -0
  269. package/node_modules/three/examples/jsm/physics/AmmoPhysics.js +48 -0
  270. package/node_modules/three/examples/jsm/physics/JoltPhysics.js +330 -0
  271. package/node_modules/three/examples/jsm/physics/RapierPhysics.js +231 -19
  272. package/node_modules/three/examples/jsm/postprocessing/AfterimagePass.js +110 -29
  273. package/node_modules/three/examples/jsm/postprocessing/BloomPass.js +128 -26
  274. package/node_modules/three/examples/jsm/postprocessing/BokehPass.js +99 -22
  275. package/node_modules/three/examples/jsm/postprocessing/ClearPass.js +54 -3
  276. package/node_modules/three/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
  277. package/node_modules/three/examples/jsm/postprocessing/DotScreenPass.js +59 -10
  278. package/node_modules/three/examples/jsm/postprocessing/EffectComposer.js +135 -3
  279. package/node_modules/three/examples/jsm/postprocessing/FXAAPass.js +40 -0
  280. package/node_modules/three/examples/jsm/postprocessing/FilmPass.js +54 -5
  281. package/node_modules/three/examples/jsm/postprocessing/GTAOPass.js +202 -57
  282. package/node_modules/three/examples/jsm/postprocessing/GlitchPass.js +86 -37
  283. package/node_modules/three/examples/jsm/postprocessing/HalftonePass.js +65 -10
  284. package/node_modules/three/examples/jsm/postprocessing/LUTPass.js +43 -79
  285. package/node_modules/three/examples/jsm/postprocessing/MaskPass.js +91 -0
  286. package/node_modules/three/examples/jsm/postprocessing/OutlinePass.js +277 -155
  287. package/node_modules/three/examples/jsm/postprocessing/OutputPass.js +58 -14
  288. package/node_modules/three/examples/jsm/postprocessing/Pass.js +100 -4
  289. package/node_modules/three/examples/jsm/postprocessing/RenderPass.js +85 -1
  290. package/node_modules/three/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
  291. package/node_modules/three/examples/jsm/postprocessing/RenderTransitionPass.js +267 -0
  292. package/node_modules/three/examples/jsm/postprocessing/SAOPass.js +128 -56
  293. package/node_modules/three/examples/jsm/postprocessing/SMAAPass.js +106 -75
  294. package/node_modules/three/examples/jsm/postprocessing/SSAARenderPass.js +120 -35
  295. package/node_modules/three/examples/jsm/postprocessing/SSAOPass.js +174 -67
  296. package/node_modules/three/examples/jsm/postprocessing/SSRPass.js +268 -53
  297. package/node_modules/three/examples/jsm/postprocessing/SavePass.js +69 -16
  298. package/node_modules/three/examples/jsm/postprocessing/ShaderPass.js +65 -7
  299. package/node_modules/three/examples/jsm/postprocessing/TAARenderPass.js +79 -24
  300. package/node_modules/three/examples/jsm/postprocessing/TexturePass.js +72 -8
  301. package/node_modules/three/examples/jsm/postprocessing/UnrealBloomPass.js +125 -46
  302. package/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +122 -9
  303. package/node_modules/three/examples/jsm/renderers/CSS3DRenderer.js +133 -8
  304. package/node_modules/three/examples/jsm/renderers/Projector.js +20 -2
  305. package/node_modules/three/examples/jsm/renderers/SVGRenderer.js +134 -5
  306. package/node_modules/three/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
  307. package/node_modules/three/examples/jsm/shaders/AfterimageShader.js +8 -3
  308. package/node_modules/three/examples/jsm/shaders/BasicShader.js +8 -1
  309. package/node_modules/three/examples/jsm/shaders/BleachBypassShader.js +11 -5
  310. package/node_modules/three/examples/jsm/shaders/BlendShader.js +8 -1
  311. package/node_modules/three/examples/jsm/shaders/BokehShader.js +9 -3
  312. package/node_modules/three/examples/jsm/shaders/BokehShader2.js +11 -4
  313. package/node_modules/three/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
  314. package/node_modules/three/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
  315. package/node_modules/three/examples/jsm/shaders/ColorifyShader.js +9 -3
  316. package/node_modules/three/examples/jsm/shaders/ConvolutionShader.js +9 -38
  317. package/node_modules/three/examples/jsm/shaders/CopyShader.js +8 -1
  318. package/node_modules/three/examples/jsm/shaders/DOFMipMapShader.js +10 -3
  319. package/node_modules/three/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
  320. package/node_modules/three/examples/jsm/shaders/DigitalGlitch.js +10 -7
  321. package/node_modules/three/examples/jsm/shaders/DotScreenShader.js +8 -3
  322. package/node_modules/three/examples/jsm/shaders/ExposureShader.js +8 -1
  323. package/node_modules/three/examples/jsm/shaders/FXAAShader.js +243 -233
  324. package/node_modules/three/examples/jsm/shaders/FilmShader.js +13 -0
  325. package/node_modules/three/examples/jsm/shaders/FocusShader.js +8 -3
  326. package/node_modules/three/examples/jsm/shaders/FreiChenShader.js +10 -3
  327. package/node_modules/three/examples/jsm/shaders/GTAOShader.js +37 -40
  328. package/node_modules/three/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
  329. package/node_modules/three/examples/jsm/shaders/GodRaysShader.js +20 -8
  330. package/node_modules/three/examples/jsm/shaders/HalftoneShader.js +13 -4
  331. package/node_modules/three/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
  332. package/node_modules/three/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
  333. package/node_modules/three/examples/jsm/shaders/HueSaturationShader.js +10 -3
  334. package/node_modules/three/examples/jsm/shaders/KaleidoShader.js +11 -4
  335. package/node_modules/three/examples/jsm/shaders/LuminosityHighPassShader.js +9 -7
  336. package/node_modules/three/examples/jsm/shaders/LuminosityShader.js +8 -2
  337. package/node_modules/three/examples/jsm/shaders/MirrorShader.js +10 -4
  338. package/node_modules/three/examples/jsm/shaders/NormalMapShader.js +7 -2
  339. package/node_modules/three/examples/jsm/shaders/OutputShader.js +24 -2
  340. package/node_modules/three/examples/jsm/shaders/PoissonDenoiseShader.js +24 -15
  341. package/node_modules/three/examples/jsm/shaders/RGBShiftShader.js +8 -1
  342. package/node_modules/three/examples/jsm/shaders/SAOShader.js +10 -1
  343. package/node_modules/three/examples/jsm/shaders/SMAAShader.js +24 -1
  344. package/node_modules/three/examples/jsm/shaders/SSAOShader.js +26 -5
  345. package/node_modules/three/examples/jsm/shaders/SSRShader.js +26 -1
  346. package/node_modules/three/examples/jsm/shaders/SepiaShader.js +8 -3
  347. package/node_modules/three/examples/jsm/shaders/SobelOperatorShader.js +9 -3
  348. package/node_modules/three/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
  349. package/node_modules/three/examples/jsm/shaders/TechnicolorShader.js +10 -4
  350. package/node_modules/three/examples/jsm/shaders/ToonShader.js +29 -6
  351. package/node_modules/three/examples/jsm/shaders/TriangleBlurShader.js +9 -4
  352. package/node_modules/three/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -4
  353. package/node_modules/three/examples/jsm/shaders/VelocityShader.js +8 -1
  354. package/node_modules/three/examples/jsm/shaders/VerticalBlurShader.js +9 -2
  355. package/node_modules/three/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
  356. package/node_modules/three/examples/jsm/shaders/VignetteShader.js +8 -3
  357. package/node_modules/three/examples/jsm/shaders/VolumeShader.js +11 -2
  358. package/node_modules/three/examples/jsm/shaders/WaterRefractionShader.js +11 -0
  359. package/node_modules/three/examples/jsm/textures/FlakesTexture.js +14 -0
  360. package/node_modules/three/examples/jsm/transpiler/AST.js +392 -31
  361. package/node_modules/three/examples/jsm/transpiler/GLSLDecoder.js +366 -136
  362. package/node_modules/three/examples/jsm/transpiler/Linker.js +327 -0
  363. package/node_modules/three/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  364. package/node_modules/three/examples/jsm/transpiler/TSLEncoder.js +336 -111
  365. package/node_modules/three/examples/jsm/transpiler/Transpiler.js +50 -1
  366. package/node_modules/three/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  367. package/node_modules/three/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  368. package/node_modules/three/examples/jsm/tsl/display/AfterImageNode.js +244 -0
  369. package/node_modules/three/examples/jsm/tsl/display/AnaglyphPassNode.js +107 -0
  370. package/node_modules/three/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
  371. package/node_modules/three/examples/jsm/tsl/display/BleachBypass.js +33 -0
  372. package/node_modules/three/examples/jsm/tsl/display/BloomNode.js +524 -0
  373. package/node_modules/three/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  374. package/node_modules/three/examples/jsm/tsl/display/DenoiseNode.js +334 -0
  375. package/node_modules/three/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
  376. package/node_modules/three/examples/jsm/tsl/display/DotScreenNode.js +104 -0
  377. package/node_modules/three/examples/jsm/tsl/display/FXAANode.js +365 -0
  378. package/node_modules/three/examples/jsm/tsl/display/FilmNode.js +101 -0
  379. package/node_modules/three/examples/jsm/tsl/display/GTAONode.js +570 -0
  380. package/node_modules/three/examples/jsm/tsl/display/GaussianBlurNode.js +380 -0
  381. package/node_modules/three/examples/jsm/tsl/display/LensflareNode.js +279 -0
  382. package/node_modules/three/examples/jsm/tsl/display/Lut3DNode.js +109 -0
  383. package/node_modules/three/examples/jsm/tsl/display/MotionBlur.js +33 -0
  384. package/node_modules/three/examples/jsm/tsl/display/OutlineNode.js +762 -0
  385. package/node_modules/three/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
  386. package/node_modules/three/examples/jsm/tsl/display/PixelationPassNode.js +334 -0
  387. package/node_modules/three/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
  388. package/node_modules/three/examples/jsm/tsl/display/SMAANode.js +768 -0
  389. package/node_modules/three/examples/jsm/tsl/display/SSAAPassNode.js +358 -0
  390. package/node_modules/three/examples/jsm/tsl/display/SSGINode.js +654 -0
  391. package/node_modules/three/examples/jsm/tsl/display/SSRNode.js +656 -0
  392. package/node_modules/three/examples/jsm/tsl/display/SSSNode.js +488 -0
  393. package/node_modules/three/examples/jsm/tsl/display/Sepia.js +24 -0
  394. package/node_modules/three/examples/jsm/tsl/display/SobelOperatorNode.js +168 -0
  395. package/node_modules/three/examples/jsm/tsl/display/StereoCompositePassNode.js +185 -0
  396. package/node_modules/three/examples/jsm/tsl/display/StereoPassNode.js +120 -0
  397. package/node_modules/three/examples/jsm/tsl/display/TRAANode.js +578 -0
  398. package/node_modules/three/examples/jsm/tsl/display/TransitionNode.js +141 -0
  399. package/node_modules/three/examples/jsm/tsl/display/boxBlur.js +65 -0
  400. package/node_modules/three/examples/jsm/tsl/display/hashBlur.js +54 -0
  401. package/node_modules/three/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
  402. package/node_modules/three/examples/jsm/tsl/math/Bayer.js +34 -0
  403. package/node_modules/three/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  404. package/node_modules/three/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  405. package/node_modules/three/examples/jsm/tsl/utils/Raymarching.js +70 -0
  406. package/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +109 -45
  407. package/node_modules/three/examples/jsm/utils/CameraUtils.js +15 -6
  408. package/node_modules/three/examples/jsm/utils/GeometryCompressionUtils.js +54 -146
  409. package/node_modules/three/examples/jsm/utils/GeometryUtils.js +32 -27
  410. package/node_modules/three/examples/jsm/utils/LDrawUtils.js +13 -4
  411. package/node_modules/three/examples/jsm/utils/SceneOptimizer.js +458 -0
  412. package/node_modules/three/examples/jsm/utils/SceneUtils.js +112 -3
  413. package/node_modules/three/examples/jsm/utils/ShadowMapViewer.js +51 -31
  414. package/node_modules/three/examples/jsm/utils/ShadowMapViewerGPU.js +233 -0
  415. package/node_modules/three/examples/jsm/utils/SkeletonUtils.js +145 -68
  416. package/node_modules/three/examples/jsm/utils/SortUtils.js +23 -8
  417. package/node_modules/three/examples/jsm/utils/UVsDebug.js +12 -4
  418. package/node_modules/three/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +19 -2
  419. package/node_modules/three/examples/jsm/utils/WebGPUTextureUtils.js +81 -0
  420. package/node_modules/three/examples/jsm/utils/WorkerPool.js +67 -2
  421. package/node_modules/three/examples/jsm/webxr/ARButton.js +19 -0
  422. package/node_modules/three/examples/jsm/webxr/OculusHandModel.js +87 -2
  423. package/node_modules/three/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
  424. package/node_modules/three/examples/jsm/webxr/Text2D.js +20 -6
  425. package/node_modules/three/examples/jsm/webxr/VRButton.js +44 -5
  426. package/node_modules/three/examples/jsm/webxr/XRButton.js +23 -1
  427. package/node_modules/three/examples/jsm/webxr/XRControllerModelFactory.js +103 -4
  428. package/node_modules/three/examples/jsm/webxr/XREstimatedLight.js +35 -4
  429. package/node_modules/three/examples/jsm/webxr/XRHandMeshModel.js +37 -0
  430. package/node_modules/three/examples/jsm/webxr/XRHandModelFactory.js +101 -9
  431. package/node_modules/three/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
  432. package/node_modules/three/examples/jsm/webxr/XRPlanes.js +18 -0
  433. package/node_modules/three/package.json +25 -20
  434. package/node_modules/three/src/Three.Core.js +185 -0
  435. package/node_modules/three/src/Three.Legacy.js +0 -1
  436. package/node_modules/three/src/Three.TSL.js +633 -0
  437. package/node_modules/three/src/Three.WebGPU.Nodes.js +26 -0
  438. package/node_modules/three/src/Three.WebGPU.js +28 -0
  439. package/node_modules/three/src/Three.js +1 -176
  440. package/node_modules/three/src/animation/AnimationAction.js +262 -30
  441. package/node_modules/three/src/animation/AnimationClip.js +164 -9
  442. package/node_modules/three/src/animation/AnimationMixer.js +99 -15
  443. package/node_modules/three/src/animation/AnimationObjectGroup.js +45 -21
  444. package/node_modules/three/src/animation/AnimationUtils.js +169 -19
  445. package/node_modules/three/src/animation/KeyframeTrack.js +151 -16
  446. package/node_modules/three/src/animation/PropertyBinding.js +91 -16
  447. package/node_modules/three/src/animation/PropertyMixer.js +72 -5
  448. package/node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js +42 -6
  449. package/node_modules/three/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  450. package/node_modules/three/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  451. package/node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js +31 -3
  452. package/node_modules/three/src/animation/tracks/StringKeyframeTrack.js +42 -2
  453. package/node_modules/three/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  454. package/node_modules/three/src/audio/Audio.js +388 -10
  455. package/node_modules/three/src/audio/AudioAnalyser.js +58 -1
  456. package/node_modules/three/src/audio/AudioContext.js +15 -0
  457. package/node_modules/three/src/audio/AudioListener.js +89 -10
  458. package/node_modules/three/src/audio/PositionalAudio.js +107 -0
  459. package/node_modules/three/src/cameras/ArrayCamera.js +37 -0
  460. package/node_modules/three/src/cameras/Camera.js +61 -0
  461. package/node_modules/three/src/cameras/CubeCamera.js +66 -0
  462. package/node_modules/three/src/cameras/OrthographicCamera.js +110 -1
  463. package/node_modules/three/src/cameras/PerspectiveCamera.js +174 -35
  464. package/node_modules/three/src/cameras/StereoCamera.js +48 -2
  465. package/node_modules/three/src/constants.js +1477 -18
  466. package/node_modules/three/src/core/BufferAttribute.js +417 -23
  467. package/node_modules/three/src/core/BufferGeometry.js +416 -49
  468. package/node_modules/three/src/core/Clock.js +62 -8
  469. package/node_modules/three/src/core/EventDispatcher.js +52 -8
  470. package/node_modules/three/src/core/GLBufferAttribute.js +113 -2
  471. package/node_modules/three/src/core/InstancedBufferAttribute.js +29 -0
  472. package/node_modules/three/src/core/InstancedBufferGeometry.js +20 -0
  473. package/node_modules/three/src/core/InstancedInterleavedBuffer.js +26 -0
  474. package/node_modules/three/src/core/InterleavedBuffer.js +141 -16
  475. package/node_modules/three/src/core/InterleavedBufferAttribute.js +200 -2
  476. package/node_modules/three/src/core/Layers.js +71 -10
  477. package/node_modules/three/src/core/Object3D.js +665 -54
  478. package/node_modules/three/src/core/Raycaster.js +160 -8
  479. package/node_modules/three/src/core/RenderTarget.js +297 -36
  480. package/node_modules/three/src/core/RenderTarget3D.js +48 -0
  481. package/node_modules/three/src/core/Timer.js +184 -0
  482. package/node_modules/three/src/core/Uniform.js +29 -0
  483. package/node_modules/three/src/core/UniformsGroup.js +84 -2
  484. package/node_modules/three/src/extras/Controls.js +120 -0
  485. package/node_modules/three/src/extras/DataUtils.js +50 -9
  486. package/node_modules/three/src/extras/Earcut.js +18 -779
  487. package/node_modules/three/src/extras/ImageUtils.js +22 -14
  488. package/node_modules/three/src/extras/PMREMGenerator.js +329 -64
  489. package/node_modules/three/src/extras/ShapeUtils.js +24 -2
  490. package/node_modules/three/src/extras/TextureUtils.js +293 -0
  491. package/node_modules/three/src/extras/core/Curve.js +156 -55
  492. package/node_modules/three/src/extras/core/CurvePath.js +63 -22
  493. package/node_modules/three/src/extras/core/Interpolations.js +34 -2
  494. package/node_modules/three/src/extras/core/Path.js +134 -1
  495. package/node_modules/three/src/extras/core/Shape.js +66 -3
  496. package/node_modules/three/src/extras/core/ShapePath.js +80 -4
  497. package/node_modules/three/src/extras/curves/ArcCurve.js +22 -0
  498. package/node_modules/three/src/extras/curves/CatmullRomCurve3.js +89 -18
  499. package/node_modules/three/src/extras/curves/CubicBezierCurve.js +67 -0
  500. package/node_modules/three/src/extras/curves/CubicBezierCurve3.js +50 -0
  501. package/node_modules/three/src/extras/curves/EllipseCurve.js +104 -2
  502. package/node_modules/three/src/extras/curves/LineCurve.js +36 -0
  503. package/node_modules/three/src/extras/curves/LineCurve3.js +36 -0
  504. package/node_modules/three/src/extras/curves/QuadraticBezierCurve.js +59 -0
  505. package/node_modules/three/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  506. package/node_modules/three/src/extras/curves/SplineCurve.js +48 -0
  507. package/node_modules/three/src/extras/lib/earcut.js +685 -0
  508. package/node_modules/three/src/geometries/BoxGeometry.js +39 -0
  509. package/node_modules/three/src/geometries/CapsuleGeometry.js +196 -11
  510. package/node_modules/three/src/geometries/CircleGeometry.js +41 -0
  511. package/node_modules/three/src/geometries/ConeGeometry.js +39 -0
  512. package/node_modules/three/src/geometries/CylinderGeometry.js +51 -4
  513. package/node_modules/three/src/geometries/DodecahedronGeometry.js +33 -0
  514. package/node_modules/three/src/geometries/EdgesGeometry.js +30 -2
  515. package/node_modules/three/src/geometries/ExtrudeGeometry.js +146 -50
  516. package/node_modules/three/src/geometries/IcosahedronGeometry.js +33 -0
  517. package/node_modules/three/src/geometries/LatheGeometry.js +44 -3
  518. package/node_modules/three/src/geometries/OctahedronGeometry.js +33 -0
  519. package/node_modules/three/src/geometries/PlaneGeometry.js +35 -0
  520. package/node_modules/three/src/geometries/PolyhedronGeometry.js +29 -0
  521. package/node_modules/three/src/geometries/RingGeometry.js +37 -0
  522. package/node_modules/three/src/geometries/ShapeGeometry.js +38 -0
  523. package/node_modules/three/src/geometries/SphereGeometry.js +38 -0
  524. package/node_modules/three/src/geometries/TetrahedronGeometry.js +33 -0
  525. package/node_modules/three/src/geometries/TorusGeometry.js +36 -0
  526. package/node_modules/three/src/geometries/TorusKnotGeometry.js +39 -0
  527. package/node_modules/three/src/geometries/TubeGeometry.js +50 -0
  528. package/node_modules/three/src/geometries/WireframeGeometry.js +32 -0
  529. package/node_modules/three/src/helpers/ArrowHelper.js +62 -5
  530. package/node_modules/three/src/helpers/AxesHelper.js +28 -0
  531. package/node_modules/three/src/helpers/Box3Helper.js +28 -0
  532. package/node_modules/three/src/helpers/BoxHelper.js +43 -7
  533. package/node_modules/three/src/helpers/CameraHelper.js +100 -27
  534. package/node_modules/three/src/helpers/DirectionalLightHelper.js +52 -0
  535. package/node_modules/three/src/helpers/GridHelper.js +26 -0
  536. package/node_modules/three/src/helpers/HemisphereLightHelper.js +39 -0
  537. package/node_modules/three/src/helpers/PlaneHelper.js +33 -0
  538. package/node_modules/three/src/helpers/PointLightHelper.js +43 -0
  539. package/node_modules/three/src/helpers/PolarGridHelper.js +30 -0
  540. package/node_modules/three/src/helpers/SkeletonHelper.js +73 -7
  541. package/node_modules/three/src/helpers/SpotLightHelper.js +58 -1
  542. package/node_modules/three/src/lights/AmbientLight.js +25 -0
  543. package/node_modules/three/src/lights/DirectionalLight.js +57 -0
  544. package/node_modules/three/src/lights/DirectionalLightShadow.js +15 -0
  545. package/node_modules/three/src/lights/HemisphereLight.js +32 -0
  546. package/node_modules/three/src/lights/Light.js +37 -0
  547. package/node_modules/three/src/lights/LightProbe.js +43 -0
  548. package/node_modules/three/src/lights/LightShadow.js +198 -7
  549. package/node_modules/three/src/lights/PointLight.js +59 -0
  550. package/node_modules/three/src/lights/PointLightShadow.js +22 -1
  551. package/node_modules/three/src/lights/RectAreaLight.js +59 -0
  552. package/node_modules/three/src/lights/SpotLight.js +102 -0
  553. package/node_modules/three/src/lights/SpotLightShadow.js +33 -3
  554. package/node_modules/three/src/lights/webgpu/IESSpotLight.js +46 -0
  555. package/node_modules/three/src/lights/webgpu/ProjectorLight.js +46 -0
  556. package/node_modules/three/src/loaders/AnimationLoader.js +34 -2
  557. package/node_modules/three/src/loaders/AudioLoader.js +34 -2
  558. package/node_modules/three/src/loaders/BufferGeometryLoader.js +38 -13
  559. package/node_modules/three/src/loaders/Cache.js +47 -2
  560. package/node_modules/three/src/loaders/CompressedTextureLoader.js +36 -3
  561. package/node_modules/three/src/loaders/CubeTextureLoader.js +45 -0
  562. package/node_modules/three/src/loaders/DataTextureLoader.js +45 -8
  563. package/node_modules/three/src/loaders/FileLoader.js +90 -6
  564. package/node_modules/three/src/loaders/ImageBitmapLoader.js +108 -11
  565. package/node_modules/three/src/loaders/ImageLoader.js +85 -8
  566. package/node_modules/three/src/loaders/Loader.js +144 -0
  567. package/node_modules/three/src/loaders/LoaderUtils.js +18 -34
  568. package/node_modules/three/src/loaders/LoadingManager.js +187 -0
  569. package/node_modules/three/src/loaders/MaterialLoader.js +70 -4
  570. package/node_modules/three/src/loaders/ObjectLoader.js +146 -30
  571. package/node_modules/three/src/loaders/TextureLoader.js +33 -0
  572. package/node_modules/three/src/loaders/nodes/NodeLoader.js +194 -0
  573. package/node_modules/three/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  574. package/node_modules/three/src/loaders/nodes/NodeObjectLoader.js +151 -0
  575. package/node_modules/three/src/materials/LineBasicMaterial.js +74 -1
  576. package/node_modules/three/src/materials/LineDashedMaterial.js +52 -1
  577. package/node_modules/three/src/materials/Material.js +504 -11
  578. package/node_modules/three/src/materials/MeshBasicMaterial.js +172 -3
  579. package/node_modules/three/src/materials/MeshDepthMaterial.js +94 -0
  580. package/node_modules/three/src/materials/MeshDistanceMaterial.js +76 -0
  581. package/node_modules/three/src/materials/MeshLambertMaterial.js +278 -1
  582. package/node_modules/three/src/materials/MeshMatcapMaterial.js +164 -0
  583. package/node_modules/three/src/materials/MeshNormalMaterial.js +114 -0
  584. package/node_modules/three/src/materials/MeshPhongMaterial.js +293 -1
  585. package/node_modules/three/src/materials/MeshPhysicalMaterial.js +316 -4
  586. package/node_modules/three/src/materials/MeshStandardMaterial.js +304 -3
  587. package/node_modules/three/src/materials/MeshToonMaterial.js +219 -0
  588. package/node_modules/three/src/materials/PointsMaterial.js +89 -0
  589. package/node_modules/three/src/materials/RawShaderMaterial.js +25 -0
  590. package/node_modules/three/src/materials/ShaderMaterial.js +215 -10
  591. package/node_modules/three/src/materials/ShadowMaterial.js +54 -0
  592. package/node_modules/three/src/materials/SpriteMaterial.js +82 -0
  593. package/node_modules/three/{examples/jsm/nodes/materials → src/materials/nodes}/Line2NodeMaterial.js +206 -100
  594. package/node_modules/three/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  595. package/node_modules/three/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  596. package/node_modules/three/src/materials/nodes/MeshBasicNodeMaterial.js +134 -0
  597. package/node_modules/three/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  598. package/node_modules/three/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  599. package/node_modules/three/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  600. package/node_modules/three/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  601. package/node_modules/three/src/materials/nodes/MeshPhysicalNodeMaterial.js +518 -0
  602. package/node_modules/three/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  603. package/node_modules/three/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  604. package/node_modules/three/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  605. package/node_modules/three/src/materials/nodes/NodeMaterial.js +1310 -0
  606. package/node_modules/three/{examples/jsm/nodes/materials/Materials.js → src/materials/nodes/NodeMaterials.js} +7 -2
  607. package/node_modules/three/src/materials/nodes/PointsNodeMaterial.js +211 -0
  608. package/node_modules/three/src/materials/nodes/ShadowNodeMaterial.js +76 -0
  609. package/node_modules/three/src/materials/nodes/SpriteNodeMaterial.js +186 -0
  610. package/node_modules/three/src/materials/nodes/VolumeNodeMaterial.js +81 -0
  611. package/node_modules/three/src/materials/nodes/manager/NodeMaterialObserver.js +613 -0
  612. package/node_modules/three/src/math/Box2.js +181 -4
  613. package/node_modules/three/src/math/Box3.js +277 -6
  614. package/node_modules/three/src/math/Color.js +355 -11
  615. package/node_modules/three/src/math/ColorManagement.js +161 -85
  616. package/node_modules/three/src/math/Cylindrical.js +65 -6
  617. package/node_modules/three/src/math/Euler.js +139 -5
  618. package/node_modules/three/src/math/Frustum.js +108 -9
  619. package/node_modules/three/src/math/FrustumArray.js +258 -0
  620. package/node_modules/three/src/math/Interpolant.js +87 -8
  621. package/node_modules/three/src/math/Line3.js +223 -2
  622. package/node_modules/three/src/math/MathUtils.js +408 -20
  623. package/node_modules/three/src/math/Matrix2.js +124 -0
  624. package/node_modules/three/src/math/Matrix3.js +229 -4
  625. package/node_modules/three/src/math/Matrix4.js +416 -30
  626. package/node_modules/three/src/math/Plane.js +164 -2
  627. package/node_modules/three/src/math/Quaternion.js +345 -86
  628. package/node_modules/three/src/math/Ray.js +162 -0
  629. package/node_modules/three/src/math/Sphere.js +175 -0
  630. package/node_modules/three/src/math/Spherical.js +74 -13
  631. package/node_modules/three/src/math/SphericalHarmonics3.js +112 -14
  632. package/node_modules/three/src/math/Triangle.js +230 -2
  633. package/node_modules/three/src/math/Vector2.js +396 -10
  634. package/node_modules/three/src/math/Vector3.js +557 -20
  635. package/node_modules/three/src/math/Vector4.js +428 -9
  636. package/node_modules/three/src/math/interpolants/CubicInterpolant.js +10 -1
  637. package/node_modules/three/src/math/interpolants/DiscreteInterpolant.js +10 -2
  638. package/node_modules/three/src/math/interpolants/LinearInterpolant.js +13 -0
  639. package/node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  640. package/node_modules/three/src/nodes/Nodes.js +148 -0
  641. package/node_modules/three/src/nodes/TSL.js +173 -0
  642. package/node_modules/three/src/nodes/accessors/AccessorsUtils.js +53 -0
  643. package/node_modules/three/src/nodes/accessors/Arrays.js +68 -0
  644. package/node_modules/three/src/nodes/accessors/BatchNode.js +163 -0
  645. package/node_modules/three/src/nodes/accessors/Bitangent.js +82 -0
  646. package/node_modules/three/src/nodes/accessors/BufferAttributeNode.js +340 -0
  647. package/node_modules/three/src/nodes/accessors/BufferNode.js +101 -0
  648. package/node_modules/three/src/nodes/accessors/BuiltinNode.js +63 -0
  649. package/node_modules/three/src/nodes/accessors/Camera.js +282 -0
  650. package/node_modules/three/src/nodes/accessors/ClippingNode.js +255 -0
  651. package/node_modules/three/src/nodes/accessors/CubeTextureNode.js +190 -0
  652. package/node_modules/three/src/nodes/accessors/InstanceNode.js +244 -0
  653. package/node_modules/three/src/nodes/accessors/InstancedMeshNode.js +50 -0
  654. package/node_modules/three/src/nodes/accessors/Lights.js +139 -0
  655. package/node_modules/three/src/nodes/accessors/MaterialNode.js +775 -0
  656. package/node_modules/three/src/nodes/accessors/MaterialProperties.js +59 -0
  657. package/node_modules/three/src/nodes/accessors/MaterialReferenceNode.js +85 -0
  658. package/node_modules/three/src/nodes/accessors/ModelNode.js +184 -0
  659. package/node_modules/three/src/nodes/accessors/ModelViewProjectionNode.js +13 -0
  660. package/node_modules/three/{examples/jsm → src}/nodes/accessors/MorphNode.js +122 -57
  661. package/node_modules/three/src/nodes/accessors/Normal.js +243 -0
  662. package/node_modules/three/src/nodes/accessors/Object3DNode.js +268 -0
  663. package/node_modules/three/src/nodes/accessors/PointUVNode.js +55 -0
  664. package/node_modules/three/src/nodes/accessors/Position.js +90 -0
  665. package/node_modules/three/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  666. package/node_modules/three/src/nodes/accessors/ReferenceNode.js +424 -0
  667. package/node_modules/three/src/nodes/accessors/ReflectVector.js +36 -0
  668. package/node_modules/three/src/nodes/accessors/RendererReferenceNode.js +79 -0
  669. package/node_modules/three/src/nodes/accessors/SceneNode.js +145 -0
  670. package/node_modules/three/src/nodes/accessors/SkinningNode.js +327 -0
  671. package/node_modules/three/src/nodes/accessors/StorageBufferNode.js +416 -0
  672. package/node_modules/three/src/nodes/accessors/StorageTextureNode.js +264 -0
  673. package/node_modules/three/src/nodes/accessors/Tangent.js +70 -0
  674. package/node_modules/three/src/nodes/accessors/TangentUtils.js +46 -0
  675. package/node_modules/three/src/nodes/accessors/Texture3DNode.js +199 -0
  676. package/node_modules/three/{examples/jsm/nodes/accessors/TextureBicubicNode.js → src/nodes/accessors/TextureBicubic.js} +28 -30
  677. package/node_modules/three/src/nodes/accessors/TextureNode.js +927 -0
  678. package/node_modules/three/src/nodes/accessors/TextureSizeNode.js +77 -0
  679. package/node_modules/three/src/nodes/accessors/UV.js +11 -0
  680. package/node_modules/three/src/nodes/accessors/UniformArrayNode.js +348 -0
  681. package/node_modules/three/src/nodes/accessors/UserDataNode.js +77 -0
  682. package/node_modules/three/src/nodes/accessors/VelocityNode.js +224 -0
  683. package/node_modules/three/src/nodes/accessors/VertexColorNode.js +110 -0
  684. package/node_modules/three/src/nodes/code/CodeNode.js +181 -0
  685. package/node_modules/three/src/nodes/code/ExpressionNode.js +68 -0
  686. package/node_modules/three/src/nodes/code/FunctionCallNode.js +187 -0
  687. package/node_modules/three/src/nodes/code/FunctionNode.js +183 -0
  688. package/node_modules/three/{examples/jsm → src}/nodes/code/ScriptableNode.js +253 -15
  689. package/node_modules/three/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +95 -9
  690. package/node_modules/three/src/nodes/core/ArrayNode.js +155 -0
  691. package/node_modules/three/src/nodes/core/AssignNode.js +202 -0
  692. package/node_modules/three/src/nodes/core/AttributeNode.js +168 -0
  693. package/node_modules/three/src/nodes/core/BypassNode.js +93 -0
  694. package/node_modules/three/src/nodes/core/ConstNode.js +67 -0
  695. package/node_modules/three/src/nodes/core/ContextNode.js +184 -0
  696. package/node_modules/three/src/nodes/core/IndexNode.js +164 -0
  697. package/node_modules/three/src/nodes/core/InputNode.js +136 -0
  698. package/node_modules/three/src/nodes/core/InspectorNode.js +128 -0
  699. package/node_modules/three/src/nodes/core/IsolateNode.js +133 -0
  700. package/node_modules/three/src/nodes/core/LightingModel.js +77 -0
  701. package/node_modules/three/src/nodes/core/MRTNode.js +150 -0
  702. package/node_modules/three/src/nodes/core/Node.js +1083 -0
  703. package/node_modules/three/src/nodes/core/NodeAttribute.js +53 -0
  704. package/node_modules/three/src/nodes/core/NodeBuilder.js +3081 -0
  705. package/node_modules/three/src/nodes/core/NodeCache.js +75 -0
  706. package/node_modules/three/src/nodes/core/NodeCode.js +46 -0
  707. package/node_modules/three/src/nodes/core/NodeFrame.js +306 -0
  708. package/node_modules/three/src/nodes/core/NodeFunction.js +69 -0
  709. package/node_modules/three/src/nodes/core/NodeFunctionInput.js +61 -0
  710. package/node_modules/three/src/nodes/core/NodeParser.js +23 -0
  711. package/node_modules/three/src/nodes/core/NodeUniform.js +91 -0
  712. package/node_modules/three/src/nodes/core/NodeUtils.js +406 -0
  713. package/node_modules/three/src/nodes/core/NodeVar.js +60 -0
  714. package/node_modules/three/src/nodes/core/NodeVarying.js +63 -0
  715. package/node_modules/three/src/nodes/core/OutputStructNode.js +103 -0
  716. package/node_modules/three/src/nodes/core/ParameterNode.js +94 -0
  717. package/node_modules/three/src/nodes/core/PropertyNode.js +351 -0
  718. package/node_modules/three/src/nodes/core/StackNode.js +377 -0
  719. package/node_modules/three/src/nodes/core/StructNode.js +120 -0
  720. package/node_modules/three/src/nodes/core/StructType.js +13 -0
  721. package/node_modules/three/src/nodes/core/StructTypeNode.js +154 -0
  722. package/node_modules/three/src/nodes/core/SubBuildNode.js +89 -0
  723. package/node_modules/three/src/nodes/core/TempNode.js +88 -0
  724. package/node_modules/three/src/nodes/core/UniformGroupNode.js +137 -0
  725. package/node_modules/three/src/nodes/core/UniformNode.js +243 -0
  726. package/node_modules/three/src/nodes/core/VarNode.js +342 -0
  727. package/node_modules/three/src/nodes/core/VaryingNode.js +227 -0
  728. package/node_modules/three/src/nodes/core/constants.js +68 -0
  729. package/node_modules/three/src/nodes/display/BlendModes.js +235 -0
  730. package/node_modules/three/src/nodes/display/BumpMapNode.js +117 -0
  731. package/node_modules/three/src/nodes/display/ColorAdjustment.js +141 -0
  732. package/node_modules/three/src/nodes/display/ColorSpaceFunctions.js +54 -0
  733. package/node_modules/three/src/nodes/display/ColorSpaceNode.js +164 -0
  734. package/node_modules/three/src/nodes/display/FrontFacingNode.js +102 -0
  735. package/node_modules/three/src/nodes/display/NormalMapNode.js +118 -0
  736. package/node_modules/three/src/nodes/display/PassNode.js +946 -0
  737. package/node_modules/three/src/nodes/display/PosterizeNode.js +65 -0
  738. package/node_modules/three/src/nodes/display/RenderOutputNode.js +150 -0
  739. package/node_modules/three/src/nodes/display/ScreenNode.js +290 -0
  740. package/node_modules/three/src/nodes/display/ToneMappingFunctions.js +242 -0
  741. package/node_modules/three/src/nodes/display/ToneMappingNode.js +147 -0
  742. package/node_modules/three/src/nodes/display/ToonOutlinePassNode.js +191 -0
  743. package/node_modules/three/src/nodes/display/ViewportDepthNode.js +294 -0
  744. package/node_modules/three/src/nodes/display/ViewportDepthTextureNode.js +67 -0
  745. package/node_modules/three/src/nodes/display/ViewportSharedTextureNode.js +73 -0
  746. package/node_modules/three/src/nodes/display/ViewportTextureNode.js +228 -0
  747. package/node_modules/three/src/nodes/fog/Fog.js +114 -0
  748. package/node_modules/three/src/nodes/functions/BSDF/BRDF_GGX.js +55 -0
  749. package/node_modules/three/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  750. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  751. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +9 -9
  752. package/node_modules/three/src/nodes/functions/BSDF/DFGApprox.js +71 -0
  753. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +2 -2
  754. package/node_modules/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  755. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  756. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +2 -2
  757. package/node_modules/three/src/nodes/functions/BSDF/LTC.js +175 -0
  758. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  759. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -4
  760. package/node_modules/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  761. package/node_modules/three/src/nodes/functions/BasicLightingModel.js +100 -0
  762. package/node_modules/three/src/nodes/functions/PhongLightingModel.js +99 -0
  763. package/node_modules/three/src/nodes/functions/PhysicalLightingModel.js +797 -0
  764. package/node_modules/three/src/nodes/functions/ShadowMaskModel.js +58 -0
  765. package/node_modules/three/src/nodes/functions/ToonLightingModel.js +70 -0
  766. package/node_modules/three/src/nodes/functions/VolumetricLightingModel.js +183 -0
  767. package/node_modules/three/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  768. package/node_modules/three/src/nodes/functions/material/getGeometryRoughness.js +19 -0
  769. package/node_modules/three/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  770. package/node_modules/three/{examples/jsm → src}/nodes/functions/material/getRoughness.js +2 -2
  771. package/node_modules/three/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  772. package/node_modules/three/src/nodes/geometry/RangeNode.js +208 -0
  773. package/node_modules/three/src/nodes/gpgpu/AtomicFunctionNode.js +274 -0
  774. package/node_modules/three/src/nodes/gpgpu/BarrierNode.js +89 -0
  775. package/node_modules/three/src/nodes/gpgpu/ComputeBuiltinNode.js +228 -0
  776. package/node_modules/three/src/nodes/gpgpu/ComputeNode.js +284 -0
  777. package/node_modules/three/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  778. package/node_modules/three/src/nodes/gpgpu/WorkgroupInfoNode.js +234 -0
  779. package/node_modules/three/src/nodes/lighting/AONode.js +45 -0
  780. package/node_modules/three/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +16 -8
  781. package/node_modules/three/src/nodes/lighting/AnalyticLightNode.js +256 -0
  782. package/node_modules/three/src/nodes/lighting/BasicEnvironmentNode.js +49 -0
  783. package/node_modules/three/src/nodes/lighting/BasicLightMapNode.js +49 -0
  784. package/node_modules/three/src/nodes/lighting/DirectionalLightNode.js +39 -0
  785. package/node_modules/three/src/nodes/lighting/EnvironmentNode.js +153 -0
  786. package/node_modules/three/src/nodes/lighting/HemisphereLightNode.js +87 -0
  787. package/node_modules/three/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +20 -10
  788. package/node_modules/three/src/nodes/lighting/IrradianceNode.js +44 -0
  789. package/node_modules/three/src/nodes/lighting/LightProbeNode.js +73 -0
  790. package/node_modules/three/src/nodes/lighting/LightUtils.js +25 -0
  791. package/node_modules/three/src/nodes/lighting/LightingContextNode.js +115 -0
  792. package/node_modules/three/src/nodes/lighting/LightingNode.js +36 -0
  793. package/node_modules/three/src/nodes/lighting/LightsNode.js +453 -0
  794. package/node_modules/three/src/nodes/lighting/PointLightNode.js +102 -0
  795. package/node_modules/three/src/nodes/lighting/PointShadowNode.js +312 -0
  796. package/node_modules/three/src/nodes/lighting/ProjectorLightNode.js +91 -0
  797. package/node_modules/three/src/nodes/lighting/RectAreaLightNode.js +133 -0
  798. package/node_modules/three/src/nodes/lighting/ShadowBaseNode.js +81 -0
  799. package/node_modules/three/src/nodes/lighting/ShadowFilterNode.js +276 -0
  800. package/node_modules/three/src/nodes/lighting/ShadowNode.js +811 -0
  801. package/node_modules/three/src/nodes/lighting/SpotLightNode.js +168 -0
  802. package/node_modules/three/src/nodes/materialx/MaterialXNodes.js +197 -0
  803. package/node_modules/three/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +43 -46
  804. package/node_modules/three/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +625 -564
  805. package/node_modules/three/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +3 -9
  806. package/node_modules/three/src/nodes/math/BitcastNode.js +156 -0
  807. package/node_modules/three/src/nodes/math/ConditionalNode.js +245 -0
  808. package/node_modules/three/src/nodes/math/Hash.js +21 -0
  809. package/node_modules/three/src/nodes/math/MathNode.js +1167 -0
  810. package/node_modules/three/src/nodes/math/MathUtils.js +54 -0
  811. package/node_modules/three/src/nodes/math/OperatorNode.js +751 -0
  812. package/node_modules/three/{examples/jsm → src}/nodes/math/TriNoise3D.js +34 -34
  813. package/node_modules/three/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +23 -7
  814. package/node_modules/three/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +11 -0
  815. package/node_modules/three/src/nodes/pmrem/PMREMNode.js +397 -0
  816. package/node_modules/three/src/nodes/pmrem/PMREMUtils.js +403 -0
  817. package/node_modules/three/src/nodes/procedural/Checker.js +22 -0
  818. package/node_modules/three/src/nodes/shapes/Shapes.js +33 -0
  819. package/node_modules/three/src/nodes/tsl/TSLBase.js +36 -0
  820. package/node_modules/three/src/nodes/tsl/TSLCore.js +1229 -0
  821. package/node_modules/three/src/nodes/utils/ArrayElementNode.js +77 -0
  822. package/node_modules/three/src/nodes/utils/ConvertNode.js +100 -0
  823. package/node_modules/three/src/nodes/utils/CubeMapNode.js +237 -0
  824. package/node_modules/three/src/nodes/utils/DebugNode.js +83 -0
  825. package/node_modules/three/src/nodes/utils/Discard.js +24 -0
  826. package/node_modules/three/src/nodes/utils/EquirectUV.js +27 -0
  827. package/node_modules/three/src/nodes/utils/EventNode.js +119 -0
  828. package/node_modules/three/src/nodes/utils/FlipNode.js +106 -0
  829. package/node_modules/three/src/nodes/utils/FunctionOverloadingNode.js +170 -0
  830. package/node_modules/three/src/nodes/utils/JoinNode.js +117 -0
  831. package/node_modules/three/src/nodes/utils/LoopNode.js +349 -0
  832. package/node_modules/three/src/nodes/utils/MatcapUV.js +22 -0
  833. package/node_modules/three/src/nodes/utils/MaxMipLevelNode.js +103 -0
  834. package/node_modules/three/src/nodes/utils/MemberNode.js +120 -0
  835. package/node_modules/three/src/nodes/utils/Oscillators.js +41 -0
  836. package/node_modules/three/src/nodes/utils/Packing.js +21 -0
  837. package/node_modules/three/src/nodes/utils/PostProcessingUtils.js +122 -0
  838. package/node_modules/three/src/nodes/utils/RTTNode.js +289 -0
  839. package/node_modules/three/src/nodes/utils/ReflectorNode.js +630 -0
  840. package/node_modules/three/src/nodes/utils/RemapNode.js +125 -0
  841. package/node_modules/three/{examples/jsm → src}/nodes/utils/RotateNode.js +48 -13
  842. package/node_modules/three/src/nodes/utils/SampleNode.js +91 -0
  843. package/node_modules/three/{examples/jsm → src}/nodes/utils/SetNode.js +50 -4
  844. package/node_modules/three/{examples/jsm → src}/nodes/utils/SplitNode.js +73 -6
  845. package/node_modules/three/src/nodes/utils/SpriteSheetUVNode.js +90 -0
  846. package/node_modules/three/src/nodes/utils/SpriteUtils.js +63 -0
  847. package/node_modules/three/src/nodes/utils/StorageArrayElementNode.js +143 -0
  848. package/node_modules/three/src/nodes/utils/Timer.js +26 -0
  849. package/node_modules/three/src/nodes/utils/TriplanarTextures.js +65 -0
  850. package/node_modules/three/src/nodes/utils/UVUtils.js +39 -0
  851. package/node_modules/three/src/nodes/utils/ViewportUtils.js +26 -0
  852. package/node_modules/three/src/objects/BatchedMesh.js +940 -305
  853. package/node_modules/three/src/objects/Bone.js +24 -0
  854. package/node_modules/three/src/objects/ClippingGroup.js +68 -0
  855. package/node_modules/three/src/objects/Group.js +24 -0
  856. package/node_modules/three/src/objects/InstancedMesh.js +182 -1
  857. package/node_modules/three/src/objects/LOD.js +120 -5
  858. package/node_modules/three/src/objects/Line.js +151 -44
  859. package/node_modules/three/src/objects/LineLoop.js +20 -0
  860. package/node_modules/three/src/objects/LineSegments.js +20 -1
  861. package/node_modules/three/src/objects/Mesh.js +91 -24
  862. package/node_modules/three/src/objects/Points.js +62 -0
  863. package/node_modules/three/src/objects/Skeleton.js +111 -5
  864. package/node_modules/three/src/objects/SkinnedMesh.js +102 -6
  865. package/node_modules/three/src/objects/Sprite.js +65 -1
  866. package/node_modules/three/src/renderers/WebGL3DRenderTarget.js +26 -0
  867. package/node_modules/three/src/renderers/WebGLArrayRenderTarget.js +26 -0
  868. package/node_modules/three/src/renderers/WebGLCubeRenderTarget.js +42 -15
  869. package/node_modules/three/src/renderers/WebGLRenderTarget.js +19 -0
  870. package/node_modules/three/src/renderers/WebGLRenderer.js +1222 -318
  871. package/node_modules/three/src/renderers/common/Animation.js +159 -0
  872. package/node_modules/three/{examples/jsm → src}/renderers/common/Attributes.js +45 -2
  873. package/node_modules/three/src/renderers/common/Backend.js +748 -0
  874. package/node_modules/three/src/renderers/common/Background.js +212 -0
  875. package/node_modules/three/src/renderers/common/BindGroup.js +61 -0
  876. package/node_modules/three/src/renderers/common/Binding.js +60 -0
  877. package/node_modules/three/src/renderers/common/Bindings.js +379 -0
  878. package/node_modules/three/src/renderers/common/Buffer.js +87 -0
  879. package/node_modules/three/src/renderers/common/BufferUtils.js +58 -0
  880. package/node_modules/three/src/renderers/common/BundleGroup.js +83 -0
  881. package/node_modules/three/src/renderers/common/CanvasTarget.js +341 -0
  882. package/node_modules/three/src/renderers/common/ChainMap.js +98 -0
  883. package/node_modules/three/src/renderers/common/ClippingContext.js +262 -0
  884. package/node_modules/three/src/renderers/common/Color4.js +77 -0
  885. package/node_modules/three/src/renderers/common/ComputePipeline.js +41 -0
  886. package/node_modules/three/{examples/jsm → src}/renderers/common/Constants.js +2 -1
  887. package/node_modules/three/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +43 -5
  888. package/node_modules/three/src/renderers/common/DataMap.js +90 -0
  889. package/node_modules/three/src/renderers/common/Geometries.js +370 -0
  890. package/node_modules/three/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  891. package/node_modules/three/src/renderers/common/Info.js +172 -0
  892. package/node_modules/three/src/renderers/common/InspectorBase.js +146 -0
  893. package/node_modules/three/src/renderers/common/Lighting.js +73 -0
  894. package/node_modules/three/src/renderers/common/Pipeline.js +35 -0
  895. package/node_modules/three/{examples/jsm → src}/renderers/common/Pipelines.js +150 -7
  896. package/node_modules/three/src/renderers/common/PostProcessing.js +226 -0
  897. package/node_modules/three/src/renderers/common/ProgrammableStage.js +78 -0
  898. package/node_modules/three/src/renderers/common/QuadMesh.js +112 -0
  899. package/node_modules/three/src/renderers/common/RenderBundle.js +24 -0
  900. package/node_modules/three/src/renderers/common/RenderBundles.js +67 -0
  901. package/node_modules/three/src/renderers/common/RenderContext.js +265 -0
  902. package/node_modules/three/src/renderers/common/RenderContexts.js +116 -0
  903. package/node_modules/three/src/renderers/common/RenderList.js +404 -0
  904. package/node_modules/three/src/renderers/common/RenderLists.js +77 -0
  905. package/node_modules/three/src/renderers/common/RenderObject.js +903 -0
  906. package/node_modules/three/src/renderers/common/RenderObjects.js +202 -0
  907. package/node_modules/three/src/renderers/common/RenderPipeline.js +40 -0
  908. package/node_modules/three/src/renderers/common/Renderer.js +3290 -0
  909. package/node_modules/three/src/renderers/common/RendererUtils.js +200 -0
  910. package/node_modules/three/src/renderers/common/SampledTexture.js +152 -0
  911. package/node_modules/three/src/renderers/common/Sampler.js +165 -0
  912. package/node_modules/three/src/renderers/common/Storage3DTexture.js +100 -0
  913. package/node_modules/three/src/renderers/common/StorageArrayTexture.js +84 -0
  914. package/node_modules/three/src/renderers/common/StorageBuffer.js +41 -0
  915. package/node_modules/three/src/renderers/common/StorageBufferAttribute.js +46 -0
  916. package/node_modules/three/src/renderers/common/StorageInstancedBufferAttribute.js +46 -0
  917. package/node_modules/three/src/renderers/common/StorageTexture.js +86 -0
  918. package/node_modules/three/src/renderers/common/Textures.js +544 -0
  919. package/node_modules/three/src/renderers/common/TimestampQueryPool.js +161 -0
  920. package/node_modules/three/src/renderers/common/Uniform.js +367 -0
  921. package/node_modules/three/src/renderers/common/UniformBuffer.js +34 -0
  922. package/node_modules/three/src/renderers/common/UniformsGroup.js +487 -0
  923. package/node_modules/three/src/renderers/common/XRManager.js +1676 -0
  924. package/node_modules/three/src/renderers/common/XRRenderTarget.js +91 -0
  925. package/node_modules/three/src/renderers/common/extras/PMREMGenerator.js +1034 -0
  926. package/node_modules/three/src/renderers/common/nodes/NodeBuilderState.js +152 -0
  927. package/node_modules/three/src/renderers/common/nodes/NodeLibrary.js +196 -0
  928. package/node_modules/three/src/renderers/common/nodes/NodeSampledTexture.js +140 -0
  929. package/node_modules/three/src/renderers/common/nodes/NodeSampler.js +62 -0
  930. package/node_modules/three/src/renderers/common/nodes/NodeStorageBuffer.js +61 -0
  931. package/node_modules/three/src/renderers/common/nodes/NodeUniform.js +418 -0
  932. package/node_modules/three/src/renderers/common/nodes/NodeUniformBuffer.js +53 -0
  933. package/node_modules/three/src/renderers/common/nodes/NodeUniformsGroup.js +51 -0
  934. package/node_modules/three/src/renderers/common/nodes/Nodes.js +840 -0
  935. package/node_modules/three/src/renderers/shaders/DFGLUTData.js +64 -0
  936. package/node_modules/three/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  937. package/node_modules/three/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  938. package/node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  939. package/node_modules/three/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  940. package/node_modules/three/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -33
  941. package/node_modules/three/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -22
  942. package/node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  943. package/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +2 -1
  944. package/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
  945. package/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +3 -3
  946. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  947. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  948. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  949. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +55 -20
  950. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  951. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  952. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +3 -11
  953. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +3 -17
  954. package/node_modules/three/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +3 -3
  955. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  956. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
  957. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  958. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +12 -24
  959. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  960. package/node_modules/three/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  961. package/node_modules/three/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  962. package/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +59 -36
  963. package/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  964. package/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  965. package/node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +33 -2
  966. package/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  967. package/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  968. package/node_modules/three/src/renderers/shaders/ShaderChunk.js +2 -2
  969. package/node_modules/three/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  970. package/node_modules/three/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +3 -2
  971. package/node_modules/three/src/renderers/shaders/ShaderLib/depth.glsl.js +21 -2
  972. package/node_modules/three/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  973. package/node_modules/three/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
  974. package/node_modules/three/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -0
  975. package/node_modules/three/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
  976. package/node_modules/three/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
  977. package/node_modules/three/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -0
  978. package/node_modules/three/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
  979. package/node_modules/three/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +5 -0
  980. package/node_modules/three/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
  981. package/node_modules/three/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
  982. package/node_modules/three/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
  983. package/node_modules/three/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  984. package/node_modules/three/src/renderers/shaders/ShaderLib.js +4 -2
  985. package/node_modules/three/src/renderers/shaders/UniformsLib.js +6 -4
  986. package/node_modules/three/src/renderers/shaders/UniformsUtils.js +31 -3
  987. package/node_modules/three/src/renderers/webgl/WebGLAttributes.js +46 -38
  988. package/node_modules/three/src/renderers/webgl/WebGLBackground.js +69 -5
  989. package/node_modules/three/src/renderers/webgl/WebGLBindingStates.js +14 -51
  990. package/node_modules/three/src/renderers/webgl/WebGLBufferRenderer.js +19 -22
  991. package/node_modules/three/src/renderers/webgl/WebGLCapabilities.js +39 -14
  992. package/node_modules/three/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  993. package/node_modules/three/src/renderers/webgl/WebGLExtensions.js +8 -44
  994. package/node_modules/three/src/renderers/webgl/WebGLGeometries.js +0 -28
  995. package/node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.js +19 -21
  996. package/node_modules/three/src/renderers/webgl/WebGLInfo.js +3 -1
  997. package/node_modules/three/src/renderers/webgl/WebGLLights.js +21 -44
  998. package/node_modules/three/src/renderers/webgl/WebGLMaterials.js +33 -9
  999. package/node_modules/three/src/renderers/webgl/WebGLMorphtargets.js +78 -210
  1000. package/node_modules/three/src/renderers/webgl/WebGLProgram.js +103 -121
  1001. package/node_modules/three/src/renderers/webgl/WebGLPrograms.js +32 -26
  1002. package/node_modules/three/src/renderers/webgl/WebGLProperties.js +7 -0
  1003. package/node_modules/three/src/renderers/webgl/WebGLRenderStates.js +15 -9
  1004. package/node_modules/three/src/renderers/webgl/WebGLShadowMap.js +41 -29
  1005. package/node_modules/three/src/renderers/webgl/WebGLState.js +104 -100
  1006. package/node_modules/three/src/renderers/webgl/WebGLTextures.js +567 -408
  1007. package/node_modules/three/src/renderers/webgl/WebGLUniforms.js +12 -2
  1008. package/node_modules/three/src/renderers/webgl/WebGLUniformsGroups.js +13 -11
  1009. package/node_modules/three/src/renderers/webgl/WebGLUtils.js +11 -81
  1010. package/node_modules/three/src/renderers/webgl-fallback/WebGLBackend.js +2612 -0
  1011. package/node_modules/three/src/renderers/webgl-fallback/WebGLBufferRenderer.js +140 -0
  1012. package/node_modules/three/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +1577 -0
  1013. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +76 -3
  1014. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +64 -0
  1015. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +5 -3
  1016. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLExtensions.js +83 -0
  1017. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +427 -21
  1018. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1309 -0
  1019. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
  1020. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +72 -43
  1021. package/node_modules/three/src/renderers/webgpu/WebGPUBackend.js +2482 -0
  1022. package/node_modules/three/src/renderers/webgpu/WebGPURenderer.Nodes.js +69 -0
  1023. package/node_modules/three/src/renderers/webgpu/WebGPURenderer.js +106 -0
  1024. package/node_modules/three/src/renderers/webgpu/nodes/BasicNodeLibrary.js +66 -0
  1025. package/node_modules/three/src/renderers/webgpu/nodes/StandardNodeLibrary.js +100 -0
  1026. package/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +2247 -0
  1027. package/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeFunction.js +187 -0
  1028. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  1029. package/node_modules/three/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +449 -0
  1030. package/node_modules/three/src/renderers/webgpu/utils/WebGPUBindingUtils.js +485 -0
  1031. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +24 -4
  1032. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +289 -72
  1033. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +160 -8
  1034. package/node_modules/three/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1576 -0
  1035. package/node_modules/three/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
  1036. package/node_modules/three/src/renderers/webgpu/utils/WebGPUUtils.js +247 -0
  1037. package/node_modules/three/src/renderers/webxr/WebXRController.js +87 -2
  1038. package/node_modules/three/src/renderers/webxr/WebXRDepthSensing.js +63 -13
  1039. package/node_modules/three/src/renderers/webxr/WebXRManager.js +323 -44
  1040. package/node_modules/three/src/scenes/Fog.js +60 -0
  1041. package/node_modules/three/src/scenes/FogExp2.js +51 -0
  1042. package/node_modules/three/src/scenes/Scene.js +103 -1
  1043. package/node_modules/three/src/textures/CanvasTexture.js +28 -0
  1044. package/node_modules/three/src/textures/CompressedArrayTexture.js +71 -0
  1045. package/node_modules/three/src/textures/CompressedCubeTexture.js +29 -0
  1046. package/node_modules/three/src/textures/CompressedTexture.js +64 -6
  1047. package/node_modules/three/src/textures/CubeTexture.js +52 -4
  1048. package/node_modules/three/src/textures/Data3DTexture.js +79 -2
  1049. package/node_modules/three/src/textures/DataArrayTexture.js +107 -0
  1050. package/node_modules/three/src/textures/DataTexture.js +65 -0
  1051. package/node_modules/three/src/textures/DepthTexture.js +59 -13
  1052. package/node_modules/three/src/textures/ExternalTexture.js +56 -0
  1053. package/node_modules/three/src/textures/FramebufferTexture.js +62 -0
  1054. package/node_modules/three/src/textures/Source.js +106 -4
  1055. package/node_modules/three/src/textures/Texture.js +490 -27
  1056. package/node_modules/three/src/textures/VideoFrameTexture.js +72 -0
  1057. package/node_modules/three/src/textures/VideoTexture.js +78 -6
  1058. package/node_modules/three/src/utils.js +128 -3
  1059. package/package.json +3 -2
  1060. package/node_modules/three/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  1061. package/node_modules/three/examples/jsm/animation/MMDPhysics.js +0 -1406
  1062. package/node_modules/three/examples/jsm/cameras/CinematicCamera.js +0 -208
  1063. package/node_modules/three/examples/jsm/effects/PeppersGhostEffect.js +0 -153
  1064. package/node_modules/three/examples/jsm/exporters/MMDExporter.js +0 -217
  1065. package/node_modules/three/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  1066. package/node_modules/three/examples/jsm/geometries/ParametricGeometries.js +0 -254
  1067. package/node_modules/three/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  1068. package/node_modules/three/examples/jsm/libs/mmdparser.module.js +0 -11530
  1069. package/node_modules/three/examples/jsm/lights/IESSpotLight.js +0 -25
  1070. package/node_modules/three/examples/jsm/loaders/LogLuvLoader.js +0 -606
  1071. package/node_modules/three/examples/jsm/loaders/MMDLoader.js +0 -2276
  1072. package/node_modules/three/examples/jsm/loaders/RGBMLoader.js +0 -1065
  1073. package/node_modules/three/examples/jsm/loaders/TiltLoader.js +0 -520
  1074. package/node_modules/three/examples/jsm/misc/Timer.js +0 -128
  1075. package/node_modules/three/examples/jsm/nodes/Nodes.js +0 -193
  1076. package/node_modules/three/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  1077. package/node_modules/three/examples/jsm/nodes/accessors/BufferAttributeNode.js +0 -127
  1078. package/node_modules/three/examples/jsm/nodes/accessors/BufferNode.js +0 -30
  1079. package/node_modules/three/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  1080. package/node_modules/three/examples/jsm/nodes/accessors/CubeTextureNode.js +0 -61
  1081. package/node_modules/three/examples/jsm/nodes/accessors/InstanceNode.js +0 -71
  1082. package/node_modules/three/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  1083. package/node_modules/three/examples/jsm/nodes/accessors/MaterialNode.js +0 -314
  1084. package/node_modules/three/examples/jsm/nodes/accessors/MaterialReferenceNode.js +0 -51
  1085. package/node_modules/three/examples/jsm/nodes/accessors/ModelNode.js +0 -33
  1086. package/node_modules/three/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +0 -39
  1087. package/node_modules/three/examples/jsm/nodes/accessors/NormalNode.js +0 -96
  1088. package/node_modules/three/examples/jsm/nodes/accessors/Object3DNode.js +0 -150
  1089. package/node_modules/three/examples/jsm/nodes/accessors/PointUVNode.js +0 -26
  1090. package/node_modules/three/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  1091. package/node_modules/three/examples/jsm/nodes/accessors/ReferenceNode.js +0 -102
  1092. package/node_modules/three/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  1093. package/node_modules/three/examples/jsm/nodes/accessors/SceneNode.js +0 -52
  1094. package/node_modules/three/examples/jsm/nodes/accessors/SkinningNode.js +0 -103
  1095. package/node_modules/three/examples/jsm/nodes/accessors/StorageBufferNode.js +0 -54
  1096. package/node_modules/three/examples/jsm/nodes/accessors/TangentNode.js +0 -103
  1097. package/node_modules/three/examples/jsm/nodes/accessors/TextureNode.js +0 -367
  1098. package/node_modules/three/examples/jsm/nodes/accessors/TextureSizeNode.js +0 -35
  1099. package/node_modules/three/examples/jsm/nodes/accessors/TextureStoreNode.js +0 -82
  1100. package/node_modules/three/examples/jsm/nodes/accessors/UVNode.js +0 -47
  1101. package/node_modules/three/examples/jsm/nodes/accessors/UserDataNode.js +0 -29
  1102. package/node_modules/three/examples/jsm/nodes/accessors/VertexColorNode.js +0 -70
  1103. package/node_modules/three/examples/jsm/nodes/code/CodeNode.js +0 -78
  1104. package/node_modules/three/examples/jsm/nodes/code/ExpressionNode.js +0 -37
  1105. package/node_modules/three/examples/jsm/nodes/code/FunctionCallNode.js +0 -96
  1106. package/node_modules/three/examples/jsm/nodes/code/FunctionNode.js +0 -138
  1107. package/node_modules/three/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
  1108. package/node_modules/three/examples/jsm/nodes/core/AssignNode.js +0 -72
  1109. package/node_modules/three/examples/jsm/nodes/core/AttributeNode.js +0 -108
  1110. package/node_modules/three/examples/jsm/nodes/core/BypassNode.js +0 -45
  1111. package/node_modules/three/examples/jsm/nodes/core/CacheNode.js +0 -49
  1112. package/node_modules/three/examples/jsm/nodes/core/ConstNode.js +0 -32
  1113. package/node_modules/three/examples/jsm/nodes/core/ContextNode.js +0 -61
  1114. package/node_modules/three/examples/jsm/nodes/core/IndexNode.js +0 -66
  1115. package/node_modules/three/examples/jsm/nodes/core/InputNode.js +0 -83
  1116. package/node_modules/three/examples/jsm/nodes/core/LightingModel.js +0 -17
  1117. package/node_modules/three/examples/jsm/nodes/core/Node.js +0 -483
  1118. package/node_modules/three/examples/jsm/nodes/core/NodeAttribute.js +0 -15
  1119. package/node_modules/three/examples/jsm/nodes/core/NodeBuilder.js +0 -1256
  1120. package/node_modules/three/examples/jsm/nodes/core/NodeCache.js +0 -26
  1121. package/node_modules/three/examples/jsm/nodes/core/NodeCode.js +0 -15
  1122. package/node_modules/three/examples/jsm/nodes/core/NodeFrame.js +0 -143
  1123. package/node_modules/three/examples/jsm/nodes/core/NodeFunction.js +0 -22
  1124. package/node_modules/three/examples/jsm/nodes/core/NodeFunctionInput.js +0 -17
  1125. package/node_modules/three/examples/jsm/nodes/core/NodeKeywords.js +0 -80
  1126. package/node_modules/three/examples/jsm/nodes/core/NodeParser.js +0 -11
  1127. package/node_modules/three/examples/jsm/nodes/core/NodeUniform.js +0 -40
  1128. package/node_modules/three/examples/jsm/nodes/core/NodeUtils.js +0 -210
  1129. package/node_modules/three/examples/jsm/nodes/core/NodeVar.js +0 -14
  1130. package/node_modules/three/examples/jsm/nodes/core/NodeVarying.js +0 -17
  1131. package/node_modules/three/examples/jsm/nodes/core/OutputStructNode.js +0 -62
  1132. package/node_modules/three/examples/jsm/nodes/core/ParameterNode.js +0 -33
  1133. package/node_modules/three/examples/jsm/nodes/core/PropertyNode.js +0 -72
  1134. package/node_modules/three/examples/jsm/nodes/core/StackNode.js +0 -89
  1135. package/node_modules/three/examples/jsm/nodes/core/StructTypeNode.js +0 -24
  1136. package/node_modules/three/examples/jsm/nodes/core/TempNode.js +0 -58
  1137. package/node_modules/three/examples/jsm/nodes/core/UniformGroup.js +0 -13
  1138. package/node_modules/three/examples/jsm/nodes/core/UniformGroupNode.js +0 -36
  1139. package/node_modules/three/examples/jsm/nodes/core/UniformNode.js +0 -80
  1140. package/node_modules/three/examples/jsm/nodes/core/VarNode.js +0 -60
  1141. package/node_modules/three/examples/jsm/nodes/core/VaryingNode.js +0 -65
  1142. package/node_modules/three/examples/jsm/nodes/core/constants.js +0 -28
  1143. package/node_modules/three/examples/jsm/nodes/display/AfterImageNode.js +0 -148
  1144. package/node_modules/three/examples/jsm/nodes/display/AnamorphicNode.js +0 -148
  1145. package/node_modules/three/examples/jsm/nodes/display/BlendModeNode.js +0 -99
  1146. package/node_modules/three/examples/jsm/nodes/display/BumpMapNode.js +0 -99
  1147. package/node_modules/three/examples/jsm/nodes/display/ColorAdjustmentNode.js +0 -99
  1148. package/node_modules/three/examples/jsm/nodes/display/ColorSpaceNode.js +0 -108
  1149. package/node_modules/three/examples/jsm/nodes/display/FrontFacingNode.js +0 -27
  1150. package/node_modules/three/examples/jsm/nodes/display/GaussianBlurNode.js +0 -190
  1151. package/node_modules/three/examples/jsm/nodes/display/NormalMapNode.js +0 -108
  1152. package/node_modules/three/examples/jsm/nodes/display/PassNode.js +0 -183
  1153. package/node_modules/three/examples/jsm/nodes/display/PosterizeNode.js +0 -32
  1154. package/node_modules/three/examples/jsm/nodes/display/ToneMappingNode.js +0 -184
  1155. package/node_modules/three/examples/jsm/nodes/display/ViewportDepthNode.js +0 -97
  1156. package/node_modules/three/examples/jsm/nodes/display/ViewportDepthTextureNode.js +0 -31
  1157. package/node_modules/three/examples/jsm/nodes/display/ViewportNode.js +0 -134
  1158. package/node_modules/three/examples/jsm/nodes/display/ViewportSharedTextureNode.js +0 -31
  1159. package/node_modules/three/examples/jsm/nodes/display/ViewportTextureNode.js +0 -75
  1160. package/node_modules/three/examples/jsm/nodes/fog/FogExp2Node.js +0 -35
  1161. package/node_modules/three/examples/jsm/nodes/fog/FogNode.js +0 -38
  1162. package/node_modules/three/examples/jsm/nodes/fog/FogRangeNode.js +0 -34
  1163. package/node_modules/three/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +0 -40
  1164. package/node_modules/three/examples/jsm/nodes/functions/BSDF/DFGApprox.js +0 -30
  1165. package/node_modules/three/examples/jsm/nodes/functions/PhongLightingModel.js +0 -67
  1166. package/node_modules/three/examples/jsm/nodes/functions/PhysicalLightingModel.js +0 -393
  1167. package/node_modules/three/examples/jsm/nodes/functions/material/getGeometryRoughness.js +0 -13
  1168. package/node_modules/three/examples/jsm/nodes/geometry/RangeNode.js +0 -104
  1169. package/node_modules/three/examples/jsm/nodes/gpgpu/ComputeNode.js +0 -85
  1170. package/node_modules/three/examples/jsm/nodes/lighting/AONode.js +0 -27
  1171. package/node_modules/three/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -241
  1172. package/node_modules/three/examples/jsm/nodes/lighting/DirectionalLightNode.js +0 -40
  1173. package/node_modules/three/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -181
  1174. package/node_modules/three/examples/jsm/nodes/lighting/HemisphereLightNode.js +0 -55
  1175. package/node_modules/three/examples/jsm/nodes/lighting/LightNode.js +0 -57
  1176. package/node_modules/three/examples/jsm/nodes/lighting/LightUtils.js +0 -17
  1177. package/node_modules/three/examples/jsm/nodes/lighting/LightingContextNode.js +0 -66
  1178. package/node_modules/three/examples/jsm/nodes/lighting/LightingNode.js +0 -21
  1179. package/node_modules/three/examples/jsm/nodes/lighting/LightsNode.js +0 -188
  1180. package/node_modules/three/examples/jsm/nodes/lighting/PointLightNode.js +0 -68
  1181. package/node_modules/three/examples/jsm/nodes/lighting/SpotLightNode.js +0 -89
  1182. package/node_modules/three/examples/jsm/nodes/loaders/NodeLoader.js +0 -108
  1183. package/node_modules/three/examples/jsm/nodes/loaders/NodeMaterialLoader.js +0 -59
  1184. package/node_modules/three/examples/jsm/nodes/loaders/NodeObjectLoader.js +0 -70
  1185. package/node_modules/three/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  1186. package/node_modules/three/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -28
  1187. package/node_modules/three/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +0 -54
  1188. package/node_modules/three/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  1189. package/node_modules/three/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +0 -34
  1190. package/node_modules/three/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  1191. package/node_modules/three/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -65
  1192. package/node_modules/three/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +0 -155
  1193. package/node_modules/three/examples/jsm/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  1194. package/node_modules/three/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +0 -80
  1195. package/node_modules/three/examples/jsm/nodes/materials/NodeMaterial.js +0 -570
  1196. package/node_modules/three/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -39
  1197. package/node_modules/three/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -90
  1198. package/node_modules/three/examples/jsm/nodes/materialx/MaterialXNodes.js +0 -68
  1199. package/node_modules/three/examples/jsm/nodes/math/CondNode.js +0 -86
  1200. package/node_modules/three/examples/jsm/nodes/math/HashNode.js +0 -34
  1201. package/node_modules/three/examples/jsm/nodes/math/MathNode.js +0 -371
  1202. package/node_modules/three/examples/jsm/nodes/math/MathUtils.js +0 -15
  1203. package/node_modules/three/examples/jsm/nodes/math/OperatorNode.js +0 -274
  1204. package/node_modules/three/examples/jsm/nodes/procedural/CheckerNode.js +0 -42
  1205. package/node_modules/three/examples/jsm/nodes/shadernode/ShaderNode.js +0 -634
  1206. package/node_modules/three/examples/jsm/nodes/utils/ArrayElementNode.js +0 -41
  1207. package/node_modules/three/examples/jsm/nodes/utils/ConvertNode.js +0 -65
  1208. package/node_modules/three/examples/jsm/nodes/utils/DiscardNode.js +0 -27
  1209. package/node_modules/three/examples/jsm/nodes/utils/EquirectUVNode.js +0 -33
  1210. package/node_modules/three/examples/jsm/nodes/utils/FunctionOverloadingNode.js +0 -95
  1211. package/node_modules/three/examples/jsm/nodes/utils/JoinNode.js +0 -61
  1212. package/node_modules/three/examples/jsm/nodes/utils/LoopNode.js +0 -198
  1213. package/node_modules/three/examples/jsm/nodes/utils/MatcapUVNode.js +0 -30
  1214. package/node_modules/three/examples/jsm/nodes/utils/MaxMipLevelNode.js +0 -46
  1215. package/node_modules/three/examples/jsm/nodes/utils/OscNode.js +0 -81
  1216. package/node_modules/three/examples/jsm/nodes/utils/PackingNode.js +0 -55
  1217. package/node_modules/three/examples/jsm/nodes/utils/ReflectorNode.js +0 -227
  1218. package/node_modules/three/examples/jsm/nodes/utils/RemapNode.js +0 -42
  1219. package/node_modules/three/examples/jsm/nodes/utils/RotateUVNode.js +0 -35
  1220. package/node_modules/three/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  1221. package/node_modules/three/examples/jsm/nodes/utils/SpriteSheetUVNode.js +0 -41
  1222. package/node_modules/three/examples/jsm/nodes/utils/TimerNode.js +0 -94
  1223. package/node_modules/three/examples/jsm/nodes/utils/TriplanarTexturesNode.js +0 -62
  1224. package/node_modules/three/examples/jsm/objects/InstancedPoints.js +0 -21
  1225. package/node_modules/three/examples/jsm/objects/QuadMesh.js +0 -66
  1226. package/node_modules/three/examples/jsm/renderers/common/Animation.js +0 -47
  1227. package/node_modules/three/examples/jsm/renderers/common/Backend.js +0 -195
  1228. package/node_modules/three/examples/jsm/renderers/common/Background.js +0 -134
  1229. package/node_modules/three/examples/jsm/renderers/common/Binding.js +0 -25
  1230. package/node_modules/three/examples/jsm/renderers/common/Bindings.js +0 -173
  1231. package/node_modules/three/examples/jsm/renderers/common/Buffer.js +0 -38
  1232. package/node_modules/three/examples/jsm/renderers/common/BufferUtils.js +0 -33
  1233. package/node_modules/three/examples/jsm/renderers/common/ChainMap.js +0 -89
  1234. package/node_modules/three/examples/jsm/renderers/common/Color4.js +0 -37
  1235. package/node_modules/three/examples/jsm/renderers/common/ComputePipeline.js +0 -17
  1236. package/node_modules/three/examples/jsm/renderers/common/DataMap.js +0 -54
  1237. package/node_modules/three/examples/jsm/renderers/common/Geometries.js +0 -215
  1238. package/node_modules/three/examples/jsm/renderers/common/Info.js +0 -107
  1239. package/node_modules/three/examples/jsm/renderers/common/Pipeline.js +0 -13
  1240. package/node_modules/three/examples/jsm/renderers/common/PostProcessing.js +0 -25
  1241. package/node_modules/three/examples/jsm/renderers/common/ProgrammableStage.js +0 -20
  1242. package/node_modules/three/examples/jsm/renderers/common/RenderContext.js +0 -41
  1243. package/node_modules/three/examples/jsm/renderers/common/RenderContexts.js +0 -74
  1244. package/node_modules/three/examples/jsm/renderers/common/RenderList.js +0 -186
  1245. package/node_modules/three/examples/jsm/renderers/common/RenderLists.js +0 -38
  1246. package/node_modules/three/examples/jsm/renderers/common/RenderObject.js +0 -178
  1247. package/node_modules/three/examples/jsm/renderers/common/RenderObjects.js +0 -91
  1248. package/node_modules/three/examples/jsm/renderers/common/RenderPipeline.js +0 -16
  1249. package/node_modules/three/examples/jsm/renderers/common/Renderer.js +0 -1247
  1250. package/node_modules/three/examples/jsm/renderers/common/SampledTexture.js +0 -83
  1251. package/node_modules/three/examples/jsm/renderers/common/Sampler.js +0 -18
  1252. package/node_modules/three/examples/jsm/renderers/common/StorageBuffer.js +0 -17
  1253. package/node_modules/three/examples/jsm/renderers/common/StorageBufferAttribute.js +0 -17
  1254. package/node_modules/three/examples/jsm/renderers/common/StorageTexture.js +0 -20
  1255. package/node_modules/three/examples/jsm/renderers/common/Textures.js +0 -354
  1256. package/node_modules/three/examples/jsm/renderers/common/Uniform.js +0 -140
  1257. package/node_modules/three/examples/jsm/renderers/common/UniformBuffer.js +0 -15
  1258. package/node_modules/three/examples/jsm/renderers/common/UniformsGroup.js +0 -299
  1259. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  1260. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +0 -49
  1261. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeSampler.js +0 -15
  1262. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeUniform.js +0 -135
  1263. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +0 -44
  1264. package/node_modules/three/examples/jsm/renderers/common/nodes/Nodes.js +0 -495
  1265. package/node_modules/three/examples/jsm/renderers/webgl/WebGLBackend.js +0 -1362
  1266. package/node_modules/three/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +0 -679
  1267. package/node_modules/three/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +0 -36
  1268. package/node_modules/three/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +0 -36
  1269. package/node_modules/three/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +0 -647
  1270. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
  1271. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
  1272. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
  1273. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
  1274. package/node_modules/three/examples/jsm/renderers/webgpu/WebGPUBackend.js +0 -1321
  1275. package/node_modules/three/examples/jsm/renderers/webgpu/WebGPURenderer.js +0 -53
  1276. package/node_modules/three/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +0 -1103
  1277. package/node_modules/three/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  1278. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +0 -287
  1279. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +0 -244
  1280. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +0 -1040
  1281. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +0 -93
  1282. package/node_modules/three/examples/jsm/shaders/MMDToonShader.js +0 -134
  1283. package/node_modules/three/examples/jsm/utils/GPUStatsPanel.js +0 -128
  1284. package/node_modules/three/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  1285. package/node_modules/three/src/renderers/WebGL1Renderer.js +0 -7
  1286. package/node_modules/three/src/renderers/WebGLMultipleRenderTargets.js +0 -82
  1287. package/node_modules/three/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
  1288. /package/node_modules/three/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
@@ -1,14 +1,22 @@
1
1
  import { BufferAttribute } from '../core/BufferAttribute.js';
2
2
  import { BufferGeometry } from '../core/BufferGeometry.js';
3
3
  import { DataTexture } from '../textures/DataTexture.js';
4
- import { FloatType } from '../constants.js';
4
+ import { FloatType, RedIntegerFormat, UnsignedIntType, RGBAFormat } from '../constants.js';
5
5
  import { Matrix4 } from '../math/Matrix4.js';
6
6
  import { Mesh } from './Mesh.js';
7
- import { RGBAFormat } from '../constants.js';
7
+ import { ColorManagement } from '../math/ColorManagement.js';
8
8
  import { Box3 } from '../math/Box3.js';
9
9
  import { Sphere } from '../math/Sphere.js';
10
10
  import { Frustum } from '../math/Frustum.js';
11
11
  import { Vector3 } from '../math/Vector3.js';
12
+ import { Color } from '../math/Color.js';
13
+ import { FrustumArray } from '../math/FrustumArray.js';
14
+
15
+ function ascIdSort( a, b ) {
16
+
17
+ return a - b;
18
+
19
+ }
12
20
 
13
21
  function sortOpaque( a, b ) {
14
22
 
@@ -32,7 +40,7 @@ class MultiDrawRenderList {
32
40
 
33
41
  }
34
42
 
35
- push( drawRange, z ) {
43
+ push( start, count, z, index ) {
36
44
 
37
45
  const pool = this.pool;
38
46
  const list = this.list;
@@ -43,6 +51,7 @@ class MultiDrawRenderList {
43
51
  start: - 1,
44
52
  count: - 1,
45
53
  z: - 1,
54
+ index: - 1,
46
55
 
47
56
  } );
48
57
 
@@ -52,9 +61,10 @@ class MultiDrawRenderList {
52
61
  list.push( item );
53
62
  this.index ++;
54
63
 
55
- item.start = drawRange.start;
56
- item.count = drawRange.count;
64
+ item.start = start;
65
+ item.count = count;
57
66
  item.z = z;
67
+ item.index = index;
58
68
 
59
69
  }
60
70
 
@@ -67,26 +77,19 @@ class MultiDrawRenderList {
67
77
 
68
78
  }
69
79
 
70
- const ID_ATTR_NAME = 'batchId';
71
80
  const _matrix = /*@__PURE__*/ new Matrix4();
72
- const _invMatrixWorld = /*@__PURE__*/ new Matrix4();
73
- const _identityMatrix = /*@__PURE__*/ new Matrix4();
74
- const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
81
+ const _whiteColor = /*@__PURE__*/ new Color( 1, 1, 1 );
75
82
  const _frustum = /*@__PURE__*/ new Frustum();
83
+ const _frustumArray = /*@__PURE__*/ new FrustumArray();
76
84
  const _box = /*@__PURE__*/ new Box3();
77
85
  const _sphere = /*@__PURE__*/ new Sphere();
78
86
  const _vector = /*@__PURE__*/ new Vector3();
87
+ const _forward = /*@__PURE__*/ new Vector3();
88
+ const _temp = /*@__PURE__*/ new Vector3();
79
89
  const _renderList = /*@__PURE__*/ new MultiDrawRenderList();
80
90
  const _mesh = /*@__PURE__*/ new Mesh();
81
91
  const _batchIntersects = [];
82
92
 
83
- // @TODO: SkinnedMesh support?
84
- // @TODO: geometry.groups support?
85
- // @TODO: geometry.drawRange support?
86
- // @TODO: geometry.morphAttributes support?
87
- // @TODO: Support uniform parameter per geometry
88
- // @TODO: Add an "optimize" function to pack geometry and remove data gaps
89
-
90
93
  // copies data from attribute "src" into "target" starting at "targetOffset"
91
94
  function copyAttributeData( src, target, targetOffset = 0 ) {
92
95
 
@@ -117,47 +120,215 @@ function copyAttributeData( src, target, targetOffset = 0 ) {
117
120
 
118
121
  }
119
122
 
120
- class BatchedMesh extends Mesh {
123
+ // safely copies array contents to a potentially smaller array
124
+ function copyArrayContents( src, target ) {
125
+
126
+ if ( src.constructor !== target.constructor ) {
121
127
 
122
- get maxGeometryCount() {
128
+ // if arrays are of a different type (eg due to index size increasing) then data must be per-element copied
129
+ const len = Math.min( src.length, target.length );
130
+ for ( let i = 0; i < len; i ++ ) {
123
131
 
124
- return this._maxGeometryCount;
132
+ target[ i ] = src[ i ];
133
+
134
+ }
135
+
136
+ } else {
137
+
138
+ // if the arrays use the same data layout we can use a fast block copy
139
+ const len = Math.min( src.length, target.length );
140
+ target.set( new src.constructor( src.buffer, 0, len ) );
125
141
 
126
142
  }
127
143
 
128
- constructor( maxGeometryCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) {
144
+ }
145
+
146
+ /**
147
+ * A special version of a mesh with multi draw batch rendering support. Use
148
+ * this class if you have to render a large number of objects with the same
149
+ * material but with different geometries or world transformations. The usage of
150
+ * `BatchedMesh` will help you to reduce the number of draw calls and thus improve the overall
151
+ * rendering performance in your application.
152
+ *
153
+ * ```js
154
+ * const box = new THREE.BoxGeometry( 1, 1, 1 );
155
+ * const sphere = new THREE.SphereGeometry( 1, 12, 12 );
156
+ * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
157
+ *
158
+ * // initialize and add geometries into the batched mesh
159
+ * const batchedMesh = new BatchedMesh( 10, 5000, 10000, material );
160
+ * const boxGeometryId = batchedMesh.addGeometry( box );
161
+ * const sphereGeometryId = batchedMesh.addGeometry( sphere );
162
+ *
163
+ * // create instances of those geometries
164
+ * const boxInstancedId1 = batchedMesh.addInstance( boxGeometryId );
165
+ * const boxInstancedId2 = batchedMesh.addInstance( boxGeometryId );
166
+ *
167
+ * const sphereInstancedId1 = batchedMesh.addInstance( sphereGeometryId );
168
+ * const sphereInstancedId2 = batchedMesh.addInstance( sphereGeometryId );
169
+ *
170
+ * // position the geometries
171
+ * batchedMesh.setMatrixAt( boxInstancedId1, boxMatrix1 );
172
+ * batchedMesh.setMatrixAt( boxInstancedId2, boxMatrix2 );
173
+ *
174
+ * batchedMesh.setMatrixAt( sphereInstancedId1, sphereMatrix1 );
175
+ * batchedMesh.setMatrixAt( sphereInstancedId2, sphereMatrix2 );
176
+ *
177
+ * scene.add( batchedMesh );
178
+ * ```
179
+ *
180
+ * @augments Mesh
181
+ */
182
+ class BatchedMesh extends Mesh {
183
+
184
+ /**
185
+ * Constructs a new batched mesh.
186
+ *
187
+ * @param {number} maxInstanceCount - The maximum number of individual instances planned to be added and rendered.
188
+ * @param {number} maxVertexCount - The maximum number of vertices to be used by all unique geometries.
189
+ * @param {number} [maxIndexCount=maxVertexCount*2] - The maximum number of indices to be used by all unique geometries
190
+ * @param {Material|Array<Material>} [material] - The mesh material.
191
+ */
192
+ constructor( maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) {
129
193
 
130
194
  super( new BufferGeometry(), material );
131
195
 
196
+ /**
197
+ * This flag can be used for type testing.
198
+ *
199
+ * @type {boolean}
200
+ * @readonly
201
+ * @default true
202
+ */
132
203
  this.isBatchedMesh = true;
204
+
205
+ /**
206
+ * When set ot `true`, the individual objects of a batch are frustum culled.
207
+ *
208
+ * @type {boolean}
209
+ * @default true
210
+ */
133
211
  this.perObjectFrustumCulled = true;
212
+
213
+ /**
214
+ * When set to `true`, the individual objects of a batch are sorted to improve overdraw-related artifacts.
215
+ * If the material is marked as "transparent" objects are rendered back to front and if not then they are
216
+ * rendered front to back.
217
+ *
218
+ * @type {boolean}
219
+ * @default true
220
+ */
134
221
  this.sortObjects = true;
222
+
223
+ /**
224
+ * The bounding box of the batched mesh. Can be computed via {@link BatchedMesh#computeBoundingBox}.
225
+ *
226
+ * @type {?Box3}
227
+ * @default null
228
+ */
135
229
  this.boundingBox = null;
230
+
231
+ /**
232
+ * The bounding sphere of the batched mesh. Can be computed via {@link BatchedMesh#computeBoundingSphere}.
233
+ *
234
+ * @type {?Sphere}
235
+ * @default null
236
+ */
136
237
  this.boundingSphere = null;
238
+
239
+ /**
240
+ * Takes a sort a function that is run before render. The function takes a list of instances to
241
+ * sort and a camera. The objects in the list include a "z" field to perform a depth-ordered
242
+ * sort with.
243
+ *
244
+ * @type {?Function}
245
+ * @default null
246
+ */
137
247
  this.customSort = null;
138
248
 
139
- this._drawRanges = [];
140
- this._reservedRanges = [];
249
+ // stores visible, active, and geometry id per instance and reserved buffer ranges for geometries
250
+ this._instanceInfo = [];
251
+ this._geometryInfo = [];
252
+
253
+ // instance, geometry ids that have been set as inactive, and are available to be overwritten
254
+ this._availableInstanceIds = [];
255
+ this._availableGeometryIds = [];
256
+
257
+ // used to track where the next point is that geometry should be inserted
258
+ this._nextIndexStart = 0;
259
+ this._nextVertexStart = 0;
260
+ this._geometryCount = 0;
141
261
 
142
- this._visibility = [];
143
- this._active = [];
144
- this._bounds = [];
262
+ // flags
263
+ this._visibilityChanged = true;
264
+ this._geometryInitialized = false;
145
265
 
146
- this._maxGeometryCount = maxGeometryCount;
266
+ // cached user options
267
+ this._maxInstanceCount = maxInstanceCount;
147
268
  this._maxVertexCount = maxVertexCount;
148
269
  this._maxIndexCount = maxIndexCount;
149
270
 
150
- this._geometryInitialized = false;
151
- this._geometryCount = 0;
152
- this._multiDrawCounts = new Int32Array( maxGeometryCount );
153
- this._multiDrawStarts = new Int32Array( maxGeometryCount );
271
+ // buffers for multi draw
272
+ this._multiDrawCounts = new Int32Array( maxInstanceCount );
273
+ this._multiDrawStarts = new Int32Array( maxInstanceCount );
154
274
  this._multiDrawCount = 0;
155
- this._visibilityChanged = true;
275
+ this._multiDrawInstances = null;
156
276
 
157
277
  // Local matrix per geometry by using data texture
158
278
  this._matricesTexture = null;
279
+ this._indirectTexture = null;
280
+ this._colorsTexture = null;
159
281
 
160
282
  this._initMatricesTexture();
283
+ this._initIndirectTexture();
284
+
285
+ }
286
+
287
+ /**
288
+ * The maximum number of individual instances that can be stored in the batch.
289
+ *
290
+ * @type {number}
291
+ * @readonly
292
+ */
293
+ get maxInstanceCount() {
294
+
295
+ return this._maxInstanceCount;
296
+
297
+ }
298
+
299
+ /**
300
+ * The instance count.
301
+ *
302
+ * @type {number}
303
+ * @readonly
304
+ */
305
+ get instanceCount() {
306
+
307
+ return this._instanceInfo.length - this._availableInstanceIds.length;
308
+
309
+ }
310
+
311
+ /**
312
+ * The number of unused vertices.
313
+ *
314
+ * @type {number}
315
+ * @readonly
316
+ */
317
+ get unusedVertexCount() {
318
+
319
+ return this._maxVertexCount - this._nextVertexStart;
320
+
321
+ }
322
+
323
+ /**
324
+ * The number of unused indices.
325
+ *
326
+ * @type {number}
327
+ * @readonly
328
+ */
329
+ get unusedIndexCount() {
330
+
331
+ return this._maxIndexCount - this._nextIndexStart;
161
332
 
162
333
  }
163
334
 
@@ -170,7 +341,7 @@ class BatchedMesh extends Mesh {
170
341
  // 32x32 pixel texture max 256 matrices * 4 pixels = (32 * 32)
171
342
  // 64x64 pixel texture max 1024 matrices * 4 pixels = (64 * 64)
172
343
 
173
- let size = Math.sqrt( this._maxGeometryCount * 4 ); // 4 pixels needed for 1 matrix
344
+ let size = Math.sqrt( this._maxInstanceCount * 4 ); // 4 pixels needed for 1 matrix
174
345
  size = Math.ceil( size / 4 ) * 4;
175
346
  size = Math.max( size, 4 );
176
347
 
@@ -181,11 +352,36 @@ class BatchedMesh extends Mesh {
181
352
 
182
353
  }
183
354
 
355
+ _initIndirectTexture() {
356
+
357
+ let size = Math.sqrt( this._maxInstanceCount );
358
+ size = Math.ceil( size );
359
+
360
+ const indirectArray = new Uint32Array( size * size );
361
+ const indirectTexture = new DataTexture( indirectArray, size, size, RedIntegerFormat, UnsignedIntType );
362
+
363
+ this._indirectTexture = indirectTexture;
364
+
365
+ }
366
+
367
+ _initColorsTexture() {
368
+
369
+ let size = Math.sqrt( this._maxInstanceCount );
370
+ size = Math.ceil( size );
371
+
372
+ // 4 floats per RGBA pixel initialized to white
373
+ const colorsArray = new Float32Array( size * size * 4 ).fill( 1 );
374
+ const colorsTexture = new DataTexture( colorsArray, size, size, RGBAFormat, FloatType );
375
+ colorsTexture.colorSpace = ColorManagement.workingColorSpace;
376
+
377
+ this._colorsTexture = colorsTexture;
378
+
379
+ }
380
+
184
381
  _initializeGeometry( reference ) {
185
382
 
186
383
  const geometry = this.geometry;
187
384
  const maxVertexCount = this._maxVertexCount;
188
- const maxGeometryCount = this._maxGeometryCount;
189
385
  const maxIndexCount = this._maxIndexCount;
190
386
  if ( this._geometryInitialized === false ) {
191
387
 
@@ -195,8 +391,7 @@ class BatchedMesh extends Mesh {
195
391
  const { array, itemSize, normalized } = srcAttribute;
196
392
 
197
393
  const dstArray = new array.constructor( maxVertexCount * itemSize );
198
- const dstAttribute = new srcAttribute.constructor( dstArray, itemSize, normalized );
199
- dstAttribute.setUsage( srcAttribute.usage );
394
+ const dstAttribute = new BufferAttribute( dstArray, itemSize, normalized );
200
395
 
201
396
  geometry.setAttribute( attributeName, dstAttribute );
202
397
 
@@ -204,7 +399,8 @@ class BatchedMesh extends Mesh {
204
399
 
205
400
  if ( reference.getIndex() !== null ) {
206
401
 
207
- const indexArray = maxVertexCount > 65536
402
+ // Reserve last u16 index for primitive restart.
403
+ const indexArray = maxVertexCount > 65535
208
404
  ? new Uint32Array( maxIndexCount )
209
405
  : new Uint16Array( maxIndexCount );
210
406
 
@@ -212,46 +408,28 @@ class BatchedMesh extends Mesh {
212
408
 
213
409
  }
214
410
 
215
- const idArray = maxGeometryCount > 65536
216
- ? new Uint32Array( maxVertexCount )
217
- : new Uint16Array( maxVertexCount );
218
- geometry.setAttribute( ID_ATTR_NAME, new BufferAttribute( idArray, 1 ) );
219
-
220
411
  this._geometryInitialized = true;
221
412
 
222
413
  }
223
414
 
224
415
  }
225
416
 
226
- // Make sure the geometry is compatible with the existing combined geometry atributes
417
+ // Make sure the geometry is compatible with the existing combined geometry attributes
227
418
  _validateGeometry( geometry ) {
228
419
 
229
- // check that the geometry doesn't have a version of our reserved id attribute
230
- if ( geometry.getAttribute( ID_ATTR_NAME ) ) {
231
-
232
- throw new Error( `BatchedMesh: Geometry cannot use attribute "${ ID_ATTR_NAME }"` );
233
-
234
- }
235
-
236
420
  // check to ensure the geometries are using consistent attributes and indices
237
421
  const batchGeometry = this.geometry;
238
422
  if ( Boolean( geometry.getIndex() ) !== Boolean( batchGeometry.getIndex() ) ) {
239
423
 
240
- throw new Error( 'BatchedMesh: All geometries must consistently have "index".' );
424
+ throw new Error( 'THREE.BatchedMesh: All geometries must consistently have "index".' );
241
425
 
242
426
  }
243
427
 
244
428
  for ( const attributeName in batchGeometry.attributes ) {
245
429
 
246
- if ( attributeName === ID_ATTR_NAME ) {
247
-
248
- continue;
249
-
250
- }
251
-
252
430
  if ( ! geometry.hasAttribute( attributeName ) ) {
253
431
 
254
- throw new Error( `BatchedMesh: Added geometry missing "${ attributeName }". All geometries must have consistent attributes.` );
432
+ throw new Error( `THREE.BatchedMesh: Added geometry missing "${ attributeName }". All geometries must have consistent attributes.` );
255
433
 
256
434
  }
257
435
 
@@ -259,7 +437,7 @@ class BatchedMesh extends Mesh {
259
437
  const dstAttribute = batchGeometry.getAttribute( attributeName );
260
438
  if ( srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized ) {
261
439
 
262
- throw new Error( 'BatchedMesh: All attributes must have a consistent itemSize and normalized value.' );
440
+ throw new Error( 'THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.' );
263
441
 
264
442
  }
265
443
 
@@ -267,6 +445,45 @@ class BatchedMesh extends Mesh {
267
445
 
268
446
  }
269
447
 
448
+ /**
449
+ * Validates the instance defined by the given ID.
450
+ *
451
+ * @param {number} instanceId - The instance to validate.
452
+ */
453
+ validateInstanceId( instanceId ) {
454
+
455
+ const instanceInfo = this._instanceInfo;
456
+ if ( instanceId < 0 || instanceId >= instanceInfo.length || instanceInfo[ instanceId ].active === false ) {
457
+
458
+ throw new Error( `THREE.BatchedMesh: Invalid instanceId ${instanceId}. Instance is either out of range or has been deleted.` );
459
+
460
+ }
461
+
462
+ }
463
+
464
+ /**
465
+ * Validates the geometry defined by the given ID.
466
+ *
467
+ * @param {number} geometryId - The geometry to validate.
468
+ */
469
+ validateGeometryId( geometryId ) {
470
+
471
+ const geometryInfoList = this._geometryInfo;
472
+ if ( geometryId < 0 || geometryId >= geometryInfoList.length || geometryInfoList[ geometryId ].active === false ) {
473
+
474
+ throw new Error( `THREE.BatchedMesh: Invalid geometryId ${geometryId}. Geometry is either out of range or has been deleted.` );
475
+
476
+ }
477
+
478
+ }
479
+
480
+ /**
481
+ * Takes a sort a function that is run before render. The function takes a list of instances to
482
+ * sort and a camera. The objects in the list include a "z" field to perform a depth-ordered sort with.
483
+ *
484
+ * @param {Function} func - The custom sort function.
485
+ * @return {BatchedMesh} A reference to this batched mesh.
486
+ */
270
487
  setCustomSort( func ) {
271
488
 
272
489
  this.customSort = func;
@@ -274,6 +491,11 @@ class BatchedMesh extends Mesh {
274
491
 
275
492
  }
276
493
 
494
+ /**
495
+ * Computes the bounding box, updating {@link BatchedMesh#boundingBox}.
496
+ * Bounding boxes aren't computed by default. They need to be explicitly computed,
497
+ * otherwise they are `null`.
498
+ */
277
499
  computeBoundingBox() {
278
500
 
279
501
  if ( this.boundingBox === null ) {
@@ -282,23 +504,28 @@ class BatchedMesh extends Mesh {
282
504
 
283
505
  }
284
506
 
285
- const geometryCount = this._geometryCount;
286
507
  const boundingBox = this.boundingBox;
287
- const active = this._active;
508
+ const instanceInfo = this._instanceInfo;
288
509
 
289
510
  boundingBox.makeEmpty();
290
- for ( let i = 0; i < geometryCount; i ++ ) {
511
+ for ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {
291
512
 
292
- if ( active[ i ] === false ) continue;
513
+ if ( instanceInfo[ i ].active === false ) continue;
293
514
 
515
+ const geometryId = instanceInfo[ i ].geometryIndex;
294
516
  this.getMatrixAt( i, _matrix );
295
- this.getBoundingBoxAt( i, _box ).applyMatrix4( _matrix );
517
+ this.getBoundingBoxAt( geometryId, _box ).applyMatrix4( _matrix );
296
518
  boundingBox.union( _box );
297
519
 
298
520
  }
299
521
 
300
522
  }
301
523
 
524
+ /**
525
+ * Computes the bounding sphere, updating {@link BatchedMesh#boundingSphere}.
526
+ * Bounding spheres aren't computed by default. They need to be explicitly computed,
527
+ * otherwise they are `null`.
528
+ */
302
529
  computeBoundingSphere() {
303
530
 
304
531
  if ( this.boundingSphere === null ) {
@@ -307,163 +534,188 @@ class BatchedMesh extends Mesh {
307
534
 
308
535
  }
309
536
 
310
- const geometryCount = this._geometryCount;
311
537
  const boundingSphere = this.boundingSphere;
312
- const active = this._active;
538
+ const instanceInfo = this._instanceInfo;
313
539
 
314
540
  boundingSphere.makeEmpty();
315
- for ( let i = 0; i < geometryCount; i ++ ) {
541
+ for ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {
316
542
 
317
- if ( active[ i ] === false ) continue;
543
+ if ( instanceInfo[ i ].active === false ) continue;
318
544
 
545
+ const geometryId = instanceInfo[ i ].geometryIndex;
319
546
  this.getMatrixAt( i, _matrix );
320
- this.getBoundingSphereAt( i, _sphere ).applyMatrix4( _matrix );
547
+ this.getBoundingSphereAt( geometryId, _sphere ).applyMatrix4( _matrix );
321
548
  boundingSphere.union( _sphere );
322
549
 
323
550
  }
324
551
 
325
552
  }
326
553
 
327
- addGeometry( geometry, vertexCount = - 1, indexCount = - 1 ) {
554
+ /**
555
+ * Adds a new instance to the batch using the geometry of the given ID and returns
556
+ * a new id referring to the new instance to be used by other functions.
557
+ *
558
+ * @param {number} geometryId - The ID of a previously added geometry via {@link BatchedMesh#addGeometry}.
559
+ * @return {number} The instance ID.
560
+ */
561
+ addInstance( geometryId ) {
328
562
 
329
- this._initializeGeometry( geometry );
330
-
331
- this._validateGeometry( geometry );
563
+ const atCapacity = this._instanceInfo.length >= this.maxInstanceCount;
332
564
 
333
565
  // ensure we're not over geometry
334
- if ( this._geometryCount >= this._maxGeometryCount ) {
566
+ if ( atCapacity && this._availableInstanceIds.length === 0 ) {
335
567
 
336
- throw new Error( 'BatchedMesh: Maximum geometry count reached.' );
568
+ throw new Error( 'THREE.BatchedMesh: Maximum item count reached.' );
337
569
 
338
570
  }
339
571
 
340
- // get the necessary range fo the geometry
341
- const reservedRange = {
342
- vertexStart: - 1,
343
- vertexCount: - 1,
344
- indexStart: - 1,
345
- indexCount: - 1,
572
+ const instanceInfo = {
573
+ visible: true,
574
+ active: true,
575
+ geometryIndex: geometryId,
346
576
  };
347
577
 
348
- let lastRange = null;
349
- const reservedRanges = this._reservedRanges;
350
- const drawRanges = this._drawRanges;
351
- const bounds = this._bounds;
352
- if ( this._geometryCount !== 0 ) {
578
+ let drawId = null;
353
579
 
354
- lastRange = reservedRanges[ reservedRanges.length - 1 ];
355
-
356
- }
580
+ // Prioritize using previously freed instance ids
581
+ if ( this._availableInstanceIds.length > 0 ) {
357
582
 
358
- if ( vertexCount === - 1 ) {
583
+ this._availableInstanceIds.sort( ascIdSort );
359
584
 
360
- reservedRange.vertexCount = geometry.getAttribute( 'position' ).count;
585
+ drawId = this._availableInstanceIds.shift();
586
+ this._instanceInfo[ drawId ] = instanceInfo;
361
587
 
362
588
  } else {
363
589
 
364
- reservedRange.vertexCount = vertexCount;
590
+ drawId = this._instanceInfo.length;
591
+ this._instanceInfo.push( instanceInfo );
365
592
 
366
593
  }
367
594
 
368
- if ( lastRange === null ) {
369
-
370
- reservedRange.vertexStart = 0;
595
+ const matricesTexture = this._matricesTexture;
596
+ _matrix.identity().toArray( matricesTexture.image.data, drawId * 16 );
597
+ matricesTexture.needsUpdate = true;
371
598
 
372
- } else {
599
+ const colorsTexture = this._colorsTexture;
600
+ if ( colorsTexture ) {
373
601
 
374
- reservedRange.vertexStart = lastRange.vertexStart + lastRange.vertexCount;
602
+ _whiteColor.toArray( colorsTexture.image.data, drawId * 4 );
603
+ colorsTexture.needsUpdate = true;
375
604
 
376
605
  }
377
606
 
378
- const index = geometry.getIndex();
379
- const hasIndex = index !== null;
380
- if ( hasIndex ) {
607
+ this._visibilityChanged = true;
608
+ return drawId;
381
609
 
382
- if ( indexCount === - 1 ) {
610
+ }
383
611
 
384
- reservedRange.indexCount = index.count;
612
+ /**
613
+ * Adds the given geometry to the batch and returns the associated
614
+ * geometry id referring to it to be used in other functions.
615
+ *
616
+ * @param {BufferGeometry} geometry - The geometry to add.
617
+ * @param {number} [reservedVertexCount=-1] - Optional parameter specifying the amount of
618
+ * vertex buffer space to reserve for the added geometry. This is necessary if it is planned
619
+ * to set a new geometry at this index at a later time that is larger than the original geometry.
620
+ * Defaults to the length of the given geometry vertex buffer.
621
+ * @param {number} [reservedIndexCount=-1] - Optional parameter specifying the amount of index
622
+ * buffer space to reserve for the added geometry. This is necessary if it is planned to set a
623
+ * new geometry at this index at a later time that is larger than the original geometry. Defaults to
624
+ * the length of the given geometry index buffer.
625
+ * @return {number} The geometry ID.
626
+ */
627
+ addGeometry( geometry, reservedVertexCount = - 1, reservedIndexCount = - 1 ) {
385
628
 
386
- } else {
629
+ this._initializeGeometry( geometry );
387
630
 
388
- reservedRange.indexCount = indexCount;
631
+ this._validateGeometry( geometry );
389
632
 
390
- }
633
+ const geometryInfo = {
634
+ // geometry information
635
+ vertexStart: - 1,
636
+ vertexCount: - 1,
637
+ reservedVertexCount: - 1,
391
638
 
392
- if ( lastRange === null ) {
639
+ indexStart: - 1,
640
+ indexCount: - 1,
641
+ reservedIndexCount: - 1,
393
642
 
394
- reservedRange.indexStart = 0;
643
+ // draw range information
644
+ start: - 1,
645
+ count: - 1,
395
646
 
396
- } else {
647
+ // state
648
+ boundingBox: null,
649
+ boundingSphere: null,
650
+ active: true,
651
+ };
397
652
 
398
- reservedRange.indexStart = lastRange.indexStart + lastRange.indexCount;
653
+ const geometryInfoList = this._geometryInfo;
654
+ geometryInfo.vertexStart = this._nextVertexStart;
655
+ geometryInfo.reservedVertexCount = reservedVertexCount === - 1 ? geometry.getAttribute( 'position' ).count : reservedVertexCount;
399
656
 
400
- }
657
+ const index = geometry.getIndex();
658
+ const hasIndex = index !== null;
659
+ if ( hasIndex ) {
660
+
661
+ geometryInfo.indexStart = this._nextIndexStart;
662
+ geometryInfo.reservedIndexCount = reservedIndexCount === - 1 ? index.count : reservedIndexCount;
401
663
 
402
664
  }
403
665
 
404
666
  if (
405
- reservedRange.indexStart !== - 1 &&
406
- reservedRange.indexStart + reservedRange.indexCount > this._maxIndexCount ||
407
- reservedRange.vertexStart + reservedRange.vertexCount > this._maxVertexCount
667
+ geometryInfo.indexStart !== - 1 &&
668
+ geometryInfo.indexStart + geometryInfo.reservedIndexCount > this._maxIndexCount ||
669
+ geometryInfo.vertexStart + geometryInfo.reservedVertexCount > this._maxVertexCount
408
670
  ) {
409
671
 
410
- throw new Error( 'BatchedMesh: Reserved space request exceeds the maximum buffer size.' );
672
+ throw new Error( 'THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.' );
411
673
 
412
674
  }
413
675
 
414
- const visibility = this._visibility;
415
- const active = this._active;
416
- const matricesTexture = this._matricesTexture;
417
- const matricesArray = this._matricesTexture.image.data;
418
-
419
- // push new visibility states
420
- visibility.push( true );
421
- active.push( true );
422
-
423
676
  // update id
424
- const geometryId = this._geometryCount;
425
- this._geometryCount ++;
677
+ let geometryId;
678
+ if ( this._availableGeometryIds.length > 0 ) {
426
679
 
427
- // initialize matrix information
428
- _identityMatrix.toArray( matricesArray, geometryId * 16 );
429
- matricesTexture.needsUpdate = true;
680
+ this._availableGeometryIds.sort( ascIdSort );
430
681
 
431
- // add the reserved range and draw range objects
432
- reservedRanges.push( reservedRange );
433
- drawRanges.push( {
434
- start: hasIndex ? reservedRange.indexStart : reservedRange.vertexStart,
435
- count: - 1
436
- } );
437
- bounds.push( {
438
- boxInitialized: false,
439
- box: new Box3(),
682
+ geometryId = this._availableGeometryIds.shift();
683
+ geometryInfoList[ geometryId ] = geometryInfo;
440
684
 
441
- sphereInitialized: false,
442
- sphere: new Sphere()
443
- } );
444
685
 
445
- // set the id for the geometry
446
- const idAttribute = this.geometry.getAttribute( ID_ATTR_NAME );
447
- for ( let i = 0; i < reservedRange.vertexCount; i ++ ) {
686
+ } else {
448
687
 
449
- idAttribute.setX( reservedRange.vertexStart + i, geometryId );
688
+ geometryId = this._geometryCount;
689
+ this._geometryCount ++;
690
+ geometryInfoList.push( geometryInfo );
450
691
 
451
692
  }
452
693
 
453
- idAttribute.needsUpdate = true;
454
-
455
694
  // update the geometry
456
695
  this.setGeometryAt( geometryId, geometry );
457
696
 
697
+ // increment the next geometry position
698
+ this._nextIndexStart = geometryInfo.indexStart + geometryInfo.reservedIndexCount;
699
+ this._nextVertexStart = geometryInfo.vertexStart + geometryInfo.reservedVertexCount;
700
+
458
701
  return geometryId;
459
702
 
460
703
  }
461
704
 
462
- setGeometryAt( id, geometry ) {
705
+ /**
706
+ * Replaces the geometry at the given ID with the provided geometry. Throws an error if there
707
+ * is not enough space reserved for geometry. Calling this will change all instances that are
708
+ * rendering that geometry.
709
+ *
710
+ * @param {number} geometryId - The ID of the geometry that should be replaced with the given geometry.
711
+ * @param {BufferGeometry} geometry - The new geometry.
712
+ * @return {number} The geometry ID.
713
+ */
714
+ setGeometryAt( geometryId, geometry ) {
463
715
 
464
- if ( id >= this._geometryCount ) {
716
+ if ( geometryId >= this._geometryCount ) {
465
717
 
466
- throw new Error( 'BatchedMesh: Maximum geometry count reached.' );
718
+ throw new Error( 'THREE.BatchedMesh: Maximum geometry count reached.' );
467
719
 
468
720
  }
469
721
 
@@ -473,27 +725,23 @@ class BatchedMesh extends Mesh {
473
725
  const hasIndex = batchGeometry.getIndex() !== null;
474
726
  const dstIndex = batchGeometry.getIndex();
475
727
  const srcIndex = geometry.getIndex();
476
- const reservedRange = this._reservedRanges[ id ];
728
+ const geometryInfo = this._geometryInfo[ geometryId ];
477
729
  if (
478
730
  hasIndex &&
479
- srcIndex.count > reservedRange.indexCount ||
480
- geometry.attributes.position.count > reservedRange.vertexCount
731
+ srcIndex.count > geometryInfo.reservedIndexCount ||
732
+ geometry.attributes.position.count > geometryInfo.reservedVertexCount
481
733
  ) {
482
734
 
483
- throw new Error( 'BatchedMesh: Reserved space not large enough for provided geometry.' );
735
+ throw new Error( 'THREE.BatchedMesh: Reserved space not large enough for provided geometry.' );
484
736
 
485
737
  }
486
738
 
487
- // copy geometry over
488
- const vertexStart = reservedRange.vertexStart;
489
- const vertexCount = reservedRange.vertexCount;
490
- for ( const attributeName in batchGeometry.attributes ) {
739
+ // copy geometry buffer data over
740
+ const vertexStart = geometryInfo.vertexStart;
741
+ const reservedVertexCount = geometryInfo.reservedVertexCount;
742
+ geometryInfo.vertexCount = geometry.getAttribute( 'position' ).count;
491
743
 
492
- if ( attributeName === ID_ATTR_NAME ) {
493
-
494
- continue;
495
-
496
- }
744
+ for ( const attributeName in batchGeometry.attributes ) {
497
745
 
498
746
  // copy attribute data
499
747
  const srcAttribute = geometry.getAttribute( attributeName );
@@ -502,7 +750,7 @@ class BatchedMesh extends Mesh {
502
750
 
503
751
  // fill the rest in with zeroes
504
752
  const itemSize = srcAttribute.itemSize;
505
- for ( let i = srcAttribute.count, l = vertexCount; i < l; i ++ ) {
753
+ for ( let i = srcAttribute.count, l = reservedVertexCount; i < l; i ++ ) {
506
754
 
507
755
  const index = vertexStart + i;
508
756
  for ( let c = 0; c < itemSize; c ++ ) {
@@ -514,13 +762,16 @@ class BatchedMesh extends Mesh {
514
762
  }
515
763
 
516
764
  dstAttribute.needsUpdate = true;
765
+ dstAttribute.addUpdateRange( vertexStart * itemSize, reservedVertexCount * itemSize );
517
766
 
518
767
  }
519
768
 
520
769
  // copy index
521
770
  if ( hasIndex ) {
522
771
 
523
- const indexStart = reservedRange.indexStart;
772
+ const indexStart = geometryInfo.indexStart;
773
+ const reservedIndexCount = geometryInfo.reservedIndexCount;
774
+ geometryInfo.indexCount = geometry.getIndex().count;
524
775
 
525
776
  // copy index data over
526
777
  for ( let i = 0; i < srcIndex.count; i ++ ) {
@@ -530,90 +781,215 @@ class BatchedMesh extends Mesh {
530
781
  }
531
782
 
532
783
  // fill the rest in with zeroes
533
- for ( let i = srcIndex.count, l = reservedRange.indexCount; i < l; i ++ ) {
784
+ for ( let i = srcIndex.count, l = reservedIndexCount; i < l; i ++ ) {
534
785
 
535
786
  dstIndex.setX( indexStart + i, vertexStart );
536
787
 
537
788
  }
538
789
 
539
790
  dstIndex.needsUpdate = true;
791
+ dstIndex.addUpdateRange( indexStart, geometryInfo.reservedIndexCount );
540
792
 
541
793
  }
542
794
 
795
+ // update the draw range
796
+ geometryInfo.start = hasIndex ? geometryInfo.indexStart : geometryInfo.vertexStart;
797
+ geometryInfo.count = hasIndex ? geometryInfo.indexCount : geometryInfo.vertexCount;
798
+
543
799
  // store the bounding boxes
544
- const bound = this._bounds[ id ];
800
+ geometryInfo.boundingBox = null;
545
801
  if ( geometry.boundingBox !== null ) {
546
802
 
547
- bound.box.copy( geometry.boundingBox );
548
- bound.boxInitialized = true;
803
+ geometryInfo.boundingBox = geometry.boundingBox.clone();
549
804
 
550
- } else {
805
+ }
551
806
 
552
- bound.boxInitialized = false;
807
+ geometryInfo.boundingSphere = null;
808
+ if ( geometry.boundingSphere !== null ) {
809
+
810
+ geometryInfo.boundingSphere = geometry.boundingSphere.clone();
553
811
 
554
812
  }
555
813
 
556
- if ( geometry.boundingSphere !== null ) {
814
+ this._visibilityChanged = true;
815
+ return geometryId;
557
816
 
558
- bound.sphere.copy( geometry.boundingSphere );
559
- bound.sphereInitialized = true;
817
+ }
560
818
 
561
- } else {
819
+ /**
820
+ * Deletes the geometry defined by the given ID from this batch. Any instances referencing
821
+ * this geometry will also be removed as a side effect.
822
+ *
823
+ * @param {number} geometryId - The ID of the geometry to remove from the batch.
824
+ * @return {BatchedMesh} A reference to this batched mesh.
825
+ */
826
+ deleteGeometry( geometryId ) {
827
+
828
+ const geometryInfoList = this._geometryInfo;
829
+ if ( geometryId >= geometryInfoList.length || geometryInfoList[ geometryId ].active === false ) {
830
+
831
+ return this;
832
+
833
+ }
834
+
835
+ // delete any instances associated with this geometry
836
+ const instanceInfo = this._instanceInfo;
837
+ for ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {
838
+
839
+ if ( instanceInfo[ i ].active && instanceInfo[ i ].geometryIndex === geometryId ) {
562
840
 
563
- bound.sphereInitialized = false;
841
+ this.deleteInstance( i );
842
+
843
+ }
564
844
 
565
845
  }
566
846
 
567
- // set drawRange count
568
- const drawRange = this._drawRanges[ id ];
569
- const posAttr = geometry.getAttribute( 'position' );
570
- drawRange.count = hasIndex ? srcIndex.count : posAttr.count;
847
+ geometryInfoList[ geometryId ].active = false;
848
+ this._availableGeometryIds.push( geometryId );
571
849
  this._visibilityChanged = true;
572
850
 
573
- return id;
851
+ return this;
574
852
 
575
853
  }
576
854
 
577
- deleteGeometry( geometryId ) {
855
+ /**
856
+ * Deletes an existing instance from the batch using the given ID.
857
+ *
858
+ * @param {number} instanceId - The ID of the instance to remove from the batch.
859
+ * @return {BatchedMesh} A reference to this batched mesh.
860
+ */
861
+ deleteInstance( instanceId ) {
578
862
 
579
- // Note: User needs to call optimize() afterward to pack the data.
863
+ this.validateInstanceId( instanceId );
580
864
 
581
- const active = this._active;
582
- if ( geometryId >= active.length || active[ geometryId ] === false ) {
865
+ this._instanceInfo[ instanceId ].active = false;
866
+ this._availableInstanceIds.push( instanceId );
867
+ this._visibilityChanged = true;
583
868
 
584
- return this;
869
+ return this;
585
870
 
586
- }
871
+ }
587
872
 
588
- active[ geometryId ] = false;
589
- this._visibilityChanged = true;
873
+ /**
874
+ * Repacks the sub geometries in [name] to remove any unused space remaining from
875
+ * previously deleted geometry, freeing up space to add new geometry.
876
+ *
877
+ * @param {number} instanceId - The ID of the instance to remove from the batch.
878
+ * @return {BatchedMesh} A reference to this batched mesh.
879
+ */
880
+ optimize() {
881
+
882
+ // track the next indices to copy data to
883
+ let nextVertexStart = 0;
884
+ let nextIndexStart = 0;
885
+
886
+ // Iterate over all geometry ranges in order sorted from earliest in the geometry buffer to latest
887
+ // in the geometry buffer. Because draw range objects can be reused there is no guarantee of their order.
888
+ const geometryInfoList = this._geometryInfo;
889
+ const indices = geometryInfoList
890
+ .map( ( e, i ) => i )
891
+ .sort( ( a, b ) => {
892
+
893
+ return geometryInfoList[ a ].vertexStart - geometryInfoList[ b ].vertexStart;
894
+
895
+ } );
896
+
897
+ const geometry = this.geometry;
898
+ for ( let i = 0, l = geometryInfoList.length; i < l; i ++ ) {
899
+
900
+ // if a geometry range is inactive then don't copy anything
901
+ const index = indices[ i ];
902
+ const geometryInfo = geometryInfoList[ index ];
903
+ if ( geometryInfo.active === false ) {
904
+
905
+ continue;
906
+
907
+ }
908
+
909
+ // if a geometry contains an index buffer then shift it, as well
910
+ if ( geometry.index !== null ) {
911
+
912
+ if ( geometryInfo.indexStart !== nextIndexStart ) {
913
+
914
+ const { indexStart, vertexStart, reservedIndexCount } = geometryInfo;
915
+ const index = geometry.index;
916
+ const array = index.array;
917
+
918
+ // shift the index pointers based on how the vertex data will shift
919
+ // adjusting the index must happen first so the original vertex start value is available
920
+ const elementDelta = nextVertexStart - vertexStart;
921
+ for ( let j = indexStart; j < indexStart + reservedIndexCount; j ++ ) {
922
+
923
+ array[ j ] = array[ j ] + elementDelta;
924
+
925
+ }
926
+
927
+ index.array.copyWithin( nextIndexStart, indexStart, indexStart + reservedIndexCount );
928
+ index.addUpdateRange( nextIndexStart, reservedIndexCount );
929
+
930
+ geometryInfo.indexStart = nextIndexStart;
931
+
932
+ }
933
+
934
+ nextIndexStart += geometryInfo.reservedIndexCount;
935
+
936
+ }
937
+
938
+ // if a geometry needs to be moved then copy attribute data to overwrite unused space
939
+ if ( geometryInfo.vertexStart !== nextVertexStart ) {
940
+
941
+ const { vertexStart, reservedVertexCount } = geometryInfo;
942
+ const attributes = geometry.attributes;
943
+ for ( const key in attributes ) {
944
+
945
+ const attribute = attributes[ key ];
946
+ const { array, itemSize } = attribute;
947
+ array.copyWithin( nextVertexStart * itemSize, vertexStart * itemSize, ( vertexStart + reservedVertexCount ) * itemSize );
948
+ attribute.addUpdateRange( nextVertexStart * itemSize, reservedVertexCount * itemSize );
949
+
950
+ }
951
+
952
+ geometryInfo.vertexStart = nextVertexStart;
953
+
954
+ }
955
+
956
+ nextVertexStart += geometryInfo.reservedVertexCount;
957
+ geometryInfo.start = geometry.index ? geometryInfo.indexStart : geometryInfo.vertexStart;
958
+
959
+ // step the next geometry points to the shifted position
960
+ this._nextIndexStart = geometry.index ? geometryInfo.indexStart + geometryInfo.reservedIndexCount : 0;
961
+ this._nextVertexStart = geometryInfo.vertexStart + geometryInfo.reservedVertexCount;
962
+
963
+ }
590
964
 
591
965
  return this;
592
966
 
593
967
  }
594
968
 
595
- // get bounding box and compute it if it doesn't exist
596
- getBoundingBoxAt( id, target ) {
969
+ /**
970
+ * Returns the bounding box for the given geometry.
971
+ *
972
+ * @param {number} geometryId - The ID of the geometry to return the bounding box for.
973
+ * @param {Box3} target - The target object that is used to store the method's result.
974
+ * @return {?Box3} The geometry's bounding box. Returns `null` if no geometry has been found for the given ID.
975
+ */
976
+ getBoundingBoxAt( geometryId, target ) {
597
977
 
598
- const active = this._active;
599
- if ( active[ id ] === false ) {
978
+ if ( geometryId >= this._geometryCount ) {
600
979
 
601
980
  return null;
602
981
 
603
982
  }
604
983
 
605
984
  // compute bounding box
606
- const bound = this._bounds[ id ];
607
- const box = bound.box;
608
985
  const geometry = this.geometry;
609
- if ( bound.boxInitialized === false ) {
610
-
611
- box.makeEmpty();
986
+ const geometryInfo = this._geometryInfo[ geometryId ];
987
+ if ( geometryInfo.boundingBox === null ) {
612
988
 
989
+ const box = new Box3();
613
990
  const index = geometry.index;
614
991
  const position = geometry.attributes.position;
615
- const drawRange = this._drawRanges[ id ];
616
- for ( let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i ++ ) {
992
+ for ( let i = geometryInfo.start, l = geometryInfo.start + geometryInfo.count; i < l; i ++ ) {
617
993
 
618
994
  let iv = i;
619
995
  if ( index ) {
@@ -626,42 +1002,44 @@ class BatchedMesh extends Mesh {
626
1002
 
627
1003
  }
628
1004
 
629
- bound.boxInitialized = true;
1005
+ geometryInfo.boundingBox = box;
630
1006
 
631
1007
  }
632
1008
 
633
- target.copy( box );
1009
+ target.copy( geometryInfo.boundingBox );
634
1010
  return target;
635
1011
 
636
1012
  }
637
1013
 
638
- // get bounding sphere and compute it if it doesn't exist
639
- getBoundingSphereAt( id, target ) {
1014
+ /**
1015
+ * Returns the bounding sphere for the given geometry.
1016
+ *
1017
+ * @param {number} geometryId - The ID of the geometry to return the bounding sphere for.
1018
+ * @param {Sphere} target - The target object that is used to store the method's result.
1019
+ * @return {?Sphere} The geometry's bounding sphere. Returns `null` if no geometry has been found for the given ID.
1020
+ */
1021
+ getBoundingSphereAt( geometryId, target ) {
640
1022
 
641
- const active = this._active;
642
- if ( active[ id ] === false ) {
1023
+ if ( geometryId >= this._geometryCount ) {
643
1024
 
644
1025
  return null;
645
1026
 
646
1027
  }
647
1028
 
648
1029
  // compute bounding sphere
649
- const bound = this._bounds[ id ];
650
- const sphere = bound.sphere;
651
1030
  const geometry = this.geometry;
652
- if ( bound.sphereInitialized === false ) {
653
-
654
- sphere.makeEmpty();
1031
+ const geometryInfo = this._geometryInfo[ geometryId ];
1032
+ if ( geometryInfo.boundingSphere === null ) {
655
1033
 
656
- this.getBoundingBoxAt( id, _box );
1034
+ const sphere = new Sphere();
1035
+ this.getBoundingBoxAt( geometryId, _box );
657
1036
  _box.getCenter( sphere.center );
658
1037
 
659
1038
  const index = geometry.index;
660
1039
  const position = geometry.attributes.position;
661
- const drawRange = this._drawRanges[ id ];
662
1040
 
663
1041
  let maxRadiusSq = 0;
664
- for ( let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i ++ ) {
1042
+ for ( let i = geometryInfo.start, l = geometryInfo.start + geometryInfo.count; i < l; i ++ ) {
665
1043
 
666
1044
  let iv = i;
667
1045
  if ( index ) {
@@ -676,100 +1054,319 @@ class BatchedMesh extends Mesh {
676
1054
  }
677
1055
 
678
1056
  sphere.radius = Math.sqrt( maxRadiusSq );
679
- bound.sphereInitialized = true;
1057
+ geometryInfo.boundingSphere = sphere;
680
1058
 
681
1059
  }
682
1060
 
683
- target.copy( sphere );
1061
+ target.copy( geometryInfo.boundingSphere );
684
1062
  return target;
685
1063
 
686
1064
  }
687
1065
 
688
- setMatrixAt( geometryId, matrix ) {
1066
+ /**
1067
+ * Sets the given local transformation matrix to the defined instance.
1068
+ * Negatively scaled matrices are not supported.
1069
+ *
1070
+ * @param {number} instanceId - The ID of an instance to set the matrix of.
1071
+ * @param {Matrix4} matrix - A 4x4 matrix representing the local transformation of a single instance.
1072
+ * @return {BatchedMesh} A reference to this batched mesh.
1073
+ */
1074
+ setMatrixAt( instanceId, matrix ) {
689
1075
 
690
- // @TODO: Map geometryId to index of the arrays because
691
- // optimize() can make geometryId mismatch the index
1076
+ this.validateInstanceId( instanceId );
692
1077
 
693
- const active = this._active;
694
1078
  const matricesTexture = this._matricesTexture;
695
1079
  const matricesArray = this._matricesTexture.image.data;
696
- const geometryCount = this._geometryCount;
697
- if ( geometryId >= geometryCount || active[ geometryId ] === false ) {
1080
+ matrix.toArray( matricesArray, instanceId * 16 );
1081
+ matricesTexture.needsUpdate = true;
698
1082
 
699
- return this;
1083
+ return this;
700
1084
 
701
- }
1085
+ }
702
1086
 
703
- matrix.toArray( matricesArray, geometryId * 16 );
704
- matricesTexture.needsUpdate = true;
1087
+ /**
1088
+ * Returns the local transformation matrix of the defined instance.
1089
+ *
1090
+ * @param {number} instanceId - The ID of an instance to get the matrix of.
1091
+ * @param {Matrix4} matrix - The target object that is used to store the method's result.
1092
+ * @return {Matrix4} The instance's local transformation matrix.
1093
+ */
1094
+ getMatrixAt( instanceId, matrix ) {
705
1095
 
706
- return this;
1096
+ this.validateInstanceId( instanceId );
1097
+ return matrix.fromArray( this._matricesTexture.image.data, instanceId * 16 );
707
1098
 
708
1099
  }
709
1100
 
710
- getMatrixAt( geometryId, matrix ) {
1101
+ /**
1102
+ * Sets the given color to the defined instance.
1103
+ *
1104
+ * @param {number} instanceId - The ID of an instance to set the color of.
1105
+ * @param {Color} color - The color to set the instance to.
1106
+ * @return {BatchedMesh} A reference to this batched mesh.
1107
+ */
1108
+ setColorAt( instanceId, color ) {
711
1109
 
712
- const active = this._active;
713
- const matricesArray = this._matricesTexture.image.data;
714
- const geometryCount = this._geometryCount;
715
- if ( geometryId >= geometryCount || active[ geometryId ] === false ) {
1110
+ this.validateInstanceId( instanceId );
716
1111
 
717
- return null;
1112
+ if ( this._colorsTexture === null ) {
1113
+
1114
+ this._initColorsTexture();
718
1115
 
719
1116
  }
720
1117
 
721
- return matrix.fromArray( matricesArray, geometryId * 16 );
1118
+ color.toArray( this._colorsTexture.image.data, instanceId * 4 );
1119
+ this._colorsTexture.needsUpdate = true;
1120
+
1121
+ return this;
722
1122
 
723
1123
  }
724
1124
 
725
- setVisibleAt( geometryId, value ) {
1125
+ /**
1126
+ * Returns the color of the defined instance.
1127
+ *
1128
+ * @param {number} instanceId - The ID of an instance to get the color of.
1129
+ * @param {Color} color - The target object that is used to store the method's result.
1130
+ * @return {Color} The instance's color.
1131
+ */
1132
+ getColorAt( instanceId, color ) {
726
1133
 
727
- const visibility = this._visibility;
728
- const active = this._active;
729
- const geometryCount = this._geometryCount;
1134
+ this.validateInstanceId( instanceId );
1135
+ return color.fromArray( this._colorsTexture.image.data, instanceId * 4 );
730
1136
 
731
- // if the geometry is out of range, not active, or visibility state
732
- // does not change then return early
733
- if (
734
- geometryId >= geometryCount ||
735
- active[ geometryId ] === false ||
736
- visibility[ geometryId ] === value
737
- ) {
1137
+ }
1138
+
1139
+ /**
1140
+ * Sets the visibility of the instance.
1141
+ *
1142
+ * @param {number} instanceId - The id of the instance to set the visibility of.
1143
+ * @param {boolean} visible - Whether the instance is visible or not.
1144
+ * @return {BatchedMesh} A reference to this batched mesh.
1145
+ */
1146
+ setVisibleAt( instanceId, visible ) {
1147
+
1148
+ this.validateInstanceId( instanceId );
1149
+
1150
+ if ( this._instanceInfo[ instanceId ].visible === visible ) {
738
1151
 
739
1152
  return this;
740
1153
 
741
1154
  }
742
1155
 
743
- visibility[ geometryId ] = value;
1156
+ this._instanceInfo[ instanceId ].visible = visible;
744
1157
  this._visibilityChanged = true;
745
1158
 
746
1159
  return this;
747
1160
 
748
1161
  }
749
1162
 
750
- getVisibleAt( geometryId ) {
1163
+ /**
1164
+ * Returns the visibility state of the defined instance.
1165
+ *
1166
+ * @param {number} instanceId - The ID of an instance to get the visibility state of.
1167
+ * @return {boolean} Whether the instance is visible or not.
1168
+ */
1169
+ getVisibleAt( instanceId ) {
1170
+
1171
+ this.validateInstanceId( instanceId );
1172
+
1173
+ return this._instanceInfo[ instanceId ].visible;
1174
+
1175
+ }
1176
+
1177
+ /**
1178
+ * Sets the geometry ID of the instance at the given index.
1179
+ *
1180
+ * @param {number} instanceId - The ID of the instance to set the geometry ID of.
1181
+ * @param {number} geometryId - The geometry ID to be use by the instance.
1182
+ * @return {BatchedMesh} A reference to this batched mesh.
1183
+ */
1184
+ setGeometryIdAt( instanceId, geometryId ) {
1185
+
1186
+ this.validateInstanceId( instanceId );
1187
+ this.validateGeometryId( geometryId );
1188
+
1189
+ this._instanceInfo[ instanceId ].geometryIndex = geometryId;
1190
+
1191
+ return this;
1192
+
1193
+ }
1194
+
1195
+ /**
1196
+ * Returns the geometry ID of the defined instance.
1197
+ *
1198
+ * @param {number} instanceId - The ID of an instance to get the geometry ID of.
1199
+ * @return {number} The instance's geometry ID.
1200
+ */
1201
+ getGeometryIdAt( instanceId ) {
1202
+
1203
+ this.validateInstanceId( instanceId );
1204
+
1205
+ return this._instanceInfo[ instanceId ].geometryIndex;
1206
+
1207
+ }
1208
+
1209
+ /**
1210
+ * Get the range representing the subset of triangles related to the attached geometry,
1211
+ * indicating the starting offset and count, or `null` if invalid.
1212
+ *
1213
+ * @param {number} geometryId - The id of the geometry to get the range of.
1214
+ * @param {Object} [target] - The target object that is used to store the method's result.
1215
+ * @return {{
1216
+ * vertexStart:number,vertexCount:number,reservedVertexCount:number,
1217
+ * indexStart:number,indexCount:number,reservedIndexCount:number,
1218
+ * start:number,count:number
1219
+ * }} The result object with range data.
1220
+ */
1221
+ getGeometryRangeAt( geometryId, target = {} ) {
1222
+
1223
+ this.validateGeometryId( geometryId );
1224
+
1225
+ const geometryInfo = this._geometryInfo[ geometryId ];
1226
+ target.vertexStart = geometryInfo.vertexStart;
1227
+ target.vertexCount = geometryInfo.vertexCount;
1228
+ target.reservedVertexCount = geometryInfo.reservedVertexCount;
1229
+
1230
+ target.indexStart = geometryInfo.indexStart;
1231
+ target.indexCount = geometryInfo.indexCount;
1232
+ target.reservedIndexCount = geometryInfo.reservedIndexCount;
1233
+
1234
+ target.start = geometryInfo.start;
1235
+ target.count = geometryInfo.count;
1236
+
1237
+ return target;
1238
+
1239
+ }
751
1240
 
752
- const visibility = this._visibility;
753
- const active = this._active;
754
- const geometryCount = this._geometryCount;
1241
+ /**
1242
+ * Resizes the necessary buffers to support the provided number of instances.
1243
+ * If the provided arguments shrink the number of instances but there are not enough
1244
+ * unused Ids at the end of the list then an error is thrown.
1245
+ *
1246
+ * @param {number} maxInstanceCount - The max number of individual instances that can be added and rendered by the batch.
1247
+ */
1248
+ setInstanceCount( maxInstanceCount ) {
755
1249
 
756
- // return early if the geometry is out of range or not active
757
- if ( geometryId >= geometryCount || active[ geometryId ] === false ) {
1250
+ // shrink the available instances as much as possible
1251
+ const availableInstanceIds = this._availableInstanceIds;
1252
+ const instanceInfo = this._instanceInfo;
1253
+ availableInstanceIds.sort( ascIdSort );
1254
+ while ( availableInstanceIds[ availableInstanceIds.length - 1 ] === instanceInfo.length - 1 ) {
758
1255
 
759
- return false;
1256
+ instanceInfo.pop();
1257
+ availableInstanceIds.pop();
760
1258
 
761
1259
  }
762
1260
 
763
- return visibility[ geometryId ];
1261
+ // throw an error if it can't be shrunk to the desired size
1262
+ if ( maxInstanceCount < instanceInfo.length ) {
1263
+
1264
+ throw new Error( `BatchedMesh: Instance ids outside the range ${ maxInstanceCount } are being used. Cannot shrink instance count.` );
1265
+
1266
+ }
1267
+
1268
+ // copy the multi draw counts
1269
+ const multiDrawCounts = new Int32Array( maxInstanceCount );
1270
+ const multiDrawStarts = new Int32Array( maxInstanceCount );
1271
+ copyArrayContents( this._multiDrawCounts, multiDrawCounts );
1272
+ copyArrayContents( this._multiDrawStarts, multiDrawStarts );
1273
+
1274
+ this._multiDrawCounts = multiDrawCounts;
1275
+ this._multiDrawStarts = multiDrawStarts;
1276
+ this._maxInstanceCount = maxInstanceCount;
1277
+
1278
+ // update texture data for instance sampling
1279
+ const indirectTexture = this._indirectTexture;
1280
+ const matricesTexture = this._matricesTexture;
1281
+ const colorsTexture = this._colorsTexture;
1282
+
1283
+ indirectTexture.dispose();
1284
+ this._initIndirectTexture();
1285
+ copyArrayContents( indirectTexture.image.data, this._indirectTexture.image.data );
1286
+
1287
+ matricesTexture.dispose();
1288
+ this._initMatricesTexture();
1289
+ copyArrayContents( matricesTexture.image.data, this._matricesTexture.image.data );
1290
+
1291
+ if ( colorsTexture ) {
1292
+
1293
+ colorsTexture.dispose();
1294
+ this._initColorsTexture();
1295
+ copyArrayContents( colorsTexture.image.data, this._colorsTexture.image.data );
1296
+
1297
+ }
1298
+
1299
+ }
1300
+
1301
+ /**
1302
+ * Resizes the available space in the batch's vertex and index buffer attributes to the provided sizes.
1303
+ * If the provided arguments shrink the geometry buffers but there is not enough unused space at the
1304
+ * end of the geometry attributes then an error is thrown.
1305
+ *
1306
+ * @param {number} maxVertexCount - The maximum number of vertices to be used by all unique geometries to resize to.
1307
+ * @param {number} maxIndexCount - The maximum number of indices to be used by all unique geometries to resize to.
1308
+ */
1309
+ setGeometrySize( maxVertexCount, maxIndexCount ) {
1310
+
1311
+ // Check if we can shrink to the requested vertex attribute size
1312
+ const validRanges = [ ...this._geometryInfo ].filter( info => info.active );
1313
+ const requiredVertexLength = Math.max( ...validRanges.map( range => range.vertexStart + range.reservedVertexCount ) );
1314
+ if ( requiredVertexLength > maxVertexCount ) {
1315
+
1316
+ throw new Error( `BatchedMesh: Geometry vertex values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );
1317
+
1318
+ }
1319
+
1320
+ // Check if we can shrink to the requested index attribute size
1321
+ if ( this.geometry.index ) {
1322
+
1323
+ const requiredIndexLength = Math.max( ...validRanges.map( range => range.indexStart + range.reservedIndexCount ) );
1324
+ if ( requiredIndexLength > maxIndexCount ) {
1325
+
1326
+ throw new Error( `BatchedMesh: Geometry index values are being used outside the range ${ maxIndexCount }. Cannot shrink further.` );
1327
+
1328
+ }
1329
+
1330
+ }
1331
+
1332
+ //
1333
+
1334
+ // dispose of the previous geometry
1335
+ const oldGeometry = this.geometry;
1336
+ oldGeometry.dispose();
1337
+
1338
+ // recreate the geometry needed based on the previous variant
1339
+ this._maxVertexCount = maxVertexCount;
1340
+ this._maxIndexCount = maxIndexCount;
1341
+
1342
+ if ( this._geometryInitialized ) {
1343
+
1344
+ this._geometryInitialized = false;
1345
+ this.geometry = new BufferGeometry();
1346
+ this._initializeGeometry( oldGeometry );
1347
+
1348
+ }
1349
+
1350
+ // copy data from the previous geometry
1351
+ const geometry = this.geometry;
1352
+ if ( oldGeometry.index ) {
1353
+
1354
+ copyArrayContents( oldGeometry.index.array, geometry.index.array );
1355
+
1356
+ }
1357
+
1358
+ for ( const key in oldGeometry.attributes ) {
1359
+
1360
+ copyArrayContents( oldGeometry.attributes[ key ].array, geometry.attributes[ key ].array );
1361
+
1362
+ }
764
1363
 
765
1364
  }
766
1365
 
767
1366
  raycast( raycaster, intersects ) {
768
1367
 
769
- const visibility = this._visibility;
770
- const active = this._active;
771
- const drawRanges = this._drawRanges;
772
- const geometryCount = this._geometryCount;
1368
+ const instanceInfo = this._instanceInfo;
1369
+ const geometryInfoList = this._geometryInfo;
773
1370
  const matrixWorld = this.matrixWorld;
774
1371
  const batchGeometry = this.geometry;
775
1372
 
@@ -789,21 +1386,22 @@ class BatchedMesh extends Mesh {
789
1386
 
790
1387
  }
791
1388
 
792
- for ( let i = 0; i < geometryCount; i ++ ) {
1389
+ for ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {
793
1390
 
794
- if ( ! visibility[ i ] || ! active[ i ] ) {
1391
+ if ( ! instanceInfo[ i ].visible || ! instanceInfo[ i ].active ) {
795
1392
 
796
1393
  continue;
797
1394
 
798
1395
  }
799
1396
 
800
- const drawRange = drawRanges[ i ];
801
- _mesh.geometry.setDrawRange( drawRange.start, drawRange.count );
1397
+ const geometryId = instanceInfo[ i ].geometryIndex;
1398
+ const geometryInfo = geometryInfoList[ geometryId ];
1399
+ _mesh.geometry.setDrawRange( geometryInfo.start, geometryInfo.count );
802
1400
 
803
- // ge the intersects
1401
+ // get the intersects
804
1402
  this.getMatrixAt( i, _mesh.matrixWorld ).premultiply( matrixWorld );
805
- this.getBoundingBoxAt( i, _mesh.geometry.boundingBox );
806
- this.getBoundingSphereAt( i, _mesh.geometry.boundingSphere );
1403
+ this.getBoundingBoxAt( geometryId, _mesh.geometry.boundingBox );
1404
+ this.getBoundingSphereAt( geometryId, _mesh.geometry.boundingSphere );
807
1405
  _mesh.raycast( raycaster, _batchIntersects );
808
1406
 
809
1407
  // add batch id to the intersects
@@ -837,35 +1435,50 @@ class BatchedMesh extends Mesh {
837
1435
  this.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null;
838
1436
  this.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null;
839
1437
 
840
- this._drawRanges = source._drawRanges.map( range => ( { ...range } ) );
841
- this._reservedRanges = source._reservedRanges.map( range => ( { ...range } ) );
842
-
843
- this._visibility = source._visibility.slice();
844
- this._active = source._active.slice();
845
- this._bounds = source._bounds.map( bound => ( {
846
- boxInitialized: bound.boxInitialized,
847
- box: bound.box.clone(),
1438
+ this._geometryInfo = source._geometryInfo.map( info => ( {
1439
+ ...info,
848
1440
 
849
- sphereInitialized: bound.sphereInitialized,
850
- sphere: bound.sphere.clone()
1441
+ boundingBox: info.boundingBox !== null ? info.boundingBox.clone() : null,
1442
+ boundingSphere: info.boundingSphere !== null ? info.boundingSphere.clone() : null,
851
1443
  } ) );
1444
+ this._instanceInfo = source._instanceInfo.map( info => ( { ...info } ) );
852
1445
 
853
- this._maxGeometryCount = source._maxGeometryCount;
1446
+ this._availableInstanceIds = source._availableInstanceIds.slice();
1447
+ this._availableGeometryIds = source._availableGeometryIds.slice();
1448
+
1449
+ this._nextIndexStart = source._nextIndexStart;
1450
+ this._nextVertexStart = source._nextVertexStart;
1451
+ this._geometryCount = source._geometryCount;
1452
+
1453
+ this._maxInstanceCount = source._maxInstanceCount;
854
1454
  this._maxVertexCount = source._maxVertexCount;
855
1455
  this._maxIndexCount = source._maxIndexCount;
856
1456
 
857
1457
  this._geometryInitialized = source._geometryInitialized;
858
- this._geometryCount = source._geometryCount;
859
1458
  this._multiDrawCounts = source._multiDrawCounts.slice();
860
1459
  this._multiDrawStarts = source._multiDrawStarts.slice();
861
1460
 
1461
+ this._indirectTexture = source._indirectTexture.clone();
1462
+ this._indirectTexture.image.data = this._indirectTexture.image.data.slice();
1463
+
862
1464
  this._matricesTexture = source._matricesTexture.clone();
863
- this._matricesTexture.image.data = this._matricesTexture.image.slice();
1465
+ this._matricesTexture.image.data = this._matricesTexture.image.data.slice();
1466
+
1467
+ if ( this._colorsTexture !== null ) {
1468
+
1469
+ this._colorsTexture = source._colorsTexture.clone();
1470
+ this._colorsTexture.image.data = this._colorsTexture.image.data.slice();
1471
+
1472
+ }
864
1473
 
865
1474
  return this;
866
1475
 
867
1476
  }
868
1477
 
1478
+ /**
1479
+ * Frees the GPU-related resources allocated by this instance. Call this
1480
+ * method whenever this instance is no longer used in your app.
1481
+ */
869
1482
  dispose() {
870
1483
 
871
1484
  // Assuming the geometry is not shared with other meshes
@@ -873,7 +1486,16 @@ class BatchedMesh extends Mesh {
873
1486
 
874
1487
  this._matricesTexture.dispose();
875
1488
  this._matricesTexture = null;
876
- return this;
1489
+
1490
+ this._indirectTexture.dispose();
1491
+ this._indirectTexture = null;
1492
+
1493
+ if ( this._colorsTexture !== null ) {
1494
+
1495
+ this._colorsTexture.dispose();
1496
+ this._colorsTexture = null;
1497
+
1498
+ }
877
1499
 
878
1500
  }
879
1501
 
@@ -892,54 +1514,62 @@ class BatchedMesh extends Mesh {
892
1514
  const index = geometry.getIndex();
893
1515
  const bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;
894
1516
 
895
- const active = this._active;
896
- const visibility = this._visibility;
1517
+ const instanceInfo = this._instanceInfo;
897
1518
  const multiDrawStarts = this._multiDrawStarts;
898
1519
  const multiDrawCounts = this._multiDrawCounts;
899
- const drawRanges = this._drawRanges;
1520
+ const geometryInfoList = this._geometryInfo;
900
1521
  const perObjectFrustumCulled = this.perObjectFrustumCulled;
1522
+ const indirectTexture = this._indirectTexture;
1523
+ const indirectArray = indirectTexture.image.data;
901
1524
 
1525
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
902
1526
  // prepare the frustum in the local frame
903
- if ( perObjectFrustumCulled ) {
1527
+ if ( perObjectFrustumCulled && ! camera.isArrayCamera ) {
904
1528
 
905
- _projScreenMatrix
1529
+ _matrix
906
1530
  .multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )
907
1531
  .multiply( this.matrixWorld );
1532
+
908
1533
  _frustum.setFromProjectionMatrix(
909
- _projScreenMatrix,
910
- renderer.coordinateSystem
1534
+ _matrix,
1535
+ camera.coordinateSystem,
1536
+ camera.reversedDepth
911
1537
  );
912
1538
 
913
1539
  }
914
1540
 
915
- let count = 0;
1541
+ let multiDrawCount = 0;
916
1542
  if ( this.sortObjects ) {
917
1543
 
918
1544
  // get the camera position in the local frame
919
- _invMatrixWorld.copy( this.matrixWorld ).invert();
920
- _vector.setFromMatrixPosition( camera.matrixWorld ).applyMatrix4( _invMatrixWorld );
1545
+ _matrix.copy( this.matrixWorld ).invert();
1546
+ _vector.setFromMatrixPosition( camera.matrixWorld ).applyMatrix4( _matrix );
1547
+ _forward.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ).transformDirection( _matrix );
921
1548
 
922
- for ( let i = 0, l = visibility.length; i < l; i ++ ) {
1549
+ for ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {
923
1550
 
924
- if ( visibility[ i ] && active[ i ] ) {
1551
+ if ( instanceInfo[ i ].visible && instanceInfo[ i ].active ) {
1552
+
1553
+ const geometryId = instanceInfo[ i ].geometryIndex;
925
1554
 
926
1555
  // get the bounds in world space
927
1556
  this.getMatrixAt( i, _matrix );
928
- this.getBoundingSphereAt( i, _sphere ).applyMatrix4( _matrix );
1557
+ this.getBoundingSphereAt( geometryId, _sphere ).applyMatrix4( _matrix );
929
1558
 
930
1559
  // determine whether the batched geometry is within the frustum
931
1560
  let culled = false;
932
1561
  if ( perObjectFrustumCulled ) {
933
1562
 
934
- culled = ! _frustum.intersectsSphere( _sphere );
1563
+ culled = ! frustum.intersectsSphere( _sphere, camera );
935
1564
 
936
1565
  }
937
1566
 
938
1567
  if ( ! culled ) {
939
1568
 
940
1569
  // get the distance from camera used for sorting
941
- const z = _vector.distanceTo( _sphere.center );
942
- _renderList.push( drawRanges[ i ], z );
1570
+ const geometryInfo = geometryInfoList[ geometryId ];
1571
+ const z = _temp.subVectors( _sphere.center, _vector ).dot( _forward );
1572
+ _renderList.push( geometryInfo.start, geometryInfo.count, z, i );
943
1573
 
944
1574
  }
945
1575
 
@@ -963,9 +1593,10 @@ class BatchedMesh extends Mesh {
963
1593
  for ( let i = 0, l = list.length; i < l; i ++ ) {
964
1594
 
965
1595
  const item = list[ i ];
966
- multiDrawStarts[ count ] = item.start * bytesPerElement;
967
- multiDrawCounts[ count ] = item.count;
968
- count ++;
1596
+ multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement;
1597
+ multiDrawCounts[ multiDrawCount ] = item.count;
1598
+ indirectArray[ multiDrawCount ] = item.index;
1599
+ multiDrawCount ++;
969
1600
 
970
1601
  }
971
1602
 
@@ -973,9 +1604,11 @@ class BatchedMesh extends Mesh {
973
1604
 
974
1605
  } else {
975
1606
 
976
- for ( let i = 0, l = visibility.length; i < l; i ++ ) {
1607
+ for ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {
1608
+
1609
+ if ( instanceInfo[ i ].visible && instanceInfo[ i ].active ) {
977
1610
 
978
- if ( visibility[ i ] && active[ i ] ) {
1611
+ const geometryId = instanceInfo[ i ].geometryIndex;
979
1612
 
980
1613
  // determine whether the batched geometry is within the frustum
981
1614
  let culled = false;
@@ -983,17 +1616,18 @@ class BatchedMesh extends Mesh {
983
1616
 
984
1617
  // get the bounds in world space
985
1618
  this.getMatrixAt( i, _matrix );
986
- this.getBoundingSphereAt( i, _sphere ).applyMatrix4( _matrix );
987
- culled = ! _frustum.intersectsSphere( _sphere );
1619
+ this.getBoundingSphereAt( geometryId, _sphere ).applyMatrix4( _matrix );
1620
+ culled = ! frustum.intersectsSphere( _sphere, camera );
988
1621
 
989
1622
  }
990
1623
 
991
1624
  if ( ! culled ) {
992
1625
 
993
- const range = drawRanges[ i ];
994
- multiDrawStarts[ count ] = range.start * bytesPerElement;
995
- multiDrawCounts[ count ] = range.count;
996
- count ++;
1626
+ const geometryInfo = geometryInfoList[ geometryId ];
1627
+ multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement;
1628
+ multiDrawCounts[ multiDrawCount ] = geometryInfo.count;
1629
+ indirectArray[ multiDrawCount ] = i;
1630
+ multiDrawCount ++;
997
1631
 
998
1632
  }
999
1633
 
@@ -1003,7 +1637,8 @@ class BatchedMesh extends Mesh {
1003
1637
 
1004
1638
  }
1005
1639
 
1006
- this._multiDrawCount = count;
1640
+ indirectTexture.needsUpdate = true;
1641
+ this._multiDrawCount = multiDrawCount;
1007
1642
  this._visibilityChanged = false;
1008
1643
 
1009
1644
  }