super-three 0.164.0 → 0.167.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 (416) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +1273 -503
  3. package/build/three.module.js +1269 -504
  4. package/build/three.module.min.js +1 -1
  5. package/build/three.webgpu.js +76086 -0
  6. package/build/three.webgpu.min.js +6 -0
  7. package/examples/jsm/Addons.js +2 -1
  8. package/examples/jsm/controls/TransformControls.js +1 -1
  9. package/examples/jsm/csm/CSMShader.js +4 -4
  10. package/examples/jsm/environments/RoomEnvironment.js +1 -5
  11. package/examples/jsm/exporters/GLTFExporter.js +8 -4
  12. package/examples/jsm/exporters/USDZExporter.js +6 -4
  13. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  14. package/examples/jsm/helpers/ViewHelper.js +75 -61
  15. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  16. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  17. package/examples/jsm/lines/LineMaterial.js +1 -15
  18. package/examples/jsm/lines/LineSegments2.js +15 -0
  19. package/examples/jsm/lines/Wireframe.js +16 -1
  20. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  21. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  22. package/examples/jsm/loaders/DRACOLoader.js +1 -1
  23. package/examples/jsm/loaders/FBXLoader.js +47 -58
  24. package/examples/jsm/loaders/GLTFLoader.js +12 -4
  25. package/examples/jsm/loaders/LDrawLoader.js +3 -2
  26. package/examples/jsm/loaders/MMDLoader.js +31 -12
  27. package/examples/jsm/loaders/MaterialXLoader.js +2 -9
  28. package/examples/jsm/loaders/USDZLoader.js +124 -76
  29. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  30. package/examples/jsm/loaders/VTKLoader.js +76 -3
  31. package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
  32. package/examples/jsm/modifiers/CurveModifier.js +11 -9
  33. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  34. package/examples/jsm/objects/InstancedPoints.js +2 -2
  35. package/examples/jsm/objects/Lensflare.js +2 -2
  36. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  37. package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
  38. package/examples/jsm/postprocessing/SSAOPass.js +6 -9
  39. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  40. package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
  41. package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
  42. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  43. package/examples/jsm/shaders/FXAAShader.js +0 -2
  44. package/examples/jsm/shaders/GTAOShader.js +1 -1
  45. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  46. package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
  47. package/examples/jsm/transpiler/TSLEncoder.js +17 -15
  48. package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
  49. package/examples/jsm/utils/GPUStatsPanel.js +2 -0
  50. package/examples/jsm/utils/SortUtils.js +8 -5
  51. package/package.json +9 -7
  52. package/src/Three.WebGPU.js +194 -0
  53. package/src/Three.js +2 -0
  54. package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
  55. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
  56. package/src/animation/tracks/StringKeyframeTrack.js +10 -1
  57. package/src/constants.js +4 -1
  58. package/src/core/Object3D.js +24 -22
  59. package/src/core/Raycaster.js +6 -2
  60. package/src/extras/TextureUtils.js +210 -0
  61. package/src/lights/Light.js +1 -0
  62. package/src/lights/LightShadow.js +5 -0
  63. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  64. package/src/loaders/FileLoader.js +4 -0
  65. package/src/loaders/LoaderUtils.js +3 -1
  66. package/src/loaders/ObjectLoader.js +34 -2
  67. package/src/materials/Material.js +13 -4
  68. package/src/math/Box2.js +4 -4
  69. package/src/math/Box3.js +6 -6
  70. package/src/math/ColorManagement.js +10 -0
  71. package/src/math/Matrix2.js +54 -0
  72. package/src/math/Vector4.js +13 -0
  73. package/{examples/jsm → src}/nodes/Nodes.js +39 -20
  74. package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
  75. package/src/nodes/accessors/BitangentNode.js +13 -0
  76. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
  77. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +6 -0
  78. package/src/nodes/accessors/CameraNode.js +19 -0
  79. package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
  80. package/src/nodes/accessors/InstanceNode.js +140 -0
  81. package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +24 -2
  82. package/{examples/jsm → src}/nodes/accessors/ModelNode.js +4 -0
  83. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
  84. package/src/nodes/accessors/NormalNode.js +14 -0
  85. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
  86. package/src/nodes/accessors/PositionNode.js +10 -0
  87. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +7 -1
  88. package/src/nodes/accessors/ReflectVectorNode.js +10 -0
  89. package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
  90. package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +28 -6
  91. package/src/nodes/accessors/TangentNode.js +23 -0
  92. package/src/nodes/accessors/Texture3DNode.js +100 -0
  93. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
  94. package/src/nodes/accessors/UVNode.js +3 -0
  95. package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
  96. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
  97. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
  98. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
  99. package/{examples/jsm → src}/nodes/core/AttributeNode.js +34 -8
  100. package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
  101. package/{examples/jsm → src}/nodes/core/ContextNode.js +6 -0
  102. package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
  103. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  104. package/src/nodes/core/MRTNode.js +76 -0
  105. package/{examples/jsm → src}/nodes/core/Node.js +33 -14
  106. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +194 -45
  107. package/src/nodes/core/NodeCache.js +36 -0
  108. package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
  109. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  110. package/{examples/jsm → src}/nodes/core/NodeKeywords.js +1 -1
  111. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  112. package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
  113. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +1 -5
  114. package/{examples/jsm → src}/nodes/core/PropertyNode.js +2 -0
  115. package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
  116. package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
  117. package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
  118. package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
  119. package/src/nodes/core/VaryingNode.js +104 -0
  120. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +24 -20
  121. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
  122. package/src/nodes/display/BloomNode.js +333 -0
  123. package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
  124. package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
  125. package/src/nodes/display/DenoiseNode.js +198 -0
  126. package/src/nodes/display/DepthOfFieldNode.js +119 -0
  127. package/src/nodes/display/DotScreenNode.js +75 -0
  128. package/src/nodes/display/FXAANode.js +327 -0
  129. package/src/nodes/display/FilmNode.js +52 -0
  130. package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
  131. package/src/nodes/display/GTAONode.js +324 -0
  132. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
  133. package/src/nodes/display/Lut3DNode.js +53 -0
  134. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
  135. package/src/nodes/display/PassNode.js +291 -0
  136. package/src/nodes/display/PixelationPassNode.js +201 -0
  137. package/src/nodes/display/RGBShiftNode.js +49 -0
  138. package/src/nodes/display/RenderOutputNode.js +56 -0
  139. package/src/nodes/display/SobelOperatorNode.js +121 -0
  140. package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
  141. package/src/nodes/display/TransitionNode.js +76 -0
  142. package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
  143. package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
  144. package/{examples/jsm → src}/nodes/display/ViewportNode.js +3 -2
  145. package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
  146. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
  147. package/src/nodes/functions/BSDF/LTC.js +131 -0
  148. package/src/nodes/functions/BasicLightingModel.js +78 -0
  149. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
  150. package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +103 -18
  151. package/src/nodes/functions/ToonLightingModel.js +51 -0
  152. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
  153. package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
  154. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
  155. package/src/nodes/lighting/AnalyticLightNode.js +333 -0
  156. package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
  157. package/src/nodes/lighting/BasicLightMapNode.js +29 -0
  158. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
  159. package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
  160. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
  161. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
  162. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
  163. package/{examples/jsm → src}/nodes/lighting/LightsNode.js +18 -3
  164. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
  165. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  166. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
  167. package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
  168. package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
  169. package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
  170. package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
  171. package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +4 -4
  172. package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
  173. package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
  174. package/{examples/jsm → src}/nodes/materials/Materials.js +3 -0
  175. package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
  176. package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
  177. package/src/nodes/materials/MeshMatcapNodeMaterial.js +53 -0
  178. package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
  179. package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
  180. package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +26 -8
  181. package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
  182. package/src/nodes/materials/MeshToonNodeMaterial.js +34 -0
  183. package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +97 -24
  184. package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
  185. package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
  186. package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
  187. package/src/nodes/materials/VolumeNodeMaterial.js +106 -0
  188. package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
  189. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
  190. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
  191. package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
  192. package/{examples/jsm → src}/nodes/math/HashNode.js +2 -2
  193. package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
  194. package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
  195. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  196. package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
  197. package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +57 -33
  198. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +1 -1
  199. package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
  200. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
  201. package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
  202. package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +1 -1
  203. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
  204. package/src/nodes/utils/RTTNode.js +130 -0
  205. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
  206. package/{examples/jsm → src}/nodes/utils/TimerNode.js +1 -1
  207. package/src/objects/BatchedMesh.js +232 -162
  208. package/src/objects/InstancedMesh.js +1 -1
  209. package/src/renderers/WebGLRenderer.js +312 -68
  210. package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
  211. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  212. package/{examples/jsm → src}/renderers/common/Background.js +9 -3
  213. package/src/renderers/common/BindGroup.js +16 -0
  214. package/{examples/jsm → src}/renderers/common/Bindings.js +54 -22
  215. package/src/renderers/common/ChainMap.js +59 -0
  216. package/{examples/jsm → src}/renderers/common/ClippingContext.js +8 -6
  217. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  218. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
  219. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  220. package/{examples/jsm → src}/renderers/common/Info.js +34 -6
  221. package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
  222. package/src/renderers/common/PostProcessing.js +87 -0
  223. package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
  224. package/src/renderers/common/RenderBundle.js +18 -0
  225. package/src/renderers/common/RenderBundles.js +38 -0
  226. package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
  227. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  228. package/{examples/jsm → src}/renderers/common/RenderList.js +9 -0
  229. package/{examples/jsm → src}/renderers/common/RenderObject.js +50 -11
  230. package/{examples/jsm → src}/renderers/common/Renderer.js +220 -40
  231. package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
  232. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  233. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  234. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  235. package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
  236. package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
  237. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  238. package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
  239. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  240. package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +19 -4
  241. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
  242. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  243. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  244. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  245. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  246. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
  247. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  248. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  249. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  250. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  251. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  252. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  253. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  254. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  255. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  256. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
  257. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  258. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
  259. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  260. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  261. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
  262. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  263. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  264. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  265. package/src/renderers/shaders/UniformsLib.js +3 -0
  266. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  267. package/src/renderers/webgl/WebGLBackground.js +6 -0
  268. package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
  269. package/src/renderers/webgl/WebGLExtensions.js +3 -1
  270. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
  271. package/src/renderers/webgl/WebGLLights.js +15 -12
  272. package/src/renderers/webgl/WebGLMaterials.js +1 -5
  273. package/src/renderers/webgl/WebGLMorphtargets.js +1 -2
  274. package/src/renderers/webgl/WebGLProgram.js +28 -31
  275. package/src/renderers/webgl/WebGLPrograms.js +15 -15
  276. package/src/renderers/webgl/WebGLRenderStates.js +2 -2
  277. package/src/renderers/webgl/WebGLTextures.js +100 -70
  278. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  279. package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
  280. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
  281. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +188 -41
  282. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
  283. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
  284. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  285. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
  286. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +126 -7
  287. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
  288. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +212 -78
  289. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
  290. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +245 -49
  291. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  292. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  293. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +30 -14
  294. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +9 -1
  295. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +74 -24
  296. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +101 -25
  297. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
  298. package/src/renderers/webxr/WebXRDepthSensing.js +9 -3
  299. package/src/renderers/webxr/WebXRManager.js +12 -2
  300. package/src/textures/CompressedArrayTexture.js +14 -0
  301. package/src/textures/DataArrayTexture.js +14 -0
  302. package/src/textures/DepthTexture.js +1 -3
  303. package/src/utils.js +30 -1
  304. package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  305. package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  306. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
  307. package/examples/jsm/nodes/accessors/NormalNode.js +0 -106
  308. package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  309. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  310. package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
  311. package/examples/jsm/nodes/accessors/UVNode.js +0 -47
  312. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  313. package/examples/jsm/nodes/core/VaryingNode.js +0 -65
  314. package/examples/jsm/nodes/display/PassNode.js +0 -199
  315. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -255
  316. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  317. package/examples/jsm/renderers/common/ChainMap.js +0 -89
  318. package/examples/jsm/renderers/common/PostProcessing.js +0 -33
  319. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  320. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  321. /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
  322. /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
  323. /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
  324. /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
  325. /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
  326. /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
  327. /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
  328. /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
  329. /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
  330. /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
  331. /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
  332. /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
  333. /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
  334. /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
  335. /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
  336. /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
  337. /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
  338. /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
  339. /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
  340. /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
  341. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  342. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  343. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  344. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  345. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  346. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  347. /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
  348. /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
  349. /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
  350. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  351. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  352. /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
  353. /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
  354. /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
  355. /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
  356. /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
  357. /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
  358. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
  359. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
  360. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
  361. /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
  362. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
  363. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
  364. /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
  365. /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
  366. /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
  367. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
  368. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
  369. /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
  370. /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
  371. /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
  372. /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
  373. /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
  374. /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
  375. /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
  376. /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
  377. /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
  378. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  379. /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
  380. /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
  381. /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
  382. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  383. /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
  384. /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
  385. /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
  386. /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
  387. /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
  388. /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
  389. /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
  390. /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
  391. /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
  392. /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
  393. /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
  394. /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
  395. /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
  396. /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
  397. /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
  398. /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
  399. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  400. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  401. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  402. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  403. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  404. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  405. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  406. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  407. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  408. /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
  409. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  410. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  411. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  412. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  413. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
  414. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  415. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
  416. /package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +0 -0
@@ -1,25 +1,11 @@
1
- /**
2
- * parameters = {
3
- * color: <hex>,
4
- * linewidth: <float>,
5
- * dashed: <boolean>,
6
- * dashScale: <float>,
7
- * dashSize: <float>,
8
- * dashOffset: <float>,
9
- * gapSize: <float>,
10
- * resolution: <Vector2>, // to be set by renderer
11
- * }
12
- */
13
-
14
1
  import {
15
2
  ShaderLib,
16
3
  ShaderMaterial,
17
4
  UniformsLib,
18
5
  UniformsUtils,
19
- Vector2
6
+ Vector2,
20
7
  } from 'three';
21
8
 
22
-
23
9
  UniformsLib.line = {
24
10
 
25
11
  worldUnits: { value: 1 },
@@ -13,6 +13,8 @@ import {
13
13
  import { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';
14
14
  import { LineMaterial } from '../lines/LineMaterial.js';
15
15
 
16
+ const _viewport = new Vector4();
17
+
16
18
  const _start = new Vector3();
17
19
  const _end = new Vector3();
18
20
 
@@ -356,6 +358,19 @@ class LineSegments2 extends Mesh {
356
358
 
357
359
  }
358
360
 
361
+ onBeforeRender( renderer ) {
362
+
363
+ const uniforms = this.material.uniforms;
364
+
365
+ if ( uniforms && uniforms.resolution ) {
366
+
367
+ renderer.getViewport( _viewport );
368
+ this.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );
369
+
370
+ }
371
+
372
+ }
373
+
359
374
  }
360
375
 
361
376
  export { LineSegments2 };
@@ -2,13 +2,15 @@ import {
2
2
  InstancedInterleavedBuffer,
3
3
  InterleavedBufferAttribute,
4
4
  Mesh,
5
- Vector3
5
+ Vector3,
6
+ Vector4
6
7
  } from 'three';
7
8
  import { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';
8
9
  import { LineMaterial } from '../lines/LineMaterial.js';
9
10
 
10
11
  const _start = new Vector3();
11
12
  const _end = new Vector3();
13
+ const _viewport = new Vector4();
12
14
 
13
15
  class Wireframe extends Mesh {
14
16
 
@@ -51,6 +53,19 @@ class Wireframe extends Mesh {
51
53
 
52
54
  }
53
55
 
56
+ onBeforeRender( renderer ) {
57
+
58
+ const uniforms = this.material.uniforms;
59
+
60
+ if ( uniforms && uniforms.resolution ) {
61
+
62
+ renderer.getViewport( _viewport );
63
+ this.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );
64
+
65
+ }
66
+
67
+ }
68
+
54
69
  }
55
70
 
56
71
  export { Wireframe };
@@ -0,0 +1,20 @@
1
+ import { LineSegments2 } from './LineSegments2.js';
2
+ import { LineGeometry } from '../LineGeometry.js';
3
+
4
+ import { Line2NodeMaterial } from 'three';
5
+
6
+ class Line2 extends LineSegments2 {
7
+
8
+ constructor( geometry = new LineGeometry(), material = new Line2NodeMaterial( { color: Math.random() * 0xffffff } ) ) {
9
+
10
+ super( geometry, material );
11
+
12
+ this.isLine2 = true;
13
+
14
+ this.type = 'Line2';
15
+
16
+ }
17
+
18
+ }
19
+
20
+ export { Line2 };
@@ -0,0 +1,376 @@
1
+ import {
2
+ Box3,
3
+ InstancedInterleavedBuffer,
4
+ InterleavedBufferAttribute,
5
+ Line3,
6
+ MathUtils,
7
+ Matrix4,
8
+ Mesh,
9
+ Sphere,
10
+ Vector3,
11
+ Vector4,
12
+ Line2NodeMaterial
13
+ } from 'three';
14
+ import { LineSegmentsGeometry } from '../../lines/LineSegmentsGeometry.js';
15
+
16
+ const _viewport = new Vector4();
17
+
18
+ const _start = new Vector3();
19
+ const _end = new Vector3();
20
+
21
+ const _start4 = new Vector4();
22
+ const _end4 = new Vector4();
23
+
24
+ const _ssOrigin = new Vector4();
25
+ const _ssOrigin3 = new Vector3();
26
+ const _mvMatrix = new Matrix4();
27
+ const _line = new Line3();
28
+ const _closestPoint = new Vector3();
29
+
30
+ const _box = new Box3();
31
+ const _sphere = new Sphere();
32
+ const _clipToWorldVector = new Vector4();
33
+
34
+ let _ray, _lineWidth;
35
+
36
+ // Returns the margin required to expand by in world space given the distance from the camera,
37
+ // line width, resolution, and camera projection
38
+ function getWorldSpaceHalfWidth( camera, distance, resolution ) {
39
+
40
+ // transform into clip space, adjust the x and y values by the pixel width offset, then
41
+ // transform back into world space to get world offset. Note clip space is [-1, 1] so full
42
+ // width does not need to be halved.
43
+ _clipToWorldVector.set( 0, 0, - distance, 1.0 ).applyMatrix4( camera.projectionMatrix );
44
+ _clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
45
+ _clipToWorldVector.x = _lineWidth / resolution.width;
46
+ _clipToWorldVector.y = _lineWidth / resolution.height;
47
+ _clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );
48
+ _clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
49
+
50
+ return Math.abs( Math.max( _clipToWorldVector.x, _clipToWorldVector.y ) );
51
+
52
+ }
53
+
54
+ function raycastWorldUnits( lineSegments, intersects ) {
55
+
56
+ const matrixWorld = lineSegments.matrixWorld;
57
+ const geometry = lineSegments.geometry;
58
+ const instanceStart = geometry.attributes.instanceStart;
59
+ const instanceEnd = geometry.attributes.instanceEnd;
60
+ const segmentCount = Math.min( geometry.instanceCount, instanceStart.count );
61
+
62
+ for ( let i = 0, l = segmentCount; i < l; i ++ ) {
63
+
64
+ _line.start.fromBufferAttribute( instanceStart, i );
65
+ _line.end.fromBufferAttribute( instanceEnd, i );
66
+
67
+ _line.applyMatrix4( matrixWorld );
68
+
69
+ const pointOnLine = new Vector3();
70
+ const point = new Vector3();
71
+
72
+ _ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );
73
+ const isInside = point.distanceTo( pointOnLine ) < _lineWidth * 0.5;
74
+
75
+ if ( isInside ) {
76
+
77
+ intersects.push( {
78
+ point,
79
+ pointOnLine,
80
+ distance: _ray.origin.distanceTo( point ),
81
+ object: lineSegments,
82
+ face: null,
83
+ faceIndex: i,
84
+ uv: null,
85
+ uv1: null,
86
+ } );
87
+
88
+ }
89
+
90
+ }
91
+
92
+ }
93
+
94
+ function raycastScreenSpace( lineSegments, camera, intersects ) {
95
+
96
+ const projectionMatrix = camera.projectionMatrix;
97
+ const material = lineSegments.material;
98
+ const resolution = material.resolution;
99
+ const matrixWorld = lineSegments.matrixWorld;
100
+
101
+ const geometry = lineSegments.geometry;
102
+ const instanceStart = geometry.attributes.instanceStart;
103
+ const instanceEnd = geometry.attributes.instanceEnd;
104
+ const segmentCount = Math.min( geometry.instanceCount, instanceStart.count );
105
+
106
+ const near = - camera.near;
107
+
108
+ //
109
+
110
+ // pick a point 1 unit out along the ray to avoid the ray origin
111
+ // sitting at the camera origin which will cause "w" to be 0 when
112
+ // applying the projection matrix.
113
+ _ray.at( 1, _ssOrigin );
114
+
115
+ // ndc space [ - 1.0, 1.0 ]
116
+ _ssOrigin.w = 1;
117
+ _ssOrigin.applyMatrix4( camera.matrixWorldInverse );
118
+ _ssOrigin.applyMatrix4( projectionMatrix );
119
+ _ssOrigin.multiplyScalar( 1 / _ssOrigin.w );
120
+
121
+ // screen space
122
+ _ssOrigin.x *= resolution.x / 2;
123
+ _ssOrigin.y *= resolution.y / 2;
124
+ _ssOrigin.z = 0;
125
+
126
+ _ssOrigin3.copy( _ssOrigin );
127
+
128
+ _mvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld );
129
+
130
+ for ( let i = 0, l = segmentCount; i < l; i ++ ) {
131
+
132
+ _start4.fromBufferAttribute( instanceStart, i );
133
+ _end4.fromBufferAttribute( instanceEnd, i );
134
+
135
+ _start4.w = 1;
136
+ _end4.w = 1;
137
+
138
+ // camera space
139
+ _start4.applyMatrix4( _mvMatrix );
140
+ _end4.applyMatrix4( _mvMatrix );
141
+
142
+ // skip the segment if it's entirely behind the camera
143
+ const isBehindCameraNear = _start4.z > near && _end4.z > near;
144
+ if ( isBehindCameraNear ) {
145
+
146
+ continue;
147
+
148
+ }
149
+
150
+ // trim the segment if it extends behind camera near
151
+ if ( _start4.z > near ) {
152
+
153
+ const deltaDist = _start4.z - _end4.z;
154
+ const t = ( _start4.z - near ) / deltaDist;
155
+ _start4.lerp( _end4, t );
156
+
157
+ } else if ( _end4.z > near ) {
158
+
159
+ const deltaDist = _end4.z - _start4.z;
160
+ const t = ( _end4.z - near ) / deltaDist;
161
+ _end4.lerp( _start4, t );
162
+
163
+ }
164
+
165
+ // clip space
166
+ _start4.applyMatrix4( projectionMatrix );
167
+ _end4.applyMatrix4( projectionMatrix );
168
+
169
+ // ndc space [ - 1.0, 1.0 ]
170
+ _start4.multiplyScalar( 1 / _start4.w );
171
+ _end4.multiplyScalar( 1 / _end4.w );
172
+
173
+ // screen space
174
+ _start4.x *= resolution.x / 2;
175
+ _start4.y *= resolution.y / 2;
176
+
177
+ _end4.x *= resolution.x / 2;
178
+ _end4.y *= resolution.y / 2;
179
+
180
+ // create 2d segment
181
+ _line.start.copy( _start4 );
182
+ _line.start.z = 0;
183
+
184
+ _line.end.copy( _end4 );
185
+ _line.end.z = 0;
186
+
187
+ // get closest point on ray to segment
188
+ const param = _line.closestPointToPointParameter( _ssOrigin3, true );
189
+ _line.at( param, _closestPoint );
190
+
191
+ // check if the intersection point is within clip space
192
+ const zPos = MathUtils.lerp( _start4.z, _end4.z, param );
193
+ const isInClipSpace = zPos >= - 1 && zPos <= 1;
194
+
195
+ const isInside = _ssOrigin3.distanceTo( _closestPoint ) < _lineWidth * 0.5;
196
+
197
+ if ( isInClipSpace && isInside ) {
198
+
199
+ _line.start.fromBufferAttribute( instanceStart, i );
200
+ _line.end.fromBufferAttribute( instanceEnd, i );
201
+
202
+ _line.start.applyMatrix4( matrixWorld );
203
+ _line.end.applyMatrix4( matrixWorld );
204
+
205
+ const pointOnLine = new Vector3();
206
+ const point = new Vector3();
207
+
208
+ _ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );
209
+
210
+ intersects.push( {
211
+ point: point,
212
+ pointOnLine: pointOnLine,
213
+ distance: _ray.origin.distanceTo( point ),
214
+ object: lineSegments,
215
+ face: null,
216
+ faceIndex: i,
217
+ uv: null,
218
+ uv1: null,
219
+ } );
220
+
221
+ }
222
+
223
+ }
224
+
225
+ }
226
+
227
+ class LineSegments2 extends Mesh {
228
+
229
+ constructor( geometry = new LineSegmentsGeometry(), material = new Line2NodeMaterial( { color: Math.random() * 0xffffff } ) ) {
230
+
231
+ super( geometry, material );
232
+
233
+ this.isLineSegments2 = true;
234
+
235
+ this.type = 'LineSegments2';
236
+
237
+ }
238
+
239
+ // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
240
+
241
+ computeLineDistances() {
242
+
243
+ const geometry = this.geometry;
244
+
245
+ const instanceStart = geometry.attributes.instanceStart;
246
+ const instanceEnd = geometry.attributes.instanceEnd;
247
+ const lineDistances = new Float32Array( 2 * instanceStart.count );
248
+
249
+ for ( let i = 0, j = 0, l = instanceStart.count; i < l; i ++, j += 2 ) {
250
+
251
+ _start.fromBufferAttribute( instanceStart, i );
252
+ _end.fromBufferAttribute( instanceEnd, i );
253
+
254
+ lineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];
255
+ lineDistances[ j + 1 ] = lineDistances[ j ] + _start.distanceTo( _end );
256
+
257
+ }
258
+
259
+ const instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1
260
+
261
+ geometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0
262
+ geometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1
263
+
264
+ return this;
265
+
266
+ }
267
+
268
+ raycast( raycaster, intersects ) {
269
+
270
+ const worldUnits = this.material.worldUnits;
271
+ const camera = raycaster.camera;
272
+
273
+ if ( camera === null && ! worldUnits ) {
274
+
275
+ console.error( 'LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.' );
276
+
277
+ }
278
+
279
+ const threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;
280
+
281
+ _ray = raycaster.ray;
282
+
283
+ const matrixWorld = this.matrixWorld;
284
+ const geometry = this.geometry;
285
+ const material = this.material;
286
+
287
+ _lineWidth = material.linewidth + threshold;
288
+
289
+ // check if we intersect the sphere bounds
290
+ if ( geometry.boundingSphere === null ) {
291
+
292
+ geometry.computeBoundingSphere();
293
+
294
+ }
295
+
296
+ _sphere.copy( geometry.boundingSphere ).applyMatrix4( matrixWorld );
297
+
298
+ // increase the sphere bounds by the worst case line screen space width
299
+ let sphereMargin;
300
+ if ( worldUnits ) {
301
+
302
+ sphereMargin = _lineWidth * 0.5;
303
+
304
+ } else {
305
+
306
+ const distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( _ray.origin ) );
307
+ sphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, material.resolution );
308
+
309
+ }
310
+
311
+ _sphere.radius += sphereMargin;
312
+
313
+ if ( _ray.intersectsSphere( _sphere ) === false ) {
314
+
315
+ return;
316
+
317
+ }
318
+
319
+ // check if we intersect the box bounds
320
+ if ( geometry.boundingBox === null ) {
321
+
322
+ geometry.computeBoundingBox();
323
+
324
+ }
325
+
326
+ _box.copy( geometry.boundingBox ).applyMatrix4( matrixWorld );
327
+
328
+ // increase the box bounds by the worst case line width
329
+ let boxMargin;
330
+ if ( worldUnits ) {
331
+
332
+ boxMargin = _lineWidth * 0.5;
333
+
334
+ } else {
335
+
336
+ const distanceToBox = Math.max( camera.near, _box.distanceToPoint( _ray.origin ) );
337
+ boxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, material.resolution );
338
+
339
+ }
340
+
341
+ _box.expandByScalar( boxMargin );
342
+
343
+ if ( _ray.intersectsBox( _box ) === false ) {
344
+
345
+ return;
346
+
347
+ }
348
+
349
+ if ( worldUnits ) {
350
+
351
+ raycastWorldUnits( this, intersects );
352
+
353
+ } else {
354
+
355
+ raycastScreenSpace( this, camera, intersects );
356
+
357
+ }
358
+
359
+ }
360
+
361
+ onBeforeRender( renderer ) {
362
+
363
+ const uniforms = this.material.uniforms;
364
+
365
+ if ( uniforms && uniforms.resolution ) {
366
+
367
+ renderer.getViewport( _viewport );
368
+ this.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );
369
+
370
+ }
371
+
372
+ }
373
+
374
+ }
375
+
376
+ export { LineSegments2 };
@@ -85,7 +85,7 @@ class DRACOLoader extends Loader {
85
85
 
86
86
  parse( buffer, onLoad, onError = ()=>{} ) {
87
87
 
88
- this.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace ).catch( onError );
88
+ this.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace, onError ).catch( onError );
89
89
 
90
90
  }
91
91
 
@@ -407,72 +407,50 @@ class FBXTreeParser {
407
407
  // load a texture specified as a blob or data URI, or via an external URL using TextureLoader
408
408
  loadTexture( textureNode, images ) {
409
409
 
410
- let fileName;
411
-
412
- const currentPath = this.textureLoader.path;
413
-
414
- const children = connections.get( textureNode.id ).children;
410
+ const nonNativeExtensions = new Set( [ 'tga', 'tif', 'tiff', 'exr', 'dds', 'hdr', 'ktx2' ] );
415
411
 
416
- if ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) {
417
-
418
- fileName = images[ children[ 0 ].ID ];
412
+ const extension = textureNode.FileName.split( '.' ).pop().toLowerCase();
419
413
 
420
- if ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) {
414
+ const loader = nonNativeExtensions.has( extension ) ? this.manager.getHandler( `.${extension}` ) : this.textureLoader;
421
415
 
422
- this.textureLoader.setPath( undefined );
416
+ if ( ! loader ) {
423
417
 
424
- }
418
+ console.warn(
419
+ `FBXLoader: ${extension.toUpperCase()} loader not found, creating placeholder texture for`,
420
+ textureNode.RelativeFilename
421
+ );
422
+ return new Texture();
425
423
 
426
424
  }
427
425
 
428
- let texture;
429
-
430
- const extension = textureNode.FileName.slice( - 3 ).toLowerCase();
431
-
432
- if ( extension === 'tga' ) {
433
-
434
- const loader = this.manager.getHandler( '.tga' );
426
+ const loaderPath = loader.path;
435
427
 
436
- if ( loader === null ) {
428
+ if ( ! loaderPath ) {
437
429
 
438
- console.warn( 'FBXLoader: TGA loader not found, creating placeholder texture for', textureNode.RelativeFilename );
439
- texture = new Texture();
430
+ loader.setPath( this.textureLoader.path );
440
431
 
441
- } else {
442
-
443
- loader.setPath( this.textureLoader.path );
444
- texture = loader.load( fileName );
445
-
446
- }
432
+ }
447
433
 
448
- } else if ( extension === 'dds' ) {
434
+ const children = connections.get( textureNode.id ).children;
449
435
 
450
- const loader = this.manager.getHandler( '.dds' );
436
+ let fileName;
451
437
 
452
- if ( loader === null ) {
438
+ if ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) {
453
439
 
454
- console.warn( 'FBXLoader: DDS loader not found, creating placeholder texture for', textureNode.RelativeFilename );
455
- texture = new Texture();
440
+ fileName = images[ children[ 0 ].ID ];
456
441
 
457
- } else {
442
+ if ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) {
458
443
 
459
- loader.setPath( this.textureLoader.path );
460
- texture = loader.load( fileName );
444
+ loader.setPath( undefined );
461
445
 
462
446
  }
463
447
 
464
- } else if ( extension === 'psd' ) {
465
-
466
- console.warn( 'FBXLoader: PSD textures are not supported, creating placeholder texture for', textureNode.RelativeFilename );
467
- texture = new Texture();
468
-
469
- } else {
470
-
471
- texture = this.textureLoader.load( fileName );
472
-
473
448
  }
474
449
 
475
- this.textureLoader.setPath( currentPath );
450
+ const texture = loader.load( fileName );
451
+
452
+ // revert to initial path
453
+ loader.setPath( loaderPath );
476
454
 
477
455
  return texture;
478
456
 
@@ -2051,14 +2029,18 @@ class GeometryParser {
2051
2029
  // Triangulate n-gon using earcut
2052
2030
 
2053
2031
  const vertices = [];
2054
-
2032
+ // in morphing scenario vertexPositions represent morphPositions
2033
+ // while baseVertexPositions represent the original geometry's positions
2034
+ const positions = geoInfo.baseVertexPositions || geoInfo.vertexPositions;
2055
2035
  for ( let i = 0; i < facePositionIndexes.length; i += 3 ) {
2056
2036
 
2057
- vertices.push( new Vector3(
2058
- geoInfo.vertexPositions[ facePositionIndexes[ i ] ],
2059
- geoInfo.vertexPositions[ facePositionIndexes[ i + 1 ] ],
2060
- geoInfo.vertexPositions[ facePositionIndexes[ i + 2 ] ]
2061
- ) );
2037
+ vertices.push(
2038
+ new Vector3(
2039
+ positions[ facePositionIndexes[ i ] ],
2040
+ positions[ facePositionIndexes[ i + 1 ] ],
2041
+ positions[ facePositionIndexes[ i + 2 ] ]
2042
+ )
2043
+ );
2062
2044
 
2063
2045
  }
2064
2046
 
@@ -2071,6 +2053,12 @@ class GeometryParser {
2071
2053
 
2072
2054
  }
2073
2055
 
2056
+ // When vertices is an array of [0,0,0] elements (which is the case for vertices not participating in morph)
2057
+ // the triangulationInput will be an array of [0,0] elements
2058
+ // resulting in an array of 0 triangles being returned from ShapeUtils.triangulateShape
2059
+ // leading to not pushing into buffers.vertex the redundant vertices (the vertices that are not morphed).
2060
+ // That's why, in order to support morphing scenario, "positions" is looking first for baseVertexPositions,
2061
+ // so that we don't end up with an array of 0 triangles for the faces not participating in morph.
2074
2062
  triangles = ShapeUtils.triangulateShape( triangulationInput, [] );
2075
2063
 
2076
2064
  } else {
@@ -2225,17 +2213,18 @@ class GeometryParser {
2225
2213
  // Normal and position attributes only have data for the vertices that are affected by the morph
2226
2214
  genMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, name ) {
2227
2215
 
2228
- const vertexIndices = ( parentGeoNode.PolygonVertexIndex !== undefined ) ? parentGeoNode.PolygonVertexIndex.a : [];
2216
+ const basePositions = parentGeoNode.Vertices !== undefined ? parentGeoNode.Vertices.a : [];
2217
+ const baseIndices = parentGeoNode.PolygonVertexIndex !== undefined ? parentGeoNode.PolygonVertexIndex.a : [];
2229
2218
 
2230
- const morphPositionsSparse = ( morphGeoNode.Vertices !== undefined ) ? morphGeoNode.Vertices.a : [];
2231
- const indices = ( morphGeoNode.Indexes !== undefined ) ? morphGeoNode.Indexes.a : [];
2219
+ const morphPositionsSparse = morphGeoNode.Vertices !== undefined ? morphGeoNode.Vertices.a : [];
2220
+ const morphIndices = morphGeoNode.Indexes !== undefined ? morphGeoNode.Indexes.a : [];
2232
2221
 
2233
2222
  const length = parentGeo.attributes.position.count * 3;
2234
2223
  const morphPositions = new Float32Array( length );
2235
2224
 
2236
- for ( let i = 0; i < indices.length; i ++ ) {
2225
+ for ( let i = 0; i < morphIndices.length; i ++ ) {
2237
2226
 
2238
- const morphIndex = indices[ i ] * 3;
2227
+ const morphIndex = morphIndices[ i ] * 3;
2239
2228
 
2240
2229
  morphPositions[ morphIndex ] = morphPositionsSparse[ i * 3 ];
2241
2230
  morphPositions[ morphIndex + 1 ] = morphPositionsSparse[ i * 3 + 1 ];
@@ -2245,9 +2234,9 @@ class GeometryParser {
2245
2234
 
2246
2235
  // TODO: add morph normal support
2247
2236
  const morphGeoInfo = {
2248
- vertexIndices: vertexIndices,
2237
+ vertexIndices: baseIndices,
2249
2238
  vertexPositions: morphPositions,
2250
-
2239
+ baseVertexPositions: basePositions
2251
2240
  };
2252
2241
 
2253
2242
  const morphBuffers = this.genBuffers( morphGeoInfo );