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
@@ -106,39 +106,6 @@
106
106
  const LOSSY_DCT = 1;
107
107
  const RLE = 2;
108
108
  const logBase = Math.pow( 2.7182818, 2.2 );
109
- var tmpDataView = new DataView( new ArrayBuffer( 8 ) );
110
-
111
- function frexp( value ) {
112
-
113
- if ( value === 0 ) return [ value, 0 ];
114
- tmpDataView.setFloat64( 0, value );
115
- var bits = tmpDataView.getUint32( 0 ) >>> 20 & 0x7FF;
116
-
117
- if ( bits === 0 ) {
118
-
119
- // denormal
120
- tmpDataView.setFloat64( 0, value * Math.pow( 2, 64 ) ); // exp + 64
121
-
122
- bits = ( tmpDataView.getUint32( 0 ) >>> 20 & 0x7FF ) - 64;
123
-
124
- }
125
-
126
- var exponent = bits - 1022;
127
- var mantissa = ldexp( value, - exponent );
128
- return [ mantissa, exponent ];
129
-
130
- }
131
-
132
- function ldexp( mantissa, exponent ) {
133
-
134
- var steps = Math.min( 3, Math.ceil( Math.abs( exponent ) / 1023 ) );
135
- var result = mantissa;
136
-
137
- for ( var i = 0; i < steps; i ++ ) result *= Math.pow( 2, Math.floor( ( exponent + i ) / steps ) );
138
-
139
- return result;
140
-
141
- }
142
109
 
143
110
  function reverseLutFromBitmap( bitmap, lut ) {
144
111
 
@@ -243,7 +210,7 @@
243
210
 
244
211
  if ( p.value - inOffset.value > ni ) {
245
212
 
246
- throw 'Something wrong with hufUnpackEncTable';
213
+ throw new Error( 'Something wrong with hufUnpackEncTable' );
247
214
 
248
215
  }
249
216
 
@@ -254,7 +221,7 @@
254
221
 
255
222
  if ( im + zerun > iM + 1 ) {
256
223
 
257
- throw 'Something wrong with hufUnpackEncTable';
224
+ throw new Error( 'Something wrong with hufUnpackEncTable' );
258
225
 
259
226
  }
260
227
 
@@ -268,7 +235,7 @@
268
235
 
269
236
  if ( im + zerun > iM + 1 ) {
270
237
 
271
- throw 'Something wrong with hufUnpackEncTable';
238
+ throw new Error( 'Something wrong with hufUnpackEncTable' );
272
239
 
273
240
  }
274
241
 
@@ -305,7 +272,7 @@
305
272
 
306
273
  if ( c >> l ) {
307
274
 
308
- throw 'Invalid table entry';
275
+ throw new Error( 'Invalid table entry' );
309
276
 
310
277
  }
311
278
 
@@ -315,7 +282,7 @@
315
282
 
316
283
  if ( pl.len ) {
317
284
 
318
- throw 'Invalid table entry';
285
+ throw new Error( 'Invalid table entry' );
319
286
 
320
287
  }
321
288
 
@@ -350,7 +317,7 @@
350
317
 
351
318
  if ( pl.len || pl.p ) {
352
319
 
353
- throw 'Invalid table entry';
320
+ throw new Error( 'Invalid table entry' );
354
321
 
355
322
  }
356
323
 
@@ -609,7 +576,7 @@
609
576
 
610
577
  if ( ! pl.p ) {
611
578
 
612
- throw 'hufDecode issues';
579
+ throw new Error( 'hufDecode issues' );
613
580
 
614
581
  }
615
582
 
@@ -645,7 +612,7 @@
645
612
 
646
613
  if ( j == pl.lit ) {
647
614
 
648
- throw 'hufDecode issues';
615
+ throw new Error( 'hufDecode issues' );
649
616
 
650
617
  }
651
618
 
@@ -672,7 +639,7 @@
672
639
 
673
640
  } else {
674
641
 
675
- throw 'hufDecode issues';
642
+ throw new Error( 'hufDecode issues' );
676
643
 
677
644
  }
678
645
 
@@ -696,7 +663,7 @@
696
663
 
697
664
  if ( im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE ) {
698
665
 
699
- throw 'Something wrong with HUF_ENCSIZE';
666
+ throw new Error( 'Something wrong with HUF_ENCSIZE' );
700
667
 
701
668
  }
702
669
 
@@ -708,7 +675,7 @@
708
675
 
709
676
  if ( nBits > 8 * ( nCompressed - ( inOffset.value - initialInOffset ) ) ) {
710
677
 
711
- throw 'Something wrong with hufUncompress';
678
+ throw new Error( 'Something wrong with hufUncompress' );
712
679
 
713
680
  }
714
681
 
@@ -1207,8 +1174,7 @@
1207
1174
  var inOffset = {
1208
1175
  value: info.offset.value
1209
1176
  };
1210
- var tmpBufSize = info.width * scanlineBlockSize * ( EXRHeader.channels.length * info.type );
1211
- var outBuffer = new Uint16Array( tmpBufSize );
1177
+ var outBuffer = new Uint16Array( info.width * info.scanlineBlockSize * ( info.channels * info.type ) );
1212
1178
  var bitmap = new Uint8Array( BITMAP_SIZE ); // Setup channel info
1213
1179
 
1214
1180
  var outBufferEnd = 0;
@@ -1232,7 +1198,7 @@
1232
1198
 
1233
1199
  if ( maxNonZero >= BITMAP_SIZE ) {
1234
1200
 
1235
- throw 'Something is wrong with PIZ_COMPRESSION BITMAP_SIZE';
1201
+ throw new Error( 'Something is wrong with PIZ_COMPRESSION BITMAP_SIZE' );
1236
1202
 
1237
1203
  }
1238
1204
 
@@ -1365,7 +1331,7 @@
1365
1331
  var inOffset = {
1366
1332
  value: info.offset.value
1367
1333
  };
1368
- var outBuffer = new Uint8Array( info.width * info.lines * ( EXRHeader.channels.length * info.type * INT16_SIZE ) ); // Read compression header information
1334
+ var outBuffer = new Uint8Array( info.width * info.lines * ( info.channels * info.type * INT16_SIZE ) ); // Read compression header information
1369
1335
 
1370
1336
  var dwaHeader = {
1371
1337
  version: parseInt64( inDataView, inOffset ),
@@ -1380,7 +1346,7 @@
1380
1346
  totalDcUncompressedCount: parseInt64( inDataView, inOffset ),
1381
1347
  acCompression: parseInt64( inDataView, inOffset )
1382
1348
  };
1383
- if ( dwaHeader.version < 2 ) throw 'EXRLoader.parse: ' + EXRHeader.compression + ' version ' + dwaHeader.version + ' is unsupported'; // Read channel ruleset information
1349
+ if ( dwaHeader.version < 2 ) throw new Error( 'EXRLoader.parse: ' + EXRHeader.compression + ' version ' + dwaHeader.version + ' is unsupported' ); // Read channel ruleset information
1384
1350
 
1385
1351
  var channelRules = new Array();
1386
1352
  var ruleSize = parseUint16( inDataView, inOffset ) - INT16_SIZE;
@@ -1557,7 +1523,7 @@
1557
1523
  case LOSSY_DCT: // skip
1558
1524
 
1559
1525
  default:
1560
- throw 'EXRLoader.parse: unsupported channel compression';
1526
+ throw new Error( 'EXRLoader.parse: unsupported channel compression' );
1561
1527
 
1562
1528
  }
1563
1529
 
@@ -1592,14 +1558,6 @@
1592
1558
 
1593
1559
  }
1594
1560
 
1595
- function parseUlong( dataView, offset ) {
1596
-
1597
- var uLong = dataView.getUint32( 0, true );
1598
- offset.value = offset.value + ULONG_SIZE;
1599
- return uLong;
1600
-
1601
- }
1602
-
1603
1561
  function parseRational( dataView, offset ) {
1604
1562
 
1605
1563
  var x = parseInt32( dataView, offset );
@@ -1857,283 +1815,272 @@
1857
1815
 
1858
1816
  }
1859
1817
 
1860
- var bufferDataView = new DataView( buffer );
1861
- var uInt8Array = new Uint8Array( buffer );
1862
- var EXRHeader = {};
1863
- bufferDataView.getUint32( 0, true ); // magic
1818
+ function parseHeader( dataView, buffer, offset ) {
1864
1819
 
1865
- bufferDataView.getUint8( 4, true ); // versionByteZero
1820
+ const EXRHeader = {};
1866
1821
 
1867
- bufferDataView.getUint8( 5, true ); // fullMask
1868
- // start of header
1822
+ if ( dataView.getUint32( 0, true ) != 20000630 ) {
1869
1823
 
1870
- var offset = {
1871
- value: 8
1872
- }; // start at 8, after magic stuff
1824
+ // magic
1825
+ throw new Error( 'THREE.EXRLoader: provided file doesn\'t appear to be in OpenEXR format.' );
1873
1826
 
1874
- var keepReading = true;
1827
+ }
1875
1828
 
1876
- while ( keepReading ) {
1829
+ EXRHeader.version = dataView.getUint8( 4, true );
1830
+ const spec = dataView.getUint8( 5, true ); // fullMask
1877
1831
 
1878
- var attributeName = parseNullTerminatedString( buffer, offset );
1832
+ EXRHeader.spec = {
1833
+ singleTile: !! ( spec & 1 ),
1834
+ longName: !! ( spec & 2 ),
1835
+ deepFormat: !! ( spec & 4 ),
1836
+ multiPart: !! ( spec & 8 )
1837
+ }; // start of header
1879
1838
 
1880
- if ( attributeName == 0 ) {
1839
+ offset.value = 8; // start at 8 - after pre-amble
1881
1840
 
1882
- keepReading = false;
1841
+ var keepReading = true;
1883
1842
 
1884
- } else {
1843
+ while ( keepReading ) {
1885
1844
 
1886
- var attributeType = parseNullTerminatedString( buffer, offset );
1887
- var attributeSize = parseUint32( bufferDataView, offset );
1888
- var attributeValue = parseValue( bufferDataView, buffer, offset, attributeType, attributeSize );
1845
+ var attributeName = parseNullTerminatedString( buffer, offset );
1889
1846
 
1890
- if ( attributeValue === undefined ) {
1847
+ if ( attributeName == 0 ) {
1891
1848
 
1892
- console.warn( `EXRLoader.parse: skipped unknown header attribute type \'${attributeType}\'.` );
1849
+ keepReading = false;
1893
1850
 
1894
1851
  } else {
1895
1852
 
1896
- EXRHeader[ attributeName ] = attributeValue;
1853
+ var attributeType = parseNullTerminatedString( buffer, offset );
1854
+ var attributeSize = parseUint32( dataView, offset );
1855
+ var attributeValue = parseValue( dataView, buffer, offset, attributeType, attributeSize );
1897
1856
 
1898
- }
1857
+ if ( attributeValue === undefined ) {
1899
1858
 
1900
- }
1859
+ console.warn( `EXRLoader.parse: skipped unknown header attribute type \'${attributeType}\'.` );
1901
1860
 
1902
- } // offsets
1903
-
1904
-
1905
- var dataWindowHeight = EXRHeader.dataWindow.yMax + 1;
1906
- var uncompress;
1907
- var scanlineBlockSize;
1908
-
1909
- switch ( EXRHeader.compression ) {
1910
-
1911
- case 'NO_COMPRESSION':
1912
- scanlineBlockSize = 1;
1913
- uncompress = uncompressRAW;
1914
- break;
1861
+ } else {
1915
1862
 
1916
- case 'RLE_COMPRESSION':
1917
- scanlineBlockSize = 1;
1918
- uncompress = uncompressRLE;
1919
- break;
1863
+ EXRHeader[ attributeName ] = attributeValue;
1920
1864
 
1921
- case 'ZIPS_COMPRESSION':
1922
- scanlineBlockSize = 1;
1923
- uncompress = uncompressZIP;
1924
- break;
1865
+ }
1925
1866
 
1926
- case 'ZIP_COMPRESSION':
1927
- scanlineBlockSize = 16;
1928
- uncompress = uncompressZIP;
1929
- break;
1867
+ }
1930
1868
 
1931
- case 'PIZ_COMPRESSION':
1932
- scanlineBlockSize = 32;
1933
- uncompress = uncompressPIZ;
1934
- break;
1869
+ }
1935
1870
 
1936
- case 'PXR24_COMPRESSION':
1937
- scanlineBlockSize = 16;
1938
- uncompress = uncompressPXR;
1939
- break;
1871
+ if ( spec != 0 ) {
1940
1872
 
1941
- case 'DWAA_COMPRESSION':
1942
- scanlineBlockSize = 32;
1943
- uncompress = uncompressDWA;
1944
- break;
1873
+ console.error( 'EXRHeader:', EXRHeader );
1874
+ throw new Error( 'THREE.EXRLoader: provided file is currently unsupported.' );
1945
1875
 
1946
- case 'DWAB_COMPRESSION':
1947
- scanlineBlockSize = 256;
1948
- uncompress = uncompressDWA;
1949
- break;
1876
+ }
1950
1877
 
1951
- default:
1952
- throw 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported';
1878
+ return EXRHeader;
1953
1879
 
1954
1880
  }
1955
1881
 
1956
- var size_t;
1957
- var getValue; // mixed pixelType not supported
1882
+ function setupDecoder( EXRHeader, dataView, uInt8Array, offset, outputType ) {
1958
1883
 
1959
- var pixelType = EXRHeader.channels[ 0 ].pixelType;
1884
+ const EXRDecoder = {
1885
+ size: 0,
1886
+ viewer: dataView,
1887
+ array: uInt8Array,
1888
+ offset: offset,
1889
+ width: EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1,
1890
+ height: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,
1891
+ channels: EXRHeader.channels.length,
1892
+ bytesPerLine: null,
1893
+ lines: null,
1894
+ inputSize: null,
1895
+ type: EXRHeader.channels[ 0 ].pixelType,
1896
+ uncompress: null,
1897
+ getter: null,
1898
+ format: null,
1899
+ encoding: null
1900
+ };
1960
1901
 
1961
- if ( pixelType === 1 ) {
1902
+ switch ( EXRHeader.compression ) {
1962
1903
 
1963
- // half
1964
- switch ( this.type ) {
1904
+ case 'NO_COMPRESSION':
1905
+ EXRDecoder.lines = 1;
1906
+ EXRDecoder.uncompress = uncompressRAW;
1907
+ break;
1965
1908
 
1966
- case THREE.UnsignedByteType:
1967
- case THREE.FloatType:
1968
- getValue = parseFloat16;
1969
- size_t = INT16_SIZE;
1909
+ case 'RLE_COMPRESSION':
1910
+ EXRDecoder.lines = 1;
1911
+ EXRDecoder.uncompress = uncompressRLE;
1970
1912
  break;
1971
1913
 
1972
- case THREE.HalfFloatType:
1973
- getValue = parseUint16;
1974
- size_t = INT16_SIZE;
1914
+ case 'ZIPS_COMPRESSION':
1915
+ EXRDecoder.lines = 1;
1916
+ EXRDecoder.uncompress = uncompressZIP;
1975
1917
  break;
1976
1918
 
1977
- }
1919
+ case 'ZIP_COMPRESSION':
1920
+ EXRDecoder.lines = 16;
1921
+ EXRDecoder.uncompress = uncompressZIP;
1922
+ break;
1978
1923
 
1979
- } else if ( pixelType === 2 ) {
1924
+ case 'PIZ_COMPRESSION':
1925
+ EXRDecoder.lines = 32;
1926
+ EXRDecoder.uncompress = uncompressPIZ;
1927
+ break;
1980
1928
 
1981
- // float
1982
- switch ( this.type ) {
1929
+ case 'PXR24_COMPRESSION':
1930
+ EXRDecoder.lines = 16;
1931
+ EXRDecoder.uncompress = uncompressPXR;
1932
+ break;
1983
1933
 
1984
- case THREE.UnsignedByteType:
1985
- case THREE.FloatType:
1986
- getValue = parseFloat32;
1987
- size_t = FLOAT32_SIZE;
1934
+ case 'DWAA_COMPRESSION':
1935
+ EXRDecoder.lines = 32;
1936
+ EXRDecoder.uncompress = uncompressDWA;
1988
1937
  break;
1989
1938
 
1990
- case THREE.HalfFloatType:
1991
- getValue = decodeFloat32;
1992
- size_t = FLOAT32_SIZE;
1939
+ case 'DWAB_COMPRESSION':
1940
+ EXRDecoder.lines = 256;
1941
+ EXRDecoder.uncompress = uncompressDWA;
1942
+ break;
1943
+
1944
+ default:
1945
+ throw new Error( 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported' );
1993
1946
 
1994
1947
  }
1995
1948
 
1996
- } else {
1949
+ EXRDecoder.scanlineBlockSize = EXRDecoder.lines;
1997
1950
 
1998
- throw 'EXRLoader.parse: unsupported pixelType ' + pixelType + ' for ' + EXRHeader.compression + '.';
1951
+ if ( EXRDecoder.type == 1 ) {
1999
1952
 
2000
- }
1953
+ // half
1954
+ switch ( outputType ) {
2001
1955
 
2002
- var numBlocks = dataWindowHeight / scanlineBlockSize;
1956
+ case THREE.FloatType:
1957
+ EXRDecoder.getter = parseFloat16;
1958
+ EXRDecoder.inputSize = INT16_SIZE;
1959
+ break;
2003
1960
 
2004
- for ( var i = 0; i < numBlocks; i ++ ) {
1961
+ case THREE.HalfFloatType:
1962
+ EXRDecoder.getter = parseUint16;
1963
+ EXRDecoder.inputSize = INT16_SIZE;
1964
+ break;
2005
1965
 
2006
- parseUlong( bufferDataView, offset ); // scanlineOffset
1966
+ }
2007
1967
 
2008
- } // we should be passed the scanline offset table, start reading pixel data
1968
+ } else if ( EXRDecoder.type == 2 ) {
2009
1969
 
1970
+ // float
1971
+ switch ( outputType ) {
2010
1972
 
2011
- var width = EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1;
2012
- var height = EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1; // Firefox only supports RGBA (half) float textures
2013
- // var numChannels = EXRHeader.channels.length;
1973
+ case THREE.FloatType:
1974
+ EXRDecoder.getter = parseFloat32;
1975
+ EXRDecoder.inputSize = FLOAT32_SIZE;
1976
+ break;
2014
1977
 
2015
- var numChannels = 4;
2016
- var size = width * height * numChannels; // Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten
1978
+ case THREE.HalfFloatType:
1979
+ EXRDecoder.getter = decodeFloat32;
1980
+ EXRDecoder.inputSize = FLOAT32_SIZE;
2017
1981
 
2018
- switch ( this.type ) {
1982
+ }
2019
1983
 
2020
- case THREE.UnsignedByteType:
2021
- case THREE.FloatType:
2022
- var byteArray = new Float32Array( size );
1984
+ } else {
2023
1985
 
2024
- if ( EXRHeader.channels.length < numChannels ) {
1986
+ throw new Error( 'EXRLoader.parse: unsupported pixelType ' + EXRDecoder.type + ' for ' + EXRHeader.compression + '.' );
2025
1987
 
2026
- byteArray.fill( 1, 0, size );
1988
+ }
2027
1989
 
2028
- }
1990
+ EXRDecoder.blockCount = ( EXRHeader.dataWindow.yMax + 1 ) / EXRDecoder.scanlineBlockSize;
2029
1991
 
2030
- break;
1992
+ for ( var i = 0; i < EXRDecoder.blockCount; i ++ ) parseInt64( dataView, offset ); // scanlineOffset
1993
+ // we should be passed the scanline offset table, ready to start reading pixel data.
1994
+ // RGB images will be converted to RGBA format, preventing software emulation in select devices.
2031
1995
 
2032
- case THREE.HalfFloatType:
2033
- var byteArray = new Uint16Array( size );
2034
1996
 
2035
- if ( EXRHeader.channels.length < numChannels ) {
1997
+ EXRDecoder.outputChannels = EXRDecoder.channels == 3 ? 4 : EXRDecoder.channels;
1998
+ const size = EXRDecoder.width * EXRDecoder.height * EXRDecoder.outputChannels;
2036
1999
 
2037
- byteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1
2000
+ switch ( outputType ) {
2038
2001
 
2039
- }
2002
+ case THREE.FloatType:
2003
+ EXRDecoder.byteArray = new Float32Array( size ); // Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten
2040
2004
 
2041
- break;
2005
+ if ( EXRDecoder.channels < EXRDecoder.outputChannels ) EXRDecoder.byteArray.fill( 1, 0, size );
2006
+ break;
2042
2007
 
2043
- default:
2044
- console.error( 'THREE.EXRLoader: unsupported type: ', this.type );
2045
- break;
2008
+ case THREE.HalfFloatType:
2009
+ EXRDecoder.byteArray = new Uint16Array( size );
2010
+ if ( EXRDecoder.channels < EXRDecoder.outputChannels ) EXRDecoder.byteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1
2046
2011
 
2047
- }
2012
+ break;
2048
2013
 
2049
- var channelOffsets = {
2050
- R: 0,
2051
- G: 1,
2052
- B: 2,
2053
- A: 3
2054
- };
2055
- var compressionInfo = {
2056
- size: 0,
2057
- width: width,
2058
- lines: scanlineBlockSize,
2059
- offset: offset,
2060
- array: uInt8Array,
2061
- viewer: bufferDataView,
2062
- type: pixelType,
2063
- channels: EXRHeader.channels.length
2064
- };
2065
- var line;
2066
- var size;
2067
- var viewer;
2068
- var tmpOffset = {
2069
- value: 0
2070
- };
2014
+ default:
2015
+ console.error( 'THREE.EXRLoader: unsupported type: ', outputType );
2016
+ break;
2071
2017
 
2072
- for ( var scanlineBlockIdx = 0; scanlineBlockIdx < height / scanlineBlockSize; scanlineBlockIdx ++ ) {
2018
+ }
2073
2019
 
2074
- line = parseUint32( bufferDataView, offset ); // line_no
2020
+ EXRDecoder.bytesPerLine = EXRDecoder.width * EXRDecoder.inputSize * EXRDecoder.channels;
2075
2021
 
2076
- size = parseUint32( bufferDataView, offset ); // data_len
2022
+ if ( EXRDecoder.outputChannels == 4 ) {
2077
2023
 
2078
- compressionInfo.lines = line + scanlineBlockSize > height ? height - line : scanlineBlockSize;
2079
- compressionInfo.offset = offset;
2080
- compressionInfo.size = size;
2081
- viewer = uncompress( compressionInfo );
2082
- offset.value += size;
2024
+ EXRDecoder.format = THREE.RGBAFormat;
2025
+ EXRDecoder.encoding = THREE.LinearEncoding;
2083
2026
 
2084
- for ( var line_y = 0; line_y < scanlineBlockSize; line_y ++ ) {
2027
+ } else {
2085
2028
 
2086
- var true_y = line_y + scanlineBlockIdx * scanlineBlockSize;
2087
- if ( true_y >= height ) break;
2029
+ EXRDecoder.format = THREE.RedFormat;
2030
+ EXRDecoder.encoding = THREE.LinearEncoding;
2088
2031
 
2089
- for ( var channelID = 0; channelID < EXRHeader.channels.length; channelID ++ ) {
2032
+ }
2090
2033
 
2091
- var cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
2034
+ return EXRDecoder;
2092
2035
 
2093
- for ( var x = 0; x < width; x ++ ) {
2036
+ } // start parsing file [START]
2094
2037
 
2095
- var idx = line_y * ( EXRHeader.channels.length * width ) + channelID * width + x;
2096
- tmpOffset.value = idx * size_t;
2097
- var val = getValue( viewer, tmpOffset );
2098
- byteArray[ ( height - 1 - true_y ) * ( width * numChannels ) + x * numChannels + cOff ] = val;
2099
2038
 
2100
- }
2039
+ const bufferDataView = new DataView( buffer );
2040
+ const uInt8Array = new Uint8Array( buffer );
2041
+ const offset = {
2042
+ value: 0
2043
+ }; // get header information and validate format.
2101
2044
 
2102
- }
2045
+ const EXRHeader = parseHeader( bufferDataView, buffer, offset ); // get input compression information and prepare decoding.
2103
2046
 
2104
- }
2047
+ const EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type );
2048
+ const tmpOffset = {
2049
+ value: 0
2050
+ };
2051
+ const channelOffsets = {
2052
+ R: 0,
2053
+ G: 1,
2054
+ B: 2,
2055
+ A: 3,
2056
+ Y: 0
2057
+ };
2105
2058
 
2106
- }
2059
+ for ( let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx ++ ) {
2107
2060
 
2108
- if ( this.type === THREE.UnsignedByteType ) {
2061
+ const line = parseUint32( bufferDataView, offset ); // line_no
2109
2062
 
2110
- let v, i;
2111
- const size = byteArray.length;
2112
- const RGBEArray = new Uint8Array( size );
2063
+ EXRDecoder.size = parseUint32( bufferDataView, offset ); // data_len
2113
2064
 
2114
- for ( let h = 0; h < height; ++ h ) {
2065
+ EXRDecoder.lines = line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ? EXRDecoder.height - line : EXRDecoder.scanlineBlockSize;
2066
+ const isCompressed = EXRDecoder.size < EXRDecoder.lines * EXRDecoder.bytesPerLine;
2067
+ const viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );
2068
+ offset.value += EXRDecoder.size;
2115
2069
 
2116
- for ( let w = 0; w < width; ++ w ) {
2070
+ for ( let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y ++ ) {
2117
2071
 
2118
- i = h * width * 4 + w * 4;
2119
- const red = byteArray[ i ];
2120
- const green = byteArray[ i + 1 ];
2121
- const blue = byteArray[ i + 2 ];
2122
- v = red > green ? red : green;
2123
- v = blue > v ? blue : v;
2072
+ const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize;
2073
+ if ( true_y >= EXRDecoder.height ) break;
2124
2074
 
2125
- if ( v < 1e-32 ) {
2075
+ for ( let channelID = 0; channelID < EXRDecoder.channels; channelID ++ ) {
2126
2076
 
2127
- RGBEArray[ i ] = RGBEArray[ i + 1 ] = RGBEArray[ i + 2 ] = RGBEArray[ i + 3 ] = 0;
2077
+ const cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
2128
2078
 
2129
- } else {
2079
+ for ( let x = 0; x < EXRDecoder.width; x ++ ) {
2130
2080
 
2131
- const res = frexp( v );
2132
- v = res[ 0 ] * 256 / v;
2133
- RGBEArray[ i ] = red * v;
2134
- RGBEArray[ i + 1 ] = green * v;
2135
- RGBEArray[ i + 2 ] = blue * v;
2136
- RGBEArray[ i + 3 ] = res[ 1 ] + 128;
2081
+ tmpOffset.value = ( line_y * ( EXRDecoder.channels * EXRDecoder.width ) + channelID * EXRDecoder.width + x ) * EXRDecoder.inputSize;
2082
+ const outIndex = ( EXRDecoder.height - 1 - true_y ) * ( EXRDecoder.width * EXRDecoder.outputChannels ) + x * EXRDecoder.outputChannels + cOff;
2083
+ EXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );
2137
2084
 
2138
2085
  }
2139
2086
 
@@ -2141,17 +2088,15 @@
2141
2088
 
2142
2089
  }
2143
2090
 
2144
- byteArray = RGBEArray;
2145
-
2146
2091
  }
2147
2092
 
2148
- const format = this.type === THREE.UnsignedByteType ? THREE.RGBEFormat : numChannels === 4 ? THREE.RGBAFormat : THREE.RGBFormat;
2149
2093
  return {
2150
2094
  header: EXRHeader,
2151
- width: width,
2152
- height: height,
2153
- data: byteArray,
2154
- format: format,
2095
+ width: EXRDecoder.width,
2096
+ height: EXRDecoder.height,
2097
+ data: EXRDecoder.byteArray,
2098
+ format: EXRDecoder.format,
2099
+ encoding: EXRDecoder.encoding,
2155
2100
  type: this.type
2156
2101
  };
2157
2102
 
@@ -2168,27 +2113,11 @@
2168
2113
 
2169
2114
  function onLoadCallback( texture, texData ) {
2170
2115
 
2171
- switch ( texture.type ) {
2172
-
2173
- case THREE.UnsignedByteType:
2174
- texture.encoding = THREE.RGBEEncoding;
2175
- texture.minFilter = THREE.NearestFilter;
2176
- texture.magFilter = THREE.NearestFilter;
2177
- texture.generateMipmaps = false;
2178
- texture.flipY = false;
2179
- break;
2180
-
2181
- case THREE.FloatType:
2182
- case THREE.HalfFloatType:
2183
- texture.encoding = THREE.LinearEncoding;
2184
- texture.minFilter = THREE.LinearFilter;
2185
- texture.magFilter = THREE.LinearFilter;
2186
- texture.generateMipmaps = false;
2187
- texture.flipY = false;
2188
- break;
2189
-
2190
- }
2191
-
2116
+ texture.encoding = texData.encoding;
2117
+ texture.minFilter = THREE.LinearFilter;
2118
+ texture.magFilter = THREE.LinearFilter;
2119
+ texture.generateMipmaps = false;
2120
+ texture.flipY = false;
2192
2121
  if ( onLoad ) onLoad( texture, texData );
2193
2122
 
2194
2123
  }