super-three 0.133.4 → 0.136.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.js +2285 -1983
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +5983 -5358
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  6. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  7. package/examples/fonts/open-sans/open-sans.css +9 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  12. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  13. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  14. package/examples/js/animation/CCDIKSolver.js +0 -1
  15. package/examples/js/animation/MMDPhysics.js +2 -4
  16. package/examples/js/cameras/CinematicCamera.js +2 -7
  17. package/examples/js/controls/ArcballControls.js +99 -72
  18. package/examples/js/controls/DragControls.js +7 -0
  19. package/examples/js/controls/OrbitControls.js +5 -36
  20. package/examples/js/controls/TrackballControls.js +3 -2
  21. package/examples/js/controls/TransformControls.js +24 -1
  22. package/examples/js/csm/CSM.js +2 -2
  23. package/examples/js/csm/CSMFrustum.js +133 -0
  24. package/examples/js/curves/CurveExtras.js +0 -2
  25. package/examples/js/effects/AsciiEffect.js +2 -9
  26. package/examples/js/exporters/GLTFExporter.js +148 -64
  27. package/examples/js/exporters/MMDExporter.js +1 -1
  28. package/examples/js/exporters/USDZExporter.js +45 -26
  29. package/examples/js/geometries/ConvexGeometry.js +1 -1
  30. package/examples/js/geometries/TeapotGeometry.js +0 -1
  31. package/examples/js/interactive/SelectionBox.js +2 -0
  32. package/examples/js/interactive/SelectionHelper.js +22 -7
  33. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  34. package/examples/js/lines/LineMaterial.js +58 -20
  35. package/examples/js/lines/LineSegments2.js +29 -24
  36. package/examples/js/loaders/3DMLoader.js +24 -11
  37. package/examples/js/loaders/3MFLoader.js +2 -2
  38. package/examples/js/loaders/AMFLoader.js +0 -2
  39. package/examples/js/loaders/BasisTextureLoader.js +1 -0
  40. package/examples/js/loaders/ColladaLoader.js +61 -4
  41. package/examples/js/loaders/EXRLoader.js +201 -272
  42. package/examples/js/loaders/FBXLoader.js +4 -5
  43. package/examples/js/loaders/GLTFLoader.js +98 -35
  44. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
  45. package/examples/js/loaders/KTX2Loader.js +23 -2
  46. package/examples/js/loaders/KTXLoader.js +1 -1
  47. package/examples/js/loaders/LDrawLoader.js +1169 -901
  48. package/examples/js/loaders/LUT3dlLoader.js +19 -10
  49. package/examples/js/loaders/LUTCubeLoader.js +5 -4
  50. package/examples/js/loaders/LWOLoader.js +8 -6
  51. package/examples/js/loaders/LogLuvLoader.js +766 -0
  52. package/examples/js/loaders/MMDLoader.js +0 -1
  53. package/examples/js/loaders/NRRDLoader.js +9 -2
  54. package/examples/js/loaders/OBJLoader.js +0 -2
  55. package/examples/js/loaders/PLYLoader.js +33 -8
  56. package/examples/js/loaders/RGBELoader.js +8 -22
  57. package/examples/js/loaders/RGBMLoader.js +56 -6
  58. package/examples/js/loaders/SVGLoader.js +12 -6
  59. package/examples/js/loaders/TDSLoader.js +237 -271
  60. package/examples/js/loaders/VOXLoader.js +1 -0
  61. package/examples/js/loaders/VRMLLoader.js +11 -22
  62. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  63. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  64. package/examples/js/math/ConvexHull.js +7 -13
  65. package/examples/js/math/ImprovedNoise.js +1 -1
  66. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  67. package/examples/js/misc/Volume.js +2 -2
  68. package/examples/js/modifiers/CurveModifier.js +8 -7
  69. package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
  70. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  71. package/examples/js/objects/Lensflare.js +2 -10
  72. package/examples/js/objects/MarchingCubes.js +42 -128
  73. package/examples/js/objects/Reflector.js +8 -13
  74. package/examples/js/objects/ReflectorForSSRPass.js +0 -10
  75. package/examples/js/objects/Refractor.js +8 -13
  76. package/examples/js/objects/Sky.js +1 -1
  77. package/examples/js/objects/Water.js +3 -15
  78. package/examples/js/objects/Water2.js +4 -7
  79. package/examples/js/postprocessing/GlitchPass.js +6 -5
  80. package/examples/js/postprocessing/SMAAPass.js +2 -9
  81. package/examples/js/postprocessing/SSAOPass.js +10 -21
  82. package/examples/js/postprocessing/SavePass.js +1 -5
  83. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  84. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  85. package/examples/js/shaders/ConvolutionShader.js +0 -1
  86. package/examples/js/shaders/DigitalGlitch.js +3 -3
  87. package/examples/js/shaders/FXAAShader.js +1 -1
  88. package/examples/js/shaders/FilmShader.js +1 -1
  89. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  90. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  91. package/examples/js/shaders/MMDToonShader.js +0 -1
  92. package/examples/js/shaders/SSAOShader.js +1 -1
  93. package/examples/js/shaders/SSRShader.js +1 -1
  94. package/examples/js/shaders/SSRrShader.js +1 -1
  95. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  96. package/examples/js/utils/GeometryUtils.js +1 -1
  97. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  98. package/examples/jsm/animation/MMDPhysics.js +1 -3
  99. package/examples/jsm/cameras/CinematicCamera.js +2 -5
  100. package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
  101. package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
  102. package/examples/jsm/controls/ArcballControls.js +80 -77
  103. package/examples/jsm/controls/DragControls.js +7 -0
  104. package/examples/jsm/controls/OrbitControls.js +9 -51
  105. package/examples/jsm/controls/TrackballControls.js +1 -1
  106. package/examples/jsm/controls/TransformControls.js +24 -1
  107. package/examples/jsm/csm/CSM.js +3 -3
  108. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  109. package/examples/jsm/curves/CurveExtras.js +0 -2
  110. package/examples/jsm/effects/AsciiEffect.js +2 -9
  111. package/examples/jsm/exporters/GLTFExporter.js +169 -99
  112. package/examples/jsm/exporters/MMDExporter.js +1 -1
  113. package/examples/jsm/exporters/USDZExporter.js +47 -26
  114. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  115. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  116. package/examples/jsm/interactive/SelectionBox.js +1 -0
  117. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  118. package/examples/jsm/libs/flow.module.js +3338 -0
  119. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  120. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  121. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  122. package/examples/jsm/lines/LineMaterial.js +59 -23
  123. package/examples/jsm/lines/LineSegments2.js +22 -18
  124. package/examples/jsm/loaders/3DMLoader.js +18 -12
  125. package/examples/jsm/loaders/3MFLoader.js +2 -2
  126. package/examples/jsm/loaders/AMFLoader.js +0 -2
  127. package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
  128. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  129. package/examples/jsm/loaders/EXRLoader.js +200 -306
  130. package/examples/jsm/loaders/FBXLoader.js +4 -5
  131. package/examples/jsm/loaders/GLTFLoader.js +102 -40
  132. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
  133. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  134. package/examples/jsm/loaders/KTXLoader.js +1 -1
  135. package/examples/jsm/loaders/LDrawLoader.js +1159 -898
  136. package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
  137. package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
  138. package/examples/jsm/loaders/LWOLoader.js +8 -6
  139. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  140. package/examples/jsm/loaders/MMDLoader.js +0 -1
  141. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  142. package/examples/jsm/loaders/OBJLoader.js +0 -2
  143. package/examples/jsm/loaders/PLYLoader.js +34 -8
  144. package/examples/jsm/loaders/RGBELoader.js +7 -28
  145. package/examples/jsm/loaders/RGBMLoader.js +62 -8
  146. package/examples/jsm/loaders/SVGLoader.js +15 -7
  147. package/examples/jsm/loaders/TDSLoader.js +236 -275
  148. package/examples/jsm/loaders/VOXLoader.js +1 -0
  149. package/examples/jsm/loaders/VRMLLoader.js +11 -23
  150. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  151. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  152. package/examples/jsm/math/ConvexHull.js +7 -13
  153. package/examples/jsm/math/ImprovedNoise.js +1 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  155. package/examples/jsm/misc/Volume.js +2 -2
  156. package/examples/jsm/modifiers/CurveModifier.js +9 -8
  157. package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
  158. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  159. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  160. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  161. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  162. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  163. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  164. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  165. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  166. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  167. package/examples/jsm/node-editor/examples/rim.json +1 -0
  168. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  169. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  170. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  171. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  172. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  173. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  174. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  175. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  176. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  177. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  178. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  179. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  180. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  181. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  182. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  183. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  184. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  185. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  186. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  187. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  188. package/examples/jsm/nodes/math/MathNode.js +12 -0
  189. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  190. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  191. package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
  192. package/examples/jsm/objects/Lensflare.js +5 -16
  193. package/examples/jsm/objects/MarchingCubes.js +46 -152
  194. package/examples/jsm/objects/Reflector.js +8 -16
  195. package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
  196. package/examples/jsm/objects/Refractor.js +8 -16
  197. package/examples/jsm/objects/Sky.js +1 -1
  198. package/examples/jsm/objects/Water.js +3 -18
  199. package/examples/jsm/objects/Water2.js +4 -8
  200. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  201. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  202. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  203. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  204. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  205. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  206. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  207. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  208. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  209. package/examples/jsm/postprocessing/GlitchPass.js +10 -7
  210. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  211. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  212. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  213. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  214. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  215. package/examples/jsm/postprocessing/SMAAPass.js +3 -12
  216. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  217. package/examples/jsm/postprocessing/SSAOPass.js +15 -26
  218. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  219. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  220. package/examples/jsm/postprocessing/SavePass.js +2 -4
  221. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  222. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  223. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  224. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  225. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  226. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  227. package/examples/jsm/renderers/nodes/Nodes.js +17 -13
  228. package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
  229. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  230. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  231. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  232. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  233. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  234. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  235. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  236. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  237. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  238. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  239. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  240. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  241. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  242. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  243. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  244. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  245. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  246. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  247. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  248. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  249. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  250. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  251. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  252. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  253. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  254. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  255. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  256. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
  257. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  258. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  259. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  260. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  261. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  262. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
  263. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  264. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  265. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  266. package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
  267. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  268. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  269. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  270. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  271. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  272. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  273. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  274. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  275. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  276. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  277. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  278. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  279. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  280. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  281. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  282. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  283. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  284. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  285. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  286. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  287. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  288. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  289. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  290. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  291. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
  292. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  293. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
  294. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  295. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
  296. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  297. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  298. package/examples/jsm/shaders/DigitalGlitch.js +3 -3
  299. package/examples/jsm/shaders/FXAAShader.js +1 -1
  300. package/examples/jsm/shaders/FilmShader.js +1 -1
  301. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  302. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  303. package/examples/jsm/shaders/MMDToonShader.js +0 -1
  304. package/examples/jsm/shaders/SSAOShader.js +1 -1
  305. package/examples/jsm/shaders/SSRShader.js +1 -1
  306. package/examples/jsm/shaders/SSRrShader.js +1 -1
  307. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  308. package/examples/jsm/utils/GeometryUtils.js +1 -1
  309. package/examples/jsm/utils/LDrawUtils.js +195 -0
  310. package/examples/jsm/utils/WorkerPool.js +11 -11
  311. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  312. package/examples/jsm/webxr/VRButton.js +24 -0
  313. package/examples/jsm/webxr/XREstimatedLight.js +2 -0
  314. package/package.json +27 -18
  315. package/src/Three.Legacy.js +18 -0
  316. package/src/Three.js +1 -3
  317. package/src/animation/AnimationMixer.js +1 -0
  318. package/src/cameras/CubeCamera.js +2 -0
  319. package/src/cameras/StereoCamera.js +8 -7
  320. package/src/constants.js +3 -23
  321. package/src/core/Layers.js +7 -1
  322. package/src/core/Object3D.js +3 -1
  323. package/src/extras/ImageUtils.js +63 -0
  324. package/src/extras/PMREMGenerator.js +49 -185
  325. package/src/extras/core/Interpolations.js +1 -1
  326. package/src/geometries/LatheGeometry.js +70 -47
  327. package/src/helpers/CameraHelper.js +1 -1
  328. package/src/loaders/FileLoader.js +98 -144
  329. package/src/loaders/ImageLoader.js +9 -4
  330. package/src/loaders/LoaderUtils.js +26 -0
  331. package/src/loaders/MaterialLoader.js +8 -5
  332. package/src/loaders/ObjectLoader.js +2 -0
  333. package/src/materials/Material.js +8 -8
  334. package/src/materials/MeshPhysicalMaterial.js +20 -14
  335. package/src/math/Color.js +1 -39
  336. package/src/math/MathUtils.js +5 -16
  337. package/src/math/Quaternion.js +1 -1
  338. package/src/math/Ray.js +2 -2
  339. package/src/math/Sphere.js +10 -1
  340. package/src/objects/Skeleton.js +1 -0
  341. package/src/renderers/WebGLCubeRenderTarget.js +0 -2
  342. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  343. package/src/renderers/WebGLRenderer.js +106 -199
  344. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  345. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  346. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  347. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
  348. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
  349. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  350. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
  351. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  352. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  353. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  354. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  355. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  356. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
  357. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
  358. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  359. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  360. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
  361. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
  362. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
  363. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
  364. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
  365. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  366. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  367. package/src/renderers/shaders/ShaderLib.js +8 -6
  368. package/src/renderers/shaders/UniformsLib.js +1 -2
  369. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  370. package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
  371. package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
  372. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  373. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  374. package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
  375. package/src/renderers/webgl/WebGLProgram.js +12 -37
  376. package/src/renderers/webgl/WebGLPrograms.js +192 -70
  377. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  378. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  379. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  380. package/src/renderers/webgl/WebGLState.js +157 -17
  381. package/src/renderers/webgl/WebGLTextures.js +442 -83
  382. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  383. package/src/renderers/webgl/WebGLUtils.js +86 -28
  384. package/src/renderers/webxr/WebXRManager.js +77 -109
  385. package/src/scenes/Scene.js +1 -1
  386. package/src/textures/DataTexture.js +0 -2
  387. package/src/textures/DataTexture2DArray.js +0 -2
  388. package/src/textures/DataTexture3D.js +0 -2
  389. package/src/textures/FramebufferTexture.js +25 -0
  390. package/src/textures/Texture.js +8 -1
  391. package/src/textures/VideoTexture.js +1 -3
  392. package/examples/js/WebGL.js +0 -90
  393. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  394. package/examples/js/libs/dat.gui.min.js +0 -14
  395. package/examples/js/utils/RoughnessMipmapper.js +0 -278
  396. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  397. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  398. package/examples/jsm/libs/glslang.js +0 -78
  399. package/examples/jsm/libs/glslang.wasm +0 -0
  400. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  401. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  402. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  403. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  404. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  405. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  406. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  407. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  408. package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
  409. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -14,7 +14,7 @@ material.roughness = min( material.roughness, 1.0 );
14
14
  #ifdef SPECULAR
15
15
 
16
16
  float specularIntensityFactor = specularIntensity;
17
- vec3 specularTintFactor = specularTint;
17
+ vec3 specularColorFactor = specularColor;
18
18
 
19
19
  #ifdef USE_SPECULARINTENSITYMAP
20
20
 
@@ -22,9 +22,9 @@ material.roughness = min( material.roughness, 1.0 );
22
22
 
23
23
  #endif
24
24
 
25
- #ifdef USE_SPECULARTINTMAP
25
+ #ifdef USE_SPECULARCOLORMAP
26
26
 
27
- specularTintFactor *= specularTintMapTexelToLinear( texture2D( specularTintMap, vUv ) ).rgb;
27
+ specularColorFactor *= texture2D( specularColorMap, vUv ).rgb;
28
28
 
29
29
  #endif
30
30
 
@@ -33,12 +33,12 @@ material.roughness = min( material.roughness, 1.0 );
33
33
  #else
34
34
 
35
35
  float specularIntensityFactor = 1.0;
36
- vec3 specularTintFactor = vec3( 1.0 );
36
+ vec3 specularColorFactor = vec3( 1.0 );
37
37
  material.specularF90 = 1.0;
38
38
 
39
39
  #endif
40
40
 
41
- material.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularTintFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );
41
+ material.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );
42
42
 
43
43
  #else
44
44
 
@@ -75,8 +75,21 @@ material.roughness = min( material.roughness, 1.0 );
75
75
 
76
76
  #ifdef USE_SHEEN
77
77
 
78
- material.sheenTint = sheenTint;
78
+ material.sheenColor = sheenColor;
79
+
80
+ #ifdef USE_SHEENCOLORMAP
81
+
82
+ material.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;
83
+
84
+ #endif
85
+
79
86
  material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );
80
87
 
88
+ #ifdef USE_SHEENROUGHNESSMAP
89
+
90
+ material.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;
91
+
92
+ #endif
93
+
81
94
  #endif
82
95
  `;
@@ -14,7 +14,7 @@ struct PhysicalMaterial {
14
14
  #endif
15
15
 
16
16
  #ifdef USE_SHEEN
17
- vec3 sheenTint;
17
+ vec3 sheenColor;
18
18
  float sheenRoughness;
19
19
  #endif
20
20
 
@@ -22,6 +22,26 @@ struct PhysicalMaterial {
22
22
 
23
23
  // temporary
24
24
  vec3 clearcoatSpecular = vec3( 0.0 );
25
+ vec3 sheenSpecular = vec3( 0.0 );
26
+
27
+ // This is a curve-fit approxmation to the "Charlie sheen" BRDF integrated over the hemisphere from
28
+ // Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF". The analysis can be found
29
+ // in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
30
+ float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness) {
31
+
32
+ float dotNV = saturate( dot( normal, viewDir ) );
33
+
34
+ float r2 = roughness * roughness;
35
+
36
+ float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;
37
+
38
+ float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;
39
+
40
+ float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );
41
+
42
+ return saturate( DG * RECIPROCAL_PI );
43
+
44
+ }
25
45
 
26
46
  // Analytical approximation of the DFG LUT, one half of the
27
47
  // split-sum approximation used in indirect specular lighting.
@@ -133,7 +153,7 @@ void RE_Direct_Physical( const in IncidentLight directLight, const in GeometricC
133
153
 
134
154
  #ifdef USE_SHEEN
135
155
 
136
- reflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenTint, material.sheenRoughness );
156
+ sheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );
137
157
 
138
158
  #endif
139
159
 
@@ -157,6 +177,12 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia
157
177
 
158
178
  #endif
159
179
 
180
+ #ifdef USE_SHEEN
181
+
182
+ sheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );
183
+
184
+ #endif
185
+
160
186
  // Both indirect specular and indirect diffuse light accumulate here
161
187
 
162
188
  vec3 singleScattering = vec3( 0.0 );
@@ -1,10 +1,17 @@
1
1
  export default /* glsl */`
2
2
  #ifdef USE_MAP
3
3
 
4
- vec4 texelColor = texture2D( map, vUv );
4
+ vec4 sampledDiffuseColor = texture2D( map, vUv );
5
5
 
6
- texelColor = mapTexelToLinear( texelColor );
7
- diffuseColor *= texelColor;
6
+ #ifdef DECODE_VIDEO_TEXTURE
7
+
8
+ // inline sRGB decode (TODO: Remove this code when https://crbug.com/1256340 is solved)
9
+
10
+ sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );
11
+
12
+ #endif
13
+
14
+ diffuseColor *= sampledDiffuseColor;
8
15
 
9
16
  #endif
10
17
  `;
@@ -7,8 +7,7 @@ export default /* glsl */`
7
7
 
8
8
  #ifdef USE_MAP
9
9
 
10
- vec4 mapTexel = texture2D( map, uv );
11
- diffuseColor *= mapTexelToLinear( mapTexel );
10
+ diffuseColor *= texture2D( map, uv );
12
11
 
13
12
  #endif
14
13
 
@@ -13,7 +13,7 @@ vec3 LinearToneMapping( vec3 color ) {
13
13
 
14
14
  }
15
15
 
16
- // source: https://www.cs.utah.edu/~reinhard/cdrom/
16
+ // source: https://www.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf
17
17
  vec3 ReinhardToneMapping( vec3 color ) {
18
18
 
19
19
  color *= toneMappingExposure;
@@ -24,7 +24,7 @@ export default /* glsl */`
24
24
  vec4 transmission = getIBLVolumeRefraction(
25
25
  n, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,
26
26
  pos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,
27
- attenuationTint, attenuationDistance );
27
+ attenuationColor, attenuationDistance );
28
28
 
29
29
  totalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );
30
30
  transmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );
@@ -7,7 +7,7 @@ export default /* glsl */`
7
7
  uniform float transmission;
8
8
  uniform float thickness;
9
9
  uniform float attenuationDistance;
10
- uniform vec3 attenuationTint;
10
+ uniform vec3 attenuationColor;
11
11
 
12
12
  #ifdef USE_TRANSMISSIONMAP
13
13
 
@@ -29,7 +29,7 @@ export default /* glsl */`
29
29
 
30
30
  varying vec3 vWorldPosition;
31
31
 
32
- vec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {
32
+ vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {
33
33
 
34
34
  // Direction of refracted light.
35
35
  vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );
@@ -45,7 +45,7 @@ export default /* glsl */`
45
45
 
46
46
  }
47
47
 
48
- float applyIorToRoughness( float roughness, float ior ) {
48
+ float applyIorToRoughness( const in float roughness, const in float ior ) {
49
49
 
50
50
  // Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and
51
51
  // an IOR of 1.5 results in the default amount of microfacet refraction.
@@ -53,7 +53,7 @@ export default /* glsl */`
53
53
 
54
54
  }
55
55
 
56
- vec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {
56
+ vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {
57
57
 
58
58
  float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );
59
59
 
@@ -69,7 +69,7 @@ export default /* glsl */`
69
69
 
70
70
  }
71
71
 
72
- vec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {
72
+ vec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {
73
73
 
74
74
  if ( attenuationDistance == 0.0 ) {
75
75
 
@@ -87,9 +87,10 @@ export default /* glsl */`
87
87
 
88
88
  }
89
89
 
90
- vec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,
91
- vec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,
92
- vec3 attenuationColor, float attenuationDistance ) {
90
+ vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,
91
+ const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,
92
+ const in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,
93
+ const in vec3 attenuationColor, const in float attenuationDistance ) {
93
94
 
94
95
  vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );
95
96
  vec3 refractedRayExit = position + transmissionRay;
@@ -18,9 +18,7 @@ varying vec2 vUv;
18
18
 
19
19
  void main() {
20
20
 
21
- vec4 texColor = texture2D( t2D, vUv );
22
-
23
- gl_FragColor = mapTexelToLinear( texColor );
21
+ gl_FragColor = texture2D( t2D, vUv );
24
22
 
25
23
  #include <tonemapping_fragment>
26
24
  #include <encodings_fragment>
@@ -26,9 +26,7 @@ void main() {
26
26
 
27
27
  vec2 sampleUV = equirectUv( direction );
28
28
 
29
- vec4 texColor = texture2D( tEquirect, sampleUV );
30
-
31
- gl_FragColor = mapTexelToLinear( texColor );
29
+ gl_FragColor = texture2D( tEquirect, sampleUV );
32
30
 
33
31
  #include <tonemapping_fragment>
34
32
  #include <encodings_fragment>
@@ -87,7 +87,7 @@ void main() {
87
87
  #ifdef USE_LIGHTMAP
88
88
 
89
89
  vec4 lightMapTexel= texture2D( lightMap, vUv2 );
90
- reflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;
90
+ reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity;
91
91
 
92
92
  #else
93
93
 
@@ -86,11 +86,10 @@ void main() {
86
86
  #ifdef USE_MATCAP
87
87
 
88
88
  vec4 matcapColor = texture2D( matcap, uv );
89
- matcapColor = matcapTexelToLinear( matcapColor );
90
89
 
91
90
  #else
92
91
 
93
- vec4 matcapColor = vec4( 1.0 );
92
+ vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); // default if matcap is missing
94
93
 
95
94
  #endif
96
95
 
@@ -77,14 +77,14 @@ uniform float opacity;
77
77
 
78
78
  #ifdef SPECULAR
79
79
  uniform float specularIntensity;
80
- uniform vec3 specularTint;
80
+ uniform vec3 specularColor;
81
81
 
82
82
  #ifdef USE_SPECULARINTENSITYMAP
83
83
  uniform sampler2D specularIntensityMap;
84
84
  #endif
85
85
 
86
- #ifdef USE_SPECULARTINTMAP
87
- uniform sampler2D specularTintMap;
86
+ #ifdef USE_SPECULARCOLORMAP
87
+ uniform sampler2D specularColorMap;
88
88
  #endif
89
89
  #endif
90
90
 
@@ -94,8 +94,16 @@ uniform float opacity;
94
94
  #endif
95
95
 
96
96
  #ifdef USE_SHEEN
97
- uniform vec3 sheenTint;
97
+ uniform vec3 sheenColor;
98
98
  uniform float sheenRoughness;
99
+
100
+ #ifdef USE_SHEENCOLORMAP
101
+ uniform sampler2D sheenColorMap;
102
+ #endif
103
+
104
+ #ifdef USE_SHEENROUGHNESSMAP
105
+ uniform sampler2D sheenRoughnessMap;
106
+ #endif
99
107
  #endif
100
108
 
101
109
  varying vec3 vViewPosition;
@@ -167,13 +175,23 @@ void main() {
167
175
 
168
176
  vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
169
177
 
178
+ #ifdef USE_SHEEN
179
+
180
+ // Sheen energy compensation approximation calculation can be found at the end of
181
+ // https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
182
+ float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );
183
+
184
+ outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;
185
+
186
+ #endif
187
+
170
188
  #ifdef USE_CLEARCOAT
171
189
 
172
190
  float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );
173
191
 
174
192
  vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );
175
193
 
176
- outgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;
194
+ outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;
177
195
 
178
196
  #endif
179
197
 
@@ -10,12 +10,13 @@ export const fragment = /* glsl */`
10
10
  uniform sampler2D shadow_pass;
11
11
  uniform vec2 resolution;
12
12
  uniform float radius;
13
- uniform float samples;
14
13
 
15
14
  #include <packing>
16
15
 
17
16
  void main() {
18
17
 
18
+ const float samples = float( VSM_SAMPLES );
19
+
19
20
  float mean = 0.0;
20
21
  float squared_mean = 0.0;
21
22
 
@@ -297,8 +297,10 @@ ShaderLib.physical = {
297
297
  clearcoatNormalScale: { value: new Vector2( 1, 1 ) },
298
298
  clearcoatNormalMap: { value: null },
299
299
  sheen: { value: 0 },
300
- sheenTint: { value: new Color( 0x000000 ) },
301
- sheenRoughness: { value: 0 },
300
+ sheenColor: { value: new Color( 0x000000 ) },
301
+ sheenColorMap: { value: null },
302
+ sheenRoughness: { value: 1 },
303
+ sheenRoughnessMap: { value: null },
302
304
  transmission: { value: 0 },
303
305
  transmissionMap: { value: null },
304
306
  transmissionSamplerSize: { value: new Vector2() },
@@ -306,11 +308,11 @@ ShaderLib.physical = {
306
308
  thickness: { value: 0 },
307
309
  thicknessMap: { value: null },
308
310
  attenuationDistance: { value: 0 },
309
- attenuationTint: { value: new Color( 0x000000 ) },
310
- specularIntensity: { value: 0 },
311
+ attenuationColor: { value: new Color( 0x000000 ) },
312
+ specularIntensity: { value: 1 },
311
313
  specularIntensityMap: { value: null },
312
- specularTint: { value: new Color( 1, 1, 1 ) },
313
- specularTintMap: { value: null },
314
+ specularColor: { value: new Color( 1, 1, 1 ) },
315
+ specularColorMap: { value: null },
314
316
  }
315
317
  ] ),
316
318
 
@@ -34,8 +34,7 @@ const UniformsLib = {
34
34
  flipEnvMap: { value: - 1 },
35
35
  reflectivity: { value: 1.0 }, // basic, lambert, phong
36
36
  ior: { value: 1.5 }, // standard, physical
37
- refractionRatio: { value: 0.98 },
38
- maxMipLevel: { value: 0 }
37
+ refractionRatio: { value: 0.98 }
39
38
 
40
39
  },
41
40
 
@@ -52,10 +52,8 @@ function WebGLCapabilities( gl, extensions, parameters ) {
52
52
 
53
53
  }
54
54
 
55
- /* eslint-disable no-undef */
56
55
  const isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||
57
56
  ( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );
58
- /* eslint-enable no-undef */
59
57
 
60
58
  let precision = parameters.precision !== undefined ? parameters.precision : 'highp';
61
59
  const maxPrecision = getMaxPrecision( precision );
@@ -40,14 +40,10 @@ function WebGLCubeMaps( renderer ) {
40
40
 
41
41
  if ( image && image.height > 0 ) {
42
42
 
43
- const currentRenderTarget = renderer.getRenderTarget();
44
-
45
43
  const renderTarget = new WebGLCubeRenderTarget( image.height / 2 );
46
44
  renderTarget.fromEquirectangularTexture( renderer, texture );
47
45
  cubemaps.set( texture, renderTarget );
48
46
 
49
- renderer.setRenderTarget( currentRenderTarget );
50
-
51
47
  texture.addEventListener( 'dispose', onTextureDispose );
52
48
 
53
49
  return mapTextureMapping( renderTarget.texture, texture.mapping );
@@ -9,45 +9,58 @@ function WebGLCubeUVMaps( renderer ) {
9
9
 
10
10
  function get( texture ) {
11
11
 
12
- if ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) {
12
+ if ( texture && texture.isTexture ) {
13
13
 
14
14
  const mapping = texture.mapping;
15
15
 
16
16
  const isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );
17
17
  const isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
18
18
 
19
+ // equirect/cube map to cubeUV conversion
20
+
19
21
  if ( isEquirectMap || isCubeMap ) {
20
22
 
21
- // equirect/cube map to cubeUV conversion
23
+ if ( texture.isRenderTargetTexture && texture.needsPMREMUpdate === true ) {
24
+
25
+ texture.needsPMREMUpdate = false;
26
+
27
+ let renderTarget = cubeUVmaps.get( texture );
28
+
29
+ if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
22
30
 
23
- if ( cubeUVmaps.has( texture ) ) {
31
+ renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );
32
+ cubeUVmaps.set( texture, renderTarget );
24
33
 
25
- return cubeUVmaps.get( texture ).texture;
34
+ return renderTarget.texture;
26
35
 
27
36
  } else {
28
37
 
29
- const image = texture.image;
38
+ if ( cubeUVmaps.has( texture ) ) {
30
39
 
31
- if ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {
40
+ return cubeUVmaps.get( texture ).texture;
32
41
 
33
- const currentRenderTarget = renderer.getRenderTarget();
42
+ } else {
34
43
 
35
- if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
44
+ const image = texture.image;
36
45
 
37
- const renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
38
- cubeUVmaps.set( texture, renderTarget );
46
+ if ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {
39
47
 
40
- renderer.setRenderTarget( currentRenderTarget );
48
+ if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
41
49
 
42
- texture.addEventListener( 'dispose', onTextureDispose );
50
+ const renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
51
+ cubeUVmaps.set( texture, renderTarget );
43
52
 
44
- return renderTarget.texture;
53
+ texture.addEventListener( 'dispose', onTextureDispose );
45
54
 
46
- } else {
55
+ return renderTarget.texture;
56
+
57
+ } else {
58
+
59
+ // image not yet ready. try the conversion next frame
47
60
 
48
- // image not yet ready. try the conversion next frame
61
+ return null;
49
62
 
50
- return null;
63
+ }
51
64
 
52
65
  }
53
66
 
@@ -70,6 +70,7 @@ function WebGLExtensions( gl ) {
70
70
 
71
71
  getExtension( 'OES_texture_float_linear' );
72
72
  getExtension( 'EXT_color_buffer_half_float' );
73
+ getExtension( 'WEBGL_multisampled_render_to_texture' );
73
74
 
74
75
  },
75
76
 
@@ -157,14 +157,6 @@ function WebGLMaterials( properties ) {
157
157
  uniforms.ior.value = material.ior;
158
158
  uniforms.refractionRatio.value = material.refractionRatio;
159
159
 
160
- const maxMipLevel = properties.get( envMap ).__maxMipLevel;
161
-
162
- if ( maxMipLevel !== undefined ) {
163
-
164
- uniforms.maxMipLevel.value = maxMipLevel;
165
-
166
- }
167
-
168
160
  }
169
161
 
170
162
  if ( material.lightMap ) {
@@ -253,9 +245,9 @@ function WebGLMaterials( properties ) {
253
245
 
254
246
  uvScaleMap = material.specularIntensityMap;
255
247
 
256
- } else if ( material.specularTintMap ) {
248
+ } else if ( material.specularColorMap ) {
257
249
 
258
- uvScaleMap = material.specularTintMap;
250
+ uvScaleMap = material.specularColorMap;
259
251
 
260
252
  } else if ( material.transmissionMap ) {
261
253
 
@@ -265,6 +257,14 @@ function WebGLMaterials( properties ) {
265
257
 
266
258
  uvScaleMap = material.thicknessMap;
267
259
 
260
+ } else if ( material.sheenColorMap ) {
261
+
262
+ uvScaleMap = material.sheenColorMap;
263
+
264
+ } else if ( material.sheenRoughnessMap ) {
265
+
266
+ uvScaleMap = material.sheenRoughnessMap;
267
+
268
268
  }
269
269
 
270
270
  if ( uvScaleMap !== undefined ) {
@@ -600,10 +600,22 @@ function WebGLMaterials( properties ) {
600
600
 
601
601
  if ( material.sheen > 0 ) {
602
602
 
603
- uniforms.sheenTint.value.copy( material.sheenTint ).multiplyScalar( material.sheen );
603
+ uniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );
604
604
 
605
605
  uniforms.sheenRoughness.value = material.sheenRoughness;
606
606
 
607
+ if ( material.sheenColorMap ) {
608
+
609
+ uniforms.sheenColorMap.value = material.sheenColorMap;
610
+
611
+ }
612
+
613
+ if ( material.sheenRoughnessMap ) {
614
+
615
+ uniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;
616
+
617
+ }
618
+
607
619
  }
608
620
 
609
621
  if ( material.clearcoat > 0 ) {
@@ -659,12 +671,12 @@ function WebGLMaterials( properties ) {
659
671
  }
660
672
 
661
673
  uniforms.attenuationDistance.value = material.attenuationDistance;
662
- uniforms.attenuationTint.value.copy( material.attenuationTint );
674
+ uniforms.attenuationColor.value.copy( material.attenuationColor );
663
675
 
664
676
  }
665
677
 
666
678
  uniforms.specularIntensity.value = material.specularIntensity;
667
- uniforms.specularTint.value.copy( material.specularTint );
679
+ uniforms.specularColor.value.copy( material.specularColor );
668
680
 
669
681
  if ( material.specularIntensityMap ) {
670
682
 
@@ -672,9 +684,9 @@ function WebGLMaterials( properties ) {
672
684
 
673
685
  }
674
686
 
675
- if ( material.specularTintMap ) {
687
+ if ( material.specularColorMap ) {
676
688
 
677
- uniforms.specularTintMap.value = material.specularTintMap;
689
+ uniforms.specularColorMap.value = material.specularColorMap;
678
690
 
679
691
  }
680
692
 
@@ -84,6 +84,7 @@ function WebGLMorphtargets( gl, capabilities, textures ) {
84
84
  const texture = new DataTexture2DArray( buffer, width, height, numberOfMorphTargets );
85
85
  texture.format = RGBAFormat; // using RGBA since RGB might be emulated (and is thus slower)
86
86
  texture.type = FloatType;
87
+ texture.needsUpdate = true;
87
88
 
88
89
  // fill buffer
89
90
 
@@ -134,6 +135,18 @@ function WebGLMorphtargets( gl, capabilities, textures ) {
134
135
 
135
136
  morphTextures.set( geometry, entry );
136
137
 
138
+ function disposeTexture() {
139
+
140
+ texture.dispose();
141
+
142
+ morphTextures.delete( geometry );
143
+
144
+ geometry.removeEventListener( 'dispose', disposeTexture );
145
+
146
+ }
147
+
148
+ geometry.addEventListener( 'dispose', disposeTexture );
149
+
137
150
  }
138
151
 
139
152
  //