@needle-tools/three 0.162.12 → 0.169.2

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 (635) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +29789 -1941
  3. package/build/three.module.js +29095 -1933
  4. package/build/three.module.min.js +2 -2
  5. package/build/three.webgpu.js +80003 -0
  6. package/build/three.webgpu.min.js +6 -0
  7. package/build/three.webgpu.nodes.js +79951 -0
  8. package/build/three.webgpu.nodes.min.js +6 -0
  9. package/examples/jsm/Addons.js +2 -5
  10. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  11. package/examples/jsm/animation/CCDIKSolver.js +4 -2
  12. package/examples/jsm/capabilities/WebGL.js +27 -21
  13. package/examples/jsm/controls/ArcballControls.js +174 -158
  14. package/examples/jsm/controls/DragControls.js +260 -132
  15. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  16. package/examples/jsm/controls/FlyControls.js +194 -188
  17. package/examples/jsm/controls/OrbitControls.js +790 -797
  18. package/examples/jsm/controls/PointerLockControls.js +24 -15
  19. package/examples/jsm/controls/TrackballControls.js +469 -448
  20. package/examples/jsm/controls/TransformControls.js +98 -63
  21. package/examples/jsm/csm/CSMShader.js +4 -4
  22. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  23. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  24. package/examples/jsm/effects/StereoEffect.js +6 -1
  25. package/examples/jsm/environments/RoomEnvironment.js +2 -6
  26. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  27. package/examples/jsm/exporters/EXRExporter.js +19 -11
  28. package/examples/jsm/exporters/GLTFExporter.js +77 -8
  29. package/examples/jsm/exporters/KTX2Exporter.js +21 -13
  30. package/examples/jsm/exporters/OBJExporter.js +5 -1
  31. package/examples/jsm/exporters/PLYExporter.js +9 -7
  32. package/examples/jsm/exporters/USDZExporter.js +55 -11
  33. package/examples/jsm/geometries/DecalGeometry.js +4 -1
  34. package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
  35. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  36. package/examples/jsm/geometries/TextGeometry.js +10 -2
  37. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  38. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  39. package/examples/jsm/helpers/ViewHelper.js +75 -61
  40. package/examples/jsm/interactive/HTMLMesh.js +7 -9
  41. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  42. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  43. package/examples/jsm/libs/draco/README.md +2 -2
  44. package/examples/jsm/libs/fflate.module.js +694 -496
  45. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  46. package/examples/jsm/lights/LightProbeGenerator.js +24 -10
  47. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  48. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  49. package/examples/jsm/lines/LineMaterial.js +1 -17
  50. package/examples/jsm/lines/LineSegments2.js +15 -0
  51. package/examples/jsm/lines/Wireframe.js +16 -1
  52. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  53. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  54. package/examples/jsm/loaders/3MFLoader.js +2 -0
  55. package/examples/jsm/loaders/ColladaLoader.js +9 -6
  56. package/examples/jsm/loaders/DRACOLoader.js +4 -2
  57. package/examples/jsm/loaders/EXRLoader.js +351 -97
  58. package/examples/jsm/loaders/FBXLoader.js +77 -78
  59. package/examples/jsm/loaders/GLTFLoader.js +76 -14
  60. package/examples/jsm/loaders/KTX2Loader.js +30 -22
  61. package/examples/jsm/loaders/LDrawLoader.js +3 -2
  62. package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
  63. package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
  64. package/examples/jsm/loaders/LUTImageLoader.js +0 -14
  65. package/examples/jsm/loaders/MMDLoader.js +31 -12
  66. package/examples/jsm/loaders/MTLLoader.js +4 -3
  67. package/examples/jsm/loaders/MaterialXLoader.js +45 -21
  68. package/examples/jsm/loaders/OBJLoader.js +5 -3
  69. package/examples/jsm/loaders/PCDLoader.js +14 -13
  70. package/examples/jsm/loaders/PDBLoader.js +3 -2
  71. package/examples/jsm/loaders/PLYLoader.js +8 -5
  72. package/examples/jsm/loaders/RGBMLoader.js +16 -0
  73. package/examples/jsm/loaders/STLLoader.js +3 -2
  74. package/examples/jsm/loaders/USDZLoader.js +124 -76
  75. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  76. package/examples/jsm/loaders/VRMLLoader.js +11 -11
  77. package/examples/jsm/loaders/VTKLoader.js +80 -6
  78. package/examples/jsm/loaders/XYZLoader.js +3 -2
  79. package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
  80. package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
  81. package/examples/jsm/math/Octree.js +26 -20
  82. package/examples/jsm/misc/GPUComputationRenderer.js +9 -25
  83. package/examples/jsm/misc/Timer.js +1 -1
  84. package/examples/jsm/modifiers/CurveModifier.js +11 -9
  85. package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
  86. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  87. package/examples/jsm/objects/InstancedPoints.js +2 -2
  88. package/examples/jsm/objects/Lensflare.js +2 -2
  89. package/examples/jsm/objects/LensflareMesh.js +322 -0
  90. package/examples/jsm/objects/SkyMesh.js +187 -0
  91. package/examples/jsm/objects/Water2Mesh.js +158 -0
  92. package/examples/jsm/objects/WaterMesh.js +101 -0
  93. package/examples/jsm/physics/JoltPhysics.js +281 -0
  94. package/examples/jsm/physics/RapierPhysics.js +25 -5
  95. package/examples/jsm/postprocessing/GlitchPass.js +0 -3
  96. package/examples/jsm/postprocessing/LUTPass.js +5 -71
  97. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  98. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  99. package/examples/jsm/postprocessing/RenderTransitionPass.js +168 -0
  100. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  101. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  102. package/examples/jsm/postprocessing/SSAOPass.js +6 -12
  103. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  104. package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
  105. package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
  106. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +1 -3
  107. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  108. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +7 -4
  109. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +19 -5
  110. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  111. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  112. package/examples/jsm/shaders/FXAAShader.js +0 -2
  113. package/examples/jsm/shaders/GTAOShader.js +1 -1
  114. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  115. package/examples/jsm/shaders/OutputShader.js +1 -1
  116. package/examples/jsm/transpiler/GLSLDecoder.js +47 -5
  117. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
  118. package/examples/jsm/transpiler/TSLEncoder.js +24 -22
  119. package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
  120. package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
  121. package/examples/jsm/utils/SceneUtils.js +60 -1
  122. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  123. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  124. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  125. package/examples/jsm/utils/SortUtils.js +8 -5
  126. package/examples/jsm/utils/TextureUtils.js +3 -2
  127. package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
  128. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  129. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  130. package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
  131. package/package.json +11 -8
  132. package/src/Three.WebGPU.Nodes.js +200 -0
  133. package/src/Three.WebGPU.js +201 -0
  134. package/src/Three.js +23 -1
  135. package/src/animation/AnimationClip.js +1 -1
  136. package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
  137. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
  138. package/src/animation/tracks/StringKeyframeTrack.js +10 -1
  139. package/src/audio/Audio.js +2 -2
  140. package/src/constants.js +6 -7
  141. package/src/core/BufferAttribute.js +0 -9
  142. package/src/core/Clock.js +1 -1
  143. package/src/core/InterleavedBuffer.js +0 -9
  144. package/src/core/Object3D.js +34 -29
  145. package/src/core/Raycaster.js +6 -2
  146. package/src/core/RenderTarget.js +8 -0
  147. package/src/extras/Controls.js +32 -0
  148. package/src/extras/PMREMGenerator.js +12 -11
  149. package/src/extras/TextureUtils.js +210 -0
  150. package/src/geometries/CylinderGeometry.js +11 -4
  151. package/src/lights/Light.js +1 -0
  152. package/src/lights/LightShadow.js +5 -0
  153. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  154. package/src/loaders/FileLoader.js +5 -1
  155. package/src/loaders/LoaderUtils.js +3 -1
  156. package/src/loaders/MaterialLoader.js +8 -1
  157. package/src/loaders/ObjectLoader.js +36 -2
  158. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeLoader.js +27 -5
  159. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeMaterialLoader.js +22 -18
  160. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeObjectLoader.js +21 -1
  161. package/src/materials/Material.js +4 -0
  162. package/src/materials/MeshPhysicalMaterial.js +20 -0
  163. package/src/materials/ShaderMaterial.js +0 -4
  164. package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
  165. package/{examples/jsm/nodes/materials → src/materials/nodes}/Line2NodeMaterial.js +69 -68
  166. package/src/materials/nodes/LineBasicNodeMaterial.js +31 -0
  167. package/{examples/jsm/nodes/materials → src/materials/nodes}/LineDashedNodeMaterial.js +15 -12
  168. package/src/materials/nodes/MeshBasicNodeMaterial.js +77 -0
  169. package/src/materials/nodes/MeshLambertNodeMaterial.js +47 -0
  170. package/src/materials/nodes/MeshMatcapNodeMaterial.js +57 -0
  171. package/src/materials/nodes/MeshNormalNodeMaterial.js +44 -0
  172. package/src/materials/nodes/MeshPhongNodeMaterial.js +78 -0
  173. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +248 -0
  174. package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshSSSNodeMaterial.js +10 -7
  175. package/src/materials/nodes/MeshStandardNodeMaterial.js +108 -0
  176. package/src/materials/nodes/MeshToonNodeMaterial.js +38 -0
  177. package/{examples/jsm/nodes/materials → src/materials/nodes}/NodeMaterial.js +198 -157
  178. package/{examples/jsm/nodes/materials/Materials.js → src/materials/nodes/NodeMaterials.js} +7 -1
  179. package/{examples/jsm/nodes/materials → src/materials/nodes}/PointsNodeMaterial.js +10 -7
  180. package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
  181. package/src/materials/nodes/SpriteNodeMaterial.js +123 -0
  182. package/src/materials/nodes/VolumeNodeMaterial.js +108 -0
  183. package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
  184. package/src/math/Box2.js +4 -4
  185. package/src/math/Box3.js +6 -6
  186. package/src/math/ColorManagement.js +10 -0
  187. package/src/math/Matrix2.js +54 -0
  188. package/src/math/Spherical.js +4 -5
  189. package/src/math/Triangle.js +24 -0
  190. package/src/math/Vector4.js +13 -0
  191. package/src/nodes/Nodes.js +164 -0
  192. package/src/nodes/TSL.js +179 -0
  193. package/src/nodes/accessors/AccessorsUtils.js +25 -0
  194. package/src/nodes/accessors/BatchNode.js +128 -0
  195. package/src/nodes/accessors/Bitangent.js +13 -0
  196. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +44 -6
  197. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +13 -4
  198. package/src/nodes/accessors/Camera.js +13 -0
  199. package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +22 -15
  200. package/src/nodes/accessors/CubeTextureNode.js +79 -0
  201. package/src/nodes/accessors/InstanceNode.js +144 -0
  202. package/src/nodes/accessors/InstancedPointsMaterialNode.js +24 -0
  203. package/src/nodes/accessors/Lights.js +51 -0
  204. package/src/nodes/accessors/MaterialNode.js +441 -0
  205. package/src/nodes/accessors/MaterialProperties.js +3 -0
  206. package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +10 -5
  207. package/src/nodes/accessors/ModelNode.js +72 -0
  208. package/src/nodes/accessors/ModelViewProjectionNode.js +42 -0
  209. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +51 -33
  210. package/src/nodes/accessors/Normal.js +88 -0
  211. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +18 -34
  212. package/src/nodes/accessors/PointUVNode.js +30 -0
  213. package/src/nodes/accessors/Position.js +10 -0
  214. package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
  215. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +58 -9
  216. package/src/nodes/accessors/ReflectVector.js +10 -0
  217. package/src/nodes/accessors/RendererReferenceNode.js +35 -0
  218. package/{examples/jsm → src}/nodes/accessors/SceneNode.js +9 -6
  219. package/src/nodes/accessors/SkinningNode.js +191 -0
  220. package/src/nodes/accessors/StorageBufferNode.js +147 -0
  221. package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +35 -10
  222. package/src/nodes/accessors/Tangent.js +22 -0
  223. package/src/nodes/accessors/Texture3DNode.js +103 -0
  224. package/{examples/jsm/nodes/accessors/TextureBicubicNode.js → src/nodes/accessors/TextureBicubic.js} +3 -32
  225. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +123 -39
  226. package/src/nodes/accessors/TextureSizeNode.js +36 -0
  227. package/src/nodes/accessors/UV.js +3 -0
  228. package/{examples/jsm/nodes/accessors/UniformsNode.js → src/nodes/accessors/UniformArrayNode.js} +33 -15
  229. package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +10 -7
  230. package/src/nodes/accessors/VelocityNode.js +134 -0
  231. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +9 -5
  232. package/{examples/jsm → src}/nodes/code/CodeNode.js +9 -5
  233. package/{examples/jsm → src}/nodes/code/ExpressionNode.js +10 -6
  234. package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +8 -5
  235. package/{examples/jsm → src}/nodes/code/FunctionNode.js +8 -31
  236. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +24 -7
  237. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +11 -8
  238. package/{examples/jsm → src}/nodes/core/AssignNode.js +12 -9
  239. package/{examples/jsm → src}/nodes/core/AttributeNode.js +29 -12
  240. package/{examples/jsm → src}/nodes/core/BypassNode.js +11 -7
  241. package/src/nodes/core/CacheNode.js +50 -0
  242. package/{examples/jsm → src}/nodes/core/ConstNode.js +6 -3
  243. package/{examples/jsm → src}/nodes/core/ContextNode.js +27 -11
  244. package/src/nodes/core/IndexNode.js +99 -0
  245. package/{examples/jsm → src}/nodes/core/InputNode.js +7 -3
  246. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  247. package/src/nodes/core/MRTNode.js +85 -0
  248. package/{examples/jsm → src}/nodes/core/Node.js +114 -57
  249. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +327 -90
  250. package/src/nodes/core/NodeCache.js +36 -0
  251. package/{examples/jsm → src}/nodes/core/NodeFrame.js +52 -10
  252. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  253. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  254. package/{examples/jsm → src}/nodes/core/NodeUtils.js +56 -8
  255. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +13 -12
  256. package/{examples/jsm → src}/nodes/core/ParameterNode.js +7 -4
  257. package/src/nodes/core/PropertyNode.js +88 -0
  258. package/{examples/jsm → src}/nodes/core/StackNode.js +31 -11
  259. package/{examples/jsm → src}/nodes/core/StructTypeNode.js +7 -3
  260. package/{examples/jsm → src}/nodes/core/TempNode.js +10 -6
  261. package/src/nodes/core/UniformGroupNode.js +59 -0
  262. package/{examples/jsm → src}/nodes/core/UniformNode.js +37 -5
  263. package/{examples/jsm → src}/nodes/core/VarNode.js +14 -14
  264. package/src/nodes/core/VaryingNode.js +108 -0
  265. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +38 -28
  266. package/src/nodes/display/AnaglyphPassNode.js +67 -0
  267. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +33 -30
  268. package/src/nodes/display/BleachBypass.js +26 -0
  269. package/src/nodes/display/BlendMode.js +54 -0
  270. package/src/nodes/display/BloomNode.js +341 -0
  271. package/{examples/jsm → src}/nodes/display/BumpMapNode.js +20 -38
  272. package/src/nodes/display/ColorAdjustment.js +46 -0
  273. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  274. package/src/nodes/display/ColorSpaceNode.js +114 -0
  275. package/src/nodes/display/DenoiseNode.js +204 -0
  276. package/src/nodes/display/DepthOfFieldNode.js +124 -0
  277. package/src/nodes/display/DotScreenNode.js +66 -0
  278. package/src/nodes/display/FXAANode.js +332 -0
  279. package/src/nodes/display/FilmNode.js +56 -0
  280. package/src/nodes/display/FrontFacingNode.js +45 -0
  281. package/src/nodes/display/GTAONode.js +331 -0
  282. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +47 -24
  283. package/src/nodes/display/Lut3DNode.js +57 -0
  284. package/src/nodes/display/MotionBlur.js +25 -0
  285. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +14 -14
  286. package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
  287. package/src/nodes/display/PassNode.js +378 -0
  288. package/src/nodes/display/PixelationPassNode.js +213 -0
  289. package/{examples/jsm → src}/nodes/display/PosterizeNode.js +8 -7
  290. package/src/nodes/display/RGBShiftNode.js +53 -0
  291. package/src/nodes/display/RenderOutputNode.js +60 -0
  292. package/src/nodes/display/SSAAPassNode.js +287 -0
  293. package/src/nodes/display/ScreenNode.js +181 -0
  294. package/src/nodes/display/Sepia.js +17 -0
  295. package/src/nodes/display/SobelOperatorNode.js +126 -0
  296. package/src/nodes/display/StereoCompositePassNode.js +110 -0
  297. package/src/nodes/display/StereoPassNode.js +83 -0
  298. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  299. package/src/nodes/display/ToneMappingNode.js +67 -0
  300. package/src/nodes/display/ToonOutlinePassNode.js +111 -0
  301. package/src/nodes/display/TransitionNode.js +80 -0
  302. package/src/nodes/display/ViewportDepthNode.js +125 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +33 -0
  304. package/src/nodes/display/ViewportSharedTextureNode.js +39 -0
  305. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +20 -14
  306. package/src/nodes/fog/FogExp2Node.js +35 -0
  307. package/src/nodes/fog/FogNode.js +50 -0
  308. package/src/nodes/fog/FogRangeNode.js +36 -0
  309. package/src/nodes/functions/BSDF/BRDF_GGX.js +59 -0
  310. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  311. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  312. package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +2 -2
  313. package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +2 -2
  314. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  315. package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  316. package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +2 -2
  317. package/src/nodes/functions/BSDF/LTC.js +131 -0
  318. package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  319. package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -4
  320. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  321. package/src/nodes/functions/BasicLightingModel.js +78 -0
  322. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +11 -9
  323. package/src/nodes/functions/PhysicalLightingModel.js +633 -0
  324. package/src/nodes/functions/ShadowMaskModel.js +31 -0
  325. package/src/nodes/functions/ToonLightingModel.js +51 -0
  326. package/src/nodes/functions/material/getGeometryRoughness.js +13 -0
  327. package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +2 -2
  328. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  329. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +28 -11
  330. package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
  331. package/src/nodes/gpgpu/BarrierNode.js +40 -0
  332. package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
  333. package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +10 -6
  334. package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
  335. package/src/nodes/lighting/AONode.js +27 -0
  336. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +6 -8
  337. package/src/nodes/lighting/AnalyticLightNode.js +522 -0
  338. package/src/nodes/lighting/BasicEnvironmentNode.js +30 -0
  339. package/src/nodes/lighting/BasicLightMapNode.js +32 -0
  340. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +7 -9
  341. package/src/nodes/lighting/EnvironmentNode.js +138 -0
  342. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +12 -11
  343. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +7 -9
  344. package/src/nodes/lighting/IrradianceNode.js +27 -0
  345. package/src/nodes/lighting/LightProbeNode.js +53 -0
  346. package/{examples/jsm → src}/nodes/lighting/LightUtils.js +3 -3
  347. package/src/nodes/lighting/LightingContextNode.js +67 -0
  348. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +9 -3
  349. package/src/nodes/lighting/LightsNode.js +250 -0
  350. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +12 -13
  351. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  352. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +14 -16
  353. package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +2 -2
  354. package/src/nodes/materialx/lib/mx_hsv.js +127 -0
  355. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +500 -603
  356. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +3 -9
  357. package/{examples/jsm/nodes/math/CondNode.js → src/nodes/math/ConditionalNode.js} +48 -13
  358. package/src/nodes/math/Hash.js +13 -0
  359. package/src/nodes/math/MathNode.js +407 -0
  360. package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -7
  361. package/src/nodes/math/OperatorNode.js +319 -0
  362. package/{examples/jsm → src}/nodes/math/TriNoise3D.js +19 -29
  363. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  364. package/src/nodes/pmrem/PMREMNode.js +240 -0
  365. package/src/nodes/pmrem/PMREMUtils.js +288 -0
  366. package/src/nodes/procedural/Checker.js +14 -0
  367. package/src/nodes/tsl/TSLBase.js +30 -0
  368. package/{examples/jsm/nodes/shadernode/ShaderNode.js → src/nodes/tsl/TSLCore.js} +122 -96
  369. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +9 -5
  370. package/{examples/jsm → src}/nodes/utils/ConvertNode.js +7 -3
  371. package/src/nodes/utils/CubeMapNode.js +160 -0
  372. package/src/nodes/utils/Discard.js +8 -0
  373. package/src/nodes/utils/EquirectUVNode.js +36 -0
  374. package/src/nodes/utils/FlipNode.js +68 -0
  375. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +11 -5
  376. package/{examples/jsm → src}/nodes/utils/JoinNode.js +6 -3
  377. package/{examples/jsm → src}/nodes/utils/LoopNode.js +23 -12
  378. package/src/nodes/utils/MatcapUVNode.js +33 -0
  379. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +16 -7
  380. package/{examples/jsm → src}/nodes/utils/OscNode.js +12 -8
  381. package/src/nodes/utils/Packing.js +4 -0
  382. package/src/nodes/utils/RTTNode.js +133 -0
  383. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +21 -5
  384. package/{examples/jsm → src}/nodes/utils/RemapNode.js +12 -8
  385. package/{examples/jsm → src}/nodes/utils/RotateNode.js +8 -13
  386. package/{examples/jsm → src}/nodes/utils/SetNode.js +7 -4
  387. package/{examples/jsm → src}/nodes/utils/SplitNode.js +7 -3
  388. package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +10 -6
  389. package/src/nodes/utils/SpriteUtils.js +47 -0
  390. package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +11 -12
  391. package/{examples/jsm → src}/nodes/utils/TimerNode.js +8 -5
  392. package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +11 -9
  393. package/src/nodes/utils/UVUtils.js +19 -0
  394. package/src/nodes/utils/ViewportUtils.js +14 -0
  395. package/src/objects/BatchedMesh.js +302 -144
  396. package/src/objects/InstancedMesh.js +11 -1
  397. package/src/objects/LOD.js +21 -0
  398. package/src/objects/Line.js +67 -43
  399. package/src/objects/Mesh.js +7 -23
  400. package/src/objects/Points.js +2 -0
  401. package/src/renderers/WebGLRenderer.js +473 -224
  402. package/{examples/jsm → src}/renderers/common/Animation.js +3 -0
  403. package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
  404. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  405. package/{examples/jsm → src}/renderers/common/Background.js +18 -10
  406. package/src/renderers/common/BindGroup.js +18 -0
  407. package/src/renderers/common/Bindings.js +203 -0
  408. package/src/renderers/common/BundleGroup.js +26 -0
  409. package/src/renderers/common/ChainMap.js +59 -0
  410. package/{examples/jsm → src}/renderers/common/ClippingContext.js +24 -12
  411. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  412. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +16 -4
  413. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  414. package/{examples/jsm → src}/renderers/common/Info.js +35 -15
  415. package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
  416. package/src/renderers/common/PostProcessing.js +90 -0
  417. package/src/renderers/common/QuadMesh.js +55 -0
  418. package/src/renderers/common/RenderBundle.js +18 -0
  419. package/src/renderers/common/RenderBundles.js +38 -0
  420. package/{examples/jsm → src}/renderers/common/RenderContext.js +25 -2
  421. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  422. package/{examples/jsm → src}/renderers/common/RenderList.js +11 -2
  423. package/src/renderers/common/RenderObject.js +413 -0
  424. package/{examples/jsm → src}/renderers/common/RenderObjects.js +9 -2
  425. package/{examples/jsm → src}/renderers/common/Renderer.js +431 -83
  426. package/{examples/jsm → src}/renderers/common/SampledTexture.js +14 -5
  427. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  428. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  429. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  430. package/{examples/jsm → src}/renderers/common/Textures.js +15 -15
  431. package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
  432. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  433. package/src/renderers/common/extras/PMREMGenerator.js +771 -0
  434. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  435. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  436. package/src/renderers/common/nodes/NodeSampledTexture.js +64 -0
  437. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
  438. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  439. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  440. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  441. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  442. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +106 -68
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  444. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  445. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  446. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  447. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  448. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  450. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  452. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  454. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  455. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
  456. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
  457. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  458. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
  459. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  460. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
  461. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  462. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  463. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +38 -25
  464. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  465. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  466. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +19 -11
  467. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  468. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  469. package/src/renderers/shaders/ShaderChunk.js +0 -2
  470. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  472. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  473. package/src/renderers/shaders/ShaderLib.js +2 -1
  474. package/src/renderers/shaders/UniformsLib.js +3 -0
  475. package/src/renderers/shaders/UniformsUtils.js +10 -1
  476. package/src/renderers/webgl/WebGLAttributes.js +42 -38
  477. package/src/renderers/webgl/WebGLBackground.js +24 -3
  478. package/src/renderers/webgl/WebGLBindingStates.js +14 -51
  479. package/src/renderers/webgl/WebGLBufferRenderer.js +23 -22
  480. package/src/renderers/webgl/WebGLCapabilities.js +44 -13
  481. package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  482. package/src/renderers/webgl/WebGLExtensions.js +7 -20
  483. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +23 -21
  484. package/src/renderers/webgl/WebGLLights.js +21 -44
  485. package/src/renderers/webgl/WebGLMaterials.js +9 -8
  486. package/src/renderers/webgl/WebGLMorphtargets.js +78 -217
  487. package/src/renderers/webgl/WebGLProgram.js +46 -78
  488. package/src/renderers/webgl/WebGLPrograms.js +37 -40
  489. package/src/renderers/webgl/WebGLProperties.js +7 -0
  490. package/src/renderers/webgl/WebGLRenderStates.js +15 -9
  491. package/src/renderers/webgl/WebGLShadowMap.js +25 -25
  492. package/src/renderers/webgl/WebGLState.js +35 -58
  493. package/src/renderers/webgl/WebGLTextures.js +313 -358
  494. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  495. package/src/renderers/webgl/WebGLUniformsGroups.js +8 -8
  496. package/src/renderers/webgl/WebGLUtils.js +9 -78
  497. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +389 -152
  498. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +145 -0
  499. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +245 -44
  500. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +7 -1
  501. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +2 -0
  502. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  503. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +21 -3
  504. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +271 -43
  505. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +6 -23
  506. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +318 -141
  507. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
  508. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +10 -7
  509. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
  510. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
  511. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +424 -95
  512. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  513. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +37 -18
  514. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +86 -32
  515. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +10 -1
  516. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +68 -27
  517. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  518. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +235 -68
  519. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +43 -5
  520. package/src/renderers/webxr/WebXRDepthSensing.js +11 -6
  521. package/src/renderers/webxr/WebXRManager.js +53 -38
  522. package/src/scenes/Scene.js +7 -1
  523. package/src/textures/CompressedArrayTexture.js +14 -0
  524. package/src/textures/DataArrayTexture.js +14 -0
  525. package/src/textures/DepthTexture.js +1 -3
  526. package/src/textures/Texture.js +12 -2
  527. package/src/utils.js +62 -1
  528. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  529. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  530. package/examples/jsm/loaders/TiltLoader.js +0 -520
  531. package/examples/jsm/nodes/Nodes.js +0 -195
  532. package/examples/jsm/nodes/accessors/AccessorsUtils.js +0 -10
  533. package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  534. package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  535. package/examples/jsm/nodes/accessors/CubeTextureNode.js +0 -61
  536. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -71
  537. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  538. package/examples/jsm/nodes/accessors/MaterialNode.js +0 -314
  539. package/examples/jsm/nodes/accessors/ModelNode.js +0 -33
  540. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +0 -39
  541. package/examples/jsm/nodes/accessors/NormalNode.js +0 -96
  542. package/examples/jsm/nodes/accessors/PointUVNode.js +0 -26
  543. package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  544. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  545. package/examples/jsm/nodes/accessors/SkinningNode.js +0 -124
  546. package/examples/jsm/nodes/accessors/StorageBufferNode.js +0 -72
  547. package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
  548. package/examples/jsm/nodes/accessors/TextureSizeNode.js +0 -35
  549. package/examples/jsm/nodes/accessors/UVNode.js +0 -47
  550. package/examples/jsm/nodes/core/CacheNode.js +0 -49
  551. package/examples/jsm/nodes/core/IndexNode.js +0 -66
  552. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  553. package/examples/jsm/nodes/core/NodeKeywords.js +0 -80
  554. package/examples/jsm/nodes/core/PropertyNode.js +0 -72
  555. package/examples/jsm/nodes/core/UniformGroupNode.js +0 -36
  556. package/examples/jsm/nodes/core/VaryingNode.js +0 -65
  557. package/examples/jsm/nodes/display/BlendModeNode.js +0 -128
  558. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +0 -99
  559. package/examples/jsm/nodes/display/ColorSpaceNode.js +0 -108
  560. package/examples/jsm/nodes/display/FrontFacingNode.js +0 -27
  561. package/examples/jsm/nodes/display/PassNode.js +0 -183
  562. package/examples/jsm/nodes/display/ToneMappingNode.js +0 -184
  563. package/examples/jsm/nodes/display/ViewportDepthNode.js +0 -97
  564. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +0 -31
  565. package/examples/jsm/nodes/display/ViewportNode.js +0 -134
  566. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +0 -31
  567. package/examples/jsm/nodes/fog/FogExp2Node.js +0 -35
  568. package/examples/jsm/nodes/fog/FogNode.js +0 -38
  569. package/examples/jsm/nodes/fog/FogRangeNode.js +0 -34
  570. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +0 -40
  571. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +0 -393
  572. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +0 -13
  573. package/examples/jsm/nodes/lighting/AONode.js +0 -27
  574. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -241
  575. package/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -181
  576. package/examples/jsm/nodes/lighting/LightNode.js +0 -57
  577. package/examples/jsm/nodes/lighting/LightingContextNode.js +0 -66
  578. package/examples/jsm/nodes/lighting/LightsNode.js +0 -188
  579. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  580. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -28
  581. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  582. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +0 -34
  583. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  584. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -65
  585. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +0 -155
  586. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +0 -80
  587. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -90
  588. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +0 -130
  589. package/examples/jsm/nodes/math/HashNode.js +0 -34
  590. package/examples/jsm/nodes/math/MathNode.js +0 -391
  591. package/examples/jsm/nodes/math/OperatorNode.js +0 -274
  592. package/examples/jsm/nodes/procedural/CheckerNode.js +0 -42
  593. package/examples/jsm/nodes/utils/DiscardNode.js +0 -27
  594. package/examples/jsm/nodes/utils/EquirectUVNode.js +0 -33
  595. package/examples/jsm/nodes/utils/MatcapUVNode.js +0 -30
  596. package/examples/jsm/nodes/utils/PackingNode.js +0 -55
  597. package/examples/jsm/nodes/utils/RotateUVNode.js +0 -35
  598. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  599. package/examples/jsm/objects/QuadMesh.js +0 -66
  600. package/examples/jsm/renderers/common/Bindings.js +0 -173
  601. package/examples/jsm/renderers/common/ChainMap.js +0 -89
  602. package/examples/jsm/renderers/common/PostProcessing.js +0 -25
  603. package/examples/jsm/renderers/common/RenderObject.js +0 -221
  604. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  605. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +0 -49
  606. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  607. package/examples/jsm/utils/GPUStatsPanel.js +0 -128
  608. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  609. package/src/renderers/WebGL1Renderer.js +0 -7
  610. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
  611. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  612. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  613. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  614. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  615. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  616. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  617. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  618. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  619. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  620. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  621. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  622. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  623. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  624. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  625. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  626. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  627. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  628. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  629. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  630. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  631. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  632. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  633. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  634. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  635. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
@@ -1269,18 +1269,18 @@ class EXRLoader extends DataTextureLoader {
1269
1269
  const inDataView = info.viewer;
1270
1270
  const inOffset = { value: info.offset.value };
1271
1271
 
1272
- const outBuffer = new Uint16Array( info.width * info.scanlineBlockSize * ( info.channels * info.type ) );
1272
+ const outBuffer = new Uint16Array( info.columns * info.lines * ( info.inputChannels.length * info.type ) );
1273
1273
  const bitmap = new Uint8Array( BITMAP_SIZE );
1274
1274
 
1275
1275
  // Setup channel info
1276
1276
  let outBufferEnd = 0;
1277
- const pizChannelData = new Array( info.channels );
1278
- for ( let i = 0; i < info.channels; i ++ ) {
1277
+ const pizChannelData = new Array( info.inputChannels.length );
1278
+ for ( let i = 0, il = info.inputChannels.length; i < il; i ++ ) {
1279
1279
 
1280
1280
  pizChannelData[ i ] = {};
1281
1281
  pizChannelData[ i ][ 'start' ] = outBufferEnd;
1282
1282
  pizChannelData[ i ][ 'end' ] = pizChannelData[ i ][ 'start' ];
1283
- pizChannelData[ i ][ 'nx' ] = info.width;
1283
+ pizChannelData[ i ][ 'nx' ] = info.columns;
1284
1284
  pizChannelData[ i ][ 'ny' ] = info.lines;
1285
1285
  pizChannelData[ i ][ 'size' ] = info.type;
1286
1286
 
@@ -1319,7 +1319,7 @@ class EXRLoader extends DataTextureLoader {
1319
1319
  hufUncompress( info.array, inDataView, inOffset, length, outBuffer, outBufferEnd );
1320
1320
 
1321
1321
  // Wavelet decoding
1322
- for ( let i = 0; i < info.channels; ++ i ) {
1322
+ for ( let i = 0; i < info.inputChannels.length; ++ i ) {
1323
1323
 
1324
1324
  const cd = pizChannelData[ i ];
1325
1325
 
@@ -1347,7 +1347,7 @@ class EXRLoader extends DataTextureLoader {
1347
1347
  const tmpBuffer = new Uint8Array( outBuffer.buffer.byteLength );
1348
1348
  for ( let y = 0; y < info.lines; y ++ ) {
1349
1349
 
1350
- for ( let c = 0; c < info.channels; c ++ ) {
1350
+ for ( let c = 0; c < info.inputChannels.length; c ++ ) {
1351
1351
 
1352
1352
  const cd = pizChannelData[ c ];
1353
1353
 
@@ -1372,8 +1372,9 @@ class EXRLoader extends DataTextureLoader {
1372
1372
 
1373
1373
  const rawBuffer = fflate.unzlibSync( compressed );
1374
1374
 
1375
- const sz = info.lines * info.channels * info.width;
1376
- const tmpBuffer = ( info.type == 1 ) ? new Uint16Array( sz ) : new Uint32Array( sz );
1375
+ const byteSize = info.inputChannels.length * info.lines * info.columns * info.totalBytes;
1376
+ const tmpBuffer = new ArrayBuffer( byteSize );
1377
+ const viewer = new DataView( tmpBuffer );
1377
1378
 
1378
1379
  let tmpBufferEnd = 0;
1379
1380
  let writePtr = 0;
@@ -1381,26 +1382,27 @@ class EXRLoader extends DataTextureLoader {
1381
1382
 
1382
1383
  for ( let y = 0; y < info.lines; y ++ ) {
1383
1384
 
1384
- for ( let c = 0; c < info.channels; c ++ ) {
1385
+ for ( let c = 0; c < info.inputChannels.length; c ++ ) {
1385
1386
 
1386
1387
  let pixel = 0;
1387
1388
 
1388
- switch ( info.type ) {
1389
+ const type = info.inputChannels[ c ].pixelType;
1390
+ switch ( type ) {
1389
1391
 
1390
1392
  case 1:
1391
1393
 
1392
1394
  ptr[ 0 ] = tmpBufferEnd;
1393
- ptr[ 1 ] = ptr[ 0 ] + info.width;
1394
- tmpBufferEnd = ptr[ 1 ] + info.width;
1395
+ ptr[ 1 ] = ptr[ 0 ] + info.columns;
1396
+ tmpBufferEnd = ptr[ 1 ] + info.columns;
1395
1397
 
1396
- for ( let j = 0; j < info.width; ++ j ) {
1398
+ for ( let j = 0; j < info.columns; ++ j ) {
1397
1399
 
1398
1400
  const diff = ( rawBuffer[ ptr[ 0 ] ++ ] << 8 ) | rawBuffer[ ptr[ 1 ] ++ ];
1399
1401
 
1400
1402
  pixel += diff;
1401
1403
 
1402
- tmpBuffer[ writePtr ] = pixel;
1403
- writePtr ++;
1404
+ viewer.setUint16( writePtr, pixel, true );
1405
+ writePtr += 2;
1404
1406
 
1405
1407
  }
1406
1408
 
@@ -1409,18 +1411,18 @@ class EXRLoader extends DataTextureLoader {
1409
1411
  case 2:
1410
1412
 
1411
1413
  ptr[ 0 ] = tmpBufferEnd;
1412
- ptr[ 1 ] = ptr[ 0 ] + info.width;
1413
- ptr[ 2 ] = ptr[ 1 ] + info.width;
1414
- tmpBufferEnd = ptr[ 2 ] + info.width;
1414
+ ptr[ 1 ] = ptr[ 0 ] + info.columns;
1415
+ ptr[ 2 ] = ptr[ 1 ] + info.columns;
1416
+ tmpBufferEnd = ptr[ 2 ] + info.columns;
1415
1417
 
1416
- for ( let j = 0; j < info.width; ++ j ) {
1418
+ for ( let j = 0; j < info.columns; ++ j ) {
1417
1419
 
1418
1420
  const diff = ( rawBuffer[ ptr[ 0 ] ++ ] << 24 ) | ( rawBuffer[ ptr[ 1 ] ++ ] << 16 ) | ( rawBuffer[ ptr[ 2 ] ++ ] << 8 );
1419
1421
 
1420
1422
  pixel += diff;
1421
1423
 
1422
- tmpBuffer[ writePtr ] = pixel;
1423
- writePtr ++;
1424
+ viewer.setUint32( writePtr, pixel, true );
1425
+ writePtr += 4;
1424
1426
 
1425
1427
  }
1426
1428
 
@@ -1432,7 +1434,7 @@ class EXRLoader extends DataTextureLoader {
1432
1434
 
1433
1435
  }
1434
1436
 
1435
- return new DataView( tmpBuffer.buffer );
1437
+ return viewer;
1436
1438
 
1437
1439
  }
1438
1440
 
@@ -1440,7 +1442,7 @@ class EXRLoader extends DataTextureLoader {
1440
1442
 
1441
1443
  const inDataView = info.viewer;
1442
1444
  const inOffset = { value: info.offset.value };
1443
- const outBuffer = new Uint8Array( info.width * info.lines * ( info.channels * info.type * INT16_SIZE ) );
1445
+ const outBuffer = new Uint8Array( info.columns * info.lines * ( info.inputChannels.length * info.type * INT16_SIZE ) );
1444
1446
 
1445
1447
  // Read compression header information
1446
1448
  const dwaHeader = {
@@ -1488,9 +1490,9 @@ class EXRLoader extends DataTextureLoader {
1488
1490
 
1489
1491
  // Classify channels
1490
1492
  const channels = EXRHeader.channels;
1491
- const channelData = new Array( info.channels );
1493
+ const channelData = new Array( info.inputChannels.length );
1492
1494
 
1493
- for ( let i = 0; i < info.channels; ++ i ) {
1495
+ for ( let i = 0; i < info.inputChannels.length; ++ i ) {
1494
1496
 
1495
1497
  const cd = channelData[ i ] = {};
1496
1498
  const channel = channels[ i ];
@@ -1500,7 +1502,7 @@ class EXRLoader extends DataTextureLoader {
1500
1502
  cd.decoded = false;
1501
1503
  cd.type = channel.pixelType;
1502
1504
  cd.pLinear = channel.pLinear;
1503
- cd.width = info.width;
1505
+ cd.width = info.columns;
1504
1506
  cd.height = info.lines;
1505
1507
 
1506
1508
  }
@@ -1509,7 +1511,7 @@ class EXRLoader extends DataTextureLoader {
1509
1511
  idx: new Array( 3 )
1510
1512
  };
1511
1513
 
1512
- for ( let offset = 0; offset < info.channels; ++ offset ) {
1514
+ for ( let offset = 0; offset < info.inputChannels.length; ++ offset ) {
1513
1515
 
1514
1516
  const cd = channelData[ offset ];
1515
1517
 
@@ -1886,10 +1888,10 @@ class EXRLoader extends DataTextureLoader {
1886
1888
 
1887
1889
  function parseBox2i( dataView, offset ) {
1888
1890
 
1889
- const xMin = parseUint32( dataView, offset );
1890
- const yMin = parseUint32( dataView, offset );
1891
- const xMax = parseUint32( dataView, offset );
1892
- const yMax = parseUint32( dataView, offset );
1891
+ const xMin = parseInt32( dataView, offset );
1892
+ const yMin = parseInt32( dataView, offset );
1893
+ const xMax = parseInt32( dataView, offset );
1894
+ const yMax = parseInt32( dataView, offset );
1893
1895
 
1894
1896
  return { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };
1895
1897
 
@@ -1898,7 +1900,9 @@ class EXRLoader extends DataTextureLoader {
1898
1900
  function parseLineOrder( dataView, offset ) {
1899
1901
 
1900
1902
  const lineOrders = [
1901
- 'INCREASING_Y'
1903
+ 'INCREASING_Y',
1904
+ 'DECREASING_Y',
1905
+ 'RANDOM_Y',
1902
1906
  ];
1903
1907
 
1904
1908
  const lineOrder = parseUint8( dataView, offset );
@@ -1907,6 +1911,45 @@ class EXRLoader extends DataTextureLoader {
1907
1911
 
1908
1912
  }
1909
1913
 
1914
+ function parseEnvmap( dataView, offset ) {
1915
+
1916
+ const envmaps = [
1917
+ 'ENVMAP_LATLONG',
1918
+ 'ENVMAP_CUBE'
1919
+ ];
1920
+
1921
+ const envmap = parseUint8( dataView, offset );
1922
+
1923
+ return envmaps[ envmap ];
1924
+
1925
+ }
1926
+
1927
+ function parseTiledesc( dataView, offset ) {
1928
+
1929
+ const levelModes = [
1930
+ 'ONE_LEVEL',
1931
+ 'MIPMAP_LEVELS',
1932
+ 'RIPMAP_LEVELS',
1933
+ ];
1934
+
1935
+ const roundingModes = [
1936
+ 'ROUND_DOWN',
1937
+ 'ROUND_UP',
1938
+ ];
1939
+
1940
+ const xSize = parseUint32( dataView, offset );
1941
+ const ySize = parseUint32( dataView, offset );
1942
+ const modes = parseUint8( dataView, offset );
1943
+
1944
+ return {
1945
+ xSize: xSize,
1946
+ ySize: ySize,
1947
+ levelMode: levelModes[ modes & 0xf ],
1948
+ roundingMode: roundingModes[ modes >> 4 ]
1949
+ };
1950
+
1951
+ }
1952
+
1910
1953
  function parseV2f( dataView, offset ) {
1911
1954
 
1912
1955
  const x = parseFloat32( dataView, offset );
@@ -1948,6 +1991,14 @@ class EXRLoader extends DataTextureLoader {
1948
1991
 
1949
1992
  return parseBox2i( dataView, offset );
1950
1993
 
1994
+ } else if ( type === 'envmap' ) {
1995
+
1996
+ return parseEnvmap( dataView, offset );
1997
+
1998
+ } else if ( type === 'tiledesc' ) {
1999
+
2000
+ return parseTiledesc( dataView, offset );
2001
+
1951
2002
  } else if ( type === 'lineOrder' ) {
1952
2003
 
1953
2004
  return parseLineOrder( dataView, offset );
@@ -1990,6 +2041,163 @@ class EXRLoader extends DataTextureLoader {
1990
2041
 
1991
2042
  }
1992
2043
 
2044
+ function roundLog2( x, mode ) {
2045
+
2046
+ const log2 = Math.log2( x );
2047
+ return mode == 'ROUND_DOWN' ? Math.floor( log2 ) : Math.ceil( log2 );
2048
+
2049
+ }
2050
+
2051
+ function calculateTileLevels( tiledesc, w, h ) {
2052
+
2053
+ let num = 0;
2054
+
2055
+ switch ( tiledesc.levelMode ) {
2056
+
2057
+ case 'ONE_LEVEL':
2058
+ num = 1;
2059
+ break;
2060
+
2061
+ case 'MIPMAP_LEVELS':
2062
+ num = roundLog2( Math.max( w, h ), tiledesc.roundingMode ) + 1;
2063
+ break;
2064
+
2065
+ case 'RIPMAP_LEVELS':
2066
+ throw new Error( 'THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.' );
2067
+
2068
+ }
2069
+
2070
+ return num;
2071
+
2072
+ }
2073
+
2074
+ function calculateTiles( count, dataSize, size, roundingMode ) {
2075
+
2076
+ const tiles = new Array( count );
2077
+
2078
+ for ( let i = 0; i < count; i ++ ) {
2079
+
2080
+ const b = ( 1 << i );
2081
+ let s = ( dataSize / b ) | 0;
2082
+
2083
+ if ( roundingMode == 'ROUND_UP' && s * b < dataSize ) s += 1;
2084
+
2085
+ const l = Math.max( s, 1 );
2086
+
2087
+ tiles[ i ] = ( ( l + size - 1 ) / size ) | 0;
2088
+
2089
+ }
2090
+
2091
+ return tiles;
2092
+
2093
+ }
2094
+
2095
+ function parseTiles() {
2096
+
2097
+ const EXRDecoder = this;
2098
+ const offset = EXRDecoder.offset;
2099
+ const tmpOffset = { value: 0 };
2100
+
2101
+ for ( let tile = 0; tile < EXRDecoder.tileCount; tile ++ ) {
2102
+
2103
+ const tileX = parseInt32( EXRDecoder.viewer, offset );
2104
+ const tileY = parseInt32( EXRDecoder.viewer, offset );
2105
+ offset.value += 8; // skip levels - only parsing top-level
2106
+ EXRDecoder.size = parseUint32( EXRDecoder.viewer, offset );
2107
+
2108
+ const startX = tileX * EXRDecoder.blockWidth;
2109
+ const startY = tileY * EXRDecoder.blockHeight;
2110
+ EXRDecoder.columns = ( startX + EXRDecoder.blockWidth > EXRDecoder.width ) ? EXRDecoder.width - startX : EXRDecoder.blockWidth;
2111
+ EXRDecoder.lines = ( startY + EXRDecoder.blockHeight > EXRDecoder.height ) ? EXRDecoder.height - startY : EXRDecoder.blockHeight;
2112
+
2113
+ const bytesBlockLine = EXRDecoder.columns * EXRDecoder.totalBytes;
2114
+ const isCompressed = EXRDecoder.size < EXRDecoder.lines * bytesBlockLine;
2115
+ const viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );
2116
+
2117
+ offset.value += EXRDecoder.size;
2118
+
2119
+ for ( let line = 0; line < EXRDecoder.lines; line ++ ) {
2120
+
2121
+ const lineOffset = line * EXRDecoder.columns * EXRDecoder.totalBytes;
2122
+
2123
+ for ( let channelID = 0; channelID < EXRDecoder.inputChannels.length; channelID ++ ) {
2124
+
2125
+ const name = EXRHeader.channels[ channelID ].name;
2126
+ const lOff = EXRDecoder.channelByteOffsets[ name ] * EXRDecoder.columns;
2127
+ const cOff = EXRDecoder.decodeChannels[ name ];
2128
+
2129
+ if ( cOff === undefined ) continue;
2130
+
2131
+ tmpOffset.value = lineOffset + lOff;
2132
+ const outLineOffset = ( EXRDecoder.height - ( 1 + startY + line ) ) * EXRDecoder.outLineWidth;
2133
+
2134
+ for ( let x = 0; x < EXRDecoder.columns; x ++ ) {
2135
+
2136
+ const outIndex = outLineOffset + ( x + startX ) * EXRDecoder.outputChannels + cOff;
2137
+ EXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );
2138
+
2139
+ }
2140
+
2141
+ }
2142
+
2143
+ }
2144
+
2145
+ }
2146
+
2147
+ }
2148
+
2149
+ function parseScanline() {
2150
+
2151
+ const EXRDecoder = this;
2152
+ const offset = EXRDecoder.offset;
2153
+ const tmpOffset = { value: 0 };
2154
+
2155
+ for ( let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.blockHeight; scanlineBlockIdx ++ ) {
2156
+
2157
+ const line = parseInt32( EXRDecoder.viewer, offset ) - EXRHeader.dataWindow.yMin; // line_no
2158
+ EXRDecoder.size = parseUint32( EXRDecoder.viewer, offset ); // data_len
2159
+ EXRDecoder.lines = ( ( line + EXRDecoder.blockHeight > EXRDecoder.height ) ? ( EXRDecoder.height - line ) : EXRDecoder.blockHeight );
2160
+
2161
+ const bytesPerLine = EXRDecoder.columns * EXRDecoder.totalBytes;
2162
+ const isCompressed = EXRDecoder.size < EXRDecoder.lines * bytesPerLine;
2163
+ const viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );
2164
+
2165
+ offset.value += EXRDecoder.size;
2166
+
2167
+ for ( let line_y = 0; line_y < EXRDecoder.blockHeight; line_y ++ ) {
2168
+
2169
+ const scan_y = scanlineBlockIdx * EXRDecoder.blockHeight;
2170
+ const true_y = line_y + EXRDecoder.scanOrder( scan_y );
2171
+ if ( true_y >= EXRDecoder.height ) continue;
2172
+
2173
+ const lineOffset = line_y * bytesPerLine;
2174
+ const outLineOffset = ( EXRDecoder.height - 1 - true_y ) * EXRDecoder.outLineWidth;
2175
+
2176
+ for ( let channelID = 0; channelID < EXRDecoder.inputChannels.length; channelID ++ ) {
2177
+
2178
+ const name = EXRHeader.channels[ channelID ].name;
2179
+ const lOff = EXRDecoder.channelByteOffsets[ name ] * EXRDecoder.columns;
2180
+ const cOff = EXRDecoder.decodeChannels[ name ];
2181
+
2182
+ if ( cOff === undefined ) continue;
2183
+
2184
+ tmpOffset.value = lineOffset + lOff;
2185
+
2186
+ for ( let x = 0; x < EXRDecoder.columns; x ++ ) {
2187
+
2188
+ const outIndex = outLineOffset + x * EXRDecoder.outputChannels + cOff;
2189
+ EXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );
2190
+
2191
+ }
2192
+
2193
+ }
2194
+
2195
+ }
2196
+
2197
+ }
2198
+
2199
+ }
2200
+
1993
2201
  function parseHeader( dataView, buffer, offset ) {
1994
2202
 
1995
2203
  const EXRHeader = {};
@@ -2045,7 +2253,7 @@ class EXRLoader extends DataTextureLoader {
2045
2253
 
2046
2254
  }
2047
2255
 
2048
- if ( ( spec & ~ 0x04 ) != 0 ) { // unsupported tiled, deep-image, multi-part
2256
+ if ( ( spec & ~ 0x06 ) != 0 ) { // unsupported deep-image, multi-part
2049
2257
 
2050
2258
  console.error( 'THREE.EXRHeader:', EXRHeader );
2051
2259
  throw new Error( 'THREE.EXRLoader: Provided file is currently unsupported.' );
@@ -2065,11 +2273,13 @@ class EXRLoader extends DataTextureLoader {
2065
2273
  offset: offset,
2066
2274
  width: EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1,
2067
2275
  height: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,
2068
- channels: EXRHeader.channels.length,
2069
- bytesPerLine: null,
2276
+ inputChannels: EXRHeader.channels,
2277
+ channelByteOffsets: {},
2278
+ scanOrder: null,
2279
+ totalBytes: null,
2280
+ columns: null,
2070
2281
  lines: null,
2071
- inputSize: null,
2072
- type: EXRHeader.channels[ 0 ].pixelType,
2282
+ type: null,
2073
2283
  uncompress: null,
2074
2284
  getter: null,
2075
2285
  format: null,
@@ -2079,42 +2289,42 @@ class EXRLoader extends DataTextureLoader {
2079
2289
  switch ( EXRHeader.compression ) {
2080
2290
 
2081
2291
  case 'NO_COMPRESSION':
2082
- EXRDecoder.lines = 1;
2292
+ EXRDecoder.blockHeight = 1;
2083
2293
  EXRDecoder.uncompress = uncompressRAW;
2084
2294
  break;
2085
2295
 
2086
2296
  case 'RLE_COMPRESSION':
2087
- EXRDecoder.lines = 1;
2297
+ EXRDecoder.blockHeight = 1;
2088
2298
  EXRDecoder.uncompress = uncompressRLE;
2089
2299
  break;
2090
2300
 
2091
2301
  case 'ZIPS_COMPRESSION':
2092
- EXRDecoder.lines = 1;
2302
+ EXRDecoder.blockHeight = 1;
2093
2303
  EXRDecoder.uncompress = uncompressZIP;
2094
2304
  break;
2095
2305
 
2096
2306
  case 'ZIP_COMPRESSION':
2097
- EXRDecoder.lines = 16;
2307
+ EXRDecoder.blockHeight = 16;
2098
2308
  EXRDecoder.uncompress = uncompressZIP;
2099
2309
  break;
2100
2310
 
2101
2311
  case 'PIZ_COMPRESSION':
2102
- EXRDecoder.lines = 32;
2312
+ EXRDecoder.blockHeight = 32;
2103
2313
  EXRDecoder.uncompress = uncompressPIZ;
2104
2314
  break;
2105
2315
 
2106
2316
  case 'PXR24_COMPRESSION':
2107
- EXRDecoder.lines = 16;
2317
+ EXRDecoder.blockHeight = 16;
2108
2318
  EXRDecoder.uncompress = uncompressPXR;
2109
2319
  break;
2110
2320
 
2111
2321
  case 'DWAA_COMPRESSION':
2112
- EXRDecoder.lines = 32;
2322
+ EXRDecoder.blockHeight = 32;
2113
2323
  EXRDecoder.uncompress = uncompressDWA;
2114
2324
  break;
2115
2325
 
2116
2326
  case 'DWAB_COMPRESSION':
2117
- EXRDecoder.lines = 256;
2327
+ EXRDecoder.blockHeight = 256;
2118
2328
  EXRDecoder.uncompress = uncompressDWA;
2119
2329
  break;
2120
2330
 
@@ -2123,7 +2333,42 @@ class EXRLoader extends DataTextureLoader {
2123
2333
 
2124
2334
  }
2125
2335
 
2126
- EXRDecoder.scanlineBlockSize = EXRDecoder.lines;
2336
+ const channels = {};
2337
+ for ( const channel of EXRHeader.channels ) {
2338
+
2339
+ switch ( channel.name ) {
2340
+
2341
+ case 'Y':
2342
+ case 'R':
2343
+ case 'G':
2344
+ case 'B':
2345
+ case 'A':
2346
+ channels[ channel.name ] = true;
2347
+ EXRDecoder.type = channel.pixelType;
2348
+
2349
+ }
2350
+
2351
+ }
2352
+
2353
+ // RGB images will be converted to RGBA format, preventing software emulation in select devices.
2354
+ let fillAlpha = false;
2355
+
2356
+ if ( channels.R && channels.G && channels.B ) {
2357
+
2358
+ fillAlpha = ! channels.A;
2359
+ EXRDecoder.outputChannels = 4;
2360
+ EXRDecoder.decodeChannels = { R: 0, G: 1, B: 2, A: 3 };
2361
+
2362
+ } else if ( channels.Y ) {
2363
+
2364
+ EXRDecoder.outputChannels = 1;
2365
+ EXRDecoder.decodeChannels = { Y: 0 };
2366
+
2367
+ } else {
2368
+
2369
+ throw new Error( 'EXRLoader.parse: file contains unsupported data channels.' );
2370
+
2371
+ }
2127
2372
 
2128
2373
  if ( EXRDecoder.type == 1 ) {
2129
2374
 
@@ -2132,12 +2377,10 @@ class EXRLoader extends DataTextureLoader {
2132
2377
 
2133
2378
  case FloatType:
2134
2379
  EXRDecoder.getter = parseFloat16;
2135
- EXRDecoder.inputSize = INT16_SIZE;
2136
2380
  break;
2137
2381
 
2138
2382
  case HalfFloatType:
2139
2383
  EXRDecoder.getter = parseUint16;
2140
- EXRDecoder.inputSize = INT16_SIZE;
2141
2384
  break;
2142
2385
 
2143
2386
  }
@@ -2149,12 +2392,10 @@ class EXRLoader extends DataTextureLoader {
2149
2392
 
2150
2393
  case FloatType:
2151
2394
  EXRDecoder.getter = parseFloat32;
2152
- EXRDecoder.inputSize = FLOAT32_SIZE;
2153
2395
  break;
2154
2396
 
2155
2397
  case HalfFloatType:
2156
2398
  EXRDecoder.getter = decodeFloat32;
2157
- EXRDecoder.inputSize = FLOAT32_SIZE;
2158
2399
 
2159
2400
  }
2160
2401
 
@@ -2164,15 +2405,7 @@ class EXRLoader extends DataTextureLoader {
2164
2405
 
2165
2406
  }
2166
2407
 
2167
- EXRDecoder.blockCount = ( EXRHeader.dataWindow.yMax + 1 ) / EXRDecoder.scanlineBlockSize;
2168
-
2169
- for ( let i = 0; i < EXRDecoder.blockCount; i ++ )
2170
- parseInt64( dataView, offset ); // scanlineOffset
2171
-
2172
- // we should be passed the scanline offset table, ready to start reading pixel data.
2173
-
2174
- // RGB images will be converted to RGBA format, preventing software emulation in select devices.
2175
- EXRDecoder.outputChannels = ( ( EXRDecoder.channels == 3 ) ? 4 : EXRDecoder.channels );
2408
+ EXRDecoder.columns = EXRDecoder.width;
2176
2409
  const size = EXRDecoder.width * EXRDecoder.height * EXRDecoder.outputChannels;
2177
2410
 
2178
2411
  switch ( outputType ) {
@@ -2181,7 +2414,7 @@ class EXRLoader extends DataTextureLoader {
2181
2414
  EXRDecoder.byteArray = new Float32Array( size );
2182
2415
 
2183
2416
  // Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten
2184
- if ( EXRDecoder.channels < EXRDecoder.outputChannels )
2417
+ if ( fillAlpha )
2185
2418
  EXRDecoder.byteArray.fill( 1, 0, size );
2186
2419
 
2187
2420
  break;
@@ -2189,7 +2422,7 @@ class EXRLoader extends DataTextureLoader {
2189
2422
  case HalfFloatType:
2190
2423
  EXRDecoder.byteArray = new Uint16Array( size );
2191
2424
 
2192
- if ( EXRDecoder.channels < EXRDecoder.outputChannels )
2425
+ if ( fillAlpha )
2193
2426
  EXRDecoder.byteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1
2194
2427
 
2195
2428
  break;
@@ -2200,7 +2433,31 @@ class EXRLoader extends DataTextureLoader {
2200
2433
 
2201
2434
  }
2202
2435
 
2203
- EXRDecoder.bytesPerLine = EXRDecoder.width * EXRDecoder.inputSize * EXRDecoder.channels;
2436
+ let byteOffset = 0;
2437
+ for ( const channel of EXRHeader.channels ) {
2438
+
2439
+ if ( EXRDecoder.decodeChannels[ channel.name ] !== undefined ) {
2440
+
2441
+ EXRDecoder.channelByteOffsets[ channel.name ] = byteOffset;
2442
+
2443
+ }
2444
+
2445
+ byteOffset += channel.pixelType * 2;
2446
+
2447
+ }
2448
+
2449
+ EXRDecoder.totalBytes = byteOffset;
2450
+ EXRDecoder.outLineWidth = EXRDecoder.width * EXRDecoder.outputChannels;
2451
+
2452
+ if ( EXRHeader.lineOrder === 'INCREASING_Y' ) {
2453
+
2454
+ EXRDecoder.scanOrder = ( y ) => y;
2455
+
2456
+ } else {
2457
+
2458
+ EXRDecoder.scanOrder = ( y ) => EXRDecoder.height - 1 - y;
2459
+
2460
+ }
2204
2461
 
2205
2462
  if ( EXRDecoder.outputChannels == 4 ) {
2206
2463
 
@@ -2214,58 +2471,55 @@ class EXRLoader extends DataTextureLoader {
2214
2471
 
2215
2472
  }
2216
2473
 
2217
- return EXRDecoder;
2474
+ if ( EXRHeader.spec.singleTile ) {
2218
2475
 
2219
- }
2476
+ EXRDecoder.blockHeight = EXRHeader.tiles.ySize;
2477
+ EXRDecoder.blockWidth = EXRHeader.tiles.xSize;
2220
2478
 
2221
- // start parsing file [START]
2479
+ const numXLevels = calculateTileLevels( EXRHeader.tiles, EXRDecoder.width, EXRDecoder.height );
2480
+ // const numYLevels = calculateTileLevels( EXRHeader.tiles, EXRDecoder.width, EXRDecoder.height );
2222
2481
 
2223
- const bufferDataView = new DataView( buffer );
2224
- const uInt8Array = new Uint8Array( buffer );
2225
- const offset = { value: 0 };
2482
+ const numXTiles = calculateTiles( numXLevels, EXRDecoder.width, EXRHeader.tiles.xSize, EXRHeader.tiles.roundingMode );
2483
+ const numYTiles = calculateTiles( numXLevels, EXRDecoder.height, EXRHeader.tiles.ySize, EXRHeader.tiles.roundingMode );
2226
2484
 
2227
- // get header information and validate format.
2228
- const EXRHeader = parseHeader( bufferDataView, buffer, offset );
2485
+ EXRDecoder.tileCount = numXTiles[ 0 ] * numYTiles[ 0 ];
2229
2486
 
2230
- // get input compression information and prepare decoding.
2231
- const EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type );
2232
-
2233
- const tmpOffset = { value: 0 };
2234
- const channelOffsets = { R: 0, G: 1, B: 2, A: 3, Y: 0 };
2235
-
2236
- for ( let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx ++ ) {
2487
+ for ( let l = 0; l < numXLevels; l ++ )
2488
+ for ( let y = 0; y < numYTiles[ l ]; y ++ )
2489
+ for ( let x = 0; x < numXTiles[ l ]; x ++ )
2490
+ parseInt64( dataView, offset ); // tileOffset
2237
2491
 
2238
- const line = parseUint32( bufferDataView, offset ); // line_no
2239
- EXRDecoder.size = parseUint32( bufferDataView, offset ); // data_len
2240
- EXRDecoder.lines = ( ( line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ) ? ( EXRDecoder.height - line ) : EXRDecoder.scanlineBlockSize );
2492
+ EXRDecoder.decode = parseTiles.bind( EXRDecoder );
2241
2493
 
2242
- const isCompressed = EXRDecoder.size < EXRDecoder.lines * EXRDecoder.bytesPerLine;
2243
- const viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );
2244
-
2245
- offset.value += EXRDecoder.size;
2494
+ } else {
2246
2495
 
2247
- for ( let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y ++ ) {
2496
+ EXRDecoder.blockWidth = EXRDecoder.width;
2497
+ const blockCount = Math.ceil( EXRDecoder.height / EXRDecoder.blockHeight );
2248
2498
 
2249
- const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize;
2250
- if ( true_y >= EXRDecoder.height ) break;
2499
+ for ( let i = 0; i < blockCount; i ++ )
2500
+ parseInt64( dataView, offset ); // scanlineOffset
2251
2501
 
2252
- for ( let channelID = 0; channelID < EXRDecoder.channels; channelID ++ ) {
2502
+ EXRDecoder.decode = parseScanline.bind( EXRDecoder );
2253
2503
 
2254
- const cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
2504
+ }
2255
2505
 
2256
- for ( let x = 0; x < EXRDecoder.width; x ++ ) {
2506
+ return EXRDecoder;
2257
2507
 
2258
- tmpOffset.value = ( line_y * ( EXRDecoder.channels * EXRDecoder.width ) + channelID * EXRDecoder.width + x ) * EXRDecoder.inputSize;
2259
- const outIndex = ( EXRDecoder.height - 1 - true_y ) * ( EXRDecoder.width * EXRDecoder.outputChannels ) + x * EXRDecoder.outputChannels + cOff;
2260
- EXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );
2508
+ }
2261
2509
 
2262
- }
2510
+ // start parsing file [START]
2511
+ const offset = { value: 0 };
2512
+ const bufferDataView = new DataView( buffer );
2513
+ const uInt8Array = new Uint8Array( buffer );
2263
2514
 
2264
- }
2515
+ // get header information and validate format.
2516
+ const EXRHeader = parseHeader( bufferDataView, buffer, offset );
2265
2517
 
2266
- }
2518
+ // get input compression information and prepare decoding.
2519
+ const EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type );
2267
2520
 
2268
- }
2521
+ // parse input data
2522
+ EXRDecoder.decode();
2269
2523
 
2270
2524
  return {
2271
2525
  header: EXRHeader,