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
@@ -46,6 +46,7 @@ export * from './exporters/USDZExporter.js';
46
46
  export * from './geometries/BoxLineGeometry.js';
47
47
  export * from './geometries/ConvexGeometry.js';
48
48
  export * from './geometries/DecalGeometry.js';
49
+ export * from './geometries/LoftGeometry.js';
49
50
  export * from './geometries/ParametricFunctions.js';
50
51
  export * from './geometries/ParametricGeometry.js';
51
52
  export * from './geometries/RoundedBoxGeometry.js';
@@ -149,6 +150,7 @@ export * from './misc/MorphAnimMesh.js';
149
150
  export * from './misc/MorphBlendMesh.js';
150
151
  export * from './misc/ProgressiveLightMap.js';
151
152
  export * from './misc/RollerCoaster.js';
153
+ export * from './misc/TileCreasedNormalsPlugin.js';
152
154
  export * from './misc/TubePainter.js';
153
155
  export * from './misc/Volume.js';
154
156
  export * from './misc/VolumeSlice.js';
@@ -284,6 +286,7 @@ export * from './webxr/OculusHandModel.js';
284
286
  export * from './webxr/OculusHandPointerModel.js';
285
287
  export * from './webxr/Text2D.js';
286
288
  export * from './webxr/VRButton.js';
289
+ export * from './webxr/WebGLXRFallback.js';
287
290
  export * from './webxr/XRButton.js';
288
291
  export * from './webxr/XRControllerModelFactory.js';
289
292
  export * from './webxr/XREstimatedLight.js';
@@ -265,6 +265,10 @@ class ArcballControls extends Controls {
265
265
  * performed trying to maintain the same visible portion given by initial near and far
266
266
  * values. Only works with perspective cameras.
267
267
  *
268
+ * This feature only works as expected if the camera's initial state (position, near and far values)
269
+ * is correctly configured before creating the controls. Otherwise {@link ArcballControls#setCamera}
270
+ * must be called by the application.
271
+ *
268
272
  * @type {boolean}
269
273
  * @default false
270
274
  */
@@ -2008,8 +2012,8 @@ class ArcballControls extends Controls {
2008
2012
  const gizmoZ = new Line( curveGeometry, curveMaterialZ );
2009
2013
 
2010
2014
  const rotation = Math.PI * 0.5;
2011
- gizmoX.rotation.x = rotation;
2012
- gizmoY.rotation.y = rotation;
2015
+ gizmoX.rotation.y = rotation;
2016
+ gizmoY.rotation.x = rotation;
2013
2017
 
2014
2018
 
2015
2019
  //setting state
@@ -9,6 +9,7 @@ const _lookDirection = new Vector3();
9
9
  const _spherical = new Spherical();
10
10
  const _target = new Vector3();
11
11
  const _targetPosition = new Vector3();
12
+ const _targetVelocity = new Vector3();
12
13
 
13
14
  /**
14
15
  * This class is an alternative implementation of {@link FlyControls}.
@@ -44,6 +45,15 @@ class FirstPersonControls extends Controls {
44
45
  */
45
46
  this.lookSpeed = 0.005;
46
47
 
48
+ /**
49
+ * How quickly the movement and look velocity catches up to the input. Lower
50
+ * values feel heavier (more inertia), `1` disables damping.
51
+ *
52
+ * @type {number}
53
+ * @default 0.1
54
+ */
55
+ this.dampingFactor = 0.1;
56
+
47
57
  /**
48
58
  * Whether it's possible to vertically look around or not.
49
59
  *
@@ -128,7 +138,7 @@ class FirstPersonControls extends Controls {
128
138
 
129
139
  // internals
130
140
 
131
- this._autoSpeedFactor = 0.0;
141
+ this._velocity = new Vector3();
132
142
 
133
143
  this._pointerX = 0;
134
144
  this._pointerY = 0;
@@ -138,14 +148,23 @@ class FirstPersonControls extends Controls {
138
148
 
139
149
  this._pointerCount = 0;
140
150
 
141
- this._moveForward = false;
142
- this._moveBackward = false;
151
+ // forward / backward come from keys and the pointer, tracked per source so they don't
152
+ // clobber: while a forward / backward key is held, a click only looks
153
+ this._keyForward = false;
154
+ this._keyBackward = false;
155
+ this._pointerForward = false;
156
+ this._pointerBackward = false;
143
157
  this._moveLeft = false;
144
158
  this._moveRight = false;
159
+ this._moveUp = false;
160
+ this._moveDown = false;
145
161
 
146
162
  this._lat = 0;
147
163
  this._lon = 0;
148
164
 
165
+ this._lonVelocity = 0;
166
+ this._latVelocity = 0;
167
+
149
168
  // event listeners
150
169
 
151
170
  this._onPointerMove = onPointerMove.bind( this );
@@ -174,11 +193,15 @@ class FirstPersonControls extends Controls {
174
193
  window.addEventListener( 'keydown', this._onKeyDown );
175
194
  window.addEventListener( 'keyup', this._onKeyUp );
176
195
 
177
- this.domElement.addEventListener( 'pointermove', this._onPointerMove );
178
196
  this.domElement.addEventListener( 'pointerdown', this._onPointerDown );
179
- this.domElement.addEventListener( 'pointerup', this._onPointerUp );
180
197
  this.domElement.addEventListener( 'contextmenu', this._onContextMenu );
181
198
 
199
+ const { ownerDocument } = this.domElement;
200
+
201
+ ownerDocument.addEventListener( 'pointermove', this._onPointerMove );
202
+ ownerDocument.addEventListener( 'pointerup', this._onPointerUp );
203
+ ownerDocument.addEventListener( 'pointercancel', this._onPointerUp );
204
+
182
205
  this.domElement.style.touchAction = 'none'; // Disable touch scroll
183
206
 
184
207
  }
@@ -188,11 +211,15 @@ class FirstPersonControls extends Controls {
188
211
  window.removeEventListener( 'keydown', this._onKeyDown );
189
212
  window.removeEventListener( 'keyup', this._onKeyUp );
190
213
 
191
- this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
192
214
  this.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
193
- this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
194
215
  this.domElement.removeEventListener( 'contextmenu', this._onContextMenu );
195
216
 
217
+ const { ownerDocument } = this.domElement;
218
+
219
+ ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );
220
+ ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );
221
+ ownerDocument.removeEventListener( 'pointercancel', this._onPointerUp );
222
+
196
223
  this.domElement.style.touchAction = ''; // Restore touch scroll
197
224
 
198
225
  }
@@ -235,31 +262,35 @@ class FirstPersonControls extends Controls {
235
262
 
236
263
  if ( this.enabled === false ) return;
237
264
 
238
- if ( this.heightSpeed ) {
265
+ const moveForward = this._keyForward || this._pointerForward;
266
+ const moveBackward = this._keyBackward || this._pointerBackward;
239
267
 
240
- const y = MathUtils.clamp( this.object.position.y, this.heightMin, this.heightMax );
241
- const heightDelta = y - this.heightMin;
268
+ const forward = moveForward || ( this.autoForward && ! moveBackward );
242
269
 
243
- this._autoSpeedFactor = delta * ( heightDelta * this.heightCoef );
270
+ // target velocity in the object's local space
244
271
 
245
- } else {
272
+ _targetVelocity.set(
273
+ ( this._moveRight ? 1 : 0 ) - ( this._moveLeft ? 1 : 0 ),
274
+ ( this._moveUp ? 1 : 0 ) - ( this._moveDown ? 1 : 0 ),
275
+ ( moveBackward ? 1 : 0 ) - ( forward ? 1 : 0 )
276
+ ).multiplyScalar( this.movementSpeed );
246
277
 
247
- this._autoSpeedFactor = 0.0;
278
+ // faster forward movement the higher the camera is
248
279
 
249
- }
280
+ if ( forward && this.heightSpeed ) {
250
281
 
251
- const actualMoveSpeed = delta * this.movementSpeed;
282
+ const y = MathUtils.clamp( this.object.position.y, this.heightMin, this.heightMax );
283
+ _targetVelocity.z -= ( y - this.heightMin ) * this.heightCoef;
252
284
 
253
- if ( this._moveForward || ( this.autoForward && ! this._moveBackward ) ) this.object.translateZ( - ( actualMoveSpeed + this._autoSpeedFactor ) );
254
- if ( this._moveBackward ) this.object.translateZ( actualMoveSpeed );
285
+ }
255
286
 
256
- if ( this._moveLeft ) this.object.translateX( - actualMoveSpeed );
257
- if ( this._moveRight ) this.object.translateX( actualMoveSpeed );
287
+ // ease toward the target velocity for smooth acceleration and deceleration
258
288
 
259
- if ( this._moveUp ) this.object.translateY( actualMoveSpeed );
260
- if ( this._moveDown ) this.object.translateY( - actualMoveSpeed );
289
+ this._velocity.lerp( _targetVelocity, this.dampingFactor );
261
290
 
262
- const actualLookSpeed = delta * this.lookSpeed;
291
+ this.object.translateX( this._velocity.x * delta );
292
+ this.object.translateY( this._velocity.y * delta );
293
+ this.object.translateZ( this._velocity.z * delta );
263
294
 
264
295
  let verticalLookRatio = 1;
265
296
 
@@ -269,12 +300,16 @@ class FirstPersonControls extends Controls {
269
300
 
270
301
  }
271
302
 
272
- if ( this.mouseDragOn ) {
303
+ // target look velocity, zero when not dragging so the view eases to a stop
273
304
 
274
- this._lon -= this._pointerX * actualLookSpeed;
275
- if ( this.lookVertical ) this._lat -= this._pointerY * actualLookSpeed * verticalLookRatio;
305
+ const targetLon = this.mouseDragOn ? - this._pointerX * this.lookSpeed : 0;
306
+ const targetLat = ( this.mouseDragOn && this.lookVertical ) ? - this._pointerY * this.lookSpeed * verticalLookRatio : 0;
276
307
 
277
- }
308
+ this._lonVelocity = MathUtils.lerp( this._lonVelocity, targetLon, this.dampingFactor );
309
+ this._latVelocity = MathUtils.lerp( this._latVelocity, targetLat, this.dampingFactor );
310
+
311
+ this._lon += this._lonVelocity * delta;
312
+ this._lat += this._latVelocity * delta;
278
313
 
279
314
  this._lat = Math.max( - 85, Math.min( 85, this._lat ) );
280
315
 
@@ -332,15 +367,15 @@ function onPointerDown( event ) {
332
367
 
333
368
  if ( event.pointerType === 'touch' ) {
334
369
 
335
- this._moveForward = this._pointerCount === 1;
336
- this._moveBackward = this._pointerCount >= 2;
370
+ this._pointerForward = this._pointerCount === 1;
371
+ this._pointerBackward = this._pointerCount >= 2;
337
372
 
338
373
  } else {
339
374
 
340
375
  switch ( event.button ) {
341
376
 
342
- case 0: this._moveForward = true; break;
343
- case 2: this._moveBackward = true; break;
377
+ case 0: if ( ! this._keyForward && ! this._keyBackward ) this._pointerForward = true; break;
378
+ case 2: if ( ! this._keyForward && ! this._keyBackward ) this._pointerBackward = true; break;
344
379
 
345
380
  }
346
381
 
@@ -358,21 +393,23 @@ function onPointerDown( event ) {
358
393
 
359
394
  function onPointerUp( event ) {
360
395
 
396
+ if ( this.mouseDragOn === false ) return;
397
+
361
398
  this.domElement.releasePointerCapture( event.pointerId );
362
399
 
363
400
  this._pointerCount --;
364
401
 
365
402
  if ( event.pointerType === 'touch' ) {
366
403
 
367
- this._moveForward = this._pointerCount === 1;
368
- this._moveBackward = false;
404
+ this._pointerForward = this._pointerCount === 1;
405
+ this._pointerBackward = false;
369
406
 
370
407
  } else {
371
408
 
372
409
  switch ( event.button ) {
373
410
 
374
- case 0: this._moveForward = false; break;
375
- case 2: this._moveBackward = false; break;
411
+ case 0: this._pointerForward = false; break;
412
+ case 2: this._pointerBackward = false; break;
376
413
 
377
414
  }
378
415
 
@@ -399,19 +436,19 @@ function onKeyDown( event ) {
399
436
  switch ( event.code ) {
400
437
 
401
438
  case 'ArrowUp':
402
- case 'KeyW': this._moveForward = true; break;
439
+ case 'KeyW': this._keyForward = true; break;
403
440
 
404
441
  case 'ArrowLeft':
405
442
  case 'KeyA': this._moveLeft = true; break;
406
443
 
407
444
  case 'ArrowDown':
408
- case 'KeyS': this._moveBackward = true; break;
445
+ case 'KeyS': this._keyBackward = true; break;
409
446
 
410
447
  case 'ArrowRight':
411
448
  case 'KeyD': this._moveRight = true; break;
412
449
 
413
- case 'KeyR': this._moveUp = true; break;
414
- case 'KeyF': this._moveDown = true; break;
450
+ case 'KeyE': this._moveUp = true; break;
451
+ case 'KeyQ': this._moveDown = true; break;
415
452
 
416
453
  }
417
454
 
@@ -422,19 +459,19 @@ function onKeyUp( event ) {
422
459
  switch ( event.code ) {
423
460
 
424
461
  case 'ArrowUp':
425
- case 'KeyW': this._moveForward = false; break;
462
+ case 'KeyW': this._keyForward = false; break;
426
463
 
427
464
  case 'ArrowLeft':
428
465
  case 'KeyA': this._moveLeft = false; break;
429
466
 
430
467
  case 'ArrowDown':
431
- case 'KeyS': this._moveBackward = false; break;
468
+ case 'KeyS': this._keyBackward = false; break;
432
469
 
433
470
  case 'ArrowRight':
434
471
  case 'KeyD': this._moveRight = false; break;
435
472
 
436
- case 'KeyR': this._moveUp = false; break;
437
- case 'KeyF': this._moveDown = false; break;
473
+ case 'KeyE': this._moveUp = false; break;
474
+ case 'KeyQ': this._moveDown = false; break;
438
475
 
439
476
  }
440
477
 
@@ -214,6 +214,17 @@ class TransformControls extends Controls {
214
214
  */
215
215
  defineProperty( 'size', 1 );
216
216
 
217
+ /**
218
+ * The viewport rectangle, in logical (CSS) pixels with the origin at the lower-left
219
+ * of the canvas. Set this when the renderer uses a sub-canvas viewport so pointer
220
+ * coordinates map to the correct region. If `null`, the full canvas is used.
221
+ *
222
+ * @name TransformControls#viewport
223
+ * @type {?Vector4}
224
+ * @default null
225
+ */
226
+ this.viewport = null;
227
+
217
228
  /**
218
229
  * Whether dragging is currently performed or not.
219
230
  *
@@ -278,6 +289,24 @@ class TransformControls extends Controls {
278
289
  */
279
290
  defineProperty( 'showXZ', true );
280
291
 
292
+ /**
293
+ * Whether the xyze rotation helper should be visible or not.
294
+ *
295
+ * @name TransformControls#showXYZE
296
+ * @type {boolean}
297
+ * @default true
298
+ */
299
+ defineProperty( 'showXYZE', true );
300
+
301
+ /**
302
+ * Whether the e rotation helper should be visible or not.
303
+ *
304
+ * @name TransformControls#showE
305
+ * @type {boolean}
306
+ * @default true
307
+ */
308
+ defineProperty( 'showE', true );
309
+
281
310
  /**
282
311
  * The minimum allowed X position during translation.
283
312
  *
@@ -567,35 +596,27 @@ class TransformControls extends Controls {
567
596
 
568
597
  if ( space === 'world' ) {
569
598
 
570
- if ( object.parent ) {
571
-
572
- object.position.add( _tempVector.setFromMatrixPosition( object.parent.matrixWorld ) );
573
-
574
- }
599
+ object.getWorldPosition( _tempVector );
575
600
 
576
601
  if ( axis.search( 'X' ) !== - 1 ) {
577
602
 
578
- object.position.x = Math.round( object.position.x / this.translationSnap ) * this.translationSnap;
603
+ _tempVector.x = Math.round( _tempVector.x / this.translationSnap ) * this.translationSnap;
579
604
 
580
605
  }
581
606
 
582
607
  if ( axis.search( 'Y' ) !== - 1 ) {
583
608
 
584
- object.position.y = Math.round( object.position.y / this.translationSnap ) * this.translationSnap;
609
+ _tempVector.y = Math.round( _tempVector.y / this.translationSnap ) * this.translationSnap;
585
610
 
586
611
  }
587
612
 
588
613
  if ( axis.search( 'Z' ) !== - 1 ) {
589
614
 
590
- object.position.z = Math.round( object.position.z / this.translationSnap ) * this.translationSnap;
615
+ _tempVector.z = Math.round( _tempVector.z / this.translationSnap ) * this.translationSnap;
591
616
 
592
617
  }
593
618
 
594
- if ( object.parent ) {
595
-
596
- object.position.sub( _tempVector.setFromMatrixPosition( object.parent.matrixWorld ) );
597
-
598
- }
619
+ object.position.copy( object.parent.worldToLocal( _tempVector ) );
599
620
 
600
621
  }
601
622
 
@@ -966,10 +987,29 @@ function getPointer( event ) {
966
987
  } else {
967
988
 
968
989
  const rect = this.domElement.getBoundingClientRect();
990
+ const viewport = this.viewport;
991
+
992
+ let originX, originY, regionWidth, regionHeight;
993
+
994
+ if ( viewport !== null ) {
995
+
996
+ originX = viewport.x;
997
+ originY = rect.height - viewport.y - viewport.w;
998
+ regionWidth = viewport.z;
999
+ regionHeight = viewport.w;
1000
+
1001
+ } else {
1002
+
1003
+ originX = 0;
1004
+ originY = 0;
1005
+ regionWidth = rect.width;
1006
+ regionHeight = rect.height;
1007
+
1008
+ }
969
1009
 
970
1010
  return {
971
- x: ( event.clientX - rect.left ) / rect.width * 2 - 1,
972
- y: - ( event.clientY - rect.top ) / rect.height * 2 + 1,
1011
+ x: ( event.clientX - rect.left - originX ) / regionWidth * 2 - 1,
1012
+ y: - ( event.clientY - rect.top - originY ) / regionHeight * 2 + 1,
973
1013
  button: event.button
974
1014
  };
975
1015
 
@@ -1120,6 +1160,15 @@ class TransformControlsRoot extends Object3D {
1120
1160
 
1121
1161
  }
1122
1162
 
1163
+ // Cancel out the parent's transform so the gizmo stays world-aligned.
1164
+
1165
+ if ( this.parent ) {
1166
+
1167
+ _tempMatrix.copy( this.parent.matrixWorld ).invert();
1168
+ _tempMatrix.decompose( this.position, this.quaternion, this.scale );
1169
+
1170
+ }
1171
+
1123
1172
  super.updateMatrixWorld( force );
1124
1173
 
1125
1174
  }
@@ -1816,6 +1865,10 @@ class TransformControlsGizmo extends Object3D {
1816
1865
  handle.visible = handle.visible && ( handle.name.indexOf( 'YZ' ) === - 1 || this.showYZ );
1817
1866
  handle.visible = handle.visible && ( handle.name.indexOf( 'XZ' ) === - 1 || this.showXZ );
1818
1867
 
1868
+ // Hide disabled rotation helpers
1869
+ handle.visible = handle.visible && ( handle.name !== 'E' || this.showE );
1870
+ handle.visible = handle.visible && ( handle.name !== 'XYZE' || this.showXYZE );
1871
+
1819
1872
  // highlight selected axis
1820
1873
 
1821
1874
  handle.material._color = handle.material._color || handle.material.color.clone();
@@ -27,6 +27,13 @@ class CSMFrustum {
27
27
  */
28
28
  this.zNear = data.webGL === true ? - 1 : 0;
29
29
 
30
+ /**
31
+ * The zFar value.
32
+ *
33
+ * @type {number}
34
+ */
35
+ this.zFar = 1;
36
+
30
37
  /**
31
38
  * An object representing the vertices of the near and
32
39
  * far plane in view space.
@@ -54,6 +61,15 @@ class CSMFrustum {
54
61
 
55
62
  }
56
63
 
64
+ // In case of reversed depth buffer, zNear and zFar must be 1 and 0
65
+ // respectively regardless of the coordinate system.
66
+ if ( data.reversedDepth === true ) {
67
+
68
+ this.zNear = 1;
69
+ this.zFar = 0;
70
+
71
+ }
72
+
57
73
  }
58
74
 
59
75
  /**
@@ -66,6 +82,7 @@ class CSMFrustum {
66
82
  setFromProjectionMatrix( projectionMatrix, maxFar ) {
67
83
 
68
84
  const zNear = this.zNear;
85
+ const zFar = this.zFar;
69
86
  const isOrthographic = projectionMatrix.elements[ 2 * 4 + 3 ] === 0;
70
87
 
71
88
  inverseProjectionMatrix.copy( projectionMatrix ).invert();
@@ -85,10 +102,10 @@ class CSMFrustum {
85
102
 
86
103
  } );
87
104
 
88
- this.vertices.far[ 0 ].set( 1, 1, 1 );
89
- this.vertices.far[ 1 ].set( 1, - 1, 1 );
90
- this.vertices.far[ 2 ].set( - 1, - 1, 1 );
91
- this.vertices.far[ 3 ].set( - 1, 1, 1 );
105
+ this.vertices.far[ 0 ].set( 1, 1, zFar );
106
+ this.vertices.far[ 1 ].set( 1, - 1, zFar );
107
+ this.vertices.far[ 2 ].set( - 1, - 1, zFar );
108
+ this.vertices.far[ 3 ].set( - 1, 1, zFar );
92
109
  this.vertices.far.forEach( function ( v ) {
93
110
 
94
111
  v.applyMatrix4( inverseProjectionMatrix );
@@ -128,6 +145,9 @@ class CSMFrustum {
128
145
 
129
146
  target.length = breaks.length;
130
147
 
148
+ const near = this.vertices.near[ 0 ].z;
149
+ const far = this.vertices.far[ 0 ].z;
150
+
131
151
  for ( let i = 0; i < breaks.length; i ++ ) {
132
152
 
133
153
  const cascade = target[ i ];
@@ -142,9 +162,11 @@ class CSMFrustum {
142
162
 
143
163
  } else {
144
164
 
165
+ const alpha = ( breaks[ i - 1 ] * far - near ) / ( far - near );
166
+
145
167
  for ( let j = 0; j < 4; j ++ ) {
146
168
 
147
- cascade.vertices.near[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i - 1 ] );
169
+ cascade.vertices.near[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], alpha );
148
170
 
149
171
  }
150
172
 
@@ -160,9 +182,11 @@ class CSMFrustum {
160
182
 
161
183
  } else {
162
184
 
185
+ const alpha = ( breaks[ i ] * far - near ) / ( far - near );
186
+
163
187
  for ( let j = 0; j < 4; j ++ ) {
164
188
 
165
- cascade.vertices.far[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i ] );
189
+ cascade.vertices.far[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], alpha );
166
190
 
167
191
  }
168
192
 
@@ -202,6 +226,7 @@ class CSMFrustum {
202
226
  *
203
227
  * @typedef {Object} CSMFrustum~Data
204
228
  * @property {boolean} [webGL] - Whether this CSM frustum is used with WebGL or WebGPU.
229
+ * @property {boolean} [reversedDepth] - Whether reversed depth buffer is enabled.
205
230
  * @property {Matrix4} [projectionMatrix] - A projection matrix usually of the scene's camera.
206
231
  * @property {number} [maxFar] - The maximum far value.
207
232
  **/
@@ -159,7 +159,10 @@ class CSMShadowNode extends ShadowBaseNode {
159
159
 
160
160
  this.camera = camera;
161
161
 
162
- const data = { webGL: renderer.coordinateSystem === WebGLCoordinateSystem };
162
+ const data = {
163
+ webGL: renderer.coordinateSystem === WebGLCoordinateSystem,
164
+ reversedDepth: renderer.reversedDepthBuffer
165
+ };
163
166
  this.mainFrustum = new CSMFrustum( data );
164
167
 
165
168
  const light = this.light;
@@ -119,6 +119,19 @@ class AsciiEffect {
119
119
 
120
120
  }
121
121
 
122
+ const htmlEscapes = {
123
+ '&': '&amp;',
124
+ '<': '&lt;',
125
+ '>': '&gt;',
126
+ };
127
+
128
+ const reUnescapedHtml = /[&<>]/g;
129
+
130
+ function escapeHTML( s ) {
131
+
132
+ return s.replace( reUnescapedHtml, ( ch ) => htmlEscapes[ ch ] );
133
+
134
+ }
122
135
 
123
136
  const strFont = 'courier new, monospace';
124
137
 
@@ -141,7 +154,7 @@ class AsciiEffect {
141
154
  let aCharList;
142
155
  if ( charSet ) {
143
156
 
144
- aCharList = ( charSet ).split( '' );
157
+ aCharList = ( charSet ).split( '' ).map( escapeHTML );
145
158
 
146
159
  } else {
147
160
 
@@ -15,9 +15,15 @@ import { Color, ColorManagement, SRGBColorSpace } from 'three';
15
15
  * inside of a glTF file. A normal glTF file can be converted to a Draco-compressed glTF file
16
16
  * using [glTF-Pipeline](https://github.com/AnalyticalGraphicsInc/gltf-pipeline).
17
17
  *
18
+ * The exporter requires the Draco encoder to be loaded as a global script in advance:
19
+ *
20
+ * ```html
21
+ * <script src="https://cdn.jsdelivr.net/gh/google/draco@1.5.7/javascript/draco_encoder.js"></script>
22
+ * ```
23
+ *
18
24
  * ```js
19
25
  * const exporter = new DRACOExporter();
20
- * const data = exporter.parse( mesh, options );
26
+ * const data = await exporter.parseAsync( mesh, options );
21
27
  * ```
22
28
  *
23
29
  * @three_import import { DRACOExporter } from 'three/addons/exporters/DRACOExporter.js';
@@ -27,11 +33,12 @@ class DRACOExporter {
27
33
  /**
28
34
  * Parses the given mesh or point cloud and generates the Draco output.
29
35
  *
36
+ * @async
30
37
  * @param {(Mesh|Points)} object - The mesh or point cloud to export.
31
38
  * @param {DRACOExporter~Options} options - The export options.
32
- * @return {Int8Array} The exported Draco.
39
+ * @return {Promise<Int8Array>} A Promise that resolves with the exported Draco.
33
40
  */
34
- parse( object, options = {} ) {
41
+ async parseAsync( object, options = {} ) {
35
42
 
36
43
  options = Object.assign( {
37
44
  decodeSpeed: 5,
@@ -43,7 +50,7 @@ class DRACOExporter {
43
50
  exportColor: false,
44
51
  }, options );
45
52
 
46
- if ( DracoEncoderModule === undefined ) {
53
+ if ( typeof DracoEncoderModule === 'undefined' ) {
47
54
 
48
55
  throw new Error( 'THREE.DRACOExporter: required the draco_encoder to work.' );
49
56
 
@@ -51,7 +58,12 @@ class DRACOExporter {
51
58
 
52
59
  const geometry = object.geometry;
53
60
 
54
- const dracoEncoder = DracoEncoderModule();
61
+ let dracoEncoder = DracoEncoderModule();
62
+
63
+ // older encoder builds expose the module synchronously, newer builds return a promise
64
+
65
+ if ( dracoEncoder.Encoder === undefined ) dracoEncoder = await dracoEncoder;
66
+
55
67
  const encoder = new dracoEncoder.Encoder();
56
68
  let builder;
57
69
  let dracoObject;
@@ -146,7 +158,7 @@ class DRACOExporter {
146
158
 
147
159
  } else {
148
160
 
149
- throw new Error( 'DRACOExporter: Unsupported object type.' );
161
+ throw new Error( 'THREE.DRACOExporter: Unsupported object type.' );
150
162
 
151
163
  }
152
164
 
@@ -222,6 +234,15 @@ class DRACOExporter {
222
234
 
223
235
  }
224
236
 
237
+ /**
238
+ * @deprecated Use {@link DRACOExporter#parseAsync} instead.
239
+ */
240
+ parse() {
241
+
242
+ throw new Error( 'THREE.DRACOExporter: parse() has been replaced by parseAsync().' );
243
+
244
+ }
245
+
225
246
  }
226
247
 
227
248
  function createVertexColorSRGBArray( attribute ) {