@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
@@ -9,8 +9,21 @@ import * as fflate from '../libs/fflate.module.js';
9
9
  const textEncoder = new TextEncoder();
10
10
 
11
11
  const NO_COMPRESSION = 0;
12
+ const RLE_COMPRESSION = 1;
12
13
  const ZIPS_COMPRESSION = 2;
13
14
  const ZIP_COMPRESSION = 3;
15
+ const PIZ_COMPRESSION = 4;
16
+
17
+ const USHORT_RANGE = 1 << 16;
18
+ const BITMAP_SIZE = USHORT_RANGE >> 3;
19
+ const A_OFFSET = 1 << 15;
20
+ const M_OFFSET = 1 << 15;
21
+ const MOD_MASK = ( 1 << 16 ) - 1;
22
+ const HUF_ENCSIZE = ( 1 << 16 ) + 1;
23
+ const SHORT_ZEROCODE_RUN = 59;
24
+ const LONG_ZEROCODE_RUN = 63;
25
+ const SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;
26
+ const LONGEST_LONG_RUN = 255 + SHORTEST_LONG_RUN;
14
27
 
15
28
  /**
16
29
  * An exporter for EXR.
@@ -35,7 +48,7 @@ class EXRExporter {
35
48
  * This method has two variants.
36
49
  *
37
50
  * - When exporting a data texture, it receives two parameters. The texture and the exporter options.
38
- * - When exporting a render target (e.g. a PMREM), it receives three parameters. The renderer, the
51
+ * - When exporting a render target, it receives three parameters. The renderer, the
39
52
  * render target and the exporter options.
40
53
  *
41
54
  * @async
@@ -54,7 +67,7 @@ class EXRExporter {
54
67
 
55
68
  const renderer = arg1, renderTarget = arg2, options = arg3;
56
69
 
57
- supportedRTT( renderTarget );
70
+ supportedRTT( renderTarget, options );
58
71
 
59
72
  const info = buildInfoRTT( renderTarget, options ),
60
73
  dataBuffer = await getPixelData( renderer, renderTarget, info ),
@@ -82,7 +95,7 @@ class EXRExporter {
82
95
 
83
96
  }
84
97
 
85
- function supportedRTT( renderTarget ) {
98
+ function supportedRTT( renderTarget, options = {} ) {
86
99
 
87
100
  if ( ! renderTarget || ! renderTarget.isRenderTarget ) {
88
101
 
@@ -90,19 +103,28 @@ function supportedRTT( renderTarget ) {
90
103
 
91
104
  }
92
105
 
106
+ const textureIndex = ( options.textureIndex !== undefined ) ? options.textureIndex : 0;
107
+ const texture = renderTarget.textures[ textureIndex ];
108
+
109
+ if ( texture === undefined ) {
110
+
111
+ throw Error( 'EXRExporter.parse: Invalid textureIndex, the render target has ' + renderTarget.textures.length + ' texture(s).' );
112
+
113
+ }
114
+
93
115
  if ( renderTarget.isCubeRenderTarget || renderTarget.isWebGLCubeRenderTarget || renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
94
116
 
95
117
  throw Error( 'EXRExporter.parse: Unsupported render target type, expected instance of WebGLRenderTarget.' );
96
118
 
97
119
  }
98
120
 
99
- if ( renderTarget.texture.type !== FloatType && renderTarget.texture.type !== HalfFloatType ) {
121
+ if ( texture.type !== FloatType && texture.type !== HalfFloatType ) {
100
122
 
101
123
  throw Error( 'EXRExporter.parse: Unsupported WebGLRenderTarget texture type.' );
102
124
 
103
125
  }
104
126
 
105
- if ( renderTarget.texture.format !== RGBAFormat ) {
127
+ if ( texture.format !== RGBAFormat ) {
106
128
 
107
129
  throw Error( 'EXRExporter.parse: Unsupported WebGLRenderTarget texture format, expected RGBAFormat.' );
108
130
 
@@ -148,14 +170,18 @@ function buildInfoRTT( renderTarget, options = {} ) {
148
170
 
149
171
  const compressionSizes = {
150
172
  0: 1,
173
+ 1: 1,
151
174
  2: 1,
152
- 3: 16
175
+ 3: 16,
176
+ 4: 32
153
177
  };
154
178
 
155
- const WIDTH = renderTarget.width,
179
+ const TEXTURE_INDEX = ( options.textureIndex !== undefined ) ? options.textureIndex : 0,
180
+ TEXTURE = renderTarget.textures[ TEXTURE_INDEX ],
181
+ WIDTH = renderTarget.width,
156
182
  HEIGHT = renderTarget.height,
157
- TYPE = renderTarget.texture.type,
158
- FORMAT = renderTarget.texture.format,
183
+ TYPE = TEXTURE.type,
184
+ FORMAT = TEXTURE.format,
159
185
  COMPRESSION = ( options.compression !== undefined ) ? options.compression : ZIP_COMPRESSION,
160
186
  EXPORTER_TYPE = ( options.type !== undefined ) ? options.type : HalfFloatType,
161
187
  OUT_TYPE = ( EXPORTER_TYPE === FloatType ) ? 2 : 1,
@@ -174,6 +200,7 @@ function buildInfoRTT( renderTarget, options = {} ) {
174
200
  numBlocks: Math.ceil( HEIGHT / COMPRESSION_SIZE ),
175
201
  numInputChannels: 4,
176
202
  numOutputChannels: NUM_CHANNELS,
203
+ textureIndex: TEXTURE_INDEX,
177
204
  };
178
205
 
179
206
  }
@@ -182,8 +209,10 @@ function buildInfoDT( texture, options = {} ) {
182
209
 
183
210
  const compressionSizes = {
184
211
  0: 1,
212
+ 1: 1,
185
213
  2: 1,
186
- 3: 16
214
+ 3: 16,
215
+ 4: 32
187
216
  };
188
217
 
189
218
  const WIDTH = texture.image.width,
@@ -228,11 +257,11 @@ async function getPixelData( renderer, rtt, info ) {
228
257
 
229
258
  }
230
259
 
231
- await renderer.readRenderTargetPixelsAsync( rtt, 0, 0, info.width, info.height, dataBuffer );
260
+ await renderer.readRenderTargetPixelsAsync( rtt, 0, 0, info.width, info.height, dataBuffer, undefined, info.textureIndex );
232
261
 
233
262
  } else {
234
263
 
235
- dataBuffer = await renderer.readRenderTargetPixelsAsync( rtt, 0, 0, info.width, info.height );
264
+ dataBuffer = await renderer.readRenderTargetPixelsAsync( rtt, 0, 0, info.width, info.height, info.textureIndex );
236
265
 
237
266
  }
238
267
 
@@ -302,11 +331,19 @@ function compressData( inBuffer, info ) {
302
331
  compress = compressNONE;
303
332
  break;
304
333
 
334
+ case 1:
335
+ compress = compressRLE;
336
+ break;
337
+
305
338
  case 2:
306
339
  case 3:
307
340
  compress = compressZIP;
308
341
  break;
309
342
 
343
+ case 4:
344
+ compress = compressPIZ;
345
+ break;
346
+
310
347
  }
311
348
 
312
349
  if ( info.compression !== 0 ) {
@@ -319,7 +356,9 @@ function compressData( inBuffer, info ) {
319
356
 
320
357
  const arr = inBuffer.subarray( size * i, size * ( i + 1 ) );
321
358
 
322
- const block = compress( arr, tmpBuffer );
359
+ let block = compress( arr, tmpBuffer, info );
360
+
361
+ if ( block.length >= arr.length ) block = arr;
323
362
 
324
363
  sum += block.length;
325
364
 
@@ -339,7 +378,9 @@ function compressNONE( data ) {
339
378
 
340
379
  }
341
380
 
342
- function compressZIP( data, tmpBuffer ) {
381
+ function reorderAndPredict( data, tmpBuffer ) {
382
+
383
+ tmpBuffer = tmpBuffer.subarray( 0, data.length );
343
384
 
344
385
  //
345
386
  // Reorder the pixel data.
@@ -375,12 +416,627 @@ function compressZIP( data, tmpBuffer ) {
375
416
 
376
417
  }
377
418
 
419
+ return tmpBuffer;
420
+
421
+ }
422
+
423
+ function compressRLE( data, tmpBuffer ) {
424
+
425
+ tmpBuffer = reorderAndPredict( data, tmpBuffer );
426
+
427
+ const out = new Uint8Array( tmpBuffer.length * 2 );
428
+ const end = tmpBuffer.length;
429
+
430
+ let runs = 0, rune = 1, o = 0;
431
+
432
+ while ( runs < end ) {
433
+
434
+ let count = 0;
435
+
436
+ while ( rune < end && tmpBuffer[ runs ] === tmpBuffer[ rune ] && count < 127 ) {
437
+
438
+ rune ++;
439
+ count ++;
440
+
441
+ }
442
+
443
+ if ( count >= 2 ) {
444
+
445
+ out[ o ++ ] = count;
446
+ out[ o ++ ] = tmpBuffer[ runs ];
447
+
448
+ runs = rune;
449
+
450
+ } else {
451
+
452
+ count ++;
453
+
454
+ while ( rune < end &&
455
+ ( ( rune + 1 >= end || tmpBuffer[ rune ] !== tmpBuffer[ rune + 1 ] ) ||
456
+ ( rune + 2 >= end || tmpBuffer[ rune + 1 ] !== tmpBuffer[ rune + 2 ] ) ) &&
457
+ count < 127 ) {
458
+
459
+ count ++;
460
+ rune ++;
461
+
462
+ }
463
+
464
+ out[ o ++ ] = - count;
465
+
466
+ while ( runs < rune ) out[ o ++ ] = tmpBuffer[ runs ++ ];
467
+
468
+ }
469
+
470
+ rune ++;
471
+
472
+ }
473
+
474
+ return out.slice( 0, o );
475
+
476
+ }
477
+
478
+ function compressZIP( data, tmpBuffer ) {
479
+
480
+ tmpBuffer = reorderAndPredict( data, tmpBuffer );
481
+
378
482
  const deflate = fflate.zlibSync( tmpBuffer );
379
483
 
380
484
  return deflate;
381
485
 
382
486
  }
383
487
 
488
+ function compressPIZ( data, tmpBuffer, info ) {
489
+
490
+ const channels = info.numOutputChannels;
491
+ const wcount = info.dataSize / 2;
492
+ const nx = info.width;
493
+ const bpl = nx * info.dataSize;
494
+ const ny = data.length / ( bpl * channels );
495
+ const ndata = data.length / 2;
496
+
497
+ const buffer = new Uint16Array( ndata );
498
+
499
+ for ( let y = 0; y < ny; y ++ ) {
500
+
501
+ for ( let c = 0; c < channels; c ++ ) {
502
+
503
+ const src = ( y * channels + c ) * bpl;
504
+ const dst = ( c * ny + y ) * bpl / 2;
505
+
506
+ for ( let i = 0; i < bpl / 2; i ++ ) {
507
+
508
+ buffer[ dst + i ] = data[ src + 2 * i ] | ( data[ src + 2 * i + 1 ] << 8 );
509
+
510
+ }
511
+
512
+ }
513
+
514
+ }
515
+
516
+ const bitmap = new Uint8Array( BITMAP_SIZE );
517
+
518
+ for ( let i = 0; i < ndata; i ++ ) {
519
+
520
+ bitmap[ buffer[ i ] >> 3 ] |= 1 << ( buffer[ i ] & 7 );
521
+
522
+ }
523
+
524
+ bitmap[ 0 ] &= ~ 1;
525
+
526
+ let minNonZero = BITMAP_SIZE - 1;
527
+ let maxNonZero = 0;
528
+
529
+ for ( let i = 0; i < BITMAP_SIZE; i ++ ) {
530
+
531
+ if ( bitmap[ i ] ) {
532
+
533
+ if ( minNonZero > i ) minNonZero = i;
534
+ if ( maxNonZero < i ) maxNonZero = i;
535
+
536
+ }
537
+
538
+ }
539
+
540
+ const lut = new Uint16Array( USHORT_RANGE );
541
+ let k = 0;
542
+
543
+ for ( let i = 0; i < USHORT_RANGE; i ++ ) {
544
+
545
+ if ( i === 0 || ( bitmap[ i >> 3 ] & ( 1 << ( i & 7 ) ) ) ) lut[ i ] = k ++;
546
+
547
+ }
548
+
549
+ const maxValue = k - 1;
550
+
551
+ for ( let i = 0; i < ndata; i ++ ) {
552
+
553
+ buffer[ i ] = lut[ buffer[ i ] ];
554
+
555
+ }
556
+
557
+ for ( let c = 0; c < channels; c ++ ) {
558
+
559
+ for ( let j = 0; j < wcount; j ++ ) {
560
+
561
+ wav2Encode( buffer, c * nx * ny * wcount + j, nx, wcount, ny, wcount * nx, maxValue );
562
+
563
+ }
564
+
565
+ }
566
+
567
+ const bitmapLength = ( minNonZero <= maxNonZero ) ? maxNonZero - minNonZero + 1 : 0;
568
+
569
+ const huf = hufCompress( buffer, data.length );
570
+
571
+ if ( huf === null ) return data;
572
+
573
+ const out = new Uint8Array( 8 + bitmapLength + huf.length );
574
+ const dv = new DataView( out.buffer );
575
+
576
+ dv.setUint16( 0, minNonZero, true );
577
+ dv.setUint16( 2, maxNonZero, true );
578
+ out.set( bitmap.subarray( minNonZero, minNonZero + bitmapLength ), 4 );
579
+ dv.setUint32( 4 + bitmapLength, huf.length, true );
580
+ out.set( huf, 8 + bitmapLength );
581
+
582
+ return out;
583
+
584
+ }
585
+
586
+ const _wenc = { l: 0, h: 0 };
587
+
588
+ function wenc14( a, b, out ) {
589
+
590
+ const as = ( a << 16 ) >> 16;
591
+ const bs = ( b << 16 ) >> 16;
592
+
593
+ out.l = ( ( as + bs ) >> 1 ) & 0xffff;
594
+ out.h = ( as - bs ) & 0xffff;
595
+
596
+ }
597
+
598
+ function wenc16( a, b, out ) {
599
+
600
+ const ao = ( a + A_OFFSET ) & MOD_MASK;
601
+ let m = ( ao + b ) >> 1;
602
+ const d = ao - b;
603
+
604
+ if ( d < 0 ) m = ( m + M_OFFSET ) & MOD_MASK;
605
+
606
+ out.l = m;
607
+ out.h = d & MOD_MASK;
608
+
609
+ }
610
+
611
+ function wav2Encode( buffer, j, nx, ox, ny, oy, mx ) {
612
+
613
+ const wenc = ( mx < ( 1 << 14 ) ) ? wenc14 : wenc16;
614
+ const n = ( nx > ny ) ? ny : nx;
615
+
616
+ let p = 1;
617
+ let p2 = 2;
618
+
619
+ while ( p2 <= n ) {
620
+
621
+ let py = j;
622
+ const ey = j + oy * ( ny - p2 );
623
+ const oy1 = oy * p;
624
+ const oy2 = oy * p2;
625
+ const ox1 = ox * p;
626
+ const ox2 = ox * p2;
627
+
628
+ for ( ; py <= ey; py += oy2 ) {
629
+
630
+ let px = py;
631
+ const ex = py + ox * ( nx - p2 );
632
+
633
+ for ( ; px <= ex; px += ox2 ) {
634
+
635
+ const p01 = px + ox1;
636
+ const p10 = px + oy1;
637
+ const p11 = p10 + ox1;
638
+
639
+ wenc( buffer[ px ], buffer[ p01 ], _wenc );
640
+ const i00 = _wenc.l, i01 = _wenc.h;
641
+
642
+ wenc( buffer[ p10 ], buffer[ p11 ], _wenc );
643
+ const i10 = _wenc.l, i11 = _wenc.h;
644
+
645
+ wenc( i00, i10, _wenc );
646
+ buffer[ px ] = _wenc.l;
647
+ buffer[ p10 ] = _wenc.h;
648
+
649
+ wenc( i01, i11, _wenc );
650
+ buffer[ p01 ] = _wenc.l;
651
+ buffer[ p11 ] = _wenc.h;
652
+
653
+ }
654
+
655
+ if ( nx & p ) {
656
+
657
+ const p10 = px + oy1;
658
+
659
+ wenc( buffer[ px ], buffer[ p10 ], _wenc );
660
+ buffer[ px ] = _wenc.l;
661
+ buffer[ p10 ] = _wenc.h;
662
+
663
+ }
664
+
665
+ }
666
+
667
+ if ( ny & p ) {
668
+
669
+ let px = py;
670
+ const ex = py + ox * ( nx - p2 );
671
+
672
+ for ( ; px <= ex; px += ox2 ) {
673
+
674
+ const p01 = px + ox1;
675
+
676
+ wenc( buffer[ px ], buffer[ p01 ], _wenc );
677
+ buffer[ px ] = _wenc.l;
678
+ buffer[ p01 ] = _wenc.h;
679
+
680
+ }
681
+
682
+ }
683
+
684
+ p = p2;
685
+ p2 <<= 1;
686
+
687
+ }
688
+
689
+ }
690
+
691
+ function hufCompress( raw, maxLength ) {
692
+
693
+ const freq = new Float64Array( HUF_ENCSIZE );
694
+
695
+ for ( let i = 0; i < raw.length; i ++ ) freq[ raw[ i ] ] ++;
696
+
697
+ const table = hufBuildEncTable( freq );
698
+
699
+ const out = new Uint8Array( maxLength );
700
+ const writer = { out, offset: 20, c: 0, lc: 0, overflow: false };
701
+
702
+ hufPackEncTable( table, writer );
703
+
704
+ const tableLength = writer.offset - 20;
705
+ const dataStart = writer.offset;
706
+
707
+ writer.c = 0;
708
+ writer.lc = 0;
709
+
710
+ hufEncode( table, raw, writer );
711
+
712
+ const nBits = ( writer.offset - dataStart ) * 8 + writer.lc;
713
+ const length = dataStart + Math.ceil( nBits / 8 );
714
+
715
+ if ( writer.overflow || length >= maxLength ) return null;
716
+
717
+ const dv = new DataView( out.buffer );
718
+
719
+ dv.setUint32( 0, table.im, true );
720
+ dv.setUint32( 4, table.iM, true );
721
+ dv.setUint32( 8, tableLength, true );
722
+ dv.setUint32( 12, nBits, true );
723
+ dv.setUint32( 16, 0, true );
724
+
725
+ return out.subarray( 0, length );
726
+
727
+ }
728
+
729
+ function hufBuildEncTable( frq ) {
730
+
731
+ const hlink = new Uint32Array( HUF_ENCSIZE );
732
+ const heap = [];
733
+
734
+ let im = 0;
735
+ let iM = 0;
736
+
737
+ while ( ! frq[ im ] ) im ++;
738
+
739
+ for ( let i = im; i < HUF_ENCSIZE; i ++ ) {
740
+
741
+ hlink[ i ] = i;
742
+
743
+ if ( frq[ i ] ) {
744
+
745
+ heap.push( i );
746
+ iM = i;
747
+
748
+ }
749
+
750
+ }
751
+
752
+ iM ++;
753
+ frq[ iM ] = 1;
754
+ heap.push( iM );
755
+
756
+ let nf = heap.length;
757
+
758
+ const greater = ( a, b ) => frq[ a ] > frq[ b ] || ( frq[ a ] === frq[ b ] && a > b );
759
+
760
+ makeHeap( heap, nf, greater );
761
+
762
+ const lengths = new Uint8Array( HUF_ENCSIZE );
763
+
764
+ while ( nf > 1 ) {
765
+
766
+ const mm = heap[ 0 ];
767
+ popHeap( heap, nf, greater );
768
+ nf --;
769
+
770
+ const m = heap[ 0 ];
771
+ popHeap( heap, nf, greater );
772
+
773
+ frq[ m ] += frq[ mm ];
774
+ pushHeap( heap, nf, greater );
775
+
776
+ for ( let j = m; ; j = hlink[ j ] ) {
777
+
778
+ lengths[ j ] ++;
779
+
780
+ if ( hlink[ j ] === j ) {
781
+
782
+ hlink[ j ] = mm;
783
+ break;
784
+
785
+ }
786
+
787
+ }
788
+
789
+ for ( let j = mm; ; j = hlink[ j ] ) {
790
+
791
+ lengths[ j ] ++;
792
+
793
+ if ( hlink[ j ] === j ) break;
794
+
795
+ }
796
+
797
+ }
798
+
799
+ const n = new Float64Array( 59 );
800
+
801
+ for ( let i = 0; i < HUF_ENCSIZE; i ++ ) n[ lengths[ i ] ] ++;
802
+
803
+ let c = 0;
804
+
805
+ for ( let i = 58; i > 0; i -- ) {
806
+
807
+ const nc = Math.floor( ( c + n[ i ] ) / 2 );
808
+ n[ i ] = c;
809
+ c = nc;
810
+
811
+ }
812
+
813
+ const codes = new Float64Array( HUF_ENCSIZE );
814
+
815
+ for ( let i = 0; i < HUF_ENCSIZE; i ++ ) {
816
+
817
+ if ( lengths[ i ] > 0 ) codes[ i ] = n[ lengths[ i ] ] ++;
818
+
819
+ }
820
+
821
+ return { codes, lengths, im, iM };
822
+
823
+ }
824
+
825
+ function pushHeapHole( heap, holeIndex, topIndex, value, greater ) {
826
+
827
+ let parent = Math.floor( ( holeIndex - 1 ) / 2 );
828
+
829
+ while ( holeIndex > topIndex && greater( heap[ parent ], value ) ) {
830
+
831
+ heap[ holeIndex ] = heap[ parent ];
832
+ holeIndex = parent;
833
+ parent = Math.floor( ( holeIndex - 1 ) / 2 );
834
+
835
+ }
836
+
837
+ heap[ holeIndex ] = value;
838
+
839
+ }
840
+
841
+ function adjustHeap( heap, holeIndex, len, value, greater ) {
842
+
843
+ const topIndex = holeIndex;
844
+ let secondChild = holeIndex;
845
+
846
+ while ( secondChild < Math.floor( ( len - 1 ) / 2 ) ) {
847
+
848
+ secondChild = 2 * ( secondChild + 1 );
849
+
850
+ if ( greater( heap[ secondChild ], heap[ secondChild - 1 ] ) ) secondChild --;
851
+
852
+ heap[ holeIndex ] = heap[ secondChild ];
853
+ holeIndex = secondChild;
854
+
855
+ }
856
+
857
+ if ( ( len & 1 ) === 0 && secondChild === ( len - 2 ) / 2 ) {
858
+
859
+ secondChild = 2 * ( secondChild + 1 );
860
+ heap[ holeIndex ] = heap[ secondChild - 1 ];
861
+ holeIndex = secondChild - 1;
862
+
863
+ }
864
+
865
+ pushHeapHole( heap, holeIndex, topIndex, value, greater );
866
+
867
+ }
868
+
869
+ function makeHeap( heap, len, greater ) {
870
+
871
+ if ( len < 2 ) return;
872
+
873
+ for ( let parent = Math.floor( ( len - 2 ) / 2 ); parent >= 0; parent -- ) {
874
+
875
+ adjustHeap( heap, parent, len, heap[ parent ], greater );
876
+
877
+ }
878
+
879
+ }
880
+
881
+ function pushHeap( heap, len, greater ) {
882
+
883
+ pushHeapHole( heap, len - 1, 0, heap[ len - 1 ], greater );
884
+
885
+ }
886
+
887
+ function popHeap( heap, len, greater ) {
888
+
889
+ if ( len > 1 ) {
890
+
891
+ const last = len - 1;
892
+ const value = heap[ last ];
893
+
894
+ heap[ last ] = heap[ 0 ];
895
+ adjustHeap( heap, 0, last, value, greater );
896
+
897
+ }
898
+
899
+ }
900
+
901
+ function outputBits( writer, nBits, bits ) {
902
+
903
+ while ( nBits > 0 ) {
904
+
905
+ const k = Math.min( nBits, 16 );
906
+ nBits -= k;
907
+
908
+ writer.c = ( writer.c << k ) | ( Math.floor( bits / 2 ** nBits ) % ( 1 << k ) );
909
+ writer.lc += k;
910
+
911
+ while ( writer.lc >= 8 ) {
912
+
913
+ writer.lc -= 8;
914
+
915
+ if ( writer.offset < writer.out.length ) {
916
+
917
+ writer.out[ writer.offset ++ ] = writer.c >> writer.lc;
918
+
919
+ } else {
920
+
921
+ writer.overflow = true;
922
+
923
+ }
924
+
925
+ }
926
+
927
+ writer.c &= ( 1 << writer.lc ) - 1;
928
+
929
+ }
930
+
931
+ }
932
+
933
+ function hufPackEncTable( table, writer ) {
934
+
935
+ const { lengths, iM } = table;
936
+
937
+ for ( let im = table.im; im <= iM; im ++ ) {
938
+
939
+ const l = lengths[ im ];
940
+
941
+ if ( l === 0 ) {
942
+
943
+ let zerun = 1;
944
+
945
+ while ( im < iM && zerun < LONGEST_LONG_RUN ) {
946
+
947
+ if ( lengths[ im + 1 ] > 0 ) break;
948
+
949
+ im ++;
950
+ zerun ++;
951
+
952
+ }
953
+
954
+ if ( zerun >= 2 ) {
955
+
956
+ if ( zerun >= SHORTEST_LONG_RUN ) {
957
+
958
+ outputBits( writer, 6, LONG_ZEROCODE_RUN );
959
+ outputBits( writer, 8, zerun - SHORTEST_LONG_RUN );
960
+
961
+ } else {
962
+
963
+ outputBits( writer, 6, SHORT_ZEROCODE_RUN + zerun - 2 );
964
+
965
+ }
966
+
967
+ continue;
968
+
969
+ }
970
+
971
+ }
972
+
973
+ outputBits( writer, 6, l );
974
+
975
+ }
976
+
977
+ if ( writer.lc > 0 ) outputBits( writer, 8 - writer.lc, 0 );
978
+
979
+ }
980
+
981
+ function hufEncode( table, raw, writer ) {
982
+
983
+ const { codes, lengths, iM: rlc } = table;
984
+
985
+ const sendCode = ( s, runCount ) => {
986
+
987
+ if ( lengths[ s ] + lengths[ rlc ] + 8 < lengths[ s ] * runCount ) {
988
+
989
+ outputBits( writer, lengths[ s ], codes[ s ] );
990
+ outputBits( writer, lengths[ rlc ], codes[ rlc ] );
991
+ outputBits( writer, 8, runCount );
992
+
993
+ } else {
994
+
995
+ while ( runCount -- >= 0 ) outputBits( writer, lengths[ s ], codes[ s ] );
996
+
997
+ }
998
+
999
+ };
1000
+
1001
+ let s = raw[ 0 ];
1002
+ let cs = 0;
1003
+
1004
+ for ( let i = 1; i < raw.length; i ++ ) {
1005
+
1006
+ const ns = raw[ i ];
1007
+
1008
+ if ( cs === 255 || s !== ns ) {
1009
+
1010
+ sendCode( s, cs );
1011
+ cs = 0;
1012
+ s = ns;
1013
+
1014
+ } else {
1015
+
1016
+ cs ++;
1017
+
1018
+ }
1019
+
1020
+ }
1021
+
1022
+ sendCode( s, cs );
1023
+
1024
+ if ( writer.lc > 0 ) {
1025
+
1026
+ if ( writer.offset < writer.out.length ) {
1027
+
1028
+ writer.out[ writer.offset ] = ( writer.c << ( 8 - writer.lc ) ) & 0xff;
1029
+
1030
+ } else {
1031
+
1032
+ writer.overflow = true;
1033
+
1034
+ }
1035
+
1036
+ }
1037
+
1038
+ }
1039
+
384
1040
  function fillHeader( outBuffer, chunks, info ) {
385
1041
 
386
1042
  const offset = { value: 0 };
@@ -612,7 +1268,8 @@ function getFloat32( arr, i ) {
612
1268
  *
613
1269
  * @typedef {Object} EXRExporter~Options
614
1270
  * @property {(HalfFloatType|FloatType)} [type=HalfFloatType] - Output data type.
615
- * @property {(NO_COMPRESSION|ZIP_COMPRESSION|ZIPS_COMPRESSION)} [type=ZIP_COMPRESSION] - The compression algorithm.
1271
+ * @property {(NO_COMPRESSION|RLE_COMPRESSION|ZIP_COMPRESSION|ZIPS_COMPRESSION|PIZ_COMPRESSION)} [compression=ZIP_COMPRESSION] - The compression algorithm.
1272
+ * @property {number} [textureIndex=0] - When exporting a render target with multiple textures (MRT), the index of the texture to export.
616
1273
  **/
617
1274
 
618
- export { EXRExporter, NO_COMPRESSION, ZIP_COMPRESSION, ZIPS_COMPRESSION };
1275
+ export { EXRExporter, NO_COMPRESSION, RLE_COMPRESSION, ZIP_COMPRESSION, ZIPS_COMPRESSION, PIZ_COMPRESSION };