super-three 0.147.1 → 0.154.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (896) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.cjs +37190 -21678
  3. package/build/three.js +37182 -21669
  4. package/build/three.min.js +4 -2
  5. package/build/three.module.js +7656 -6548
  6. package/build/three.module.min.js +7 -0
  7. package/examples/jsm/animation/AnimationClipCreator.js +5 -3
  8. package/examples/jsm/cameras/CinematicCamera.js +1 -2
  9. package/examples/jsm/capabilities/WebGPU.js +17 -5
  10. package/examples/jsm/controls/ArcballControls.js +1835 -1827
  11. package/examples/jsm/controls/FlyControls.js +25 -9
  12. package/examples/jsm/controls/MapControls.js +28 -0
  13. package/examples/jsm/controls/OrbitControls.js +25 -46
  14. package/examples/jsm/controls/PointerLockControls.js +70 -65
  15. package/examples/jsm/controls/TrackballControls.js +18 -4
  16. package/examples/jsm/controls/TransformControls.js +0 -1
  17. package/examples/jsm/csm/CSM.js +12 -6
  18. package/examples/jsm/csm/CSMShader.js +7 -6
  19. package/examples/jsm/effects/AnaglyphEffect.js +6 -20
  20. package/examples/jsm/effects/AsciiEffect.js +3 -6
  21. package/examples/jsm/effects/OutlineEffect.js +2 -16
  22. package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +6 -2
  24. package/examples/jsm/exporters/DRACOExporter.js +53 -11
  25. package/examples/jsm/exporters/EXRExporter.js +3 -9
  26. package/examples/jsm/exporters/GLTFExporter.js +597 -112
  27. package/examples/jsm/exporters/KTX2Exporter.js +34 -23
  28. package/examples/jsm/exporters/MMDExporter.js +1 -1
  29. package/examples/jsm/exporters/PLYExporter.js +8 -1
  30. package/examples/jsm/exporters/STLExporter.js +8 -4
  31. package/examples/jsm/exporters/USDZExporter.js +184 -124
  32. package/examples/jsm/geometries/ConvexGeometry.js +0 -6
  33. package/examples/jsm/geometries/ParametricGeometry.js +10 -0
  34. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  35. package/examples/jsm/helpers/ViewHelper.js +71 -57
  36. package/examples/jsm/interactive/HTMLMesh.js +16 -3
  37. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  38. package/examples/{js → jsm}/libs/basis/README.md +4 -4
  39. package/examples/jsm/libs/draco/draco_decoder.js +34 -0
  40. package/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
  41. package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
  42. package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -0
  43. package/examples/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
  44. package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
  45. package/examples/jsm/libs/lil-gui.module.min.js +2 -2
  46. package/examples/jsm/libs/tween.module.js +803 -0
  47. package/examples/jsm/lights/IESSpotLight.js +25 -0
  48. package/examples/jsm/lights/LightProbeGenerator.js +11 -9
  49. package/examples/jsm/lines/LineMaterial.js +1 -1
  50. package/examples/jsm/lines/LineSegments2.js +12 -10
  51. package/examples/jsm/loaders/3DMLoader.js +9 -6
  52. package/examples/jsm/loaders/3MFLoader.js +17 -12
  53. package/examples/jsm/loaders/AMFLoader.js +7 -4
  54. package/examples/jsm/loaders/BVHLoader.js +2 -2
  55. package/examples/jsm/loaders/ColladaLoader.js +19 -17
  56. package/examples/jsm/loaders/DRACOLoader.js +69 -18
  57. package/examples/jsm/loaders/EXRLoader.js +23 -24
  58. package/examples/jsm/loaders/FBXLoader.js +41 -52
  59. package/examples/jsm/loaders/GCodeLoader.js +1 -2
  60. package/examples/jsm/loaders/GLTFLoader.js +452 -282
  61. package/examples/jsm/loaders/HDRCubeTextureLoader.js +4 -4
  62. package/examples/jsm/loaders/IESLoader.js +337 -0
  63. package/examples/jsm/loaders/KMZLoader.js +4 -4
  64. package/examples/jsm/loaders/KTX2Loader.js +145 -69
  65. package/examples/jsm/loaders/LDrawLoader.js +24 -25
  66. package/examples/jsm/loaders/LWOLoader.js +12 -29
  67. package/examples/jsm/loaders/LottieLoader.js +3 -1
  68. package/examples/jsm/loaders/MMDLoader.js +49 -18
  69. package/examples/jsm/loaders/MTLLoader.js +2 -2
  70. package/examples/jsm/loaders/MaterialXLoader.js +9 -3
  71. package/examples/jsm/loaders/NRRDLoader.js +33 -5
  72. package/examples/jsm/loaders/OBJLoader.js +1 -1
  73. package/examples/jsm/loaders/PCDLoader.js +26 -12
  74. package/examples/jsm/loaders/PDBLoader.js +7 -2
  75. package/examples/jsm/loaders/PLYLoader.js +261 -106
  76. package/examples/jsm/loaders/RGBELoader.js +3 -3
  77. package/examples/jsm/loaders/STLLoader.js +9 -5
  78. package/examples/jsm/loaders/SVGLoader.js +36 -27
  79. package/examples/jsm/loaders/TTFLoader.js +1 -8
  80. package/examples/jsm/loaders/TiltLoader.js +13 -7
  81. package/examples/jsm/loaders/USDZLoader.js +5 -5
  82. package/examples/jsm/loaders/VOXLoader.js +8 -2
  83. package/examples/jsm/loaders/VRMLLoader.js +60 -20
  84. package/examples/jsm/loaders/VTKLoader.js +19 -10
  85. package/examples/jsm/loaders/XYZLoader.js +9 -3
  86. package/examples/jsm/loaders/lwo/IFFParser.js +19 -19
  87. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -5
  88. package/examples/jsm/math/Lut.js +5 -4
  89. package/examples/jsm/math/MeshSurfaceSampler.js +82 -43
  90. package/examples/jsm/misc/ConvexObjectBreaker.js +2 -8
  91. package/examples/jsm/misc/GPUComputationRenderer.js +6 -5
  92. package/examples/jsm/misc/MD2Character.js +2 -2
  93. package/examples/jsm/misc/MD2CharacterComplex.js +2 -2
  94. package/examples/jsm/misc/ProgressiveLightMap.js +12 -10
  95. package/examples/jsm/misc/RollerCoaster.js +7 -1
  96. package/examples/jsm/misc/Volume.js +20 -5
  97. package/examples/jsm/misc/VolumeSlice.js +3 -1
  98. package/examples/jsm/modifiers/CurveModifier.js +1 -0
  99. package/examples/jsm/modifiers/TessellateModifier.js +19 -19
  100. package/examples/jsm/nodes/Nodes.js +149 -335
  101. package/examples/jsm/nodes/accessors/BitangentNode.js +43 -16
  102. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
  103. package/examples/jsm/nodes/accessors/BufferNode.js +6 -0
  104. package/examples/jsm/nodes/accessors/CameraNode.js +36 -5
  105. package/examples/jsm/nodes/accessors/CubeTextureNode.js +27 -33
  106. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +64 -0
  107. package/examples/jsm/nodes/accessors/InstanceNode.js +39 -26
  108. package/examples/jsm/nodes/accessors/MaterialNode.js +164 -39
  109. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +16 -0
  110. package/examples/jsm/nodes/accessors/ModelNode.js +13 -0
  111. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +13 -14
  112. package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
  113. package/examples/jsm/nodes/accessors/NormalNode.js +36 -19
  114. package/examples/jsm/nodes/accessors/Object3DNode.js +40 -12
  115. package/examples/jsm/nodes/accessors/PointUVNode.js +6 -1
  116. package/examples/jsm/nodes/accessors/PositionNode.js +38 -23
  117. package/examples/jsm/nodes/accessors/ReferenceNode.js +21 -14
  118. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +11 -7
  119. package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
  120. package/examples/jsm/nodes/accessors/SkinningNode.js +55 -71
  121. package/examples/jsm/nodes/accessors/StorageBufferNode.js +6 -0
  122. package/examples/jsm/nodes/accessors/TangentNode.js +28 -20
  123. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
  124. package/examples/jsm/nodes/accessors/TextureNode.js +143 -13
  125. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
  126. package/examples/jsm/nodes/accessors/UVNode.js +7 -1
  127. package/examples/jsm/nodes/accessors/UserDataNode.js +6 -0
  128. package/examples/jsm/nodes/code/CodeNode.js +78 -0
  129. package/examples/jsm/nodes/code/ExpressionNode.js +37 -0
  130. package/examples/jsm/nodes/{core → code}/FunctionCallNode.js +15 -1
  131. package/examples/jsm/nodes/{core → code}/FunctionNode.js +31 -9
  132. package/examples/jsm/nodes/code/ScriptableNode.js +488 -0
  133. package/examples/jsm/nodes/code/ScriptableValueNode.js +167 -0
  134. package/examples/jsm/nodes/core/ArrayUniformNode.js +3 -0
  135. package/examples/jsm/nodes/core/AttributeNode.js +17 -9
  136. package/examples/jsm/nodes/core/BypassNode.js +11 -4
  137. package/examples/jsm/nodes/core/CacheNode.js +46 -0
  138. package/examples/jsm/nodes/core/ConstNode.js +3 -0
  139. package/examples/jsm/nodes/core/ContextNode.js +10 -1
  140. package/examples/jsm/nodes/core/IndexNode.js +66 -0
  141. package/examples/jsm/nodes/core/InputNode.js +26 -5
  142. package/examples/jsm/nodes/core/LightingModel.js +17 -0
  143. package/examples/jsm/nodes/core/Node.js +128 -37
  144. package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
  145. package/examples/jsm/nodes/core/NodeBuilder.js +287 -118
  146. package/examples/jsm/nodes/core/NodeCache.js +26 -0
  147. package/examples/jsm/nodes/core/NodeFrame.js +56 -5
  148. package/examples/jsm/nodes/core/NodeUtils.js +115 -28
  149. package/examples/jsm/nodes/core/PropertyNode.js +23 -2
  150. package/examples/jsm/nodes/core/StackNode.js +99 -0
  151. package/examples/jsm/nodes/core/TempNode.js +11 -3
  152. package/examples/jsm/nodes/core/UniformNode.js +16 -1
  153. package/examples/jsm/nodes/core/VarNode.js +19 -29
  154. package/examples/jsm/nodes/core/VaryingNode.js +15 -2
  155. package/examples/jsm/nodes/core/constants.js +6 -0
  156. package/examples/jsm/nodes/display/BlendModeNode.js +33 -19
  157. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +36 -20
  158. package/examples/jsm/nodes/display/ColorSpaceNode.js +60 -47
  159. package/examples/jsm/nodes/display/FrontFacingNode.js +7 -1
  160. package/examples/jsm/nodes/display/NormalMapNode.js +33 -20
  161. package/examples/jsm/nodes/display/PosterizeNode.js +10 -3
  162. package/examples/jsm/nodes/display/ToneMappingNode.js +101 -11
  163. package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
  164. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
  165. package/examples/jsm/nodes/display/ViewportNode.js +27 -18
  166. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +31 -0
  167. package/examples/jsm/nodes/display/ViewportTextureNode.js +75 -0
  168. package/examples/jsm/nodes/fog/FogExp2Node.js +35 -0
  169. package/examples/jsm/nodes/fog/FogNode.js +12 -6
  170. package/examples/jsm/nodes/fog/FogRangeNode.js +12 -5
  171. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +30 -0
  172. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +15 -16
  173. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +3 -3
  174. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
  175. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +9 -7
  176. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +5 -5
  177. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  178. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +4 -6
  179. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -6
  180. package/examples/jsm/nodes/functions/PhongLightingModel.js +28 -0
  181. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +155 -45
  182. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +5 -4
  183. package/examples/jsm/nodes/functions/material/getRoughness.js +6 -6
  184. package/examples/jsm/nodes/geometry/RangeNode.js +50 -55
  185. package/examples/jsm/nodes/gpgpu/ComputeNode.js +9 -2
  186. package/examples/jsm/nodes/lighting/AONode.js +5 -3
  187. package/examples/jsm/nodes/lighting/AmbientLightNode.js +27 -0
  188. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +114 -5
  189. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +43 -0
  190. package/examples/jsm/nodes/lighting/EnvironmentNode.js +153 -38
  191. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +15 -10
  192. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +39 -0
  193. package/examples/jsm/nodes/lighting/LightNode.js +57 -0
  194. package/examples/jsm/nodes/lighting/LightUtils.js +17 -0
  195. package/examples/jsm/nodes/lighting/LightingContextNode.js +41 -17
  196. package/examples/jsm/nodes/lighting/LightingNode.js +3 -1
  197. package/examples/jsm/nodes/lighting/LightsNode.js +18 -10
  198. package/examples/jsm/nodes/lighting/PointLightNode.js +71 -0
  199. package/examples/jsm/nodes/lighting/SpotLightNode.js +92 -0
  200. package/examples/jsm/nodes/loaders/NodeLoader.js +5 -4
  201. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +4 -20
  202. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +6 -24
  203. package/examples/jsm/nodes/materials/Materials.js +11 -55
  204. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +5 -26
  205. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +38 -0
  206. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +65 -0
  207. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -6
  208. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +22 -110
  209. package/examples/jsm/nodes/materials/NodeMaterial.js +340 -67
  210. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +7 -10
  211. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +29 -32
  212. package/examples/jsm/nodes/materialx/MaterialXNodes.js +31 -22
  213. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
  214. package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -13
  215. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -3
  216. package/examples/jsm/nodes/math/CondNode.js +43 -17
  217. package/examples/jsm/nodes/math/MathNode.js +184 -73
  218. package/examples/jsm/nodes/math/OperatorNode.js +53 -3
  219. package/examples/jsm/nodes/procedural/CheckerNode.js +16 -8
  220. package/examples/jsm/nodes/shadernode/ShaderNode.js +206 -63
  221. package/examples/jsm/nodes/utils/ArrayElementNode.js +4 -2
  222. package/examples/jsm/nodes/utils/ConvertNode.js +19 -1
  223. package/examples/jsm/nodes/utils/DiscardNode.js +26 -0
  224. package/examples/jsm/nodes/utils/EquirectUVNode.js +10 -4
  225. package/examples/jsm/nodes/utils/JoinNode.js +4 -1
  226. package/examples/jsm/nodes/utils/LoopNode.js +186 -0
  227. package/examples/jsm/nodes/utils/MatcapUVNode.js +11 -4
  228. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +18 -5
  229. package/examples/jsm/nodes/utils/OscNode.js +21 -14
  230. package/examples/jsm/nodes/utils/PackingNode.js +55 -0
  231. package/examples/jsm/nodes/utils/RemapNode.js +13 -5
  232. package/examples/jsm/nodes/utils/RotateUVNode.js +18 -7
  233. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +37 -0
  234. package/examples/jsm/nodes/utils/SplitNode.js +7 -5
  235. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +15 -30
  236. package/examples/jsm/nodes/utils/TimerNode.js +16 -6
  237. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +21 -10
  238. package/examples/jsm/objects/GroundProjectedSkybox.js +172 -0
  239. package/examples/jsm/objects/Lensflare.js +3 -4
  240. package/examples/jsm/objects/MarchingCubes.js +5 -1
  241. package/examples/jsm/objects/Reflector.js +8 -5
  242. package/examples/jsm/objects/Refractor.js +5 -5
  243. package/examples/jsm/objects/ShadowMesh.js +3 -3
  244. package/examples/jsm/objects/Sky.js +1 -1
  245. package/examples/jsm/objects/Water.js +2 -1
  246. package/examples/jsm/objects/Water2.js +1 -1
  247. package/examples/jsm/offscreen/scene.js +1 -0
  248. package/examples/jsm/physics/AmmoPhysics.js +27 -28
  249. package/examples/jsm/physics/RapierPhysics.js +199 -0
  250. package/examples/jsm/postprocessing/AfterimagePass.js +3 -2
  251. package/examples/jsm/postprocessing/BloomPass.js +7 -4
  252. package/examples/jsm/postprocessing/BokehPass.js +3 -8
  253. package/examples/jsm/postprocessing/DotScreenPass.js +1 -2
  254. package/examples/jsm/postprocessing/EffectComposer.js +7 -95
  255. package/examples/jsm/postprocessing/FilmPass.js +1 -2
  256. package/examples/jsm/postprocessing/GlitchPass.js +0 -2
  257. package/examples/jsm/postprocessing/HalftonePass.js +0 -6
  258. package/examples/jsm/postprocessing/OutlinePass.js +8 -10
  259. package/examples/jsm/postprocessing/OutputPass.js +72 -0
  260. package/examples/jsm/postprocessing/Pass.js +2 -0
  261. package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
  262. package/examples/jsm/postprocessing/SAOPass.js +4 -26
  263. package/examples/jsm/postprocessing/SMAAPass.js +5 -8
  264. package/examples/jsm/postprocessing/SSAARenderPass.js +5 -5
  265. package/examples/jsm/postprocessing/SSAOPass.js +4 -14
  266. package/examples/jsm/postprocessing/SSRPass.js +3 -7
  267. package/examples/jsm/postprocessing/SavePass.js +5 -4
  268. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  269. package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
  270. package/examples/jsm/postprocessing/TexturePass.js +2 -3
  271. package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -21
  272. package/examples/jsm/renderers/CSS2DRenderer.js +6 -1
  273. package/examples/jsm/renderers/CSS3DRenderer.js +27 -5
  274. package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +4 -4
  275. package/examples/jsm/renderers/common/Attributes.js +75 -0
  276. package/examples/jsm/renderers/common/Backend.js +162 -0
  277. package/examples/jsm/renderers/common/Background.js +134 -0
  278. package/examples/jsm/renderers/common/Binding.js +11 -0
  279. package/examples/jsm/renderers/common/Bindings.js +169 -0
  280. package/examples/jsm/renderers/common/Buffer.js +38 -0
  281. package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
  282. package/examples/jsm/renderers/common/ChainMap.js +89 -0
  283. package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
  284. package/examples/jsm/renderers/common/Constants.js +14 -0
  285. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
  286. package/examples/jsm/renderers/common/DataMap.js +54 -0
  287. package/examples/jsm/renderers/common/Geometries.js +215 -0
  288. package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
  289. package/examples/jsm/renderers/common/Pipeline.js +13 -0
  290. package/examples/jsm/renderers/common/Pipelines.js +321 -0
  291. package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
  292. package/examples/jsm/renderers/common/RenderContext.js +37 -0
  293. package/examples/jsm/renderers/common/RenderContexts.js +38 -0
  294. package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +26 -47
  295. package/examples/jsm/renderers/common/RenderLists.js +38 -0
  296. package/examples/jsm/renderers/common/RenderObject.js +113 -0
  297. package/examples/jsm/renderers/common/RenderObjects.js +92 -0
  298. package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
  299. package/examples/jsm/renderers/common/RenderTarget.js +15 -0
  300. package/examples/jsm/renderers/common/Renderer.js +864 -0
  301. package/examples/jsm/renderers/common/SampledTexture.js +80 -0
  302. package/examples/jsm/renderers/common/Sampler.js +18 -0
  303. package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
  304. package/examples/jsm/renderers/common/Textures.js +206 -0
  305. package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
  306. package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
  307. package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
  308. package/examples/jsm/renderers/common/nodes/NodeRender.js +302 -0
  309. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
  310. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
  311. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
  312. package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
  313. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
  314. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +58 -50
  315. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
  316. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -987
  317. package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +139 -92
  318. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
  319. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
  320. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
  321. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
  322. package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +73 -12
  323. package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +141 -296
  324. package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +5 -25
  325. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +937 -0
  326. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
  327. package/examples/jsm/shaders/BleachBypassShader.js +2 -0
  328. package/examples/jsm/shaders/BlendShader.js +1 -2
  329. package/examples/jsm/shaders/BokehShader2.js +3 -0
  330. package/examples/jsm/shaders/ColorifyShader.js +2 -0
  331. package/examples/jsm/shaders/ConvolutionShader.js +2 -0
  332. package/examples/jsm/shaders/CopyShader.js +4 -2
  333. package/examples/jsm/shaders/DotScreenShader.js +2 -0
  334. package/examples/jsm/shaders/ExposureShader.js +44 -0
  335. package/examples/jsm/shaders/FilmShader.js +2 -0
  336. package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
  337. package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
  338. package/examples/jsm/shaders/MMDToonShader.js +15 -4
  339. package/examples/jsm/shaders/OutputShader.js +61 -0
  340. package/examples/jsm/shaders/RGBShiftShader.js +4 -2
  341. package/examples/jsm/shaders/SepiaShader.js +2 -0
  342. package/examples/jsm/shaders/ToonShader.js +13 -5
  343. package/examples/jsm/shaders/VelocityShader.js +1 -1
  344. package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
  345. package/examples/jsm/shaders/VignetteShader.js +2 -0
  346. package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
  347. package/examples/jsm/utils/BufferGeometryUtils.js +54 -36
  348. package/examples/jsm/utils/LDrawUtils.js +4 -4
  349. package/examples/jsm/utils/PackedPhongMaterial.js +5 -78
  350. package/examples/jsm/utils/SceneUtils.js +8 -4
  351. package/examples/jsm/utils/SkeletonUtils.js +27 -210
  352. package/examples/jsm/utils/TextureUtils.js +86 -0
  353. package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
  354. package/examples/jsm/webxr/VRButton.js +1 -2
  355. package/examples/jsm/webxr/XRButton.js +198 -0
  356. package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
  357. package/examples/jsm/webxr/XRPlanes.js +100 -0
  358. package/package.json +35 -87
  359. package/src/Three.Legacy.js +0 -319
  360. package/src/Three.js +4 -3
  361. package/src/animation/AnimationUtils.js +13 -1
  362. package/src/animation/PropertyBinding.js +2 -2
  363. package/src/audio/Audio.js +7 -2
  364. package/src/audio/PositionalAudio.js +8 -0
  365. package/src/cameras/Camera.js +5 -0
  366. package/src/cameras/CubeCamera.js +76 -13
  367. package/src/cameras/OrthographicCamera.js +1 -1
  368. package/src/cameras/PerspectiveCamera.js +1 -1
  369. package/src/constants.js +22 -2
  370. package/src/core/BufferAttribute.js +146 -29
  371. package/src/core/BufferGeometry.js +2 -15
  372. package/src/core/GLBufferAttribute.js +2 -0
  373. package/src/core/InterleavedBufferAttribute.js +1 -1
  374. package/src/core/Object3D.js +37 -8
  375. package/src/extras/DataUtils.js +7 -1
  376. package/src/extras/ImageUtils.js +2 -2
  377. package/src/extras/PMREMGenerator.js +5 -5
  378. package/src/extras/core/Curve.js +1 -1
  379. package/src/extras/curves/LineCurve.js +6 -4
  380. package/src/extras/curves/LineCurve3.js +13 -0
  381. package/src/geometries/BoxGeometry.js +10 -0
  382. package/src/geometries/CircleGeometry.js +11 -1
  383. package/src/geometries/ConeGeometry.js +1 -1
  384. package/src/geometries/CylinderGeometry.js +11 -1
  385. package/src/geometries/EdgesGeometry.js +10 -0
  386. package/src/geometries/ExtrudeGeometry.js +11 -1
  387. package/src/geometries/LatheGeometry.js +10 -0
  388. package/src/geometries/PlaneGeometry.js +10 -0
  389. package/src/geometries/PolyhedronGeometry.js +10 -0
  390. package/src/geometries/RingGeometry.js +11 -1
  391. package/src/geometries/ShapeGeometry.js +10 -0
  392. package/src/geometries/SphereGeometry.js +12 -2
  393. package/src/geometries/TorusGeometry.js +11 -1
  394. package/src/geometries/TorusKnotGeometry.js +10 -0
  395. package/src/geometries/TubeGeometry.js +10 -0
  396. package/src/geometries/WireframeGeometry.js +10 -0
  397. package/src/helpers/Box3Helper.js +1 -2
  398. package/src/lights/DirectionalLight.js +1 -1
  399. package/src/lights/HemisphereLight.js +1 -1
  400. package/src/lights/SpotLight.js +1 -1
  401. package/src/loaders/AudioLoader.js +14 -8
  402. package/src/loaders/CubeTextureLoader.js +2 -0
  403. package/src/loaders/DataTextureLoader.js +5 -1
  404. package/src/loaders/Loader.js +2 -0
  405. package/src/loaders/MaterialLoader.js +9 -0
  406. package/src/loaders/ObjectLoader.js +10 -2
  407. package/src/materials/LineBasicMaterial.js +4 -0
  408. package/src/materials/Material.js +19 -4
  409. package/src/materials/MeshDistanceMaterial.js +0 -9
  410. package/src/materials/MeshPhysicalMaterial.js +32 -6
  411. package/src/materials/ShaderMaterial.js +6 -1
  412. package/src/math/Box2.js +3 -2
  413. package/src/math/Box3.js +49 -64
  414. package/src/math/Color.js +88 -66
  415. package/src/math/ColorManagement.js +75 -16
  416. package/src/math/Euler.js +2 -11
  417. package/src/math/Frustum.js +29 -5
  418. package/src/math/MathUtils.js +43 -1
  419. package/src/math/Matrix3.js +26 -6
  420. package/src/math/Matrix4.js +74 -19
  421. package/src/math/Plane.js +2 -2
  422. package/src/math/Quaternion.js +6 -0
  423. package/src/math/Ray.js +7 -7
  424. package/src/math/Triangle.js +37 -7
  425. package/src/math/Vector2.js +16 -0
  426. package/src/math/Vector3.js +10 -0
  427. package/src/math/interpolants/CubicInterpolant.js +1 -2
  428. package/src/objects/InstancedMesh.js +82 -1
  429. package/src/objects/Mesh.js +108 -76
  430. package/src/objects/Skeleton.js +1 -3
  431. package/src/objects/SkinnedMesh.js +123 -8
  432. package/src/objects/Sprite.js +1 -1
  433. package/src/renderers/WebGLCubeRenderTarget.js +12 -3
  434. package/src/renderers/WebGLMultipleRenderTargets.js +4 -2
  435. package/src/renderers/WebGLRenderTarget.js +14 -2
  436. package/src/renderers/WebGLRenderer.js +1439 -1252
  437. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  438. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  439. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +1 -1
  440. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  441. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
  442. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +0 -271
  443. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +5 -5
  444. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +2 -10
  445. package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +5 -5
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +38 -0
  447. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
  451. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +10 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -11
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +39 -13
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +306 -10
  457. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -11
  458. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +9 -1
  459. package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +10 -2
  460. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +1 -1
  461. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +40 -10
  462. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -13
  463. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +7 -7
  464. package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
  465. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +11 -5
  466. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +1 -1
  467. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +4 -11
  468. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +2 -2
  469. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +39 -34
  470. package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +1 -1
  471. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  472. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +5 -5
  473. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +101 -16
  474. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +113 -1
  475. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +135 -7
  476. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +117 -2
  477. package/src/renderers/shaders/ShaderChunk.js +10 -12
  478. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -9
  479. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
  480. package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
  481. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  482. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  483. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
  484. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +7 -2
  485. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +5 -6
  486. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -5
  487. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
  488. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +3 -3
  489. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -5
  490. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +20 -14
  491. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -5
  492. package/src/renderers/shaders/ShaderLib/points.glsl.js +17 -2
  493. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +6 -1
  494. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
  495. package/src/renderers/shaders/ShaderLib.js +18 -4
  496. package/src/renderers/shaders/UniformsLib.js +27 -15
  497. package/src/renderers/shaders/UniformsUtils.js +12 -3
  498. package/src/renderers/webgl/WebGLBackground.js +23 -12
  499. package/src/renderers/webgl/WebGLBindingStates.js +13 -5
  500. package/src/renderers/webgl/WebGLCapabilities.js +1 -2
  501. package/src/renderers/webgl/WebGLClipping.js +7 -3
  502. package/src/renderers/webgl/WebGLGeometries.js +12 -0
  503. package/src/renderers/webgl/WebGLInfo.js +0 -1
  504. package/src/renderers/webgl/WebGLLights.js +2 -2
  505. package/src/renderers/webgl/WebGLMaterials.js +123 -234
  506. package/src/renderers/webgl/WebGLMorphtargets.js +1 -1
  507. package/src/renderers/webgl/WebGLObjects.js +23 -3
  508. package/src/renderers/webgl/WebGLProgram.js +154 -53
  509. package/src/renderers/webgl/WebGLPrograms.js +213 -130
  510. package/src/renderers/webgl/WebGLRenderStates.js +2 -2
  511. package/src/renderers/webgl/WebGLShadowMap.js +40 -27
  512. package/src/renderers/webgl/WebGLState.js +23 -9
  513. package/src/renderers/webgl/WebGLTextures.js +39 -19
  514. package/src/renderers/webgl/WebGLUniformsGroups.js +74 -33
  515. package/src/renderers/webgl/WebGLUtils.js +41 -29
  516. package/src/renderers/webvr/WebVRManager.js +12 -0
  517. package/src/renderers/webxr/WebXRController.js +3 -0
  518. package/src/renderers/webxr/WebXRManager.js +96 -134
  519. package/src/scenes/Scene.js +2 -18
  520. package/src/textures/CompressedTexture.js +2 -2
  521. package/src/textures/CubeTexture.js +2 -2
  522. package/src/textures/DataTexture.js +2 -2
  523. package/src/textures/DepthTexture.js +22 -0
  524. package/src/textures/FramebufferTexture.js +1 -3
  525. package/src/textures/Source.js +4 -0
  526. package/src/textures/Texture.js +42 -13
  527. package/src/utils.js +13 -1
  528. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  529. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  530. package/examples/fonts/open-sans/open-sans.css +0 -9
  531. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  532. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +0 -3966
  533. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  534. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  535. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  536. package/examples/fonts/tabler-icons/tabler-icons.min.css +0 -4
  537. package/examples/js/animation/AnimationClipCreator.js +0 -89
  538. package/examples/js/animation/CCDIKSolver.js +0 -416
  539. package/examples/js/animation/MMDAnimationHelper.js +0 -1046
  540. package/examples/js/animation/MMDPhysics.js +0 -1174
  541. package/examples/js/cameras/CinematicCamera.js +0 -168
  542. package/examples/js/controls/ArcballControls.js +0 -2770
  543. package/examples/js/controls/DragControls.js +0 -205
  544. package/examples/js/controls/FirstPersonControls.js +0 -312
  545. package/examples/js/controls/FlyControls.js +0 -321
  546. package/examples/js/controls/OrbitControls.js +0 -1101
  547. package/examples/js/controls/PointerLockControls.js +0 -144
  548. package/examples/js/controls/TrackballControls.js +0 -729
  549. package/examples/js/controls/TransformControls.js +0 -1301
  550. package/examples/js/csm/CSM.js +0 -347
  551. package/examples/js/csm/CSMFrustum.js +0 -127
  552. package/examples/js/csm/CSMHelper.js +0 -165
  553. package/examples/js/csm/CSMShader.js +0 -253
  554. package/examples/js/curves/CurveExtras.js +0 -348
  555. package/examples/js/curves/NURBSCurve.js +0 -63
  556. package/examples/js/curves/NURBSSurface.js +0 -48
  557. package/examples/js/curves/NURBSUtils.js +0 -439
  558. package/examples/js/effects/AnaglyphEffect.js +0 -86
  559. package/examples/js/effects/AsciiEffect.js +0 -260
  560. package/examples/js/effects/OutlineEffect.js +0 -450
  561. package/examples/js/effects/ParallaxBarrierEffect.js +0 -62
  562. package/examples/js/effects/PeppersGhostEffect.js +0 -139
  563. package/examples/js/effects/StereoEffect.js +0 -46
  564. package/examples/js/environments/DebugEnvironment.js +0 -53
  565. package/examples/js/environments/RoomEnvironment.js +0 -124
  566. package/examples/js/exporters/ColladaExporter.js +0 -487
  567. package/examples/js/exporters/DRACOExporter.js +0 -212
  568. package/examples/js/exporters/EXRExporter.js +0 -455
  569. package/examples/js/exporters/GLTFExporter.js +0 -2367
  570. package/examples/js/exporters/MMDExporter.js +0 -187
  571. package/examples/js/exporters/OBJExporter.js +0 -260
  572. package/examples/js/exporters/PLYExporter.js +0 -427
  573. package/examples/js/exporters/STLExporter.js +0 -188
  574. package/examples/js/exporters/USDZExporter.js +0 -608
  575. package/examples/js/geometries/BoxLineGeometry.js +0 -59
  576. package/examples/js/geometries/ConvexGeometry.js +0 -53
  577. package/examples/js/geometries/DecalGeometry.js +0 -324
  578. package/examples/js/geometries/LightningStrike.js +0 -861
  579. package/examples/js/geometries/ParametricGeometries.js +0 -216
  580. package/examples/js/geometries/ParametricGeometry.js +0 -121
  581. package/examples/js/geometries/RoundedBoxGeometry.js +0 -142
  582. package/examples/js/geometries/TeapotGeometry.js +0 -335
  583. package/examples/js/geometries/TextGeometry.js +0 -53
  584. package/examples/js/helpers/LightProbeHelper.js +0 -48
  585. package/examples/js/helpers/OctreeHelper.js +0 -76
  586. package/examples/js/helpers/PositionalAudioHelper.js +0 -91
  587. package/examples/js/helpers/RectAreaLightHelper.js +0 -73
  588. package/examples/js/helpers/VertexNormalsHelper.js +0 -74
  589. package/examples/js/helpers/VertexTangentsHelper.js +0 -68
  590. package/examples/js/helpers/ViewHelper.js +0 -281
  591. package/examples/js/interactive/HTMLMesh.js +0 -497
  592. package/examples/js/interactive/InteractiveGroup.js +0 -95
  593. package/examples/js/interactive/SelectionBox.js +0 -195
  594. package/examples/js/interactive/SelectionHelper.js +0 -83
  595. package/examples/js/libs/chevrotain.min.js +0 -3
  596. package/examples/js/libs/draco/draco_decoder.js +0 -52
  597. package/examples/js/libs/draco/draco_decoder.wasm +0 -0
  598. package/examples/js/libs/draco/draco_wasm_wrapper.js +0 -104
  599. package/examples/js/libs/draco/gltf/draco_decoder.js +0 -48
  600. package/examples/js/libs/draco/gltf/draco_decoder.wasm +0 -0
  601. package/examples/js/libs/draco/gltf/draco_wasm_wrapper.js +0 -104
  602. package/examples/js/libs/fflate.min.js +0 -7
  603. package/examples/js/libs/ktx-parse.umd.js +0 -1
  604. package/examples/js/libs/meshopt_decoder.js +0 -188
  605. package/examples/js/libs/opentype.min.js +0 -1
  606. package/examples/js/libs/stats.min.js +0 -5
  607. package/examples/js/lights/LightProbeGenerator.js +0 -221
  608. package/examples/js/lights/RectAreaLightUniformsLib.js +0 -60
  609. package/examples/js/lines/Line2.js +0 -19
  610. package/examples/js/lines/LineGeometry.js +0 -69
  611. package/examples/js/lines/LineMaterial.js +0 -635
  612. package/examples/js/lines/LineSegments2.js +0 -313
  613. package/examples/js/lines/LineSegmentsGeometry.js +0 -198
  614. package/examples/js/lines/Wireframe.js +0 -47
  615. package/examples/js/lines/WireframeGeometry2.js +0 -20
  616. package/examples/js/loaders/3DMLoader.js +0 -1273
  617. package/examples/js/loaders/3MFLoader.js +0 -1306
  618. package/examples/js/loaders/AMFLoader.js +0 -504
  619. package/examples/js/loaders/BVHLoader.js +0 -395
  620. package/examples/js/loaders/BasisTextureLoader.js +0 -706
  621. package/examples/js/loaders/ColladaLoader.js +0 -3690
  622. package/examples/js/loaders/DDSLoader.js +0 -244
  623. package/examples/js/loaders/DRACOLoader.js +0 -511
  624. package/examples/js/loaders/EXRLoader.js +0 -2039
  625. package/examples/js/loaders/FBXLoader.js +0 -3681
  626. package/examples/js/loaders/FontLoader.js +0 -160
  627. package/examples/js/loaders/GCodeLoader.js +0 -255
  628. package/examples/js/loaders/GLTFLoader.js +0 -3862
  629. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -87
  630. package/examples/js/loaders/KMZLoader.js +0 -121
  631. package/examples/js/loaders/KTXLoader.js +0 -159
  632. package/examples/js/loaders/LDrawLoader.js +0 -2263
  633. package/examples/js/loaders/LUT3dlLoader.js +0 -135
  634. package/examples/js/loaders/LUTCubeLoader.js +0 -132
  635. package/examples/js/loaders/LWOLoader.js +0 -901
  636. package/examples/js/loaders/LogLuvLoader.js +0 -715
  637. package/examples/js/loaders/LottieLoader.js +0 -62
  638. package/examples/js/loaders/MD2Loader.js +0 -248
  639. package/examples/js/loaders/MDDLoader.js +0 -91
  640. package/examples/js/loaders/MMDLoader.js +0 -1915
  641. package/examples/js/loaders/MTLLoader.js +0 -472
  642. package/examples/js/loaders/NRRDLoader.js +0 -609
  643. package/examples/js/loaders/OBJLoader.js +0 -789
  644. package/examples/js/loaders/PCDLoader.js +0 -413
  645. package/examples/js/loaders/PDBLoader.js +0 -317
  646. package/examples/js/loaders/PLYLoader.js +0 -576
  647. package/examples/js/loaders/PRWMLoader.js +0 -249
  648. package/examples/js/loaders/PVRLoader.js +0 -218
  649. package/examples/js/loaders/RGBELoader.js +0 -442
  650. package/examples/js/loaders/RGBMLoader.js +0 -1354
  651. package/examples/js/loaders/STLLoader.js +0 -364
  652. package/examples/js/loaders/SVGLoader.js +0 -2783
  653. package/examples/js/loaders/TDSLoader.js +0 -992
  654. package/examples/js/loaders/TGALoader.js +0 -484
  655. package/examples/js/loaders/TIFFLoader.js +0 -30
  656. package/examples/js/loaders/TTFLoader.js +0 -203
  657. package/examples/js/loaders/TiltLoader.js +0 -459
  658. package/examples/js/loaders/VOXLoader.js +0 -240
  659. package/examples/js/loaders/VRMLLoader.js +0 -3140
  660. package/examples/js/loaders/VTKLoader.js +0 -1078
  661. package/examples/js/loaders/XYZLoader.js +0 -89
  662. package/examples/js/loaders/lwo/IFFParser.js +0 -1067
  663. package/examples/js/loaders/lwo/LWO2Parser.js +0 -397
  664. package/examples/js/loaders/lwo/LWO3Parser.js +0 -360
  665. package/examples/js/materials/MeshGouraudMaterial.js +0 -387
  666. package/examples/js/math/Capsule.js +0 -103
  667. package/examples/js/math/ColorConverter.js +0 -33
  668. package/examples/js/math/ConvexHull.js +0 -1154
  669. package/examples/js/math/ImprovedNoise.js +0 -66
  670. package/examples/js/math/Lut.js +0 -164
  671. package/examples/js/math/MeshSurfaceSampler.js +0 -171
  672. package/examples/js/math/OBB.js +0 -382
  673. package/examples/js/math/Octree.js +0 -410
  674. package/examples/js/math/SimplexNoise.js +0 -445
  675. package/examples/js/misc/ConvexObjectBreaker.js +0 -474
  676. package/examples/js/misc/GPUComputationRenderer.js +0 -393
  677. package/examples/js/misc/Gyroscope.js +0 -56
  678. package/examples/js/misc/MD2Character.js +0 -235
  679. package/examples/js/misc/MD2CharacterComplex.js +0 -513
  680. package/examples/js/misc/MorphAnimMesh.js +0 -63
  681. package/examples/js/misc/MorphBlendMesh.js +0 -265
  682. package/examples/js/misc/ProgressiveLightMap.js +0 -335
  683. package/examples/js/misc/RollerCoaster.js +0 -430
  684. package/examples/js/misc/TubePainter.js +0 -167
  685. package/examples/js/misc/Volume.js +0 -437
  686. package/examples/js/misc/VolumeSlice.js +0 -214
  687. package/examples/js/modifiers/CurveModifier.js +0 -309
  688. package/examples/js/modifiers/EdgeSplitModifier.js +0 -228
  689. package/examples/js/modifiers/SimplifyModifier.js +0 -465
  690. package/examples/js/modifiers/TessellateModifier.js +0 -276
  691. package/examples/js/objects/GroundProjectedEnv.js +0 -181
  692. package/examples/js/objects/Lensflare.js +0 -356
  693. package/examples/js/objects/LightningStorm.js +0 -206
  694. package/examples/js/objects/MarchingCubes.js +0 -759
  695. package/examples/js/objects/Reflector.js +0 -216
  696. package/examples/js/objects/ReflectorForSSRPass.js +0 -315
  697. package/examples/js/objects/Refractor.js +0 -283
  698. package/examples/js/objects/ShadowMesh.js +0 -59
  699. package/examples/js/objects/Sky.js +0 -218
  700. package/examples/js/objects/Water.js +0 -292
  701. package/examples/js/objects/Water2.js +0 -307
  702. package/examples/js/physics/AmmoPhysics.js +0 -259
  703. package/examples/js/physics/OimoPhysics.js +0 -217
  704. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +0 -335
  705. package/examples/js/postprocessing/AfterimagePass.js +0 -77
  706. package/examples/js/postprocessing/BloomPass.js +0 -135
  707. package/examples/js/postprocessing/BokehPass.js +0 -120
  708. package/examples/js/postprocessing/ClearPass.js +0 -39
  709. package/examples/js/postprocessing/CubeTexturePass.js +0 -60
  710. package/examples/js/postprocessing/DotScreenPass.js +0 -51
  711. package/examples/js/postprocessing/EffectComposer.js +0 -272
  712. package/examples/js/postprocessing/FilmPass.js +0 -52
  713. package/examples/js/postprocessing/GlitchPass.js +0 -104
  714. package/examples/js/postprocessing/HalftonePass.js +0 -75
  715. package/examples/js/postprocessing/LUTPass.js +0 -171
  716. package/examples/js/postprocessing/MaskPass.js +0 -95
  717. package/examples/js/postprocessing/OutlinePass.js +0 -598
  718. package/examples/js/postprocessing/Pass.js +0 -72
  719. package/examples/js/postprocessing/RenderPass.js +0 -70
  720. package/examples/js/postprocessing/RenderPixelatedPass.js +0 -215
  721. package/examples/js/postprocessing/SAOPass.js +0 -374
  722. package/examples/js/postprocessing/SMAAPass.js +0 -170
  723. package/examples/js/postprocessing/SSAARenderPass.js +0 -156
  724. package/examples/js/postprocessing/SSAOPass.js +0 -365
  725. package/examples/js/postprocessing/SSRPass.js +0 -567
  726. package/examples/js/postprocessing/SavePass.js +0 -59
  727. package/examples/js/postprocessing/ShaderPass.js +0 -64
  728. package/examples/js/postprocessing/TAARenderPass.js +0 -130
  729. package/examples/js/postprocessing/TexturePass.js +0 -49
  730. package/examples/js/postprocessing/UnrealBloomPass.js +0 -375
  731. package/examples/js/renderers/CSS2DRenderer.js +0 -178
  732. package/examples/js/renderers/CSS3DRenderer.js +0 -237
  733. package/examples/js/renderers/Projector.js +0 -818
  734. package/examples/js/renderers/SVGRenderer.js +0 -491
  735. package/examples/js/shaders/ACESFilmicToneMappingShader.js +0 -89
  736. package/examples/js/shaders/AfterimageShader.js +0 -60
  737. package/examples/js/shaders/BasicShader.js +0 -27
  738. package/examples/js/shaders/BleachBypassShader.js +0 -62
  739. package/examples/js/shaders/BlendShader.js +0 -54
  740. package/examples/js/shaders/BokehShader.js +0 -156
  741. package/examples/js/shaders/BokehShader2.js +0 -419
  742. package/examples/js/shaders/BrightnessContrastShader.js +0 -58
  743. package/examples/js/shaders/ColorCorrectionShader.js +0 -52
  744. package/examples/js/shaders/ColorifyShader.js +0 -47
  745. package/examples/js/shaders/ConvolutionShader.js +0 -92
  746. package/examples/js/shaders/CopyShader.js +0 -45
  747. package/examples/js/shaders/DOFMipMapShader.js +0 -60
  748. package/examples/js/shaders/DepthLimitedBlurShader.js +0 -173
  749. package/examples/js/shaders/DigitalGlitch.js +0 -127
  750. package/examples/js/shaders/DotScreenShader.js +0 -72
  751. package/examples/js/shaders/FXAAShader.js +0 -284
  752. package/examples/js/shaders/FilmShader.js +0 -110
  753. package/examples/js/shaders/FocusShader.js +0 -95
  754. package/examples/js/shaders/FreiChenShader.js +0 -93
  755. package/examples/js/shaders/GammaCorrectionShader.js +0 -41
  756. package/examples/js/shaders/GodRaysShader.js +0 -284
  757. package/examples/js/shaders/HalftoneShader.js +0 -336
  758. package/examples/js/shaders/HorizontalBlurShader.js +0 -59
  759. package/examples/js/shaders/HorizontalTiltShiftShader.js +0 -65
  760. package/examples/js/shaders/HueSaturationShader.js +0 -69
  761. package/examples/js/shaders/KaleidoShader.js +0 -60
  762. package/examples/js/shaders/LuminosityHighPassShader.js +0 -67
  763. package/examples/js/shaders/LuminosityShader.js +0 -46
  764. package/examples/js/shaders/MMDToonShader.js +0 -94
  765. package/examples/js/shaders/MirrorShader.js +0 -56
  766. package/examples/js/shaders/NormalMapShader.js +0 -55
  767. package/examples/js/shaders/RGBShiftShader.js +0 -56
  768. package/examples/js/shaders/SAOShader.js +0 -209
  769. package/examples/js/shaders/SMAAShader.js +0 -454
  770. package/examples/js/shaders/SSAOShader.js +0 -295
  771. package/examples/js/shaders/SSRShader.js +0 -381
  772. package/examples/js/shaders/SepiaShader.js +0 -52
  773. package/examples/js/shaders/SobelOperatorShader.js +0 -88
  774. package/examples/js/shaders/SubsurfaceScatteringShader.js +0 -49
  775. package/examples/js/shaders/TechnicolorShader.js +0 -43
  776. package/examples/js/shaders/ToneMapShader.js +0 -84
  777. package/examples/js/shaders/ToonShader.js +0 -335
  778. package/examples/js/shaders/TriangleBlurShader.js +0 -70
  779. package/examples/js/shaders/UnpackDepthRGBAShader.js +0 -47
  780. package/examples/js/shaders/VelocityShader.js +0 -126
  781. package/examples/js/shaders/VerticalBlurShader.js +0 -59
  782. package/examples/js/shaders/VerticalTiltShiftShader.js +0 -65
  783. package/examples/js/shaders/VignetteShader.js +0 -53
  784. package/examples/js/shaders/VolumeShader.js +0 -296
  785. package/examples/js/shaders/WaterRefractionShader.js +0 -84
  786. package/examples/js/textures/FlakesTexture.js +0 -40
  787. package/examples/js/utils/BufferGeometryUtils.js +0 -1160
  788. package/examples/js/utils/CameraUtils.js +0 -71
  789. package/examples/js/utils/GPUStatsPanel.js +0 -125
  790. package/examples/js/utils/GeometryCompressionUtils.js +0 -549
  791. package/examples/js/utils/GeometryUtils.js +0 -168
  792. package/examples/js/utils/LDrawUtils.js +0 -179
  793. package/examples/js/utils/PackedPhongMaterial.js +0 -109
  794. package/examples/js/utils/SceneUtils.js +0 -214
  795. package/examples/js/utils/ShadowMapViewer.js +0 -183
  796. package/examples/js/utils/SkeletonUtils.js +0 -493
  797. package/examples/js/utils/UVsDebug.js +0 -143
  798. package/examples/js/utils/WorkerPool.js +0 -105
  799. package/examples/jsm/exporters/ColladaExporter.js +0 -713
  800. package/examples/jsm/geometries/LightningStrike.js +0 -1017
  801. package/examples/jsm/libs/OimoPhysics/OimoPhysics.js +0 -37071
  802. package/examples/jsm/libs/OimoPhysics/index.js +0 -43
  803. package/examples/jsm/libs/flow.module.js +0 -4552
  804. package/examples/jsm/libs/tween.module.min.js +0 -3
  805. package/examples/jsm/loaders/BasisTextureLoader.js +0 -790
  806. package/examples/jsm/loaders/IFCLoader.js +0 -2431
  807. package/examples/jsm/loaders/PRWMLoader.js +0 -299
  808. package/examples/jsm/loaders/ifc/web-ifc-api.js +0 -47504
  809. package/examples/jsm/loaders/ifc/web-ifc.wasm +0 -0
  810. package/examples/jsm/node-editor/NodeEditor.js +0 -857
  811. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +0 -14
  812. package/examples/jsm/node-editor/accessors/NormalEditor.js +0 -30
  813. package/examples/jsm/node-editor/accessors/PositionEditor.js +0 -30
  814. package/examples/jsm/node-editor/accessors/UVEditor.js +0 -25
  815. package/examples/jsm/node-editor/core/BaseNode.js +0 -96
  816. package/examples/jsm/node-editor/core/DataFile.js +0 -59
  817. package/examples/jsm/node-editor/core/FileEditor.js +0 -20
  818. package/examples/jsm/node-editor/core/FileURLEditor.js +0 -29
  819. package/examples/jsm/node-editor/display/BlendEditor.js +0 -44
  820. package/examples/jsm/node-editor/display/NormalMapEditor.js +0 -49
  821. package/examples/jsm/node-editor/examples/animate-uv.json +0 -1
  822. package/examples/jsm/node-editor/examples/fake-top-light.json +0 -1
  823. package/examples/jsm/node-editor/examples/matcap.json +0 -1
  824. package/examples/jsm/node-editor/examples/oscillator-color.json +0 -1
  825. package/examples/jsm/node-editor/examples/rim.json +0 -1
  826. package/examples/jsm/node-editor/inputs/ColorEditor.js +0 -96
  827. package/examples/jsm/node-editor/inputs/FloatEditor.js +0 -23
  828. package/examples/jsm/node-editor/inputs/SliderEditor.js +0 -67
  829. package/examples/jsm/node-editor/inputs/TextureEditor.js +0 -155
  830. package/examples/jsm/node-editor/inputs/Vector2Editor.js +0 -28
  831. package/examples/jsm/node-editor/inputs/Vector3Editor.js +0 -30
  832. package/examples/jsm/node-editor/inputs/Vector4Editor.js +0 -37
  833. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +0 -84
  834. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +0 -102
  835. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +0 -118
  836. package/examples/jsm/node-editor/math/AngleEditor.js +0 -40
  837. package/examples/jsm/node-editor/math/DotEditor.js +0 -35
  838. package/examples/jsm/node-editor/math/InvertEditor.js +0 -39
  839. package/examples/jsm/node-editor/math/LimiterEditor.js +0 -62
  840. package/examples/jsm/node-editor/math/NormalizeEditor.js +0 -28
  841. package/examples/jsm/node-editor/math/OperatorEditor.js +0 -63
  842. package/examples/jsm/node-editor/math/PowerEditor.js +0 -44
  843. package/examples/jsm/node-editor/math/TrigonometryEditor.js +0 -45
  844. package/examples/jsm/node-editor/procedural/CheckerEditor.js +0 -27
  845. package/examples/jsm/node-editor/scene/MeshEditor.js +0 -102
  846. package/examples/jsm/node-editor/scene/Object3DEditor.js +0 -160
  847. package/examples/jsm/node-editor/scene/PointsEditor.js +0 -99
  848. package/examples/jsm/node-editor/utils/JoinEditor.js +0 -58
  849. package/examples/jsm/node-editor/utils/OscillatorEditor.js +0 -43
  850. package/examples/jsm/node-editor/utils/PreviewEditor.js +0 -170
  851. package/examples/jsm/node-editor/utils/SplitEditor.js +0 -39
  852. package/examples/jsm/node-editor/utils/TimerEditor.js +0 -58
  853. package/examples/jsm/nodes/core/CodeNode.js +0 -50
  854. package/examples/jsm/nodes/core/ExpressionNode.js +0 -32
  855. package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -21
  856. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +0 -22
  857. package/examples/jsm/nodes/lighting/PunctualLightNode.js +0 -68
  858. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +0 -301
  859. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +0 -149
  860. package/examples/jsm/objects/GroundProjectedEnv.js +0 -186
  861. package/examples/jsm/objects/LightningStorm.js +0 -245
  862. package/examples/jsm/physics/OimoPhysics.js +0 -231
  863. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -369
  864. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -187
  865. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -173
  866. package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
  867. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -255
  868. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
  869. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
  870. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +0 -82
  871. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -36
  872. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
  873. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -38
  874. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -296
  875. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -66
  876. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -73
  877. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
  878. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
  879. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -40
  880. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +0 -794
  881. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
  882. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -81
  883. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +0 -83
  884. package/examples/jsm/shaders/ToneMapShader.js +0 -73
  885. package/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js +0 -7
  886. package/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js +0 -10
  887. package/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js +0 -7
  888. /package/examples/{js → jsm}/libs/ammo.wasm.js +0 -0
  889. /package/examples/{js → jsm}/libs/ammo.wasm.wasm +0 -0
  890. /package/examples/{js → jsm}/libs/basis/basis_transcoder.js +0 -0
  891. /package/examples/{js → jsm}/libs/basis/basis_transcoder.wasm +0 -0
  892. /package/examples/{js → jsm}/libs/draco/README.md +0 -0
  893. /package/examples/{js → jsm}/libs/draco/draco_encoder.js +0 -0
  894. /package/examples/{js → jsm}/libs/draco/gltf/draco_encoder.js +0 -0
  895. /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
  896. /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
@@ -1,1160 +0,0 @@
1
- ( function () {
2
-
3
- function computeTangents() {
4
-
5
- throw new Error( 'BufferGeometryUtils: computeTangents renamed to computeMikkTSpaceTangents.' );
6
-
7
- }
8
-
9
- function computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {
10
-
11
- if ( ! MikkTSpace || ! MikkTSpace.isReady ) {
12
-
13
- throw new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );
14
-
15
- }
16
-
17
- if ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {
18
-
19
- throw new Error( 'BufferGeometryUtils: Tangents require "position", "normal", and "uv" attributes.' );
20
-
21
- }
22
-
23
- function getAttributeArray( attribute ) {
24
-
25
- if ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {
26
-
27
- const dstArray = new Float32Array( attribute.getCount() * attribute.itemSize );
28
- for ( let i = 0, j = 0; i < attribute.getCount(); i ++ ) {
29
-
30
- dstArray[ j ++ ] = attribute.getX( i );
31
- dstArray[ j ++ ] = attribute.getY( i );
32
- if ( attribute.itemSize > 2 ) {
33
-
34
- dstArray[ j ++ ] = attribute.getZ( i );
35
-
36
- }
37
-
38
- }
39
-
40
- return dstArray;
41
-
42
- }
43
-
44
- if ( attribute.array instanceof Float32Array ) {
45
-
46
- return attribute.array;
47
-
48
- }
49
-
50
- return new Float32Array( attribute.array );
51
-
52
- }
53
-
54
- // MikkTSpace algorithm requires non-indexed input.
55
-
56
- const _geometry = geometry.index ? geometry.toNonIndexed() : geometry;
57
-
58
- // Compute vertex tangents.
59
-
60
- const tangents = MikkTSpace.generateTangents( getAttributeArray( _geometry.attributes.position ), getAttributeArray( _geometry.attributes.normal ), getAttributeArray( _geometry.attributes.uv ) );
61
-
62
- // Texture coordinate convention of glTF differs from the apparent
63
- // default of the MikkTSpace library; .w component must be flipped.
64
-
65
- if ( negateSign ) {
66
-
67
- for ( let i = 3; i < tangents.length; i += 4 ) {
68
-
69
- tangents[ i ] *= - 1;
70
-
71
- }
72
-
73
- }
74
-
75
- //
76
-
77
- _geometry.setAttribute( 'tangent', new THREE.BufferAttribute( tangents, 4 ) );
78
- if ( geometry !== _geometry ) {
79
-
80
- geometry.copy( _geometry );
81
-
82
- }
83
-
84
- return geometry;
85
-
86
- }
87
-
88
- /**
89
- * @param {Array<BufferGeometry>} geometries
90
- * @param {Boolean} useGroups
91
- * @return {BufferGeometry}
92
- */
93
- function mergeBufferGeometries( geometries, useGroups = false ) {
94
-
95
- const isIndexed = geometries[ 0 ].index !== null;
96
- const attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );
97
- const morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );
98
- const attributes = {};
99
- const morphAttributes = {};
100
- const morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;
101
- const mergedGeometry = new THREE.BufferGeometry();
102
- let offset = 0;
103
- for ( let i = 0; i < geometries.length; ++ i ) {
104
-
105
- const geometry = geometries[ i ];
106
- let attributesCount = 0;
107
-
108
- // ensure that all geometries are indexed, or none
109
-
110
- if ( isIndexed !== ( geometry.index !== null ) ) {
111
-
112
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );
113
- return null;
114
-
115
- }
116
-
117
- // gather attributes, exit early if they're different
118
-
119
- for ( const name in geometry.attributes ) {
120
-
121
- if ( ! attributesUsed.has( name ) ) {
122
-
123
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure "' + name + '" attribute exists among all geometries, or in none of them.' );
124
- return null;
125
-
126
- }
127
-
128
- if ( attributes[ name ] === undefined ) attributes[ name ] = [];
129
- attributes[ name ].push( geometry.attributes[ name ] );
130
- attributesCount ++;
131
-
132
- }
133
-
134
- // ensure geometries have the same number of attributes
135
-
136
- if ( attributesCount !== attributesUsed.size ) {
137
-
138
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );
139
- return null;
140
-
141
- }
142
-
143
- // gather morph attributes, exit early if they're different
144
-
145
- if ( morphTargetsRelative !== geometry.morphTargetsRelative ) {
146
-
147
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );
148
- return null;
149
-
150
- }
151
-
152
- for ( const name in geometry.morphAttributes ) {
153
-
154
- if ( ! morphAttributesUsed.has( name ) ) {
155
-
156
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );
157
- return null;
158
-
159
- }
160
-
161
- if ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];
162
- morphAttributes[ name ].push( geometry.morphAttributes[ name ] );
163
-
164
- }
165
-
166
- if ( useGroups ) {
167
-
168
- let count;
169
- if ( isIndexed ) {
170
-
171
- count = geometry.index.count;
172
-
173
- } else if ( geometry.attributes.position !== undefined ) {
174
-
175
- count = geometry.attributes.position.count;
176
-
177
- } else {
178
-
179
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );
180
- return null;
181
-
182
- }
183
-
184
- mergedGeometry.addGroup( offset, count, i );
185
- offset += count;
186
-
187
- }
188
-
189
- }
190
-
191
- // merge indices
192
-
193
- if ( isIndexed ) {
194
-
195
- let indexOffset = 0;
196
- const mergedIndex = [];
197
- for ( let i = 0; i < geometries.length; ++ i ) {
198
-
199
- const index = geometries[ i ].index;
200
- for ( let j = 0; j < index.count; ++ j ) {
201
-
202
- mergedIndex.push( index.getX( j ) + indexOffset );
203
-
204
- }
205
-
206
- indexOffset += geometries[ i ].attributes.position.count;
207
-
208
- }
209
-
210
- mergedGeometry.setIndex( mergedIndex );
211
-
212
- }
213
-
214
- // merge attributes
215
-
216
- for ( const name in attributes ) {
217
-
218
- const mergedAttribute = mergeBufferAttributes( attributes[ name ] );
219
- if ( ! mergedAttribute ) {
220
-
221
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' + name + ' attribute.' );
222
- return null;
223
-
224
- }
225
-
226
- mergedGeometry.setAttribute( name, mergedAttribute );
227
-
228
- }
229
-
230
- // merge morph attributes
231
-
232
- for ( const name in morphAttributes ) {
233
-
234
- const numMorphTargets = morphAttributes[ name ][ 0 ].length;
235
- if ( numMorphTargets === 0 ) break;
236
- mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};
237
- mergedGeometry.morphAttributes[ name ] = [];
238
- for ( let i = 0; i < numMorphTargets; ++ i ) {
239
-
240
- const morphAttributesToMerge = [];
241
- for ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {
242
-
243
- morphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );
244
-
245
- }
246
-
247
- const mergedMorphAttribute = mergeBufferAttributes( morphAttributesToMerge );
248
- if ( ! mergedMorphAttribute ) {
249
-
250
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );
251
- return null;
252
-
253
- }
254
-
255
- mergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );
256
-
257
- }
258
-
259
- }
260
-
261
- return mergedGeometry;
262
-
263
- }
264
-
265
- /**
266
- * @param {Array<BufferAttribute>} attributes
267
- * @return {BufferAttribute}
268
- */
269
- function mergeBufferAttributes( attributes ) {
270
-
271
- let TypedArray;
272
- let itemSize;
273
- let normalized;
274
- let arrayLength = 0;
275
- for ( let i = 0; i < attributes.length; ++ i ) {
276
-
277
- const attribute = attributes[ i ];
278
- if ( attribute.isInterleavedBufferAttribute ) {
279
-
280
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported.' );
281
- return null;
282
-
283
- }
284
-
285
- if ( TypedArray === undefined ) TypedArray = attribute.array.constructor;
286
- if ( TypedArray !== attribute.array.constructor ) {
287
-
288
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. THREE.BufferAttribute.array must be of consistent array types across matching attributes.' );
289
- return null;
290
-
291
- }
292
-
293
- if ( itemSize === undefined ) itemSize = attribute.itemSize;
294
- if ( itemSize !== attribute.itemSize ) {
295
-
296
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. THREE.BufferAttribute.itemSize must be consistent across matching attributes.' );
297
- return null;
298
-
299
- }
300
-
301
- if ( normalized === undefined ) normalized = attribute.normalized;
302
- if ( normalized !== attribute.normalized ) {
303
-
304
- console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. THREE.BufferAttribute.normalized must be consistent across matching attributes.' );
305
- return null;
306
-
307
- }
308
-
309
- arrayLength += attribute.array.length;
310
-
311
- }
312
-
313
- const array = new TypedArray( arrayLength );
314
- let offset = 0;
315
- for ( let i = 0; i < attributes.length; ++ i ) {
316
-
317
- array.set( attributes[ i ].array, offset );
318
- offset += attributes[ i ].array.length;
319
-
320
- }
321
-
322
- return new THREE.BufferAttribute( array, itemSize, normalized );
323
-
324
- }
325
-
326
- /**
327
- * @param {BufferAttribute}
328
- * @return {BufferAttribute}
329
- */
330
- function deepCloneAttribute( attribute ) {
331
-
332
- if ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {
333
-
334
- return deinterleaveAttribute( attribute );
335
-
336
- }
337
-
338
- if ( attribute.isInstancedBufferAttribute ) {
339
-
340
- return new THREE.InstancedBufferAttribute().copy( attribute );
341
-
342
- }
343
-
344
- return new THREE.BufferAttribute().copy( attribute );
345
-
346
- }
347
-
348
- /**
349
- * @param {Array<BufferAttribute>} attributes
350
- * @return {Array<InterleavedBufferAttribute>}
351
- */
352
- function interleaveAttributes( attributes ) {
353
-
354
- // Interleaves the provided attributes into an THREE.InterleavedBuffer and returns
355
- // a set of InterleavedBufferAttributes for each attribute
356
- let TypedArray;
357
- let arrayLength = 0;
358
- let stride = 0;
359
-
360
- // calculate the length and type of the interleavedBuffer
361
- for ( let i = 0, l = attributes.length; i < l; ++ i ) {
362
-
363
- const attribute = attributes[ i ];
364
- if ( TypedArray === undefined ) TypedArray = attribute.array.constructor;
365
- if ( TypedArray !== attribute.array.constructor ) {
366
-
367
- console.error( 'AttributeBuffers of different types cannot be interleaved' );
368
- return null;
369
-
370
- }
371
-
372
- arrayLength += attribute.array.length;
373
- stride += attribute.itemSize;
374
-
375
- }
376
-
377
- // Create the set of buffer attributes
378
- const interleavedBuffer = new THREE.InterleavedBuffer( new TypedArray( arrayLength ), stride );
379
- let offset = 0;
380
- const res = [];
381
- const getters = [ 'getX', 'getY', 'getZ', 'getW' ];
382
- const setters = [ 'setX', 'setY', 'setZ', 'setW' ];
383
- for ( let j = 0, l = attributes.length; j < l; j ++ ) {
384
-
385
- const attribute = attributes[ j ];
386
- const itemSize = attribute.itemSize;
387
- const count = attribute.count;
388
- const iba = new THREE.InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );
389
- res.push( iba );
390
- offset += itemSize;
391
-
392
- // Move the data for each attribute into the new interleavedBuffer
393
- // at the appropriate offset
394
- for ( let c = 0; c < count; c ++ ) {
395
-
396
- for ( let k = 0; k < itemSize; k ++ ) {
397
-
398
- iba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );
399
-
400
- }
401
-
402
- }
403
-
404
- }
405
-
406
- return res;
407
-
408
- }
409
-
410
- // returns a new, non-interleaved version of the provided attribute
411
- function deinterleaveAttribute( attribute ) {
412
-
413
- const cons = attribute.data.array.constructor;
414
- const count = attribute.count;
415
- const itemSize = attribute.itemSize;
416
- const normalized = attribute.normalized;
417
- const array = new cons( count * itemSize );
418
- let newAttribute;
419
- if ( attribute.isInstancedInterleavedBufferAttribute ) {
420
-
421
- newAttribute = new THREE.InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );
422
-
423
- } else {
424
-
425
- newAttribute = new THREE.BufferAttribute( array, itemSize, normalized );
426
-
427
- }
428
-
429
- for ( let i = 0; i < count; i ++ ) {
430
-
431
- newAttribute.setX( i, attribute.getX( i ) );
432
- if ( itemSize >= 2 ) {
433
-
434
- newAttribute.setY( i, attribute.getY( i ) );
435
-
436
- }
437
-
438
- if ( itemSize >= 3 ) {
439
-
440
- newAttribute.setZ( i, attribute.getZ( i ) );
441
-
442
- }
443
-
444
- if ( itemSize >= 4 ) {
445
-
446
- newAttribute.setW( i, attribute.getW( i ) );
447
-
448
- }
449
-
450
- }
451
-
452
- return newAttribute;
453
-
454
- }
455
-
456
- // deinterleaves all attributes on the geometry
457
- function deinterleaveGeometry( geometry ) {
458
-
459
- const attributes = geometry.attributes;
460
- const morphTargets = geometry.morphTargets;
461
- const attrMap = new Map();
462
- for ( const key in attributes ) {
463
-
464
- const attr = attributes[ key ];
465
- if ( attr.isInterleavedBufferAttribute ) {
466
-
467
- if ( ! attrMap.has( attr ) ) {
468
-
469
- attrMap.set( attr, deinterleaveAttribute( attr ) );
470
-
471
- }
472
-
473
- attributes[ key ] = attrMap.get( attr );
474
-
475
- }
476
-
477
- }
478
-
479
- for ( const key in morphTargets ) {
480
-
481
- const attr = morphTargets[ key ];
482
- if ( attr.isInterleavedBufferAttribute ) {
483
-
484
- if ( ! attrMap.has( attr ) ) {
485
-
486
- attrMap.set( attr, deinterleaveAttribute( attr ) );
487
-
488
- }
489
-
490
- morphTargets[ key ] = attrMap.get( attr );
491
-
492
- }
493
-
494
- }
495
-
496
- }
497
-
498
- /**
499
- * @param {Array<BufferGeometry>} geometry
500
- * @return {number}
501
- */
502
- function estimateBytesUsed( geometry ) {
503
-
504
- // Return the estimated memory used by this geometry in bytes
505
- // Calculate using itemSize, count, and BYTES_PER_ELEMENT to account
506
- // for InterleavedBufferAttributes.
507
- let mem = 0;
508
- for ( const name in geometry.attributes ) {
509
-
510
- const attr = geometry.getAttribute( name );
511
- mem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;
512
-
513
- }
514
-
515
- const indices = geometry.getIndex();
516
- mem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;
517
- return mem;
518
-
519
- }
520
-
521
- /**
522
- * @param {BufferGeometry} geometry
523
- * @param {number} tolerance
524
- * @return {BufferGeometry}
525
- */
526
- function mergeVertices( geometry, tolerance = 1e-4 ) {
527
-
528
- tolerance = Math.max( tolerance, Number.EPSILON );
529
-
530
- // Generate an index buffer if the geometry doesn't have one, or optimize it
531
- // if it's already available.
532
- const hashToIndex = {};
533
- const indices = geometry.getIndex();
534
- const positions = geometry.getAttribute( 'position' );
535
- const vertexCount = indices ? indices.count : positions.count;
536
-
537
- // next value for triangle indices
538
- let nextIndex = 0;
539
-
540
- // attributes and new attribute arrays
541
- const attributeNames = Object.keys( geometry.attributes );
542
- const tmpAttributes = {};
543
- const tmpMorphAttributes = {};
544
- const newIndices = [];
545
- const getters = [ 'getX', 'getY', 'getZ', 'getW' ];
546
- const setters = [ 'setX', 'setY', 'setZ', 'setW' ];
547
-
548
- // Initialize the arrays, allocating space conservatively. Extra
549
- // space will be trimmed in the last step.
550
- for ( let i = 0, l = attributeNames.length; i < l; i ++ ) {
551
-
552
- const name = attributeNames[ i ];
553
- const attr = geometry.attributes[ name ];
554
- tmpAttributes[ name ] = new THREE.BufferAttribute( new attr.array.constructor( attr.count * attr.itemSize ), attr.itemSize, attr.normalized );
555
- const morphAttr = geometry.morphAttributes[ name ];
556
- if ( morphAttr ) {
557
-
558
- tmpMorphAttributes[ name ] = new THREE.BufferAttribute( new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize ), morphAttr.itemSize, morphAttr.normalized );
559
-
560
- }
561
-
562
- }
563
-
564
- // convert the error tolerance to an amount of decimal places to truncate to
565
- const decimalShift = Math.log10( 1 / tolerance );
566
- const shiftMultiplier = Math.pow( 10, decimalShift );
567
- for ( let i = 0; i < vertexCount; i ++ ) {
568
-
569
- const index = indices ? indices.getX( i ) : i;
570
-
571
- // Generate a hash for the vertex attributes at the current index 'i'
572
- let hash = '';
573
- for ( let j = 0, l = attributeNames.length; j < l; j ++ ) {
574
-
575
- const name = attributeNames[ j ];
576
- const attribute = geometry.getAttribute( name );
577
- const itemSize = attribute.itemSize;
578
- for ( let k = 0; k < itemSize; k ++ ) {
579
-
580
- // double tilde truncates the decimal value
581
- hash += `${~ ~ ( attribute[ getters[ k ] ]( index ) * shiftMultiplier )},`;
582
-
583
- }
584
-
585
- }
586
-
587
- // Add another reference to the vertex if it's already
588
- // used by another index
589
- if ( hash in hashToIndex ) {
590
-
591
- newIndices.push( hashToIndex[ hash ] );
592
-
593
- } else {
594
-
595
- // copy data to the new index in the temporary attributes
596
- for ( let j = 0, l = attributeNames.length; j < l; j ++ ) {
597
-
598
- const name = attributeNames[ j ];
599
- const attribute = geometry.getAttribute( name );
600
- const morphAttr = geometry.morphAttributes[ name ];
601
- const itemSize = attribute.itemSize;
602
- const newarray = tmpAttributes[ name ];
603
- const newMorphArrays = tmpMorphAttributes[ name ];
604
- for ( let k = 0; k < itemSize; k ++ ) {
605
-
606
- const getterFunc = getters[ k ];
607
- const setterFunc = setters[ k ];
608
- newarray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );
609
- if ( morphAttr ) {
610
-
611
- for ( let m = 0, ml = morphAttr.length; m < ml; m ++ ) {
612
-
613
- newMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttr[ m ][ getterFunc ]( index ) );
614
-
615
- }
616
-
617
- }
618
-
619
- }
620
-
621
- }
622
-
623
- hashToIndex[ hash ] = nextIndex;
624
- newIndices.push( nextIndex );
625
- nextIndex ++;
626
-
627
- }
628
-
629
- }
630
-
631
- // generate result THREE.BufferGeometry
632
- const result = geometry.clone();
633
- for ( const name in geometry.attributes ) {
634
-
635
- const tmpAttribute = tmpAttributes[ name ];
636
- result.setAttribute( name, new THREE.BufferAttribute( tmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ), tmpAttribute.itemSize, tmpAttribute.normalized ) );
637
- if ( ! ( name in tmpMorphAttributes ) ) continue;
638
- for ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {
639
-
640
- const tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];
641
- result.morphAttributes[ name ][ j ] = new THREE.BufferAttribute( tmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ), tmpMorphAttribute.itemSize, tmpMorphAttribute.normalized );
642
-
643
- }
644
-
645
- }
646
-
647
- // indices
648
-
649
- result.setIndex( newIndices );
650
- return result;
651
-
652
- }
653
-
654
- /**
655
- * @param {BufferGeometry} geometry
656
- * @param {number} drawMode
657
- * @return {BufferGeometry}
658
- */
659
- function toTrianglesDrawMode( geometry, drawMode ) {
660
-
661
- if ( drawMode === THREE.TrianglesDrawMode ) {
662
-
663
- console.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );
664
- return geometry;
665
-
666
- }
667
-
668
- if ( drawMode === THREE.TriangleFanDrawMode || drawMode === THREE.TriangleStripDrawMode ) {
669
-
670
- let index = geometry.getIndex();
671
-
672
- // generate index if not present
673
-
674
- if ( index === null ) {
675
-
676
- const indices = [];
677
- const position = geometry.getAttribute( 'position' );
678
- if ( position !== undefined ) {
679
-
680
- for ( let i = 0; i < position.count; i ++ ) {
681
-
682
- indices.push( i );
683
-
684
- }
685
-
686
- geometry.setIndex( indices );
687
- index = geometry.getIndex();
688
-
689
- } else {
690
-
691
- console.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );
692
- return geometry;
693
-
694
- }
695
-
696
- }
697
-
698
- //
699
-
700
- const numberOfTriangles = index.count - 2;
701
- const newIndices = [];
702
- if ( drawMode === THREE.TriangleFanDrawMode ) {
703
-
704
- // gl.TRIANGLE_FAN
705
-
706
- for ( let i = 1; i <= numberOfTriangles; i ++ ) {
707
-
708
- newIndices.push( index.getX( 0 ) );
709
- newIndices.push( index.getX( i ) );
710
- newIndices.push( index.getX( i + 1 ) );
711
-
712
- }
713
-
714
- } else {
715
-
716
- // gl.TRIANGLE_STRIP
717
-
718
- for ( let i = 0; i < numberOfTriangles; i ++ ) {
719
-
720
- if ( i % 2 === 0 ) {
721
-
722
- newIndices.push( index.getX( i ) );
723
- newIndices.push( index.getX( i + 1 ) );
724
- newIndices.push( index.getX( i + 2 ) );
725
-
726
- } else {
727
-
728
- newIndices.push( index.getX( i + 2 ) );
729
- newIndices.push( index.getX( i + 1 ) );
730
- newIndices.push( index.getX( i ) );
731
-
732
- }
733
-
734
- }
735
-
736
- }
737
-
738
- if ( newIndices.length / 3 !== numberOfTriangles ) {
739
-
740
- console.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );
741
-
742
- }
743
-
744
- // build final geometry
745
-
746
- const newGeometry = geometry.clone();
747
- newGeometry.setIndex( newIndices );
748
- newGeometry.clearGroups();
749
- return newGeometry;
750
-
751
- } else {
752
-
753
- console.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );
754
- return geometry;
755
-
756
- }
757
-
758
- }
759
-
760
- /**
761
- * Calculates the morphed attributes of a morphed/skinned THREE.BufferGeometry.
762
- * Helpful for Raytracing or Decals.
763
- * @param {Mesh | Line | Points} object An instance of Mesh, Line or Points.
764
- * @return {Object} An Object with original position/normal attributes and morphed ones.
765
- */
766
- function computeMorphedAttributes( object ) {
767
-
768
- if ( object.geometry.isBufferGeometry !== true ) {
769
-
770
- console.error( 'THREE.BufferGeometryUtils: Geometry is not of type THREE.BufferGeometry.' );
771
- return null;
772
-
773
- }
774
-
775
- const _vA = new THREE.Vector3();
776
- const _vB = new THREE.Vector3();
777
- const _vC = new THREE.Vector3();
778
- const _tempA = new THREE.Vector3();
779
- const _tempB = new THREE.Vector3();
780
- const _tempC = new THREE.Vector3();
781
- const _morphA = new THREE.Vector3();
782
- const _morphB = new THREE.Vector3();
783
- const _morphC = new THREE.Vector3();
784
- function _calculateMorphedAttributeData( object, attribute, morphAttribute, morphTargetsRelative, a, b, c, modifiedAttributeArray ) {
785
-
786
- _vA.fromBufferAttribute( attribute, a );
787
- _vB.fromBufferAttribute( attribute, b );
788
- _vC.fromBufferAttribute( attribute, c );
789
- const morphInfluences = object.morphTargetInfluences;
790
- if ( morphAttribute && morphInfluences ) {
791
-
792
- _morphA.set( 0, 0, 0 );
793
- _morphB.set( 0, 0, 0 );
794
- _morphC.set( 0, 0, 0 );
795
- for ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {
796
-
797
- const influence = morphInfluences[ i ];
798
- const morph = morphAttribute[ i ];
799
- if ( influence === 0 ) continue;
800
- _tempA.fromBufferAttribute( morph, a );
801
- _tempB.fromBufferAttribute( morph, b );
802
- _tempC.fromBufferAttribute( morph, c );
803
- if ( morphTargetsRelative ) {
804
-
805
- _morphA.addScaledVector( _tempA, influence );
806
- _morphB.addScaledVector( _tempB, influence );
807
- _morphC.addScaledVector( _tempC, influence );
808
-
809
- } else {
810
-
811
- _morphA.addScaledVector( _tempA.sub( _vA ), influence );
812
- _morphB.addScaledVector( _tempB.sub( _vB ), influence );
813
- _morphC.addScaledVector( _tempC.sub( _vC ), influence );
814
-
815
- }
816
-
817
- }
818
-
819
- _vA.add( _morphA );
820
- _vB.add( _morphB );
821
- _vC.add( _morphC );
822
-
823
- }
824
-
825
- if ( object.isSkinnedMesh ) {
826
-
827
- object.boneTransform( a, _vA );
828
- object.boneTransform( b, _vB );
829
- object.boneTransform( c, _vC );
830
-
831
- }
832
-
833
- modifiedAttributeArray[ a * 3 + 0 ] = _vA.x;
834
- modifiedAttributeArray[ a * 3 + 1 ] = _vA.y;
835
- modifiedAttributeArray[ a * 3 + 2 ] = _vA.z;
836
- modifiedAttributeArray[ b * 3 + 0 ] = _vB.x;
837
- modifiedAttributeArray[ b * 3 + 1 ] = _vB.y;
838
- modifiedAttributeArray[ b * 3 + 2 ] = _vB.z;
839
- modifiedAttributeArray[ c * 3 + 0 ] = _vC.x;
840
- modifiedAttributeArray[ c * 3 + 1 ] = _vC.y;
841
- modifiedAttributeArray[ c * 3 + 2 ] = _vC.z;
842
-
843
- }
844
-
845
- const geometry = object.geometry;
846
- const material = object.material;
847
- let a, b, c;
848
- const index = geometry.index;
849
- const positionAttribute = geometry.attributes.position;
850
- const morphPosition = geometry.morphAttributes.position;
851
- const morphTargetsRelative = geometry.morphTargetsRelative;
852
- const normalAttribute = geometry.attributes.normal;
853
- const morphNormal = geometry.morphAttributes.position;
854
- const groups = geometry.groups;
855
- const drawRange = geometry.drawRange;
856
- let i, j, il, jl;
857
- let group;
858
- let start, end;
859
- const modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );
860
- const modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );
861
- if ( index !== null ) {
862
-
863
- // indexed buffer geometry
864
-
865
- if ( Array.isArray( material ) ) {
866
-
867
- for ( i = 0, il = groups.length; i < il; i ++ ) {
868
-
869
- group = groups[ i ];
870
- start = Math.max( group.start, drawRange.start );
871
- end = Math.min( group.start + group.count, drawRange.start + drawRange.count );
872
- for ( j = start, jl = end; j < jl; j += 3 ) {
873
-
874
- a = index.getX( j );
875
- b = index.getX( j + 1 );
876
- c = index.getX( j + 2 );
877
- _calculateMorphedAttributeData( object, positionAttribute, morphPosition, morphTargetsRelative, a, b, c, modifiedPosition );
878
- _calculateMorphedAttributeData( object, normalAttribute, morphNormal, morphTargetsRelative, a, b, c, modifiedNormal );
879
-
880
- }
881
-
882
- }
883
-
884
- } else {
885
-
886
- start = Math.max( 0, drawRange.start );
887
- end = Math.min( index.count, drawRange.start + drawRange.count );
888
- for ( i = start, il = end; i < il; i += 3 ) {
889
-
890
- a = index.getX( i );
891
- b = index.getX( i + 1 );
892
- c = index.getX( i + 2 );
893
- _calculateMorphedAttributeData( object, positionAttribute, morphPosition, morphTargetsRelative, a, b, c, modifiedPosition );
894
- _calculateMorphedAttributeData( object, normalAttribute, morphNormal, morphTargetsRelative, a, b, c, modifiedNormal );
895
-
896
- }
897
-
898
- }
899
-
900
- } else {
901
-
902
- // non-indexed buffer geometry
903
-
904
- if ( Array.isArray( material ) ) {
905
-
906
- for ( i = 0, il = groups.length; i < il; i ++ ) {
907
-
908
- group = groups[ i ];
909
- start = Math.max( group.start, drawRange.start );
910
- end = Math.min( group.start + group.count, drawRange.start + drawRange.count );
911
- for ( j = start, jl = end; j < jl; j += 3 ) {
912
-
913
- a = j;
914
- b = j + 1;
915
- c = j + 2;
916
- _calculateMorphedAttributeData( object, positionAttribute, morphPosition, morphTargetsRelative, a, b, c, modifiedPosition );
917
- _calculateMorphedAttributeData( object, normalAttribute, morphNormal, morphTargetsRelative, a, b, c, modifiedNormal );
918
-
919
- }
920
-
921
- }
922
-
923
- } else {
924
-
925
- start = Math.max( 0, drawRange.start );
926
- end = Math.min( positionAttribute.count, drawRange.start + drawRange.count );
927
- for ( i = start, il = end; i < il; i += 3 ) {
928
-
929
- a = i;
930
- b = i + 1;
931
- c = i + 2;
932
- _calculateMorphedAttributeData( object, positionAttribute, morphPosition, morphTargetsRelative, a, b, c, modifiedPosition );
933
- _calculateMorphedAttributeData( object, normalAttribute, morphNormal, morphTargetsRelative, a, b, c, modifiedNormal );
934
-
935
- }
936
-
937
- }
938
-
939
- }
940
-
941
- const morphedPositionAttribute = new THREE.Float32BufferAttribute( modifiedPosition, 3 );
942
- const morphedNormalAttribute = new THREE.Float32BufferAttribute( modifiedNormal, 3 );
943
- return {
944
- positionAttribute: positionAttribute,
945
- normalAttribute: normalAttribute,
946
- morphedPositionAttribute: morphedPositionAttribute,
947
- morphedNormalAttribute: morphedNormalAttribute
948
- };
949
-
950
- }
951
-
952
- function mergeGroups( geometry ) {
953
-
954
- if ( geometry.groups.length === 0 ) {
955
-
956
- console.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );
957
- return geometry;
958
-
959
- }
960
-
961
- let groups = geometry.groups;
962
-
963
- // sort groups by material index
964
-
965
- groups = groups.sort( ( a, b ) => {
966
-
967
- if ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;
968
- return a.start - b.start;
969
-
970
- } );
971
-
972
- // create index for non-indexed geometries
973
-
974
- if ( geometry.getIndex() === null ) {
975
-
976
- const positionAttribute = geometry.getAttribute( 'position' );
977
- const indices = [];
978
- for ( let i = 0; i < positionAttribute.count; i += 3 ) {
979
-
980
- indices.push( i, i + 1, i + 2 );
981
-
982
- }
983
-
984
- geometry.setIndex( indices );
985
-
986
- }
987
-
988
- // sort index
989
-
990
- const index = geometry.getIndex();
991
- const newIndices = [];
992
- for ( let i = 0; i < groups.length; i ++ ) {
993
-
994
- const group = groups[ i ];
995
- const groupStart = group.start;
996
- const groupLength = groupStart + group.count;
997
- for ( let j = groupStart; j < groupLength; j ++ ) {
998
-
999
- newIndices.push( index.getX( j ) );
1000
-
1001
- }
1002
-
1003
- }
1004
-
1005
- geometry.dispose(); // Required to force buffer recreation
1006
- geometry.setIndex( newIndices );
1007
-
1008
- // update groups indices
1009
-
1010
- let start = 0;
1011
- for ( let i = 0; i < groups.length; i ++ ) {
1012
-
1013
- const group = groups[ i ];
1014
- group.start = start;
1015
- start += group.count;
1016
-
1017
- }
1018
-
1019
- // merge groups
1020
-
1021
- let currentGroup = groups[ 0 ];
1022
- geometry.groups = [ currentGroup ];
1023
- for ( let i = 1; i < groups.length; i ++ ) {
1024
-
1025
- const group = groups[ i ];
1026
- if ( currentGroup.materialIndex === group.materialIndex ) {
1027
-
1028
- currentGroup.count += group.count;
1029
-
1030
- } else {
1031
-
1032
- currentGroup = group;
1033
- geometry.groups.push( currentGroup );
1034
-
1035
- }
1036
-
1037
- }
1038
-
1039
- return geometry;
1040
-
1041
- }
1042
-
1043
- // Creates a new, non-indexed geometry with smooth normals everywhere except faces that meet at
1044
- // an angle greater than the crease angle.
1045
- function toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {
1046
-
1047
- const creaseDot = Math.cos( creaseAngle );
1048
- const hashMultiplier = ( 1 + 1e-10 ) * 1e2;
1049
-
1050
- // reusable vertors
1051
- const verts = [ new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3() ];
1052
- const tempVec1 = new THREE.Vector3();
1053
- const tempVec2 = new THREE.Vector3();
1054
- const tempNorm = new THREE.Vector3();
1055
- const tempNorm2 = new THREE.Vector3();
1056
-
1057
- // hashes a vector
1058
- function hashVertex( v ) {
1059
-
1060
- const x = ~ ~ ( v.x * hashMultiplier );
1061
- const y = ~ ~ ( v.y * hashMultiplier );
1062
- const z = ~ ~ ( v.z * hashMultiplier );
1063
- return `${x},${y},${z}`;
1064
-
1065
- }
1066
-
1067
- const resultGeometry = geometry.toNonIndexed();
1068
- const posAttr = resultGeometry.attributes.position;
1069
- const vertexMap = {};
1070
-
1071
- // find all the normals shared by commonly located vertices
1072
- for ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {
1073
-
1074
- const i3 = 3 * i;
1075
- const a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );
1076
- const b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );
1077
- const c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );
1078
- tempVec1.subVectors( c, b );
1079
- tempVec2.subVectors( a, b );
1080
-
1081
- // add the normal to the map for all vertices
1082
- const normal = new THREE.Vector3().crossVectors( tempVec1, tempVec2 ).normalize();
1083
- for ( let n = 0; n < 3; n ++ ) {
1084
-
1085
- const vert = verts[ n ];
1086
- const hash = hashVertex( vert );
1087
- if ( ! ( hash in vertexMap ) ) {
1088
-
1089
- vertexMap[ hash ] = [];
1090
-
1091
- }
1092
-
1093
- vertexMap[ hash ].push( normal );
1094
-
1095
- }
1096
-
1097
- }
1098
-
1099
- // average normals from all vertices that share a common location if they are within the
1100
- // provided crease threshold
1101
- const normalArray = new Float32Array( posAttr.count * 3 );
1102
- const normAttr = new THREE.BufferAttribute( normalArray, 3, false );
1103
- for ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {
1104
-
1105
- // get the face normal for this vertex
1106
- const i3 = 3 * i;
1107
- const a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );
1108
- const b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );
1109
- const c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );
1110
- tempVec1.subVectors( c, b );
1111
- tempVec2.subVectors( a, b );
1112
- tempNorm.crossVectors( tempVec1, tempVec2 ).normalize();
1113
-
1114
- // average all normals that meet the threshold and set the normal value
1115
- for ( let n = 0; n < 3; n ++ ) {
1116
-
1117
- const vert = verts[ n ];
1118
- const hash = hashVertex( vert );
1119
- const otherNormals = vertexMap[ hash ];
1120
- tempNorm2.set( 0, 0, 0 );
1121
- for ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {
1122
-
1123
- const otherNorm = otherNormals[ k ];
1124
- if ( tempNorm.dot( otherNorm ) > creaseDot ) {
1125
-
1126
- tempNorm2.add( otherNorm );
1127
-
1128
- }
1129
-
1130
- }
1131
-
1132
- tempNorm2.normalize();
1133
- normAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );
1134
-
1135
- }
1136
-
1137
- }
1138
-
1139
- resultGeometry.setAttribute( 'normal', normAttr );
1140
- return resultGeometry;
1141
-
1142
- }
1143
-
1144
- THREE.BufferGeometryUtils = {};
1145
- THREE.BufferGeometryUtils.computeMikkTSpaceTangents = computeMikkTSpaceTangents;
1146
- THREE.BufferGeometryUtils.computeMorphedAttributes = computeMorphedAttributes;
1147
- THREE.BufferGeometryUtils.computeTangents = computeTangents;
1148
- THREE.BufferGeometryUtils.deepCloneAttribute = deepCloneAttribute;
1149
- THREE.BufferGeometryUtils.deinterleaveAttribute = deinterleaveAttribute;
1150
- THREE.BufferGeometryUtils.deinterleaveGeometry = deinterleaveGeometry;
1151
- THREE.BufferGeometryUtils.estimateBytesUsed = estimateBytesUsed;
1152
- THREE.BufferGeometryUtils.interleaveAttributes = interleaveAttributes;
1153
- THREE.BufferGeometryUtils.mergeBufferAttributes = mergeBufferAttributes;
1154
- THREE.BufferGeometryUtils.mergeBufferGeometries = mergeBufferGeometries;
1155
- THREE.BufferGeometryUtils.mergeGroups = mergeGroups;
1156
- THREE.BufferGeometryUtils.mergeVertices = mergeVertices;
1157
- THREE.BufferGeometryUtils.toCreasedNormals = toCreasedNormals;
1158
- THREE.BufferGeometryUtils.toTrianglesDrawMode = toTrianglesDrawMode;
1159
-
1160
- } )();