@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
@@ -173,6 +173,7 @@ class EXRLoader extends DataTextureLoader {
173
173
  const logBase = Math.pow( 2.7182818, 2.2 );
174
174
 
175
175
  let b44LogTable = null; // lazily initialized for pLinear B44 channels
176
+ let dwaToLinearTable = null; // lazily initialized for DWA lossy DCT channels
176
177
 
177
178
  function reverseLutFromBitmap( bitmap, lut ) {
178
179
 
@@ -1030,7 +1031,7 @@ class EXRLoader extends DataTextureLoader {
1030
1031
 
1031
1032
  for ( let x = 0; x < width; ++ x ) {
1032
1033
 
1033
- dataView.setFloat32( offset + x * INT16_SIZE * type, decodeFloat16( halfRow[ x ] ), true );
1034
+ dataView.setFloat32( offset + x * INT16_SIZE * type, DataUtils.fromHalfFloat( halfRow[ x ] ), true );
1034
1035
 
1035
1036
  }
1036
1037
 
@@ -1147,76 +1148,76 @@ class EXRLoader extends DataTextureLoader {
1147
1148
 
1148
1149
  function unZigZag( src, dst ) {
1149
1150
 
1150
- dst[ 0 ] = decodeFloat16( src[ 0 ] );
1151
- dst[ 1 ] = decodeFloat16( src[ 1 ] );
1152
- dst[ 2 ] = decodeFloat16( src[ 5 ] );
1153
- dst[ 3 ] = decodeFloat16( src[ 6 ] );
1154
- dst[ 4 ] = decodeFloat16( src[ 14 ] );
1155
- dst[ 5 ] = decodeFloat16( src[ 15 ] );
1156
- dst[ 6 ] = decodeFloat16( src[ 27 ] );
1157
- dst[ 7 ] = decodeFloat16( src[ 28 ] );
1158
- dst[ 8 ] = decodeFloat16( src[ 2 ] );
1159
- dst[ 9 ] = decodeFloat16( src[ 4 ] );
1160
-
1161
- dst[ 10 ] = decodeFloat16( src[ 7 ] );
1162
- dst[ 11 ] = decodeFloat16( src[ 13 ] );
1163
- dst[ 12 ] = decodeFloat16( src[ 16 ] );
1164
- dst[ 13 ] = decodeFloat16( src[ 26 ] );
1165
- dst[ 14 ] = decodeFloat16( src[ 29 ] );
1166
- dst[ 15 ] = decodeFloat16( src[ 42 ] );
1167
- dst[ 16 ] = decodeFloat16( src[ 3 ] );
1168
- dst[ 17 ] = decodeFloat16( src[ 8 ] );
1169
- dst[ 18 ] = decodeFloat16( src[ 12 ] );
1170
- dst[ 19 ] = decodeFloat16( src[ 17 ] );
1171
-
1172
- dst[ 20 ] = decodeFloat16( src[ 25 ] );
1173
- dst[ 21 ] = decodeFloat16( src[ 30 ] );
1174
- dst[ 22 ] = decodeFloat16( src[ 41 ] );
1175
- dst[ 23 ] = decodeFloat16( src[ 43 ] );
1176
- dst[ 24 ] = decodeFloat16( src[ 9 ] );
1177
- dst[ 25 ] = decodeFloat16( src[ 11 ] );
1178
- dst[ 26 ] = decodeFloat16( src[ 18 ] );
1179
- dst[ 27 ] = decodeFloat16( src[ 24 ] );
1180
- dst[ 28 ] = decodeFloat16( src[ 31 ] );
1181
- dst[ 29 ] = decodeFloat16( src[ 40 ] );
1182
-
1183
- dst[ 30 ] = decodeFloat16( src[ 44 ] );
1184
- dst[ 31 ] = decodeFloat16( src[ 53 ] );
1185
- dst[ 32 ] = decodeFloat16( src[ 10 ] );
1186
- dst[ 33 ] = decodeFloat16( src[ 19 ] );
1187
- dst[ 34 ] = decodeFloat16( src[ 23 ] );
1188
- dst[ 35 ] = decodeFloat16( src[ 32 ] );
1189
- dst[ 36 ] = decodeFloat16( src[ 39 ] );
1190
- dst[ 37 ] = decodeFloat16( src[ 45 ] );
1191
- dst[ 38 ] = decodeFloat16( src[ 52 ] );
1192
- dst[ 39 ] = decodeFloat16( src[ 54 ] );
1193
-
1194
- dst[ 40 ] = decodeFloat16( src[ 20 ] );
1195
- dst[ 41 ] = decodeFloat16( src[ 22 ] );
1196
- dst[ 42 ] = decodeFloat16( src[ 33 ] );
1197
- dst[ 43 ] = decodeFloat16( src[ 38 ] );
1198
- dst[ 44 ] = decodeFloat16( src[ 46 ] );
1199
- dst[ 45 ] = decodeFloat16( src[ 51 ] );
1200
- dst[ 46 ] = decodeFloat16( src[ 55 ] );
1201
- dst[ 47 ] = decodeFloat16( src[ 60 ] );
1202
- dst[ 48 ] = decodeFloat16( src[ 21 ] );
1203
- dst[ 49 ] = decodeFloat16( src[ 34 ] );
1204
-
1205
- dst[ 50 ] = decodeFloat16( src[ 37 ] );
1206
- dst[ 51 ] = decodeFloat16( src[ 47 ] );
1207
- dst[ 52 ] = decodeFloat16( src[ 50 ] );
1208
- dst[ 53 ] = decodeFloat16( src[ 56 ] );
1209
- dst[ 54 ] = decodeFloat16( src[ 59 ] );
1210
- dst[ 55 ] = decodeFloat16( src[ 61 ] );
1211
- dst[ 56 ] = decodeFloat16( src[ 35 ] );
1212
- dst[ 57 ] = decodeFloat16( src[ 36 ] );
1213
- dst[ 58 ] = decodeFloat16( src[ 48 ] );
1214
- dst[ 59 ] = decodeFloat16( src[ 49 ] );
1215
-
1216
- dst[ 60 ] = decodeFloat16( src[ 57 ] );
1217
- dst[ 61 ] = decodeFloat16( src[ 58 ] );
1218
- dst[ 62 ] = decodeFloat16( src[ 62 ] );
1219
- dst[ 63 ] = decodeFloat16( src[ 63 ] );
1151
+ dst[ 0 ] = DataUtils.fromHalfFloat( src[ 0 ] );
1152
+ dst[ 1 ] = DataUtils.fromHalfFloat( src[ 1 ] );
1153
+ dst[ 2 ] = DataUtils.fromHalfFloat( src[ 5 ] );
1154
+ dst[ 3 ] = DataUtils.fromHalfFloat( src[ 6 ] );
1155
+ dst[ 4 ] = DataUtils.fromHalfFloat( src[ 14 ] );
1156
+ dst[ 5 ] = DataUtils.fromHalfFloat( src[ 15 ] );
1157
+ dst[ 6 ] = DataUtils.fromHalfFloat( src[ 27 ] );
1158
+ dst[ 7 ] = DataUtils.fromHalfFloat( src[ 28 ] );
1159
+ dst[ 8 ] = DataUtils.fromHalfFloat( src[ 2 ] );
1160
+ dst[ 9 ] = DataUtils.fromHalfFloat( src[ 4 ] );
1161
+
1162
+ dst[ 10 ] = DataUtils.fromHalfFloat( src[ 7 ] );
1163
+ dst[ 11 ] = DataUtils.fromHalfFloat( src[ 13 ] );
1164
+ dst[ 12 ] = DataUtils.fromHalfFloat( src[ 16 ] );
1165
+ dst[ 13 ] = DataUtils.fromHalfFloat( src[ 26 ] );
1166
+ dst[ 14 ] = DataUtils.fromHalfFloat( src[ 29 ] );
1167
+ dst[ 15 ] = DataUtils.fromHalfFloat( src[ 42 ] );
1168
+ dst[ 16 ] = DataUtils.fromHalfFloat( src[ 3 ] );
1169
+ dst[ 17 ] = DataUtils.fromHalfFloat( src[ 8 ] );
1170
+ dst[ 18 ] = DataUtils.fromHalfFloat( src[ 12 ] );
1171
+ dst[ 19 ] = DataUtils.fromHalfFloat( src[ 17 ] );
1172
+
1173
+ dst[ 20 ] = DataUtils.fromHalfFloat( src[ 25 ] );
1174
+ dst[ 21 ] = DataUtils.fromHalfFloat( src[ 30 ] );
1175
+ dst[ 22 ] = DataUtils.fromHalfFloat( src[ 41 ] );
1176
+ dst[ 23 ] = DataUtils.fromHalfFloat( src[ 43 ] );
1177
+ dst[ 24 ] = DataUtils.fromHalfFloat( src[ 9 ] );
1178
+ dst[ 25 ] = DataUtils.fromHalfFloat( src[ 11 ] );
1179
+ dst[ 26 ] = DataUtils.fromHalfFloat( src[ 18 ] );
1180
+ dst[ 27 ] = DataUtils.fromHalfFloat( src[ 24 ] );
1181
+ dst[ 28 ] = DataUtils.fromHalfFloat( src[ 31 ] );
1182
+ dst[ 29 ] = DataUtils.fromHalfFloat( src[ 40 ] );
1183
+
1184
+ dst[ 30 ] = DataUtils.fromHalfFloat( src[ 44 ] );
1185
+ dst[ 31 ] = DataUtils.fromHalfFloat( src[ 53 ] );
1186
+ dst[ 32 ] = DataUtils.fromHalfFloat( src[ 10 ] );
1187
+ dst[ 33 ] = DataUtils.fromHalfFloat( src[ 19 ] );
1188
+ dst[ 34 ] = DataUtils.fromHalfFloat( src[ 23 ] );
1189
+ dst[ 35 ] = DataUtils.fromHalfFloat( src[ 32 ] );
1190
+ dst[ 36 ] = DataUtils.fromHalfFloat( src[ 39 ] );
1191
+ dst[ 37 ] = DataUtils.fromHalfFloat( src[ 45 ] );
1192
+ dst[ 38 ] = DataUtils.fromHalfFloat( src[ 52 ] );
1193
+ dst[ 39 ] = DataUtils.fromHalfFloat( src[ 54 ] );
1194
+
1195
+ dst[ 40 ] = DataUtils.fromHalfFloat( src[ 20 ] );
1196
+ dst[ 41 ] = DataUtils.fromHalfFloat( src[ 22 ] );
1197
+ dst[ 42 ] = DataUtils.fromHalfFloat( src[ 33 ] );
1198
+ dst[ 43 ] = DataUtils.fromHalfFloat( src[ 38 ] );
1199
+ dst[ 44 ] = DataUtils.fromHalfFloat( src[ 46 ] );
1200
+ dst[ 45 ] = DataUtils.fromHalfFloat( src[ 51 ] );
1201
+ dst[ 46 ] = DataUtils.fromHalfFloat( src[ 55 ] );
1202
+ dst[ 47 ] = DataUtils.fromHalfFloat( src[ 60 ] );
1203
+ dst[ 48 ] = DataUtils.fromHalfFloat( src[ 21 ] );
1204
+ dst[ 49 ] = DataUtils.fromHalfFloat( src[ 34 ] );
1205
+
1206
+ dst[ 50 ] = DataUtils.fromHalfFloat( src[ 37 ] );
1207
+ dst[ 51 ] = DataUtils.fromHalfFloat( src[ 47 ] );
1208
+ dst[ 52 ] = DataUtils.fromHalfFloat( src[ 50 ] );
1209
+ dst[ 53 ] = DataUtils.fromHalfFloat( src[ 56 ] );
1210
+ dst[ 54 ] = DataUtils.fromHalfFloat( src[ 59 ] );
1211
+ dst[ 55 ] = DataUtils.fromHalfFloat( src[ 61 ] );
1212
+ dst[ 56 ] = DataUtils.fromHalfFloat( src[ 35 ] );
1213
+ dst[ 57 ] = DataUtils.fromHalfFloat( src[ 36 ] );
1214
+ dst[ 58 ] = DataUtils.fromHalfFloat( src[ 48 ] );
1215
+ dst[ 59 ] = DataUtils.fromHalfFloat( src[ 49 ] );
1216
+
1217
+ dst[ 60 ] = DataUtils.fromHalfFloat( src[ 57 ] );
1218
+ dst[ 61 ] = DataUtils.fromHalfFloat( src[ 58 ] );
1219
+ dst[ 62 ] = DataUtils.fromHalfFloat( src[ 62 ] );
1220
+ dst[ 63 ] = DataUtils.fromHalfFloat( src[ 63 ] );
1220
1221
 
1221
1222
  }
1222
1223
 
@@ -1324,25 +1325,58 @@ class EXRLoader extends DataTextureLoader {
1324
1325
 
1325
1326
  }
1326
1327
 
1327
- function convertToHalf( src, dst, idx ) {
1328
+ const _f32 = new Float32Array( 1 );
1329
+ const _u32 = new Uint32Array( _f32.buffer );
1328
1330
 
1329
- for ( let i = 0; i < 64; ++ i ) {
1331
+ // float -> half bits with round-to-nearest-even, like Imath's float_to_half
1332
+ // (DataUtils.toHalfFloat truncates, which is what put DWA output 1-5 ulp off OpenEXR).
1333
+ function floatToHalfBits( f ) {
1334
+
1335
+ _f32[ 0 ] = f;
1336
+ const x = _u32[ 0 ];
1337
+ const sign = ( x >>> 16 ) & 0x8000;
1338
+ const a = x & 0x7fffffff;
1330
1339
 
1331
- dst[ idx + i ] = DataUtils.toHalfFloat( toLinear( src[ i ] ) );
1340
+ if ( a >= 0x47800000 ) return sign | ( a > 0x7f800000 ? 0x7e00 : 0x7c00 ); // overflow, Inf, NaN
1341
+
1342
+ if ( a < 0x38800000 ) { // subnormal or zero in half
1343
+
1344
+ _f32[ 0 ] = Math.abs( f ) + 0.5; // 0.5 = 2^-1: forces rounding to a 2^-24 grid
1345
+ return sign | ( _u32[ 0 ] - 0x3f000000 );
1332
1346
 
1333
1347
  }
1334
1348
 
1349
+ const r = a + 0xfff + ( ( a >>> 13 ) & 1 );
1350
+ return sign | ( ( r - 0x38000000 ) >>> 13 );
1351
+
1335
1352
  }
1336
1353
 
1337
- function toLinear( float ) {
1354
+ function convertToHalf( src, dst, idx ) {
1338
1355
 
1339
- if ( float <= 1 ) {
1356
+ if ( dwaToLinearTable === null ) {
1340
1357
 
1341
- return Math.sign( float ) * Math.pow( Math.abs( float ), 2.2 );
1358
+ // Mirrors OpenEXR dwaLookups.cpp: gamma 2.2 below 1, log curve above,
1359
+ // applied to the half bits after rounding so results match bit for bit.
1342
1360
 
1343
- } else {
1361
+ dwaToLinearTable = new Uint16Array( 65536 );
1362
+
1363
+ for ( let i = 1; i < 65536; ++ i ) {
1364
+
1365
+ if ( ( i & 0x7c00 ) === 0x7c00 ) continue; // NaN / Inf -> 0
1366
+
1367
+ const h = DataUtils.fromHalfFloat( i );
1368
+ const v = Math.abs( h );
1369
+ const linear = v <= 1 ? Math.pow( v, 2.2 ) : Math.pow( logBase, v - 1 );
1370
+
1371
+ dwaToLinearTable[ i ] = floatToHalfBits( h < 0 ? - linear : linear );
1344
1372
 
1345
- return Math.sign( float ) * Math.pow( logBase, Math.abs( float ) - 1.0 );
1373
+ }
1374
+
1375
+ }
1376
+
1377
+ for ( let i = 0; i < 64; ++ i ) {
1378
+
1379
+ dst[ idx + i ] = dwaToLinearTable[ floatToHalfBits( src[ i ] ) ];
1346
1380
 
1347
1381
  }
1348
1382
 
@@ -1694,7 +1728,7 @@ class EXRLoader extends DataTextureLoader {
1694
1728
 
1695
1729
  } else {
1696
1730
 
1697
- const f = decodeFloat16( i );
1731
+ const f = DataUtils.fromHalfFloat( i );
1698
1732
  b44LogTable[ i ] = ( f <= 0 ) ? 0 : DataUtils.toHalfFloat( 8 * Math.log( f ) );
1699
1733
 
1700
1734
  }
@@ -2106,24 +2140,6 @@ class EXRLoader extends DataTextureLoader {
2106
2140
 
2107
2141
  }
2108
2142
 
2109
- // https://stackoverflow.com/questions/5678432/decompressing-half-precision-floats-in-javascript
2110
- function decodeFloat16( binary ) {
2111
-
2112
- const exponent = ( binary & 0x7C00 ) >> 10,
2113
- fraction = binary & 0x03FF;
2114
-
2115
- return ( binary >> 15 ? - 1 : 1 ) * (
2116
- exponent ?
2117
- (
2118
- exponent === 0x1F ?
2119
- fraction ? NaN : Infinity :
2120
- Math.pow( 2, exponent - 15 ) * ( 1 + fraction / 0x400 )
2121
- ) :
2122
- 6.103515625e-5 * ( fraction / 0x400 )
2123
- );
2124
-
2125
- }
2126
-
2127
2143
  function parseUint16( dataView, offset ) {
2128
2144
 
2129
2145
  const Uint16 = dataView.getUint16( offset.value, true );
@@ -2136,7 +2152,7 @@ class EXRLoader extends DataTextureLoader {
2136
2152
 
2137
2153
  function parseFloat16( buffer, offset ) {
2138
2154
 
2139
- return decodeFloat16( parseUint16( buffer, offset ) );
2155
+ return DataUtils.fromHalfFloat( parseUint16( buffer, offset ) );
2140
2156
 
2141
2157
  }
2142
2158
 
@@ -2724,7 +2740,7 @@ class EXRLoader extends DataTextureLoader {
2724
2740
  const aOff = channelOffsets[ alphaChannelIdx ] + sampleIdx * aBps;
2725
2741
 
2726
2742
  sampleAlpha = aBps === 2
2727
- ? decodeFloat16( pixelView.getUint16( aOff, true ) )
2743
+ ? DataUtils.fromHalfFloat( pixelView.getUint16( aOff, true ) )
2728
2744
  : pixelView.getFloat32( aOff, true );
2729
2745
 
2730
2746
  }
@@ -2741,7 +2757,7 @@ class EXRLoader extends DataTextureLoader {
2741
2757
  const dataOff = channelOffsets[ ci ] + sampleIdx * bps;
2742
2758
 
2743
2759
  const value = bps === 2
2744
- ? decodeFloat16( pixelView.getUint16( dataOff, true ) )
2760
+ ? DataUtils.fromHalfFloat( pixelView.getUint16( dataOff, true ) )
2745
2761
  : pixelView.getFloat32( dataOff, true );
2746
2762
 
2747
2763
  composited[ cOff ] += value * factor;
@@ -3303,9 +3319,9 @@ class EXRLoader extends DataTextureLoader {
3303
3319
  for ( let i = 0; i < nPixels; i ++ ) {
3304
3320
 
3305
3321
  const base = i * 4;
3306
- const Y = decodeFloat16( byteArray[ base ] );
3307
- const RY = decodeFloat16( byteArray[ base + 1 ] );
3308
- const BY = decodeFloat16( byteArray[ base + 2 ] );
3322
+ const Y = DataUtils.fromHalfFloat( byteArray[ base ] );
3323
+ const RY = DataUtils.fromHalfFloat( byteArray[ base + 1 ] );
3324
+ const BY = DataUtils.fromHalfFloat( byteArray[ base + 2 ] );
3309
3325
  const R = ( 1 + RY ) * Y;
3310
3326
  const B = ( 1 + BY ) * Y;
3311
3327
  const G = ( Y - R * 0.2126 - B * 0.0722 ) / 0.7152;
@@ -114,6 +114,8 @@ class FBXLoader extends Loader {
114
114
  const path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;
115
115
 
116
116
  const loader = new FileLoader( this.manager );
117
+ loader.setPriority( this.priority );
118
+ loader.setCache( this.cache );
117
119
  loader.setPath( scope.path );
118
120
  loader.setResponseType( 'arraybuffer' );
119
121
  loader.setRequestHeader( scope.requestHeader );
@@ -181,6 +183,8 @@ class FBXLoader extends Loader {
181
183
  // console.log( fbxTree );
182
184
 
183
185
  const textureLoader = new TextureLoader( this.manager ).setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );
186
+ textureLoader.setPriority( this.priority );
187
+ textureLoader.setCache( this.cache );
184
188
 
185
189
  return new FBXTreeParser( textureLoader, this.manager, this.trimAnimationClips ).parse( fbxTree );
186
190
 
@@ -44,6 +44,8 @@ class FontLoader extends Loader {
44
44
  const scope = this;
45
45
 
46
46
  const loader = new FileLoader( this.manager );
47
+ loader.setPriority( this.priority );
48
+ loader.setCache( this.cache );
47
49
  loader.setPath( this.path );
48
50
  loader.setRequestHeader( this.requestHeader );
49
51
  loader.setWithCredentials( this.withCredentials );
@@ -57,6 +57,8 @@ class GCodeLoader extends Loader {
57
57
  const scope = this;
58
58
 
59
59
  const loader = new FileLoader( scope.manager );
60
+ loader.setPriority( scope.priority );
61
+ loader.setCache( scope.cache );
60
62
  loader.setPath( scope.path );
61
63
  loader.setRequestHeader( scope.requestHeader );
62
64
  loader.setWithCredentials( scope.withCredentials );
@@ -135,12 +137,6 @@ class GCodeLoader extends Loader {
135
137
 
136
138
  }
137
139
 
138
- function delta( v1, v2 ) {
139
-
140
- return state.relative ? v2 : v2 - v1;
141
-
142
- }
143
-
144
140
  function absolute( v1, v2 ) {
145
141
 
146
142
  return state.relative ? v1 + v2 : v2;
@@ -159,7 +155,7 @@ class GCodeLoader extends Loader {
159
155
 
160
156
  for ( let i = 0; i < lines.length; i ++ ) {
161
157
 
162
- const tokens = lines[ i ].split( ' ' );
158
+ const tokens = lines[ i ].trim().split( /\s+/ );
163
159
  const cmd = tokens[ 0 ].toUpperCase();
164
160
 
165
161
  //Arguments
@@ -189,9 +185,9 @@ class GCodeLoader extends Loader {
189
185
  if ( args.f !== undefined ) line.f = absolute( state.f, args.f );
190
186
 
191
187
  //Layer change detection is or made by watching Z, it's made by watching when we extrude at a new Z position
192
- if ( delta( state.e, line.e ) > 0 ) {
188
+ if ( line.e > state.e ) {
193
189
 
194
- state.extruding = delta( state.e, line.e ) > 0;
190
+ state.extruding = true;
195
191
 
196
192
  if ( currentLayer == undefined || line.z != currentLayer.z ) {
197
193
 
@@ -86,6 +86,7 @@ import { clone } from '../utils/SkeletonUtils.js';
86
86
  * - KHR_lights_punctual
87
87
  * - KHR_materials_anisotropy
88
88
  * - KHR_materials_clearcoat
89
+ * - KHR_materials_diffuse_roughness
89
90
  * - KHR_materials_dispersion
90
91
  * - KHR_materials_emissive_strength
91
92
  * - KHR_materials_ior
@@ -149,6 +150,12 @@ class GLTFLoader extends Loader {
149
150
 
150
151
  } );
151
152
 
153
+ this.register( function ( parser ) {
154
+
155
+ return new GLTFMaterialsDiffuseRoughnessExtension( parser );
156
+
157
+ } );
158
+
152
159
  this.register( function ( parser ) {
153
160
 
154
161
  return new GLTFMaterialsDispersionExtension( parser );
@@ -311,6 +318,8 @@ class GLTFLoader extends Loader {
311
318
  };
312
319
 
313
320
  const loader = new FileLoader( this.manager );
321
+ loader.setPriority( this.priority );
322
+ loader.setCache( this.cache );
314
323
 
315
324
  loader.setPath( this.path );
316
325
  loader.setResponseType( 'arraybuffer' );
@@ -480,6 +489,9 @@ class GLTFLoader extends Loader {
480
489
 
481
490
  path: path || this.resourcePath || '',
482
491
  crossOrigin: this.crossOrigin,
492
+ priority: this.priority,
493
+ cache: this.cache,
494
+ withCredentials: this.withCredentials,
483
495
  requestHeader: this.requestHeader,
484
496
  manager: this.manager,
485
497
  ktx2Loader: this.ktx2Loader,
@@ -631,6 +643,7 @@ const EXTENSIONS = {
631
643
  KHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',
632
644
  KHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',
633
645
  KHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',
646
+ KHR_MATERIALS_DIFFUSE_ROUGHNESS: 'KHR_materials_diffuse_roughness',
634
647
  KHR_MATERIALS_DISPERSION: 'KHR_materials_dispersion',
635
648
  KHR_MATERIALS_IOR: 'KHR_materials_ior',
636
649
  KHR_MATERIALS_SHEEN: 'KHR_materials_sheen',
@@ -955,6 +968,52 @@ class GLTFMaterialsClearcoatExtension {
955
968
 
956
969
  }
957
970
 
971
+ /**
972
+ * Diffuse Roughness Materials Extension
973
+ *
974
+ * Specification: https://github.com/MiiBond/glTF/tree/mbond/EXT_materials_diffuse_roughness/extensions/2.0/Khronos/KHR_materials_diffuse_roughness
975
+ *
976
+ * @private
977
+ */
978
+ class GLTFMaterialsDiffuseRoughnessExtension {
979
+
980
+ constructor( parser ) {
981
+
982
+ this.parser = parser;
983
+ this.name = EXTENSIONS.KHR_MATERIALS_DIFFUSE_ROUGHNESS;
984
+
985
+ }
986
+
987
+ getMaterialType( materialIndex ) {
988
+
989
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
990
+
991
+ return extension !== null ? MeshPhysicalMaterial : null;
992
+
993
+ }
994
+
995
+ extendMaterialParams( materialIndex, materialParams ) {
996
+
997
+ const extension = getMaterialExtension( this.parser, materialIndex, this.name );
998
+
999
+ if ( extension === null ) return Promise.resolve();
1000
+
1001
+ const pending = [];
1002
+
1003
+ materialParams.diffuseRoughness = extension.diffuseRoughnessFactor !== undefined ? extension.diffuseRoughnessFactor : 0;
1004
+
1005
+ if ( extension.diffuseRoughnessTexture !== undefined ) {
1006
+
1007
+ pending.push( this.parser.assignTexture( materialParams, 'diffuseRoughnessMap', extension.diffuseRoughnessTexture ) );
1008
+
1009
+ }
1010
+
1011
+ return Promise.all( pending );
1012
+
1013
+ }
1014
+
1015
+ }
1016
+
958
1017
  /**
959
1018
  * Materials dispersion Extension
960
1019
  *
@@ -1043,21 +1102,15 @@ class GLTFMaterialsIridescenceExtension {
1043
1102
 
1044
1103
  }
1045
1104
 
1046
- if ( materialParams.iridescenceThicknessRange === undefined ) {
1047
-
1048
- materialParams.iridescenceThicknessRange = [ 100, 400 ];
1049
-
1050
- }
1051
-
1052
1105
  if ( extension.iridescenceThicknessMinimum !== undefined ) {
1053
1106
 
1054
- materialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;
1107
+ materialParams.iridescenceThicknessMinimum = extension.iridescenceThicknessMinimum;
1055
1108
 
1056
1109
  }
1057
1110
 
1058
1111
  if ( extension.iridescenceThicknessMaximum !== undefined ) {
1059
1112
 
1060
- materialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;
1113
+ materialParams.iridescenceThicknessMaximum = extension.iridescenceThicknessMaximum;
1061
1114
 
1062
1115
  }
1063
1116
 
@@ -2654,20 +2707,27 @@ class GLTFParser {
2654
2707
  if ( typeof createImageBitmap === 'undefined' || ( isSafari && safariVersion < 17 ) || ( isFirefox && firefoxVersion < 98 ) ) {
2655
2708
 
2656
2709
  this.textureLoader = new TextureLoader( this.options.manager );
2710
+ this.textureLoader.setPriority( this.options.priority );
2711
+ this.textureLoader.setCache( this.options.cache );
2657
2712
 
2658
2713
  } else {
2659
2714
 
2660
2715
  this.textureLoader = new ImageBitmapLoader( this.options.manager );
2716
+ this.textureLoader.setPriority( this.options.priority );
2717
+ this.textureLoader.setCache( this.options.cache );
2661
2718
 
2662
2719
  }
2663
2720
 
2664
2721
  this.textureLoader.setCrossOrigin( this.options.crossOrigin );
2722
+ this.textureLoader.setWithCredentials( this.options.withCredentials );
2665
2723
  this.textureLoader.setRequestHeader( this.options.requestHeader );
2666
2724
 
2667
2725
  this.fileLoader = new FileLoader( this.options.manager );
2726
+ this.fileLoader.setPriority( this.options.priority );
2727
+ this.fileLoader.setCache( this.options.cache );
2668
2728
  this.fileLoader.setResponseType( 'arraybuffer' );
2669
2729
 
2670
- if ( this.options.crossOrigin === 'use-credentials' ) {
2730
+ if ( this.options.withCredentials || this.options.crossOrigin === 'use-credentials' ) {
2671
2731
 
2672
2732
  this.fileLoader.setWithCredentials( true );
2673
2733
 
@@ -3356,50 +3416,71 @@ class GLTFParser {
3356
3416
 
3357
3417
  let sourceURI = sourceDef.uri || '';
3358
3418
  let isObjectURL = false;
3419
+ let pending;
3420
+
3421
+ if ( loader.isKTX2Loader === true && sourceDef.bufferView !== undefined ) {
3359
3422
 
3360
- if ( sourceDef.bufferView !== undefined ) {
3423
+ // KTX2Loader parses the binary image data from bufferView directly (see #35193).
3361
3424
 
3362
- // Load binary image data from bufferView, if provided.
3425
+ pending = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {
3363
3426
 
3364
- sourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {
3427
+ return new Promise( function ( resolve, reject ) {
3365
3428
 
3366
- isObjectURL = true;
3367
- const blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );
3368
- sourceURI = URL.createObjectURL( blob );
3369
- return sourceURI;
3429
+ loader.parse( bufferView, resolve, reject );
3430
+
3431
+ } );
3370
3432
 
3371
3433
  } );
3372
3434
 
3373
- } else if ( sourceDef.uri === undefined ) {
3435
+ } else {
3374
3436
 
3375
- throw new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );
3437
+ if ( sourceDef.bufferView !== undefined ) {
3376
3438
 
3377
- }
3439
+ // Load binary image data from bufferView, if provided.
3378
3440
 
3379
- const promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {
3441
+ sourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {
3380
3442
 
3381
- return new Promise( function ( resolve, reject ) {
3443
+ isObjectURL = true;
3444
+ const blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );
3445
+ sourceURI = URL.createObjectURL( blob );
3446
+ return sourceURI;
3382
3447
 
3383
- let onLoad = resolve;
3448
+ } );
3384
3449
 
3385
- if ( loader.isImageBitmapLoader === true ) {
3450
+ } else if ( sourceDef.uri === undefined ) {
3386
3451
 
3387
- onLoad = function ( imageBitmap ) {
3452
+ throw new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );
3388
3453
 
3389
- const texture = new Texture( imageBitmap );
3390
- texture.needsUpdate = true;
3454
+ }
3391
3455
 
3392
- resolve( texture );
3456
+ pending = Promise.resolve( sourceURI ).then( function ( sourceURI ) {
3393
3457
 
3394
- };
3458
+ return new Promise( function ( resolve, reject ) {
3395
3459
 
3396
- }
3460
+ let onLoad = resolve;
3461
+
3462
+ if ( loader.isImageBitmapLoader === true ) {
3463
+
3464
+ onLoad = function ( imageBitmap ) {
3465
+
3466
+ const texture = new Texture( imageBitmap );
3467
+ texture.needsUpdate = true;
3397
3468
 
3398
- loader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );
3469
+ resolve( texture );
3470
+
3471
+ };
3472
+
3473
+ }
3474
+
3475
+ loader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );
3476
+
3477
+ } );
3399
3478
 
3400
3479
  } );
3401
3480
 
3402
- } ).then( function ( texture ) {
3481
+ }
3482
+
3483
+ const promise = pending.then( function ( texture ) {
3403
3484
 
3404
3485
  // Clean up resources and configure Texture.
3405
3486
 
@@ -89,6 +89,8 @@ class GaussianSplatPLYLoader extends Loader {
89
89
  const scope = this;
90
90
 
91
91
  const loader = new FileLoader( this.manager );
92
+ loader.setPriority( this.priority );
93
+ loader.setCache( this.cache );
92
94
  loader.setPath( this.path );
93
95
  loader.setResponseType( 'arraybuffer' );
94
96
  loader.setRequestHeader( this.requestHeader );
@@ -97,8 +97,11 @@ class HDRCubeTextureLoader extends Loader {
97
97
  function loadHDRData( i, onLoad, onProgress, onError ) {
98
98
 
99
99
  new FileLoader( scope.manager )
100
+ .setPriority( scope.priority )
101
+ .setCache( scope.cache )
100
102
  .setPath( scope.path )
101
103
  .setResponseType( 'arraybuffer' )
104
+ .setRequestHeader( scope.requestHeader )
102
105
  .setWithCredentials( scope.withCredentials )
103
106
  .load( urls[ i ], function ( buffer ) {
104
107