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
@@ -23,6 +23,11 @@
23
23
 
24
24
  return new GLTFTextureWebPExtension( parser );
25
25
 
26
+ } );
27
+ this.register( function ( parser ) {
28
+
29
+ return new GLTFMaterialsSheenExtension( parser );
30
+
26
31
  } );
27
32
  this.register( function ( parser ) {
28
33
 
@@ -291,6 +296,17 @@
291
296
 
292
297
  }
293
298
 
299
+ parseAsync( data, path ) {
300
+
301
+ const scope = this;
302
+ return new Promise( function ( resolve, reject ) {
303
+
304
+ scope.parse( data, path, resolve, reject );
305
+
306
+ } );
307
+
308
+ }
309
+
294
310
  }
295
311
  /* GLTFREGISTRY */
296
312
 
@@ -336,6 +352,7 @@
336
352
  KHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',
337
353
  KHR_MATERIALS_IOR: 'KHR_materials_ior',
338
354
  KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',
355
+ KHR_MATERIALS_SHEEN: 'KHR_materials_sheen',
339
356
  KHR_MATERIALS_SPECULAR: 'KHR_materials_specular',
340
357
  KHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',
341
358
  KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',
@@ -592,6 +609,77 @@
592
609
 
593
610
  }
594
611
 
612
+ }
613
+ /**
614
+ * Sheen Materials Extension
615
+ *
616
+ * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen
617
+ */
618
+
619
+
620
+ class GLTFMaterialsSheenExtension {
621
+
622
+ constructor( parser ) {
623
+
624
+ this.parser = parser;
625
+ this.name = EXTENSIONS.KHR_MATERIALS_SHEEN;
626
+
627
+ }
628
+
629
+ getMaterialType( materialIndex ) {
630
+
631
+ const parser = this.parser;
632
+ const materialDef = parser.json.materials[ materialIndex ];
633
+ if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
634
+ return THREE.MeshPhysicalMaterial;
635
+
636
+ }
637
+
638
+ extendMaterialParams( materialIndex, materialParams ) {
639
+
640
+ const parser = this.parser;
641
+ const materialDef = parser.json.materials[ materialIndex ];
642
+
643
+ if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
644
+
645
+ return Promise.resolve();
646
+
647
+ }
648
+
649
+ const pending = [];
650
+ materialParams.sheenColor = new THREE.Color( 0, 0, 0 );
651
+ materialParams.sheenRoughness = 0;
652
+ materialParams.sheen = 1;
653
+ const extension = materialDef.extensions[ this.name ];
654
+
655
+ if ( extension.sheenColorFactor !== undefined ) {
656
+
657
+ materialParams.sheenColor.fromArray( extension.sheenColorFactor );
658
+
659
+ }
660
+
661
+ if ( extension.sheenRoughnessFactor !== undefined ) {
662
+
663
+ materialParams.sheenRoughness = extension.sheenRoughnessFactor;
664
+
665
+ }
666
+
667
+ if ( extension.sheenColorTexture !== undefined ) {
668
+
669
+ pending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture ) );
670
+
671
+ }
672
+
673
+ if ( extension.sheenRoughnessTexture !== undefined ) {
674
+
675
+ pending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );
676
+
677
+ }
678
+
679
+ return Promise.all( pending );
680
+
681
+ }
682
+
595
683
  }
596
684
  /**
597
685
  * Transmission Materials Extension
@@ -698,7 +786,7 @@
698
786
 
699
787
  materialParams.attenuationDistance = extension.attenuationDistance || 0;
700
788
  const colorArray = extension.attenuationColor || [ 1, 1, 1 ];
701
- materialParams.attenuationTint = new THREE.Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
789
+ materialParams.attenuationColor = new THREE.Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
702
790
  return Promise.all( pending );
703
791
 
704
792
  }
@@ -794,11 +882,11 @@
794
882
  }
795
883
 
796
884
  const colorArray = extension.specularColorFactor || [ 1, 1, 1 ];
797
- materialParams.specularTint = new THREE.Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
885
+ materialParams.specularColor = new THREE.Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );
798
886
 
799
887
  if ( extension.specularColorTexture !== undefined ) {
800
888
 
801
- pending.push( parser.assignTexture( materialParams, 'specularTintMap', extension.specularColorTexture ).then( function ( texture ) {
889
+ pending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture ).then( function ( texture ) {
802
890
 
803
891
  texture.encoding = THREE.sRGBEncoding;
804
892
 
@@ -1222,7 +1310,7 @@
1222
1310
  /**
1223
1311
  * Specular-Glossiness Extension
1224
1312
  *
1225
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness
1313
+ * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness
1226
1314
  */
1227
1315
 
1228
1316
  /**
@@ -1658,34 +1746,10 @@
1658
1746
  MASK: 'MASK',
1659
1747
  BLEND: 'BLEND'
1660
1748
  };
1661
- /* UTILITY FUNCTIONS */
1662
-
1663
- function resolveURL( url, path ) {
1664
-
1665
- // Invalid URL
1666
- if ( typeof url !== 'string' || url === '' ) return ''; // Host Relative URL
1667
-
1668
- if ( /^https?:\/\//i.test( path ) && /^\//.test( url ) ) {
1669
-
1670
- path = path.replace( /(^https?:\/\/[^\/]+).*/i, '$1' );
1671
-
1672
- } // Absolute URL http://,https://,//
1673
-
1674
-
1675
- if ( /^(https?:)?\/\//i.test( url ) ) return url; // Data URI
1676
-
1677
- if ( /^data:.*,.*$/i.test( url ) ) return url; // Blob URL
1678
-
1679
- if ( /^blob:.*$/i.test( url ) ) return url; // Relative URL
1680
-
1681
- return path + url;
1682
-
1683
- }
1684
1749
  /**
1685
1750
  * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material
1686
1751
  */
1687
1752
 
1688
-
1689
1753
  function createDefaultMaterial( cache ) {
1690
1754
 
1691
1755
  if ( cache[ 'DefaultMaterial' ] === undefined ) {
@@ -1942,7 +2006,7 @@
1942
2006
  this.nodeNamesUsed = {}; // Use an THREE.ImageBitmapLoader if imageBitmaps are supported. Moves much of the
1943
2007
  // expensive work of uploading a texture to the GPU off the main thread.
1944
2008
 
1945
- if ( typeof createImageBitmap !== 'undefined' && /Firefox/.test( navigator.userAgent ) === false ) {
2009
+ if ( typeof createImageBitmap !== 'undefined' && /Firefox|Safari/.test( navigator.userAgent ) === false ) {
1946
2010
 
1947
2011
  this.textureLoader = new THREE.ImageBitmapLoader( this.options.manager );
1948
2012
 
@@ -2312,7 +2376,7 @@
2312
2376
  const options = this.options;
2313
2377
  return new Promise( function ( resolve, reject ) {
2314
2378
 
2315
- loader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {
2379
+ loader.load( THREE.LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {
2316
2380
 
2317
2381
  reject( new Error( 'THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".' ) );
2318
2382
 
@@ -2547,7 +2611,7 @@
2547
2611
 
2548
2612
  }
2549
2613
 
2550
- loader.load( resolveURL( sourceURI, options.path ), onLoad, undefined, reject );
2614
+ loader.load( THREE.LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );
2551
2615
 
2552
2616
  } );
2553
2617
 
@@ -3255,10 +3319,9 @@
3255
3319
 
3256
3320
  if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
3257
3321
 
3258
- // Node may be a THREE.Group (glTF mesh with several primitives) or a THREE.Mesh.
3259
3322
  node.traverse( function ( object ) {
3260
3323
 
3261
- if ( object.isMesh === true && object.morphTargetInfluences ) {
3324
+ if ( object.morphTargetInfluences ) {
3262
3325
 
3263
3326
  targetNames.push( object.name ? object.name : object.uuid );
3264
3327
 
@@ -28,14 +28,6 @@
28
28
 
29
29
  switch ( texture.type ) {
30
30
 
31
- case THREE.UnsignedByteType:
32
- texture.encoding = THREE.RGBEEncoding;
33
- texture.format = THREE.RGBAFormat;
34
- texture.minFilter = THREE.NearestFilter;
35
- texture.magFilter = THREE.NearestFilter;
36
- texture.generateMipmaps = false;
37
- break;
38
-
39
31
  case THREE.FloatType:
40
32
  texture.encoding = THREE.LinearEncoding;
41
33
  texture.format = THREE.RGBFormat;
@@ -17,6 +17,8 @@
17
17
 
18
18
  const _taskCache = new WeakMap();
19
19
 
20
+ let _activeLoaders = 0;
21
+
20
22
  class KTX2Loader extends THREE.Loader {
21
23
 
22
24
  constructor( manager ) {
@@ -61,6 +63,14 @@
61
63
  bptcSupported: renderer.extensions.has( 'EXT_texture_compression_bptc' ),
62
64
  pvrtcSupported: renderer.extensions.has( 'WEBGL_compressed_texture_pvrtc' ) || renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' )
63
65
  };
66
+
67
+ if ( renderer.capabilities.isWebGL2 ) {
68
+
69
+ // https://github.com/mrdoob/three.js/pull/22928
70
+ this.workerConfig.etc1Supported = false;
71
+
72
+ }
73
+
64
74
  return this;
65
75
 
66
76
  }
@@ -109,6 +119,15 @@
109
119
 
110
120
  } );
111
121
 
122
+ if ( _activeLoaders > 0 ) {
123
+
124
+ // Each instance loads a transcoder and allocates workers, increasing network and memory cost.
125
+ console.warn( 'THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues.' + ' Use a single KTX2Loader instance, or call .dispose() on old instances.' );
126
+
127
+ }
128
+
129
+ _activeLoaders ++;
130
+
112
131
  }
113
132
 
114
133
  return this.transcoderPending;
@@ -207,6 +226,7 @@
207
226
 
208
227
  URL.revokeObjectURL( this.workerSourceURL );
209
228
  this.workerPool.dispose();
229
+ _activeLoaders --;
210
230
  return this;
211
231
 
212
232
  }
@@ -475,8 +495,8 @@
475
495
  }, {
476
496
  if: 'etc1Supported',
477
497
  basisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],
478
- transcoderFormat: [ TranscoderFormat.ETC1, TranscoderFormat.ETC1 ],
479
- engineFormat: [ EngineFormat.RGB_ETC1_Format, EngineFormat.RGB_ETC1_Format ],
498
+ transcoderFormat: [ TranscoderFormat.ETC1 ],
499
+ engineFormat: [ EngineFormat.RGB_ETC1_Format ],
480
500
  priorityETC1S: 2,
481
501
  priorityUASTC: 4,
482
502
  needsPowerOfTwo: false
@@ -511,6 +531,7 @@
511
531
  const opt = options[ i ];
512
532
  if ( ! config[ opt.if ] ) continue;
513
533
  if ( ! opt.basisFormat.includes( basisFormat ) ) continue;
534
+ if ( hasAlpha && opt.transcoderFormat.length < 2 ) continue;
514
535
  if ( opt.needsPowerOfTwo && ! ( isPowerOfTwo( width ) && isPowerOfTwo( height ) ) ) continue;
515
536
  transcoderFormat = opt.transcoderFormat[ hasAlpha ? 1 : 0 ];
516
537
  engineFormat = opt.engineFormat[ hasAlpha ? 1 : 0 ];
@@ -4,7 +4,7 @@
4
4
  * for description see https://www.khronos.org/opengles/sdk/tools/KTX/
5
5
  * for file layout see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
6
6
  *
7
- * ported from https://github.com/BabylonJS/Babylon.js/blob/master/src/Tools/babylon.khronosTextureContainer.ts
7
+ * ported from https://github.com/BabylonJS/Babylon.js/blob/master/src/Misc/khronosTextureContainer.ts
8
8
  */
9
9
 
10
10
  class KTXLoader extends THREE.CompressedTextureLoader {
@@ -916,11 +916,13 @@
916
916
  mainEdgeColourCode: parentScope ? parentScope.mainEdgeColourCode : '24',
917
917
  currentMatrix: new THREE.Matrix4(),
918
918
  matrix: new THREE.Matrix4(),
919
+ type: 'Model',
920
+ groupObject: null,
919
921
  // If false, it is a root material scope previous to parse
920
922
  isFromParse: true,
921
- faces: null,
922
- lineSegments: null,
923
- conditionalSegments: null,
923
+ faces: [],
924
+ lineSegments: [],
925
+ conditionalSegments: [],
924
926
  totalFaces: 0,
925
927
  // If true, this object is the start of a construction step
926
928
  startingConstructionStep: false
@@ -1135,21 +1137,11 @@
1135
1137
  break;
1136
1138
 
1137
1139
  case FINISH_TYPE_PEARLESCENT:
1138
- // Try to imitate pearlescency by setting the specular to the complementary of the color, and low shininess
1139
- const specular = new THREE.Color( colour );
1140
- const hsl = specular.getHSL( {
1141
- h: 0,
1142
- s: 0,
1143
- l: 0
1144
- } );
1145
- hsl.h = ( hsl.h + 0.5 ) % 1;
1146
- hsl.l = Math.min( 1, hsl.l + ( 1 - hsl.l ) * 0.7 );
1147
- specular.setHSL( hsl.h, hsl.s, hsl.l );
1148
- material = new THREE.MeshPhongMaterial( {
1140
+ // Try to imitate pearlescency by making the surface glossy
1141
+ material = new THREE.MeshStandardMaterial( {
1149
1142
  color: colour,
1150
- specular: specular,
1151
- shininess: 10,
1152
- reflectivity: 0.3
1143
+ roughness: 0.3,
1144
+ metalness: 0.25
1153
1145
  } );
1154
1146
  break;
1155
1147
 
@@ -1375,21 +1367,9 @@
1375
1367
 
1376
1368
  case '!LDRAW_ORG':
1377
1369
  type = lp.getToken();
1378
- currentParseScope.faces = [];
1379
- currentParseScope.lineSegments = [];
1380
- currentParseScope.conditionalSegments = [];
1381
- currentParseScope.type = type;
1382
- const isRoot = ! parentParseScope.isFromParse;
1383
-
1384
- if ( isRoot || scope.separateObjects && ! isPrimitiveType( type ) ) {
1385
-
1386
- currentParseScope.groupObject = new THREE.Group();
1387
- currentParseScope.groupObject.userData.startingConstructionStep = currentParseScope.startingConstructionStep;
1388
-
1389
- } // If the scale of the object is negated then the triangle winding order
1370
+ currentParseScope.type = type; // If the scale of the object is negated then the triangle winding order
1390
1371
  // needs to be flipped.
1391
1372
 
1392
-
1393
1373
  if ( currentParseScope.matrix.determinant() < 0 && ( scope.separateObjects && isPrimitiveType( type ) || ! scope.separateObjects ) ) {
1394
1374
 
1395
1375
  currentParseScope.inverted = ! currentParseScope.inverted;
@@ -1709,6 +1689,14 @@
1709
1689
  currentParseScope.subobjects = subobjects;
1710
1690
  currentParseScope.numSubobjects = subobjects.length;
1711
1691
  currentParseScope.subobjectIndex = 0;
1692
+ const isRoot = ! parentParseScope.isFromParse;
1693
+
1694
+ if ( isRoot || scope.separateObjects && ! isPrimitiveType( type ) ) {
1695
+
1696
+ currentParseScope.groupObject = new THREE.Group();
1697
+ currentParseScope.groupObject.userData.startingConstructionStep = currentParseScope.startingConstructionStep;
1698
+
1699
+ }
1712
1700
 
1713
1701
  }
1714
1702
 
@@ -1737,6 +1725,13 @@
1737
1725
 
1738
1726
  finalizeObject( subobjectParseScope ) {
1739
1727
 
1728
+ // fail gracefully if an object could not be loaded
1729
+ if ( subobjectParseScope === null ) {
1730
+
1731
+ return;
1732
+
1733
+ }
1734
+
1740
1735
  const parentParseScope = subobjectParseScope.parentScope; // Smooth the normals if this is a part or if this is a case where the subpart
1741
1736
  // is added directly into the parent model (meaning it will never get smoothed by
1742
1737
  // being added to a part)
@@ -1919,6 +1914,7 @@
1919
1914
  } ).catch( function () {
1920
1915
 
1921
1916
  console.warn( 'LDrawLoader: Subobject "' + subobject.fileName + '" could not be found.' );
1917
+ return null;
1922
1918
 
1923
1919
  } );
1924
1920
 
@@ -102,6 +102,7 @@
102
102
  texture.wrapS = THREE.ClampToEdgeWrapping;
103
103
  texture.wrapT = THREE.ClampToEdgeWrapping;
104
104
  texture.generateMipmaps = false;
105
+ texture.needsUpdate = true;
105
106
  const texture3D = new THREE.DataTexture3D();
106
107
  texture3D.image.data = data;
107
108
  texture3D.image.width = size;
@@ -115,6 +116,7 @@
115
116
  texture3D.wrapT = THREE.ClampToEdgeWrapping;
116
117
  texture3D.wrapR = THREE.ClampToEdgeWrapping;
117
118
  texture3D.generateMipmaps = false;
119
+ texture3D.needsUpdate = true;
118
120
  return {
119
121
  size,
120
122
  texture,
@@ -108,6 +108,7 @@
108
108
  texture.wrapS = THREE.ClampToEdgeWrapping;
109
109
  texture.wrapT = THREE.ClampToEdgeWrapping;
110
110
  texture.generateMipmaps = false;
111
+ texture.needsUpdate = true;
111
112
  const texture3D = new THREE.DataTexture3D();
112
113
  texture3D.image.data = data;
113
114
  texture3D.image.width = size;
@@ -121,6 +122,7 @@
121
122
  texture3D.wrapT = THREE.ClampToEdgeWrapping;
122
123
  texture3D.wrapR = THREE.ClampToEdgeWrapping;
123
124
  texture3D.generateMipmaps = false;
125
+ texture3D.needsUpdate = true;
124
126
  return {
125
127
  title,
126
128
  size,
@@ -6,10 +6,10 @@
6
6
  * @desc Load files in LWO3 and LWO2 format on Three.js
7
7
  *
8
8
  * LWO3 format specification:
9
- * http://static.lightwave3d.com/sdk/2018/html/filefmts/lwo3.html
9
+ * https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo3.html
10
10
  *
11
11
  * LWO2 format specification:
12
- * http://static.lightwave3d.com/sdk/2018/html/filefmts/lwo2.html
12
+ * https://static.lightwave3d.com/sdk/2019/html/filefmts/lwo2.html
13
13
  *
14
14
  **/
15
15
 
@@ -391,7 +391,7 @@
391
391
 
392
392
  case 'Roughness':
393
393
  maps.roughnessMap = texture;
394
- maps.roughness = 0.5;
394
+ maps.roughness = 1;
395
395
  break;
396
396
 
397
397
  case 'Specular':
@@ -410,7 +410,7 @@
410
410
 
411
411
  case 'Metallic':
412
412
  maps.metalnessMap = texture;
413
- maps.metalness = 0.5;
413
+ maps.metalness = 1;
414
414
  break;
415
415
 
416
416
  case 'Transparency':
@@ -525,7 +525,7 @@
525
525
  }
526
526
 
527
527
  if ( attributes[ 'Bump Height' ] ) params.bumpScale = attributes[ 'Bump Height' ].value * 0.1;
528
- if ( attributes[ 'Refraction Index' ] ) params.refractionRatio = 1 / attributes[ 'Refraction Index' ].value;
528
+ if ( attributes[ 'Refraction Index' ] ) params.refractionRatio = 0.98 / attributes[ 'Refraction Index' ].value;
529
529
  this.parsePhysicalAttributes( params, attributes, maps );
530
530
  this.parseStandardAttributes( params, attributes, maps );
531
531
  this.parsePhongAttributes( params, attributes, maps );
@@ -639,10 +639,12 @@
639
639
 
640
640
  if ( attributes.metalness !== undefined ) {
641
641
 
642
- delete attributes.metalness;
642
+ 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
643
643
 
644
644
  }
645
645
 
646
+ attributes.opacity = 1; // transparency fades out refraction, forcing opacity to 1 ensures a closer visual match to the material in Lightwave.
647
+
646
648
  } else envMap.mapping = THREE.EquirectangularReflectionMapping;
647
649
 
648
650
  maps.envMap = envMap;