super-three 0.184.0 → 0.185.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 (366) hide show
  1. package/build/three.cjs +1260 -927
  2. package/build/three.core.js +1104 -829
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +156 -98
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +11 -4
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +7538 -3367
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +7538 -3366
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +3 -0
  13. package/examples/jsm/controls/ArcballControls.js +6 -2
  14. package/examples/jsm/controls/FirstPersonControls.js +79 -42
  15. package/examples/jsm/controls/TransformControls.js +68 -15
  16. package/examples/jsm/csm/CSMFrustum.js +31 -6
  17. package/examples/jsm/csm/CSMShadowNode.js +4 -1
  18. package/examples/jsm/effects/AsciiEffect.js +14 -1
  19. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  20. package/examples/jsm/exporters/GLTFExporter.js +114 -12
  21. package/examples/jsm/exporters/PLYExporter.js +286 -73
  22. package/examples/jsm/exporters/USDZExporter.js +347 -112
  23. package/examples/jsm/generators/CityGenerator.js +346 -0
  24. package/examples/jsm/generators/ForestGenerator.js +347 -0
  25. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  26. package/examples/jsm/generators/TreeGenerator.js +377 -0
  27. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  28. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  29. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  30. package/examples/jsm/helpers/LightProbeGridHelper.js +1 -1
  31. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  32. package/examples/jsm/helpers/ViewHelper.js +16 -6
  33. package/examples/jsm/inspector/Inspector.js +53 -15
  34. package/examples/jsm/inspector/RendererInspector.js +152 -36
  35. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +1 -1
  36. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -1
  37. package/examples/jsm/inspector/tabs/Console.js +200 -18
  38. package/examples/jsm/inspector/tabs/Memory.js +8 -0
  39. package/examples/jsm/inspector/tabs/Parameters.js +64 -4
  40. package/examples/jsm/inspector/tabs/Performance.js +21 -6
  41. package/examples/jsm/inspector/tabs/Settings.js +51 -9
  42. package/examples/jsm/inspector/tabs/Timeline.js +178 -93
  43. package/examples/jsm/inspector/tabs/Viewer.js +628 -16
  44. package/examples/jsm/inspector/ui/Graph.js +162 -25
  45. package/examples/jsm/inspector/ui/Item.js +92 -13
  46. package/examples/jsm/inspector/ui/List.js +1 -1
  47. package/examples/jsm/inspector/ui/Profiler.js +90 -45
  48. package/examples/jsm/inspector/ui/Style.js +1788 -1401
  49. package/examples/jsm/inspector/ui/Tab.js +5 -3
  50. package/examples/jsm/inspector/ui/Values.js +71 -6
  51. package/examples/jsm/inspector/ui/utils.js +130 -10
  52. package/examples/jsm/libs/basis/README.md +0 -1
  53. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  54. package/examples/jsm/libs/draco/README.md +0 -1
  55. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  56. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  57. package/examples/jsm/libs/mikktspace.module.js +34 -9
  58. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  59. package/examples/jsm/lighting/LightProbeGrid.js +106 -76
  60. package/examples/jsm/lines/LineMaterial.js +38 -15
  61. package/examples/jsm/lines/LineSegments2.js +8 -0
  62. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  63. package/examples/jsm/loaders/3DMLoader.js +1 -1
  64. package/examples/jsm/loaders/DRACOLoader.js +46 -13
  65. package/examples/jsm/loaders/EXRLoader.js +27 -55
  66. package/examples/jsm/loaders/HDRLoader.js +6 -28
  67. package/examples/jsm/loaders/KTX2Loader.js +31 -12
  68. package/examples/jsm/loaders/LDrawLoader.js +8 -8
  69. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  70. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  71. package/examples/jsm/loaders/LWOLoader.js +4 -0
  72. package/examples/jsm/loaders/LottieLoader.js +1 -1
  73. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  74. package/examples/jsm/loaders/NRRDLoader.js +3 -3
  75. package/examples/jsm/loaders/PCDLoader.js +7 -7
  76. package/examples/jsm/loaders/PLYLoader.js +218 -55
  77. package/examples/jsm/loaders/SVGLoader.js +547 -495
  78. package/examples/jsm/loaders/TTFLoader.js +1 -1
  79. package/examples/jsm/loaders/USDLoader.js +33 -9
  80. package/examples/jsm/loaders/VRMLLoader.js +1 -1
  81. package/examples/jsm/loaders/usd/USDAParser.js +93 -20
  82. package/examples/jsm/loaders/usd/USDCParser.js +1 -1
  83. package/examples/jsm/loaders/usd/USDComposer.js +52 -19
  84. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  85. package/examples/jsm/misc/Volume.js +2 -2
  86. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  87. package/examples/jsm/objects/Reflector.js +2 -3
  88. package/examples/jsm/objects/Water2Mesh.js +1 -1
  89. package/examples/jsm/physics/AmmoPhysics.js +15 -8
  90. package/examples/jsm/physics/RapierPhysics.js +27 -2
  91. package/examples/jsm/shaders/VolumeShader.js +31 -44
  92. package/examples/jsm/transpiler/GLSLDecoder.js +6 -6
  93. package/examples/jsm/transpiler/Linker.js +1 -1
  94. package/examples/jsm/tsl/display/BloomNode.js +59 -19
  95. package/examples/jsm/tsl/display/DepthOfFieldNode.js +2 -2
  96. package/examples/jsm/tsl/display/FXAANode.js +11 -12
  97. package/examples/jsm/tsl/display/GTAONode.js +34 -13
  98. package/examples/jsm/tsl/display/GodraysNode.js +1 -1
  99. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  100. package/examples/jsm/tsl/display/PixelationPassNode.js +2 -2
  101. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  102. package/examples/jsm/tsl/display/SSAAPassNode.js +13 -25
  103. package/examples/jsm/tsl/display/SSGINode.js +89 -39
  104. package/examples/jsm/tsl/display/SSRNode.js +829 -132
  105. package/examples/jsm/tsl/display/SSSNode.js +2 -2
  106. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  107. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  108. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +1 -1
  109. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  110. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  111. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  112. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  113. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  114. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  115. package/examples/jsm/utils/BufferGeometryUtils.js +126 -59
  116. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  117. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  118. package/examples/jsm/webxr/ARButton.js +1 -1
  119. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  120. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  121. package/package.json +7 -7
  122. package/src/Three.TSL.js +10 -3
  123. package/src/Three.WebGPU.js +4 -0
  124. package/src/animation/AnimationAction.js +15 -11
  125. package/src/animation/AnimationClip.js +0 -139
  126. package/src/animation/KeyframeTrack.js +2 -2
  127. package/src/animation/PropertyBinding.js +2 -2
  128. package/src/cameras/Camera.js +2 -2
  129. package/src/cameras/StereoCamera.js +5 -2
  130. package/src/constants.js +1 -1
  131. package/src/core/BufferGeometry.js +29 -7
  132. package/src/core/Object3D.js +17 -7
  133. package/src/core/Raycaster.js +1 -1
  134. package/src/core/RenderTarget.js +15 -2
  135. package/src/extras/PMREMGenerator.js +6 -4
  136. package/src/extras/TextureUtils.js +1 -1
  137. package/src/extras/core/ShapePath.js +149 -160
  138. package/src/geometries/SphereGeometry.js +8 -3
  139. package/src/helpers/DirectionalLightHelper.js +2 -0
  140. package/src/helpers/HemisphereLightHelper.js +2 -0
  141. package/src/helpers/PointLightHelper.js +2 -0
  142. package/src/helpers/SpotLightHelper.js +1 -1
  143. package/src/loaders/DataTextureLoader.js +69 -38
  144. package/src/loaders/LoadingManager.js +5 -0
  145. package/src/loaders/MaterialLoader.js +36 -266
  146. package/src/loaders/ObjectLoader.js +3 -1
  147. package/src/materials/LineBasicMaterial.js +4 -0
  148. package/src/materials/Material.js +196 -1
  149. package/src/materials/MeshBasicMaterial.js +24 -0
  150. package/src/materials/MeshDepthMaterial.js +10 -0
  151. package/src/materials/MeshDistanceMaterial.js +10 -0
  152. package/src/materials/MeshLambertMaterial.js +40 -1
  153. package/src/materials/MeshMatcapMaterial.js +25 -1
  154. package/src/materials/MeshNormalMaterial.js +9 -1
  155. package/src/materials/MeshPhongMaterial.js +40 -1
  156. package/src/materials/MeshPhysicalMaterial.js +38 -0
  157. package/src/materials/MeshStandardMaterial.js +42 -1
  158. package/src/materials/MeshToonMaterial.js +34 -1
  159. package/src/materials/PointsMaterial.js +7 -0
  160. package/src/materials/ShaderMaterial.js +86 -0
  161. package/src/materials/SpriteMaterial.js +7 -0
  162. package/src/materials/nodes/Line2NodeMaterial.js +378 -322
  163. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  164. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  165. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  166. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +0 -30
  167. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  168. package/src/materials/nodes/MeshStandardNodeMaterial.js +0 -11
  169. package/src/materials/nodes/NodeMaterial.js +115 -71
  170. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  171. package/src/materials/nodes/manager/NodeMaterialObserver.js +49 -20
  172. package/src/math/Box3.js +5 -0
  173. package/src/math/FrustumArray.js +103 -133
  174. package/src/math/Interpolant.js +1 -1
  175. package/src/math/MathUtils.js +2 -2
  176. package/src/math/Matrix3.js +11 -0
  177. package/src/math/Matrix4.js +28 -3
  178. package/src/math/Vector2.js +2 -2
  179. package/src/math/Vector3.js +2 -2
  180. package/src/math/Vector4.js +2 -2
  181. package/src/math/interpolants/BezierInterpolant.js +4 -6
  182. package/src/nodes/Nodes.js +2 -5
  183. package/src/nodes/TSL.js +8 -6
  184. package/src/nodes/accessors/Arrays.js +4 -4
  185. package/src/nodes/accessors/Batch.js +108 -0
  186. package/src/nodes/accessors/Bitangent.js +2 -2
  187. package/src/nodes/accessors/BufferAttributeNode.js +13 -2
  188. package/src/nodes/accessors/Camera.js +7 -7
  189. package/src/nodes/accessors/ClippingNode.js +1 -1
  190. package/src/nodes/accessors/Instance.js +264 -0
  191. package/src/nodes/accessors/MaterialNode.js +18 -2
  192. package/src/nodes/accessors/MaterialProperties.js +4 -3
  193. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  194. package/src/nodes/accessors/Normal.js +13 -13
  195. package/src/nodes/accessors/Position.js +5 -1
  196. package/src/nodes/accessors/ReferenceNode.js +1 -0
  197. package/src/nodes/accessors/ReflectVector.js +3 -3
  198. package/src/nodes/accessors/SceneProperties.js +1 -1
  199. package/src/nodes/accessors/Skinning.js +263 -0
  200. package/src/nodes/accessors/StorageBufferNode.js +2 -2
  201. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  202. package/src/nodes/accessors/StorageTextureNode.js +39 -7
  203. package/src/nodes/accessors/Tangent.js +4 -4
  204. package/src/nodes/accessors/TextureNode.js +60 -5
  205. package/src/nodes/code/FunctionNode.js +2 -16
  206. package/src/nodes/core/MRTNode.js +7 -2
  207. package/src/nodes/core/Node.js +39 -2
  208. package/src/nodes/core/NodeBuilder.js +201 -41
  209. package/src/nodes/core/NodeUtils.js +13 -13
  210. package/src/nodes/core/OutputStructNode.js +1 -1
  211. package/src/nodes/core/OverrideContextNode.js +153 -0
  212. package/src/nodes/core/PropertyNode.js +51 -5
  213. package/src/nodes/core/StackNode.js +56 -34
  214. package/src/nodes/core/StructNode.js +4 -6
  215. package/src/nodes/core/StructTypeNode.js +6 -6
  216. package/src/nodes/core/VarNode.js +8 -0
  217. package/src/nodes/core/VaryingNode.js +12 -2
  218. package/src/nodes/display/BlendModes.js +1 -41
  219. package/src/nodes/display/BumpMapNode.js +6 -1
  220. package/src/nodes/display/ColorAdjustment.js +10 -9
  221. package/src/nodes/display/FrontFacingNode.js +38 -9
  222. package/src/nodes/display/NormalMapNode.js +2 -2
  223. package/src/nodes/display/PassNode.js +35 -43
  224. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  225. package/src/nodes/display/RenderOutputNode.js +12 -3
  226. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  227. package/src/nodes/gpgpu/WorkgroupInfoNode.js +1 -1
  228. package/src/nodes/lighting/EnvironmentNode.js +2 -2
  229. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  230. package/src/nodes/lighting/LightingContextNode.js +10 -2
  231. package/src/nodes/lighting/LightsNode.js +90 -37
  232. package/src/nodes/lighting/PointShadowNode.js +6 -1
  233. package/src/nodes/lighting/ShadowFilterNode.js +21 -52
  234. package/src/nodes/lighting/ShadowNode.js +34 -14
  235. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  236. package/src/nodes/math/ConditionalNode.js +3 -3
  237. package/src/nodes/math/MathNode.js +39 -11
  238. package/src/nodes/math/OperatorNode.js +23 -23
  239. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  240. package/src/nodes/pmrem/PMREMNode.js +33 -2
  241. package/src/nodes/tsl/TSLCore.js +63 -18
  242. package/src/nodes/utils/EquirectUV.js +30 -5
  243. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  244. package/src/nodes/utils/Packing.js +35 -4
  245. package/src/nodes/utils/RTTNode.js +40 -24
  246. package/src/nodes/utils/ReflectorNode.js +1 -0
  247. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  248. package/src/objects/BatchedMesh.js +22 -14
  249. package/src/objects/InstancedMesh.js +0 -11
  250. package/src/objects/Skeleton.js +0 -9
  251. package/src/renderers/WebGLRenderer.js +19 -15
  252. package/src/renderers/common/Backend.js +49 -5
  253. package/src/renderers/common/Bindings.js +114 -45
  254. package/src/renderers/common/Buffer.js +9 -0
  255. package/src/renderers/common/ClippingContext.js +10 -2
  256. package/src/renderers/common/Info.js +63 -22
  257. package/src/renderers/common/Lighting.js +53 -5
  258. package/src/renderers/common/RenderList.js +41 -4
  259. package/src/renderers/common/RenderObject.js +73 -13
  260. package/src/renderers/common/Renderer.js +281 -108
  261. package/src/renderers/common/Sampler.js +16 -48
  262. package/src/renderers/common/Textures.js +32 -5
  263. package/src/renderers/common/TimestampQueryPool.js +1 -1
  264. package/src/renderers/common/UniformsGroup.js +31 -9
  265. package/src/renderers/common/XRManager.js +340 -22
  266. package/src/renderers/common/extras/PMREMGenerator.js +15 -38
  267. package/src/renderers/common/nodes/NodeBuilderState.js +9 -1
  268. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  269. package/src/renderers/common/nodes/NodeManager.js +63 -14
  270. package/src/renderers/common/nodes/NodeUniformBuffer.js +13 -0
  271. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  272. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  273. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
  274. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  275. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  276. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
  277. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +1 -1
  278. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  279. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  280. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +1 -1
  281. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  282. package/src/renderers/shaders/ShaderLib/distance.glsl.js +1 -1
  283. package/src/renderers/webgl/WebGLOutput.js +2 -1
  284. package/src/renderers/webgl/WebGLProgram.js +5 -4
  285. package/src/renderers/webgl/WebGLPrograms.js +12 -5
  286. package/src/renderers/webgl/WebGLRenderLists.js +9 -1
  287. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  288. package/src/renderers/webgl/WebGLTextures.js +20 -7
  289. package/src/renderers/webgl/WebGLUniformsGroups.js +66 -38
  290. package/src/renderers/webgl-fallback/WebGLBackend.js +84 -25
  291. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +138 -8
  292. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  293. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +52 -22
  294. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +4 -2
  295. package/src/renderers/webgpu/WebGPUBackend.js +480 -169
  296. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  297. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  298. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  299. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  300. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  301. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  302. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  303. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  304. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  305. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  306. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  307. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  308. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  309. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  310. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  311. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  312. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  313. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  314. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  315. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  316. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  317. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  318. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  319. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  320. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +164 -7
  321. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  322. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +98 -38
  323. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +72 -68
  324. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +164 -69
  325. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +158 -95
  326. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +297 -141
  327. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +33 -18
  328. package/src/renderers/webgpu/utils/WebGPUUtils.js +38 -3
  329. package/src/textures/DepthTexture.js +1 -1
  330. package/src/textures/ExternalTexture.js +0 -3
  331. package/examples/fonts/LICENSE +0 -13
  332. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  333. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  334. package/examples/fonts/README.md +0 -11
  335. package/examples/fonts/droid/NOTICE +0 -190
  336. package/examples/fonts/droid/README.txt +0 -18
  337. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  338. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  339. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  340. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  341. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  342. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  343. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  344. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  345. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  346. package/examples/fonts/optimer_bold.typeface.json +0 -1
  347. package/examples/fonts/optimer_regular.typeface.json +0 -1
  348. package/examples/fonts/ttf/README.md +0 -9
  349. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  350. package/examples/jsm/inspector/extensions/extensions.json +0 -6
  351. package/examples/jsm/libs/ammo.wasm.js +0 -822
  352. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  353. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  354. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  355. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  356. package/examples/jsm/libs/opentype.module.js +0 -14506
  357. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  358. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  359. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  360. package/examples/jsm/lighting/TiledLighting.js +0 -42
  361. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -293
  362. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  363. package/src/nodes/accessors/BatchNode.js +0 -163
  364. package/src/nodes/accessors/InstanceNode.js +0 -349
  365. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  366. package/src/nodes/accessors/SkinningNode.js +0 -328
@@ -63,17 +63,30 @@ class PLYExporter {
63
63
  const defaultOptions = {
64
64
  binary: false,
65
65
  excludeAttributes: [], // normal, uv, color, index
66
- littleEndian: false
66
+ littleEndian: false,
67
+ customPropertyMapping: {}
67
68
  };
68
69
 
69
70
  options = Object.assign( defaultOptions, options );
70
71
 
71
72
  const excludeAttributes = options.excludeAttributes;
73
+ const customPropertyMapping = options.customPropertyMapping;
74
+ const customAttributeNames = Object.keys( customPropertyMapping );
72
75
  let includeIndices = true;
73
76
  let includeNormals = false;
74
77
  let includeColors = false;
75
78
  let includeUVs = false;
76
79
 
80
+ // derive types from the attribtue's typed array (the exporter assumes
81
+ // all attributes of the same group e.g. "position" share the same data type)
82
+ let positionType = 'float';
83
+ let normalType = 'float';
84
+ let uvType = 'float';
85
+ let colorType = 'uchar';
86
+
87
+ const customTypes = {};
88
+ for ( const name of customAttributeNames ) customTypes[ name ] = 'float';
89
+
77
90
  // count the vertices, check which properties are used,
78
91
  // and cache the BufferGeometry
79
92
  let vertexCount = 0;
@@ -101,11 +114,35 @@ class PLYExporter {
101
114
  vertexCount += vertices.count;
102
115
  faceCount += indices ? indices.count / 3 : vertices.count / 3;
103
116
 
104
- if ( normals !== undefined ) includeNormals = true;
117
+ positionType = getPlyType( vertices.array );
118
+
119
+ if ( normals !== undefined ) {
120
+
121
+ includeNormals = true;
122
+ normalType = getPlyType( normals.array );
123
+
124
+ }
125
+
126
+ if ( uvs !== undefined ) {
127
+
128
+ includeUVs = true;
129
+ uvType = getPlyType( uvs.array );
130
+
131
+ }
132
+
133
+ if ( colors !== undefined ) {
134
+
135
+ includeColors = true;
136
+ colorType = getPlyType( colors.array );
105
137
 
106
- if ( uvs !== undefined ) includeUVs = true;
138
+ }
139
+
140
+ for ( const name of customAttributeNames ) {
141
+
142
+ const attr = geometry.getAttribute( name );
143
+ if ( attr !== undefined ) customTypes[ name ] = getPlyType( attr.array );
107
144
 
108
- if ( colors !== undefined ) includeColors = true;
145
+ }
109
146
 
110
147
  } else if ( child.isPoints ) {
111
148
 
@@ -118,9 +155,28 @@ class PLYExporter {
118
155
 
119
156
  vertexCount += vertices.count;
120
157
 
121
- if ( normals !== undefined ) includeNormals = true;
158
+ positionType = getPlyType( vertices.array );
159
+
160
+ if ( normals !== undefined ) {
161
+
162
+ includeNormals = true;
163
+ normalType = getPlyType( normals.array );
164
+
165
+ }
166
+
167
+ if ( colors !== undefined ) {
168
+
169
+ includeColors = true;
170
+ colorType = getPlyType( colors.array );
171
+
172
+ }
173
+
174
+ for ( const name of customAttributeNames ) {
175
+
176
+ const attr = geometry.getAttribute( name );
177
+ if ( attr !== undefined ) customTypes[ name ] = getPlyType( attr.array );
122
178
 
123
- if ( colors !== undefined ) includeColors = true;
179
+ }
124
180
 
125
181
  includeIndices = false;
126
182
 
@@ -159,17 +215,17 @@ class PLYExporter {
159
215
  `element vertex ${vertexCount}\n` +
160
216
 
161
217
  // position
162
- 'property float x\n' +
163
- 'property float y\n' +
164
- 'property float z\n';
218
+ `property ${positionType} x\n` +
219
+ `property ${positionType} y\n` +
220
+ `property ${positionType} z\n`;
165
221
 
166
222
  if ( includeNormals === true ) {
167
223
 
168
224
  // normal
169
225
  header +=
170
- 'property float nx\n' +
171
- 'property float ny\n' +
172
- 'property float nz\n';
226
+ `property ${normalType} nx\n` +
227
+ `property ${normalType} ny\n` +
228
+ `property ${normalType} nz\n`;
173
229
 
174
230
  }
175
231
 
@@ -177,8 +233,8 @@ class PLYExporter {
177
233
 
178
234
  // uvs
179
235
  header +=
180
- 'property float s\n' +
181
- 'property float t\n';
236
+ `property ${uvType} s\n` +
237
+ `property ${uvType} t\n`;
182
238
 
183
239
  }
184
240
 
@@ -186,9 +242,22 @@ class PLYExporter {
186
242
 
187
243
  // colors
188
244
  header +=
189
- 'property uchar red\n' +
190
- 'property uchar green\n' +
191
- 'property uchar blue\n';
245
+ `property ${colorType} red\n` +
246
+ `property ${colorType} green\n` +
247
+ `property ${colorType} blue\n`;
248
+
249
+ }
250
+
251
+ // custom attributes
252
+
253
+ for ( const name of customAttributeNames ) {
254
+
255
+ const type = customTypes[ name ];
256
+ for ( const propName of customPropertyMapping[ name ] ) {
257
+
258
+ header += `property ${type} ${propName}\n`;
259
+
260
+ }
192
261
 
193
262
  }
194
263
 
@@ -214,11 +283,34 @@ class PLYExporter {
214
283
  // Binary File Generation
215
284
  const headerBin = new TextEncoder().encode( header );
216
285
 
217
- // 3 position values at 4 bytes
218
- // 3 normal values at 4 bytes
219
- // 3 color channels with 1 byte
220
- // 2 uv values at 4 bytes
221
- const vertexListLength = vertexCount * ( 4 * 3 + ( includeNormals ? 4 * 3 : 0 ) + ( includeColors ? 3 : 0 ) + ( includeUVs ? 4 * 2 : 0 ) );
286
+ const posWriter = getBinaryWriter( positionType );
287
+ const normalWriter = includeNormals ? getBinaryWriter( normalType ) : null;
288
+ const uvWriter = includeUVs ? getBinaryWriter( uvType ) : null;
289
+ const colorWriter = includeColors ? getBinaryWriter( colorType ) : null;
290
+ const colorIsFloat = isFloatType( colorType );
291
+ const colorScale = getColorScale( colorType );
292
+
293
+ const customWriters = {};
294
+ const customIsFloat = {};
295
+ let customStride = 0;
296
+
297
+ for ( const name of customAttributeNames ) {
298
+
299
+ const type = customTypes[ name ];
300
+ const writer = getBinaryWriter( type );
301
+ customWriters[ name ] = writer;
302
+ customIsFloat[ name ] = isFloatType( type );
303
+ customStride += customPropertyMapping[ name ].length * writer.size;
304
+
305
+ }
306
+
307
+ const vertexListLength = vertexCount * (
308
+ 3 * posWriter.size +
309
+ ( includeNormals ? 3 * normalWriter.size : 0 ) +
310
+ ( includeUVs ? 2 * uvWriter.size : 0 ) +
311
+ ( includeColors ? 3 * colorWriter.size : 0 ) +
312
+ customStride
313
+ );
222
314
 
223
315
  // 1 byte shape descriptor
224
316
  // 3 vertex indices at ${indexByteCount} bytes
@@ -248,14 +340,14 @@ class PLYExporter {
248
340
 
249
341
 
250
342
  // Position information
251
- output.setFloat32( vOffset, vertex.x, options.littleEndian );
252
- vOffset += 4;
343
+ posWriter.write( output, vOffset, vertex.x, options.littleEndian );
344
+ vOffset += posWriter.size;
253
345
 
254
- output.setFloat32( vOffset, vertex.y, options.littleEndian );
255
- vOffset += 4;
346
+ posWriter.write( output, vOffset, vertex.y, options.littleEndian );
347
+ vOffset += posWriter.size;
256
348
 
257
- output.setFloat32( vOffset, vertex.z, options.littleEndian );
258
- vOffset += 4;
349
+ posWriter.write( output, vOffset, vertex.z, options.littleEndian );
350
+ vOffset += posWriter.size;
259
351
 
260
352
  // Normal information
261
353
  if ( includeNormals === true ) {
@@ -266,25 +358,25 @@ class PLYExporter {
266
358
 
267
359
  vertex.applyMatrix3( normalMatrixWorld ).normalize();
268
360
 
269
- output.setFloat32( vOffset, vertex.x, options.littleEndian );
270
- vOffset += 4;
361
+ normalWriter.write( output, vOffset, vertex.x, options.littleEndian );
362
+ vOffset += normalWriter.size;
271
363
 
272
- output.setFloat32( vOffset, vertex.y, options.littleEndian );
273
- vOffset += 4;
364
+ normalWriter.write( output, vOffset, vertex.y, options.littleEndian );
365
+ vOffset += normalWriter.size;
274
366
 
275
- output.setFloat32( vOffset, vertex.z, options.littleEndian );
276
- vOffset += 4;
367
+ normalWriter.write( output, vOffset, vertex.z, options.littleEndian );
368
+ vOffset += normalWriter.size;
277
369
 
278
370
  } else {
279
371
 
280
- output.setFloat32( vOffset, 0, options.littleEndian );
281
- vOffset += 4;
372
+ normalWriter.write( output, vOffset, 0, options.littleEndian );
373
+ vOffset += normalWriter.size;
282
374
 
283
- output.setFloat32( vOffset, 0, options.littleEndian );
284
- vOffset += 4;
375
+ normalWriter.write( output, vOffset, 0, options.littleEndian );
376
+ vOffset += normalWriter.size;
285
377
 
286
- output.setFloat32( vOffset, 0, options.littleEndian );
287
- vOffset += 4;
378
+ normalWriter.write( output, vOffset, 0, options.littleEndian );
379
+ vOffset += normalWriter.size;
288
380
 
289
381
  }
290
382
 
@@ -295,19 +387,19 @@ class PLYExporter {
295
387
 
296
388
  if ( uvs != null ) {
297
389
 
298
- output.setFloat32( vOffset, uvs.getX( i ), options.littleEndian );
299
- vOffset += 4;
390
+ uvWriter.write( output, vOffset, uvs.getX( i ), options.littleEndian );
391
+ vOffset += uvWriter.size;
300
392
 
301
- output.setFloat32( vOffset, uvs.getY( i ), options.littleEndian );
302
- vOffset += 4;
393
+ uvWriter.write( output, vOffset, uvs.getY( i ), options.littleEndian );
394
+ vOffset += uvWriter.size;
303
395
 
304
396
  } else {
305
397
 
306
- output.setFloat32( vOffset, 0, options.littleEndian );
307
- vOffset += 4;
398
+ uvWriter.write( output, vOffset, 0, options.littleEndian );
399
+ vOffset += uvWriter.size;
308
400
 
309
- output.setFloat32( vOffset, 0, options.littleEndian );
310
- vOffset += 4;
401
+ uvWriter.write( output, vOffset, 0, options.littleEndian );
402
+ vOffset += uvWriter.size;
311
403
 
312
404
  }
313
405
 
@@ -322,25 +414,50 @@ class PLYExporter {
322
414
 
323
415
  ColorManagement.workingToColorSpace( tempColor, SRGBColorSpace );
324
416
 
325
- output.setUint8( vOffset, Math.floor( tempColor.r * 255 ) );
326
- vOffset += 1;
417
+ const r = colorIsFloat ? tempColor.r : Math.round( tempColor.r * colorScale );
418
+ const g = colorIsFloat ? tempColor.g : Math.round( tempColor.g * colorScale );
419
+ const b = colorIsFloat ? tempColor.b : Math.round( tempColor.b * colorScale );
327
420
 
328
- output.setUint8( vOffset, Math.floor( tempColor.g * 255 ) );
329
- vOffset += 1;
421
+ colorWriter.write( output, vOffset, r, options.littleEndian );
422
+ vOffset += colorWriter.size;
330
423
 
331
- output.setUint8( vOffset, Math.floor( tempColor.b * 255 ) );
332
- vOffset += 1;
424
+ colorWriter.write( output, vOffset, g, options.littleEndian );
425
+ vOffset += colorWriter.size;
426
+
427
+ colorWriter.write( output, vOffset, b, options.littleEndian );
428
+ vOffset += colorWriter.size;
333
429
 
334
430
  } else {
335
431
 
336
- output.setUint8( vOffset, 255 );
337
- vOffset += 1;
432
+ const white = colorIsFloat ? 1 : colorScale;
433
+
434
+ colorWriter.write( output, vOffset, white, options.littleEndian );
435
+ vOffset += colorWriter.size;
436
+
437
+ colorWriter.write( output, vOffset, white, options.littleEndian );
438
+ vOffset += colorWriter.size;
439
+
440
+ colorWriter.write( output, vOffset, white, options.littleEndian );
441
+ vOffset += colorWriter.size;
442
+
443
+ }
444
+
445
+ }
446
+
447
+ // Custom attributes
338
448
 
339
- output.setUint8( vOffset, 255 );
340
- vOffset += 1;
449
+ for ( const name of customAttributeNames ) {
341
450
 
342
- output.setUint8( vOffset, 255 );
343
- vOffset += 1;
451
+ const writer = customWriters[ name ];
452
+ const propCount = customPropertyMapping[ name ].length;
453
+ const attr = geometry.getAttribute( name );
454
+ const isFloat = customIsFloat[ name ];
455
+
456
+ for ( let c = 0; c < propCount; c ++ ) {
457
+
458
+ const raw = attr != null ? getAttributeComponent( attr, i, c ) : 0;
459
+ writer.write( output, vOffset, isFloat ? raw : Math.round( raw ), options.littleEndian );
460
+ vOffset += writer.size;
344
461
 
345
462
  }
346
463
 
@@ -409,6 +526,17 @@ class PLYExporter {
409
526
  let vertexList = '';
410
527
  let faceList = '';
411
528
 
529
+ const positionIsFloat = isFloatType( positionType );
530
+ const normalIsFloat = isFloatType( normalType );
531
+ const uvIsFloat = isFloatType( uvType );
532
+ const colorIsFloat = isFloatType( colorType );
533
+ const colorScale = getColorScale( colorType );
534
+
535
+ const customIsFloat = {};
536
+ for ( const name of customAttributeNames ) customIsFloat[ name ] = isFloatType( customTypes[ name ] );
537
+
538
+ const encode = ( v, isFloat ) => isFloat ? v : Math.round( v );
539
+
412
540
  traverseMeshes( function ( mesh, geometry ) {
413
541
 
414
542
  const vertices = geometry.getAttribute( 'position' );
@@ -429,9 +557,9 @@ class PLYExporter {
429
557
 
430
558
  // Position information
431
559
  let line =
432
- vertex.x + ' ' +
433
- vertex.y + ' ' +
434
- vertex.z;
560
+ encode( vertex.x, positionIsFloat ) + ' ' +
561
+ encode( vertex.y, positionIsFloat ) + ' ' +
562
+ encode( vertex.z, positionIsFloat );
435
563
 
436
564
  // Normal information
437
565
  if ( includeNormals === true ) {
@@ -443,9 +571,9 @@ class PLYExporter {
443
571
  vertex.applyMatrix3( normalMatrixWorld ).normalize();
444
572
 
445
573
  line += ' ' +
446
- vertex.x + ' ' +
447
- vertex.y + ' ' +
448
- vertex.z;
574
+ encode( vertex.x, normalIsFloat ) + ' ' +
575
+ encode( vertex.y, normalIsFloat ) + ' ' +
576
+ encode( vertex.z, normalIsFloat );
449
577
 
450
578
  } else {
451
579
 
@@ -461,8 +589,8 @@ class PLYExporter {
461
589
  if ( uvs != null ) {
462
590
 
463
591
  line += ' ' +
464
- uvs.getX( i ) + ' ' +
465
- uvs.getY( i );
592
+ encode( uvs.getX( i ), uvIsFloat ) + ' ' +
593
+ encode( uvs.getY( i ), uvIsFloat );
466
594
 
467
595
  } else {
468
596
 
@@ -481,14 +609,33 @@ class PLYExporter {
481
609
 
482
610
  ColorManagement.workingToColorSpace( tempColor, SRGBColorSpace );
483
611
 
484
- line += ' ' +
485
- Math.floor( tempColor.r * 255 ) + ' ' +
486
- Math.floor( tempColor.g * 255 ) + ' ' +
487
- Math.floor( tempColor.b * 255 );
612
+ const r = colorIsFloat ? tempColor.r : Math.round( tempColor.r * colorScale );
613
+ const g = colorIsFloat ? tempColor.g : Math.round( tempColor.g * colorScale );
614
+ const b = colorIsFloat ? tempColor.b : Math.round( tempColor.b * colorScale );
615
+
616
+ line += ` ${r} ${g} ${b}`;
488
617
 
489
618
  } else {
490
619
 
491
- line += ' 255 255 255';
620
+ const white = colorIsFloat ? 1 : colorScale;
621
+ line += ` ${white} ${white} ${white}`;
622
+
623
+ }
624
+
625
+ }
626
+
627
+ // Custom attributes
628
+
629
+ for ( const name of customAttributeNames ) {
630
+
631
+ const propCount = customPropertyMapping[ name ].length;
632
+ const attr = geometry.getAttribute( name );
633
+ const isFloat = customIsFloat[ name ];
634
+
635
+ for ( let c = 0; c < propCount; c ++ ) {
636
+
637
+ const raw = attr != null ? getAttributeComponent( attr, i, c ) : 0;
638
+ line += ' ' + encode( raw, isFloat );
492
639
 
493
640
  }
494
641
 
@@ -541,6 +688,68 @@ class PLYExporter {
541
688
 
542
689
  }
543
690
 
691
+ function getPlyType( array ) {
692
+
693
+ if ( array instanceof Int8Array ) return 'char';
694
+ if ( array instanceof Uint8Array || array instanceof Uint8ClampedArray ) return 'uchar';
695
+ if ( array instanceof Int16Array ) return 'short';
696
+ if ( array instanceof Uint16Array ) return 'ushort';
697
+ if ( array instanceof Int32Array ) return 'int';
698
+ if ( array instanceof Uint32Array ) return 'uint';
699
+ if ( array instanceof Float32Array ) return 'float';
700
+ if ( array instanceof Float64Array ) return 'double';
701
+ return 'float';
702
+
703
+ }
704
+
705
+ function getBinaryWriter( type ) {
706
+
707
+ switch ( type ) {
708
+
709
+ case 'char': return { write: ( dv, at, v ) => dv.setInt8( at, v ), size: 1 };
710
+ case 'uchar': return { write: ( dv, at, v ) => dv.setUint8( at, v ), size: 1 };
711
+ case 'short': return { write: ( dv, at, v, le ) => dv.setInt16( at, v, le ), size: 2 };
712
+ case 'ushort': return { write: ( dv, at, v, le ) => dv.setUint16( at, v, le ), size: 2 };
713
+ case 'int': return { write: ( dv, at, v, le ) => dv.setInt32( at, v, le ), size: 4 };
714
+ case 'uint': return { write: ( dv, at, v, le ) => dv.setUint32( at, v, le ), size: 4 };
715
+ case 'float': return { write: ( dv, at, v, le ) => dv.setFloat32( at, v, le ), size: 4 };
716
+ case 'double': return { write: ( dv, at, v, le ) => dv.setFloat64( at, v, le ), size: 8 };
717
+
718
+ }
719
+
720
+ }
721
+
722
+ function isFloatType( type ) {
723
+
724
+ return type === 'float' || type === 'double';
725
+
726
+ }
727
+
728
+ function getAttributeComponent( attr, i, c ) {
729
+
730
+ switch ( c ) {
731
+
732
+ case 0: return attr.getX( i );
733
+ case 1: return attr.getY( i );
734
+ case 2: return attr.getZ( i );
735
+ case 3: return attr.getW( i );
736
+
737
+ }
738
+
739
+ }
740
+
741
+ function getColorScale( type ) {
742
+
743
+ switch ( type ) {
744
+
745
+ case 'uchar': return 255;
746
+ case 'ushort': return 65535;
747
+ default: return 1;
748
+
749
+ }
750
+
751
+ }
752
+
544
753
  /**
545
754
  * Export options of `PLYExporter`.
546
755
  *
@@ -550,6 +759,10 @@ class PLYExporter {
550
759
  * the exported PLY file. Valid values are `'color'`, `'normal'`, `'uv'`, and `'index'`. If triangle
551
760
  * indices are excluded, then a point cloud is exported.
552
761
  * @property {boolean} [littleEndian=false] - Whether the binary export uses little or big endian.
762
+ * @property {Object<string, Array<string>>} [customPropertyMapping] - A mapping that allows
763
+ * exporting custom buffer attributes as PLY vertex properties. Each entry maps a buffer attribute
764
+ * name to an array of PLY property names. The number of property names must match the item size
765
+ * of the buffer attribute. This is the inverse of `PLYLoader.setCustomPropertyNameMapping()`.
553
766
  **/
554
767
 
555
768
  /**