@unikia/upe-renderer 0.186.110 → 0.187.11

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 (506) hide show
  1. package/README.md +5 -7
  2. package/UPSTREAM.md +4 -4
  3. package/build/three.core.js +853 -277
  4. package/build/three.module.js +1098 -1280
  5. package/build/three.tsl.js +41938 -686
  6. package/build/three.webgpu.js +10604 -49055
  7. package/build/three.webgpu.nodes.js +9249 -5788
  8. package/examples/jsm/Addons.js +2 -0
  9. package/examples/jsm/animation/CCDIKSolver.js +17 -5
  10. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  11. package/examples/jsm/controls/OrbitControls.js +27 -14
  12. package/examples/jsm/csm/CSMShader.js +74 -3
  13. package/examples/jsm/curves/CurveExtras.js +4 -4
  14. package/examples/jsm/curves/NURBSCurve.js +14 -0
  15. package/examples/jsm/exporters/EXRExporter.js +673 -16
  16. package/examples/jsm/exporters/GLTFExporter.js +4 -4
  17. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  18. package/examples/jsm/exporters/OBJExporter.js +48 -5
  19. package/examples/jsm/exporters/PLYExporter.js +22 -11
  20. package/examples/jsm/generators/CityGenerator.js +3 -2
  21. package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
  22. package/examples/jsm/gpgpu/BitonicSort.js +30 -23
  23. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
  24. package/examples/jsm/inspector/Extension.js +1 -1
  25. package/examples/jsm/inspector/Inspector.js +6 -46
  26. package/examples/jsm/inspector/RendererInspector.js +43 -8
  27. package/examples/jsm/inspector/Storage.js +49 -0
  28. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
  29. package/examples/jsm/inspector/tabs/Parameters.js +5 -1
  30. package/examples/jsm/inspector/tabs/Performance.js +22 -7
  31. package/examples/jsm/inspector/tabs/Settings.js +1 -1
  32. package/examples/jsm/inspector/tabs/Timeline.js +83 -7
  33. package/examples/jsm/inspector/tabs/Viewer.js +25 -10
  34. package/examples/jsm/inspector/ui/Profiler.js +1 -1
  35. package/examples/jsm/inspector/ui/Style.js +21 -53
  36. package/examples/jsm/inspector/ui/Values.js +28 -3
  37. package/examples/jsm/libs/fflate.module.js +83 -56
  38. package/examples/jsm/libs/mikktspace.README.md +27 -0
  39. package/examples/jsm/libs/mikktspace.module.js +721 -109
  40. package/examples/jsm/lighting/ClusteredLighting.js +100 -2
  41. package/examples/jsm/lighting/LightMapper.js +295 -0
  42. package/examples/jsm/lighting/LightProbeGrid.js +242 -139
  43. package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
  44. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
  45. package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
  46. package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
  47. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
  48. package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
  49. package/examples/jsm/lights/SunLight.js +9 -4
  50. package/examples/jsm/lights/SunLightNode.js +3 -3
  51. package/examples/jsm/lines/LineMaterial.js +26 -10
  52. package/examples/jsm/loaders/3DMLoader.js +10 -1
  53. package/examples/jsm/loaders/3MFLoader.js +5 -1
  54. package/examples/jsm/loaders/AMFLoader.js +2 -0
  55. package/examples/jsm/loaders/BVHLoader.js +2 -0
  56. package/examples/jsm/loaders/ColladaLoader.js +8 -0
  57. package/examples/jsm/loaders/DDSLoader.js +1 -1
  58. package/examples/jsm/loaders/DRACOLoader.js +5 -1
  59. package/examples/jsm/loaders/EXRLoader.js +120 -104
  60. package/examples/jsm/loaders/FBXLoader.js +4 -0
  61. package/examples/jsm/loaders/FontLoader.js +2 -0
  62. package/examples/jsm/loaders/GCodeLoader.js +5 -9
  63. package/examples/jsm/loaders/GLTFLoader.js +112 -31
  64. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
  65. package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
  66. package/examples/jsm/loaders/IESLoader.js +46 -12
  67. package/examples/jsm/loaders/JXLLoader.js +159 -0
  68. package/examples/jsm/loaders/KMZLoader.js +6 -0
  69. package/examples/jsm/loaders/KSPLATLoader.js +2 -0
  70. package/examples/jsm/loaders/KTX2Loader.js +49 -4
  71. package/examples/jsm/loaders/KTXLoader.js +5 -3
  72. package/examples/jsm/loaders/LDrawLoader.js +15 -22
  73. package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
  74. package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
  75. package/examples/jsm/loaders/LUTImageLoader.js +2 -0
  76. package/examples/jsm/loaders/LWOLoader.js +6 -0
  77. package/examples/jsm/loaders/MD2Loader.js +2 -0
  78. package/examples/jsm/loaders/MDDLoader.js +4 -0
  79. package/examples/jsm/loaders/MTLLoader.js +8 -0
  80. package/examples/jsm/loaders/MaterialXLoader.js +57 -5
  81. package/examples/jsm/loaders/NRRDLoader.js +4 -2
  82. package/examples/jsm/loaders/OBJLoader.js +10 -4
  83. package/examples/jsm/loaders/PCDLoader.js +6 -2
  84. package/examples/jsm/loaders/PDBLoader.js +5 -3
  85. package/examples/jsm/loaders/PLYLoader.js +39 -15
  86. package/examples/jsm/loaders/PVRLoader.js +2 -2
  87. package/examples/jsm/loaders/SPLATLoader.js +2 -0
  88. package/examples/jsm/loaders/SPZLoader.js +2 -0
  89. package/examples/jsm/loaders/STLLoader.js +3 -1
  90. package/examples/jsm/loaders/SVGLoader.js +27 -49
  91. package/examples/jsm/loaders/TDSLoader.js +4 -0
  92. package/examples/jsm/loaders/TGALoader.js +6 -5
  93. package/examples/jsm/loaders/TTFLoader.js +2 -0
  94. package/examples/jsm/loaders/USDLoader.js +14 -0
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
  96. package/examples/jsm/loaders/VOXLoader.js +3 -0
  97. package/examples/jsm/loaders/VRMLLoader.js +4 -0
  98. package/examples/jsm/loaders/VTKLoader.js +2 -0
  99. package/examples/jsm/loaders/XYZLoader.js +2 -0
  100. package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
  101. package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
  102. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
  103. package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
  104. package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
  105. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
  106. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
  107. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
  108. package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
  109. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
  110. package/examples/jsm/loaders/usd/USDAParser.js +56 -47
  111. package/examples/jsm/loaders/usd/USDComposer.js +25 -30
  112. package/examples/jsm/math/ColorConverter.js +7 -3
  113. package/examples/jsm/math/Lut.js +2 -2
  114. package/examples/jsm/math/OBB.js +3 -3
  115. package/examples/jsm/math/Octree.js +20 -17
  116. package/examples/jsm/objects/GaussianSplat.js +5 -4
  117. package/examples/jsm/objects/Reflector.js +5 -0
  118. package/examples/jsm/objects/SkyMesh.js +14 -7
  119. package/examples/jsm/objects/Water2Mesh.js +2 -2
  120. package/examples/jsm/physics/RapierPhysics.js +2 -2
  121. package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
  122. package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
  123. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  124. package/examples/jsm/postprocessing/GTAOPass.js +26 -18
  125. package/examples/jsm/renderers/SVGRenderer.js +3 -2
  126. package/examples/jsm/shaders/GTAOShader.js +7 -4
  127. package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
  128. package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
  129. package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
  130. package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
  131. package/examples/jsm/tsl/display/BloomNode.js +3 -3
  132. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
  133. package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
  134. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  135. package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
  136. package/examples/jsm/tsl/display/FSR1Node.js +3 -3
  137. package/examples/jsm/tsl/display/FXAANode.js +3 -10
  138. package/examples/jsm/tsl/display/FilmNode.js +3 -3
  139. package/examples/jsm/tsl/display/GTAONode.js +33 -25
  140. package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
  141. package/examples/jsm/tsl/display/GodraysNode.js +5 -19
  142. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
  143. package/examples/jsm/tsl/display/LensflareNode.js +3 -3
  144. package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
  145. package/examples/jsm/tsl/display/OITPassNode.js +0 -11
  146. package/examples/jsm/tsl/display/OutlineNode.js +107 -5
  147. package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
  148. package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
  149. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
  150. package/examples/jsm/tsl/display/SMAANode.js +3 -3
  151. package/examples/jsm/tsl/display/SSAONode.js +6 -20
  152. package/examples/jsm/tsl/display/SSGINode.js +36 -29
  153. package/examples/jsm/tsl/display/SSRNode.js +135 -63
  154. package/examples/jsm/tsl/display/SSSNode.js +6 -20
  155. package/examples/jsm/tsl/display/SharpenNode.js +3 -3
  156. package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
  157. package/examples/jsm/tsl/display/TAAUNode.js +10 -42
  158. package/examples/jsm/tsl/display/TRAANode.js +11 -43
  159. package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
  160. package/examples/jsm/tsl/display/TransitionNode.js +3 -3
  161. package/examples/jsm/tsl/display/lensDirt.js +30 -0
  162. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
  163. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
  164. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
  165. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
  166. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
  167. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
  168. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
  169. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
  170. package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
  171. package/examples/jsm/tsl/utils/Raymarching.js +1 -1
  172. package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
  173. package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
  174. package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
  175. package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
  176. package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
  177. package/examples/jsm/utils/SceneOptimizer.js +2 -1
  178. package/examples/jsm/utils/SceneUtils.js +1 -1
  179. package/examples/jsm/utils/unwrapUVs.js +865 -0
  180. package/examples/jsm/webxr/XREstimatedLight.js +11 -4
  181. package/package.json +3 -3
  182. package/src/Three.TSL.js +2 -683
  183. package/src/Three.WebGPU.Nodes.js +2 -1
  184. package/src/Three.WebGPU.js +2 -1
  185. package/src/animation/AnimationAction.js +1 -1
  186. package/src/animation/AnimationUtils.js +1 -3
  187. package/src/animation/KeyframeTrack.js +19 -0
  188. package/src/cameras/ArrayCamera.js +12 -0
  189. package/src/cameras/CubeCamera.js +3 -3
  190. package/src/constants.js +1 -9
  191. package/src/core/BufferAttribute.js +57 -21
  192. package/src/core/BufferGeometry.js +5 -13
  193. package/src/core/Clock.js +1 -1
  194. package/src/core/InterleavedBuffer.js +28 -18
  195. package/src/core/InterleavedBufferAttribute.js +54 -20
  196. package/src/core/Object3D.js +19 -9
  197. package/src/core/Raycaster.js +2 -0
  198. package/src/core/RenderTarget.js +11 -5
  199. package/src/core/UniformsGroup.js +7 -3
  200. package/src/extras/PMREMGenerator.js +392 -685
  201. package/src/extras/core/Curve.js +4 -0
  202. package/src/extras/core/CurvePath.js +13 -0
  203. package/src/extras/core/ShapePath.js +1 -1
  204. package/src/geometries/EdgesGeometry.js +12 -10
  205. package/src/geometries/LatheGeometry.js +2 -0
  206. package/src/helpers/PolarGridHelper.js +1 -1
  207. package/src/lights/Light.js +11 -0
  208. package/src/lights/LightProbe.js +2 -0
  209. package/src/lights/LightShadow.js +2 -0
  210. package/src/loaders/AnimationLoader.js +2 -0
  211. package/src/loaders/AudioLoader.js +2 -0
  212. package/src/loaders/BufferGeometryLoader.js +2 -0
  213. package/src/loaders/CompressedTextureLoader.js +2 -0
  214. package/src/loaders/CubeTextureLoader.js +2 -0
  215. package/src/loaders/DataTextureLoader.js +2 -0
  216. package/src/loaders/FileLoader.js +2 -0
  217. package/src/loaders/ImageBitmapLoader.js +3 -1
  218. package/src/loaders/ImageLoader.js +1 -0
  219. package/src/loaders/Loader.js +47 -0
  220. package/src/loaders/MaterialLoader.js +2 -0
  221. package/src/loaders/ObjectLoader.js +27 -8
  222. package/src/loaders/TextureLoader.js +5 -3
  223. package/src/loaders/nodes/NodeLoader.js +2 -0
  224. package/src/materials/Material.js +21 -2
  225. package/src/materials/MeshDepthMaterial.js +1 -1
  226. package/src/materials/MeshDistanceMaterial.js +1 -1
  227. package/src/materials/MeshLambertMaterial.js +1 -1
  228. package/src/materials/MeshMatcapMaterial.js +1 -1
  229. package/src/materials/MeshNormalMaterial.js +1 -1
  230. package/src/materials/MeshPhongMaterial.js +1 -1
  231. package/src/materials/MeshPhysicalMaterial.js +90 -11
  232. package/src/materials/MeshStandardMaterial.js +1 -1
  233. package/src/materials/MeshToonMaterial.js +1 -1
  234. package/src/materials/nodes/Line2NodeMaterial.js +32 -10
  235. package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
  236. package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
  237. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
  238. package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
  239. package/src/materials/nodes/NodeMaterial.js +36 -16
  240. package/src/materials/nodes/NodeMaterialInstance.js +193 -0
  241. package/src/materials/nodes/NodeMaterials.js +1 -0
  242. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  243. package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
  244. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
  245. package/src/math/Box3.js +2 -2
  246. package/src/math/Color.js +8 -8
  247. package/src/math/ColorManagement.js +2 -21
  248. package/src/math/FrustumArray.js +12 -0
  249. package/src/math/Interpolant.js +1 -1
  250. package/src/math/Line3.js +2 -4
  251. package/src/math/MathUtils.js +33 -46
  252. package/src/math/Matrix2.js +1 -1
  253. package/src/math/Matrix3.js +1 -1
  254. package/src/math/Matrix4.js +1 -1
  255. package/src/math/Triangle.js +2 -1
  256. package/src/math/Vector2.js +1 -1
  257. package/src/math/Vector3.js +1 -1
  258. package/src/math/Vector4.js +1 -1
  259. package/src/nodes/Nodes.js +1 -0
  260. package/src/nodes/TSL.js +2 -0
  261. package/src/nodes/accessors/Arrays.js +1 -1
  262. package/src/nodes/accessors/Batch.js +29 -23
  263. package/src/nodes/accessors/BufferAttributeNode.js +21 -1
  264. package/src/nodes/accessors/BuiltinNode.js +6 -0
  265. package/src/nodes/accessors/Camera.js +100 -93
  266. package/src/nodes/accessors/ClippingNode.js +17 -6
  267. package/src/nodes/accessors/CubeTextureNode.js +12 -24
  268. package/src/nodes/accessors/Instance.js +198 -160
  269. package/src/nodes/accessors/Lights.js +19 -6
  270. package/src/nodes/accessors/MaterialNode.js +33 -4
  271. package/src/nodes/accessors/Morph.js +81 -22
  272. package/src/nodes/accessors/Normal.js +0 -42
  273. package/src/nodes/accessors/Object3DNode.js +6 -0
  274. package/src/nodes/accessors/PointUVNode.js +6 -0
  275. package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
  276. package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
  277. package/src/nodes/accessors/ReferenceNode.js +6 -0
  278. package/src/nodes/accessors/Skinning.js +57 -52
  279. package/src/nodes/accessors/StorageBufferNode.js +3 -12
  280. package/src/nodes/accessors/TextureBicubic.js +30 -27
  281. package/src/nodes/accessors/TextureNode.js +164 -78
  282. package/src/nodes/accessors/TextureSizeNode.js +6 -0
  283. package/src/nodes/accessors/UniformArrayNode.js +8 -15
  284. package/src/nodes/accessors/VelocityNode.js +13 -8
  285. package/src/nodes/code/CodeNode.js +6 -0
  286. package/src/nodes/code/ExpressionNode.js +6 -0
  287. package/src/nodes/code/FunctionCallNode.js +3 -3
  288. package/src/nodes/code/FunctionNode.js +15 -13
  289. package/src/nodes/core/ArrayNode.js +3 -3
  290. package/src/nodes/core/AssignNode.js +10 -9
  291. package/src/nodes/core/AttributeNode.js +39 -0
  292. package/src/nodes/core/BypassNode.js +6 -0
  293. package/src/nodes/core/ConstNode.js +31 -1
  294. package/src/nodes/core/ContextNode.js +11 -6
  295. package/src/nodes/core/IndexNode.js +6 -0
  296. package/src/nodes/core/InputNode.js +6 -0
  297. package/src/nodes/core/InspectorNode.js +17 -31
  298. package/src/nodes/core/IsolateNode.js +8 -0
  299. package/src/nodes/core/Node.js +367 -67
  300. package/src/nodes/core/NodeBuilder.js +664 -222
  301. package/src/nodes/core/NodeUtils.js +25 -0
  302. package/src/nodes/core/NodeVar.js +10 -1
  303. package/src/nodes/core/OutputStructNode.js +6 -0
  304. package/src/nodes/core/OverrideContextNode.js +38 -37
  305. package/src/nodes/core/PropertyNode.js +14 -0
  306. package/src/nodes/core/StackNode.js +33 -21
  307. package/src/nodes/core/StructNode.js +6 -0
  308. package/src/nodes/core/StructTypeNode.js +6 -0
  309. package/src/nodes/core/SubBuildNode.js +8 -0
  310. package/src/nodes/core/TempNode.js +10 -35
  311. package/src/nodes/core/UniformGroupNode.js +6 -0
  312. package/src/nodes/core/VarNode.js +43 -135
  313. package/src/nodes/core/VaryingNode.js +33 -2
  314. package/src/nodes/display/BlendModes.js +5 -40
  315. package/src/nodes/display/BumpMapNode.js +17 -7
  316. package/src/nodes/display/ColorAdjustment.js +22 -10
  317. package/src/nodes/display/ColorSpaceFunctions.js +2 -14
  318. package/src/nodes/display/ColorSpaceNode.js +3 -3
  319. package/src/nodes/display/FrontFacingNode.js +6 -0
  320. package/src/nodes/display/NormalMapNode.js +3 -3
  321. package/src/nodes/display/PassNode.js +75 -16
  322. package/src/nodes/display/RenderOutputNode.js +22 -5
  323. package/src/nodes/display/ScreenNode.js +6 -0
  324. package/src/nodes/display/ToneMappingFunctions.js +9 -51
  325. package/src/nodes/display/ToneMappingNode.js +3 -3
  326. package/src/nodes/display/ToonOutlinePassNode.js +66 -2
  327. package/src/nodes/display/ViewportDepthNode.js +34 -4
  328. package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
  329. package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
  330. package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
  331. package/src/nodes/functions/BSDF/D_GGX.js +1 -8
  332. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
  333. package/src/nodes/functions/BSDF/LTC.js +20 -47
  334. package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
  335. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
  336. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
  337. package/src/nodes/functions/PhysicalLightingModel.js +84 -51
  338. package/src/nodes/functions/VolumetricLightingModel.js +1 -1
  339. package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
  340. package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
  341. package/src/nodes/functions/material/getRoughness.js +3 -1
  342. package/src/nodes/geometry/RangeNode.js +52 -69
  343. package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
  344. package/src/nodes/gpgpu/BarrierNode.js +6 -0
  345. package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
  346. package/src/nodes/gpgpu/ComputeNode.js +6 -0
  347. package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
  348. package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
  349. package/src/nodes/lighting/AnalyticLightNode.js +7 -14
  350. package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
  351. package/src/nodes/lighting/EnvironmentNode.js +58 -8
  352. package/src/nodes/lighting/IESSpotLightNode.js +19 -4
  353. package/src/nodes/lighting/LightProbeNode.js +2 -1
  354. package/src/nodes/lighting/LightUtils.js +2 -2
  355. package/src/nodes/lighting/LightingNode.js +6 -0
  356. package/src/nodes/lighting/LightsNode.js +26 -32
  357. package/src/nodes/lighting/PointShadowNode.js +92 -48
  358. package/src/nodes/lighting/ProjectorLightNode.js +1 -1
  359. package/src/nodes/lighting/RectAreaLightNode.js +13 -14
  360. package/src/nodes/lighting/ShadowBaseNode.js +9 -17
  361. package/src/nodes/lighting/ShadowFilterNode.js +26 -3
  362. package/src/nodes/lighting/ShadowNode.js +13 -11
  363. package/src/nodes/materialx/MaterialXColor.js +2 -14
  364. package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
  365. package/src/nodes/materialx/MaterialXNodes.js +8 -11
  366. package/src/nodes/materialx/MaterialXNoise.js +195 -454
  367. package/src/nodes/math/BitcastNode.js +5 -5
  368. package/src/nodes/math/BitcountNode.js +18 -46
  369. package/src/nodes/math/ConditionalNode.js +92 -22
  370. package/src/nodes/math/Hash.js +1 -1
  371. package/src/nodes/math/MathNode.js +86 -64
  372. package/src/nodes/math/MathUtils.js +2 -2
  373. package/src/nodes/math/OperatorNode.js +42 -59
  374. package/src/nodes/math/PackFloatNode.js +9 -9
  375. package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
  376. package/src/nodes/math/TriNoise3D.js +3 -23
  377. package/src/nodes/math/UnpackFloatNode.js +9 -9
  378. package/src/nodes/pmrem/PMREMNode.js +38 -75
  379. package/src/nodes/pmrem/PMREMUtils.js +108 -272
  380. package/src/nodes/procedural/Checker.js +1 -1
  381. package/src/nodes/tsl/TSLCore.js +199 -74
  382. package/src/nodes/utils/ArrayElementNode.js +19 -1
  383. package/src/nodes/utils/CubeMapNode.js +3 -3
  384. package/src/nodes/utils/DebugNode.js +2 -2
  385. package/src/nodes/utils/EventNode.js +6 -0
  386. package/src/nodes/utils/FlipNode.js +3 -3
  387. package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
  388. package/src/nodes/utils/JoinNode.js +3 -3
  389. package/src/nodes/utils/LoopNode.js +14 -9
  390. package/src/nodes/utils/MemberNode.js +18 -0
  391. package/src/nodes/utils/PostProcessingUtils.js +20 -25
  392. package/src/nodes/utils/RTTNode.js +2 -0
  393. package/src/nodes/utils/ReflectorNode.js +24 -0
  394. package/src/nodes/utils/RotateNode.js +3 -3
  395. package/src/nodes/utils/SampleNode.js +6 -0
  396. package/src/nodes/utils/SetNode.js +3 -3
  397. package/src/nodes/utils/SplitNode.js +6 -0
  398. package/src/nodes/utils/UVUtils.js +2 -2
  399. package/src/objects/BatchedMesh.js +146 -15
  400. package/src/objects/InstancedMesh.js +12 -4
  401. package/src/objects/Line.js +20 -0
  402. package/src/objects/Mesh.js +8 -0
  403. package/src/objects/Points.js +20 -0
  404. package/src/objects/Skeleton.js +26 -0
  405. package/src/objects/SkinnedMesh.js +3 -3
  406. package/src/objects/Sprite.js +10 -0
  407. package/src/renderers/WebGLRenderer.js +104 -70
  408. package/src/renderers/common/Animation.js +5 -1
  409. package/src/renderers/common/Attributes.js +67 -57
  410. package/src/renderers/common/Backend.js +78 -3
  411. package/src/renderers/common/BindGroup.js +11 -0
  412. package/src/renderers/common/Binding.js +0 -11
  413. package/src/renderers/common/Bindings.js +116 -10
  414. package/src/renderers/common/Buffer.js +1 -1
  415. package/src/renderers/common/ClippingContext.js +12 -1
  416. package/src/renderers/common/ComputePipeline.js +17 -1
  417. package/src/renderers/common/DirectRenderPipeline.js +7 -3
  418. package/src/renderers/common/Geometries.js +170 -132
  419. package/src/renderers/common/Info.js +1 -1
  420. package/src/renderers/common/InspectorBase.js +5 -5
  421. package/src/renderers/common/Lighting.js +59 -0
  422. package/src/renderers/common/Pipelines.js +26 -12
  423. package/src/renderers/common/ProgrammableStage.js +1 -17
  424. package/src/renderers/common/RenderContext.js +21 -0
  425. package/src/renderers/common/RenderContexts.js +13 -4
  426. package/src/renderers/common/RenderObject.js +111 -35
  427. package/src/renderers/common/RenderObjects.js +37 -19
  428. package/src/renderers/common/Renderer.js +537 -295
  429. package/src/renderers/common/RendererUtils.js +15 -0
  430. package/src/renderers/common/StandardDrawingPipeline.js +343 -0
  431. package/src/renderers/common/Storage3DTexture.js +11 -0
  432. package/src/renderers/common/StorageArrayTexture.js +10 -0
  433. package/src/renderers/common/StorageTexture.js +0 -9
  434. package/src/renderers/common/Textures.js +144 -37
  435. package/src/renderers/common/UniformsGroup.js +19 -0
  436. package/src/renderers/common/XRManager.js +10 -91
  437. package/src/renderers/common/extras/PMREMGenerator.js +298 -576
  438. package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
  439. package/src/renderers/common/nodes/NodeLibrary.js +11 -35
  440. package/src/renderers/common/nodes/NodeManager.js +80 -31
  441. package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
  442. package/src/renderers/common/nodes/NodeSampler.js +14 -0
  443. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  444. package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
  445. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
  446. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
  447. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
  448. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
  452. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
  453. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
  454. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
  456. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
  457. package/src/renderers/shaders/ShaderChunk.js +0 -2
  458. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
  459. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  461. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
  462. package/src/renderers/shaders/ShaderLib.js +3 -0
  463. package/src/renderers/shaders/UniformsLib.js +4 -5
  464. package/src/renderers/webgl/WebGLBackground.js +3 -3
  465. package/src/renderers/webgl/WebGLBindingStates.js +4 -2
  466. package/src/renderers/webgl/WebGLCapabilities.js +7 -1
  467. package/src/renderers/webgl/WebGLEnvironments.js +2 -2
  468. package/src/renderers/webgl/WebGLGeometries.js +42 -14
  469. package/src/renderers/webgl/WebGLMaterials.js +15 -2
  470. package/src/renderers/webgl/WebGLOutput.js +37 -1
  471. package/src/renderers/webgl/WebGLProgram.js +13 -54
  472. package/src/renderers/webgl/WebGLPrograms.js +22 -8
  473. package/src/renderers/webgl/WebGLRenderStates.js +11 -8
  474. package/src/renderers/webgl/WebGLShadowMap.js +6 -4
  475. package/src/renderers/webgl/WebGLState.js +10 -6
  476. package/src/renderers/webgl/WebGLTextures.js +129 -77
  477. package/src/renderers/webgl/WebGLUniforms.js +44 -6
  478. package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
  479. package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
  480. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
  481. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
  482. package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
  483. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
  484. package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
  485. package/src/renderers/webgpu/WebGPUBackend.js +140 -82
  486. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  487. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
  488. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
  489. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
  490. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
  491. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
  492. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
  493. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
  494. package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
  495. package/src/renderers/webxr/WebXRController.js +3 -3
  496. package/src/renderers/webxr/WebXRManager.js +5 -90
  497. package/src/scenes/Scene.js +4 -4
  498. package/src/textures/CompressedTexture.js +2 -2
  499. package/src/textures/DepthTexture.js +2 -2
  500. package/src/textures/FramebufferTexture.js +11 -0
  501. package/src/textures/Texture.js +29 -1
  502. package/src/textures/TextureSource.js +1 -1
  503. package/src/upe.js +1 -1
  504. package/src/utils.js +4 -4
  505. package/examples/jsm/libs/surfaceNet.js +0 -201
  506. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
@@ -55,6 +55,8 @@ class MTLLoader extends Loader {
55
55
  const path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;
56
56
 
57
57
  const loader = new FileLoader( this.manager );
58
+ loader.setPriority( this.priority );
59
+ loader.setCache( this.cache );
58
60
  loader.setPath( this.path );
59
61
  loader.setRequestHeader( this.requestHeader );
60
62
  loader.setWithCredentials( this.withCredentials );
@@ -158,6 +160,8 @@ class MTLLoader extends Loader {
158
160
  const materialCreator = new MaterialCreator( this.resourcePath || path, this.materialOptions );
159
161
  materialCreator.setCrossOrigin( this.crossOrigin );
160
162
  materialCreator.setManager( this.manager );
163
+ materialCreator.priority = this.priority;
164
+ materialCreator.cache = this.cache;
161
165
  materialCreator.setMaterials( materialsInfo );
162
166
  return materialCreator;
163
167
 
@@ -187,6 +191,8 @@ class MaterialCreator {
187
191
  this.nameLookup = {};
188
192
 
189
193
  this.crossOrigin = 'anonymous';
194
+ this.priority = 'auto';
195
+ this.cache = 'default';
190
196
 
191
197
  this.side = ( this.options.side !== undefined ) ? this.options.side : FrontSide;
192
198
  this.wrap = ( this.options.wrap !== undefined ) ? this.options.wrap : RepeatWrapping;
@@ -575,6 +581,8 @@ class MaterialCreator {
575
581
  if ( loader === null ) {
576
582
 
577
583
  loader = new TextureLoader( manager );
584
+ loader.setPriority( this.priority );
585
+ loader.setCache( this.cache );
578
586
 
579
587
  }
580
588
 
@@ -82,7 +82,7 @@ class MaterialXLoader extends Loader {
82
82
  */
83
83
  load( url, onLoad, onProgress, onError, options = {} ) {
84
84
 
85
- const _onError = function ( e ) {
85
+ const _onError = ( e ) => {
86
86
 
87
87
  if ( onError ) {
88
88
 
@@ -94,16 +94,37 @@ class MaterialXLoader extends Loader {
94
94
 
95
95
  }
96
96
 
97
+ this.manager.itemError( url );
98
+ this.manager.itemEnd( url );
99
+
97
100
  };
98
101
 
102
+ // Keep the LoadingManager active until parsing and dependent resources
103
+ // have finished, matching the lifecycle used by GLTFLoader.
104
+ this.manager.itemStart( url );
105
+
99
106
  new FileLoader( this.manager )
107
+ .setPriority( this.priority )
108
+ .setCache( this.cache )
100
109
  .setPath( this.path )
110
+ .setRequestHeader( this.requestHeader )
111
+ .setWithCredentials( this.withCredentials )
101
112
  .setResponseType( 'arraybuffer' )
102
113
  .load( url, ( data ) => {
103
114
 
104
115
  try {
105
116
 
106
- onLoad( this.parseBuffer( data, url, options ) );
117
+ const parsed = this._parseBuffer( data, url, options );
118
+
119
+ parsed.document.waitForResources().then( () => {
120
+
121
+ parsed.result.errors = parsed.log.errors;
122
+ parsed.result.warnings = parsed.log.warnings;
123
+ this._throwOnErrors( parsed.log, options );
124
+ onLoad( parsed.result );
125
+ this.manager.itemEnd( url );
126
+
127
+ } ).catch( _onError );
107
128
 
108
129
  } catch ( e ) {
109
130
 
@@ -153,6 +174,14 @@ class MaterialXLoader extends Loader {
153
174
  */
154
175
  parseBuffer( data, url = '', options = {} ) {
155
176
 
177
+ const parsed = this._parseBuffer( data, url, options );
178
+ this._throwOnErrors( parsed.log, options );
179
+ return parsed.result;
180
+
181
+ }
182
+
183
+ _parseBuffer( data, url = '', options = {} ) {
184
+
156
185
  this.dispose();
157
186
 
158
187
  let text;
@@ -181,7 +210,7 @@ class MaterialXLoader extends Loader {
181
210
 
182
211
  }
183
212
 
184
- return this.parse( text, {
213
+ return this._parse( text, {
185
214
  ...options,
186
215
  archiveResolver,
187
216
  path: options.path || getResourcePath( this.path, url )
@@ -199,18 +228,43 @@ class MaterialXLoader extends Loader {
199
228
  * @param {string} [options.materialName] - Only translate the material with this name. Defaults to all materials.
200
229
  * @param {string} [options.uvSpace='bottom-left'] - The UV space of the document's textures, `'bottom-left'` or `'top-left'`.
201
230
  * @param {Function} [options.interfaceValidator] - Validates node interfaces, see `createStrictInterfaceValidator()` in `MaterialXInterfaceValidation.js`.
231
+ * @param {function(Object, ?string): ?Node} [options.nodeResolver] - Builds the TSL node of a MaterialX node before the built-in node library. Called with the node and the requested output (`null` for the default output); returns the node, or `null` to leave it to the loader. For channel outputs such as `outx`, the loader takes the channel of the returned node.
202
232
  * @param {boolean} [options.throwOnErrors=true] - Whether translation errors throw or are only reported in the log.
203
233
  * @return {{materials: Object<string,NodeMaterial>, log: Array<Object>, errors: Array<Object>, warnings: Array<Object>}} The materials keyed by name and the translation log.
204
234
  */
205
235
  parse( text, options = {} ) {
206
236
 
237
+ const parsed = this._parse( text, options );
238
+ this._throwOnErrors( parsed.log, options );
239
+ return parsed.result;
240
+
241
+ }
242
+
243
+ _parse( text, options = {} ) {
244
+
207
245
  const log = new MaterialXLog();
208
246
 
209
247
  const document = new MaterialXDocument( this.manager, options.path || this.path, log, options.archiveResolver || null, options.uvSpace );
248
+ document.imageLoader.setPriority( this.priority );
249
+ document.imageLoader.setCache( this.cache );
250
+ document.textureLoader.setPriority( this.priority );
251
+ document.textureLoader.setCache( this.cache );
252
+ document.imageLoader.setCrossOrigin( this.crossOrigin );
253
+ document.textureLoader.setCrossOrigin( this.crossOrigin );
254
+ document.textureLoader.setRequestHeader( this.requestHeader );
255
+ document.textureLoader.setWithCredentials( this.withCredentials );
256
+
210
257
  const result = document.parse( text, options.materialName || null, {
211
258
  interfaceValidator: options.interfaceValidator,
259
+ nodeResolver: options.nodeResolver,
212
260
  } );
213
261
 
262
+ return { document, log, result };
263
+
264
+ }
265
+
266
+ _throwOnErrors( log, options ) {
267
+
214
268
  if ( options.throwOnErrors !== false && log.errors.length > 0 ) {
215
269
 
216
270
  const details = log.errors.map( ( error ) => error.message ).join( ' ' );
@@ -218,8 +272,6 @@ class MaterialXLoader extends Loader {
218
272
 
219
273
  }
220
274
 
221
- return result;
222
-
223
275
  }
224
276
 
225
277
  }
@@ -45,6 +45,8 @@ class NRRDLoader extends Loader {
45
45
  const scope = this;
46
46
 
47
47
  const loader = new FileLoader( scope.manager );
48
+ loader.setPriority( scope.priority );
49
+ loader.setCache( scope.cache );
48
50
  loader.setPath( scope.path );
49
51
  loader.setResponseType( 'arraybuffer' );
50
52
  loader.setRequestHeader( scope.requestHeader );
@@ -202,7 +204,7 @@ class NRRDLoader extends Loader {
202
204
 
203
205
  headerObject.isNrrd = true;
204
206
 
205
- } else if ( ! l.match( /^#/ ) && ( m = l.match( /(.*):(.*)/ ) ) ) {
207
+ } else if ( ! l.match( /^#/ ) && ( m = l.match( /^(.*):(.*)/ ) ) ) {
206
208
 
207
209
  field = m[ 1 ].trim();
208
210
  data = m[ 2 ].trim();
@@ -339,7 +341,7 @@ class NRRDLoader extends Loader {
339
341
 
340
342
  // we found two line breaks in a row
341
343
  // now we know what the header is
342
- _header = this._parseChars( _bytes, 0, i - 2 );
344
+ _header = this._parseChars( _bytes, 0, i - 1 );
343
345
  // this is were the data starts
344
346
  _data_start = i + 1;
345
347
  break;
@@ -410,15 +410,19 @@ function ParserState() {
410
410
  const vLen = this.vertices.length;
411
411
  const uvLen = this.uvs.length;
412
412
 
413
- for ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {
413
+ // a line statement defines a polyline, so convert it to pairs of vertices for line segments
414
+
415
+ for ( let vi = 0, l = vertices.length - 1; vi < l; vi ++ ) {
414
416
 
415
417
  this.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );
418
+ this.addVertexLine( this.parseVertexIndex( vertices[ vi + 1 ], vLen ) );
416
419
 
417
420
  }
418
421
 
419
- for ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {
422
+ for ( let uvi = 0, l = uvs.length - 1; uvi < l; uvi ++ ) {
420
423
 
421
424
  this.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );
425
+ this.addUVLine( this.parseUVIndex( uvs[ uvi + 1 ], uvLen ) );
422
426
 
423
427
  }
424
428
 
@@ -485,6 +489,8 @@ class OBJLoader extends Loader {
485
489
  const scope = this;
486
490
 
487
491
  const loader = new FileLoader( this.manager );
492
+ loader.setPriority( this.priority );
493
+ loader.setCache( this.cache );
488
494
  loader.setPath( this.path );
489
495
  loader.setRequestHeader( this.requestHeader );
490
496
  loader.setWithCredentials( this.withCredentials );
@@ -654,7 +660,7 @@ class OBJLoader extends Loader {
654
660
 
655
661
  } else if ( lineFirstChar === 'l' ) {
656
662
 
657
- const lineParts = line.substring( 1 ).trim().split( ' ' );
663
+ const lineParts = line.substring( 1 ).trim().split( _face_vertex_data_separator_pattern );
658
664
  let lineVertices = [];
659
665
  const lineUVs = [];
660
666
 
@@ -680,7 +686,7 @@ class OBJLoader extends Loader {
680
686
  } else if ( lineFirstChar === 'p' ) {
681
687
 
682
688
  const lineData = line.slice( 1 ).trim();
683
- const pointData = lineData.split( ' ' );
689
+ const pointData = lineData.split( _face_vertex_data_separator_pattern );
684
690
 
685
691
  state.addPointGeometry( pointData );
686
692
 
@@ -67,6 +67,8 @@ class PCDLoader extends Loader {
67
67
  const scope = this;
68
68
 
69
69
  const loader = new FileLoader( scope.manager );
70
+ loader.setPriority( scope.priority );
71
+ loader.setCache( scope.cache );
70
72
  loader.setPath( scope.path );
71
73
  loader.setResponseType( 'arraybuffer' );
72
74
  loader.setRequestHeader( scope.requestHeader );
@@ -341,12 +343,14 @@ class PCDLoader extends Loader {
341
343
  PCDheader.offset = {};
342
344
 
343
345
  let sizeSum = 0;
346
+ let countSum = 0;
344
347
 
345
348
  for ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {
346
349
 
347
350
  if ( PCDheader.data === 'ascii' ) {
348
351
 
349
- PCDheader.offset[ PCDheader.fields[ i ] ] = i;
352
+ PCDheader.offset[ PCDheader.fields[ i ] ] = countSum;
353
+ countSum += PCDheader.count[ i ];
350
354
 
351
355
  } else {
352
356
 
@@ -392,7 +396,7 @@ class PCDLoader extends Loader {
392
396
 
393
397
  if ( lines[ i ] === '' ) continue;
394
398
 
395
- const line = lines[ i ].split( ' ' );
399
+ const line = lines[ i ].trim().split( /\s+/ );
396
400
 
397
401
  if ( offset.x !== undefined ) {
398
402
 
@@ -52,6 +52,8 @@ class PDBLoader extends Loader {
52
52
  const scope = this;
53
53
 
54
54
  const loader = new FileLoader( scope.manager );
55
+ loader.setPriority( scope.priority );
56
+ loader.setCache( scope.cache );
55
57
  loader.setPath( scope.path );
56
58
  loader.setRequestHeader( scope.requestHeader );
57
59
  loader.setWithCredentials( scope.withCredentials );
@@ -230,9 +232,9 @@ class PDBLoader extends Loader {
230
232
 
231
233
  if ( lines[ i ].slice( 0, 4 ) === 'ATOM' || lines[ i ].slice( 0, 6 ) === 'HETATM' ) {
232
234
 
233
- const x = parseFloat( lines[ i ].slice( 30, 37 ) );
234
- const y = parseFloat( lines[ i ].slice( 38, 45 ) );
235
- const z = parseFloat( lines[ i ].slice( 46, 53 ) );
235
+ const x = parseFloat( lines[ i ].slice( 30, 38 ) );
236
+ const y = parseFloat( lines[ i ].slice( 38, 46 ) );
237
+ const z = parseFloat( lines[ i ].slice( 46, 54 ) );
236
238
  const index = parseInt( lines[ i ].slice( 6, 11 ) ) - 1;
237
239
 
238
240
  let e = trim( lines[ i ].slice( 76, 78 ) ).toLowerCase();
@@ -64,6 +64,8 @@ class PLYLoader extends Loader {
64
64
  const scope = this;
65
65
 
66
66
  const loader = new FileLoader( this.manager );
67
+ loader.setPriority( this.priority );
68
+ loader.setCache( this.cache );
67
69
  loader.setPath( this.path );
68
70
  loader.setResponseType( 'arraybuffer' );
69
71
  loader.setRequestHeader( this.requestHeader );
@@ -542,6 +544,19 @@ class PLYLoader extends Loader {
542
544
 
543
545
  }
544
546
 
547
+ // custom buffer data
548
+
549
+ for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
550
+
551
+ if ( buffer[ customProperty ].length > 0 ) {
552
+
553
+ const CustomClass = getBufferAttributeClass( vertexDescriptor.custom[ customProperty ].type );
554
+ geometry.setAttribute( customProperty, new CustomClass( buffer[ customProperty ], scope.customPropertyMapping[ customProperty ].length ) );
555
+
556
+ }
557
+
558
+ }
559
+
545
560
  if ( buffer.faceVertexUvs.length > 0 || buffer.faceVertexColors.length > 0 ) {
546
561
 
547
562
  geometry = geometry.toNonIndexed();
@@ -565,19 +580,6 @@ class PLYLoader extends Loader {
565
580
 
566
581
  }
567
582
 
568
- // custom buffer data
569
-
570
- for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
571
-
572
- if ( buffer[ customProperty ].length > 0 ) {
573
-
574
- const CustomClass = getBufferAttributeClass( vertexDescriptor.custom[ customProperty ].type );
575
- geometry.setAttribute( customProperty, new CustomClass( buffer[ customProperty ], scope.customPropertyMapping[ customProperty ].length ) );
576
-
577
- }
578
-
579
- }
580
-
581
583
  geometry.computeBoundingSphere();
582
584
 
583
585
  return geometry;
@@ -674,8 +676,22 @@ class PLYLoader extends Loader {
674
676
 
675
677
  } else if ( vertex_indices.length === 4 ) {
676
678
 
677
- buffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 1 ], vertex_indices[ 3 ] );
678
- buffer.indices.push( vertex_indices[ 1 ], vertex_indices[ 2 ], vertex_indices[ 3 ] );
679
+ // according to the spec, quads need to be split along a specific rule
680
+ // 4 0 1 2 3 results in 0,1,2 and 0,2,3
681
+
682
+ buffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 1 ], vertex_indices[ 2 ] );
683
+ buffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 2 ], vertex_indices[ 3 ] );
684
+
685
+ if ( texcoord && texcoord.length === 8 ) {
686
+
687
+ buffer.faceVertexUvs.push( texcoord[ 0 ], texcoord[ 1 ] );
688
+ buffer.faceVertexUvs.push( texcoord[ 2 ], texcoord[ 3 ] );
689
+ buffer.faceVertexUvs.push( texcoord[ 4 ], texcoord[ 5 ] );
690
+ buffer.faceVertexUvs.push( texcoord[ 0 ], texcoord[ 1 ] );
691
+ buffer.faceVertexUvs.push( texcoord[ 4 ], texcoord[ 5 ] );
692
+ buffer.faceVertexUvs.push( texcoord[ 6 ], texcoord[ 7 ] );
693
+
694
+ }
679
695
 
680
696
  }
681
697
 
@@ -708,6 +724,14 @@ class PLYLoader extends Loader {
708
724
  buffer.faceVertexColors.push( r, g, b );
709
725
  buffer.faceVertexColors.push( r, g, b );
710
726
 
727
+ if ( vertex_indices.length === 4 ) {
728
+
729
+ buffer.faceVertexColors.push( r, g, b );
730
+ buffer.faceVertexColors.push( r, g, b );
731
+ buffer.faceVertexColors.push( r, g, b );
732
+
733
+ }
734
+
711
735
  }
712
736
 
713
737
  }
@@ -231,8 +231,8 @@ function _extract( pvrDatas ) {
231
231
 
232
232
  while ( mipLevel < pvrDatas.numMipmaps ) {
233
233
 
234
- const sWidth = pvrDatas.width >> mipLevel,
235
- sHeight = pvrDatas.height >> mipLevel;
234
+ const sWidth = Math.max( pvrDatas.width >> mipLevel, 1 ),
235
+ sHeight = Math.max( pvrDatas.height >> mipLevel, 1 );
236
236
 
237
237
  widthBlocks = sWidth / blockWidth;
238
238
  heightBlocks = sHeight / blockHeight;
@@ -50,6 +50,8 @@ class SPLATLoader extends Loader {
50
50
  const scope = this;
51
51
 
52
52
  const loader = new FileLoader( this.manager );
53
+ loader.setPriority( this.priority );
54
+ loader.setCache( this.cache );
53
55
  loader.setPath( this.path );
54
56
  loader.setResponseType( 'arraybuffer' );
55
57
  loader.setRequestHeader( this.requestHeader );
@@ -90,6 +90,8 @@ class SPZLoader extends Loader {
90
90
  const scope = this;
91
91
 
92
92
  const loader = new FileLoader( this.manager );
93
+ loader.setPriority( this.priority );
94
+ loader.setCache( this.cache );
93
95
  loader.setPath( this.path );
94
96
  loader.setResponseType( 'arraybuffer' );
95
97
  loader.setRequestHeader( this.requestHeader );
@@ -78,6 +78,8 @@ class STLLoader extends Loader {
78
78
  const scope = this;
79
79
 
80
80
  const loader = new FileLoader( this.manager );
81
+ loader.setPriority( this.priority );
82
+ loader.setCache( this.cache );
81
83
  loader.setPath( this.path );
82
84
  loader.setResponseType( 'arraybuffer' );
83
85
  loader.setRequestHeader( this.requestHeader );
@@ -181,7 +183,7 @@ class STLLoader extends Loader {
181
183
  // process STL header
182
184
  // check for default color in header ("COLOR=rgba" sequence).
183
185
 
184
- for ( let index = 0; index < 80 - 10; index ++ ) {
186
+ for ( let index = 0; index <= 80 - 10; index ++ ) {
185
187
 
186
188
  if ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&
187
189
  ( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&
@@ -106,6 +106,8 @@ class SVGLoader extends Loader {
106
106
  const scope = this;
107
107
 
108
108
  const loader = new FileLoader( scope.manager );
109
+ loader.setPriority( scope.priority );
110
+ loader.setCache( scope.cache );
109
111
  loader.setPath( scope.path );
110
112
  loader.setRequestHeader( scope.requestHeader );
111
113
  loader.setWithCredentials( scope.withCredentials );
@@ -218,7 +220,7 @@ class SVGLoader extends Loader {
218
220
  case 'use':
219
221
  style = parseStyle( node, style );
220
222
 
221
- const href = node.getAttributeNS( 'http://www.w3.org/1999/xlink', 'href' ) || '';
223
+ const href = node.getAttributeNS( 'http://www.w3.org/1999/xlink', 'href' ) || node.getAttribute( 'href' ) || '';
222
224
  const usedNodeId = href.substring( 1 );
223
225
  const usedNode = node.viewportElement.getElementById( usedNodeId );
224
226
  if ( usedNode ) {
@@ -303,8 +305,7 @@ class SVGLoader extends Loader {
303
305
  const control = new Vector2();
304
306
 
305
307
  const firstPoint = new Vector2();
306
- let isFirstPoint = true;
307
- let doSetFirstPoint = false;
308
+ let isPathClosed = false;
308
309
 
309
310
  const d = node.getAttribute( 'd' );
310
311
 
@@ -321,10 +322,17 @@ class SVGLoader extends Loader {
321
322
  const type = command.charAt( 0 );
322
323
  const data = command.slice( 1 ).trim();
323
324
 
324
- if ( isFirstPoint === true ) {
325
+ if ( isPathClosed === true ) {
325
326
 
326
- doSetFirstPoint = true;
327
- isFirstPoint = false;
327
+ // commands after Z without M start a new subpath at the initial point
328
+
329
+ if ( type !== 'M' && type !== 'm' && type !== 'Z' && type !== 'z' ) {
330
+
331
+ path.moveTo( firstPoint.x, firstPoint.y );
332
+
333
+ }
334
+
335
+ isPathClosed = false;
328
336
 
329
337
  }
330
338
 
@@ -367,8 +375,6 @@ class SVGLoader extends Loader {
367
375
  control.y = point.y;
368
376
  path.lineTo( point.x, point.y );
369
377
 
370
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
371
-
372
378
  }
373
379
 
374
380
  break;
@@ -383,8 +389,6 @@ class SVGLoader extends Loader {
383
389
  control.y = point.y;
384
390
  path.lineTo( point.x, point.y );
385
391
 
386
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
387
-
388
392
  }
389
393
 
390
394
  break;
@@ -400,8 +404,6 @@ class SVGLoader extends Loader {
400
404
  control.y = point.y;
401
405
  path.lineTo( point.x, point.y );
402
406
 
403
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
404
-
405
407
  }
406
408
 
407
409
  break;
@@ -424,8 +426,6 @@ class SVGLoader extends Loader {
424
426
  point.x = numbers[ j + 4 ];
425
427
  point.y = numbers[ j + 5 ];
426
428
 
427
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
428
-
429
429
  }
430
430
 
431
431
  break;
@@ -448,8 +448,6 @@ class SVGLoader extends Loader {
448
448
  point.x = numbers[ j + 2 ];
449
449
  point.y = numbers[ j + 3 ];
450
450
 
451
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
452
-
453
451
  }
454
452
 
455
453
  break;
@@ -470,8 +468,6 @@ class SVGLoader extends Loader {
470
468
  point.x = numbers[ j + 2 ];
471
469
  point.y = numbers[ j + 3 ];
472
470
 
473
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
474
-
475
471
  }
476
472
 
477
473
  break;
@@ -494,8 +490,6 @@ class SVGLoader extends Loader {
494
490
  point.x = numbers[ j + 0 ];
495
491
  point.y = numbers[ j + 1 ];
496
492
 
497
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
498
-
499
493
  }
500
494
 
501
495
  break;
@@ -517,8 +511,6 @@ class SVGLoader extends Loader {
517
511
  path, numbers[ j ], numbers[ j + 1 ], numbers[ j + 2 ], numbers[ j + 3 ], numbers[ j + 4 ], start, point
518
512
  );
519
513
 
520
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
521
-
522
514
  }
523
515
 
524
516
  break;
@@ -559,8 +551,6 @@ class SVGLoader extends Loader {
559
551
  control.y = point.y;
560
552
  path.lineTo( point.x, point.y );
561
553
 
562
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
563
-
564
554
  }
565
555
 
566
556
  break;
@@ -575,8 +565,6 @@ class SVGLoader extends Loader {
575
565
  control.y = point.y;
576
566
  path.lineTo( point.x, point.y );
577
567
 
578
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
579
-
580
568
  }
581
569
 
582
570
  break;
@@ -592,8 +580,6 @@ class SVGLoader extends Loader {
592
580
  control.y = point.y;
593
581
  path.lineTo( point.x, point.y );
594
582
 
595
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
596
-
597
583
  }
598
584
 
599
585
  break;
@@ -616,8 +602,6 @@ class SVGLoader extends Loader {
616
602
  point.x += numbers[ j + 4 ];
617
603
  point.y += numbers[ j + 5 ];
618
604
 
619
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
620
-
621
605
  }
622
606
 
623
607
  break;
@@ -640,8 +624,6 @@ class SVGLoader extends Loader {
640
624
  point.x += numbers[ j + 2 ];
641
625
  point.y += numbers[ j + 3 ];
642
626
 
643
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
644
-
645
627
  }
646
628
 
647
629
  break;
@@ -662,8 +644,6 @@ class SVGLoader extends Loader {
662
644
  point.x += numbers[ j + 2 ];
663
645
  point.y += numbers[ j + 3 ];
664
646
 
665
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
666
-
667
647
  }
668
648
 
669
649
  break;
@@ -686,8 +666,6 @@ class SVGLoader extends Loader {
686
666
  point.x = point.x + numbers[ j + 0 ];
687
667
  point.y = point.y + numbers[ j + 1 ];
688
668
 
689
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
690
-
691
669
  }
692
670
 
693
671
  break;
@@ -709,8 +687,6 @@ class SVGLoader extends Loader {
709
687
  path, numbers[ j ], numbers[ j + 1 ], numbers[ j + 2 ], numbers[ j + 3 ], numbers[ j + 4 ], start, point
710
688
  );
711
689
 
712
- if ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );
713
-
714
690
  }
715
691
 
716
692
  break;
@@ -724,7 +700,7 @@ class SVGLoader extends Loader {
724
700
  // Reset point to beginning of Path
725
701
  point.copy( firstPoint );
726
702
  path.currentPath.currentPoint.copy( point );
727
- isFirstPoint = true;
703
+ isPathClosed = true;
728
704
 
729
705
  }
730
706
 
@@ -737,8 +713,6 @@ class SVGLoader extends Loader {
737
713
 
738
714
  // console.log( type, parseFloats( data ), parseFloats( data ).length )
739
715
 
740
- doSetFirstPoint = false;
741
-
742
716
  }
743
717
 
744
718
  return path;
@@ -760,12 +734,16 @@ class SVGLoader extends Loader {
760
734
  .filter( Boolean )
761
735
  .map( i => i.trim() );
762
736
 
763
- for ( let j = 0; j < selectorList.length; j ++ ) {
737
+ const definitions = {};
764
738
 
765
- // Remove empty rules
766
- const definitions = Object.fromEntries(
767
- Object.entries( stylesheet.style ).filter( ( [ , v ] ) => v !== '' )
768
- );
739
+ for ( let j = 0; j < stylesheet.style.length; j ++ ) {
740
+
741
+ const property = stylesheet.style[ j ];
742
+ definitions[ property ] = stylesheet.style.getPropertyValue( property );
743
+
744
+ }
745
+
746
+ for ( let j = 0; j < selectorList.length; j ++ ) {
769
747
 
770
748
  stylesheets[ selectorList[ j ] ] = Object.assign(
771
749
  stylesheets[ selectorList[ j ] ] || {},
@@ -959,7 +937,7 @@ class SVGLoader extends Loader {
959
937
 
960
938
  }
961
939
 
962
- const regex = /([+-]?\d*\.?\d+(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;
940
+ const regex = /([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)/g;
963
941
 
964
942
  const path = new ShapePath();
965
943
 
@@ -994,7 +972,7 @@ class SVGLoader extends Loader {
994
972
 
995
973
  }
996
974
 
997
- const regex = /([+-]?\d*\.?\d+(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;
975
+ const regex = /([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)/g;
998
976
 
999
977
  const path = new ShapePath();
1000
978
 
@@ -1235,7 +1213,7 @@ class SVGLoader extends Loader {
1235
1213
  };
1236
1214
 
1237
1215
  if ( node.hasAttribute( svgName ) ) style[ jsName ] = adjustFunction( node.getAttribute( svgName ) );
1238
- if ( stylesheetStyles[ jsName ] ) style[ jsName ] = adjustFunction( stylesheetStyles[ jsName ] );
1216
+ if ( stylesheetStyles[ svgName ] ) style[ jsName ] = adjustFunction( stylesheetStyles[ svgName ] );
1239
1217
  if ( node.style && node.style[ svgName ] !== '' ) style[ jsName ] = adjustFunction( node.style[ svgName ] );
1240
1218
 
1241
1219
  }