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
@@ -94,6 +94,12 @@ class GLTFLoader extends Loader {
94
94
 
95
95
  } );
96
96
 
97
+ this.register( function ( parser ) {
98
+
99
+ return new GLTFMaterialsSheenExtension( parser );
100
+
101
+ } );
102
+
97
103
  this.register( function ( parser ) {
98
104
 
99
105
  return new GLTFMaterialsTransmissionExtension( parser );
@@ -379,6 +385,18 @@ class GLTFLoader extends Loader {
379
385
 
380
386
  }
381
387
 
388
+ parseAsync( data, path ) {
389
+
390
+ const scope = this;
391
+
392
+ return new Promise( function ( resolve, reject ) {
393
+
394
+ scope.parse( data, path, resolve, reject );
395
+
396
+ } );
397
+
398
+ }
399
+
382
400
  }
383
401
 
384
402
  /* GLTFREGISTRY */
@@ -428,6 +446,7 @@ const EXTENSIONS = {
428
446
  KHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',
429
447
  KHR_MATERIALS_IOR: 'KHR_materials_ior',
430
448
  KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',
449
+ KHR_MATERIALS_SHEEN: 'KHR_materials_sheen',
431
450
  KHR_MATERIALS_SPECULAR: 'KHR_materials_specular',
432
451
  KHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',
433
452
  KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',
@@ -704,6 +723,80 @@ class GLTFMaterialsClearcoatExtension {
704
723
 
705
724
  }
706
725
 
726
+ /**
727
+ * Sheen Materials Extension
728
+ *
729
+ * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen
730
+ */
731
+ class GLTFMaterialsSheenExtension {
732
+
733
+ constructor( parser ) {
734
+
735
+ this.parser = parser;
736
+ this.name = EXTENSIONS.KHR_MATERIALS_SHEEN;
737
+
738
+ }
739
+
740
+ getMaterialType( materialIndex ) {
741
+
742
+ const parser = this.parser;
743
+ const materialDef = parser.json.materials[ materialIndex ];
744
+
745
+ if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
746
+
747
+ return MeshPhysicalMaterial;
748
+
749
+ }
750
+
751
+ extendMaterialParams( materialIndex, materialParams ) {
752
+
753
+ const parser = this.parser;
754
+ const materialDef = parser.json.materials[ materialIndex ];
755
+
756
+ if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
757
+
758
+ return Promise.resolve();
759
+
760
+ }
761
+
762
+ const pending = [];
763
+
764
+ materialParams.sheenColor = new Color( 0, 0, 0 );
765
+ materialParams.sheenRoughness = 0;
766
+ materialParams.sheen = 1;
767
+
768
+ const extension = materialDef.extensions[ this.name ];
769
+
770
+ if ( extension.sheenColorFactor !== undefined ) {
771
+
772
+ materialParams.sheenColor.fromArray( extension.sheenColorFactor );
773
+
774
+ }
775
+
776
+ if ( extension.sheenRoughnessFactor !== undefined ) {
777
+
778
+ materialParams.sheenRoughness = extension.sheenRoughnessFactor;
779
+
780
+ }
781
+
782
+ if ( extension.sheenColorTexture !== undefined ) {
783
+
784
+ pending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture ) );
785
+
786
+ }
787
+
788
+ if ( extension.sheenRoughnessTexture !== undefined ) {
789
+
790
+ pending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );
791
+
792
+ }
793
+
794
+ return Promise.all( pending );
795
+
796
+ }
797
+
798
+ }
799
+
707
800
  /**
708
801
  * Transmission Materials Extension
709
802
  *
@@ -814,7 +907,7 @@ class GLTFMaterialsVolumeExtension {
814
907
  materialParams.attenuationDistance = extension.attenuationDistance || 0;
815
908
 
816
909
  const colorArray = extension.attenuationColor || [ 1, 1, 1 ];
817
- materialParams.attenuationTint = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
910
+ materialParams.attenuationColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
818
911
 
819
912
  return Promise.all( pending );
820
913
 
@@ -917,11 +1010,11 @@ class GLTFMaterialsSpecularExtension {
917
1010
  }
918
1011
 
919
1012
  const colorArray = extension.specularColorFactor || [ 1, 1, 1 ];
920
- materialParams.specularTint = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
1013
+ materialParams.specularColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
921
1014
 
922
1015
  if ( extension.specularColorTexture !== undefined ) {
923
1016
 
924
- pending.push( parser.assignTexture( materialParams, 'specularTintMap', extension.specularColorTexture ).then( function ( texture ) {
1017
+ pending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture ).then( function ( texture ) {
925
1018
 
926
1019
  texture.encoding = sRGBEncoding;
927
1020
 
@@ -1352,7 +1445,7 @@ class GLTFTextureTransformExtension {
1352
1445
  /**
1353
1446
  * Specular-Glossiness Extension
1354
1447
  *
1355
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness
1448
+ * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness
1356
1449
  */
1357
1450
 
1358
1451
  /**
@@ -1887,34 +1980,6 @@ const ALPHA_MODES = {
1887
1980
  BLEND: 'BLEND'
1888
1981
  };
1889
1982
 
1890
- /* UTILITY FUNCTIONS */
1891
-
1892
- function resolveURL( url, path ) {
1893
-
1894
- // Invalid URL
1895
- if ( typeof url !== 'string' || url === '' ) return '';
1896
-
1897
- // Host Relative URL
1898
- if ( /^https?:\/\//i.test( path ) && /^\//.test( url ) ) {
1899
-
1900
- path = path.replace( /(^https?:\/\/[^\/]+).*/i, '$1' );
1901
-
1902
- }
1903
-
1904
- // Absolute URL http://,https://,//
1905
- if ( /^(https?:)?\/\//i.test( url ) ) return url;
1906
-
1907
- // Data URI
1908
- if ( /^data:.*,.*$/i.test( url ) ) return url;
1909
-
1910
- // Blob URL
1911
- if ( /^blob:.*$/i.test( url ) ) return url;
1912
-
1913
- // Relative URL
1914
- return path + url;
1915
-
1916
- }
1917
-
1918
1983
  /**
1919
1984
  * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material
1920
1985
  */
@@ -2188,7 +2253,7 @@ class GLTFParser {
2188
2253
 
2189
2254
  // Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the
2190
2255
  // expensive work of uploading a texture to the GPU off the main thread.
2191
- if ( typeof createImageBitmap !== 'undefined' && /Firefox/.test( navigator.userAgent ) === false ) {
2256
+ if ( typeof createImageBitmap !== 'undefined' && /Firefox|Safari/.test( navigator.userAgent ) === false ) {
2192
2257
 
2193
2258
  this.textureLoader = new ImageBitmapLoader( this.options.manager );
2194
2259
 
@@ -2574,7 +2639,7 @@ class GLTFParser {
2574
2639
 
2575
2640
  return new Promise( function ( resolve, reject ) {
2576
2641
 
2577
- loader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {
2642
+ loader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {
2578
2643
 
2579
2644
  reject( new Error( 'THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".' ) );
2580
2645
 
@@ -2820,7 +2885,7 @@ class GLTFParser {
2820
2885
 
2821
2886
  }
2822
2887
 
2823
- loader.load( resolveURL( sourceURI, options.path ), onLoad, undefined, reject );
2888
+ loader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );
2824
2889
 
2825
2890
  } );
2826
2891
 
@@ -3590,10 +3655,9 @@ class GLTFParser {
3590
3655
 
3591
3656
  if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
3592
3657
 
3593
- // Node may be a Group (glTF mesh with several primitives) or a Mesh.
3594
3658
  node.traverse( function ( object ) {
3595
3659
 
3596
- if ( object.isMesh === true && object.morphTargetInfluences ) {
3660
+ if ( object.morphTargetInfluences ) {
3597
3661
 
3598
3662
  targetNames.push( object.name ? object.name : object.uuid );
3599
3663
 
@@ -7,11 +7,7 @@ import {
7
7
  LinearEncoding,
8
8
  LinearFilter,
9
9
  Loader,
10
- NearestFilter,
11
- RGBAFormat,
12
- RGBEEncoding,
13
- RGBFormat,
14
- UnsignedByteType
10
+ RGBFormat
15
11
  } from 'three';
16
12
  import { RGBELoader } from '../loaders/RGBELoader.js';
17
13
 
@@ -47,15 +43,6 @@ class HDRCubeTextureLoader extends Loader {
47
43
 
48
44
  switch ( texture.type ) {
49
45
 
50
- case UnsignedByteType:
51
-
52
- texture.encoding = RGBEEncoding;
53
- texture.format = RGBAFormat;
54
- texture.minFilter = NearestFilter;
55
- texture.magFilter = NearestFilter;
56
- texture.generateMipmaps = false;
57
- break;
58
-
59
46
  case FloatType:
60
47
 
61
48
  texture.encoding = LinearEncoding;
@@ -37,6 +37,8 @@ const KTX2TransferSRGB = 2;
37
37
  const KTX2_ALPHA_PREMULTIPLIED = 1;
38
38
  const _taskCache = new WeakMap();
39
39
 
40
+ let _activeLoaders = 0;
41
+
40
42
  class KTX2Loader extends Loader {
41
43
 
42
44
  constructor( manager ) {
@@ -92,6 +94,14 @@ class KTX2Loader extends Loader {
92
94
  || renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' )
93
95
  };
94
96
 
97
+
98
+ if ( renderer.capabilities.isWebGL2 ) {
99
+
100
+ // https://github.com/mrdoob/three.js/pull/22928
101
+ this.workerConfig.etc1Supported = false;
102
+
103
+ }
104
+
95
105
  return this;
96
106
 
97
107
  }
@@ -154,6 +164,21 @@ class KTX2Loader extends Loader {
154
164
 
155
165
  } );
156
166
 
167
+ if ( _activeLoaders > 0 ) {
168
+
169
+ // Each instance loads a transcoder and allocates workers, increasing network and memory cost.
170
+
171
+ console.warn(
172
+
173
+ 'THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues.'
174
+ + ' Use a single KTX2Loader instance, or call .dispose() on old instances.'
175
+
176
+ );
177
+
178
+ }
179
+
180
+ _activeLoaders ++;
181
+
157
182
  }
158
183
 
159
184
  return this.transcoderPending;
@@ -248,6 +273,8 @@ class KTX2Loader extends Loader {
248
273
  URL.revokeObjectURL( this.workerSourceURL );
249
274
  this.workerPool.dispose();
250
275
 
276
+ _activeLoaders --;
277
+
251
278
  return this;
252
279
 
253
280
  }
@@ -500,8 +527,8 @@ KTX2Loader.BasisWorker = function () {
500
527
  {
501
528
  if: 'etc1Supported',
502
529
  basisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],
503
- transcoderFormat: [ TranscoderFormat.ETC1, TranscoderFormat.ETC1 ],
504
- engineFormat: [ EngineFormat.RGB_ETC1_Format, EngineFormat.RGB_ETC1_Format ],
530
+ transcoderFormat: [ TranscoderFormat.ETC1 ],
531
+ engineFormat: [ EngineFormat.RGB_ETC1_Format ],
505
532
  priorityETC1S: 2,
506
533
  priorityUASTC: 4,
507
534
  needsPowerOfTwo: false,
@@ -541,6 +568,7 @@ KTX2Loader.BasisWorker = function () {
541
568
 
542
569
  if ( ! config[ opt.if ] ) continue;
543
570
  if ( ! opt.basisFormat.includes( basisFormat ) ) continue;
571
+ if ( hasAlpha && opt.transcoderFormat.length < 2 ) continue;
544
572
  if ( opt.needsPowerOfTwo && ! ( isPowerOfTwo( width ) && isPowerOfTwo( height ) ) ) continue;
545
573
 
546
574
  transcoderFormat = opt.transcoderFormat[ hasAlpha ? 1 : 0 ];
@@ -6,7 +6,7 @@ import {
6
6
  * for description see https://www.khronos.org/opengles/sdk/tools/KTX/
7
7
  * for file layout see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
8
8
  *
9
- * ported from https://github.com/BabylonJS/Babylon.js/blob/master/src/Tools/babylon.khronosTextureContainer.ts
9
+ * ported from https://github.com/BabylonJS/Babylon.js/blob/master/src/Misc/khronosTextureContainer.ts
10
10
  */
11
11
 
12
12
 
@@ -9,7 +9,6 @@ import {
9
9
  Loader,
10
10
  Matrix4,
11
11
  Mesh,
12
- MeshPhongMaterial,
13
12
  MeshStandardMaterial,
14
13
  ShaderMaterial,
15
14
  UniformsLib,
@@ -967,13 +966,15 @@ class LDrawLoader extends Loader {
967
966
  mainEdgeColourCode: parentScope ? parentScope.mainEdgeColourCode : '24',
968
967
  currentMatrix: new Matrix4(),
969
968
  matrix: new Matrix4(),
969
+ type: 'Model',
970
+ groupObject: null,
970
971
 
971
972
  // If false, it is a root material scope previous to parse
972
973
  isFromParse: true,
973
974
 
974
- faces: null,
975
- lineSegments: null,
976
- conditionalSegments: null,
975
+ faces: [],
976
+ lineSegments: [],
977
+ conditionalSegments: [],
977
978
  totalFaces: 0,
978
979
 
979
980
  // If true, this object is the start of a construction step
@@ -1200,14 +1201,8 @@ class LDrawLoader extends Loader {
1200
1201
 
1201
1202
  case FINISH_TYPE_PEARLESCENT:
1202
1203
 
1203
- // Try to imitate pearlescency by setting the specular to the complementary of the color, and low shininess
1204
- const specular = new Color( colour );
1205
- const hsl = specular.getHSL( { h: 0, s: 0, l: 0 } );
1206
- hsl.h = ( hsl.h + 0.5 ) % 1;
1207
- hsl.l = Math.min( 1, hsl.l + ( 1 - hsl.l ) * 0.7 );
1208
- specular.setHSL( hsl.h, hsl.s, hsl.l );
1209
-
1210
- material = new MeshPhongMaterial( { color: colour, specular: specular, shininess: 10, reflectivity: 0.3 } );
1204
+ // Try to imitate pearlescency by making the surface glossy
1205
+ material = new MeshStandardMaterial( { color: colour, roughness: 0.3, metalness: 0.25 } );
1211
1206
  break;
1212
1207
 
1213
1208
  case FINISH_TYPE_CHROME:
@@ -1443,20 +1438,8 @@ class LDrawLoader extends Loader {
1443
1438
 
1444
1439
  type = lp.getToken();
1445
1440
 
1446
- currentParseScope.faces = [];
1447
- currentParseScope.lineSegments = [];
1448
- currentParseScope.conditionalSegments = [];
1449
1441
  currentParseScope.type = type;
1450
1442
 
1451
- const isRoot = ! parentParseScope.isFromParse;
1452
- if ( isRoot || scope.separateObjects && ! isPrimitiveType( type ) ) {
1453
-
1454
- currentParseScope.groupObject = new Group();
1455
-
1456
- currentParseScope.groupObject.userData.startingConstructionStep = currentParseScope.startingConstructionStep;
1457
-
1458
- }
1459
-
1460
1443
  // If the scale of the object is negated then the triangle winding order
1461
1444
  // needs to be flipped.
1462
1445
  if (
@@ -1826,6 +1809,14 @@ class LDrawLoader extends Loader {
1826
1809
  currentParseScope.numSubobjects = subobjects.length;
1827
1810
  currentParseScope.subobjectIndex = 0;
1828
1811
 
1812
+ const isRoot = ! parentParseScope.isFromParse;
1813
+ if ( isRoot || scope.separateObjects && ! isPrimitiveType( type ) ) {
1814
+
1815
+ currentParseScope.groupObject = new Group();
1816
+ currentParseScope.groupObject.userData.startingConstructionStep = currentParseScope.startingConstructionStep;
1817
+
1818
+ }
1819
+
1829
1820
  }
1830
1821
 
1831
1822
  computeConstructionSteps( model ) {
@@ -1856,6 +1847,13 @@ class LDrawLoader extends Loader {
1856
1847
 
1857
1848
  finalizeObject( subobjectParseScope ) {
1858
1849
 
1850
+ // fail gracefully if an object could not be loaded
1851
+ if ( subobjectParseScope === null ) {
1852
+
1853
+ return;
1854
+
1855
+ }
1856
+
1859
1857
  const parentParseScope = subobjectParseScope.parentScope;
1860
1858
 
1861
1859
  // Smooth the normals if this is a part or if this is a case where the subpart
@@ -2045,6 +2043,7 @@ class LDrawLoader extends Loader {
2045
2043
  } ).catch( function () {
2046
2044
 
2047
2045
  console.warn( 'LDrawLoader: Subobject "' + subobject.fileName + '" could not be found.' );
2046
+ return null;
2048
2047
 
2049
2048
  } );
2050
2049
 
@@ -118,6 +118,7 @@ export class LUT3dlLoader extends Loader {
118
118
  texture.wrapS = ClampToEdgeWrapping;
119
119
  texture.wrapT = ClampToEdgeWrapping;
120
120
  texture.generateMipmaps = false;
121
+ texture.needsUpdate = true;
121
122
 
122
123
  const texture3D = new DataTexture3D();
123
124
  texture3D.image.data = data;
@@ -132,6 +133,7 @@ export class LUT3dlLoader extends Loader {
132
133
  texture3D.wrapT = ClampToEdgeWrapping;
133
134
  texture3D.wrapR = ClampToEdgeWrapping;
134
135
  texture3D.generateMipmaps = false;
136
+ texture3D.needsUpdate = true;
135
137
 
136
138
  return {
137
139
  size,
@@ -124,6 +124,7 @@ export class LUTCubeLoader extends Loader {
124
124
  texture.wrapS = ClampToEdgeWrapping;
125
125
  texture.wrapT = ClampToEdgeWrapping;
126
126
  texture.generateMipmaps = false;
127
+ texture.needsUpdate = true;
127
128
 
128
129
  const texture3D = new DataTexture3D();
129
130
  texture3D.image.data = data;
@@ -138,6 +139,7 @@ export class LUTCubeLoader extends Loader {
138
139
  texture3D.wrapT = ClampToEdgeWrapping;
139
140
  texture3D.wrapR = ClampToEdgeWrapping;
140
141
  texture3D.generateMipmaps = false;
142
+ texture3D.needsUpdate = true;
141
143
 
142
144
  return {
143
145
  title,
@@ -4,10 +4,10 @@
4
4
  * @desc Load files in LWO3 and LWO2 format on Three.js
5
5
  *
6
6
  * LWO3 format specification:
7
- * http://static.lightwave3d.com/sdk/2018/html/filefmts/lwo3.html
7
+ * https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo3.html
8
8
  *
9
9
  * LWO2 format specification:
10
- * http://static.lightwave3d.com/sdk/2018/html/filefmts/lwo2.html
10
+ * https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo2.html
11
11
  *
12
12
  **/
13
13
 
@@ -465,7 +465,7 @@ class MaterialParser {
465
465
  break;
466
466
  case 'Roughness':
467
467
  maps.roughnessMap = texture;
468
- maps.roughness = 0.5;
468
+ maps.roughness = 1;
469
469
  break;
470
470
  case 'Specular':
471
471
  maps.specularMap = texture;
@@ -480,7 +480,7 @@ class MaterialParser {
480
480
  break;
481
481
  case 'Metallic':
482
482
  maps.metalnessMap = texture;
483
- maps.metalness = 0.5;
483
+ maps.metalness = 1;
484
484
  break;
485
485
  case 'Transparency':
486
486
  case 'Alpha':
@@ -591,7 +591,7 @@ class MaterialParser {
591
591
 
592
592
  if ( attributes[ 'Bump Height' ] ) params.bumpScale = attributes[ 'Bump Height' ].value * 0.1;
593
593
 
594
- if ( attributes[ 'Refraction Index' ] ) params.refractionRatio = 1 / attributes[ 'Refraction Index' ].value;
594
+ if ( attributes[ 'Refraction Index' ] ) params.refractionRatio = 0.98 / attributes[ 'Refraction Index' ].value;
595
595
 
596
596
  this.parsePhysicalAttributes( params, attributes, maps );
597
597
  this.parseStandardAttributes( params, attributes, maps );
@@ -707,10 +707,12 @@ class MaterialParser {
707
707
 
708
708
  if ( attributes.metalness !== undefined ) {
709
709
 
710
- delete attributes.metalness;
710
+ attributes.metalness = 1; // For most transparent materials metalness should be set to 1 if not otherwise defined. If set to 0 no refraction will be visible
711
711
 
712
712
  }
713
713
 
714
+ attributes.opacity = 1; // transparency fades out refraction, forcing opacity to 1 ensures a closer visual match to the material in Lightwave.
715
+
714
716
  } else envMap.mapping = EquirectangularReflectionMapping;
715
717
 
716
718
  maps.envMap = envMap;