super-three 0.133.3 → 0.136.0

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 (354) hide show
  1. package/build/three.js +1059 -783
  2. package/build/three.min.js +1 -1
  3. package/build/three.module.js +1424 -895
  4. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  6. package/examples/fonts/open-sans/open-sans.css +9 -0
  7. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  12. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  13. package/examples/js/animation/CCDIKSolver.js +0 -1
  14. package/examples/js/animation/MMDPhysics.js +1 -3
  15. package/examples/js/controls/ArcballControls.js +99 -72
  16. package/examples/js/controls/DragControls.js +7 -0
  17. package/examples/js/controls/OrbitControls.js +5 -36
  18. package/examples/js/controls/TrackballControls.js +3 -2
  19. package/examples/js/controls/TransformControls.js +24 -1
  20. package/examples/js/csm/CSM.js +2 -2
  21. package/examples/js/csm/CSMFrustum.js +133 -0
  22. package/examples/js/curves/CurveExtras.js +0 -2
  23. package/examples/js/effects/AsciiEffect.js +2 -9
  24. package/examples/js/exporters/GLTFExporter.js +148 -64
  25. package/examples/js/exporters/USDZExporter.js +45 -26
  26. package/examples/js/geometries/TeapotGeometry.js +0 -1
  27. package/examples/js/interactive/SelectionBox.js +2 -0
  28. package/examples/js/interactive/SelectionHelper.js +22 -7
  29. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  30. package/examples/js/lines/LineMaterial.js +58 -20
  31. package/examples/js/lines/LineSegments2.js +29 -24
  32. package/examples/js/loaders/3DMLoader.js +24 -11
  33. package/examples/js/loaders/3MFLoader.js +2 -2
  34. package/examples/js/loaders/AMFLoader.js +0 -2
  35. package/examples/js/loaders/ColladaLoader.js +61 -4
  36. package/examples/js/loaders/EXRLoader.js +185 -262
  37. package/examples/js/loaders/FBXLoader.js +4 -5
  38. package/examples/js/loaders/GLTFLoader.js +96 -33
  39. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
  40. package/examples/js/loaders/KTX2Loader.js +23 -2
  41. package/examples/js/loaders/KTXLoader.js +1 -1
  42. package/examples/js/loaders/LDrawLoader.js +26 -30
  43. package/examples/js/loaders/LUT3dlLoader.js +2 -0
  44. package/examples/js/loaders/LUTCubeLoader.js +2 -0
  45. package/examples/js/loaders/LWOLoader.js +8 -6
  46. package/examples/js/loaders/LogLuvLoader.js +766 -0
  47. package/examples/js/loaders/MMDLoader.js +0 -1
  48. package/examples/js/loaders/NRRDLoader.js +9 -2
  49. package/examples/js/loaders/OBJLoader.js +0 -2
  50. package/examples/js/loaders/PLYLoader.js +33 -8
  51. package/examples/js/loaders/RGBELoader.js +2 -16
  52. package/examples/js/loaders/RGBMLoader.js +55 -5
  53. package/examples/js/loaders/SVGLoader.js +9 -5
  54. package/examples/js/loaders/TDSLoader.js +237 -271
  55. package/examples/js/loaders/VOXLoader.js +1 -0
  56. package/examples/js/loaders/VRMLLoader.js +2 -1
  57. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  58. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  59. package/examples/js/math/ImprovedNoise.js +1 -1
  60. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  61. package/examples/js/objects/Lensflare.js +2 -10
  62. package/examples/js/objects/MarchingCubes.js +42 -128
  63. package/examples/js/objects/Reflector.js +7 -0
  64. package/examples/js/objects/Refractor.js +7 -0
  65. package/examples/js/objects/Sky.js +1 -1
  66. package/examples/js/objects/Water.js +2 -2
  67. package/examples/js/objects/Water2.js +4 -7
  68. package/examples/js/postprocessing/GlitchPass.js +3 -1
  69. package/examples/js/postprocessing/SSAOPass.js +1 -0
  70. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  71. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  72. package/examples/js/shaders/ConvolutionShader.js +0 -1
  73. package/examples/js/shaders/FXAAShader.js +1 -1
  74. package/examples/js/shaders/FilmShader.js +1 -1
  75. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  76. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  77. package/examples/js/shaders/SSRShader.js +1 -1
  78. package/examples/js/shaders/SSRrShader.js +1 -1
  79. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  80. package/examples/js/utils/GeometryUtils.js +1 -1
  81. package/examples/js/utils/RoughnessMipmapper.js +18 -28
  82. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  83. package/examples/jsm/animation/MMDPhysics.js +0 -2
  84. package/examples/jsm/controls/ArcballControls.js +80 -77
  85. package/examples/jsm/controls/DragControls.js +7 -0
  86. package/examples/jsm/controls/OrbitControls.js +9 -51
  87. package/examples/jsm/controls/TrackballControls.js +1 -1
  88. package/examples/jsm/controls/TransformControls.js +24 -1
  89. package/examples/jsm/csm/CSM.js +3 -3
  90. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  91. package/examples/jsm/curves/CurveExtras.js +0 -2
  92. package/examples/jsm/effects/AsciiEffect.js +2 -9
  93. package/examples/jsm/exporters/GLTFExporter.js +161 -75
  94. package/examples/jsm/exporters/USDZExporter.js +47 -26
  95. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  96. package/examples/jsm/interactive/SelectionBox.js +1 -0
  97. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  98. package/examples/jsm/libs/flow.module.js +3338 -0
  99. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  100. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  101. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  102. package/examples/jsm/lines/LineMaterial.js +59 -23
  103. package/examples/jsm/lines/LineSegments2.js +22 -18
  104. package/examples/jsm/loaders/3DMLoader.js +18 -12
  105. package/examples/jsm/loaders/3MFLoader.js +2 -2
  106. package/examples/jsm/loaders/AMFLoader.js +0 -2
  107. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  108. package/examples/jsm/loaders/EXRLoader.js +184 -293
  109. package/examples/jsm/loaders/FBXLoader.js +4 -5
  110. package/examples/jsm/loaders/GLTFLoader.js +101 -37
  111. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
  112. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  113. package/examples/jsm/loaders/KTXLoader.js +1 -1
  114. package/examples/jsm/loaders/LDrawLoader.js +23 -24
  115. package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
  116. package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
  117. package/examples/jsm/loaders/LWOLoader.js +8 -6
  118. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  119. package/examples/jsm/loaders/MMDLoader.js +0 -1
  120. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  121. package/examples/jsm/loaders/OBJLoader.js +0 -2
  122. package/examples/jsm/loaders/PLYLoader.js +34 -8
  123. package/examples/jsm/loaders/RGBELoader.js +0 -20
  124. package/examples/jsm/loaders/RGBMLoader.js +61 -7
  125. package/examples/jsm/loaders/SVGLoader.js +9 -6
  126. package/examples/jsm/loaders/TDSLoader.js +236 -275
  127. package/examples/jsm/loaders/VOXLoader.js +1 -0
  128. package/examples/jsm/loaders/VRMLLoader.js +2 -1
  129. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  130. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  131. package/examples/jsm/math/ImprovedNoise.js +1 -1
  132. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  133. package/examples/jsm/node-editor/NodeEditor.js +456 -0
  134. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  135. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  136. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  137. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  138. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  139. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  140. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  141. package/examples/jsm/node-editor/examples/rim.json +1 -0
  142. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  143. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  144. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  145. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  146. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  147. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  148. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  149. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  150. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  151. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  152. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  153. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  154. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  155. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  156. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  157. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  158. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  159. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  160. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  161. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  162. package/examples/jsm/nodes/math/MathNode.js +12 -0
  163. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  164. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  165. package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -164
  166. package/examples/jsm/objects/Lensflare.js +3 -14
  167. package/examples/jsm/objects/MarchingCubes.js +46 -152
  168. package/examples/jsm/objects/Reflector.js +7 -0
  169. package/examples/jsm/objects/Refractor.js +7 -0
  170. package/examples/jsm/objects/Sky.js +1 -1
  171. package/examples/jsm/objects/Water.js +2 -2
  172. package/examples/jsm/objects/Water2.js +4 -8
  173. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  174. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  175. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  176. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  177. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  178. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  179. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  180. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  181. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  182. package/examples/jsm/postprocessing/GlitchPass.js +4 -2
  183. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  184. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  185. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  186. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  187. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  188. package/examples/jsm/postprocessing/SMAAPass.js +1 -1
  189. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  190. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  191. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  192. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  193. package/examples/jsm/postprocessing/SavePass.js +1 -1
  194. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  195. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  196. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  197. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  198. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  199. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  200. package/examples/jsm/renderers/nodes/Nodes.js +15 -13
  201. package/examples/jsm/renderers/nodes/ShaderNode.js +194 -41
  202. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  203. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  204. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  205. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  206. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  207. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  208. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  209. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  210. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  211. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  212. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  213. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  214. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  215. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  216. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  217. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  218. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  219. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  220. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  221. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  222. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  223. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  224. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  225. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  226. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  227. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  228. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  229. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +60 -43
  230. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  231. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  232. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  233. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  234. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  235. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
  236. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  237. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  238. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  239. package/examples/jsm/renderers/nodes/math/MathNode.js +90 -37
  240. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  241. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  242. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  243. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  244. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  245. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  246. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  247. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  248. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  249. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  250. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  251. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  252. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  253. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  254. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  255. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  256. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  257. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  258. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  259. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  260. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  261. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  262. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  263. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +12 -28
  264. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  265. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
  266. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  267. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +453 -95
  268. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  269. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  270. package/examples/jsm/shaders/FXAAShader.js +1 -1
  271. package/examples/jsm/shaders/FilmShader.js +1 -1
  272. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  273. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  274. package/examples/jsm/shaders/SSRShader.js +1 -1
  275. package/examples/jsm/shaders/SSRrShader.js +1 -1
  276. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  277. package/examples/jsm/utils/GeometryUtils.js +1 -1
  278. package/examples/jsm/utils/RoughnessMipmapper.js +19 -31
  279. package/examples/jsm/utils/WorkerPool.js +11 -11
  280. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  281. package/package.json +24 -18
  282. package/src/Three.Legacy.js +18 -0
  283. package/src/Three.js +1 -3
  284. package/src/cameras/StereoCamera.js +8 -7
  285. package/src/constants.js +1 -8
  286. package/src/core/Layers.js +7 -1
  287. package/src/core/Object3D.js +3 -1
  288. package/src/extras/PMREMGenerator.js +23 -109
  289. package/src/extras/core/Interpolations.js +1 -1
  290. package/src/geometries/LatheGeometry.js +70 -47
  291. package/src/helpers/CameraHelper.js +1 -1
  292. package/src/loaders/FileLoader.js +98 -144
  293. package/src/loaders/ImageLoader.js +9 -4
  294. package/src/loaders/LoaderUtils.js +26 -0
  295. package/src/loaders/MaterialLoader.js +7 -4
  296. package/src/loaders/ObjectLoader.js +2 -0
  297. package/src/materials/Material.js +4 -4
  298. package/src/materials/MeshPhysicalMaterial.js +20 -14
  299. package/src/math/Color.js +0 -38
  300. package/src/math/MathUtils.js +5 -16
  301. package/src/math/Ray.js +2 -2
  302. package/src/math/Sphere.js +10 -1
  303. package/src/objects/Skeleton.js +1 -0
  304. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  305. package/src/renderers/WebGLRenderer.js +105 -132
  306. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  307. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  308. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  309. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -74
  310. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  311. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  312. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  313. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  314. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  315. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  316. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
  317. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  318. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  319. package/src/renderers/shaders/ShaderLib.js +6 -4
  320. package/src/renderers/shaders/UniformsLib.js +1 -2
  321. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  322. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  323. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  324. package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
  325. package/src/renderers/webgl/WebGLProgram.js +11 -24
  326. package/src/renderers/webgl/WebGLPrograms.js +194 -33
  327. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  328. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  329. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  330. package/src/renderers/webgl/WebGLState.js +76 -17
  331. package/src/renderers/webgl/WebGLTextures.js +367 -61
  332. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  333. package/src/renderers/webxr/WebXRManager.js +77 -109
  334. package/src/scenes/Scene.js +1 -1
  335. package/src/textures/DataTexture.js +0 -2
  336. package/src/textures/DataTexture2DArray.js +0 -2
  337. package/src/textures/DataTexture3D.js +0 -2
  338. package/src/textures/FramebufferTexture.js +25 -0
  339. package/src/textures/Texture.js +6 -0
  340. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  341. package/examples/js/libs/dat.gui.min.js +0 -14
  342. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  343. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  344. package/examples/jsm/libs/glslang.js +0 -78
  345. package/examples/jsm/libs/glslang.wasm +0 -0
  346. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  347. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  348. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  349. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  350. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  351. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  352. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  353. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  354. 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
 
@@ -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;
@@ -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 ),
@@ -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,266 @@
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
1864
-
1865
- bufferDataView.getUint8( 4, true ); // versionByteZero
1866
-
1867
- bufferDataView.getUint8( 5, true ); // fullMask
1868
- // start of header
1869
-
1870
- var offset = {
1871
- value: 8
1872
- }; // start at 8, after magic stuff
1873
-
1874
- var keepReading = true;
1818
+ function parseHeader( dataView, buffer, offset ) {
1875
1819
 
1876
- while ( keepReading ) {
1820
+ const EXRHeader = {};
1821
+ if ( dataView.getUint32( 0, true ) != 20000630 ) // magic
1822
+ throw 'THREE.EXRLoader: provided file doesn\'t appear to be in OpenEXR format.';
1823
+ EXRHeader.version = dataView.getUint8( 4, true );
1824
+ const spec = dataView.getUint8( 5, true ); // fullMask
1877
1825
 
1878
- var attributeName = parseNullTerminatedString( buffer, offset );
1826
+ EXRHeader.spec = {
1827
+ singleTile: !! ( spec & 1 ),
1828
+ longName: !! ( spec & 2 ),
1829
+ deepFormat: !! ( spec & 4 ),
1830
+ multiPart: !! ( spec & 8 )
1831
+ }; // start of header
1879
1832
 
1880
- if ( attributeName == 0 ) {
1833
+ offset.value = 8; // start at 8 - after pre-amble
1881
1834
 
1882
- keepReading = false;
1835
+ var keepReading = true;
1883
1836
 
1884
- } else {
1837
+ while ( keepReading ) {
1885
1838
 
1886
- var attributeType = parseNullTerminatedString( buffer, offset );
1887
- var attributeSize = parseUint32( bufferDataView, offset );
1888
- var attributeValue = parseValue( bufferDataView, buffer, offset, attributeType, attributeSize );
1839
+ var attributeName = parseNullTerminatedString( buffer, offset );
1889
1840
 
1890
- if ( attributeValue === undefined ) {
1841
+ if ( attributeName == 0 ) {
1891
1842
 
1892
- console.warn( `EXRLoader.parse: skipped unknown header attribute type \'${attributeType}\'.` );
1843
+ keepReading = false;
1893
1844
 
1894
1845
  } else {
1895
1846
 
1896
- EXRHeader[ attributeName ] = attributeValue;
1897
-
1898
- }
1899
-
1900
- }
1901
-
1902
- } // offsets
1847
+ var attributeType = parseNullTerminatedString( buffer, offset );
1848
+ var attributeSize = parseUint32( dataView, offset );
1849
+ var attributeValue = parseValue( dataView, buffer, offset, attributeType, attributeSize );
1903
1850
 
1851
+ if ( attributeValue === undefined ) {
1904
1852
 
1905
- var dataWindowHeight = EXRHeader.dataWindow.yMax + 1;
1906
- var uncompress;
1907
- var scanlineBlockSize;
1853
+ console.warn( `EXRLoader.parse: skipped unknown header attribute type \'${attributeType}\'.` );
1908
1854
 
1909
- switch ( EXRHeader.compression ) {
1910
-
1911
- case 'NO_COMPRESSION':
1912
- scanlineBlockSize = 1;
1913
- uncompress = uncompressRAW;
1914
- break;
1855
+ } else {
1915
1856
 
1916
- case 'RLE_COMPRESSION':
1917
- scanlineBlockSize = 1;
1918
- uncompress = uncompressRLE;
1919
- break;
1857
+ EXRHeader[ attributeName ] = attributeValue;
1920
1858
 
1921
- case 'ZIPS_COMPRESSION':
1922
- scanlineBlockSize = 1;
1923
- uncompress = uncompressZIP;
1924
- break;
1859
+ }
1925
1860
 
1926
- case 'ZIP_COMPRESSION':
1927
- scanlineBlockSize = 16;
1928
- uncompress = uncompressZIP;
1929
- break;
1861
+ }
1930
1862
 
1931
- case 'PIZ_COMPRESSION':
1932
- scanlineBlockSize = 32;
1933
- uncompress = uncompressPIZ;
1934
- break;
1863
+ }
1935
1864
 
1936
- case 'PXR24_COMPRESSION':
1937
- scanlineBlockSize = 16;
1938
- uncompress = uncompressPXR;
1939
- break;
1865
+ if ( spec != 0 ) {
1940
1866
 
1941
- case 'DWAA_COMPRESSION':
1942
- scanlineBlockSize = 32;
1943
- uncompress = uncompressDWA;
1944
- break;
1867
+ console.error( 'EXRHeader:', EXRHeader );
1868
+ throw 'THREE.EXRLoader: provided file is currently unsupported.';
1945
1869
 
1946
- case 'DWAB_COMPRESSION':
1947
- scanlineBlockSize = 256;
1948
- uncompress = uncompressDWA;
1949
- break;
1870
+ }
1950
1871
 
1951
- default:
1952
- throw 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported';
1872
+ return EXRHeader;
1953
1873
 
1954
1874
  }
1955
1875
 
1956
- var size_t;
1957
- var getValue; // mixed pixelType not supported
1876
+ function setupDecoder( EXRHeader, dataView, uInt8Array, offset, outputType ) {
1958
1877
 
1959
- var pixelType = EXRHeader.channels[ 0 ].pixelType;
1878
+ const EXRDecoder = {
1879
+ size: 0,
1880
+ viewer: dataView,
1881
+ array: uInt8Array,
1882
+ offset: offset,
1883
+ width: EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1,
1884
+ height: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,
1885
+ channels: EXRHeader.channels.length,
1886
+ bytesPerLine: null,
1887
+ lines: null,
1888
+ inputSize: null,
1889
+ type: EXRHeader.channels[ 0 ].pixelType,
1890
+ uncompress: null,
1891
+ getter: null,
1892
+ format: null,
1893
+ encoding: null
1894
+ };
1960
1895
 
1961
- if ( pixelType === 1 ) {
1896
+ switch ( EXRHeader.compression ) {
1962
1897
 
1963
- // half
1964
- switch ( this.type ) {
1898
+ case 'NO_COMPRESSION':
1899
+ EXRDecoder.lines = 1;
1900
+ EXRDecoder.uncompress = uncompressRAW;
1901
+ break;
1965
1902
 
1966
- case THREE.UnsignedByteType:
1967
- case THREE.FloatType:
1968
- getValue = parseFloat16;
1969
- size_t = INT16_SIZE;
1903
+ case 'RLE_COMPRESSION':
1904
+ EXRDecoder.lines = 1;
1905
+ EXRDecoder.uncompress = uncompressRLE;
1970
1906
  break;
1971
1907
 
1972
- case THREE.HalfFloatType:
1973
- getValue = parseUint16;
1974
- size_t = INT16_SIZE;
1908
+ case 'ZIPS_COMPRESSION':
1909
+ EXRDecoder.lines = 1;
1910
+ EXRDecoder.uncompress = uncompressZIP;
1975
1911
  break;
1976
1912
 
1977
- }
1913
+ case 'ZIP_COMPRESSION':
1914
+ EXRDecoder.lines = 16;
1915
+ EXRDecoder.uncompress = uncompressZIP;
1916
+ break;
1978
1917
 
1979
- } else if ( pixelType === 2 ) {
1918
+ case 'PIZ_COMPRESSION':
1919
+ EXRDecoder.lines = 32;
1920
+ EXRDecoder.uncompress = uncompressPIZ;
1921
+ break;
1980
1922
 
1981
- // float
1982
- switch ( this.type ) {
1923
+ case 'PXR24_COMPRESSION':
1924
+ EXRDecoder.lines = 16;
1925
+ EXRDecoder.uncompress = uncompressPXR;
1926
+ break;
1983
1927
 
1984
- case THREE.UnsignedByteType:
1985
- case THREE.FloatType:
1986
- getValue = parseFloat32;
1987
- size_t = FLOAT32_SIZE;
1928
+ case 'DWAA_COMPRESSION':
1929
+ EXRDecoder.lines = 32;
1930
+ EXRDecoder.uncompress = uncompressDWA;
1988
1931
  break;
1989
1932
 
1990
- case THREE.HalfFloatType:
1991
- getValue = decodeFloat32;
1992
- size_t = FLOAT32_SIZE;
1933
+ case 'DWAB_COMPRESSION':
1934
+ EXRDecoder.lines = 256;
1935
+ EXRDecoder.uncompress = uncompressDWA;
1936
+ break;
1937
+
1938
+ default:
1939
+ throw 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported';
1993
1940
 
1994
1941
  }
1995
1942
 
1996
- } else {
1943
+ EXRDecoder.scanlineBlockSize = EXRDecoder.lines;
1997
1944
 
1998
- throw 'EXRLoader.parse: unsupported pixelType ' + pixelType + ' for ' + EXRHeader.compression + '.';
1945
+ if ( EXRDecoder.type == 1 ) {
1999
1946
 
2000
- }
1947
+ // half
1948
+ switch ( outputType ) {
2001
1949
 
2002
- var numBlocks = dataWindowHeight / scanlineBlockSize;
1950
+ case THREE.FloatType:
1951
+ EXRDecoder.getter = parseFloat16;
1952
+ EXRDecoder.inputSize = INT16_SIZE;
1953
+ break;
2003
1954
 
2004
- for ( var i = 0; i < numBlocks; i ++ ) {
1955
+ case THREE.HalfFloatType:
1956
+ EXRDecoder.getter = parseUint16;
1957
+ EXRDecoder.inputSize = INT16_SIZE;
1958
+ break;
2005
1959
 
2006
- parseUlong( bufferDataView, offset ); // scanlineOffset
1960
+ }
2007
1961
 
2008
- } // we should be passed the scanline offset table, start reading pixel data
1962
+ } else if ( EXRDecoder.type == 2 ) {
2009
1963
 
1964
+ // float
1965
+ switch ( outputType ) {
2010
1966
 
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;
1967
+ case THREE.FloatType:
1968
+ EXRDecoder.getter = parseFloat32;
1969
+ EXRDecoder.inputSize = FLOAT32_SIZE;
1970
+ break;
2014
1971
 
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
1972
+ case THREE.HalfFloatType:
1973
+ EXRDecoder.getter = decodeFloat32;
1974
+ EXRDecoder.inputSize = FLOAT32_SIZE;
2017
1975
 
2018
- switch ( this.type ) {
1976
+ }
2019
1977
 
2020
- case THREE.UnsignedByteType:
2021
- case THREE.FloatType:
2022
- var byteArray = new Float32Array( size );
1978
+ } else {
2023
1979
 
2024
- if ( EXRHeader.channels.length < numChannels ) {
1980
+ throw 'EXRLoader.parse: unsupported pixelType ' + EXRDecoder.type + ' for ' + EXRHeader.compression + '.';
2025
1981
 
2026
- byteArray.fill( 1, 0, size );
1982
+ }
2027
1983
 
2028
- }
1984
+ EXRDecoder.blockCount = ( EXRHeader.dataWindow.yMax + 1 ) / EXRDecoder.scanlineBlockSize;
2029
1985
 
2030
- break;
1986
+ for ( var i = 0; i < EXRDecoder.blockCount; i ++ ) parseInt64( dataView, offset ); // scanlineOffset
1987
+ // we should be passed the scanline offset table, ready to start reading pixel data.
1988
+ // RGB images will be converted to RGBA format, preventing software emulation in select devices.
2031
1989
 
2032
- case THREE.HalfFloatType:
2033
- var byteArray = new Uint16Array( size );
2034
1990
 
2035
- if ( EXRHeader.channels.length < numChannels ) {
1991
+ EXRDecoder.outputChannels = EXRDecoder.channels == 3 ? 4 : EXRDecoder.channels;
1992
+ const size = EXRDecoder.width * EXRDecoder.height * EXRDecoder.outputChannels;
2036
1993
 
2037
- byteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1
1994
+ switch ( outputType ) {
2038
1995
 
2039
- }
1996
+ case THREE.FloatType:
1997
+ 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
1998
 
2041
- break;
1999
+ if ( EXRDecoder.channels < EXRDecoder.outputChannels ) EXRDecoder.byteArray.fill( 1, 0, size );
2000
+ break;
2042
2001
 
2043
- default:
2044
- console.error( 'THREE.EXRLoader: unsupported type: ', this.type );
2045
- break;
2002
+ case THREE.HalfFloatType:
2003
+ EXRDecoder.byteArray = new Uint16Array( size );
2004
+ if ( EXRDecoder.channels < EXRDecoder.outputChannels ) EXRDecoder.byteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1
2046
2005
 
2047
- }
2006
+ break;
2048
2007
 
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
- };
2008
+ default:
2009
+ console.error( 'THREE.EXRLoader: unsupported type: ', outputType );
2010
+ break;
2071
2011
 
2072
- for ( var scanlineBlockIdx = 0; scanlineBlockIdx < height / scanlineBlockSize; scanlineBlockIdx ++ ) {
2012
+ }
2073
2013
 
2074
- line = parseUint32( bufferDataView, offset ); // line_no
2014
+ EXRDecoder.bytesPerLine = EXRDecoder.width * EXRDecoder.inputSize * EXRDecoder.channels;
2075
2015
 
2076
- size = parseUint32( bufferDataView, offset ); // data_len
2016
+ if ( EXRDecoder.outputChannels == 4 ) {
2077
2017
 
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;
2018
+ EXRDecoder.format = THREE.RGBAFormat;
2019
+ EXRDecoder.encoding = THREE.LinearEncoding;
2083
2020
 
2084
- for ( var line_y = 0; line_y < scanlineBlockSize; line_y ++ ) {
2021
+ } else {
2085
2022
 
2086
- var true_y = line_y + scanlineBlockIdx * scanlineBlockSize;
2087
- if ( true_y >= height ) break;
2023
+ EXRDecoder.format = THREE.RedFormat;
2024
+ EXRDecoder.encoding = THREE.LinearEncoding;
2088
2025
 
2089
- for ( var channelID = 0; channelID < EXRHeader.channels.length; channelID ++ ) {
2026
+ }
2090
2027
 
2091
- var cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
2028
+ return EXRDecoder;
2092
2029
 
2093
- for ( var x = 0; x < width; x ++ ) {
2030
+ } // start parsing file [START]
2094
2031
 
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
2032
 
2100
- }
2033
+ const bufferDataView = new DataView( buffer );
2034
+ const uInt8Array = new Uint8Array( buffer );
2035
+ const offset = {
2036
+ value: 0
2037
+ }; // get header information and validate format.
2101
2038
 
2102
- }
2039
+ const EXRHeader = parseHeader( bufferDataView, buffer, offset ); // get input compression information and prepare decoding.
2103
2040
 
2104
- }
2041
+ const EXRDecoder = setupDecoder( EXRHeader, bufferDataView, uInt8Array, offset, this.type );
2042
+ const tmpOffset = {
2043
+ value: 0
2044
+ };
2045
+ const channelOffsets = {
2046
+ R: 0,
2047
+ G: 1,
2048
+ B: 2,
2049
+ A: 3,
2050
+ Y: 0
2051
+ };
2105
2052
 
2106
- }
2053
+ for ( let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx ++ ) {
2107
2054
 
2108
- if ( this.type === THREE.UnsignedByteType ) {
2055
+ const line = parseUint32( bufferDataView, offset ); // line_no
2109
2056
 
2110
- let v, i;
2111
- const size = byteArray.length;
2112
- const RGBEArray = new Uint8Array( size );
2057
+ EXRDecoder.size = parseUint32( bufferDataView, offset ); // data_len
2113
2058
 
2114
- for ( let h = 0; h < height; ++ h ) {
2059
+ EXRDecoder.lines = line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ? EXRDecoder.height - line : EXRDecoder.scanlineBlockSize;
2060
+ const isCompressed = EXRDecoder.size < EXRDecoder.lines * EXRDecoder.bytesPerLine;
2061
+ const viewer = isCompressed ? EXRDecoder.uncompress( EXRDecoder ) : uncompressRAW( EXRDecoder );
2062
+ offset.value += EXRDecoder.size;
2115
2063
 
2116
- for ( let w = 0; w < width; ++ w ) {
2064
+ for ( let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y ++ ) {
2117
2065
 
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;
2066
+ const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize;
2067
+ if ( true_y >= EXRDecoder.height ) break;
2124
2068
 
2125
- if ( v < 1e-32 ) {
2069
+ for ( let channelID = 0; channelID < EXRDecoder.channels; channelID ++ ) {
2126
2070
 
2127
- RGBEArray[ i ] = RGBEArray[ i + 1 ] = RGBEArray[ i + 2 ] = RGBEArray[ i + 3 ] = 0;
2071
+ const cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
2128
2072
 
2129
- } else {
2073
+ for ( let x = 0; x < EXRDecoder.width; x ++ ) {
2130
2074
 
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;
2075
+ tmpOffset.value = ( line_y * ( EXRDecoder.channels * EXRDecoder.width ) + channelID * EXRDecoder.width + x ) * EXRDecoder.inputSize;
2076
+ const outIndex = ( EXRDecoder.height - 1 - true_y ) * ( EXRDecoder.width * EXRDecoder.outputChannels ) + x * EXRDecoder.outputChannels + cOff;
2077
+ EXRDecoder.byteArray[ outIndex ] = EXRDecoder.getter( viewer, tmpOffset );
2137
2078
 
2138
2079
  }
2139
2080
 
@@ -2141,17 +2082,15 @@
2141
2082
 
2142
2083
  }
2143
2084
 
2144
- byteArray = RGBEArray;
2145
-
2146
2085
  }
2147
2086
 
2148
- const format = this.type === THREE.UnsignedByteType ? THREE.RGBEFormat : numChannels === 4 ? THREE.RGBAFormat : THREE.RGBFormat;
2149
2087
  return {
2150
2088
  header: EXRHeader,
2151
- width: width,
2152
- height: height,
2153
- data: byteArray,
2154
- format: format,
2089
+ width: EXRDecoder.width,
2090
+ height: EXRDecoder.height,
2091
+ data: EXRDecoder.byteArray,
2092
+ format: EXRDecoder.format,
2093
+ encoding: EXRDecoder.encoding,
2155
2094
  type: this.type
2156
2095
  };
2157
2096
 
@@ -2168,27 +2107,11 @@
2168
2107
 
2169
2108
  function onLoadCallback( texture, texData ) {
2170
2109
 
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
-
2110
+ texture.encoding = texData.encoding;
2111
+ texture.minFilter = THREE.LinearFilter;
2112
+ texture.magFilter = THREE.LinearFilter;
2113
+ texture.generateMipmaps = false;
2114
+ texture.flipY = false;
2192
2115
  if ( onLoad ) onLoad( texture, texData );
2193
2116
 
2194
2117
  }
@@ -9,11 +9,10 @@
9
9
  * Morph normals / blend shape normals
10
10
  *
11
11
  * FBX format references:
12
- * https://wiki.blender.org/index.php/User:Mont29/Foundation/FBX_File_Structure
13
- * http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_index_html (C++ SDK reference)
12
+ * https://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_index_html (C++ SDK reference)
14
13
  *
15
- * Binary format specification:
16
- * https://code.blender.org/2013/08/fbx-binary-file-format-specification/
14
+ * Binary format specification:
15
+ * https://code.blender.org/2013/08/fbx-binary-file-format-specification/
17
16
  */
18
17
 
19
18
  let fbxTree;
@@ -1310,7 +1309,7 @@
1310
1309
 
1311
1310
  for ( const nodeID in BindPoseNode ) {
1312
1311
 
1313
- if ( BindPoseNode[ nodeID ].attrType === 'BindPose' ) {
1312
+ if ( BindPoseNode[ nodeID ].attrType === 'BindPose' && BindPoseNode[ nodeID ].NbPoseNodes > 0 ) {
1314
1313
 
1315
1314
  const poseNodes = BindPoseNode[ nodeID ].PoseNode;
1316
1315