@needle-tools/three 0.146.9 → 0.153.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 (865) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.cjs +39486 -20286
  3. package/build/three.js +39471 -20270
  4. package/build/three.min.js +3 -2
  5. package/build/three.module.js +6717 -5427
  6. package/build/three.module.min.js +6 -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 +1828 -1821
  11. package/examples/jsm/controls/MapControls.js +28 -0
  12. package/examples/jsm/controls/OrbitControls.js +25 -46
  13. package/examples/jsm/controls/PointerLockControls.js +70 -65
  14. package/examples/jsm/controls/TrackballControls.js +18 -4
  15. package/examples/jsm/controls/TransformControls.js +0 -1
  16. package/examples/jsm/csm/CSM.js +11 -5
  17. package/examples/jsm/csm/CSMShader.js +7 -6
  18. package/examples/jsm/effects/AnaglyphEffect.js +6 -20
  19. package/examples/jsm/effects/AsciiEffect.js +3 -6
  20. package/examples/jsm/effects/OutlineEffect.js +1 -15
  21. package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
  22. package/examples/jsm/exporters/DRACOExporter.js +53 -11
  23. package/examples/jsm/exporters/EXRExporter.js +3 -9
  24. package/examples/jsm/exporters/GLTFExporter.js +561 -154
  25. package/examples/jsm/exporters/KTX2Exporter.js +34 -23
  26. package/examples/jsm/exporters/MMDExporter.js +1 -1
  27. package/examples/jsm/exporters/PLYExporter.js +8 -1
  28. package/examples/jsm/exporters/STLExporter.js +8 -4
  29. package/examples/jsm/exporters/USDZExporter.js +305 -792
  30. package/examples/jsm/geometries/ConvexGeometry.js +0 -6
  31. package/examples/jsm/geometries/ParametricGeometry.js +10 -0
  32. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  33. package/examples/jsm/helpers/ViewHelper.js +71 -57
  34. package/examples/jsm/interactive/HTMLMesh.js +16 -3
  35. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  36. package/examples/{js → jsm}/libs/basis/README.md +4 -4
  37. package/examples/jsm/libs/draco/draco_decoder.js +34 -0
  38. package/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
  39. package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
  40. package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -0
  41. package/examples/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
  42. package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
  43. package/examples/jsm/libs/lil-gui.module.min.js +2 -2
  44. package/examples/jsm/libs/tween.module.js +803 -0
  45. package/examples/jsm/lights/IESSpotLight.js +25 -0
  46. package/examples/jsm/lights/LightProbeGenerator.js +11 -9
  47. package/examples/jsm/lines/LineSegments2.js +16 -10
  48. package/examples/jsm/loaders/3DMLoader.js +8 -5
  49. package/examples/jsm/loaders/3MFLoader.js +12 -11
  50. package/examples/jsm/loaders/AMFLoader.js +2 -3
  51. package/examples/jsm/loaders/BVHLoader.js +2 -2
  52. package/examples/jsm/loaders/ColladaLoader.js +15 -16
  53. package/examples/jsm/loaders/DRACOLoader.js +69 -18
  54. package/examples/jsm/loaders/EXRLoader.js +23 -24
  55. package/examples/jsm/loaders/FBXLoader.js +34 -50
  56. package/examples/jsm/loaders/GCodeLoader.js +1 -2
  57. package/examples/jsm/loaders/GLTFLoader.js +417 -895
  58. package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +684 -0
  59. package/examples/jsm/loaders/HDRCubeTextureLoader.js +4 -4
  60. package/examples/jsm/loaders/IESLoader.js +337 -0
  61. package/examples/jsm/loaders/KMZLoader.js +4 -4
  62. package/examples/jsm/loaders/KTX2Loader.js +145 -69
  63. package/examples/jsm/loaders/LDrawLoader.js +20 -18
  64. package/examples/jsm/loaders/LWOLoader.js +12 -29
  65. package/examples/jsm/loaders/LottieLoader.js +3 -1
  66. package/examples/jsm/loaders/MMDLoader.js +49 -18
  67. package/examples/jsm/loaders/MTLLoader.js +2 -2
  68. package/examples/jsm/loaders/MaterialXLoader.js +9 -3
  69. package/examples/jsm/loaders/NRRDLoader.js +33 -5
  70. package/examples/jsm/loaders/OBJLoader.js +1 -1
  71. package/examples/jsm/loaders/PCDLoader.js +26 -12
  72. package/examples/jsm/loaders/PDBLoader.js +7 -2
  73. package/examples/jsm/loaders/PLYLoader.js +254 -109
  74. package/examples/jsm/loaders/RGBELoader.js +3 -3
  75. package/examples/jsm/loaders/STLLoader.js +9 -5
  76. package/examples/jsm/loaders/SVGLoader.js +36 -27
  77. package/examples/jsm/loaders/TTFLoader.js +1 -8
  78. package/examples/jsm/loaders/TiltLoader.js +13 -7
  79. package/examples/jsm/loaders/USDZLoader.js +6 -6
  80. package/examples/jsm/loaders/VOXLoader.js +8 -2
  81. package/examples/jsm/loaders/VRMLLoader.js +44 -16
  82. package/examples/jsm/loaders/VTKLoader.js +19 -10
  83. package/examples/jsm/loaders/XYZLoader.js +9 -3
  84. package/examples/jsm/loaders/lwo/IFFParser.js +19 -19
  85. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -3
  86. package/examples/jsm/math/ConvexHull.js +3 -3
  87. package/examples/jsm/math/Lut.js +5 -4
  88. package/examples/jsm/math/MeshSurfaceSampler.js +7 -9
  89. package/examples/jsm/math/Octree.js +1 -1
  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 +144 -335
  101. package/examples/jsm/nodes/accessors/BitangentNode.js +43 -16
  102. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +86 -0
  103. package/examples/jsm/nodes/accessors/BufferNode.js +6 -0
  104. package/examples/jsm/nodes/accessors/CameraNode.js +12 -2
  105. package/examples/jsm/nodes/accessors/CubeTextureNode.js +27 -33
  106. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +58 -0
  107. package/examples/jsm/nodes/accessors/InstanceNode.js +41 -26
  108. package/examples/jsm/nodes/accessors/MaterialNode.js +155 -38
  109. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +16 -0
  110. package/examples/jsm/nodes/accessors/ModelNode.js +11 -0
  111. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +13 -14
  112. package/examples/jsm/nodes/accessors/NormalNode.js +35 -19
  113. package/examples/jsm/nodes/accessors/Object3DNode.js +32 -12
  114. package/examples/jsm/nodes/accessors/PointUVNode.js +6 -1
  115. package/examples/jsm/nodes/accessors/PositionNode.js +38 -23
  116. package/examples/jsm/nodes/accessors/ReferenceNode.js +21 -14
  117. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +11 -7
  118. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -40
  119. package/examples/jsm/nodes/accessors/StorageBufferNode.js +6 -0
  120. package/examples/jsm/nodes/accessors/TangentNode.js +28 -20
  121. package/examples/jsm/nodes/accessors/TextureNode.js +80 -12
  122. package/examples/jsm/nodes/accessors/UVNode.js +6 -0
  123. package/examples/jsm/nodes/accessors/UserDataNode.js +6 -0
  124. package/examples/jsm/nodes/code/CodeNode.js +75 -0
  125. package/examples/jsm/nodes/code/ExpressionNode.js +37 -0
  126. package/examples/jsm/nodes/{core → code}/FunctionCallNode.js +15 -1
  127. package/examples/jsm/nodes/{core → code}/FunctionNode.js +8 -7
  128. package/examples/jsm/nodes/code/ScriptableNode.js +488 -0
  129. package/examples/jsm/nodes/code/ScriptableValueNode.js +167 -0
  130. package/examples/jsm/nodes/core/ArrayUniformNode.js +3 -0
  131. package/examples/jsm/nodes/core/AttributeNode.js +17 -9
  132. package/examples/jsm/nodes/core/BypassNode.js +9 -2
  133. package/examples/jsm/nodes/core/CacheNode.js +46 -0
  134. package/examples/jsm/nodes/core/ConstNode.js +3 -0
  135. package/examples/jsm/nodes/core/ContextNode.js +8 -1
  136. package/examples/jsm/nodes/core/InputNode.js +26 -5
  137. package/examples/jsm/nodes/core/InstanceIndexNode.js +26 -2
  138. package/examples/jsm/nodes/core/LightingModel.js +16 -0
  139. package/examples/jsm/nodes/core/Node.js +129 -35
  140. package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
  141. package/examples/jsm/nodes/core/NodeBuilder.js +271 -121
  142. package/examples/jsm/nodes/core/NodeCache.js +26 -0
  143. package/examples/jsm/nodes/core/NodeFrame.js +56 -5
  144. package/examples/jsm/nodes/core/NodeUtils.js +115 -28
  145. package/examples/jsm/nodes/core/PropertyNode.js +19 -2
  146. package/examples/jsm/nodes/core/StackNode.js +99 -0
  147. package/examples/jsm/nodes/core/TempNode.js +11 -3
  148. package/examples/jsm/nodes/core/UniformNode.js +16 -1
  149. package/examples/jsm/nodes/core/VarNode.js +21 -29
  150. package/examples/jsm/nodes/core/VaryingNode.js +15 -2
  151. package/examples/jsm/nodes/core/constants.js +6 -0
  152. package/examples/jsm/nodes/display/BlendModeNode.js +25 -11
  153. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +30 -14
  154. package/examples/jsm/nodes/display/ColorSpaceNode.js +39 -27
  155. package/examples/jsm/nodes/display/FrontFacingNode.js +7 -1
  156. package/examples/jsm/nodes/display/NormalMapNode.js +31 -18
  157. package/examples/jsm/nodes/display/PosterizeNode.js +10 -3
  158. package/examples/jsm/nodes/display/ToneMappingNode.js +101 -11
  159. package/examples/jsm/nodes/display/ViewportNode.js +27 -18
  160. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +30 -0
  161. package/examples/jsm/nodes/display/ViewportTextureNode.js +67 -0
  162. package/examples/jsm/nodes/fog/FogExp2Node.js +35 -0
  163. package/examples/jsm/nodes/fog/FogNode.js +12 -6
  164. package/examples/jsm/nodes/fog/FogRangeNode.js +12 -5
  165. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +30 -0
  166. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -13
  167. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  168. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -6
  169. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +4 -4
  170. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +3 -3
  171. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +7 -5
  172. package/examples/jsm/nodes/functions/PhongLightingModel.js +28 -0
  173. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +35 -36
  174. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +4 -3
  175. package/examples/jsm/nodes/functions/material/getRoughness.js +4 -4
  176. package/examples/jsm/nodes/geometry/RangeNode.js +50 -55
  177. package/examples/jsm/nodes/gpgpu/ComputeNode.js +9 -2
  178. package/examples/jsm/nodes/lighting/AONode.js +5 -3
  179. package/examples/jsm/nodes/lighting/AmbientLightNode.js +27 -0
  180. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +114 -5
  181. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +43 -0
  182. package/examples/jsm/nodes/lighting/EnvironmentNode.js +121 -35
  183. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +15 -10
  184. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +39 -0
  185. package/examples/jsm/nodes/lighting/LightNode.js +57 -0
  186. package/examples/jsm/nodes/lighting/LightUtils.js +17 -0
  187. package/examples/jsm/nodes/lighting/LightingContextNode.js +30 -8
  188. package/examples/jsm/nodes/lighting/LightingNode.js +3 -1
  189. package/examples/jsm/nodes/lighting/LightsNode.js +18 -10
  190. package/examples/jsm/nodes/lighting/PointLightNode.js +71 -0
  191. package/examples/jsm/nodes/lighting/SpotLightNode.js +92 -0
  192. package/examples/jsm/nodes/loaders/NodeLoader.js +5 -4
  193. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +4 -20
  194. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +6 -9
  195. package/examples/jsm/nodes/materials/Materials.js +11 -55
  196. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +5 -11
  197. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +48 -0
  198. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +74 -0
  199. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
  200. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +21 -96
  201. package/examples/jsm/nodes/materials/NodeMaterial.js +284 -62
  202. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +7 -1
  203. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +29 -25
  204. package/examples/jsm/nodes/materialx/MaterialXNodes.js +31 -22
  205. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +1 -1
  206. package/examples/jsm/nodes/materialx/lib/mx_noise.js +2 -1
  207. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +2 -1
  208. package/examples/jsm/nodes/math/CondNode.js +43 -17
  209. package/examples/jsm/nodes/math/MathNode.js +178 -73
  210. package/examples/jsm/nodes/math/OperatorNode.js +52 -2
  211. package/examples/jsm/nodes/procedural/CheckerNode.js +14 -6
  212. package/examples/jsm/nodes/shadernode/ShaderNode.js +186 -63
  213. package/examples/jsm/nodes/utils/ArrayElementNode.js +4 -2
  214. package/examples/jsm/nodes/utils/ConvertNode.js +19 -1
  215. package/examples/jsm/nodes/utils/DiscardNode.js +26 -0
  216. package/examples/jsm/nodes/utils/EquirectUVNode.js +10 -4
  217. package/examples/jsm/nodes/utils/JoinNode.js +4 -1
  218. package/examples/jsm/nodes/utils/LoopNode.js +186 -0
  219. package/examples/jsm/nodes/utils/MatcapUVNode.js +11 -4
  220. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +18 -5
  221. package/examples/jsm/nodes/utils/OscNode.js +21 -14
  222. package/examples/jsm/nodes/utils/PackingNode.js +55 -0
  223. package/examples/jsm/nodes/utils/RemapNode.js +13 -5
  224. package/examples/jsm/nodes/utils/RotateUVNode.js +18 -7
  225. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +37 -0
  226. package/examples/jsm/nodes/utils/SplitNode.js +7 -5
  227. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +15 -30
  228. package/examples/jsm/nodes/utils/TimerNode.js +16 -6
  229. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +21 -10
  230. package/examples/jsm/objects/GroundProjectedSkybox.js +172 -0
  231. package/examples/jsm/objects/Lensflare.js +3 -4
  232. package/examples/jsm/objects/MarchingCubes.js +5 -1
  233. package/examples/jsm/objects/Reflector.js +7 -4
  234. package/examples/jsm/objects/Refractor.js +4 -4
  235. package/examples/jsm/objects/ShadowMesh.js +3 -3
  236. package/examples/jsm/objects/Water.js +2 -1
  237. package/examples/jsm/physics/AmmoPhysics.js +27 -28
  238. package/examples/jsm/physics/RapierPhysics.js +199 -0
  239. package/examples/jsm/postprocessing/AfterimagePass.js +3 -2
  240. package/examples/jsm/postprocessing/BloomPass.js +7 -4
  241. package/examples/jsm/postprocessing/BokehPass.js +3 -8
  242. package/examples/jsm/postprocessing/DotScreenPass.js +1 -2
  243. package/examples/jsm/postprocessing/EffectComposer.js +5 -95
  244. package/examples/jsm/postprocessing/FilmPass.js +1 -2
  245. package/examples/jsm/postprocessing/GlitchPass.js +0 -2
  246. package/examples/jsm/postprocessing/HalftonePass.js +0 -6
  247. package/examples/jsm/postprocessing/OutlinePass.js +7 -7
  248. package/examples/jsm/postprocessing/OutputPass.js +72 -0
  249. package/examples/jsm/postprocessing/Pass.js +2 -0
  250. package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
  251. package/examples/jsm/postprocessing/SAOPass.js +4 -26
  252. package/examples/jsm/postprocessing/SMAAPass.js +5 -8
  253. package/examples/jsm/postprocessing/SSAARenderPass.js +15 -6
  254. package/examples/jsm/postprocessing/SSAOPass.js +4 -14
  255. package/examples/jsm/postprocessing/SSRPass.js +3 -7
  256. package/examples/jsm/postprocessing/SavePass.js +2 -3
  257. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  258. package/examples/jsm/postprocessing/TAARenderPass.js +3 -2
  259. package/examples/jsm/postprocessing/TexturePass.js +0 -2
  260. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -11
  261. package/examples/jsm/renderers/CSS2DRenderer.js +6 -1
  262. package/examples/jsm/renderers/CSS3DRenderer.js +27 -5
  263. package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +4 -4
  264. package/examples/jsm/renderers/common/Attributes.js +75 -0
  265. package/examples/jsm/renderers/common/Backend.js +160 -0
  266. package/examples/jsm/renderers/common/Background.js +133 -0
  267. package/examples/jsm/renderers/common/Binding.js +11 -0
  268. package/examples/jsm/renderers/common/Bindings.js +169 -0
  269. package/examples/jsm/renderers/common/Buffer.js +38 -0
  270. package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
  271. package/examples/jsm/renderers/common/ChainMap.js +89 -0
  272. package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
  273. package/examples/jsm/renderers/common/Constants.js +14 -0
  274. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
  275. package/examples/jsm/renderers/common/DataMap.js +54 -0
  276. package/examples/jsm/renderers/common/Geometries.js +215 -0
  277. package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
  278. package/examples/jsm/renderers/common/Pipeline.js +13 -0
  279. package/examples/jsm/renderers/common/Pipelines.js +309 -0
  280. package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
  281. package/examples/jsm/renderers/common/RenderContext.js +37 -0
  282. package/examples/jsm/renderers/common/RenderContexts.js +38 -0
  283. package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +26 -47
  284. package/examples/jsm/renderers/common/RenderLists.js +38 -0
  285. package/examples/jsm/renderers/common/RenderObject.js +95 -0
  286. package/examples/jsm/renderers/common/RenderObjects.js +92 -0
  287. package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
  288. package/examples/jsm/renderers/common/RenderTarget.js +15 -0
  289. package/examples/jsm/renderers/common/Renderer.js +822 -0
  290. package/examples/jsm/renderers/common/SampledTexture.js +80 -0
  291. package/examples/jsm/renderers/common/Sampler.js +18 -0
  292. package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
  293. package/examples/jsm/renderers/common/Textures.js +206 -0
  294. package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
  295. package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
  296. package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
  297. package/examples/jsm/renderers/common/nodes/NodeRender.js +302 -0
  298. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
  299. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
  300. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
  301. package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
  302. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +35 -31
  303. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +765 -0
  304. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -987
  305. package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +117 -90
  306. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
  307. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
  308. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +251 -0
  309. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
  310. package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +73 -12
  311. package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +135 -285
  312. package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +5 -25
  313. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +855 -0
  314. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +88 -0
  315. package/examples/jsm/shaders/BleachBypassShader.js +2 -0
  316. package/examples/jsm/shaders/BokehShader2.js +3 -0
  317. package/examples/jsm/shaders/ColorifyShader.js +2 -0
  318. package/examples/jsm/shaders/ConvolutionShader.js +2 -0
  319. package/examples/jsm/shaders/CopyShader.js +2 -0
  320. package/examples/jsm/shaders/DotScreenShader.js +2 -0
  321. package/examples/jsm/shaders/ExposureShader.js +44 -0
  322. package/examples/jsm/shaders/FilmShader.js +2 -0
  323. package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
  324. package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
  325. package/examples/jsm/shaders/MMDToonShader.js +15 -4
  326. package/examples/jsm/shaders/OutputShader.js +61 -0
  327. package/examples/jsm/shaders/RGBShiftShader.js +4 -2
  328. package/examples/jsm/shaders/SepiaShader.js +2 -0
  329. package/examples/jsm/shaders/ToonShader.js +13 -5
  330. package/examples/jsm/shaders/VelocityShader.js +1 -1
  331. package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
  332. package/examples/jsm/shaders/VignetteShader.js +2 -0
  333. package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
  334. package/examples/jsm/utils/BufferGeometryUtils.js +54 -36
  335. package/examples/jsm/utils/LDrawUtils.js +4 -4
  336. package/examples/jsm/utils/PackedPhongMaterial.js +5 -78
  337. package/examples/jsm/utils/SceneUtils.js +8 -4
  338. package/examples/jsm/utils/SkeletonUtils.js +27 -210
  339. package/examples/jsm/utils/TextureUtils.js +41 -40
  340. package/examples/jsm/webxr/VRButton.js +1 -2
  341. package/examples/jsm/webxr/XRButton.js +198 -0
  342. package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
  343. package/examples/jsm/webxr/XRPlanes.js +100 -0
  344. package/package.json +34 -87
  345. package/src/Three.Legacy.js +19 -110
  346. package/src/Three.js +4 -3
  347. package/src/animation/AnimationUtils.js +13 -1
  348. package/src/audio/Audio.js +7 -2
  349. package/src/audio/PositionalAudio.js +8 -0
  350. package/src/cameras/Camera.js +5 -0
  351. package/src/cameras/CubeCamera.js +76 -13
  352. package/src/cameras/OrthographicCamera.js +1 -1
  353. package/src/cameras/PerspectiveCamera.js +1 -1
  354. package/src/constants.js +22 -2
  355. package/src/core/BufferAttribute.js +150 -9
  356. package/src/core/BufferGeometry.js +4 -10
  357. package/src/core/GLBufferAttribute.js +2 -0
  358. package/src/core/InterleavedBufferAttribute.js +5 -5
  359. package/src/core/Object3D.js +37 -8
  360. package/src/extras/DataUtils.js +7 -1
  361. package/src/extras/ImageUtils.js +2 -2
  362. package/src/extras/PMREMGenerator.js +5 -5
  363. package/src/extras/core/Curve.js +1 -1
  364. package/src/extras/curves/LineCurve.js +6 -4
  365. package/src/extras/curves/LineCurve3.js +13 -0
  366. package/src/geometries/BoxGeometry.js +10 -0
  367. package/src/geometries/CircleGeometry.js +11 -1
  368. package/src/geometries/ConeGeometry.js +1 -1
  369. package/src/geometries/CylinderGeometry.js +11 -1
  370. package/src/geometries/EdgesGeometry.js +10 -0
  371. package/src/geometries/ExtrudeGeometry.js +11 -1
  372. package/src/geometries/LatheGeometry.js +10 -0
  373. package/src/geometries/PlaneGeometry.js +10 -0
  374. package/src/geometries/PolyhedronGeometry.js +11 -1
  375. package/src/geometries/RingGeometry.js +11 -1
  376. package/src/geometries/ShapeGeometry.js +11 -1
  377. package/src/geometries/SphereGeometry.js +12 -2
  378. package/src/geometries/TorusGeometry.js +11 -1
  379. package/src/geometries/TorusKnotGeometry.js +10 -0
  380. package/src/geometries/TubeGeometry.js +10 -0
  381. package/src/geometries/WireframeGeometry.js +10 -0
  382. package/src/helpers/Box3Helper.js +1 -2
  383. package/src/lights/DirectionalLight.js +1 -1
  384. package/src/lights/HemisphereLight.js +1 -1
  385. package/src/lights/SpotLight.js +1 -1
  386. package/src/loaders/AudioLoader.js +14 -8
  387. package/src/loaders/CubeTextureLoader.js +2 -0
  388. package/src/loaders/DataTextureLoader.js +5 -1
  389. package/src/loaders/MaterialLoader.js +8 -0
  390. package/src/loaders/ObjectLoader.js +10 -2
  391. package/src/materials/LineBasicMaterial.js +4 -0
  392. package/src/materials/Material.js +16 -4
  393. package/src/materials/MeshDistanceMaterial.js +0 -9
  394. package/src/materials/MeshPhysicalMaterial.js +32 -6
  395. package/src/materials/ShaderMaterial.js +6 -1
  396. package/src/math/Box2.js +3 -2
  397. package/src/math/Box3.js +49 -64
  398. package/src/math/Color.js +88 -66
  399. package/src/math/ColorManagement.js +75 -16
  400. package/src/math/Euler.js +2 -11
  401. package/src/math/Frustum.js +29 -5
  402. package/src/math/MathUtils.js +43 -1
  403. package/src/math/Matrix3.js +26 -6
  404. package/src/math/Matrix4.js +74 -19
  405. package/src/math/Plane.js +2 -2
  406. package/src/math/Quaternion.js +6 -0
  407. package/src/math/Ray.js +7 -7
  408. package/src/math/Triangle.js +37 -7
  409. package/src/math/Vector2.js +16 -0
  410. package/src/math/Vector3.js +10 -0
  411. package/src/math/interpolants/CubicInterpolant.js +1 -2
  412. package/src/objects/InstancedMesh.js +82 -1
  413. package/src/objects/Mesh.js +108 -76
  414. package/src/objects/Skeleton.js +1 -1
  415. package/src/objects/SkinnedMesh.js +123 -8
  416. package/src/objects/Sprite.js +1 -1
  417. package/src/renderers/WebGLCubeRenderTarget.js +12 -3
  418. package/src/renderers/WebGLMultipleRenderTargets.js +4 -2
  419. package/src/renderers/WebGLRenderTarget.js +14 -2
  420. package/src/renderers/WebGLRenderer.js +1433 -1236
  421. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +1 -1
  422. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  423. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +0 -271
  424. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +5 -5
  425. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +2 -10
  426. package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +5 -5
  427. package/src/renderers/shaders/ShaderChunk/common.glsl.js +32 -0
  428. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +1 -1
  429. package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +1 -1
  430. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +1 -1
  431. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
  432. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  433. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  434. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +10 -2
  435. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -11
  436. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +39 -13
  437. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +306 -10
  438. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -10
  439. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +9 -1
  440. package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +10 -2
  441. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +1 -1
  442. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +32 -10
  443. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -13
  444. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +7 -7
  445. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -2
  446. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +11 -5
  447. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +4 -11
  449. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +2 -2
  450. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +39 -34
  451. package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +5 -5
  454. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +101 -16
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +113 -1
  456. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +134 -6
  457. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +116 -1
  458. package/src/renderers/shaders/ShaderChunk.js +0 -6
  459. package/src/renderers/shaders/ShaderLib/background.glsl.js +0 -8
  460. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +5 -0
  461. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -4
  462. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -3
  463. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +3 -3
  464. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -3
  465. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +16 -12
  466. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -3
  467. package/src/renderers/shaders/ShaderLib/points.glsl.js +13 -0
  468. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +5 -0
  469. package/src/renderers/shaders/ShaderLib.js +18 -4
  470. package/src/renderers/shaders/UniformsLib.js +27 -15
  471. package/src/renderers/shaders/UniformsUtils.js +12 -3
  472. package/src/renderers/webgl/WebGLBackground.js +23 -12
  473. package/src/renderers/webgl/WebGLBindingStates.js +13 -5
  474. package/src/renderers/webgl/WebGLCapabilities.js +1 -2
  475. package/src/renderers/webgl/WebGLClipping.js +7 -3
  476. package/src/renderers/webgl/WebGLGeometries.js +12 -0
  477. package/src/renderers/webgl/WebGLInfo.js +0 -1
  478. package/src/renderers/webgl/WebGLLights.js +2 -2
  479. package/src/renderers/webgl/WebGLMaterials.js +123 -234
  480. package/src/renderers/webgl/WebGLMorphtargets.js +1 -1
  481. package/src/renderers/webgl/WebGLProgram.js +130 -48
  482. package/src/renderers/webgl/WebGLPrograms.js +210 -130
  483. package/src/renderers/webgl/WebGLRenderStates.js +2 -2
  484. package/src/renderers/webgl/WebGLShadowMap.js +40 -27
  485. package/src/renderers/webgl/WebGLState.js +23 -9
  486. package/src/renderers/webgl/WebGLTextures.js +39 -19
  487. package/src/renderers/webgl/WebGLUniformsGroups.js +74 -33
  488. package/src/renderers/webgl/WebGLUtils.js +41 -29
  489. package/src/renderers/webxr/WebXRController.js +3 -0
  490. package/src/renderers/webxr/WebXRManager.js +85 -141
  491. package/src/scenes/Scene.js +4 -6
  492. package/src/textures/CompressedTexture.js +2 -2
  493. package/src/textures/CubeTexture.js +2 -2
  494. package/src/textures/DataTexture.js +2 -2
  495. package/src/textures/DepthTexture.js +22 -0
  496. package/src/textures/FramebufferTexture.js +1 -3
  497. package/src/textures/Source.js +4 -0
  498. package/src/textures/Texture.js +43 -13
  499. package/src/utils.js +13 -1
  500. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  501. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  502. package/examples/fonts/open-sans/open-sans.css +0 -9
  503. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  504. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +0 -3966
  505. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  506. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  507. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  508. package/examples/fonts/tabler-icons/tabler-icons.min.css +0 -4
  509. package/examples/js/animation/AnimationClipCreator.js +0 -89
  510. package/examples/js/animation/CCDIKSolver.js +0 -416
  511. package/examples/js/animation/MMDAnimationHelper.js +0 -1046
  512. package/examples/js/animation/MMDPhysics.js +0 -1174
  513. package/examples/js/cameras/CinematicCamera.js +0 -168
  514. package/examples/js/controls/ArcballControls.js +0 -2770
  515. package/examples/js/controls/DragControls.js +0 -205
  516. package/examples/js/controls/FirstPersonControls.js +0 -312
  517. package/examples/js/controls/FlyControls.js +0 -321
  518. package/examples/js/controls/OrbitControls.js +0 -1065
  519. package/examples/js/controls/PointerLockControls.js +0 -144
  520. package/examples/js/controls/TrackballControls.js +0 -729
  521. package/examples/js/controls/TransformControls.js +0 -1301
  522. package/examples/js/csm/CSM.js +0 -347
  523. package/examples/js/csm/CSMFrustum.js +0 -127
  524. package/examples/js/csm/CSMHelper.js +0 -165
  525. package/examples/js/csm/CSMShader.js +0 -253
  526. package/examples/js/curves/CurveExtras.js +0 -348
  527. package/examples/js/curves/NURBSCurve.js +0 -63
  528. package/examples/js/curves/NURBSSurface.js +0 -48
  529. package/examples/js/curves/NURBSUtils.js +0 -439
  530. package/examples/js/effects/AnaglyphEffect.js +0 -86
  531. package/examples/js/effects/AsciiEffect.js +0 -260
  532. package/examples/js/effects/OutlineEffect.js +0 -450
  533. package/examples/js/effects/ParallaxBarrierEffect.js +0 -62
  534. package/examples/js/effects/PeppersGhostEffect.js +0 -139
  535. package/examples/js/effects/StereoEffect.js +0 -46
  536. package/examples/js/environments/DebugEnvironment.js +0 -53
  537. package/examples/js/environments/RoomEnvironment.js +0 -124
  538. package/examples/js/exporters/ColladaExporter.js +0 -487
  539. package/examples/js/exporters/DRACOExporter.js +0 -212
  540. package/examples/js/exporters/EXRExporter.js +0 -455
  541. package/examples/js/exporters/GLTFExporter.js +0 -2425
  542. package/examples/js/exporters/MMDExporter.js +0 -187
  543. package/examples/js/exporters/OBJExporter.js +0 -260
  544. package/examples/js/exporters/PLYExporter.js +0 -427
  545. package/examples/js/exporters/STLExporter.js +0 -188
  546. package/examples/js/exporters/USDZExporter.js +0 -608
  547. package/examples/js/geometries/BoxLineGeometry.js +0 -59
  548. package/examples/js/geometries/ConvexGeometry.js +0 -53
  549. package/examples/js/geometries/DecalGeometry.js +0 -324
  550. package/examples/js/geometries/LightningStrike.js +0 -861
  551. package/examples/js/geometries/ParametricGeometries.js +0 -216
  552. package/examples/js/geometries/ParametricGeometry.js +0 -121
  553. package/examples/js/geometries/RoundedBoxGeometry.js +0 -142
  554. package/examples/js/geometries/TeapotGeometry.js +0 -335
  555. package/examples/js/geometries/TextGeometry.js +0 -53
  556. package/examples/js/helpers/LightProbeHelper.js +0 -48
  557. package/examples/js/helpers/OctreeHelper.js +0 -76
  558. package/examples/js/helpers/PositionalAudioHelper.js +0 -91
  559. package/examples/js/helpers/RectAreaLightHelper.js +0 -73
  560. package/examples/js/helpers/VertexNormalsHelper.js +0 -74
  561. package/examples/js/helpers/VertexTangentsHelper.js +0 -68
  562. package/examples/js/helpers/ViewHelper.js +0 -281
  563. package/examples/js/interactive/HTMLMesh.js +0 -497
  564. package/examples/js/interactive/InteractiveGroup.js +0 -95
  565. package/examples/js/interactive/SelectionBox.js +0 -195
  566. package/examples/js/interactive/SelectionHelper.js +0 -83
  567. package/examples/js/libs/chevrotain.min.js +0 -3
  568. package/examples/js/libs/draco/draco_decoder.js +0 -52
  569. package/examples/js/libs/draco/draco_decoder.wasm +0 -0
  570. package/examples/js/libs/draco/draco_wasm_wrapper.js +0 -104
  571. package/examples/js/libs/draco/gltf/draco_decoder.js +0 -48
  572. package/examples/js/libs/draco/gltf/draco_decoder.wasm +0 -0
  573. package/examples/js/libs/draco/gltf/draco_wasm_wrapper.js +0 -104
  574. package/examples/js/libs/fflate.min.js +0 -7
  575. package/examples/js/libs/ktx-parse.umd.js +0 -1
  576. package/examples/js/libs/meshopt_decoder.js +0 -188
  577. package/examples/js/libs/opentype.min.js +0 -1
  578. package/examples/js/libs/stats.min.js +0 -5
  579. package/examples/js/lights/LightProbeGenerator.js +0 -221
  580. package/examples/js/lights/RectAreaLightUniformsLib.js +0 -60
  581. package/examples/js/lines/Line2.js +0 -19
  582. package/examples/js/lines/LineGeometry.js +0 -69
  583. package/examples/js/lines/LineMaterial.js +0 -635
  584. package/examples/js/lines/LineSegments2.js +0 -311
  585. package/examples/js/lines/LineSegmentsGeometry.js +0 -198
  586. package/examples/js/lines/Wireframe.js +0 -47
  587. package/examples/js/lines/WireframeGeometry2.js +0 -20
  588. package/examples/js/loaders/3DMLoader.js +0 -1273
  589. package/examples/js/loaders/3MFLoader.js +0 -1306
  590. package/examples/js/loaders/AMFLoader.js +0 -504
  591. package/examples/js/loaders/BVHLoader.js +0 -395
  592. package/examples/js/loaders/BasisTextureLoader.js +0 -706
  593. package/examples/js/loaders/ColladaLoader.js +0 -3663
  594. package/examples/js/loaders/DDSLoader.js +0 -244
  595. package/examples/js/loaders/DRACOLoader.js +0 -511
  596. package/examples/js/loaders/EXRLoader.js +0 -2039
  597. package/examples/js/loaders/FBXLoader.js +0 -3680
  598. package/examples/js/loaders/FontLoader.js +0 -160
  599. package/examples/js/loaders/GCodeLoader.js +0 -255
  600. package/examples/js/loaders/GLTFLoader.js +0 -4108
  601. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -87
  602. package/examples/js/loaders/KMZLoader.js +0 -121
  603. package/examples/js/loaders/KTXLoader.js +0 -159
  604. package/examples/js/loaders/LDrawLoader.js +0 -2263
  605. package/examples/js/loaders/LUT3dlLoader.js +0 -135
  606. package/examples/js/loaders/LUTCubeLoader.js +0 -132
  607. package/examples/js/loaders/LWOLoader.js +0 -901
  608. package/examples/js/loaders/LogLuvLoader.js +0 -715
  609. package/examples/js/loaders/LottieLoader.js +0 -62
  610. package/examples/js/loaders/MD2Loader.js +0 -248
  611. package/examples/js/loaders/MDDLoader.js +0 -91
  612. package/examples/js/loaders/MMDLoader.js +0 -1915
  613. package/examples/js/loaders/MTLLoader.js +0 -472
  614. package/examples/js/loaders/MaterialXLoader.js +0 -392
  615. package/examples/js/loaders/NRRDLoader.js +0 -609
  616. package/examples/js/loaders/OBJLoader.js +0 -789
  617. package/examples/js/loaders/PCDLoader.js +0 -413
  618. package/examples/js/loaders/PDBLoader.js +0 -317
  619. package/examples/js/loaders/PLYLoader.js +0 -532
  620. package/examples/js/loaders/PRWMLoader.js +0 -249
  621. package/examples/js/loaders/PVRLoader.js +0 -218
  622. package/examples/js/loaders/RGBELoader.js +0 -442
  623. package/examples/js/loaders/RGBMLoader.js +0 -1354
  624. package/examples/js/loaders/STLLoader.js +0 -364
  625. package/examples/js/loaders/SVGLoader.js +0 -2783
  626. package/examples/js/loaders/TDSLoader.js +0 -992
  627. package/examples/js/loaders/TGALoader.js +0 -484
  628. package/examples/js/loaders/TIFFLoader.js +0 -30
  629. package/examples/js/loaders/TTFLoader.js +0 -203
  630. package/examples/js/loaders/TiltLoader.js +0 -459
  631. package/examples/js/loaders/VOXLoader.js +0 -240
  632. package/examples/js/loaders/VRMLLoader.js +0 -3140
  633. package/examples/js/loaders/VTKLoader.js +0 -1078
  634. package/examples/js/loaders/XYZLoader.js +0 -89
  635. package/examples/js/loaders/lwo/IFFParser.js +0 -1067
  636. package/examples/js/loaders/lwo/LWO2Parser.js +0 -397
  637. package/examples/js/loaders/lwo/LWO3Parser.js +0 -360
  638. package/examples/js/materials/MeshGouraudMaterial.js +0 -387
  639. package/examples/js/math/Capsule.js +0 -103
  640. package/examples/js/math/ColorConverter.js +0 -33
  641. package/examples/js/math/ConvexHull.js +0 -1154
  642. package/examples/js/math/ImprovedNoise.js +0 -66
  643. package/examples/js/math/Lut.js +0 -164
  644. package/examples/js/math/MeshSurfaceSampler.js +0 -171
  645. package/examples/js/math/OBB.js +0 -382
  646. package/examples/js/math/Octree.js +0 -410
  647. package/examples/js/math/SimplexNoise.js +0 -445
  648. package/examples/js/misc/ConvexObjectBreaker.js +0 -474
  649. package/examples/js/misc/GPUComputationRenderer.js +0 -393
  650. package/examples/js/misc/Gyroscope.js +0 -56
  651. package/examples/js/misc/MD2Character.js +0 -235
  652. package/examples/js/misc/MD2CharacterComplex.js +0 -513
  653. package/examples/js/misc/MorphAnimMesh.js +0 -63
  654. package/examples/js/misc/MorphBlendMesh.js +0 -265
  655. package/examples/js/misc/ProgressiveLightMap.js +0 -335
  656. package/examples/js/misc/RollerCoaster.js +0 -430
  657. package/examples/js/misc/TubePainter.js +0 -167
  658. package/examples/js/misc/Volume.js +0 -437
  659. package/examples/js/misc/VolumeSlice.js +0 -214
  660. package/examples/js/modifiers/CurveModifier.js +0 -309
  661. package/examples/js/modifiers/EdgeSplitModifier.js +0 -228
  662. package/examples/js/modifiers/SimplifyModifier.js +0 -465
  663. package/examples/js/modifiers/TessellateModifier.js +0 -276
  664. package/examples/js/objects/GroundProjectedEnv.js +0 -181
  665. package/examples/js/objects/Lensflare.js +0 -356
  666. package/examples/js/objects/LightningStorm.js +0 -206
  667. package/examples/js/objects/MarchingCubes.js +0 -759
  668. package/examples/js/objects/Reflector.js +0 -216
  669. package/examples/js/objects/ReflectorForSSRPass.js +0 -315
  670. package/examples/js/objects/Refractor.js +0 -283
  671. package/examples/js/objects/ShadowMesh.js +0 -59
  672. package/examples/js/objects/Sky.js +0 -218
  673. package/examples/js/objects/Water.js +0 -292
  674. package/examples/js/objects/Water2.js +0 -307
  675. package/examples/js/physics/AmmoPhysics.js +0 -259
  676. package/examples/js/physics/OimoPhysics.js +0 -217
  677. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +0 -335
  678. package/examples/js/postprocessing/AfterimagePass.js +0 -77
  679. package/examples/js/postprocessing/BloomPass.js +0 -135
  680. package/examples/js/postprocessing/BokehPass.js +0 -120
  681. package/examples/js/postprocessing/ClearPass.js +0 -39
  682. package/examples/js/postprocessing/CubeTexturePass.js +0 -60
  683. package/examples/js/postprocessing/DotScreenPass.js +0 -51
  684. package/examples/js/postprocessing/EffectComposer.js +0 -272
  685. package/examples/js/postprocessing/FilmPass.js +0 -52
  686. package/examples/js/postprocessing/GlitchPass.js +0 -104
  687. package/examples/js/postprocessing/HalftonePass.js +0 -75
  688. package/examples/js/postprocessing/LUTPass.js +0 -171
  689. package/examples/js/postprocessing/MaskPass.js +0 -95
  690. package/examples/js/postprocessing/OutlinePass.js +0 -598
  691. package/examples/js/postprocessing/Pass.js +0 -72
  692. package/examples/js/postprocessing/RenderPass.js +0 -70
  693. package/examples/js/postprocessing/SAOPass.js +0 -374
  694. package/examples/js/postprocessing/SMAAPass.js +0 -170
  695. package/examples/js/postprocessing/SSAARenderPass.js +0 -156
  696. package/examples/js/postprocessing/SSAOPass.js +0 -365
  697. package/examples/js/postprocessing/SSRPass.js +0 -567
  698. package/examples/js/postprocessing/SavePass.js +0 -59
  699. package/examples/js/postprocessing/ShaderPass.js +0 -64
  700. package/examples/js/postprocessing/TAARenderPass.js +0 -130
  701. package/examples/js/postprocessing/TexturePass.js +0 -49
  702. package/examples/js/postprocessing/UnrealBloomPass.js +0 -375
  703. package/examples/js/renderers/CSS2DRenderer.js +0 -178
  704. package/examples/js/renderers/CSS3DRenderer.js +0 -237
  705. package/examples/js/renderers/Projector.js +0 -818
  706. package/examples/js/renderers/SVGRenderer.js +0 -491
  707. package/examples/js/shaders/ACESFilmicToneMappingShader.js +0 -89
  708. package/examples/js/shaders/AfterimageShader.js +0 -60
  709. package/examples/js/shaders/BasicShader.js +0 -27
  710. package/examples/js/shaders/BleachBypassShader.js +0 -62
  711. package/examples/js/shaders/BlendShader.js +0 -54
  712. package/examples/js/shaders/BokehShader.js +0 -156
  713. package/examples/js/shaders/BokehShader2.js +0 -419
  714. package/examples/js/shaders/BrightnessContrastShader.js +0 -58
  715. package/examples/js/shaders/ColorCorrectionShader.js +0 -52
  716. package/examples/js/shaders/ColorifyShader.js +0 -47
  717. package/examples/js/shaders/ConvolutionShader.js +0 -92
  718. package/examples/js/shaders/CopyShader.js +0 -45
  719. package/examples/js/shaders/DOFMipMapShader.js +0 -60
  720. package/examples/js/shaders/DepthLimitedBlurShader.js +0 -173
  721. package/examples/js/shaders/DigitalGlitch.js +0 -127
  722. package/examples/js/shaders/DotScreenShader.js +0 -72
  723. package/examples/js/shaders/FXAAShader.js +0 -284
  724. package/examples/js/shaders/FilmShader.js +0 -110
  725. package/examples/js/shaders/FocusShader.js +0 -95
  726. package/examples/js/shaders/FreiChenShader.js +0 -93
  727. package/examples/js/shaders/GammaCorrectionShader.js +0 -41
  728. package/examples/js/shaders/GodRaysShader.js +0 -284
  729. package/examples/js/shaders/HalftoneShader.js +0 -336
  730. package/examples/js/shaders/HorizontalBlurShader.js +0 -59
  731. package/examples/js/shaders/HorizontalTiltShiftShader.js +0 -65
  732. package/examples/js/shaders/HueSaturationShader.js +0 -69
  733. package/examples/js/shaders/KaleidoShader.js +0 -60
  734. package/examples/js/shaders/LuminosityHighPassShader.js +0 -67
  735. package/examples/js/shaders/LuminosityShader.js +0 -46
  736. package/examples/js/shaders/MMDToonShader.js +0 -96
  737. package/examples/js/shaders/MirrorShader.js +0 -56
  738. package/examples/js/shaders/NormalMapShader.js +0 -55
  739. package/examples/js/shaders/RGBShiftShader.js +0 -56
  740. package/examples/js/shaders/SAOShader.js +0 -209
  741. package/examples/js/shaders/SMAAShader.js +0 -454
  742. package/examples/js/shaders/SSAOShader.js +0 -295
  743. package/examples/js/shaders/SSRShader.js +0 -381
  744. package/examples/js/shaders/SepiaShader.js +0 -52
  745. package/examples/js/shaders/SobelOperatorShader.js +0 -88
  746. package/examples/js/shaders/SubsurfaceScatteringShader.js +0 -49
  747. package/examples/js/shaders/TechnicolorShader.js +0 -43
  748. package/examples/js/shaders/ToneMapShader.js +0 -84
  749. package/examples/js/shaders/ToonShader.js +0 -335
  750. package/examples/js/shaders/TriangleBlurShader.js +0 -70
  751. package/examples/js/shaders/UnpackDepthRGBAShader.js +0 -47
  752. package/examples/js/shaders/VelocityShader.js +0 -126
  753. package/examples/js/shaders/VerticalBlurShader.js +0 -59
  754. package/examples/js/shaders/VerticalTiltShiftShader.js +0 -65
  755. package/examples/js/shaders/VignetteShader.js +0 -53
  756. package/examples/js/shaders/VolumeShader.js +0 -296
  757. package/examples/js/shaders/WaterRefractionShader.js +0 -84
  758. package/examples/js/textures/FlakesTexture.js +0 -40
  759. package/examples/js/utils/BufferGeometryUtils.js +0 -1160
  760. package/examples/js/utils/CameraUtils.js +0 -71
  761. package/examples/js/utils/GPUStatsPanel.js +0 -125
  762. package/examples/js/utils/GeometryCompressionUtils.js +0 -549
  763. package/examples/js/utils/GeometryUtils.js +0 -168
  764. package/examples/js/utils/LDrawUtils.js +0 -179
  765. package/examples/js/utils/PackedPhongMaterial.js +0 -109
  766. package/examples/js/utils/SceneUtils.js +0 -214
  767. package/examples/js/utils/ShadowMapViewer.js +0 -183
  768. package/examples/js/utils/SkeletonUtils.js +0 -493
  769. package/examples/js/utils/UVsDebug.js +0 -143
  770. package/examples/js/utils/WorkerPool.js +0 -105
  771. package/examples/jsm/exporters/ColladaExporter.js +0 -713
  772. package/examples/jsm/geometries/LightningStrike.js +0 -1017
  773. package/examples/jsm/libs/OimoPhysics/OimoPhysics.js +0 -37071
  774. package/examples/jsm/libs/OimoPhysics/index.js +0 -43
  775. package/examples/jsm/libs/flow.module.js +0 -4552
  776. package/examples/jsm/libs/tween.module.min.js +0 -3
  777. package/examples/jsm/loaders/BasisTextureLoader.js +0 -790
  778. package/examples/jsm/loaders/IFCLoader.js +0 -2431
  779. package/examples/jsm/loaders/PRWMLoader.js +0 -299
  780. package/examples/jsm/loaders/ifc/web-ifc-api.js +0 -47504
  781. package/examples/jsm/loaders/ifc/web-ifc.wasm +0 -0
  782. package/examples/jsm/node-editor/NodeEditor.js +0 -857
  783. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +0 -14
  784. package/examples/jsm/node-editor/accessors/NormalEditor.js +0 -30
  785. package/examples/jsm/node-editor/accessors/PositionEditor.js +0 -30
  786. package/examples/jsm/node-editor/accessors/UVEditor.js +0 -25
  787. package/examples/jsm/node-editor/core/BaseNode.js +0 -96
  788. package/examples/jsm/node-editor/core/DataFile.js +0 -59
  789. package/examples/jsm/node-editor/core/FileEditor.js +0 -20
  790. package/examples/jsm/node-editor/core/FileURLEditor.js +0 -29
  791. package/examples/jsm/node-editor/display/BlendEditor.js +0 -44
  792. package/examples/jsm/node-editor/display/NormalMapEditor.js +0 -49
  793. package/examples/jsm/node-editor/examples/animate-uv.json +0 -1
  794. package/examples/jsm/node-editor/examples/fake-top-light.json +0 -1
  795. package/examples/jsm/node-editor/examples/matcap.json +0 -1
  796. package/examples/jsm/node-editor/examples/oscillator-color.json +0 -1
  797. package/examples/jsm/node-editor/examples/rim.json +0 -1
  798. package/examples/jsm/node-editor/inputs/ColorEditor.js +0 -96
  799. package/examples/jsm/node-editor/inputs/FloatEditor.js +0 -23
  800. package/examples/jsm/node-editor/inputs/SliderEditor.js +0 -67
  801. package/examples/jsm/node-editor/inputs/TextureEditor.js +0 -155
  802. package/examples/jsm/node-editor/inputs/Vector2Editor.js +0 -28
  803. package/examples/jsm/node-editor/inputs/Vector3Editor.js +0 -30
  804. package/examples/jsm/node-editor/inputs/Vector4Editor.js +0 -37
  805. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +0 -84
  806. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +0 -102
  807. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +0 -118
  808. package/examples/jsm/node-editor/math/AngleEditor.js +0 -40
  809. package/examples/jsm/node-editor/math/DotEditor.js +0 -35
  810. package/examples/jsm/node-editor/math/InvertEditor.js +0 -39
  811. package/examples/jsm/node-editor/math/LimiterEditor.js +0 -62
  812. package/examples/jsm/node-editor/math/NormalizeEditor.js +0 -28
  813. package/examples/jsm/node-editor/math/OperatorEditor.js +0 -63
  814. package/examples/jsm/node-editor/math/PowerEditor.js +0 -44
  815. package/examples/jsm/node-editor/math/TrigonometryEditor.js +0 -45
  816. package/examples/jsm/node-editor/procedural/CheckerEditor.js +0 -27
  817. package/examples/jsm/node-editor/scene/MeshEditor.js +0 -102
  818. package/examples/jsm/node-editor/scene/Object3DEditor.js +0 -160
  819. package/examples/jsm/node-editor/scene/PointsEditor.js +0 -99
  820. package/examples/jsm/node-editor/utils/JoinEditor.js +0 -58
  821. package/examples/jsm/node-editor/utils/OscillatorEditor.js +0 -43
  822. package/examples/jsm/node-editor/utils/PreviewEditor.js +0 -170
  823. package/examples/jsm/node-editor/utils/SplitEditor.js +0 -39
  824. package/examples/jsm/node-editor/utils/TimerEditor.js +0 -58
  825. package/examples/jsm/nodes/core/CodeNode.js +0 -50
  826. package/examples/jsm/nodes/core/ExpressionNode.js +0 -32
  827. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +0 -22
  828. package/examples/jsm/nodes/lighting/PunctualLightNode.js +0 -68
  829. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +0 -301
  830. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +0 -149
  831. package/examples/jsm/objects/GroundProjectedEnv.js +0 -186
  832. package/examples/jsm/objects/LightningStorm.js +0 -245
  833. package/examples/jsm/physics/OimoPhysics.js +0 -231
  834. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -369
  835. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -187
  836. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -173
  837. package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
  838. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -255
  839. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
  840. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
  841. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +0 -82
  842. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -36
  843. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
  844. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -38
  845. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -296
  846. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -66
  847. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -73
  848. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
  849. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
  850. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -40
  851. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +0 -794
  852. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
  853. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -81
  854. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +0 -83
  855. package/examples/jsm/shaders/ToneMapShader.js +0 -73
  856. package/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js +0 -7
  857. package/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js +0 -10
  858. package/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js +0 -7
  859. /package/examples/{js → jsm}/libs/ammo.wasm.js +0 -0
  860. /package/examples/{js → jsm}/libs/ammo.wasm.wasm +0 -0
  861. /package/examples/{js → jsm}/libs/basis/basis_transcoder.js +0 -0
  862. /package/examples/{js → jsm}/libs/basis/basis_transcoder.wasm +0 -0
  863. /package/examples/{js → jsm}/libs/draco/README.md +0 -0
  864. /package/examples/{js → jsm}/libs/draco/draco_encoder.js +0 -0
  865. /package/examples/{js → jsm}/libs/draco/gltf/draco_encoder.js +0 -0
@@ -1,1306 +0,0 @@
1
- ( function () {
2
-
3
- /**
4
- *
5
- * 3D Manufacturing Format (3MF) specification: https://3mf.io/specification/
6
- *
7
- * The following features from the core specification are supported:
8
- *
9
- * - 3D Models
10
- * - Object Resources (Meshes and Components)
11
- * - Material Resources (Base Materials)
12
- *
13
- * 3MF Materials and Properties Extension are only partially supported.
14
- *
15
- * - Texture 2D
16
- * - Texture 2D Groups
17
- * - THREE.Color Groups (Vertex Colors)
18
- * - Metallic Display Properties (PBR)
19
- */
20
-
21
- class ThreeMFLoader extends THREE.Loader {
22
-
23
- constructor( manager ) {
24
-
25
- super( manager );
26
- this.availableExtensions = [];
27
-
28
- }
29
- load( url, onLoad, onProgress, onError ) {
30
-
31
- const scope = this;
32
- const loader = new THREE.FileLoader( scope.manager );
33
- loader.setPath( scope.path );
34
- loader.setResponseType( 'arraybuffer' );
35
- loader.setRequestHeader( scope.requestHeader );
36
- loader.setWithCredentials( scope.withCredentials );
37
- loader.load( url, function ( buffer ) {
38
-
39
- try {
40
-
41
- onLoad( scope.parse( buffer ) );
42
-
43
- } catch ( e ) {
44
-
45
- if ( onError ) {
46
-
47
- onError( e );
48
-
49
- } else {
50
-
51
- console.error( e );
52
-
53
- }
54
-
55
- scope.manager.itemError( url );
56
-
57
- }
58
-
59
- }, onProgress, onError );
60
-
61
- }
62
- parse( data ) {
63
-
64
- const scope = this;
65
- const textureLoader = new THREE.TextureLoader( this.manager );
66
- function loadDocument( data ) {
67
-
68
- let zip = null;
69
- let file = null;
70
- let relsName;
71
- let modelRelsName;
72
- const modelPartNames = [];
73
- const texturesPartNames = [];
74
- let modelRels;
75
- const modelParts = {};
76
- const printTicketParts = {};
77
- const texturesParts = {};
78
- try {
79
-
80
- zip = fflate.unzipSync( new Uint8Array( data ) ); // eslint-disable-line no-undef
81
-
82
- } catch ( e ) {
83
-
84
- if ( e instanceof ReferenceError ) {
85
-
86
- console.error( 'THREE.3MFLoader: fflate missing and file is compressed.' );
87
- return null;
88
-
89
- }
90
-
91
- }
92
-
93
- for ( file in zip ) {
94
-
95
- if ( file.match( /\_rels\/.rels$/ ) ) {
96
-
97
- relsName = file;
98
-
99
- } else if ( file.match( /3D\/_rels\/.*\.model\.rels$/ ) ) {
100
-
101
- modelRelsName = file;
102
-
103
- } else if ( file.match( /^3D\/.*\.model$/ ) ) {
104
-
105
- modelPartNames.push( file );
106
-
107
- } else if ( file.match( /^3D\/Textures?\/.*/ ) ) {
108
-
109
- texturesPartNames.push( file );
110
-
111
- }
112
-
113
- }
114
-
115
- //
116
-
117
- const relsView = zip[ relsName ];
118
- const relsFileText = THREE.LoaderUtils.decodeText( relsView );
119
- const rels = parseRelsXml( relsFileText );
120
-
121
- //
122
-
123
- if ( modelRelsName ) {
124
-
125
- const relsView = zip[ modelRelsName ];
126
- const relsFileText = THREE.LoaderUtils.decodeText( relsView );
127
- modelRels = parseRelsXml( relsFileText );
128
-
129
- }
130
-
131
- //
132
-
133
- for ( let i = 0; i < modelPartNames.length; i ++ ) {
134
-
135
- const modelPart = modelPartNames[ i ];
136
- const view = zip[ modelPart ];
137
- const fileText = THREE.LoaderUtils.decodeText( view );
138
- const xmlData = new DOMParser().parseFromString( fileText, 'application/xml' );
139
- if ( xmlData.documentElement.nodeName.toLowerCase() !== 'model' ) {
140
-
141
- console.error( 'THREE.3MFLoader: Error loading 3MF - no 3MF document found: ', modelPart );
142
-
143
- }
144
-
145
- const modelNode = xmlData.querySelector( 'model' );
146
- const extensions = {};
147
- for ( let i = 0; i < modelNode.attributes.length; i ++ ) {
148
-
149
- const attr = modelNode.attributes[ i ];
150
- if ( attr.name.match( /^xmlns:(.+)$/ ) ) {
151
-
152
- extensions[ attr.value ] = RegExp.$1;
153
-
154
- }
155
-
156
- }
157
-
158
- const modelData = parseModelNode( modelNode );
159
- modelData[ 'xml' ] = modelNode;
160
- if ( 0 < Object.keys( extensions ).length ) {
161
-
162
- modelData[ 'extensions' ] = extensions;
163
-
164
- }
165
-
166
- modelParts[ modelPart ] = modelData;
167
-
168
- }
169
-
170
- //
171
-
172
- for ( let i = 0; i < texturesPartNames.length; i ++ ) {
173
-
174
- const texturesPartName = texturesPartNames[ i ];
175
- texturesParts[ texturesPartName ] = zip[ texturesPartName ].buffer;
176
-
177
- }
178
-
179
- return {
180
- rels: rels,
181
- modelRels: modelRels,
182
- model: modelParts,
183
- printTicket: printTicketParts,
184
- texture: texturesParts
185
- };
186
-
187
- }
188
-
189
- function parseRelsXml( relsFileText ) {
190
-
191
- const relationships = [];
192
- const relsXmlData = new DOMParser().parseFromString( relsFileText, 'application/xml' );
193
- const relsNodes = relsXmlData.querySelectorAll( 'Relationship' );
194
- for ( let i = 0; i < relsNodes.length; i ++ ) {
195
-
196
- const relsNode = relsNodes[ i ];
197
- const relationship = {
198
- target: relsNode.getAttribute( 'Target' ),
199
- //required
200
- id: relsNode.getAttribute( 'Id' ),
201
- //required
202
- type: relsNode.getAttribute( 'Type' ) //required
203
- };
204
-
205
- relationships.push( relationship );
206
-
207
- }
208
-
209
- return relationships;
210
-
211
- }
212
-
213
- function parseMetadataNodes( metadataNodes ) {
214
-
215
- const metadataData = {};
216
- for ( let i = 0; i < metadataNodes.length; i ++ ) {
217
-
218
- const metadataNode = metadataNodes[ i ];
219
- const name = metadataNode.getAttribute( 'name' );
220
- const validNames = [ 'Title', 'Designer', 'Description', 'Copyright', 'LicenseTerms', 'Rating', 'CreationDate', 'ModificationDate' ];
221
- if ( 0 <= validNames.indexOf( name ) ) {
222
-
223
- metadataData[ name ] = metadataNode.textContent;
224
-
225
- }
226
-
227
- }
228
-
229
- return metadataData;
230
-
231
- }
232
-
233
- function parseBasematerialsNode( basematerialsNode ) {
234
-
235
- const basematerialsData = {
236
- id: basematerialsNode.getAttribute( 'id' ),
237
- // required
238
- basematerials: []
239
- };
240
- const basematerialNodes = basematerialsNode.querySelectorAll( 'base' );
241
- for ( let i = 0; i < basematerialNodes.length; i ++ ) {
242
-
243
- const basematerialNode = basematerialNodes[ i ];
244
- const basematerialData = parseBasematerialNode( basematerialNode );
245
- basematerialData.index = i; // the order and count of the material nodes form an implicit 0-based index
246
- basematerialsData.basematerials.push( basematerialData );
247
-
248
- }
249
-
250
- return basematerialsData;
251
-
252
- }
253
-
254
- function parseTexture2DNode( texture2DNode ) {
255
-
256
- const texture2dData = {
257
- id: texture2DNode.getAttribute( 'id' ),
258
- // required
259
- path: texture2DNode.getAttribute( 'path' ),
260
- // required
261
- contenttype: texture2DNode.getAttribute( 'contenttype' ),
262
- // required
263
- tilestyleu: texture2DNode.getAttribute( 'tilestyleu' ),
264
- tilestylev: texture2DNode.getAttribute( 'tilestylev' ),
265
- filter: texture2DNode.getAttribute( 'filter' )
266
- };
267
- return texture2dData;
268
-
269
- }
270
-
271
- function parseTextures2DGroupNode( texture2DGroupNode ) {
272
-
273
- const texture2DGroupData = {
274
- id: texture2DGroupNode.getAttribute( 'id' ),
275
- // required
276
- texid: texture2DGroupNode.getAttribute( 'texid' ),
277
- // required
278
- displaypropertiesid: texture2DGroupNode.getAttribute( 'displaypropertiesid' )
279
- };
280
- const tex2coordNodes = texture2DGroupNode.querySelectorAll( 'tex2coord' );
281
- const uvs = [];
282
- for ( let i = 0; i < tex2coordNodes.length; i ++ ) {
283
-
284
- const tex2coordNode = tex2coordNodes[ i ];
285
- const u = tex2coordNode.getAttribute( 'u' );
286
- const v = tex2coordNode.getAttribute( 'v' );
287
- uvs.push( parseFloat( u ), parseFloat( v ) );
288
-
289
- }
290
-
291
- texture2DGroupData[ 'uvs' ] = new Float32Array( uvs );
292
- return texture2DGroupData;
293
-
294
- }
295
-
296
- function parseColorGroupNode( colorGroupNode ) {
297
-
298
- const colorGroupData = {
299
- id: colorGroupNode.getAttribute( 'id' ),
300
- // required
301
- displaypropertiesid: colorGroupNode.getAttribute( 'displaypropertiesid' )
302
- };
303
- const colorNodes = colorGroupNode.querySelectorAll( 'color' );
304
- const colors = [];
305
- const colorObject = new THREE.Color();
306
- for ( let i = 0; i < colorNodes.length; i ++ ) {
307
-
308
- const colorNode = colorNodes[ i ];
309
- const color = colorNode.getAttribute( 'color' );
310
- colorObject.setStyle( color.substring( 0, 7 ) );
311
- colorObject.convertSRGBToLinear(); // color is in sRGB
312
-
313
- colors.push( colorObject.r, colorObject.g, colorObject.b );
314
-
315
- }
316
-
317
- colorGroupData[ 'colors' ] = new Float32Array( colors );
318
- return colorGroupData;
319
-
320
- }
321
-
322
- function parseMetallicDisplaypropertiesNode( metallicDisplaypropetiesNode ) {
323
-
324
- const metallicDisplaypropertiesData = {
325
- id: metallicDisplaypropetiesNode.getAttribute( 'id' ) // required
326
- };
327
-
328
- const metallicNodes = metallicDisplaypropetiesNode.querySelectorAll( 'pbmetallic' );
329
- const metallicData = [];
330
- for ( let i = 0; i < metallicNodes.length; i ++ ) {
331
-
332
- const metallicNode = metallicNodes[ i ];
333
- metallicData.push( {
334
- name: metallicNode.getAttribute( 'name' ),
335
- // required
336
- metallicness: parseFloat( metallicNode.getAttribute( 'metallicness' ) ),
337
- // required
338
- roughness: parseFloat( metallicNode.getAttribute( 'roughness' ) ) // required
339
- } );
340
-
341
- }
342
-
343
- metallicDisplaypropertiesData.data = metallicData;
344
- return metallicDisplaypropertiesData;
345
-
346
- }
347
-
348
- function parseBasematerialNode( basematerialNode ) {
349
-
350
- const basematerialData = {};
351
- basematerialData[ 'name' ] = basematerialNode.getAttribute( 'name' ); // required
352
- basematerialData[ 'displaycolor' ] = basematerialNode.getAttribute( 'displaycolor' ); // required
353
- basematerialData[ 'displaypropertiesid' ] = basematerialNode.getAttribute( 'displaypropertiesid' );
354
- return basematerialData;
355
-
356
- }
357
-
358
- function parseMeshNode( meshNode ) {
359
-
360
- const meshData = {};
361
- const vertices = [];
362
- const vertexNodes = meshNode.querySelectorAll( 'vertices vertex' );
363
- for ( let i = 0; i < vertexNodes.length; i ++ ) {
364
-
365
- const vertexNode = vertexNodes[ i ];
366
- const x = vertexNode.getAttribute( 'x' );
367
- const y = vertexNode.getAttribute( 'y' );
368
- const z = vertexNode.getAttribute( 'z' );
369
- vertices.push( parseFloat( x ), parseFloat( y ), parseFloat( z ) );
370
-
371
- }
372
-
373
- meshData[ 'vertices' ] = new Float32Array( vertices );
374
- const triangleProperties = [];
375
- const triangles = [];
376
- const triangleNodes = meshNode.querySelectorAll( 'triangles triangle' );
377
- for ( let i = 0; i < triangleNodes.length; i ++ ) {
378
-
379
- const triangleNode = triangleNodes[ i ];
380
- const v1 = triangleNode.getAttribute( 'v1' );
381
- const v2 = triangleNode.getAttribute( 'v2' );
382
- const v3 = triangleNode.getAttribute( 'v3' );
383
- const p1 = triangleNode.getAttribute( 'p1' );
384
- const p2 = triangleNode.getAttribute( 'p2' );
385
- const p3 = triangleNode.getAttribute( 'p3' );
386
- const pid = triangleNode.getAttribute( 'pid' );
387
- const triangleProperty = {};
388
- triangleProperty[ 'v1' ] = parseInt( v1, 10 );
389
- triangleProperty[ 'v2' ] = parseInt( v2, 10 );
390
- triangleProperty[ 'v3' ] = parseInt( v3, 10 );
391
- triangles.push( triangleProperty[ 'v1' ], triangleProperty[ 'v2' ], triangleProperty[ 'v3' ] );
392
-
393
- // optional
394
-
395
- if ( p1 ) {
396
-
397
- triangleProperty[ 'p1' ] = parseInt( p1, 10 );
398
-
399
- }
400
-
401
- if ( p2 ) {
402
-
403
- triangleProperty[ 'p2' ] = parseInt( p2, 10 );
404
-
405
- }
406
-
407
- if ( p3 ) {
408
-
409
- triangleProperty[ 'p3' ] = parseInt( p3, 10 );
410
-
411
- }
412
-
413
- if ( pid ) {
414
-
415
- triangleProperty[ 'pid' ] = pid;
416
-
417
- }
418
-
419
- if ( 0 < Object.keys( triangleProperty ).length ) {
420
-
421
- triangleProperties.push( triangleProperty );
422
-
423
- }
424
-
425
- }
426
-
427
- meshData[ 'triangleProperties' ] = triangleProperties;
428
- meshData[ 'triangles' ] = new Uint32Array( triangles );
429
- return meshData;
430
-
431
- }
432
-
433
- function parseComponentsNode( componentsNode ) {
434
-
435
- const components = [];
436
- const componentNodes = componentsNode.querySelectorAll( 'component' );
437
- for ( let i = 0; i < componentNodes.length; i ++ ) {
438
-
439
- const componentNode = componentNodes[ i ];
440
- const componentData = parseComponentNode( componentNode );
441
- components.push( componentData );
442
-
443
- }
444
-
445
- return components;
446
-
447
- }
448
-
449
- function parseComponentNode( componentNode ) {
450
-
451
- const componentData = {};
452
- componentData[ 'objectId' ] = componentNode.getAttribute( 'objectid' ); // required
453
-
454
- const transform = componentNode.getAttribute( 'transform' );
455
- if ( transform ) {
456
-
457
- componentData[ 'transform' ] = parseTransform( transform );
458
-
459
- }
460
-
461
- return componentData;
462
-
463
- }
464
-
465
- function parseTransform( transform ) {
466
-
467
- const t = [];
468
- transform.split( ' ' ).forEach( function ( s ) {
469
-
470
- t.push( parseFloat( s ) );
471
-
472
- } );
473
- const matrix = new THREE.Matrix4();
474
- matrix.set( t[ 0 ], t[ 3 ], t[ 6 ], t[ 9 ], t[ 1 ], t[ 4 ], t[ 7 ], t[ 10 ], t[ 2 ], t[ 5 ], t[ 8 ], t[ 11 ], 0.0, 0.0, 0.0, 1.0 );
475
- return matrix;
476
-
477
- }
478
-
479
- function parseObjectNode( objectNode ) {
480
-
481
- const objectData = {
482
- type: objectNode.getAttribute( 'type' )
483
- };
484
- const id = objectNode.getAttribute( 'id' );
485
- if ( id ) {
486
-
487
- objectData[ 'id' ] = id;
488
-
489
- }
490
-
491
- const pid = objectNode.getAttribute( 'pid' );
492
- if ( pid ) {
493
-
494
- objectData[ 'pid' ] = pid;
495
-
496
- }
497
-
498
- const pindex = objectNode.getAttribute( 'pindex' );
499
- if ( pindex ) {
500
-
501
- objectData[ 'pindex' ] = pindex;
502
-
503
- }
504
-
505
- const thumbnail = objectNode.getAttribute( 'thumbnail' );
506
- if ( thumbnail ) {
507
-
508
- objectData[ 'thumbnail' ] = thumbnail;
509
-
510
- }
511
-
512
- const partnumber = objectNode.getAttribute( 'partnumber' );
513
- if ( partnumber ) {
514
-
515
- objectData[ 'partnumber' ] = partnumber;
516
-
517
- }
518
-
519
- const name = objectNode.getAttribute( 'name' );
520
- if ( name ) {
521
-
522
- objectData[ 'name' ] = name;
523
-
524
- }
525
-
526
- const meshNode = objectNode.querySelector( 'mesh' );
527
- if ( meshNode ) {
528
-
529
- objectData[ 'mesh' ] = parseMeshNode( meshNode );
530
-
531
- }
532
-
533
- const componentsNode = objectNode.querySelector( 'components' );
534
- if ( componentsNode ) {
535
-
536
- objectData[ 'components' ] = parseComponentsNode( componentsNode );
537
-
538
- }
539
-
540
- return objectData;
541
-
542
- }
543
-
544
- function parseResourcesNode( resourcesNode ) {
545
-
546
- const resourcesData = {};
547
- resourcesData[ 'basematerials' ] = {};
548
- const basematerialsNodes = resourcesNode.querySelectorAll( 'basematerials' );
549
- for ( let i = 0; i < basematerialsNodes.length; i ++ ) {
550
-
551
- const basematerialsNode = basematerialsNodes[ i ];
552
- const basematerialsData = parseBasematerialsNode( basematerialsNode );
553
- resourcesData[ 'basematerials' ][ basematerialsData[ 'id' ] ] = basematerialsData;
554
-
555
- }
556
-
557
- //
558
-
559
- resourcesData[ 'texture2d' ] = {};
560
- const textures2DNodes = resourcesNode.querySelectorAll( 'texture2d' );
561
- for ( let i = 0; i < textures2DNodes.length; i ++ ) {
562
-
563
- const textures2DNode = textures2DNodes[ i ];
564
- const texture2DData = parseTexture2DNode( textures2DNode );
565
- resourcesData[ 'texture2d' ][ texture2DData[ 'id' ] ] = texture2DData;
566
-
567
- }
568
-
569
- //
570
-
571
- resourcesData[ 'colorgroup' ] = {};
572
- const colorGroupNodes = resourcesNode.querySelectorAll( 'colorgroup' );
573
- for ( let i = 0; i < colorGroupNodes.length; i ++ ) {
574
-
575
- const colorGroupNode = colorGroupNodes[ i ];
576
- const colorGroupData = parseColorGroupNode( colorGroupNode );
577
- resourcesData[ 'colorgroup' ][ colorGroupData[ 'id' ] ] = colorGroupData;
578
-
579
- }
580
-
581
- //
582
-
583
- resourcesData[ 'pbmetallicdisplayproperties' ] = {};
584
- const pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll( 'pbmetallicdisplayproperties' );
585
- for ( let i = 0; i < pbmetallicdisplaypropertiesNodes.length; i ++ ) {
586
-
587
- const pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[ i ];
588
- const pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode( pbmetallicdisplaypropertiesNode );
589
- resourcesData[ 'pbmetallicdisplayproperties' ][ pbmetallicdisplaypropertiesData[ 'id' ] ] = pbmetallicdisplaypropertiesData;
590
-
591
- }
592
-
593
- //
594
-
595
- resourcesData[ 'texture2dgroup' ] = {};
596
- const textures2DGroupNodes = resourcesNode.querySelectorAll( 'texture2dgroup' );
597
- for ( let i = 0; i < textures2DGroupNodes.length; i ++ ) {
598
-
599
- const textures2DGroupNode = textures2DGroupNodes[ i ];
600
- const textures2DGroupData = parseTextures2DGroupNode( textures2DGroupNode );
601
- resourcesData[ 'texture2dgroup' ][ textures2DGroupData[ 'id' ] ] = textures2DGroupData;
602
-
603
- }
604
-
605
- //
606
-
607
- resourcesData[ 'object' ] = {};
608
- const objectNodes = resourcesNode.querySelectorAll( 'object' );
609
- for ( let i = 0; i < objectNodes.length; i ++ ) {
610
-
611
- const objectNode = objectNodes[ i ];
612
- const objectData = parseObjectNode( objectNode );
613
- resourcesData[ 'object' ][ objectData[ 'id' ] ] = objectData;
614
-
615
- }
616
-
617
- return resourcesData;
618
-
619
- }
620
-
621
- function parseBuildNode( buildNode ) {
622
-
623
- const buildData = [];
624
- const itemNodes = buildNode.querySelectorAll( 'item' );
625
- for ( let i = 0; i < itemNodes.length; i ++ ) {
626
-
627
- const itemNode = itemNodes[ i ];
628
- const buildItem = {
629
- objectId: itemNode.getAttribute( 'objectid' )
630
- };
631
- const transform = itemNode.getAttribute( 'transform' );
632
- if ( transform ) {
633
-
634
- buildItem[ 'transform' ] = parseTransform( transform );
635
-
636
- }
637
-
638
- buildData.push( buildItem );
639
-
640
- }
641
-
642
- return buildData;
643
-
644
- }
645
-
646
- function parseModelNode( modelNode ) {
647
-
648
- const modelData = {
649
- unit: modelNode.getAttribute( 'unit' ) || 'millimeter'
650
- };
651
- const metadataNodes = modelNode.querySelectorAll( 'metadata' );
652
- if ( metadataNodes ) {
653
-
654
- modelData[ 'metadata' ] = parseMetadataNodes( metadataNodes );
655
-
656
- }
657
-
658
- const resourcesNode = modelNode.querySelector( 'resources' );
659
- if ( resourcesNode ) {
660
-
661
- modelData[ 'resources' ] = parseResourcesNode( resourcesNode );
662
-
663
- }
664
-
665
- const buildNode = modelNode.querySelector( 'build' );
666
- if ( buildNode ) {
667
-
668
- modelData[ 'build' ] = parseBuildNode( buildNode );
669
-
670
- }
671
-
672
- return modelData;
673
-
674
- }
675
-
676
- function buildTexture( texture2dgroup, objects, modelData, textureData ) {
677
-
678
- const texid = texture2dgroup.texid;
679
- const texture2ds = modelData.resources.texture2d;
680
- const texture2d = texture2ds[ texid ];
681
- if ( texture2d ) {
682
-
683
- const data = textureData[ texture2d.path ];
684
- const type = texture2d.contenttype;
685
- const blob = new Blob( [ data ], {
686
- type: type
687
- } );
688
- const sourceURI = URL.createObjectURL( blob );
689
- const texture = textureLoader.load( sourceURI, function () {
690
-
691
- URL.revokeObjectURL( sourceURI );
692
-
693
- } );
694
- texture.encoding = THREE.sRGBEncoding;
695
-
696
- // texture parameters
697
-
698
- switch ( texture2d.tilestyleu ) {
699
-
700
- case 'wrap':
701
- texture.wrapS = THREE.RepeatWrapping;
702
- break;
703
- case 'mirror':
704
- texture.wrapS = THREE.MirroredRepeatWrapping;
705
- break;
706
- case 'none':
707
- case 'clamp':
708
- texture.wrapS = THREE.ClampToEdgeWrapping;
709
- break;
710
- default:
711
- texture.wrapS = THREE.RepeatWrapping;
712
-
713
- }
714
-
715
- switch ( texture2d.tilestylev ) {
716
-
717
- case 'wrap':
718
- texture.wrapT = THREE.RepeatWrapping;
719
- break;
720
- case 'mirror':
721
- texture.wrapT = THREE.MirroredRepeatWrapping;
722
- break;
723
- case 'none':
724
- case 'clamp':
725
- texture.wrapT = THREE.ClampToEdgeWrapping;
726
- break;
727
- default:
728
- texture.wrapT = THREE.RepeatWrapping;
729
-
730
- }
731
-
732
- switch ( texture2d.filter ) {
733
-
734
- case 'auto':
735
- texture.magFilter = THREE.LinearFilter;
736
- texture.minFilter = THREE.LinearMipmapLinearFilter;
737
- break;
738
- case 'linear':
739
- texture.magFilter = THREE.LinearFilter;
740
- texture.minFilter = THREE.LinearFilter;
741
- break;
742
- case 'nearest':
743
- texture.magFilter = THREE.NearestFilter;
744
- texture.minFilter = THREE.NearestFilter;
745
- break;
746
- default:
747
- texture.magFilter = THREE.LinearFilter;
748
- texture.minFilter = THREE.LinearMipmapLinearFilter;
749
-
750
- }
751
-
752
- return texture;
753
-
754
- } else {
755
-
756
- return null;
757
-
758
- }
759
-
760
- }
761
-
762
- function buildBasematerialsMeshes( basematerials, triangleProperties, meshData, objects, modelData, textureData, objectData ) {
763
-
764
- const objectPindex = objectData.pindex;
765
- const materialMap = {};
766
- for ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {
767
-
768
- const triangleProperty = triangleProperties[ i ];
769
- const pindex = triangleProperty.p1 !== undefined ? triangleProperty.p1 : objectPindex;
770
- if ( materialMap[ pindex ] === undefined ) materialMap[ pindex ] = [];
771
- materialMap[ pindex ].push( triangleProperty );
772
-
773
- }
774
-
775
- //
776
-
777
- const keys = Object.keys( materialMap );
778
- const meshes = [];
779
- for ( let i = 0, l = keys.length; i < l; i ++ ) {
780
-
781
- const materialIndex = keys[ i ];
782
- const trianglePropertiesProps = materialMap[ materialIndex ];
783
- const basematerialData = basematerials.basematerials[ materialIndex ];
784
- const material = getBuild( basematerialData, objects, modelData, textureData, objectData, buildBasematerial );
785
-
786
- //
787
-
788
- const geometry = new THREE.BufferGeometry();
789
- const positionData = [];
790
- const vertices = meshData.vertices;
791
- for ( let j = 0, jl = trianglePropertiesProps.length; j < jl; j ++ ) {
792
-
793
- const triangleProperty = trianglePropertiesProps[ j ];
794
- positionData.push( vertices[ triangleProperty.v1 * 3 + 0 ] );
795
- positionData.push( vertices[ triangleProperty.v1 * 3 + 1 ] );
796
- positionData.push( vertices[ triangleProperty.v1 * 3 + 2 ] );
797
- positionData.push( vertices[ triangleProperty.v2 * 3 + 0 ] );
798
- positionData.push( vertices[ triangleProperty.v2 * 3 + 1 ] );
799
- positionData.push( vertices[ triangleProperty.v2 * 3 + 2 ] );
800
- positionData.push( vertices[ triangleProperty.v3 * 3 + 0 ] );
801
- positionData.push( vertices[ triangleProperty.v3 * 3 + 1 ] );
802
- positionData.push( vertices[ triangleProperty.v3 * 3 + 2 ] );
803
-
804
- }
805
-
806
- geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( positionData, 3 ) );
807
-
808
- //
809
-
810
- const mesh = new THREE.Mesh( geometry, material );
811
- meshes.push( mesh );
812
-
813
- }
814
-
815
- return meshes;
816
-
817
- }
818
-
819
- function buildTexturedMesh( texture2dgroup, triangleProperties, meshData, objects, modelData, textureData, objectData ) {
820
-
821
- // geometry
822
-
823
- const geometry = new THREE.BufferGeometry();
824
- const positionData = [];
825
- const uvData = [];
826
- const vertices = meshData.vertices;
827
- const uvs = texture2dgroup.uvs;
828
- for ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {
829
-
830
- const triangleProperty = triangleProperties[ i ];
831
- positionData.push( vertices[ triangleProperty.v1 * 3 + 0 ] );
832
- positionData.push( vertices[ triangleProperty.v1 * 3 + 1 ] );
833
- positionData.push( vertices[ triangleProperty.v1 * 3 + 2 ] );
834
- positionData.push( vertices[ triangleProperty.v2 * 3 + 0 ] );
835
- positionData.push( vertices[ triangleProperty.v2 * 3 + 1 ] );
836
- positionData.push( vertices[ triangleProperty.v2 * 3 + 2 ] );
837
- positionData.push( vertices[ triangleProperty.v3 * 3 + 0 ] );
838
- positionData.push( vertices[ triangleProperty.v3 * 3 + 1 ] );
839
- positionData.push( vertices[ triangleProperty.v3 * 3 + 2 ] );
840
-
841
- //
842
-
843
- uvData.push( uvs[ triangleProperty.p1 * 2 + 0 ] );
844
- uvData.push( uvs[ triangleProperty.p1 * 2 + 1 ] );
845
- uvData.push( uvs[ triangleProperty.p2 * 2 + 0 ] );
846
- uvData.push( uvs[ triangleProperty.p2 * 2 + 1 ] );
847
- uvData.push( uvs[ triangleProperty.p3 * 2 + 0 ] );
848
- uvData.push( uvs[ triangleProperty.p3 * 2 + 1 ] );
849
-
850
- }
851
-
852
- geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( positionData, 3 ) );
853
- geometry.setAttribute( 'uv', new THREE.Float32BufferAttribute( uvData, 2 ) );
854
-
855
- // material
856
-
857
- const texture = getBuild( texture2dgroup, objects, modelData, textureData, objectData, buildTexture );
858
- const material = new THREE.MeshPhongMaterial( {
859
- map: texture,
860
- flatShading: true
861
- } );
862
-
863
- // mesh
864
-
865
- const mesh = new THREE.Mesh( geometry, material );
866
- return mesh;
867
-
868
- }
869
-
870
- function buildVertexColorMesh( colorgroup, triangleProperties, meshData, objectData ) {
871
-
872
- // geometry
873
-
874
- const geometry = new THREE.BufferGeometry();
875
- const positionData = [];
876
- const colorData = [];
877
- const vertices = meshData.vertices;
878
- const colors = colorgroup.colors;
879
- for ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {
880
-
881
- const triangleProperty = triangleProperties[ i ];
882
- const v1 = triangleProperty.v1;
883
- const v2 = triangleProperty.v2;
884
- const v3 = triangleProperty.v3;
885
- positionData.push( vertices[ v1 * 3 + 0 ] );
886
- positionData.push( vertices[ v1 * 3 + 1 ] );
887
- positionData.push( vertices[ v1 * 3 + 2 ] );
888
- positionData.push( vertices[ v2 * 3 + 0 ] );
889
- positionData.push( vertices[ v2 * 3 + 1 ] );
890
- positionData.push( vertices[ v2 * 3 + 2 ] );
891
- positionData.push( vertices[ v3 * 3 + 0 ] );
892
- positionData.push( vertices[ v3 * 3 + 1 ] );
893
- positionData.push( vertices[ v3 * 3 + 2 ] );
894
-
895
- //
896
-
897
- const p1 = triangleProperty.p1 !== undefined ? triangleProperty.p1 : objectData.pindex;
898
- const p2 = triangleProperty.p2 !== undefined ? triangleProperty.p2 : p1;
899
- const p3 = triangleProperty.p3 !== undefined ? triangleProperty.p3 : p1;
900
- colorData.push( colors[ p1 * 3 + 0 ] );
901
- colorData.push( colors[ p1 * 3 + 1 ] );
902
- colorData.push( colors[ p1 * 3 + 2 ] );
903
- colorData.push( colors[ p2 * 3 + 0 ] );
904
- colorData.push( colors[ p2 * 3 + 1 ] );
905
- colorData.push( colors[ p2 * 3 + 2 ] );
906
- colorData.push( colors[ p3 * 3 + 0 ] );
907
- colorData.push( colors[ p3 * 3 + 1 ] );
908
- colorData.push( colors[ p3 * 3 + 2 ] );
909
-
910
- }
911
-
912
- geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( positionData, 3 ) );
913
- geometry.setAttribute( 'color', new THREE.Float32BufferAttribute( colorData, 3 ) );
914
-
915
- // material
916
-
917
- const material = new THREE.MeshPhongMaterial( {
918
- vertexColors: true,
919
- flatShading: true
920
- } );
921
-
922
- // mesh
923
-
924
- const mesh = new THREE.Mesh( geometry, material );
925
- return mesh;
926
-
927
- }
928
-
929
- function buildDefaultMesh( meshData ) {
930
-
931
- const geometry = new THREE.BufferGeometry();
932
- geometry.setIndex( new THREE.BufferAttribute( meshData[ 'triangles' ], 1 ) );
933
- geometry.setAttribute( 'position', new THREE.BufferAttribute( meshData[ 'vertices' ], 3 ) );
934
- const material = new THREE.MeshPhongMaterial( {
935
- color: 0xffffff,
936
- flatShading: true
937
- } );
938
- const mesh = new THREE.Mesh( geometry, material );
939
- return mesh;
940
-
941
- }
942
-
943
- function buildMeshes( resourceMap, meshData, objects, modelData, textureData, objectData ) {
944
-
945
- const keys = Object.keys( resourceMap );
946
- const meshes = [];
947
- for ( let i = 0, il = keys.length; i < il; i ++ ) {
948
-
949
- const resourceId = keys[ i ];
950
- const triangleProperties = resourceMap[ resourceId ];
951
- const resourceType = getResourceType( resourceId, modelData );
952
- switch ( resourceType ) {
953
-
954
- case 'material':
955
- const basematerials = modelData.resources.basematerials[ resourceId ];
956
- const newMeshes = buildBasematerialsMeshes( basematerials, triangleProperties, meshData, objects, modelData, textureData, objectData );
957
- for ( let j = 0, jl = newMeshes.length; j < jl; j ++ ) {
958
-
959
- meshes.push( newMeshes[ j ] );
960
-
961
- }
962
-
963
- break;
964
- case 'texture':
965
- const texture2dgroup = modelData.resources.texture2dgroup[ resourceId ];
966
- meshes.push( buildTexturedMesh( texture2dgroup, triangleProperties, meshData, objects, modelData, textureData, objectData ) );
967
- break;
968
- case 'vertexColors':
969
- const colorgroup = modelData.resources.colorgroup[ resourceId ];
970
- meshes.push( buildVertexColorMesh( colorgroup, triangleProperties, meshData, objectData ) );
971
- break;
972
- case 'default':
973
- meshes.push( buildDefaultMesh( meshData ) );
974
- break;
975
- default:
976
- console.error( 'THREE.3MFLoader: Unsupported resource type.' );
977
-
978
- }
979
-
980
- }
981
-
982
- if ( objectData.name ) {
983
-
984
- for ( let i = 0; i < meshes.length; i ++ ) {
985
-
986
- meshes[ i ].name = objectData.name;
987
-
988
- }
989
-
990
- }
991
-
992
- return meshes;
993
-
994
- }
995
-
996
- function getResourceType( pid, modelData ) {
997
-
998
- if ( modelData.resources.texture2dgroup[ pid ] !== undefined ) {
999
-
1000
- return 'texture';
1001
-
1002
- } else if ( modelData.resources.basematerials[ pid ] !== undefined ) {
1003
-
1004
- return 'material';
1005
-
1006
- } else if ( modelData.resources.colorgroup[ pid ] !== undefined ) {
1007
-
1008
- return 'vertexColors';
1009
-
1010
- } else if ( pid === 'default' ) {
1011
-
1012
- return 'default';
1013
-
1014
- } else {
1015
-
1016
- return undefined;
1017
-
1018
- }
1019
-
1020
- }
1021
-
1022
- function analyzeObject( meshData, objectData ) {
1023
-
1024
- const resourceMap = {};
1025
- const triangleProperties = meshData[ 'triangleProperties' ];
1026
- const objectPid = objectData.pid;
1027
- for ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {
1028
-
1029
- const triangleProperty = triangleProperties[ i ];
1030
- let pid = triangleProperty.pid !== undefined ? triangleProperty.pid : objectPid;
1031
- if ( pid === undefined ) pid = 'default';
1032
- if ( resourceMap[ pid ] === undefined ) resourceMap[ pid ] = [];
1033
- resourceMap[ pid ].push( triangleProperty );
1034
-
1035
- }
1036
-
1037
- return resourceMap;
1038
-
1039
- }
1040
-
1041
- function buildGroup( meshData, objects, modelData, textureData, objectData ) {
1042
-
1043
- const group = new THREE.Group();
1044
- const resourceMap = analyzeObject( meshData, objectData );
1045
- const meshes = buildMeshes( resourceMap, meshData, objects, modelData, textureData, objectData );
1046
- for ( let i = 0, l = meshes.length; i < l; i ++ ) {
1047
-
1048
- group.add( meshes[ i ] );
1049
-
1050
- }
1051
-
1052
- return group;
1053
-
1054
- }
1055
-
1056
- function applyExtensions( extensions, meshData, modelXml ) {
1057
-
1058
- if ( ! extensions ) {
1059
-
1060
- return;
1061
-
1062
- }
1063
-
1064
- const availableExtensions = [];
1065
- const keys = Object.keys( extensions );
1066
- for ( let i = 0; i < keys.length; i ++ ) {
1067
-
1068
- const ns = keys[ i ];
1069
- for ( let j = 0; j < scope.availableExtensions.length; j ++ ) {
1070
-
1071
- const extension = scope.availableExtensions[ j ];
1072
- if ( extension.ns === ns ) {
1073
-
1074
- availableExtensions.push( extension );
1075
-
1076
- }
1077
-
1078
- }
1079
-
1080
- }
1081
-
1082
- for ( let i = 0; i < availableExtensions.length; i ++ ) {
1083
-
1084
- const extension = availableExtensions[ i ];
1085
- extension.apply( modelXml, extensions[ extension[ 'ns' ] ], meshData );
1086
-
1087
- }
1088
-
1089
- }
1090
-
1091
- function getBuild( data, objects, modelData, textureData, objectData, builder ) {
1092
-
1093
- if ( data.build !== undefined ) return data.build;
1094
- data.build = builder( data, objects, modelData, textureData, objectData );
1095
- return data.build;
1096
-
1097
- }
1098
-
1099
- function buildBasematerial( materialData, objects, modelData ) {
1100
-
1101
- let material;
1102
- const displaypropertiesid = materialData.displaypropertiesid;
1103
- const pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties;
1104
- if ( displaypropertiesid !== null && pbmetallicdisplayproperties[ displaypropertiesid ] !== undefined ) {
1105
-
1106
- // metallic display property, use StandardMaterial
1107
-
1108
- const pbmetallicdisplayproperty = pbmetallicdisplayproperties[ displaypropertiesid ];
1109
- const metallicData = pbmetallicdisplayproperty.data[ materialData.index ];
1110
- material = new THREE.MeshStandardMaterial( {
1111
- flatShading: true,
1112
- roughness: metallicData.roughness,
1113
- metalness: metallicData.metallicness
1114
- } );
1115
-
1116
- } else {
1117
-
1118
- // otherwise use PhongMaterial
1119
-
1120
- material = new THREE.MeshPhongMaterial( {
1121
- flatShading: true
1122
- } );
1123
-
1124
- }
1125
-
1126
- material.name = materialData.name;
1127
-
1128
- // displaycolor MUST be specified with a value of a 6 or 8 digit hexadecimal number, e.g. "#RRGGBB" or "#RRGGBBAA"
1129
-
1130
- const displaycolor = materialData.displaycolor;
1131
- const color = displaycolor.substring( 0, 7 );
1132
- material.color.setStyle( color );
1133
- material.color.convertSRGBToLinear(); // displaycolor is in sRGB
1134
-
1135
- // process alpha if set
1136
-
1137
- if ( displaycolor.length === 9 ) {
1138
-
1139
- material.opacity = parseInt( displaycolor.charAt( 7 ) + displaycolor.charAt( 8 ), 16 ) / 255;
1140
-
1141
- }
1142
-
1143
- return material;
1144
-
1145
- }
1146
-
1147
- function buildComposite( compositeData, objects, modelData, textureData ) {
1148
-
1149
- const composite = new THREE.Group();
1150
- for ( let j = 0; j < compositeData.length; j ++ ) {
1151
-
1152
- const component = compositeData[ j ];
1153
- let build = objects[ component.objectId ];
1154
- if ( build === undefined ) {
1155
-
1156
- buildObject( component.objectId, objects, modelData, textureData );
1157
- build = objects[ component.objectId ];
1158
-
1159
- }
1160
-
1161
- const object3D = build.clone();
1162
-
1163
- // apply component transform
1164
-
1165
- const transform = component.transform;
1166
- if ( transform ) {
1167
-
1168
- object3D.applyMatrix4( transform );
1169
-
1170
- }
1171
-
1172
- composite.add( object3D );
1173
-
1174
- }
1175
-
1176
- return composite;
1177
-
1178
- }
1179
-
1180
- function buildObject( objectId, objects, modelData, textureData ) {
1181
-
1182
- const objectData = modelData[ 'resources' ][ 'object' ][ objectId ];
1183
- if ( objectData[ 'mesh' ] ) {
1184
-
1185
- const meshData = objectData[ 'mesh' ];
1186
- const extensions = modelData[ 'extensions' ];
1187
- const modelXml = modelData[ 'xml' ];
1188
- applyExtensions( extensions, meshData, modelXml );
1189
- objects[ objectData.id ] = getBuild( meshData, objects, modelData, textureData, objectData, buildGroup );
1190
-
1191
- } else {
1192
-
1193
- const compositeData = objectData[ 'components' ];
1194
- objects[ objectData.id ] = getBuild( compositeData, objects, modelData, textureData, objectData, buildComposite );
1195
-
1196
- }
1197
-
1198
- if ( objectData.name ) {
1199
-
1200
- objects[ objectData.id ].name = objectData.name;
1201
-
1202
- }
1203
-
1204
- }
1205
-
1206
- function buildObjects( data3mf ) {
1207
-
1208
- const modelsData = data3mf.model;
1209
- const modelRels = data3mf.modelRels;
1210
- const objects = {};
1211
- const modelsKeys = Object.keys( modelsData );
1212
- const textureData = {};
1213
-
1214
- // evaluate model relationships to textures
1215
-
1216
- if ( modelRels ) {
1217
-
1218
- for ( let i = 0, l = modelRels.length; i < l; i ++ ) {
1219
-
1220
- const modelRel = modelRels[ i ];
1221
- const textureKey = modelRel.target.substring( 1 );
1222
- if ( data3mf.texture[ textureKey ] ) {
1223
-
1224
- textureData[ modelRel.target ] = data3mf.texture[ textureKey ];
1225
-
1226
- }
1227
-
1228
- }
1229
-
1230
- }
1231
-
1232
- // start build
1233
-
1234
- for ( let i = 0; i < modelsKeys.length; i ++ ) {
1235
-
1236
- const modelsKey = modelsKeys[ i ];
1237
- const modelData = modelsData[ modelsKey ];
1238
- const objectIds = Object.keys( modelData[ 'resources' ][ 'object' ] );
1239
- for ( let j = 0; j < objectIds.length; j ++ ) {
1240
-
1241
- const objectId = objectIds[ j ];
1242
- buildObject( objectId, objects, modelData, textureData );
1243
-
1244
- }
1245
-
1246
- }
1247
-
1248
- return objects;
1249
-
1250
- }
1251
-
1252
- function fetch3DModelPart( rels ) {
1253
-
1254
- for ( let i = 0; i < rels.length; i ++ ) {
1255
-
1256
- const rel = rels[ i ];
1257
- const extension = rel.target.split( '.' ).pop();
1258
- if ( extension.toLowerCase() === 'model' ) return rel;
1259
-
1260
- }
1261
-
1262
- }
1263
-
1264
- function build( objects, data3mf ) {
1265
-
1266
- const group = new THREE.Group();
1267
- const relationship = fetch3DModelPart( data3mf[ 'rels' ] );
1268
- const buildData = data3mf.model[ relationship[ 'target' ].substring( 1 ) ][ 'build' ];
1269
- for ( let i = 0; i < buildData.length; i ++ ) {
1270
-
1271
- const buildItem = buildData[ i ];
1272
- const object3D = objects[ buildItem[ 'objectId' ] ].clone();
1273
-
1274
- // apply transform
1275
-
1276
- const transform = buildItem[ 'transform' ];
1277
- if ( transform ) {
1278
-
1279
- object3D.applyMatrix4( transform );
1280
-
1281
- }
1282
-
1283
- group.add( object3D );
1284
-
1285
- }
1286
-
1287
- return group;
1288
-
1289
- }
1290
-
1291
- const data3mf = loadDocument( data );
1292
- const objects = buildObjects( data3mf );
1293
- return build( objects, data3mf );
1294
-
1295
- }
1296
- addExtension( extension ) {
1297
-
1298
- this.availableExtensions.push( extension );
1299
-
1300
- }
1301
-
1302
- }
1303
-
1304
- THREE.ThreeMFLoader = ThreeMFLoader;
1305
-
1306
- } )();