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
@@ -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 *= specularColorMapTexelToLinear( 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 *= sheenColorMapTexelToLinear( 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 );
@@ -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
 
@@ -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 ) },
300
+ sheenColor: { value: new Color( 0x000000 ) },
301
+ sheenColorMap: { value: null },
301
302
  sheenRoughness: { value: 0 },
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 ) },
311
+ attenuationColor: { value: new Color( 0x000000 ) },
310
312
  specularIntensity: { value: 0 },
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 );
@@ -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
 
@@ -1,7 +1,7 @@
1
1
  import { WebGLUniforms } from './WebGLUniforms.js';
2
2
  import { WebGLShader } from './WebGLShader.js';
3
3
  import { ShaderChunk } from '../shaders/ShaderChunk.js';
4
- import { RGBFormat, NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GammaEncoding, RGBDEncoding, RGBM16Encoding, RGBM7Encoding, RGBEEncoding, sRGBEncoding, LinearEncoding, LogLuvEncoding, GLSL3 } from '../../constants.js';
4
+ import { RGBFormat, NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, sRGBEncoding, LinearEncoding, GLSL3 } from '../../constants.js';
5
5
 
6
6
  let programIdCount = 0;
7
7
 
@@ -27,18 +27,6 @@ function getEncodingComponents( encoding ) {
27
27
  return [ 'Linear', '( value )' ];
28
28
  case sRGBEncoding:
29
29
  return [ 'sRGB', '( value )' ];
30
- case RGBEEncoding:
31
- return [ 'RGBE', '( value )' ];
32
- case RGBM7Encoding:
33
- return [ 'RGBM', '( value, 7.0 )' ];
34
- case RGBM16Encoding:
35
- return [ 'RGBM', '( value, 16.0 )' ];
36
- case RGBDEncoding:
37
- return [ 'RGBD', '( value, 256.0 )' ];
38
- case GammaEncoding:
39
- return [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];
40
- case LogLuvEncoding:
41
- return [ 'LogLuv', '( value )' ];
42
30
  default:
43
31
  console.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );
44
32
  return [ 'Linear', '( value )' ];
@@ -399,9 +387,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
399
387
  const envMapModeDefine = generateEnvMapModeDefine( parameters );
400
388
  const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );
401
389
 
402
-
403
- const gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;
404
-
405
390
  const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );
406
391
 
407
392
  const customDefines = generateDefines( defines );
@@ -453,8 +438,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
453
438
 
454
439
  parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',
455
440
 
456
- '#define GAMMA_FACTOR ' + gammaFactorDefine,
457
-
458
441
  '#define MAX_BONES ' + parameters.maxBones,
459
442
  ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',
460
443
  ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',
@@ -478,7 +461,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
478
461
 
479
462
  parameters.specularMap ? '#define USE_SPECULARMAP' : '',
480
463
  parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',
481
- parameters.specularTintMap ? '#define USE_SPECULARTINTMAP' : '',
464
+ parameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',
482
465
 
483
466
  parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
484
467
  parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
@@ -488,6 +471,9 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
488
471
  parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
489
472
  parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
490
473
 
474
+ parameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',
475
+ parameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',
476
+
491
477
  parameters.vertexTangents ? '#define USE_TANGENT' : '',
492
478
  parameters.vertexColors ? '#define USE_COLOR' : '',
493
479
  parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
@@ -600,8 +586,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
600
586
 
601
587
  customDefines,
602
588
 
603
- '#define GAMMA_FACTOR ' + gammaFactorDefine,
604
-
605
589
  ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',
606
590
  ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',
607
591
 
@@ -626,7 +610,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
626
610
 
627
611
  parameters.specularMap ? '#define USE_SPECULARMAP' : '',
628
612
  parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',
629
- parameters.specularTintMap ? '#define USE_SPECULARTINTMAP' : '',
613
+ parameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',
630
614
  parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
631
615
  parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
632
616
 
@@ -634,6 +618,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
634
618
  parameters.alphaTest ? '#define USE_ALPHATEST' : '',
635
619
 
636
620
  parameters.sheen ? '#define USE_SHEEN' : '',
621
+ parameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',
622
+ parameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',
637
623
 
638
624
  parameters.transmission ? '#define USE_TRANSMISSION' : '',
639
625
  parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
@@ -680,7 +666,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
680
666
  parameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',
681
667
  parameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',
682
668
  parameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',
683
- parameters.specularTintMap ? getTexelDecodingFunction( 'specularTintMapTexelToLinear', parameters.specularTintMapEncoding ) : '',
669
+ parameters.specularColorMap ? getTexelDecodingFunction( 'specularColorMapTexelToLinear', parameters.specularColorMapEncoding ) : '',
670
+ parameters.sheenColorMap ? getTexelDecodingFunction( 'sheenColorMapTexelToLinear', parameters.sheenColorMapEncoding ) : '',
684
671
  parameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',
685
672
  getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),
686
673
 
@@ -718,7 +705,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
718
705
 
719
706
  prefixFragment = [
720
707
  '#define varying in',
721
- ( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',
708
+ ( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',
722
709
  ( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',
723
710
  '#define gl_FragDepthEXT gl_FragDepth',
724
711
  '#define texture2D texture',