super-three 0.152.0 → 0.154.1

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 (339) hide show
  1. package/build/three.cjs +778 -557
  2. package/build/three.js +778 -557
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +769 -539
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/cameras/CinematicCamera.js +1 -2
  7. package/examples/jsm/capabilities/WebGPU.js +15 -1
  8. package/examples/jsm/controls/ArcballControls.js +2 -1
  9. package/examples/jsm/controls/FlyControls.js +25 -9
  10. package/examples/jsm/controls/OrbitControls.js +5 -1
  11. package/examples/jsm/csm/CSM.js +1 -3
  12. package/examples/jsm/effects/AnaglyphEffect.js +6 -20
  13. package/examples/jsm/effects/OutlineEffect.js +1 -1
  14. package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
  15. package/examples/jsm/environments/RoomEnvironment.js +6 -2
  16. package/examples/jsm/exporters/GLTFExporter.js +74 -2
  17. package/examples/jsm/exporters/USDZExporter.js +170 -129
  18. package/examples/jsm/helpers/ViewHelper.js +1 -1
  19. package/examples/jsm/lines/LineMaterial.js +1 -1
  20. package/examples/jsm/loaders/3DMLoader.js +1 -1
  21. package/examples/jsm/loaders/3MFLoader.js +5 -1
  22. package/examples/jsm/loaders/AMFLoader.js +5 -1
  23. package/examples/jsm/loaders/ColladaLoader.js +4 -1
  24. package/examples/jsm/loaders/DRACOLoader.js +2 -0
  25. package/examples/jsm/loaders/FBXLoader.js +9 -2
  26. package/examples/jsm/loaders/GLTFLoader.js +230 -94
  27. package/examples/jsm/loaders/KTX2Loader.js +106 -47
  28. package/examples/jsm/loaders/LDrawLoader.js +4 -7
  29. package/examples/jsm/loaders/MMDLoader.js +40 -13
  30. package/examples/jsm/loaders/PCDLoader.js +25 -10
  31. package/examples/jsm/loaders/PDBLoader.js +7 -2
  32. package/examples/jsm/loaders/PLYLoader.js +30 -8
  33. package/examples/jsm/loaders/STLLoader.js +8 -3
  34. package/examples/jsm/loaders/VRMLLoader.js +55 -7
  35. package/examples/jsm/loaders/VTKLoader.js +12 -4
  36. package/examples/jsm/loaders/XYZLoader.js +9 -3
  37. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -2
  38. package/examples/jsm/math/Lut.js +5 -4
  39. package/examples/jsm/math/MeshSurfaceSampler.js +82 -37
  40. package/examples/jsm/misc/GPUComputationRenderer.js +1 -0
  41. package/examples/jsm/misc/VolumeSlice.js +3 -1
  42. package/examples/jsm/nodes/Nodes.js +22 -16
  43. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
  44. package/examples/jsm/nodes/accessors/BufferNode.js +2 -2
  45. package/examples/jsm/nodes/accessors/CameraNode.js +25 -4
  46. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +7 -1
  47. package/examples/jsm/nodes/accessors/InstanceNode.js +29 -12
  48. package/examples/jsm/nodes/accessors/MaterialNode.js +55 -47
  49. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -2
  50. package/examples/jsm/nodes/accessors/ModelNode.js +3 -1
  51. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +4 -9
  52. package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
  53. package/examples/jsm/nodes/accessors/NormalNode.js +3 -2
  54. package/examples/jsm/nodes/accessors/Object3DNode.js +10 -2
  55. package/examples/jsm/nodes/accessors/ReferenceNode.js +2 -2
  56. package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
  57. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -62
  58. package/examples/jsm/nodes/accessors/StorageBufferNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TangentNode.js +2 -2
  60. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
  61. package/examples/jsm/nodes/accessors/TextureNode.js +68 -6
  62. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
  63. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  64. package/examples/jsm/nodes/code/CodeNode.js +3 -0
  65. package/examples/jsm/nodes/code/FunctionNode.js +25 -4
  66. package/examples/jsm/nodes/core/AttributeNode.js +1 -1
  67. package/examples/jsm/nodes/core/BypassNode.js +2 -2
  68. package/examples/jsm/nodes/core/ContextNode.js +2 -0
  69. package/examples/jsm/nodes/core/IndexNode.js +66 -0
  70. package/examples/jsm/nodes/core/LightingModel.js +2 -1
  71. package/examples/jsm/nodes/core/Node.js +13 -16
  72. package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
  73. package/examples/jsm/nodes/core/NodeBuilder.js +86 -8
  74. package/examples/jsm/nodes/core/NodeUtils.js +10 -0
  75. package/examples/jsm/nodes/core/PropertyNode.js +6 -2
  76. package/examples/jsm/nodes/core/StackNode.js +8 -1
  77. package/examples/jsm/nodes/core/UniformNode.js +1 -1
  78. package/examples/jsm/nodes/core/VarNode.js +1 -3
  79. package/examples/jsm/nodes/display/BlendModeNode.js +9 -9
  80. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +7 -7
  81. package/examples/jsm/nodes/display/ColorSpaceNode.js +50 -49
  82. package/examples/jsm/nodes/display/NormalMapNode.js +3 -3
  83. package/examples/jsm/nodes/display/ToneMappingNode.js +24 -15
  84. package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
  85. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
  86. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +7 -6
  87. package/examples/jsm/nodes/display/ViewportTextureNode.js +33 -19
  88. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +5 -5
  89. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -8
  90. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  91. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
  92. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +4 -4
  93. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +2 -2
  94. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  95. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +2 -4
  96. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  97. package/examples/jsm/nodes/functions/PhongLightingModel.js +7 -7
  98. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +132 -19
  99. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +2 -2
  100. package/examples/jsm/nodes/functions/material/getRoughness.js +3 -3
  101. package/examples/jsm/nodes/geometry/RangeNode.js +33 -51
  102. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +6 -3
  103. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -2
  104. package/examples/jsm/nodes/lighting/EnvironmentNode.js +107 -62
  105. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +2 -2
  106. package/examples/jsm/nodes/lighting/LightUtils.js +2 -2
  107. package/examples/jsm/nodes/lighting/LightingContextNode.js +17 -15
  108. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/SpotLightNode.js +3 -3
  110. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -15
  111. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -15
  112. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -10
  113. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -9
  114. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +41 -0
  115. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +1 -14
  116. package/examples/jsm/nodes/materials/NodeMaterial.js +119 -29
  117. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -9
  118. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  119. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
  120. package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -14
  121. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -4
  122. package/examples/jsm/nodes/math/MathNode.js +6 -0
  123. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  124. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  125. package/examples/jsm/nodes/shadernode/ShaderNode.js +60 -33
  126. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -3
  127. package/examples/jsm/nodes/utils/LoopNode.js +186 -0
  128. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +1 -1
  129. package/examples/jsm/objects/GroundProjectedSkybox.js +1 -1
  130. package/examples/jsm/objects/Lensflare.js +3 -4
  131. package/examples/jsm/objects/MarchingCubes.js +5 -1
  132. package/examples/jsm/objects/Reflector.js +4 -1
  133. package/examples/jsm/objects/Refractor.js +1 -1
  134. package/examples/jsm/objects/Sky.js +1 -1
  135. package/examples/jsm/objects/Water.js +2 -1
  136. package/examples/jsm/objects/Water2.js +1 -1
  137. package/examples/jsm/offscreen/scene.js +1 -0
  138. package/examples/jsm/physics/RapierPhysics.js +93 -133
  139. package/examples/jsm/postprocessing/AfterimagePass.js +3 -0
  140. package/examples/jsm/postprocessing/BloomPass.js +7 -2
  141. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  142. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  143. package/examples/jsm/postprocessing/EffectComposer.js +4 -1
  144. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  145. package/examples/jsm/postprocessing/OutlinePass.js +8 -9
  146. package/examples/jsm/postprocessing/OutputPass.js +72 -0
  147. package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
  148. package/examples/jsm/postprocessing/SAOPass.js +4 -2
  149. package/examples/jsm/postprocessing/SMAAPass.js +5 -2
  150. package/examples/jsm/postprocessing/SSAARenderPass.js +5 -13
  151. package/examples/jsm/postprocessing/SSAOPass.js +4 -2
  152. package/examples/jsm/postprocessing/SSRPass.js +3 -1
  153. package/examples/jsm/postprocessing/SavePass.js +5 -2
  154. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  155. package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
  156. package/examples/jsm/postprocessing/TexturePass.js +2 -1
  157. package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -13
  158. package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +2 -2
  159. package/examples/jsm/renderers/common/Attributes.js +75 -0
  160. package/examples/jsm/renderers/common/Backend.js +162 -0
  161. package/examples/jsm/renderers/common/Background.js +134 -0
  162. package/examples/jsm/renderers/common/Binding.js +11 -0
  163. package/examples/jsm/renderers/common/Bindings.js +169 -0
  164. package/examples/jsm/renderers/common/Buffer.js +38 -0
  165. package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
  166. package/examples/jsm/renderers/{webgpu/WebGPUWeakMap.js → common/ChainMap.js} +11 -5
  167. package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
  168. package/examples/jsm/renderers/common/Constants.js +14 -0
  169. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
  170. package/examples/jsm/renderers/common/DataMap.js +54 -0
  171. package/examples/jsm/renderers/{webgpu/WebGPUGeometries.js → common/Geometries.js} +38 -37
  172. package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
  173. package/examples/jsm/renderers/common/Pipeline.js +13 -0
  174. package/examples/jsm/renderers/common/Pipelines.js +321 -0
  175. package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
  176. package/examples/jsm/renderers/common/RenderContext.js +37 -0
  177. package/examples/jsm/renderers/common/RenderContexts.js +38 -0
  178. package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +2 -39
  179. package/examples/jsm/renderers/common/RenderLists.js +38 -0
  180. package/examples/jsm/renderers/common/RenderObject.js +113 -0
  181. package/examples/jsm/renderers/common/RenderObjects.js +92 -0
  182. package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
  183. package/examples/jsm/renderers/{webgpu/WebGPURenderTarget.js → common/RenderTarget.js} +2 -2
  184. package/examples/jsm/renderers/common/Renderer.js +864 -0
  185. package/examples/jsm/renderers/common/SampledTexture.js +80 -0
  186. package/examples/jsm/renderers/common/Sampler.js +18 -0
  187. package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
  188. package/examples/jsm/renderers/common/Textures.js +206 -0
  189. package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
  190. package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
  191. package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
  192. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodes.js → common/nodes/NodeRender.js} +3 -3
  193. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
  194. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
  195. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
  196. package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
  197. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
  198. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +23 -19
  199. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
  200. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -1131
  201. package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +75 -45
  202. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
  203. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
  204. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
  205. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
  206. package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +6 -7
  207. package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +154 -247
  208. package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +3 -25
  209. package/examples/jsm/renderers/webgpu/{WebGPUTextures.js → utils/WebGPUTextureUtils.js} +392 -505
  210. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
  211. package/examples/jsm/shaders/BleachBypassShader.js +2 -0
  212. package/examples/jsm/shaders/BlendShader.js +1 -2
  213. package/examples/jsm/shaders/BokehShader2.js +3 -0
  214. package/examples/jsm/shaders/ColorifyShader.js +2 -0
  215. package/examples/jsm/shaders/ConvolutionShader.js +2 -0
  216. package/examples/jsm/shaders/CopyShader.js +4 -2
  217. package/examples/jsm/shaders/DotScreenShader.js +2 -0
  218. package/examples/jsm/shaders/ExposureShader.js +44 -0
  219. package/examples/jsm/shaders/FilmShader.js +2 -0
  220. package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
  221. package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
  222. package/examples/jsm/shaders/OutputShader.js +61 -0
  223. package/examples/jsm/shaders/RGBShiftShader.js +2 -0
  224. package/examples/jsm/shaders/SepiaShader.js +2 -0
  225. package/examples/jsm/shaders/ToonShader.js +13 -5
  226. package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
  227. package/examples/jsm/shaders/VignetteShader.js +2 -0
  228. package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
  229. package/examples/jsm/utils/BufferGeometryUtils.js +17 -1
  230. package/examples/jsm/utils/TextureUtils.js +86 -0
  231. package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
  232. package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
  233. package/examples/jsm/webxr/XRPlanes.js +100 -0
  234. package/package.json +3 -1
  235. package/src/Three.Legacy.js +0 -228
  236. package/src/audio/PositionalAudio.js +8 -0
  237. package/src/cameras/Camera.js +5 -0
  238. package/src/cameras/CubeCamera.js +76 -13
  239. package/src/cameras/OrthographicCamera.js +1 -1
  240. package/src/cameras/PerspectiveCamera.js +1 -1
  241. package/src/constants.js +13 -1
  242. package/src/core/BufferAttribute.js +3 -25
  243. package/src/core/BufferGeometry.js +1 -8
  244. package/src/core/Object3D.js +1 -1
  245. package/src/extras/core/Curve.js +1 -1
  246. package/src/loaders/CubeTextureLoader.js +2 -0
  247. package/src/loaders/Loader.js +2 -0
  248. package/src/loaders/MaterialLoader.js +5 -0
  249. package/src/loaders/ObjectLoader.js +1 -0
  250. package/src/materials/Material.js +13 -1
  251. package/src/materials/MeshPhysicalMaterial.js +32 -6
  252. package/src/math/Color.js +16 -11
  253. package/src/math/Frustum.js +16 -2
  254. package/src/math/MathUtils.js +16 -0
  255. package/src/math/Matrix3.js +26 -6
  256. package/src/math/Matrix4.js +74 -19
  257. package/src/objects/InstancedMesh.js +3 -0
  258. package/src/objects/Mesh.js +14 -10
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +36 -8
  261. package/src/renderers/WebGLRenderer.js +126 -21
  262. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  263. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  264. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
  265. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -0
  266. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
  267. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +9 -1
  268. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +26 -0
  269. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -2
  270. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +10 -2
  271. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +1 -1
  272. package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
  273. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  274. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +3 -3
  275. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +10 -5
  276. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +6 -1
  277. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +7 -1
  278. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +6 -1
  279. package/src/renderers/shaders/ShaderChunk.js +10 -6
  280. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  281. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
  282. package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
  283. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
  286. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -2
  287. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +4 -2
  288. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -2
  289. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
  290. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -2
  291. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +12 -2
  292. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -2
  293. package/src/renderers/shaders/ShaderLib/points.glsl.js +4 -2
  294. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  295. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
  296. package/src/renderers/shaders/ShaderLib.js +4 -1
  297. package/src/renderers/shaders/UniformsLib.js +2 -0
  298. package/src/renderers/webgl/WebGLBindingStates.js +13 -5
  299. package/src/renderers/webgl/WebGLGeometries.js +12 -0
  300. package/src/renderers/webgl/WebGLInfo.js +0 -1
  301. package/src/renderers/webgl/WebGLMaterials.js +18 -0
  302. package/src/renderers/webgl/WebGLObjects.js +23 -3
  303. package/src/renderers/webgl/WebGLProgram.js +43 -5
  304. package/src/renderers/webgl/WebGLPrograms.js +19 -7
  305. package/src/renderers/webgl/WebGLTextures.js +19 -1
  306. package/src/renderers/webvr/WebVRManager.js +12 -0
  307. package/src/renderers/webxr/WebXRManager.js +39 -99
  308. package/src/scenes/Scene.js +0 -14
  309. package/src/textures/DepthTexture.js +22 -0
  310. package/src/textures/FramebufferTexture.js +1 -3
  311. package/src/textures/Source.js +4 -0
  312. package/src/textures/Texture.js +1 -1
  313. package/examples/jsm/exporters/ColladaExporter.js +0 -725
  314. package/examples/jsm/geometries/LightningStrike.js +0 -1017
  315. package/examples/jsm/loaders/PRWMLoader.js +0 -299
  316. package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -26
  317. package/examples/jsm/objects/LightningStorm.js +0 -245
  318. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -361
  319. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -197
  320. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -190
  321. package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
  322. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -270
  323. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
  324. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
  325. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
  326. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -44
  327. package/examples/jsm/renderers/webgpu/WebGPURenderObject.js +0 -40
  328. package/examples/jsm/renderers/webgpu/WebGPURenderObjects.js +0 -50
  329. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -274
  330. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -54
  331. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -75
  332. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
  333. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
  334. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -38
  335. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
  336. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -88
  337. package/examples/jsm/shaders/ToneMapShader.js +0 -73
  338. /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
  339. /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
@@ -1,725 +0,0 @@
1
- import {
2
- Color,
3
- DoubleSide,
4
- Matrix4,
5
- MeshBasicMaterial
6
- } from 'three';
7
-
8
- /**
9
- * https://github.com/gkjohnson/collada-exporter-js
10
- *
11
- * Usage:
12
- * const exporter = new ColladaExporter();
13
- *
14
- * const data = exporter.parse(mesh);
15
- *
16
- * Format Definition:
17
- * https://www.khronos.org/collada/
18
- */
19
-
20
- class ColladaExporter {
21
-
22
- parse( object, onDone, options = {} ) {
23
-
24
- options = Object.assign( {
25
- version: '1.4.1',
26
- author: null,
27
- textureDirectory: '',
28
- upAxis: 'Y_UP',
29
- unitName: null,
30
- unitMeter: null,
31
- }, options );
32
-
33
- if ( options.upAxis.match( /^[XYZ]_UP$/ ) === null ) {
34
-
35
- console.error( 'ColladaExporter: Invalid upAxis: valid values are X_UP, Y_UP or Z_UP.' );
36
- return null;
37
-
38
- }
39
-
40
- if ( options.unitName !== null && options.unitMeter === null ) {
41
-
42
- console.error( 'ColladaExporter: unitMeter needs to be specified if unitName is specified.' );
43
- return null;
44
-
45
- }
46
-
47
- if ( options.unitMeter !== null && options.unitName === null ) {
48
-
49
- console.error( 'ColladaExporter: unitName needs to be specified if unitMeter is specified.' );
50
- return null;
51
-
52
- }
53
-
54
- if ( options.textureDirectory !== '' ) {
55
-
56
- options.textureDirectory = `${ options.textureDirectory }/`
57
- .replace( /\\/g, '/' )
58
- .replace( /\/+/g, '/' );
59
-
60
- }
61
-
62
- const version = options.version;
63
-
64
- if ( version !== '1.4.1' && version !== '1.5.0' ) {
65
-
66
- console.warn( `ColladaExporter : Version ${ version } not supported for export. Only 1.4.1 and 1.5.0.` );
67
- return null;
68
-
69
- }
70
-
71
- // Convert the urdf xml into a well-formatted, indented format
72
- function format( urdf ) {
73
-
74
- const IS_END_TAG = /^<\//;
75
- const IS_SELF_CLOSING = /(\?>$)|(\/>$)/;
76
- const HAS_TEXT = /<[^>]+>[^<]*<\/[^<]+>/;
77
-
78
- const pad = ( ch, num ) => ( num > 0 ? ch + pad( ch, num - 1 ) : '' );
79
-
80
- let tagnum = 0;
81
-
82
- return urdf
83
- .match( /(<[^>]+>[^<]+<\/[^<]+>)|(<[^>]+>)/g )
84
- .map( tag => {
85
-
86
- if ( ! HAS_TEXT.test( tag ) && ! IS_SELF_CLOSING.test( tag ) && IS_END_TAG.test( tag ) ) {
87
-
88
- tagnum --;
89
-
90
- }
91
-
92
- const res = `${ pad( ' ', tagnum ) }${ tag }`;
93
-
94
- if ( ! HAS_TEXT.test( tag ) && ! IS_SELF_CLOSING.test( tag ) && ! IS_END_TAG.test( tag ) ) {
95
-
96
- tagnum ++;
97
-
98
- }
99
-
100
- return res;
101
-
102
- } )
103
- .join( '\n' );
104
-
105
- }
106
-
107
- // Convert an image into a png format for saving
108
- function base64ToBuffer( str ) {
109
-
110
- const b = atob( str );
111
- const buf = new Uint8Array( b.length );
112
-
113
- for ( let i = 0, l = buf.length; i < l; i ++ ) {
114
-
115
- buf[ i ] = b.charCodeAt( i );
116
-
117
- }
118
-
119
- return buf;
120
-
121
- }
122
-
123
- let canvas, ctx;
124
-
125
- function imageToData( image, ext ) {
126
-
127
- if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||
128
- ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||
129
- ( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ||
130
- ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {
131
-
132
- canvas = canvas || document.createElement( 'canvas' );
133
- ctx = ctx || canvas.getContext( '2d' );
134
-
135
- canvas.width = image.width;
136
- canvas.height = image.height;
137
-
138
- ctx.drawImage( image, 0, 0 );
139
-
140
- // Get the base64 encoded data
141
- const base64data = canvas
142
- .toDataURL( `image/${ ext }`, 1 )
143
- .replace( /^data:image\/(png|jpg);base64,/, '' );
144
-
145
- // Convert to a uint8 array
146
- return base64ToBuffer( base64data );
147
-
148
- } else {
149
-
150
- throw new Error( 'THREE.ColladaExporter: No valid image data found. Unable to process texture.' );
151
-
152
- }
153
-
154
- }
155
-
156
- // gets the attribute array. Generate a new array if the attribute is interleaved
157
- const getFuncs = [ 'getX', 'getY', 'getZ', 'getW' ];
158
- const tempColor = new Color();
159
-
160
- function attrBufferToArray( attr, isColor = false ) {
161
-
162
- if ( isColor ) {
163
-
164
- // convert the colors to srgb before export
165
- // colors are always written as floats
166
- const arr = new Float32Array( attr.count * 3 );
167
- for ( let i = 0, l = attr.count; i < l; i ++ ) {
168
-
169
- tempColor
170
- .fromBufferAttribute( attr, i )
171
- .convertLinearToSRGB();
172
-
173
- arr[ 3 * i + 0 ] = tempColor.r;
174
- arr[ 3 * i + 1 ] = tempColor.g;
175
- arr[ 3 * i + 2 ] = tempColor.b;
176
-
177
- }
178
-
179
- return arr;
180
-
181
- } else if ( attr.isInterleavedBufferAttribute ) {
182
-
183
- // use the typed array constructor to save on memory
184
- const arr = new attr.array.constructor( attr.count * attr.itemSize );
185
- const size = attr.itemSize;
186
-
187
- for ( let i = 0, l = attr.count; i < l; i ++ ) {
188
-
189
- for ( let j = 0; j < size; j ++ ) {
190
-
191
- arr[ i * size + j ] = attr[ getFuncs[ j ] ]( i );
192
-
193
- }
194
-
195
- }
196
-
197
- return arr;
198
-
199
- } else {
200
-
201
- return attr.array;
202
-
203
- }
204
-
205
- }
206
-
207
- // Returns an array of the same type starting at the `st` index,
208
- // and `ct` length
209
- function subArray( arr, st, ct ) {
210
-
211
- if ( Array.isArray( arr ) ) return arr.slice( st, st + ct );
212
- else return new arr.constructor( arr.buffer, st * arr.BYTES_PER_ELEMENT, ct );
213
-
214
- }
215
-
216
- // Returns the string for a geometry's attribute
217
- function getAttribute( attr, name, params, type, isColor = false ) {
218
-
219
- const array = attrBufferToArray( attr, isColor );
220
- const res =
221
- `<source id="${ name }">` +
222
-
223
- `<float_array id="${ name }-array" count="${ array.length }">` +
224
- array.join( ' ' ) +
225
- '</float_array>' +
226
-
227
- '<technique_common>' +
228
- `<accessor source="#${ name }-array" count="${ Math.floor( array.length / attr.itemSize ) }" stride="${ attr.itemSize }">` +
229
-
230
- params.map( n => `<param name="${ n }" type="${ type }" />` ).join( '' ) +
231
-
232
- '</accessor>' +
233
- '</technique_common>' +
234
- '</source>';
235
-
236
- return res;
237
-
238
- }
239
-
240
- // Returns the string for a node's transform information
241
- let transMat;
242
- function getTransform( o ) {
243
-
244
- // ensure the object's matrix is up to date
245
- // before saving the transform
246
- o.updateMatrix();
247
-
248
- transMat = transMat || new Matrix4();
249
- transMat.copy( o.matrix );
250
- transMat.transpose();
251
- return `<matrix>${ transMat.toArray().join( ' ' ) }</matrix>`;
252
-
253
- }
254
-
255
- // Process the given piece of geometry into the geometry library
256
- // Returns the mesh id
257
- function processGeometry( bufferGeometry ) {
258
-
259
- let info = geometryInfo.get( bufferGeometry );
260
-
261
- if ( ! info ) {
262
-
263
- const meshid = `Mesh${ libraryGeometries.length + 1 }`;
264
-
265
- const indexCount =
266
- bufferGeometry.index ?
267
- bufferGeometry.index.count * bufferGeometry.index.itemSize :
268
- bufferGeometry.attributes.position.count;
269
-
270
- const groups =
271
- bufferGeometry.groups != null && bufferGeometry.groups.length !== 0 ?
272
- bufferGeometry.groups :
273
- [ { start: 0, count: indexCount, materialIndex: 0 } ];
274
-
275
-
276
- const gname = bufferGeometry.name ? ` name="${ bufferGeometry.name }"` : '';
277
- let gnode = `<geometry id="${ meshid }"${ gname }><mesh>`;
278
-
279
- // define the geometry node and the vertices for the geometry
280
- const posName = `${ meshid }-position`;
281
- const vertName = `${ meshid }-vertices`;
282
- gnode += getAttribute( bufferGeometry.attributes.position, posName, [ 'X', 'Y', 'Z' ], 'float' );
283
- gnode += `<vertices id="${ vertName }"><input semantic="POSITION" source="#${ posName }" /></vertices>`;
284
-
285
- // NOTE: We're not optimizing the attribute arrays here, so they're all the same length and
286
- // can therefore share the same triangle indices. However, MeshLab seems to have trouble opening
287
- // models with attributes that share an offset.
288
- // MeshLab Bug#424: https://sourceforge.net/p/meshlab/bugs/424/
289
-
290
- // serialize normals
291
- let triangleInputs = `<input semantic="VERTEX" source="#${ vertName }" offset="0" />`;
292
- if ( 'normal' in bufferGeometry.attributes ) {
293
-
294
- const normName = `${ meshid }-normal`;
295
- gnode += getAttribute( bufferGeometry.attributes.normal, normName, [ 'X', 'Y', 'Z' ], 'float' );
296
- triangleInputs += `<input semantic="NORMAL" source="#${ normName }" offset="0" />`;
297
-
298
- }
299
-
300
- // serialize uvs
301
- if ( 'uv' in bufferGeometry.attributes ) {
302
-
303
- const uvName = `${ meshid }-texcoord`;
304
- gnode += getAttribute( bufferGeometry.attributes.uv, uvName, [ 'S', 'T' ], 'float' );
305
- triangleInputs += `<input semantic="TEXCOORD" source="#${ uvName }" offset="0" set="0" />`;
306
-
307
- }
308
-
309
- // serialize lightmap uvs
310
- if ( 'uv1' in bufferGeometry.attributes ) {
311
-
312
- const uvName = `${ meshid }-texcoord2`;
313
- gnode += getAttribute( bufferGeometry.attributes.uv1, uvName, [ 'S', 'T' ], 'float' );
314
- triangleInputs += `<input semantic="TEXCOORD" source="#${ uvName }" offset="0" set="1" />`;
315
-
316
- }
317
-
318
- // serialize colors
319
- if ( 'color' in bufferGeometry.attributes ) {
320
-
321
- // colors are always written as floats
322
- const colName = `${ meshid }-color`;
323
- gnode += getAttribute( bufferGeometry.attributes.color, colName, [ 'R', 'G', 'B' ], 'float', true );
324
- triangleInputs += `<input semantic="COLOR" source="#${ colName }" offset="0" />`;
325
-
326
- }
327
-
328
- let indexArray = null;
329
- if ( bufferGeometry.index ) {
330
-
331
- indexArray = attrBufferToArray( bufferGeometry.index );
332
-
333
- } else {
334
-
335
- indexArray = new Array( indexCount );
336
- for ( let i = 0, l = indexArray.length; i < l; i ++ ) indexArray[ i ] = i;
337
-
338
- }
339
-
340
- for ( let i = 0, l = groups.length; i < l; i ++ ) {
341
-
342
- const group = groups[ i ];
343
- const subarr = subArray( indexArray, group.start, group.count );
344
- const polycount = subarr.length / 3;
345
- gnode += `<triangles material="MESH_MATERIAL_${ group.materialIndex }" count="${ polycount }">`;
346
- gnode += triangleInputs;
347
-
348
- gnode += `<p>${ subarr.join( ' ' ) }</p>`;
349
- gnode += '</triangles>';
350
-
351
- }
352
-
353
- gnode += '</mesh></geometry>';
354
-
355
- libraryGeometries.push( gnode );
356
-
357
- info = { meshid: meshid, bufferGeometry: bufferGeometry };
358
- geometryInfo.set( bufferGeometry, info );
359
-
360
- }
361
-
362
- return info;
363
-
364
- }
365
-
366
- // Process the given texture into the image library
367
- // Returns the image library
368
- function processTexture( tex ) {
369
-
370
- let texid = imageMap.get( tex );
371
-
372
- if ( texid === undefined ) {
373
-
374
- texid = `image-${ libraryImages.length + 1 }`;
375
-
376
- const ext = 'png';
377
- const name = tex.name || texid;
378
- let imageNode = `<image id="${ texid }" name="${ name }">`;
379
-
380
- if ( version === '1.5.0' ) {
381
-
382
- imageNode += `<init_from><ref>${ options.textureDirectory }${ name }.${ ext }</ref></init_from>`;
383
-
384
- } else {
385
-
386
- // version image node 1.4.1
387
- imageNode += `<init_from>${ options.textureDirectory }${ name }.${ ext }</init_from>`;
388
-
389
- }
390
-
391
- imageNode += '</image>';
392
-
393
- libraryImages.push( imageNode );
394
- imageMap.set( tex, texid );
395
- textures.push( {
396
- directory: options.textureDirectory,
397
- name,
398
- ext,
399
- data: imageToData( tex.image, ext ),
400
- original: tex
401
- } );
402
-
403
- }
404
-
405
- return texid;
406
-
407
- }
408
-
409
- // Process the given material into the material and effect libraries
410
- // Returns the material id
411
- function processMaterial( m ) {
412
-
413
- let matid = materialMap.get( m );
414
-
415
- if ( matid == null ) {
416
-
417
- matid = `Mat${ libraryEffects.length + 1 }`;
418
-
419
- let type = 'phong';
420
-
421
- if ( m.isMeshLambertMaterial === true ) {
422
-
423
- type = 'lambert';
424
-
425
- } else if ( m.isMeshBasicMaterial === true ) {
426
-
427
- type = 'constant';
428
-
429
- if ( m.map !== null ) {
430
-
431
- // The Collada spec does not support diffuse texture maps with the
432
- // constant shader type.
433
- // mrdoob/three.js#15469
434
- console.warn( 'ColladaExporter: Texture maps not supported with MeshBasicMaterial.' );
435
-
436
- }
437
-
438
- }
439
-
440
- const emissive = m.emissive ? m.emissive : new Color( 0, 0, 0 );
441
- const diffuse = m.color ? m.color : new Color( 0, 0, 0 );
442
- const specular = m.specular ? m.specular : new Color( 1, 1, 1 );
443
- const shininess = m.shininess || 0;
444
- const reflectivity = m.reflectivity || 0;
445
-
446
- emissive.convertLinearToSRGB();
447
- specular.convertLinearToSRGB();
448
- diffuse.convertLinearToSRGB();
449
-
450
- // Do not export and alpha map for the reasons mentioned in issue (#13792)
451
- // in three.js alpha maps are black and white, but collada expects the alpha
452
- // channel to specify the transparency
453
- let transparencyNode = '';
454
- if ( m.transparent === true ) {
455
-
456
- transparencyNode +=
457
- '<transparent>' +
458
- (
459
- m.map ?
460
- '<texture texture="diffuse-sampler"></texture>' :
461
- '<float>1</float>'
462
- ) +
463
- '</transparent>';
464
-
465
- if ( m.opacity < 1 ) {
466
-
467
- transparencyNode += `<transparency><float>${ m.opacity }</float></transparency>`;
468
-
469
- }
470
-
471
- }
472
-
473
- const techniqueNode = `<technique sid="common"><${ type }>` +
474
-
475
- '<emission>' +
476
-
477
- (
478
- m.emissiveMap ?
479
- '<texture texture="emissive-sampler" texcoord="TEXCOORD" />' :
480
- `<color sid="emission">${ emissive.r } ${ emissive.g } ${ emissive.b } 1</color>`
481
- ) +
482
-
483
- '</emission>' +
484
-
485
- (
486
- type !== 'constant' ?
487
- '<diffuse>' +
488
-
489
- (
490
- m.map ?
491
- '<texture texture="diffuse-sampler" texcoord="TEXCOORD" />' :
492
- `<color sid="diffuse">${ diffuse.r } ${ diffuse.g } ${ diffuse.b } 1</color>`
493
- ) +
494
- '</diffuse>'
495
- : ''
496
- ) +
497
-
498
- (
499
- type !== 'constant' ?
500
- '<bump>' +
501
-
502
- (
503
- m.normalMap ? '<texture texture="bump-sampler" texcoord="TEXCOORD" />' : ''
504
- ) +
505
- '</bump>'
506
- : ''
507
- ) +
508
-
509
- (
510
- type === 'phong' ?
511
- `<specular><color sid="specular">${ specular.r } ${ specular.g } ${ specular.b } 1</color></specular>` +
512
-
513
- '<shininess>' +
514
-
515
- (
516
- m.specularMap ?
517
- '<texture texture="specular-sampler" texcoord="TEXCOORD" />' :
518
- `<float sid="shininess">${ shininess }</float>`
519
- ) +
520
-
521
- '</shininess>'
522
- : ''
523
- ) +
524
-
525
- `<reflective><color>${ diffuse.r } ${ diffuse.g } ${ diffuse.b } 1</color></reflective>` +
526
-
527
- `<reflectivity><float>${ reflectivity }</float></reflectivity>` +
528
-
529
- transparencyNode +
530
-
531
- `</${ type }></technique>`;
532
-
533
- const effectnode =
534
- `<effect id="${ matid }-effect">` +
535
- '<profile_COMMON>' +
536
-
537
- (
538
- m.map ?
539
- '<newparam sid="diffuse-surface"><surface type="2D">' +
540
- `<init_from>${ processTexture( m.map ) }</init_from>` +
541
- '</surface></newparam>' +
542
- '<newparam sid="diffuse-sampler"><sampler2D><source>diffuse-surface</source></sampler2D></newparam>' :
543
- ''
544
- ) +
545
-
546
- (
547
- m.specularMap ?
548
- '<newparam sid="specular-surface"><surface type="2D">' +
549
- `<init_from>${ processTexture( m.specularMap ) }</init_from>` +
550
- '</surface></newparam>' +
551
- '<newparam sid="specular-sampler"><sampler2D><source>specular-surface</source></sampler2D></newparam>' :
552
- ''
553
- ) +
554
-
555
- (
556
- m.emissiveMap ?
557
- '<newparam sid="emissive-surface"><surface type="2D">' +
558
- `<init_from>${ processTexture( m.emissiveMap ) }</init_from>` +
559
- '</surface></newparam>' +
560
- '<newparam sid="emissive-sampler"><sampler2D><source>emissive-surface</source></sampler2D></newparam>' :
561
- ''
562
- ) +
563
-
564
- (
565
- m.normalMap ?
566
- '<newparam sid="bump-surface"><surface type="2D">' +
567
- `<init_from>${ processTexture( m.normalMap ) }</init_from>` +
568
- '</surface></newparam>' +
569
- '<newparam sid="bump-sampler"><sampler2D><source>bump-surface</source></sampler2D></newparam>' :
570
- ''
571
- ) +
572
-
573
- techniqueNode +
574
-
575
- (
576
- m.side === DoubleSide ?
577
- '<extra><technique profile="THREEJS"><double_sided sid="double_sided" type="int">1</double_sided></technique></extra>' :
578
- ''
579
- ) +
580
-
581
- '</profile_COMMON>' +
582
-
583
- '</effect>';
584
-
585
- const materialName = m.name ? ` name="${ m.name }"` : '';
586
- const materialNode = `<material id="${ matid }"${ materialName }><instance_effect url="#${ matid }-effect" /></material>`;
587
-
588
- libraryMaterials.push( materialNode );
589
- libraryEffects.push( effectnode );
590
- materialMap.set( m, matid );
591
-
592
- }
593
-
594
- return matid;
595
-
596
- }
597
-
598
- // Recursively process the object into a scene
599
- function processObject( o ) {
600
-
601
- let node = `<node name="${ o.name }">`;
602
-
603
- node += getTransform( o );
604
-
605
- if ( o.isMesh === true && o.geometry !== null ) {
606
-
607
- // function returns the id associated with the mesh and a "BufferGeometry" version
608
- // of the geometry in case it's not a geometry.
609
- const geomInfo = processGeometry( o.geometry );
610
- const meshid = geomInfo.meshid;
611
- const geometry = geomInfo.bufferGeometry;
612
-
613
- // ids of the materials to bind to the geometry
614
- let matids = null;
615
- let matidsArray;
616
-
617
- // get a list of materials to bind to the sub groups of the geometry.
618
- // If the amount of subgroups is greater than the materials, than reuse
619
- // the materials.
620
- const mat = o.material || new MeshBasicMaterial();
621
- const materials = Array.isArray( mat ) ? mat : [ mat ];
622
-
623
- if ( geometry.groups.length > materials.length ) {
624
-
625
- matidsArray = new Array( geometry.groups.length );
626
-
627
- } else {
628
-
629
- matidsArray = new Array( materials.length );
630
-
631
- }
632
-
633
- matids = matidsArray.fill().map( ( v, i ) => processMaterial( materials[ i % materials.length ] ) );
634
-
635
- node +=
636
- `<instance_geometry url="#${ meshid }">` +
637
-
638
- (
639
- matids.length > 0 ?
640
- '<bind_material><technique_common>' +
641
- matids.map( ( id, i ) =>
642
-
643
- `<instance_material symbol="MESH_MATERIAL_${ i }" target="#${ id }" >` +
644
-
645
- '<bind_vertex_input semantic="TEXCOORD" input_semantic="TEXCOORD" input_set="0" />' +
646
-
647
- '</instance_material>'
648
- ).join( '' ) +
649
- '</technique_common></bind_material>' :
650
- ''
651
- ) +
652
-
653
- '</instance_geometry>';
654
-
655
- }
656
-
657
- o.children.forEach( c => node += processObject( c ) );
658
-
659
- node += '</node>';
660
-
661
- return node;
662
-
663
- }
664
-
665
- const geometryInfo = new WeakMap();
666
- const materialMap = new WeakMap();
667
- const imageMap = new WeakMap();
668
- const textures = [];
669
-
670
- const libraryImages = [];
671
- const libraryGeometries = [];
672
- const libraryEffects = [];
673
- const libraryMaterials = [];
674
- const libraryVisualScenes = processObject( object );
675
-
676
- const specLink = version === '1.4.1' ? 'http://www.collada.org/2005/11/COLLADASchema' : 'https://www.khronos.org/collada/';
677
- let dae =
678
- '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>' +
679
- `<COLLADA xmlns="${ specLink }" version="${ version }">` +
680
- '<asset>' +
681
- (
682
- '<contributor>' +
683
- '<authoring_tool>three.js Collada Exporter</authoring_tool>' +
684
- ( options.author !== null ? `<author>${ options.author }</author>` : '' ) +
685
- '</contributor>' +
686
- `<created>${ ( new Date() ).toISOString() }</created>` +
687
- `<modified>${ ( new Date() ).toISOString() }</modified>` +
688
- ( options.unitName !== null ? `<unit name="${ options.unitName }" meter="${ options.unitMeter }" />` : '' ) +
689
- `<up_axis>${ options.upAxis }</up_axis>`
690
- ) +
691
- '</asset>';
692
-
693
- dae += `<library_images>${ libraryImages.join( '' ) }</library_images>`;
694
-
695
- dae += `<library_effects>${ libraryEffects.join( '' ) }</library_effects>`;
696
-
697
- dae += `<library_materials>${ libraryMaterials.join( '' ) }</library_materials>`;
698
-
699
- dae += `<library_geometries>${ libraryGeometries.join( '' ) }</library_geometries>`;
700
-
701
- dae += `<library_visual_scenes><visual_scene id="Scene" name="scene">${ libraryVisualScenes }</visual_scene></library_visual_scenes>`;
702
-
703
- dae += '<scene><instance_visual_scene url="#Scene"/></scene>';
704
-
705
- dae += '</COLLADA>';
706
-
707
- const res = {
708
- data: format( dae ),
709
- textures
710
- };
711
-
712
- if ( typeof onDone === 'function' ) {
713
-
714
- requestAnimationFrame( () => onDone( res ) );
715
-
716
- }
717
-
718
- return res;
719
-
720
- }
721
-
722
- }
723
-
724
-
725
- export { ColladaExporter };