@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
@@ -2,10 +2,10 @@ import { Tab } from '../ui/Tab.js';
2
2
  import { List } from '../ui/List.js';
3
3
  import { Item } from '../ui/Item.js';
4
4
  import { splitPath, splitCamelCase } from '../ui/utils.js';
5
- import { getItem, setItem } from '../Inspector.js';
5
+ import { getItem, setItem } from '../Storage.js';
6
6
 
7
7
  import { RendererUtils, NoToneMapping, LinearSRGBColorSpace, QuadMesh, NodeMaterial, CanvasTarget, Vector2, Color } from 'three/webgpu';
8
- import { renderOutput, vec2, vec3, vec4, Fn, screenUV, step, OnMaterialUpdate, uniform, float } from 'three/tsl';
8
+ import { renderOutput, rtt, vec2, vec3, vec4, Fn, screenUV, step, OnMaterialUpdate, uniform, float } from 'three/tsl';
9
9
 
10
10
  const _size = /*@__PURE__*/ new Vector2();
11
11
 
@@ -746,16 +746,14 @@ class Viewer extends Tab {
746
746
  this.splitUniforms.viewportWidth.value = rect.width;
747
747
 
748
748
  // Recreate or setup material for split screen comparison
749
- const node = canvasData.node;
750
- const target = node.context( { getUV: () => screenUV } );
749
+ const target = canvasData.inspectNode.context( { getUV: () => screenUV } );
751
750
  const targetColor = renderOutput( vec4( vec3( target ), 1 ), NoToneMapping, renderer.outputColorSpace );
752
- const targetColorCtx = targetColor.context( { inspector: true } );
753
751
 
754
752
  let finalColor;
755
753
 
756
754
  if ( this.splitFullscreen ) {
757
755
 
758
- finalColor = targetColorCtx;
756
+ finalColor = targetColor;
759
757
 
760
758
  } else {
761
759
 
@@ -763,7 +761,7 @@ class Viewer extends Tab {
763
761
 
764
762
  screenUV.x.lessThan( this.splitUniforms.splitX ).discard();
765
763
 
766
- return targetColorCtx;
764
+ return targetColor;
767
765
 
768
766
  } )();
769
767
 
@@ -901,7 +899,21 @@ class Viewer extends Tab {
901
899
  const canvasAspect = uniform( 1 );
902
900
  const mask = float( 1 );
903
901
 
904
- const target = node.context( { getUV: ( textureNode ) => {
902
+ let inspectNode = node.callback !== null ? node.callback( node.node ) : node.node;
903
+ let rttNode = null;
904
+
905
+ if ( inspectNode.isTextureNode !== true && inspectNode.isPassNode !== true ) {
906
+
907
+ // render other nodes in the resolution of the renderer, e.g. screen-space nodes
908
+
909
+ rttNode = rtt( inspectNode );
910
+ rttNode.uvNode = null; // use the aspect ratio corrected uv of the viewer
911
+
912
+ inspectNode = rttNode;
913
+
914
+ }
915
+
916
+ const target = inspectNode.context( { getUV: ( textureNode ) => {
905
917
 
906
918
  const uvData = aspectRatioUV( screenUV, textureNode, canvasAspect );
907
919
  const correctedUV = uvData.xy;
@@ -913,7 +925,6 @@ class Viewer extends Tab {
913
925
 
914
926
  let output = vec4( vec3( target ), 1 ).mul( mask );
915
927
  output = renderOutput( output, NoToneMapping, renderer.outputColorSpace );
916
- output = output.context( { inspector: true } );
917
928
 
918
929
  const material = new NodeMaterial();
919
930
  material.outputNode = output;
@@ -926,6 +937,8 @@ class Viewer extends Tab {
926
937
  name,
927
938
  path,
928
939
  node,
940
+ inspectNode,
941
+ rttNode,
929
942
  quad,
930
943
  canvasTarget,
931
944
  material,
@@ -1240,7 +1253,7 @@ class Viewer extends Tab {
1240
1253
 
1241
1254
  const mainSize = previousCanvasTarget.getDrawingBufferSize( _size );
1242
1255
 
1243
- canvasData.node.traverse( ( child ) => {
1256
+ canvasData.inspectNode.traverse( ( child ) => {
1244
1257
 
1245
1258
  if ( child.isRTTNode && child.autoResize === true ) {
1246
1259
 
@@ -1361,6 +1374,8 @@ class Viewer extends Tab {
1361
1374
  canvasData.canvasTarget.dispose();
1362
1375
  canvasData.material.dispose();
1363
1376
 
1377
+ if ( canvasData.rttNode !== null ) canvasData.rttNode.dispose();
1378
+
1364
1379
  }
1365
1380
 
1366
1381
  this.canvasNodes.clear();
@@ -1,7 +1,7 @@
1
1
  import { EventDispatcher } from 'three';
2
2
  import { Style } from './Style.js';
3
3
  import { Graph } from './Graph.js';
4
- import { getItem, setItem } from '../Inspector.js';
4
+ import { getItem, setItem } from '../Storage.js';
5
5
 
6
6
  export class Profiler extends EventDispatcher {
7
7
 
@@ -357,11 +357,6 @@ export class Style {
357
357
  min-width: 0 !important;
358
358
  }
359
359
 
360
- .mini-panel-content .list-container.parameters .list-item-row,
361
- .mini-panel-content .list-container.parameters .list-header {
362
- grid-template-columns: minmax(0, .5fr) minmax(0, 1fr) !important;
363
- }
364
-
365
360
  }
366
361
 
367
362
  .mini-panel-content .list-container.parameters {
@@ -1614,33 +1609,26 @@ export class Style {
1614
1609
  margin-left: 2px;
1615
1610
  }
1616
1611
 
1617
- @media screen and (max-width: 340px) {
1618
-
1619
- .mini-panel-content .list-item-cell:first-child {
1620
- display: flex;
1621
- align-items: center;
1622
- min-width: 0;
1623
- overflow: hidden;
1624
- width: 100%;
1625
- }
1626
-
1627
- .mini-panel-content .list-item-cell:first-child .value {
1628
- overflow: hidden;
1629
- text-overflow: ellipsis;
1630
- white-space: nowrap;
1631
- flex: 1 1 0%;
1632
- min-width: 0;
1633
- }
1612
+ .list-container.parameters .list-item-cell:first-child .value {
1613
+ overflow: hidden;
1614
+ text-overflow: ellipsis;
1615
+ white-space: nowrap;
1616
+ }
1634
1617
 
1635
- .mini-panel-content .list-item-cell:first-child .info-icon {
1636
- flex-shrink: 0;
1637
- }
1618
+ .list-container.parameters .list-item-cell:first-child .value:has(> .info-icon) {
1619
+ position: relative;
1620
+ padding-right: 20px;
1621
+ }
1638
1622
 
1623
+ .list-container.parameters .list-item-cell:first-child .value > .info-icon {
1624
+ position: absolute;
1625
+ top: calc(50% - 8px);
1626
+ right: 0;
1639
1627
  }
1640
1628
 
1641
1629
  .mini-panel-content .custom-checkbox .checkmark {
1642
- width: 12px;
1643
- height: 12px;
1630
+ width: 11px;
1631
+ height: 11px;
1644
1632
  margin-bottom: 2px;
1645
1633
  will-change: transform;
1646
1634
  }
@@ -1649,6 +1637,10 @@ export class Style {
1649
1637
  margin-bottom: 2px;
1650
1638
  }
1651
1639
 
1640
+ .mini-panel-content .list-container.parameters .list-item-wrapper:has(> .list-children-container.closed) + .list-item-wrapper {
1641
+ margin-top: 2px;
1642
+ }
1643
+
1652
1644
  .mini-panel-content .list-container.parameters .list-children-container > .list-item-wrapper:first-child:has(> .list-item-row:not(.collapsible)) {
1653
1645
  margin-top: 2px;
1654
1646
  }
@@ -2117,6 +2109,8 @@ export class Style {
2117
2109
  width: 1px;
2118
2110
  left: 50%;
2119
2111
  background-color: transparent;
2112
+ /*background-color: rgba(255, 255, 255, 0.25);
2113
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15);*/
2120
2114
  cursor: ew-resize;
2121
2115
  pointer-events: auto !important;
2122
2116
  z-index: 10;
@@ -2141,32 +2135,6 @@ export class Style {
2141
2135
  cursor: ew-resize;
2142
2136
  }
2143
2137
 
2144
- .split-screen-line::after {
2145
- content: '';
2146
- position: absolute;
2147
- top: -1px;
2148
- bottom: -1px;
2149
- left: -5px;
2150
- width: 11px;
2151
- pointer-events: none;
2152
- background-image:
2153
- url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7' viewBox='0 0 11 7'%3E%3Cpath d='M-0.5 -1 L5.5 7 L11.5 -1 Z' fill='rgba(30,30,36,0.85)' stroke='%234a4a5a' stroke-width='1' stroke-linejoin='round'/%3E%3C/svg%3E"),
2154
- url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7' viewBox='0 0 11 7'%3E%3Cpath d='M-0.5 8 L5.5 0 L11.5 8 Z' fill='rgba(30,30,36,0.85)' stroke='%234a4a5a' stroke-width='1' stroke-linejoin='round'/%3E%3C/svg%3E");
2155
- background-position: top center, bottom center;
2156
- background-repeat: no-repeat;
2157
- opacity: 1;
2158
- transition: opacity 0.15s ease-out;
2159
- }
2160
-
2161
- .split-screen-line:hover::after,
2162
- .split-screen-line:active::after,
2163
- .split-screen-line.active::after {
2164
- opacity: 1;
2165
- background-image:
2166
- url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7' viewBox='0 0 11 7'%3E%3Cpath d='M-0.5 -1 L5.5 7 L11.5 -1 Z' fill='%2300aaff' stroke='%2300aaff' stroke-width='1' stroke-linejoin='round'/%3E%3C/svg%3E"),
2167
- url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7' viewBox='0 0 11 7'%3E%3Cpath d='M-0.5 8 L5.5 0 L11.5 8 Z' fill='%2300aaff' stroke='%2300aaff' stroke-width='1' stroke-linejoin='round'/%3E%3C/svg%3E");
2168
- }
2169
-
2170
2138
  /* Grid Mode styles for List component */
2171
2139
  .list-scroll-wrapper:has(> .list-container.grid-mode) {
2172
2140
  width: 100% !important;
@@ -127,22 +127,45 @@ class ValueNumber extends Value {
127
127
 
128
128
  addDragHandler() {
129
129
 
130
+ const threshold = 2;
131
+
132
+ let isPressed = false;
130
133
  let isDragging = false;
131
- let startY, startValue;
134
+ let startX, startY, startValue;
132
135
 
133
136
  this.input.style.touchAction = 'none';
134
137
 
135
138
  this.input.addEventListener( 'pointerdown', ( e ) => {
136
139
 
137
- isDragging = true;
140
+ isPressed = true;
141
+ startX = e.clientX;
138
142
  startY = e.clientY;
139
143
  startValue = parseFloat( this.input.value );
140
- document.body.style.cursor = 'ns-resize';
141
144
 
142
145
  } );
143
146
 
144
147
  document.addEventListener( 'pointermove', ( e ) => {
145
148
 
149
+ if ( isPressed ) {
150
+
151
+ // start dragging only after a vertical movement, a horizontal one selects text
152
+
153
+ if ( Math.abs( e.clientY - startY ) > threshold ) {
154
+
155
+ isPressed = false;
156
+ isDragging = true;
157
+ startY = e.clientY;
158
+ this.input.blur();
159
+ document.body.style.cursor = 'ns-resize';
160
+
161
+ } else if ( Math.abs( e.clientX - startX ) > threshold ) {
162
+
163
+ isPressed = false;
164
+
165
+ }
166
+
167
+ }
168
+
146
169
  if ( isDragging ) {
147
170
 
148
171
  const deltaY = startY - e.clientY;
@@ -176,6 +199,8 @@ class ValueNumber extends Value {
176
199
 
177
200
  document.addEventListener( 'pointerup', () => {
178
201
 
202
+ isPressed = false;
203
+
179
204
  if ( isDragging ) {
180
205
 
181
206
  isDragging = false;
@@ -2,7 +2,7 @@
2
2
  fflate - fast JavaScript compression/decompression
3
3
  <https://101arrowz.github.io/fflate>
4
4
  Licensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE
5
- version 0.8.2
5
+ version 0.8.3
6
6
  */
7
7
 
8
8
  // DEFLATE is a complex format; to read this code, you should probably check the RFC first:
@@ -199,7 +199,7 @@ var ec = [
199
199
  'invalid distance',
200
200
  'stream finished',
201
201
  'no stream handler',
202
- ,
202
+ , // determined by compression function
203
203
  'no callback',
204
204
  'invalid UTF-8 data',
205
205
  'extra field too long',
@@ -916,12 +916,12 @@ var cbify = function (dat, opts, fns, init, id, cb) {
916
916
  var astrm = function (strm) {
917
917
  strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };
918
918
  return function (ev) {
919
- if (ev.data.length) {
919
+ if (ev.data[0]) {
920
920
  strm.push(ev.data[0], ev.data[1]);
921
921
  postMessage([ev.data[0].length]);
922
922
  }
923
923
  else
924
- strm.flush();
924
+ strm.flush(ev.data[1]);
925
925
  };
926
926
  };
927
927
  // async stream attach
@@ -951,17 +951,19 @@ var astrmify = function (fns, strm, opts, init, id, flush, ext) {
951
951
  if (t)
952
952
  strm.ondata(err(4, 0, 1), null, !!f);
953
953
  strm.queuedSize += d.length;
954
- w.postMessage([d, t = f], [d.buffer]);
954
+ // can fail for cross-realm Uint8Array, but ok - only a small performance penalty
955
+ w.postMessage([d, t = f], d.buffer instanceof ArrayBuffer ? [d.buffer] : []);
955
956
  };
956
957
  strm.terminate = function () { w.terminate(); };
957
958
  if (flush) {
958
- strm.flush = function () { w.postMessage([]); };
959
+ strm.flush = function (sync) { w.postMessage([0, sync]); };
959
960
  }
960
961
  };
961
962
  // read 2 bytes
962
963
  var b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };
963
964
  // read 4 bytes
964
965
  var b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };
966
+ // read 8 bytes
965
967
  var b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };
966
968
  // write bytes
967
969
  var wbytes = function (d, b, v) {
@@ -1082,18 +1084,37 @@ var Deflate = /*#__PURE__*/ (function () {
1082
1084
  this.p(this.b, final || false);
1083
1085
  this.s.w = this.s.i, this.s.i -= 2;
1084
1086
  }
1087
+ if (final) {
1088
+ // cleanup unneeded buffers/state to reduce memory usage
1089
+ this.s = this.o = {};
1090
+ this.b = et;
1091
+ }
1085
1092
  };
1086
1093
  /**
1087
1094
  * Flushes buffered uncompressed data. Useful to immediately retrieve the
1088
1095
  * deflated output for small inputs.
1096
+ * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5
1097
+ * extra bytes, but guarantees all pushed data is immediately
1098
+ * decompressible. A separate DEFLATE stream may be concatenated
1099
+ * with the current output after a sync flush.
1089
1100
  */
1090
- Deflate.prototype.flush = function () {
1101
+ Deflate.prototype.flush = function (sync) {
1091
1102
  if (!this.ondata)
1092
1103
  err(5);
1093
1104
  if (this.s.l)
1094
1105
  err(4);
1095
1106
  this.p(this.b, false);
1096
1107
  this.s.w = this.s.i, this.s.i -= 2;
1108
+ // could technically skip writing the type-0 block for (this.s.r & 7) == 0,
1109
+ // but the deterministic trailer (00 00 FF FF) is useful in some situations
1110
+ if (sync) {
1111
+ var c = new u8(6);
1112
+ c[0] = this.s.r >> 3;
1113
+ // write empty, non-final type-0 block
1114
+ var ep = wfblk(c, this.s.r, et);
1115
+ this.s.r = 0;
1116
+ this.ondata(c.subarray(0, ep >> 3), false);
1117
+ }
1097
1118
  };
1098
1119
  return Deflate;
1099
1120
  }());
@@ -1204,12 +1225,6 @@ export function inflate(data, opts, cb) {
1204
1225
  bInflt
1205
1226
  ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);
1206
1227
  }
1207
- /**
1208
- * Expands DEFLATE data with no wrapper
1209
- * @param data The data to decompress
1210
- * @param opts The decompression options
1211
- * @returns The decompressed version of the data
1212
- */
1213
1228
  export function inflateSync(data, opts) {
1214
1229
  return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);
1215
1230
  }
@@ -1245,9 +1260,12 @@ var Gzip = /*#__PURE__*/ (function () {
1245
1260
  /**
1246
1261
  * Flushes buffered uncompressed data. Useful to immediately retrieve the
1247
1262
  * GZIPped output for small inputs.
1263
+ * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5
1264
+ * extra bytes, but guarantees all pushed data is immediately
1265
+ * decompressible.
1248
1266
  */
1249
- Gzip.prototype.flush = function () {
1250
- Deflate.prototype.flush.call(this);
1267
+ Gzip.prototype.flush = function (sync) {
1268
+ Deflate.prototype.flush.call(this, sync);
1251
1269
  };
1252
1270
  return Gzip;
1253
1271
  }());
@@ -1325,14 +1343,17 @@ var Gunzip = /*#__PURE__*/ (function () {
1325
1343
  }
1326
1344
  // necessary to prevent TS from using the closure value
1327
1345
  // This allows for workerization to function correctly
1328
- Inflate.prototype.c.call(this, final);
1346
+ Inflate.prototype.c.call(this, 0);
1329
1347
  // process concatenated GZIP
1330
- if (this.s.f && !this.s.l && !final) {
1348
+ if (this.s.f && !this.s.l) {
1331
1349
  this.v = shft(this.s.p) + 9;
1332
1350
  this.s = { i: 0 };
1333
1351
  this.o = new u8(0);
1334
1352
  this.push(new u8(0), final);
1335
1353
  }
1354
+ else if (final) {
1355
+ Inflate.prototype.c.call(this, final);
1356
+ }
1336
1357
  };
1337
1358
  return Gunzip;
1338
1359
  }());
@@ -1367,12 +1388,6 @@ export function gunzip(data, opts, cb) {
1367
1388
  function () { return [gunzipSync]; }
1368
1389
  ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);
1369
1390
  }
1370
- /**
1371
- * Expands GZIP data
1372
- * @param data The data to decompress
1373
- * @param opts The decompression options
1374
- * @returns The decompressed version of the data
1375
- */
1376
1391
  export function gunzipSync(data, opts) {
1377
1392
  var st = gzs(data);
1378
1393
  if (st + 8 > data.length)
@@ -1408,9 +1423,12 @@ var Zlib = /*#__PURE__*/ (function () {
1408
1423
  /**
1409
1424
  * Flushes buffered uncompressed data. Useful to immediately retrieve the
1410
1425
  * zlibbed output for small inputs.
1426
+ * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5
1427
+ * extra bytes, but guarantees all pushed data is immediately
1428
+ * decompressible.
1411
1429
  */
1412
- Zlib.prototype.flush = function () {
1413
- Deflate.prototype.flush.call(this);
1430
+ Zlib.prototype.flush = function (sync) {
1431
+ Deflate.prototype.flush.call(this, sync);
1414
1432
  };
1415
1433
  return Zlib;
1416
1434
  }());
@@ -1517,12 +1535,6 @@ export function unzlib(data, opts, cb) {
1517
1535
  function () { return [unzlibSync]; }
1518
1536
  ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);
1519
1537
  }
1520
- /**
1521
- * Expands Zlib data
1522
- * @param data The data to decompress
1523
- * @param opts The decompression options
1524
- * @returns The decompressed version of the data
1525
- */
1526
1538
  export function unzlibSync(data, opts) {
1527
1539
  return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);
1528
1540
  }
@@ -1643,7 +1655,7 @@ var fltn = function (d, p, t, o) {
1643
1655
  var val = d[k], n = p + k, op = o;
1644
1656
  if (Array.isArray(val))
1645
1657
  op = mrg(o, val[1]), val = val[0];
1646
- if (val instanceof u8)
1658
+ if (ArrayBuffer.isView(val))
1647
1659
  t[n] = [val, op];
1648
1660
  else {
1649
1661
  t[n += '/'] = [new u8(0), op];
@@ -1828,15 +1840,30 @@ var dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };
1828
1840
  var slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };
1829
1841
  // read zip header
1830
1842
  var zh = function (d, b, z) {
1831
- var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);
1832
- var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];
1833
- return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
1843
+ var fnl = b2(d, b + 28), efl = b2(d, b + 30), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;
1844
+ var _a = z64hs(d, es, efl, z, b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)), sc = _a[0], su = _a[1], off = _a[2];
1845
+ return [b2(d, b + 10), sc, su, fn, es + efl + b2(d, b + 32), off];
1834
1846
  };
1835
- // read zip64 extra field
1836
- var z64e = function (d, b) {
1837
- for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))
1838
- ;
1839
- return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];
1847
+ // read zip64 header sizes
1848
+ var z64hs = function (d, b, l, z, sc, su, off) {
1849
+ var nsc = sc == 4294967295, nsu = su == 4294967295, noff = off == 4294967295, e = b + l;
1850
+ var nf = nsc + nsu + noff;
1851
+ if (z && nf) {
1852
+ for (; b + 4 < e; b += 4 + b2(d, b + 2)) {
1853
+ if (b2(d, b) == 1) {
1854
+ return [
1855
+ nsc ? b8(d, b + 4 + 8 * nsu) : sc,
1856
+ nsu ? b8(d, b + 4) : su,
1857
+ noff ? b8(d, b + 4 + 8 * (nsu + nsc)) : off,
1858
+ 1
1859
+ ];
1860
+ }
1861
+ }
1862
+ // z == 2 for unknown whether or not zip64
1863
+ if (z < 2)
1864
+ err(13);
1865
+ }
1866
+ return [sc, su, off, 0];
1840
1867
  };
1841
1868
  // extra field length
1842
1869
  var exfl = function (ex) {
@@ -1938,6 +1965,8 @@ var ZipPassThrough = /*#__PURE__*/ (function () {
1938
1965
  this.size += chunk.length;
1939
1966
  if (final)
1940
1967
  this.crc = this.c.d();
1968
+ // we shouldn't really do this cast, but properly handling ArrayBufferLike
1969
+ // makes the API unergonomic with Buffer
1941
1970
  this.process(chunk, final || false);
1942
1971
  };
1943
1972
  return ZipPassThrough;
@@ -2317,8 +2346,9 @@ export function zipSync(data, opts) {
2317
2346
  var UnzipPassThrough = /*#__PURE__*/ (function () {
2318
2347
  function UnzipPassThrough() {
2319
2348
  }
2320
- UnzipPassThrough.prototype.push = function (data, final) {
2321
- this.ondata(null, data, final);
2349
+ UnzipPassThrough.prototype.push = function (chunk, final) {
2350
+ // same as ZipPassThrough: cast to retain Buffer ergonomics
2351
+ this.ondata(null, chunk, final);
2322
2352
  };
2323
2353
  UnzipPassThrough.compression = 0;
2324
2354
  return UnzipPassThrough;
@@ -2338,9 +2368,9 @@ var UnzipInflate = /*#__PURE__*/ (function () {
2338
2368
  _this.ondata(null, dat, final);
2339
2369
  });
2340
2370
  }
2341
- UnzipInflate.prototype.push = function (data, final) {
2371
+ UnzipInflate.prototype.push = function (chunk, final) {
2342
2372
  try {
2343
- this.i.push(data, final);
2373
+ this.i.push(chunk, final);
2344
2374
  }
2345
2375
  catch (e) {
2346
2376
  this.ondata(e, null, final);
@@ -2371,10 +2401,10 @@ var AsyncUnzipInflate = /*#__PURE__*/ (function () {
2371
2401
  this.terminate = this.i.terminate;
2372
2402
  }
2373
2403
  }
2374
- AsyncUnzipInflate.prototype.push = function (data, final) {
2404
+ AsyncUnzipInflate.prototype.push = function (chunk, final) {
2375
2405
  if (this.i.terminate)
2376
- data = slc(data, 0);
2377
- this.i.push(data, final);
2406
+ chunk = slc(chunk, 0);
2407
+ this.i.push(chunk, final);
2378
2408
  };
2379
2409
  AsyncUnzipInflate.compression = 8;
2380
2410
  return AsyncUnzipInflate;
@@ -2431,7 +2461,6 @@ var Unzip = /*#__PURE__*/ (function () {
2431
2461
  }
2432
2462
  var l = buf.length, oc = this.c, add = oc && this.d;
2433
2463
  var _loop_2 = function () {
2434
- var _a;
2435
2464
  var sig = b4(buf, i);
2436
2465
  if (sig == 0x4034B50) {
2437
2466
  f = 1, is = i;
@@ -2442,13 +2471,11 @@ var Unzip = /*#__PURE__*/ (function () {
2442
2471
  var chks_3 = [];
2443
2472
  this_1.k.unshift(chks_3);
2444
2473
  f = 2;
2445
- var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);
2474
+ var lsc = b4(buf, i + 18), lsu = b4(buf, i + 22);
2446
2475
  var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);
2447
- if (sc_1 == 4294967295) {
2448
- _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];
2449
- }
2450
- else if (dd)
2451
- sc_1 = -1;
2476
+ var _a = z64hs(buf, i, es, 2, lsc, lsu, 0), sc_1 = _a[0], su_1 = _a[1], z64 = _a[3];
2477
+ if (dd)
2478
+ sc_1 = -1 - z64;
2452
2479
  i += es;
2453
2480
  this_1.c = sc_1;
2454
2481
  var d_1;
@@ -2561,7 +2588,7 @@ export function unzip(data, opts, cb) {
2561
2588
  if (lft) {
2562
2589
  var c = lft;
2563
2590
  var o = b4(data, e + 16);
2564
- var z = o == 4294967295 || c == 65535;
2591
+ var z = b4(data, e - 20) == 0x7064B50;
2565
2592
  if (z) {
2566
2593
  var ze = b4(data, e - 12);
2567
2594
  z = b4(data, ze) == 0x6064B50;
@@ -2641,7 +2668,7 @@ export function unzipSync(data, opts) {
2641
2668
  if (!c)
2642
2669
  return {};
2643
2670
  var o = b4(data, e + 16);
2644
- var z = o == 4294967295 || c == 65535;
2671
+ var z = b4(data, e - 20) == 0x7064B50;
2645
2672
  if (z) {
2646
2673
  var ze = b4(data, e - 12);
2647
2674
  z = b4(data, ze) == 0x6064B50;
@@ -0,0 +1,27 @@
1
+ # MikkTSpace
2
+
3
+ JavaScript port of [Morten S. Mikkelsen's MikkTSpace reference](https://github.com/mmikk/MikkTSpace/blob/3e895b49d05ea07e4c2133156cfa94369e19e409/mikktspace.c), specialized for the triangle input and tangent output used by `BufferGeometryUtils.computeMikkTSpaceTangents()`.
4
+
5
+ ```js
6
+ import * as MikkTSpace from 'three/addons/libs/mikktspace.module.js';
7
+
8
+ const tangents = MikkTSpace.generateTangents( positions, normals, uvs );
9
+ ```
10
+
11
+ The inputs are matching, non-indexed `Float32Array` attributes: three position and normal components, and two UV components per vertex. Input components should be finite and normals should be unit length. As in the reference, extreme magnitudes can overflow intermediate float32 arithmetic. The result contains four components per vertex: tangent XYZ and handedness W. `computeMikkTSpaceTangents()` handles indexed, normalized, and interleaved geometry attributes and negates W by default for conventions such as glTF.
12
+
13
+ There is no initialization or WebAssembly dependency. The `isReady` and `ready` exports remain available for existing callers; `isReady` is always `true` and `ready` is an already resolved promise. `dispose()` is retained as a no-op because there are no persistent buffers to release.
14
+
15
+ The port retains attribute welding, connected orientation groups, angular subgroups, corner-angle weighting, float32 arithmetic, and degenerate-triangle fallback. Typed hash tables replace sorting and linear lookups, and projected derivatives and corner angles are reused within each group. It supports the reference's default 180-degree threshold and basic tangent output. Quads, custom thresholds, and bitangent/magnitude output are not exposed by this API.
16
+
17
+ ## Compatibility
18
+
19
+ This port intentionally corrects an edge-pairing defect in `BuildNeighborsFast()` in the upstream C revision linked above. Its two secondary sorting loops omit their final buckets. This can leave identical edges separated or use a different face order when pairing nonmanifold edges. The JavaScript implementation pairs all edges in face order.
20
+
21
+ This correction is part of the JavaScript port and is absent from the linked upstream C revision. For comparison, a local copy of that C revision was patched to add both missing final bucket sorts. The JavaScript output matches that locally patched copy on the tested inputs.
22
+
23
+ The bundled WASM implementation also contains this defect. Consequently, the new implementation can produce different tangents on affected meshes. For `ShaderBall.glb`, the preview mesh is identical; the calibration mesh changes at 129 corners, with a maximum angular difference of approximately 0.353 degrees and no handedness changes.
24
+
25
+ Completely collapsed triangles with no usable neighbor return the default `(1, 0, 0, -1)` already provided by the unmodified C reference. The previous WASM implementation could throw on these inputs. Empty input returns an empty array.
26
+
27
+ The original license is preserved in `mikktspace.module.js`, which is explicitly marked as an altered JavaScript port.