@gnsx/three 0.184.20 → 0.185.3

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 +1261 -926
  2. package/build/three.core.js +1104 -829
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +157 -97
  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 +7542 -3371
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +7542 -3370
  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 +67 -58
  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 +124 -91
  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 -74
  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 +92 -37
  232. package/src/nodes/lighting/PointShadowNode.js +7 -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 +21 -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 +42 -4
  259. package/src/renderers/common/RenderObject.js +73 -13
  260. package/src/renderers/common/Renderer.js +282 -109
  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 +11 -4
  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
@@ -117,12 +117,37 @@ export let wasm;
117
117
 
118
118
  export let isReady = false;
119
119
 
120
- export const ready = fetch(wasmDataURI)
121
- .then((res) => res.arrayBuffer())
122
- .then((buffer) => WebAssembly.instantiate(buffer, {
123
- './mikktspace_module_bg.js': {__wbindgen_string_new, __wbindgen_rethrow}
124
- }))
125
- .then((result) => {
126
- wasm = result.instance.exports;
127
- isReady = true;
128
- });
120
+ let readyPromise = null;
121
+
122
+ function initialize() {
123
+
124
+ return fetch( wasmDataURI )
125
+ .then( ( res ) => res.arrayBuffer() )
126
+ .then( ( buffer ) => WebAssembly.instantiate( buffer, {
127
+ './mikktspace_module_bg.js': { __wbindgen_string_new, __wbindgen_rethrow }
128
+ } ) )
129
+ .then( ( result ) => {
130
+
131
+ wasm = result.instance.exports;
132
+ isReady = true;
133
+
134
+ } );
135
+
136
+ }
137
+
138
+ export const ready = {
139
+ then: function ( onFulfilled, onRejected ) {
140
+
141
+ if ( readyPromise === null ) readyPromise = initialize();
142
+ return readyPromise.then( onFulfilled, onRejected );
143
+
144
+ }
145
+ };
146
+
147
+ export function dispose() {
148
+
149
+ wasm = null;
150
+ isReady = false;
151
+ readyPromise = null;
152
+
153
+ }
@@ -0,0 +1,55 @@
1
+ import { Lighting } from 'three/webgpu';
2
+ import ClusteredLightsNode from '../tsl/lighting/ClusteredLightsNode.js';
3
+
4
+ /**
5
+ * A custom lighting implementation based on Forward+ Clustered Shading that
6
+ * overwrites the default lighting system in {@link WebGPURenderer}. Suitable
7
+ * for 3D scenes with many point lights and real depth complexity — the view
8
+ * frustum is partitioned into a 3D cluster grid so only the lights actually
9
+ * reaching each fragment are evaluated.
10
+ *
11
+ * ```js
12
+ * const lighting = new ClusteredLighting();
13
+ * renderer.lighting = lighting; // set lighting system
14
+ * ```
15
+ *
16
+ * @augments Lighting
17
+ * @three_import import { ClusteredLighting } from 'three/addons/lighting/ClusteredLighting.js';
18
+ */
19
+ export class ClusteredLighting extends Lighting {
20
+
21
+ /**
22
+ * Constructs a new clustered lighting system.
23
+ *
24
+ * @param {number} [maxLights=1024] - Maximum number of point lights.
25
+ * @param {number} [tileSize=32] - Screen tile size in pixels (cluster XY size).
26
+ * @param {number} [zSlices=24] - Number of exponential depth slices.
27
+ * @param {number} [maxLightsPerCluster=64] - Per-cluster light-list capacity.
28
+ */
29
+ constructor( maxLights = 1024, tileSize = 32, zSlices = 24, maxLightsPerCluster = 64 ) {
30
+
31
+ super();
32
+
33
+ this.maxLights = maxLights;
34
+ this.tileSize = tileSize;
35
+ this.zSlices = zSlices;
36
+ this.maxLightsPerCluster = maxLightsPerCluster;
37
+
38
+ }
39
+
40
+ /**
41
+ * Creates a new clustered lights node for the given array of lights.
42
+ *
43
+ * This method is called internally by the renderer and must be overwritten by
44
+ * all custom lighting implementations.
45
+ *
46
+ * @param {Array<Light>} lights - The lights.
47
+ * @return {ClusteredLightsNode} The clustered lights node.
48
+ */
49
+ createNode( lights = [] ) {
50
+
51
+ return new ClusteredLightsNode( this.maxLights, this.tileSize, this.zSlices, this.maxLightsPerCluster ).setLights( lights );
52
+
53
+ }
54
+
55
+ }
@@ -80,8 +80,8 @@ let _batchTargetProbes = 0;
80
80
  // Reusable temp objects
81
81
  const _position = /*@__PURE__*/ new Vector3();
82
82
  const _size = /*@__PURE__*/ new Vector3();
83
- const _savedViewport = /*@__PURE__*/ new Vector4();
84
- const _savedScissor = /*@__PURE__*/ new Vector4();
83
+ const _currentViewport = /*@__PURE__*/ new Vector4();
84
+ const _currentScissor = /*@__PURE__*/ new Vector4();
85
85
 
86
86
  // Number of padding texels added at each boundary of every sub-volume in the atlas.
87
87
  const ATLAS_PADDING = 1;
@@ -90,6 +90,9 @@ const ATLAS_PADDING = 1;
90
90
  * A 3D grid of L2 Spherical Harmonic irradiance probes that provides
91
91
  * position-dependent diffuse global illumination.
92
92
  *
93
+ * Note that this class can only be used with {@link WebGLRenderer}.
94
+ * A version for {@link WebGPURenderer} will be added at a later point.
95
+ *
93
96
  * All seven packed SH sub-volumes are stored in a **single** RGBA
94
97
  * `WebGL3DRenderTarget` using a texture-atlas layout along the Z axis.
95
98
  * Each sub-volume occupies `( nz + 2 )` atlas slices: one padding slice at
@@ -99,11 +102,11 @@ const ATLAS_PADDING = 1;
99
102
  * Atlas layout (nz = resolution.z, PADDING = 1):
100
103
  * ```
101
104
  * slice 0 : padding (copy of sub-volume 0, data slice 0)
102
- * slices 1 … nz : sub-volume 0 data
105
+ * slices 1 �? nz : sub-volume 0 data
103
106
  * slice nz + 1 : padding (copy of sub-volume 0, data slice nz-1)
104
107
  * slice nz + 2 : padding (copy of sub-volume 1, data slice 0)
105
- * slices nz+3 … 2*nz+2 : sub-volume 1 data
106
- * …
108
+ * slices nz+3 �? 2*nz+2 : sub-volume 1 data
109
+ * �?
107
110
  * ```
108
111
  * Total atlas depth = `7 * ( nz + 2 )`.
109
112
  *
@@ -275,7 +278,10 @@ class LightProbeGrid extends Object3D {
275
278
 
276
279
  /**
277
280
  * Bakes all probes by rendering cubemaps at each probe position
278
- * and projecting to L2 SH. Fully GPU-resident with zero CPU readback.
281
+ * and projecting to L2 SH. Optionally iterates additional passes to
282
+ * capture indirect bounces �? each extra pass samples the previous pass's
283
+ * atlas as indirect light, so a grid added to the scene before baking
284
+ * accumulates one bounce per extra pass.
279
285
  *
280
286
  * @param {WebGLRenderer} renderer - The renderer.
281
287
  * @param {Scene} scene - The scene to render.
@@ -283,6 +289,7 @@ class LightProbeGrid extends Object3D {
283
289
  * @param {number} [options.cubemapSize=8] - Resolution of each cubemap face.
284
290
  * @param {number} [options.near=0.1] - Near plane for the cube camera.
285
291
  * @param {number} [options.far=100] - Far plane for the cube camera.
292
+ * @param {number} [options.bounces=0] - Additional bounce passes after the initial direct pass.
286
293
  * @param {boolean} [options.retainCubemaps=false] - Whether to retain the captured cube maps for visualization.
287
294
  * @return {Promise<void>} Resolves when baking has completed.
288
295
  */
@@ -303,40 +310,66 @@ class LightProbeGrid extends Object3D {
303
310
 
304
311
  } else { // !WITH_GENESYS
305
312
 
306
- const { cubeRenderTarget, cubeCamera } = _ensureBakeResources( options );
313
+ const { bounces = 0 } = options;
314
+ const { cubeRenderTarget, cubeCamera } = _ensureBakeResources( options );
315
+
316
+ this._ensureTextures();
317
+ this.updateBoundingBox();
318
+
319
+ const res = this.resolution;
320
+ const totalProbes = res.x * res.y * res.z;
321
+
322
+ // Batch render target for SH coefficients: 9 pixels wide, one row per probe
323
+ const batchTarget = _ensureBatchTarget( totalProbes );
324
+
325
+ // Save renderer state
326
+ const currentRenderTarget = renderer.getRenderTarget();
327
+ renderer.getViewport( _currentViewport );
328
+ renderer.getScissor( _currentScissor );
329
+ const currentScissorTest = renderer.getScissorTest();
307
330
 
308
- this._ensureTextures();
309
- this.updateBoundingBox();
331
+ // Scene is static across the bake �? update once and disable per-render auto updates.
332
+ const currentMatrixWorldAutoUpdate = scene.matrixWorldAutoUpdate;
333
+ if ( currentMatrixWorldAutoUpdate === true ) {
310
334
 
311
- const res = this.resolution;
312
- const totalProbes = res.x * res.y * res.z;
335
+ scene.updateMatrixWorld( true );
336
+ scene.matrixWorldAutoUpdate = false;
313
337
 
314
- // Batch render target for SH coefficients: 9 pixels wide, one row per probe
315
- const batchTarget = _ensureBatchTarget( totalProbes );
338
+ }
316
339
 
317
- // Save renderer state
318
- const savedRenderTarget = renderer.getRenderTarget();
319
- renderer.getViewport( _savedViewport );
320
- renderer.getScissor( _savedScissor );
321
- const savedScissorTest = renderer.getScissorTest();
340
+ // Disable shadow map auto-update across all passes �? lights don't move.
341
+ // Force a single shadow update on the first render so maps are initialized.
342
+ const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
343
+ renderer.shadowMap.autoUpdate = false;
344
+ renderer.shadowMap.needsUpdate = true;
322
345
 
323
- // Clear pooled batch target so skipped probes read as zero
324
- batchTarget.scissorTest = false;
325
- batchTarget.viewport.set( 0, 0, 9, totalProbes );
326
- renderer.setRenderTarget( batchTarget );
327
- renderer.clear();
346
+ _ensureRepackResources();
328
347
 
329
- // const t0 = performance.now();
348
+ const paddedSlices = res.z + 2 * ATLAS_PADDING;
349
+ const rt = this._renderTarget;
330
350
 
331
- // Phase 1: Render cubemaps and project to SH into batch target
332
- // Note: set viewport/scissor on the render target directly to avoid pixel ratio scaling
333
- batchTarget.scissorTest = true;
351
+ // const t0 = performance.now();
334
352
 
335
- // Disable shadow map auto-update during bake — lights don't move between probes.
336
- // Force one shadow update on the first render so maps are initialized.
337
- const savedShadowAutoUpdate = renderer.shadowMap.autoUpdate;
338
- renderer.shadowMap.autoUpdate = false;
339
- renderer.shadowMap.needsUpdate = true;
353
+ // Pass 0 captures direct light only (grid hidden, so probesSH is not sampled
354
+ // �? the atlas at this point may be uninitialized or hold a prior bake).
355
+ // Each subsequent pass keeps the grid visible so the cube cameras read the
356
+ // previous pass's atlas as indirect light, accumulating one bounce per pass.
357
+ // Phase 1 writes to the batch target and Phase 2 only swaps it into the atlas
358
+ // at the very end of each pass, which gives an implicit ping-pong for free.
359
+
360
+ for ( let pass = 0; pass <= bounces; pass ++ ) {
361
+
362
+ this.visible = pass > 0;
363
+
364
+ // Clear pooled batch target so skipped probes read as zero
365
+ batchTarget.scissorTest = false;
366
+ batchTarget.viewport.set( 0, 0, 9, totalProbes );
367
+ renderer.setRenderTarget( batchTarget );
368
+ renderer.clear();
369
+
370
+ // Phase 1: Render cubemaps and project to SH into batch target
371
+ // Note: set viewport/scissor on the render target directly to avoid pixel ratio scaling
372
+ batchTarget.scissorTest = true;
340
373
 
341
374
  // Initialize cube texture/render target arrays if retaining
342
375
  if ( retainCubemaps ) {
@@ -358,15 +391,15 @@ class LightProbeGrid extends Object3D {
358
391
 
359
392
  }
360
393
 
361
- for ( let iz = 0; iz < res.z; iz ++ ) {
394
+ for ( let iz = 0; iz < res.z; iz ++ ) {
362
395
 
363
- for ( let iy = 0; iy < res.y; iy ++ ) {
396
+ for ( let iy = 0; iy < res.y; iy ++ ) {
364
397
 
365
- for ( let ix = 0; ix < res.x; ix ++ ) {
398
+ for ( let ix = 0; ix < res.x; ix ++ ) {
366
399
 
367
- const probeIndex = ix + iy * res.x + iz * res.x * res.y;
400
+ const probeIndex = ix + iy * res.x + iz * res.x * res.y;
368
401
 
369
- this.getProbePosition( ix, iy, iz, _position );
402
+ this.getProbePosition( ix, iy, iz, _position );
370
403
 
371
404
  let envMapTexture = cubeRenderTarget.texture;
372
405
 
@@ -387,81 +420,81 @@ class LightProbeGrid extends Object3D {
387
420
 
388
421
  } else {
389
422
 
390
- cubeCamera.position.copy( _position );
391
- cubeCamera.update( renderer, scene );
423
+ cubeCamera.position.copy( _position );
424
+ cubeCamera.update( renderer, scene );
392
425
 
393
426
  }
394
427
 
395
- // SH projection
428
+ // SH projection
396
429
  _shMaterial.uniforms.envMap.value = envMapTexture;
397
- _mesh.material = _shMaterial;
398
- batchTarget.viewport.set( 0, probeIndex, 9, 1 );
399
- batchTarget.scissor.set( 0, probeIndex, 9, 1 );
400
- renderer.setRenderTarget( batchTarget );
401
- renderer.render( _scene, _camera );
402
-
403
- }
430
+ _mesh.material = _shMaterial;
431
+ batchTarget.viewport.set( 0, probeIndex, 9, 1 );
432
+ batchTarget.scissor.set( 0, probeIndex, 9, 1 );
433
+ renderer.setRenderTarget( batchTarget );
434
+ renderer.render( _scene, _camera );
404
435
 
405
436
  }
406
437
 
407
438
  }
408
439
 
409
- renderer.shadowMap.autoUpdate = savedShadowAutoUpdate;
440
+ }
410
441
 
411
- // Phase 2: Repack SH data from batch target into the atlas 3D texture (GPU-to-GPU).
412
- //
413
- // For each of the 7 packed sub-volumes (texture index t) we write:
414
- // - A leading padding slice (copy of data slice iz = 0)
415
- // - All nz data slices (iz = 0 … nz-1)
416
- // - A trailing padding slice (copy of data slice iz = nz-1)
417
- //
418
- // In the atlas the slices for sub-volume t occupy the range:
419
- // [ t * paddedSlices, t * paddedSlices + paddedSlices - 1 ]
420
- // where paddedSlices = nz + 2 * ATLAS_PADDING.
442
+ // Phase 2: Repack SH data from batch target into the atlas 3D texture (GPU-to-GPU).
443
+ //
444
+ // For each of the 7 packed sub-volumes (texture index t) we write:
445
+ // - A leading padding slice (copy of data slice iz = 0)
446
+ // - All nz data slices (iz = 0 �? nz-1)
447
+ // - A trailing padding slice (copy of data slice iz = nz-1)
448
+ //
449
+ // In the atlas the slices for sub-volume t occupy the range:
450
+ // [ t * paddedSlices, t * paddedSlices + paddedSlices - 1 ]
451
+ // where paddedSlices = nz + 2 * ATLAS_PADDING.
421
452
 
422
- _ensureRepackResources();
453
+ rt.scissorTest = false;
454
+ rt.viewport.set( 0, 0, res.x, res.y );
423
455
 
424
- const paddedSlices = res.z + 2 * ATLAS_PADDING;
425
- const rt = this._renderTarget;
426
- rt.scissorTest = false;
427
- rt.viewport.set( 0, 0, res.x, res.y );
456
+ for ( let t = 0; t < 7; t ++ ) {
428
457
 
429
- for ( let t = 0; t < 7; t ++ ) {
458
+ _repackMaterials[ t ].uniforms.batchTexture.value = batchTarget.texture;
459
+ _repackMaterials[ t ].uniforms.resolution.value.copy( res );
430
460
 
431
- _repackMaterials[ t ].uniforms.batchTexture.value = batchTarget.texture;
432
- _repackMaterials[ t ].uniforms.resolution.value.copy( res );
461
+ // Write data slices
462
+ for ( let iz = 0; iz < res.z; iz ++ ) {
433
463
 
434
- // Write data slices
435
- for ( let iz = 0; iz < res.z; iz ++ ) {
464
+ _repackMaterials[ t ].uniforms.sliceZ.value = iz;
465
+ _mesh.material = _repackMaterials[ t ];
466
+ renderer.setRenderTarget( rt, t * paddedSlices + ATLAS_PADDING + iz );
467
+ renderer.render( _scene, _camera );
436
468
 
437
- _repackMaterials[ t ].uniforms.sliceZ.value = iz;
438
- _mesh.material = _repackMaterials[ t ];
439
- renderer.setRenderTarget( rt, t * paddedSlices + ATLAS_PADDING + iz );
440
- renderer.render( _scene, _camera );
469
+ }
441
470
 
442
- }
471
+ // Leading padding: copy of data slice iz = 0
472
+ _repackMaterials[ t ].uniforms.sliceZ.value = 0;
473
+ _mesh.material = _repackMaterials[ t ];
474
+ renderer.setRenderTarget( rt, t * paddedSlices );
475
+ renderer.render( _scene, _camera );
443
476
 
444
- // Leading padding: copy of data slice iz = 0
445
- _repackMaterials[ t ].uniforms.sliceZ.value = 0;
446
- _mesh.material = _repackMaterials[ t ];
447
- renderer.setRenderTarget( rt, t * paddedSlices );
448
- renderer.render( _scene, _camera );
477
+ // Trailing padding: copy of data slice iz = nz - 1
478
+ _repackMaterials[ t ].uniforms.sliceZ.value = res.z - 1;
479
+ _mesh.material = _repackMaterials[ t ];
480
+ renderer.setRenderTarget( rt, t * paddedSlices + ATLAS_PADDING + res.z );
481
+ renderer.render( _scene, _camera );
449
482
 
450
- // Trailing padding: copy of data slice iz = nz - 1
451
- _repackMaterials[ t ].uniforms.sliceZ.value = res.z - 1;
452
- _mesh.material = _repackMaterials[ t ];
453
- renderer.setRenderTarget( rt, t * paddedSlices + ATLAS_PADDING + res.z );
454
- renderer.render( _scene, _camera );
483
+ }
455
484
 
456
- }
485
+ }
486
+
487
+ renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
488
+
489
+ // Restore renderer state
490
+ renderer.setRenderTarget( currentRenderTarget );
491
+ renderer.setViewport( _currentViewport );
492
+ renderer.setScissor( _currentScissor );
493
+ renderer.setScissorTest( currentScissorTest );
457
494
 
458
- // Restore renderer state
459
- renderer.setRenderTarget( savedRenderTarget );
460
- renderer.setViewport( _savedViewport );
461
- renderer.setScissor( _savedScissor );
462
- renderer.setScissorTest( savedScissorTest );
495
+ scene.matrixWorldAutoUpdate = currentMatrixWorldAutoUpdate;
463
496
 
464
- // console.log( `LightProbeGrid: bake complete ${ ( performance.now() - t0 ).toFixed( 1 ) }ms` );
497
+ // console.log( `LightProbeGrid: bake complete ${ ( performance.now() - t0 ).toFixed( 1 ) }ms` );
465
498
 
466
499
  }
467
500
 
@@ -1109,7 +1142,7 @@ function _ensureWebGPUComputeResources( cubemapSize, envMapTexture, atlasTexture
1109
1142
  totalWeight.addAssign( weight );
1110
1143
 
1111
1144
  const dir = coord.normalize();
1112
- // Pass explicit direction — omitting UV would default to reflectVector (needs camera).
1145
+ // Pass explicit direction �? omitting UV would default to reflectVector (needs camera).
1113
1146
  const cw = cubeTexture( envMapTexture, coord ).rgb.mul( weight );
1114
1147
 
1115
1148
  accum0.addAssign( cw.mul( 0.282095 ) );
@@ -10,7 +10,7 @@ UniformsLib.line = {
10
10
 
11
11
  worldUnits: { value: 1 },
12
12
  linewidth: { value: 1 },
13
- resolution: { value: new Vector2( 1, 1 ) },
13
+ resolution: { value: new Vector2() },
14
14
  dashOffset: { value: 0 },
15
15
  dashScale: { value: 1 },
16
16
  dashSize: { value: 1 },
@@ -70,18 +70,20 @@ ShaderLib[ 'line' ] = {
70
70
 
71
71
  #endif
72
72
 
73
- void trimSegment( const in vec4 start, inout vec4 end ) {
73
+ float trimSegmentAlpha( const in vec4 start, const in vec4 end ) {
74
74
 
75
- // trim end segment so it terminates between the camera plane and the near plane
75
+ // compute the interpolation factor needed to trim the segment so it terminates
76
+ // between the camera plane and the near plane
76
77
 
77
78
  // conservative estimate of the near plane
78
79
  float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column
79
80
  float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column
80
- float nearEstimate = - 0.5 * b / a;
81
81
 
82
- float alpha = ( nearEstimate - start.z ) / ( end.z - start.z );
82
+ // we need different nearEstimate formula for reversed and default depth buffer
83
+ // a is positive with a reversed depth buffer so it can be used for controlling the code flow
84
+ float nearEstimate = ( a > 0.0 ) ? ( - b / ( a + 1.0 ) ) : ( - 0.5 * b / a );
83
85
 
84
- end.xyz = mix( start.xyz, end.xyz, alpha );
86
+ return ( nearEstimate - start.z ) / ( end.z - start.z );
85
87
 
86
88
  }
87
89
 
@@ -93,19 +95,19 @@ ShaderLib[ 'line' ] = {
93
95
 
94
96
  #endif
95
97
 
96
- #ifdef USE_DASH
97
-
98
- vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;
99
- vUv = uv;
100
-
101
- #endif
102
-
103
98
  float aspect = resolution.x / resolution.y;
104
99
 
105
100
  // camera space
106
101
  vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );
107
102
  vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );
108
103
 
104
+ #ifdef USE_DASH
105
+
106
+ float lineDistanceStart = dashScale * instanceDistanceStart;
107
+ float lineDistanceEnd = dashScale * instanceDistanceEnd;
108
+
109
+ #endif
110
+
109
111
  #ifdef WORLD_UNITS
110
112
 
111
113
  worldStart = start.xyz;
@@ -128,16 +130,37 @@ ShaderLib[ 'line' ] = {
128
130
 
129
131
  if ( start.z < 0.0 && end.z >= 0.0 ) {
130
132
 
131
- trimSegment( start, end );
133
+ float alpha = trimSegmentAlpha( start, end );
134
+ end.xyz = mix( start.xyz, end.xyz, alpha );
135
+
136
+ #ifdef USE_DASH
137
+
138
+ lineDistanceEnd = mix( lineDistanceStart, lineDistanceEnd, alpha );
139
+
140
+ #endif
132
141
 
133
142
  } else if ( end.z < 0.0 && start.z >= 0.0 ) {
134
143
 
135
- trimSegment( end, start );
144
+ float alpha = trimSegmentAlpha( end, start );
145
+ start.xyz = mix( end.xyz, start.xyz, alpha );
146
+
147
+ #ifdef USE_DASH
148
+
149
+ lineDistanceStart = mix( lineDistanceEnd, lineDistanceStart, alpha );
150
+
151
+ #endif
136
152
 
137
153
  }
138
154
 
139
155
  }
140
156
 
157
+ #ifdef USE_DASH
158
+
159
+ vLineDistance = ( position.y < 0.5 ) ? lineDistanceStart : lineDistanceEnd;
160
+ vUv = uv;
161
+
162
+ #endif
163
+
141
164
  // clip space
142
165
  vec4 clipStart = projectionMatrix * start;
143
166
  vec4 clipEnd = projectionMatrix * end;
@@ -326,6 +326,14 @@ class LineSegments2 extends Mesh {
326
326
 
327
327
  }
328
328
 
329
+ // early out if no resolution has been set (line was not rendered yet)
330
+
331
+ if ( worldUnits === false && ( this.material.resolution.x === 0 || this.material.resolution.y === 0 ) ) {
332
+
333
+ return;
334
+
335
+ }
336
+
329
337
  const threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;
330
338
 
331
339
  _ray = raycaster.ray;
@@ -324,6 +324,14 @@ class LineSegments2 extends Mesh {
324
324
 
325
325
  }
326
326
 
327
+ // early out if no resolution has been set (line was not rendered yet)
328
+
329
+ if ( worldUnits === false && ( this._resolution.x === 0 || this._resolution.y === 0 ) ) {
330
+
331
+ return;
332
+
333
+ }
334
+
327
335
  const threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;
328
336
 
329
337
  _ray = raycaster.ray;
@@ -42,7 +42,7 @@ const _taskCache = new WeakMap();
42
42
  *
43
43
  * ```js
44
44
  * const loader = new Rhino3dmLoader();
45
- * loader.setLibraryPath( 'https://cdn.jsdelivr.net/npm/rhino3dm@8.0.1' );
45
+ * loader.setLibraryPath( 'https://cdn.jsdelivr.net/npm/rhino3dm@8.17.0/' );
46
46
  *
47
47
  * const object = await loader.loadAsync( 'models/3dm/Rhino_Logo.3dm' );
48
48
  * scene.add( object );