super-three 0.133.4 → 0.136.1

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 (409) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.js +2285 -1983
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +5983 -5358
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  6. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  7. package/examples/fonts/open-sans/open-sans.css +9 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  12. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  13. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  14. package/examples/js/animation/CCDIKSolver.js +0 -1
  15. package/examples/js/animation/MMDPhysics.js +2 -4
  16. package/examples/js/cameras/CinematicCamera.js +2 -7
  17. package/examples/js/controls/ArcballControls.js +99 -72
  18. package/examples/js/controls/DragControls.js +7 -0
  19. package/examples/js/controls/OrbitControls.js +5 -36
  20. package/examples/js/controls/TrackballControls.js +3 -2
  21. package/examples/js/controls/TransformControls.js +24 -1
  22. package/examples/js/csm/CSM.js +2 -2
  23. package/examples/js/csm/CSMFrustum.js +133 -0
  24. package/examples/js/curves/CurveExtras.js +0 -2
  25. package/examples/js/effects/AsciiEffect.js +2 -9
  26. package/examples/js/exporters/GLTFExporter.js +148 -64
  27. package/examples/js/exporters/MMDExporter.js +1 -1
  28. package/examples/js/exporters/USDZExporter.js +45 -26
  29. package/examples/js/geometries/ConvexGeometry.js +1 -1
  30. package/examples/js/geometries/TeapotGeometry.js +0 -1
  31. package/examples/js/interactive/SelectionBox.js +2 -0
  32. package/examples/js/interactive/SelectionHelper.js +22 -7
  33. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  34. package/examples/js/lines/LineMaterial.js +58 -20
  35. package/examples/js/lines/LineSegments2.js +29 -24
  36. package/examples/js/loaders/3DMLoader.js +24 -11
  37. package/examples/js/loaders/3MFLoader.js +2 -2
  38. package/examples/js/loaders/AMFLoader.js +0 -2
  39. package/examples/js/loaders/BasisTextureLoader.js +1 -0
  40. package/examples/js/loaders/ColladaLoader.js +61 -4
  41. package/examples/js/loaders/EXRLoader.js +201 -272
  42. package/examples/js/loaders/FBXLoader.js +4 -5
  43. package/examples/js/loaders/GLTFLoader.js +98 -35
  44. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
  45. package/examples/js/loaders/KTX2Loader.js +23 -2
  46. package/examples/js/loaders/KTXLoader.js +1 -1
  47. package/examples/js/loaders/LDrawLoader.js +1169 -901
  48. package/examples/js/loaders/LUT3dlLoader.js +19 -10
  49. package/examples/js/loaders/LUTCubeLoader.js +5 -4
  50. package/examples/js/loaders/LWOLoader.js +8 -6
  51. package/examples/js/loaders/LogLuvLoader.js +766 -0
  52. package/examples/js/loaders/MMDLoader.js +0 -1
  53. package/examples/js/loaders/NRRDLoader.js +9 -2
  54. package/examples/js/loaders/OBJLoader.js +0 -2
  55. package/examples/js/loaders/PLYLoader.js +33 -8
  56. package/examples/js/loaders/RGBELoader.js +8 -22
  57. package/examples/js/loaders/RGBMLoader.js +56 -6
  58. package/examples/js/loaders/SVGLoader.js +12 -6
  59. package/examples/js/loaders/TDSLoader.js +237 -271
  60. package/examples/js/loaders/VOXLoader.js +1 -0
  61. package/examples/js/loaders/VRMLLoader.js +11 -22
  62. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  63. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  64. package/examples/js/math/ConvexHull.js +7 -13
  65. package/examples/js/math/ImprovedNoise.js +1 -1
  66. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  67. package/examples/js/misc/Volume.js +2 -2
  68. package/examples/js/modifiers/CurveModifier.js +8 -7
  69. package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
  70. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  71. package/examples/js/objects/Lensflare.js +2 -10
  72. package/examples/js/objects/MarchingCubes.js +42 -128
  73. package/examples/js/objects/Reflector.js +8 -13
  74. package/examples/js/objects/ReflectorForSSRPass.js +0 -10
  75. package/examples/js/objects/Refractor.js +8 -13
  76. package/examples/js/objects/Sky.js +1 -1
  77. package/examples/js/objects/Water.js +3 -15
  78. package/examples/js/objects/Water2.js +4 -7
  79. package/examples/js/postprocessing/GlitchPass.js +6 -5
  80. package/examples/js/postprocessing/SMAAPass.js +2 -9
  81. package/examples/js/postprocessing/SSAOPass.js +10 -21
  82. package/examples/js/postprocessing/SavePass.js +1 -5
  83. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  84. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  85. package/examples/js/shaders/ConvolutionShader.js +0 -1
  86. package/examples/js/shaders/DigitalGlitch.js +3 -3
  87. package/examples/js/shaders/FXAAShader.js +1 -1
  88. package/examples/js/shaders/FilmShader.js +1 -1
  89. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  90. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  91. package/examples/js/shaders/MMDToonShader.js +0 -1
  92. package/examples/js/shaders/SSAOShader.js +1 -1
  93. package/examples/js/shaders/SSRShader.js +1 -1
  94. package/examples/js/shaders/SSRrShader.js +1 -1
  95. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  96. package/examples/js/utils/GeometryUtils.js +1 -1
  97. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  98. package/examples/jsm/animation/MMDPhysics.js +1 -3
  99. package/examples/jsm/cameras/CinematicCamera.js +2 -5
  100. package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
  101. package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
  102. package/examples/jsm/controls/ArcballControls.js +80 -77
  103. package/examples/jsm/controls/DragControls.js +7 -0
  104. package/examples/jsm/controls/OrbitControls.js +9 -51
  105. package/examples/jsm/controls/TrackballControls.js +1 -1
  106. package/examples/jsm/controls/TransformControls.js +24 -1
  107. package/examples/jsm/csm/CSM.js +3 -3
  108. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  109. package/examples/jsm/curves/CurveExtras.js +0 -2
  110. package/examples/jsm/effects/AsciiEffect.js +2 -9
  111. package/examples/jsm/exporters/GLTFExporter.js +169 -99
  112. package/examples/jsm/exporters/MMDExporter.js +1 -1
  113. package/examples/jsm/exporters/USDZExporter.js +47 -26
  114. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  115. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  116. package/examples/jsm/interactive/SelectionBox.js +1 -0
  117. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  118. package/examples/jsm/libs/flow.module.js +3338 -0
  119. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  120. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  121. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  122. package/examples/jsm/lines/LineMaterial.js +59 -23
  123. package/examples/jsm/lines/LineSegments2.js +22 -18
  124. package/examples/jsm/loaders/3DMLoader.js +18 -12
  125. package/examples/jsm/loaders/3MFLoader.js +2 -2
  126. package/examples/jsm/loaders/AMFLoader.js +0 -2
  127. package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
  128. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  129. package/examples/jsm/loaders/EXRLoader.js +200 -306
  130. package/examples/jsm/loaders/FBXLoader.js +4 -5
  131. package/examples/jsm/loaders/GLTFLoader.js +102 -40
  132. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
  133. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  134. package/examples/jsm/loaders/KTXLoader.js +1 -1
  135. package/examples/jsm/loaders/LDrawLoader.js +1159 -898
  136. package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
  137. package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
  138. package/examples/jsm/loaders/LWOLoader.js +8 -6
  139. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  140. package/examples/jsm/loaders/MMDLoader.js +0 -1
  141. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  142. package/examples/jsm/loaders/OBJLoader.js +0 -2
  143. package/examples/jsm/loaders/PLYLoader.js +34 -8
  144. package/examples/jsm/loaders/RGBELoader.js +7 -28
  145. package/examples/jsm/loaders/RGBMLoader.js +62 -8
  146. package/examples/jsm/loaders/SVGLoader.js +15 -7
  147. package/examples/jsm/loaders/TDSLoader.js +236 -275
  148. package/examples/jsm/loaders/VOXLoader.js +1 -0
  149. package/examples/jsm/loaders/VRMLLoader.js +11 -23
  150. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  151. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  152. package/examples/jsm/math/ConvexHull.js +7 -13
  153. package/examples/jsm/math/ImprovedNoise.js +1 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  155. package/examples/jsm/misc/Volume.js +2 -2
  156. package/examples/jsm/modifiers/CurveModifier.js +9 -8
  157. package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
  158. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  159. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  160. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  161. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  162. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  163. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  164. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  165. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  166. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  167. package/examples/jsm/node-editor/examples/rim.json +1 -0
  168. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  169. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  170. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  171. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  172. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  173. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  174. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  175. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  176. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  177. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  178. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  179. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  180. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  181. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  182. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  183. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  184. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  185. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  186. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  187. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  188. package/examples/jsm/nodes/math/MathNode.js +12 -0
  189. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  190. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  191. package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
  192. package/examples/jsm/objects/Lensflare.js +5 -16
  193. package/examples/jsm/objects/MarchingCubes.js +46 -152
  194. package/examples/jsm/objects/Reflector.js +8 -16
  195. package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
  196. package/examples/jsm/objects/Refractor.js +8 -16
  197. package/examples/jsm/objects/Sky.js +1 -1
  198. package/examples/jsm/objects/Water.js +3 -18
  199. package/examples/jsm/objects/Water2.js +4 -8
  200. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  201. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  202. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  203. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  204. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  205. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  206. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  207. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  208. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  209. package/examples/jsm/postprocessing/GlitchPass.js +10 -7
  210. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  211. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  212. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  213. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  214. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  215. package/examples/jsm/postprocessing/SMAAPass.js +3 -12
  216. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  217. package/examples/jsm/postprocessing/SSAOPass.js +15 -26
  218. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  219. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  220. package/examples/jsm/postprocessing/SavePass.js +2 -4
  221. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  222. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  223. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  224. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  225. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  226. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  227. package/examples/jsm/renderers/nodes/Nodes.js +17 -13
  228. package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
  229. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  230. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  231. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  232. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  233. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  234. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  235. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  236. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  237. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  238. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  239. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  240. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  241. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  242. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  243. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  244. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  245. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  246. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  247. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  248. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  249. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  250. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  251. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  252. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  253. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  254. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  255. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  256. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
  257. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  258. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  259. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  260. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  261. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  262. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
  263. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  264. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  265. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  266. package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
  267. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  268. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  269. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  270. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  271. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  272. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  273. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  274. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  275. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  276. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  277. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  278. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  279. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  280. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  281. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  282. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  283. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  284. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  285. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  286. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  287. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  288. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  289. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  290. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  291. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
  292. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  293. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
  294. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  295. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
  296. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  297. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  298. package/examples/jsm/shaders/DigitalGlitch.js +3 -3
  299. package/examples/jsm/shaders/FXAAShader.js +1 -1
  300. package/examples/jsm/shaders/FilmShader.js +1 -1
  301. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  302. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  303. package/examples/jsm/shaders/MMDToonShader.js +0 -1
  304. package/examples/jsm/shaders/SSAOShader.js +1 -1
  305. package/examples/jsm/shaders/SSRShader.js +1 -1
  306. package/examples/jsm/shaders/SSRrShader.js +1 -1
  307. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  308. package/examples/jsm/utils/GeometryUtils.js +1 -1
  309. package/examples/jsm/utils/LDrawUtils.js +195 -0
  310. package/examples/jsm/utils/WorkerPool.js +11 -11
  311. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  312. package/examples/jsm/webxr/VRButton.js +24 -0
  313. package/examples/jsm/webxr/XREstimatedLight.js +2 -0
  314. package/package.json +27 -18
  315. package/src/Three.Legacy.js +18 -0
  316. package/src/Three.js +1 -3
  317. package/src/animation/AnimationMixer.js +1 -0
  318. package/src/cameras/CubeCamera.js +2 -0
  319. package/src/cameras/StereoCamera.js +8 -7
  320. package/src/constants.js +3 -23
  321. package/src/core/Layers.js +7 -1
  322. package/src/core/Object3D.js +3 -1
  323. package/src/extras/ImageUtils.js +63 -0
  324. package/src/extras/PMREMGenerator.js +49 -185
  325. package/src/extras/core/Interpolations.js +1 -1
  326. package/src/geometries/LatheGeometry.js +70 -47
  327. package/src/helpers/CameraHelper.js +1 -1
  328. package/src/loaders/FileLoader.js +98 -144
  329. package/src/loaders/ImageLoader.js +9 -4
  330. package/src/loaders/LoaderUtils.js +26 -0
  331. package/src/loaders/MaterialLoader.js +8 -5
  332. package/src/loaders/ObjectLoader.js +2 -0
  333. package/src/materials/Material.js +8 -8
  334. package/src/materials/MeshPhysicalMaterial.js +20 -14
  335. package/src/math/Color.js +1 -39
  336. package/src/math/MathUtils.js +5 -16
  337. package/src/math/Quaternion.js +1 -1
  338. package/src/math/Ray.js +2 -2
  339. package/src/math/Sphere.js +10 -1
  340. package/src/objects/Skeleton.js +1 -0
  341. package/src/renderers/WebGLCubeRenderTarget.js +0 -2
  342. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  343. package/src/renderers/WebGLRenderer.js +106 -199
  344. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  345. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  346. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  347. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
  348. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
  349. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  350. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
  351. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  352. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  353. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  354. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  355. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  356. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
  357. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
  358. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  359. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  360. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
  361. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
  362. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
  363. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
  364. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
  365. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  366. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  367. package/src/renderers/shaders/ShaderLib.js +8 -6
  368. package/src/renderers/shaders/UniformsLib.js +1 -2
  369. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  370. package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
  371. package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
  372. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  373. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  374. package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
  375. package/src/renderers/webgl/WebGLProgram.js +12 -37
  376. package/src/renderers/webgl/WebGLPrograms.js +192 -70
  377. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  378. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  379. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  380. package/src/renderers/webgl/WebGLState.js +157 -17
  381. package/src/renderers/webgl/WebGLTextures.js +442 -83
  382. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  383. package/src/renderers/webgl/WebGLUtils.js +86 -28
  384. package/src/renderers/webxr/WebXRManager.js +77 -109
  385. package/src/scenes/Scene.js +1 -1
  386. package/src/textures/DataTexture.js +0 -2
  387. package/src/textures/DataTexture2DArray.js +0 -2
  388. package/src/textures/DataTexture3D.js +0 -2
  389. package/src/textures/FramebufferTexture.js +25 -0
  390. package/src/textures/Texture.js +8 -1
  391. package/src/textures/VideoTexture.js +1 -3
  392. package/examples/js/WebGL.js +0 -90
  393. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  394. package/examples/js/libs/dat.gui.min.js +0 -14
  395. package/examples/js/utils/RoughnessMipmapper.js +0 -278
  396. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  397. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  398. package/examples/jsm/libs/glslang.js +0 -78
  399. package/examples/jsm/libs/glslang.wasm +0 -0
  400. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  401. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  402. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  403. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  404. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  405. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  406. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  407. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  408. package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
  409. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -5,12 +5,8 @@ import {
5
5
  HalfFloatType,
6
6
  LinearEncoding,
7
7
  LinearFilter,
8
- NearestFilter,
9
- RGBAFormat,
10
- RGBEEncoding,
11
- RGBEFormat,
12
- RGBFormat,
13
- UnsignedByteType
8
+ RedFormat,
9
+ RGBAFormat
14
10
  } from 'three';
15
11
  import * as fflate from '../libs/fflate.module.js';
16
12
 
@@ -132,41 +128,6 @@ class EXRLoader extends DataTextureLoader {
132
128
 
133
129
  const logBase = Math.pow( 2.7182818, 2.2 );
134
130
 
135
- var tmpDataView = new DataView( new ArrayBuffer( 8 ) );
136
-
137
- function frexp( value ) {
138
-
139
- if ( value === 0 ) return [ value, 0 ];
140
-
141
- tmpDataView.setFloat64( 0, value );
142
-
143
- var bits = ( tmpDataView.getUint32( 0 ) >>> 20 ) & 0x7FF;
144
- if ( bits === 0 ) { // denormal
145
-
146
- tmpDataView.setFloat64( 0, value * Math.pow( 2, 64 ) ); // exp + 64
147
- bits = ( ( tmpDataView.getUint32( 0 ) >>> 20 ) & 0x7FF ) - 64;
148
-
149
- }
150
-
151
- var exponent = bits - 1022;
152
- var mantissa = ldexp( value, - exponent );
153
-
154
- return [ mantissa, exponent ];
155
-
156
- }
157
-
158
- function ldexp( mantissa, exponent ) {
159
-
160
- var steps = Math.min( 3, Math.ceil( Math.abs( exponent ) / 1023 ) );
161
- var result = mantissa;
162
-
163
- for ( var i = 0; i < steps; i ++ )
164
- result *= Math.pow( 2, Math.floor( ( exponent + i ) / steps ) );
165
-
166
- return result;
167
-
168
- }
169
-
170
131
  function reverseLutFromBitmap( bitmap, lut ) {
171
132
 
172
133
  var k = 0;
@@ -269,7 +230,7 @@ class EXRLoader extends DataTextureLoader {
269
230
 
270
231
  if ( p.value - inOffset.value > ni ) {
271
232
 
272
- throw 'Something wrong with hufUnpackEncTable';
233
+ throw new Error( 'Something wrong with hufUnpackEncTable' );
273
234
 
274
235
  }
275
236
 
@@ -281,7 +242,7 @@ class EXRLoader extends DataTextureLoader {
281
242
 
282
243
  if ( im + zerun > iM + 1 ) {
283
244
 
284
- throw 'Something wrong with hufUnpackEncTable';
245
+ throw new Error( 'Something wrong with hufUnpackEncTable' );
285
246
 
286
247
  }
287
248
 
@@ -295,7 +256,7 @@ class EXRLoader extends DataTextureLoader {
295
256
 
296
257
  if ( im + zerun > iM + 1 ) {
297
258
 
298
- throw 'Something wrong with hufUnpackEncTable';
259
+ throw new Error( 'Something wrong with hufUnpackEncTable' );
299
260
 
300
261
  }
301
262
 
@@ -332,7 +293,7 @@ class EXRLoader extends DataTextureLoader {
332
293
 
333
294
  if ( c >> l ) {
334
295
 
335
- throw 'Invalid table entry';
296
+ throw new Error( 'Invalid table entry' );
336
297
 
337
298
  }
338
299
 
@@ -342,7 +303,7 @@ class EXRLoader extends DataTextureLoader {
342
303
 
343
304
  if ( pl.len ) {
344
305
 
345
- throw 'Invalid table entry';
306
+ throw new Error( 'Invalid table entry' );
346
307
 
347
308
  }
348
309
 
@@ -377,7 +338,7 @@ class EXRLoader extends DataTextureLoader {
377
338
 
378
339
  if ( pl.len || pl.p ) {
379
340
 
380
- throw 'Invalid table entry';
341
+ throw new Error( 'Invalid table entry' );
381
342
 
382
343
  }
383
344
 
@@ -665,7 +626,7 @@ class EXRLoader extends DataTextureLoader {
665
626
 
666
627
  if ( ! pl.p ) {
667
628
 
668
- throw 'hufDecode issues';
629
+ throw new Error( 'hufDecode issues' );
669
630
 
670
631
  }
671
632
 
@@ -705,7 +666,7 @@ class EXRLoader extends DataTextureLoader {
705
666
 
706
667
  if ( j == pl.lit ) {
707
668
 
708
- throw 'hufDecode issues';
669
+ throw new Error( 'hufDecode issues' );
709
670
 
710
671
  }
711
672
 
@@ -735,7 +696,7 @@ class EXRLoader extends DataTextureLoader {
735
696
 
736
697
  } else {
737
698
 
738
- throw 'hufDecode issues';
699
+ throw new Error( 'hufDecode issues' );
739
700
 
740
701
  }
741
702
 
@@ -761,7 +722,7 @@ class EXRLoader extends DataTextureLoader {
761
722
 
762
723
  if ( im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE ) {
763
724
 
764
- throw 'Something wrong with HUF_ENCSIZE';
725
+ throw new Error( 'Something wrong with HUF_ENCSIZE' );
765
726
 
766
727
  }
767
728
 
@@ -776,7 +737,7 @@ class EXRLoader extends DataTextureLoader {
776
737
 
777
738
  if ( nBits > 8 * ( nCompressed - ( inOffset.value - initialInOffset ) ) ) {
778
739
 
779
- throw 'Something wrong with hufUncompress';
740
+ throw new Error( 'Something wrong with hufUncompress' );
780
741
 
781
742
  }
782
743
 
@@ -1312,8 +1273,7 @@ class EXRLoader extends DataTextureLoader {
1312
1273
  var inDataView = info.viewer;
1313
1274
  var inOffset = { value: info.offset.value };
1314
1275
 
1315
- var tmpBufSize = info.width * scanlineBlockSize * ( EXRHeader.channels.length * info.type );
1316
- var outBuffer = new Uint16Array( tmpBufSize );
1276
+ var outBuffer = new Uint16Array( info.width * info.scanlineBlockSize * ( info.channels * info.type ) );
1317
1277
  var bitmap = new Uint8Array( BITMAP_SIZE );
1318
1278
 
1319
1279
  // Setup channel info
@@ -1333,12 +1293,13 @@ class EXRLoader extends DataTextureLoader {
1333
1293
  }
1334
1294
 
1335
1295
  // Read range compression data
1296
+
1336
1297
  var minNonZero = parseUint16( inDataView, inOffset );
1337
1298
  var maxNonZero = parseUint16( inDataView, inOffset );
1338
1299
 
1339
1300
  if ( maxNonZero >= BITMAP_SIZE ) {
1340
1301
 
1341
- throw 'Something is wrong with PIZ_COMPRESSION BITMAP_SIZE';
1302
+ throw new Error( 'Something is wrong with PIZ_COMPRESSION BITMAP_SIZE' );
1342
1303
 
1343
1304
  }
1344
1305
 
@@ -1489,7 +1450,7 @@ class EXRLoader extends DataTextureLoader {
1489
1450
 
1490
1451
  var inDataView = info.viewer;
1491
1452
  var inOffset = { value: info.offset.value };
1492
- var outBuffer = new Uint8Array( info.width * info.lines * ( EXRHeader.channels.length * info.type * INT16_SIZE ) );
1453
+ var outBuffer = new Uint8Array( info.width * info.lines * ( info.channels * info.type * INT16_SIZE ) );
1493
1454
 
1494
1455
  // Read compression header information
1495
1456
  var dwaHeader = {
@@ -1509,7 +1470,7 @@ class EXRLoader extends DataTextureLoader {
1509
1470
  };
1510
1471
 
1511
1472
  if ( dwaHeader.version < 2 )
1512
- throw 'EXRLoader.parse: ' + EXRHeader.compression + ' version ' + dwaHeader.version + ' is unsupported';
1473
+ throw new Error( 'EXRLoader.parse: ' + EXRHeader.compression + ' version ' + dwaHeader.version + ' is unsupported' );
1513
1474
 
1514
1475
  // Read channel ruleset information
1515
1476
  var channelRules = new Array();
@@ -1694,7 +1655,7 @@ class EXRLoader extends DataTextureLoader {
1694
1655
  case LOSSY_DCT: // skip
1695
1656
 
1696
1657
  default:
1697
- throw 'EXRLoader.parse: unsupported channel compression';
1658
+ throw new Error( 'EXRLoader.parse: unsupported channel compression' );
1698
1659
 
1699
1660
  }
1700
1661
 
@@ -1737,16 +1698,6 @@ class EXRLoader extends DataTextureLoader {
1737
1698
 
1738
1699
  }
1739
1700
 
1740
- function parseUlong( dataView, offset ) {
1741
-
1742
- var uLong = dataView.getUint32( 0, true );
1743
-
1744
- offset.value = offset.value + ULONG_SIZE;
1745
-
1746
- return uLong;
1747
-
1748
- }
1749
-
1750
1701
  function parseRational( dataView, offset ) {
1751
1702
 
1752
1703
  var x = parseInt32( dataView, offset );
@@ -2037,311 +1988,274 @@ class EXRLoader extends DataTextureLoader {
2037
1988
 
2038
1989
  }
2039
1990
 
2040
- var bufferDataView = new DataView( buffer );
2041
- var uInt8Array = new Uint8Array( buffer );
2042
-
2043
- var EXRHeader = {};
2044
-
2045
- bufferDataView.getUint32( 0, true ); // magic
2046
- bufferDataView.getUint8( 4, true ); // versionByteZero
2047
- bufferDataView.getUint8( 5, true ); // fullMask
2048
-
2049
- // start of header
1991
+ function parseHeader( dataView, buffer, offset ) {
2050
1992
 
2051
- var offset = { value: 8 }; // start at 8, after magic stuff
1993
+ const EXRHeader = {};
2052
1994
 
2053
- var keepReading = true;
1995
+ if ( dataView.getUint32( 0, true ) != 20000630 ) { // magic
2054
1996
 
2055
- while ( keepReading ) {
2056
-
2057
- var attributeName = parseNullTerminatedString( buffer, offset );
2058
-
2059
- if ( attributeName == 0 ) {
2060
-
2061
- keepReading = false;
2062
-
2063
- } else {
2064
-
2065
- var attributeType = parseNullTerminatedString( buffer, offset );
2066
- var attributeSize = parseUint32( bufferDataView, offset );
2067
- var attributeValue = parseValue( bufferDataView, buffer, offset, attributeType, attributeSize );
2068
-
2069
- if ( attributeValue === undefined ) {
2070
-
2071
- console.warn( `EXRLoader.parse: skipped unknown header attribute type \'${ attributeType }\'.` );
2072
-
2073
- } else {
2074
-
2075
- EXRHeader[ attributeName ] = attributeValue;
2076
-
2077
- }
1997
+ throw new Error( 'THREE.EXRLoader: provided file doesn\'t appear to be in OpenEXR format.' );
2078
1998
 
2079
1999
  }
2080
2000
 
2081
- }
2082
-
2083
- // offsets
2084
- var dataWindowHeight = EXRHeader.dataWindow.yMax + 1;
2001
+ EXRHeader.version = dataView.getUint8( 4, true );
2085
2002
 
2086
- var uncompress;
2087
- var scanlineBlockSize;
2003
+ const spec = dataView.getUint8( 5, true ); // fullMask
2088
2004
 
2089
- switch ( EXRHeader.compression ) {
2005
+ EXRHeader.spec = {
2006
+ singleTile: !! ( spec & 1 ),
2007
+ longName: !! ( spec & 2 ),
2008
+ deepFormat: !! ( spec & 4 ),
2009
+ multiPart: !! ( spec & 8 ),
2010
+ };
2090
2011
 
2091
- case 'NO_COMPRESSION':
2012
+ // start of header
2092
2013
 
2093
- scanlineBlockSize = 1;
2094
- uncompress = uncompressRAW;
2095
- break;
2014
+ offset.value = 8; // start at 8 - after pre-amble
2096
2015
 
2097
- case 'RLE_COMPRESSION':
2016
+ var keepReading = true;
2098
2017
 
2099
- scanlineBlockSize = 1;
2100
- uncompress = uncompressRLE;
2101
- break;
2018
+ while ( keepReading ) {
2102
2019
 
2103
- case 'ZIPS_COMPRESSION':
2020
+ var attributeName = parseNullTerminatedString( buffer, offset );
2104
2021
 
2105
- scanlineBlockSize = 1;
2106
- uncompress = uncompressZIP;
2107
- break;
2022
+ if ( attributeName == 0 ) {
2108
2023
 
2109
- case 'ZIP_COMPRESSION':
2024
+ keepReading = false;
2110
2025
 
2111
- scanlineBlockSize = 16;
2112
- uncompress = uncompressZIP;
2113
- break;
2026
+ } else {
2114
2027
 
2115
- case 'PIZ_COMPRESSION':
2028
+ var attributeType = parseNullTerminatedString( buffer, offset );
2029
+ var attributeSize = parseUint32( dataView, offset );
2030
+ var attributeValue = parseValue( dataView, buffer, offset, attributeType, attributeSize );
2116
2031
 
2117
- scanlineBlockSize = 32;
2118
- uncompress = uncompressPIZ;
2119
- break;
2032
+ if ( attributeValue === undefined ) {
2120
2033
 
2121
- case 'PXR24_COMPRESSION':
2034
+ console.warn( `EXRLoader.parse: skipped unknown header attribute type \'${attributeType}\'.` );
2122
2035
 
2123
- scanlineBlockSize = 16;
2124
- uncompress = uncompressPXR;
2125
- break;
2036
+ } else {
2126
2037
 
2127
- case 'DWAA_COMPRESSION':
2038
+ EXRHeader[ attributeName ] = attributeValue;
2128
2039
 
2129
- scanlineBlockSize = 32;
2130
- uncompress = uncompressDWA;
2131
- break;
2040
+ }
2132
2041
 
2133
- case 'DWAB_COMPRESSION':
2042
+ }
2134
2043
 
2135
- scanlineBlockSize = 256;
2136
- uncompress = uncompressDWA;
2137
- break;
2044
+ }
2138
2045
 
2139
- default:
2046
+ if ( spec != 0 ) {
2140
2047
 
2141
- throw 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported';
2048
+ console.error( 'EXRHeader:', EXRHeader );
2049
+ throw new Error( 'THREE.EXRLoader: provided file is currently unsupported.' );
2142
2050
 
2143
- }
2051
+ }
2144
2052
 
2145
- var size_t;
2146
- var getValue;
2053
+ return EXRHeader;
2147
2054
 
2148
- // mixed pixelType not supported
2149
- var pixelType = EXRHeader.channels[ 0 ].pixelType;
2055
+ }
2150
2056
 
2151
- if ( pixelType === 1 ) { // half
2057
+ function setupDecoder( EXRHeader, dataView, uInt8Array, offset, outputType ) {
2152
2058
 
2153
- switch ( this.type ) {
2059
+ const EXRDecoder = {
2060
+ size: 0,
2061
+ viewer: dataView,
2062
+ array: uInt8Array,
2063
+ offset: offset,
2064
+ width: EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1,
2065
+ height: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,
2066
+ channels: EXRHeader.channels.length,
2067
+ bytesPerLine: null,
2068
+ lines: null,
2069
+ inputSize: null,
2070
+ type: EXRHeader.channels[ 0 ].pixelType,
2071
+ uncompress: null,
2072
+ getter: null,
2073
+ format: null,
2074
+ encoding: null,
2075
+ };
2154
2076
 
2155
- case UnsignedByteType:
2156
- case FloatType:
2077
+ switch ( EXRHeader.compression ) {
2157
2078
 
2158
- getValue = parseFloat16;
2159
- size_t = INT16_SIZE;
2079
+ case 'NO_COMPRESSION':
2080
+ EXRDecoder.lines = 1;
2081
+ EXRDecoder.uncompress = uncompressRAW;
2160
2082
  break;
2161
2083
 
2162
- case HalfFloatType:
2163
-
2164
- getValue = parseUint16;
2165
- size_t = INT16_SIZE;
2084
+ case 'RLE_COMPRESSION':
2085
+ EXRDecoder.lines = 1;
2086
+ EXRDecoder.uncompress = uncompressRLE;
2166
2087
  break;
2167
2088
 
2168
- }
2089
+ case 'ZIPS_COMPRESSION':
2090
+ EXRDecoder.lines = 1;
2091
+ EXRDecoder.uncompress = uncompressZIP;
2092
+ break;
2169
2093
 
2170
- } else if ( pixelType === 2 ) { // float
2094
+ case 'ZIP_COMPRESSION':
2095
+ EXRDecoder.lines = 16;
2096
+ EXRDecoder.uncompress = uncompressZIP;
2097
+ break;
2171
2098
 
2172
- switch ( this.type ) {
2099
+ case 'PIZ_COMPRESSION':
2100
+ EXRDecoder.lines = 32;
2101
+ EXRDecoder.uncompress = uncompressPIZ;
2102
+ break;
2173
2103
 
2174
- case UnsignedByteType:
2175
- case FloatType:
2104
+ case 'PXR24_COMPRESSION':
2105
+ EXRDecoder.lines = 16;
2106
+ EXRDecoder.uncompress = uncompressPXR;
2107
+ break;
2176
2108
 
2177
- getValue = parseFloat32;
2178
- size_t = FLOAT32_SIZE;
2109
+ case 'DWAA_COMPRESSION':
2110
+ EXRDecoder.lines = 32;
2111
+ EXRDecoder.uncompress = uncompressDWA;
2179
2112
  break;
2180
2113
 
2181
- case HalfFloatType:
2114
+ case 'DWAB_COMPRESSION':
2115
+ EXRDecoder.lines = 256;
2116
+ EXRDecoder.uncompress = uncompressDWA;
2117
+ break;
2182
2118
 
2183
- getValue = decodeFloat32;
2184
- size_t = FLOAT32_SIZE;
2119
+ default:
2120
+ throw new Error( 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported' );
2185
2121
 
2186
2122
  }
2187
2123
 
2188
- } else {
2189
-
2190
- throw 'EXRLoader.parse: unsupported pixelType ' + pixelType + ' for ' + EXRHeader.compression + '.';
2191
-
2192
- }
2193
-
2194
- var numBlocks = dataWindowHeight / scanlineBlockSize;
2195
-
2196
- for ( var i = 0; i < numBlocks; i ++ ) {
2197
-
2198
- parseUlong( bufferDataView, offset ); // scanlineOffset
2124
+ EXRDecoder.scanlineBlockSize = EXRDecoder.lines;
2199
2125
 
2200
- }
2201
-
2202
- // we should be passed the scanline offset table, start reading pixel data
2203
-
2204
- var width = EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1;
2205
- var height = EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1;
2206
- // Firefox only supports RGBA (half) float textures
2207
- // var numChannels = EXRHeader.channels.length;
2208
- var numChannels = 4;
2209
- var size = width * height * numChannels;
2210
-
2211
- // Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten
2212
- switch ( this.type ) {
2126
+ if ( EXRDecoder.type == 1 ) {
2213
2127
 
2214
- case UnsignedByteType:
2215
- case FloatType:
2128
+ // half
2129
+ switch ( outputType ) {
2216
2130
 
2217
- var byteArray = new Float32Array( size );
2218
-
2219
- if ( EXRHeader.channels.length < numChannels ) {
2131
+ case FloatType:
2132
+ EXRDecoder.getter = parseFloat16;
2133
+ EXRDecoder.inputSize = INT16_SIZE;
2134
+ break;
2220
2135
 
2221
- byteArray.fill( 1, 0, size );
2136
+ case HalfFloatType:
2137
+ EXRDecoder.getter = parseUint16;
2138
+ EXRDecoder.inputSize = INT16_SIZE;
2139
+ break;
2222
2140
 
2223
2141
  }
2224
2142
 
2225
- break;
2143
+ } else if ( EXRDecoder.type == 2 ) {
2226
2144
 
2227
- case HalfFloatType:
2145
+ // float
2146
+ switch ( outputType ) {
2228
2147
 
2229
- var byteArray = new Uint16Array( size );
2230
-
2231
- if ( EXRHeader.channels.length < numChannels ) {
2148
+ case FloatType:
2149
+ EXRDecoder.getter = parseFloat32;
2150
+ EXRDecoder.inputSize = FLOAT32_SIZE;
2151
+ break;
2232
2152
 
2233
- byteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1
2153
+ case HalfFloatType:
2154
+ EXRDecoder.getter = decodeFloat32;
2155
+ EXRDecoder.inputSize = FLOAT32_SIZE;
2234
2156
 
2235
2157
  }
2236
2158
 
2237
- break;
2238
-
2239
- default:
2240
-
2241
- console.error( 'THREE.EXRLoader: unsupported type: ', this.type );
2242
- break;
2159
+ } else {
2243
2160
 
2244
- }
2161
+ throw new Error( 'EXRLoader.parse: unsupported pixelType ' + EXRDecoder.type + ' for ' + EXRHeader.compression + '.' );
2245
2162
 
2246
- var channelOffsets = {
2247
- R: 0,
2248
- G: 1,
2249
- B: 2,
2250
- A: 3
2251
- };
2163
+ }
2252
2164
 
2253
- var compressionInfo = {
2165
+ EXRDecoder.blockCount = ( EXRHeader.dataWindow.yMax + 1 ) / EXRDecoder.scanlineBlockSize;
2254
2166
 
2255
- size: 0,
2256
- width: width,
2257
- lines: scanlineBlockSize,
2167
+ for ( var i = 0; i < EXRDecoder.blockCount; i ++ )
2168
+ parseInt64( dataView, offset ); // scanlineOffset
2258
2169
 
2259
- offset: offset,
2260
- array: uInt8Array,
2261
- viewer: bufferDataView,
2170
+ // we should be passed the scanline offset table, ready to start reading pixel data.
2262
2171
 
2263
- type: pixelType,
2264
- channels: EXRHeader.channels.length,
2172
+ // RGB images will be converted to RGBA format, preventing software emulation in select devices.
2173
+ EXRDecoder.outputChannels = ( ( EXRDecoder.channels == 3 ) ? 4 : EXRDecoder.channels );
2174
+ const size = EXRDecoder.width * EXRDecoder.height * EXRDecoder.outputChannels;
2265
2175
 
2266
- };
2176
+ switch ( outputType ) {
2267
2177
 
2268
- var line;
2269
- var size;
2270
- var viewer;
2271
- var tmpOffset = { value: 0 };
2178
+ case FloatType:
2179
+ EXRDecoder.byteArray = new Float32Array( size );
2272
2180
 
2273
- for ( var scanlineBlockIdx = 0; scanlineBlockIdx < height / scanlineBlockSize; scanlineBlockIdx ++ ) {
2181
+ // Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten
2182
+ if ( EXRDecoder.channels < EXRDecoder.outputChannels )
2183
+ EXRDecoder.byteArray.fill( 1, 0, size );
2274
2184
 
2275
- line = parseUint32( bufferDataView, offset ); // line_no
2276
- size = parseUint32( bufferDataView, offset ); // data_len
2185
+ break;
2277
2186
 
2278
- compressionInfo.lines = ( line + scanlineBlockSize > height ) ? height - line : scanlineBlockSize;
2279
- compressionInfo.offset = offset;
2280
- compressionInfo.size = size;
2187
+ case HalfFloatType:
2188
+ EXRDecoder.byteArray = new Uint16Array( size );
2281
2189
 
2282
- viewer = uncompress( compressionInfo );
2190
+ if ( EXRDecoder.channels < EXRDecoder.outputChannels )
2191
+ EXRDecoder.byteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1
2283
2192
 
2284
- offset.value += size;
2193
+ break;
2285
2194
 
2286
- for ( var line_y = 0; line_y < scanlineBlockSize; line_y ++ ) {
2195
+ default:
2196
+ console.error( 'THREE.EXRLoader: unsupported type: ', outputType );
2197
+ break;
2287
2198
 
2288
- var true_y = line_y + ( scanlineBlockIdx * scanlineBlockSize );
2199
+ }
2289
2200
 
2290
- if ( true_y >= height ) break;
2201
+ EXRDecoder.bytesPerLine = EXRDecoder.width * EXRDecoder.inputSize * EXRDecoder.channels;
2291
2202
 
2292
- for ( var channelID = 0; channelID < EXRHeader.channels.length; channelID ++ ) {
2203
+ if ( EXRDecoder.outputChannels == 4 ) {
2293
2204
 
2294
- var cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
2205
+ EXRDecoder.format = RGBAFormat;
2206
+ EXRDecoder.encoding = LinearEncoding;
2295
2207
 
2296
- for ( var x = 0; x < width; x ++ ) {
2208
+ } else {
2297
2209
 
2298
- var idx = ( line_y * ( EXRHeader.channels.length * width ) ) + ( channelID * width ) + x;
2299
- tmpOffset.value = idx * size_t;
2210
+ EXRDecoder.format = RedFormat;
2211
+ EXRDecoder.encoding = LinearEncoding;
2300
2212
 
2301
- var val = getValue( viewer, tmpOffset );
2213
+ }
2302
2214
 
2303
- byteArray[ ( ( ( height - 1 - true_y ) * ( width * numChannels ) ) + ( x * numChannels ) ) + cOff ] = val;
2215
+ return EXRDecoder;
2304
2216
 
2305
- }
2217
+ }
2306
2218
 
2307
- }
2219
+ // start parsing file [START]
2308
2220
 
2309
- }
2221
+ const bufferDataView = new DataView( buffer );
2222
+ const uInt8Array = new Uint8Array( buffer );
2223
+ const offset = { value: 0 };
2310
2224
 
2311
- }
2225
+ // get header information and validate format.
2226
+ const EXRHeader = parseHeader( bufferDataView, buffer, offset );
2312
2227
 
2313
- if ( this.type === UnsignedByteType ) {
2228
+ // get input compression information and prepare decoding.
2229
+ const EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type );
2314
2230
 
2315
- let v, i;
2316
- const size = byteArray.length;
2317
- const RGBEArray = new Uint8Array( size );
2231
+ const tmpOffset = { value: 0 };
2232
+ const channelOffsets = { R: 0, G: 1, B: 2, A: 3, Y: 0 };
2318
2233
 
2319
- for ( let h = 0; h < height; ++ h ) {
2234
+ for ( let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx ++ ) {
2320
2235
 
2321
- for ( let w = 0; w < width; ++ w ) {
2236
+ const line = parseUint32( bufferDataView, offset ); // line_no
2237
+ EXRDecoder.size = parseUint32( bufferDataView, offset ); // data_len
2238
+ EXRDecoder.lines = ( ( line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ) ? ( EXRDecoder.height - line ) : EXRDecoder.scanlineBlockSize );
2322
2239
 
2323
- i = h * width * 4 + w * 4;
2240
+ const isCompressed = EXRDecoder.size < EXRDecoder.lines * EXRDecoder.bytesPerLine;
2241
+ const viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );
2324
2242
 
2325
- const red = byteArray[ i ];
2326
- const green = byteArray[ i + 1 ];
2327
- const blue = byteArray[ i + 2 ];
2243
+ offset.value += EXRDecoder.size;
2328
2244
 
2329
- v = ( red > green ) ? red : green;
2330
- v = ( blue > v ) ? blue : v;
2245
+ for ( let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y ++ ) {
2331
2246
 
2332
- if ( v < 1e-32 ) {
2247
+ const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize;
2248
+ if ( true_y >= EXRDecoder.height ) break;
2333
2249
 
2334
- RGBEArray[ i ] = RGBEArray[ i + 1 ] = RGBEArray[ i + 2 ] = RGBEArray[ i + 3 ] = 0;
2250
+ for ( let channelID = 0; channelID < EXRDecoder.channels; channelID ++ ) {
2335
2251
 
2336
- } else {
2252
+ const cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
2337
2253
 
2338
- const res = frexp( v );
2339
- v = res[ 0 ] * 256 / v;
2254
+ for ( let x = 0; x < EXRDecoder.width; x ++ ) {
2340
2255
 
2341
- RGBEArray[ i ] = red * v;
2342
- RGBEArray[ i + 1 ] = green * v;
2343
- RGBEArray[ i + 2 ] = blue * v;
2344
- RGBEArray[ i + 3 ] = res[ 1 ] + 128;
2256
+ tmpOffset.value = ( line_y * ( EXRDecoder.channels * EXRDecoder.width ) + channelID * EXRDecoder.width + x ) * EXRDecoder.inputSize;
2257
+ const outIndex = ( EXRDecoder.height - 1 - true_y ) * ( EXRDecoder.width * EXRDecoder.outputChannels ) + x * EXRDecoder.outputChannels + cOff;
2258
+ EXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );
2345
2259
 
2346
2260
  }
2347
2261
 
@@ -2349,19 +2263,16 @@ class EXRLoader extends DataTextureLoader {
2349
2263
 
2350
2264
  }
2351
2265
 
2352
- byteArray = RGBEArray;
2353
-
2354
2266
  }
2355
2267
 
2356
- const format = ( this.type === UnsignedByteType ) ? RGBEFormat : ( numChannels === 4 ) ? RGBAFormat : RGBFormat;
2357
-
2358
2268
  return {
2359
2269
  header: EXRHeader,
2360
- width: width,
2361
- height: height,
2362
- data: byteArray,
2363
- format: format,
2364
- type: this.type
2270
+ width: EXRDecoder.width,
2271
+ height: EXRDecoder.height,
2272
+ data: EXRDecoder.byteArray,
2273
+ format: EXRDecoder.format,
2274
+ encoding: EXRDecoder.encoding,
2275
+ type: this.type,
2365
2276
  };
2366
2277
 
2367
2278
  }
@@ -2377,28 +2288,11 @@ class EXRLoader extends DataTextureLoader {
2377
2288
 
2378
2289
  function onLoadCallback( texture, texData ) {
2379
2290
 
2380
- switch ( texture.type ) {
2381
-
2382
- case UnsignedByteType:
2383
-
2384
- texture.encoding = RGBEEncoding;
2385
- texture.minFilter = NearestFilter;
2386
- texture.magFilter = NearestFilter;
2387
- texture.generateMipmaps = false;
2388
- texture.flipY = false;
2389
- break;
2390
-
2391
- case FloatType:
2392
- case HalfFloatType:
2393
-
2394
- texture.encoding = LinearEncoding;
2395
- texture.minFilter = LinearFilter;
2396
- texture.magFilter = LinearFilter;
2397
- texture.generateMipmaps = false;
2398
- texture.flipY = false;
2399
- break;
2400
-
2401
- }
2291
+ texture.encoding = texData.encoding;
2292
+ texture.minFilter = LinearFilter;
2293
+ texture.magFilter = LinearFilter;
2294
+ texture.generateMipmaps = false;
2295
+ texture.flipY = false;
2402
2296
 
2403
2297
  if ( onLoad ) onLoad( texture, texData );
2404
2298