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
@@ -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 { 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 )' ];
@@ -61,13 +49,6 @@ function getShaderErrors( gl, shader, type ) {
61
49
 
62
50
  }
63
51
 
64
- function getTexelDecodingFunction( functionName, encoding ) {
65
-
66
- const components = getEncodingComponents( encoding );
67
- return 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';
68
-
69
- }
70
-
71
52
  function getTexelEncodingFunction( functionName, encoding ) {
72
53
 
73
54
  const components = getEncodingComponents( encoding );
@@ -399,9 +380,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
399
380
  const envMapModeDefine = generateEnvMapModeDefine( parameters );
400
381
  const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );
401
382
 
402
-
403
- const gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;
404
-
405
383
  const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );
406
384
 
407
385
  const customDefines = generateDefines( defines );
@@ -453,8 +431,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
453
431
 
454
432
  parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',
455
433
 
456
- '#define GAMMA_FACTOR ' + gammaFactorDefine,
457
-
458
434
  '#define MAX_BONES ' + parameters.maxBones,
459
435
  ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',
460
436
  ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',
@@ -478,7 +454,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
478
454
 
479
455
  parameters.specularMap ? '#define USE_SPECULARMAP' : '',
480
456
  parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',
481
- parameters.specularTintMap ? '#define USE_SPECULARTINTMAP' : '',
457
+ parameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',
482
458
 
483
459
  parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
484
460
  parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
@@ -488,6 +464,9 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
488
464
  parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
489
465
  parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
490
466
 
467
+ parameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',
468
+ parameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',
469
+
491
470
  parameters.vertexTangents ? '#define USE_TANGENT' : '',
492
471
  parameters.vertexColors ? '#define USE_COLOR' : '',
493
472
  parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
@@ -600,8 +579,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
600
579
 
601
580
  customDefines,
602
581
 
603
- '#define GAMMA_FACTOR ' + gammaFactorDefine,
604
-
605
582
  ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',
606
583
  ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',
607
584
 
@@ -626,7 +603,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
626
603
 
627
604
  parameters.specularMap ? '#define USE_SPECULARMAP' : '',
628
605
  parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',
629
- parameters.specularTintMap ? '#define USE_SPECULARTINTMAP' : '',
606
+ parameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',
630
607
  parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
631
608
  parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
632
609
 
@@ -634,11 +611,15 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
634
611
  parameters.alphaTest ? '#define USE_ALPHATEST' : '',
635
612
 
636
613
  parameters.sheen ? '#define USE_SHEEN' : '',
614
+ parameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',
615
+ parameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',
637
616
 
638
617
  parameters.transmission ? '#define USE_TRANSMISSION' : '',
639
618
  parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
640
619
  parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
641
620
 
621
+ parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
622
+
642
623
  parameters.vertexTangents ? '#define USE_TANGENT' : '',
643
624
  parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',
644
625
  parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
@@ -673,15 +654,9 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
673
654
  ( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',
674
655
 
675
656
  parameters.dithering ? '#define DITHERING' : '',
676
- parameters.format === RGBFormat ? '#define OPAQUE' : '',
657
+ parameters.alphaWrite ? '' : '#define OPAQUE',
677
658
 
678
659
  ShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below
679
- parameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',
680
- parameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',
681
- parameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',
682
- parameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',
683
- parameters.specularTintMap ? getTexelDecodingFunction( 'specularTintMapTexelToLinear', parameters.specularTintMapEncoding ) : '',
684
- parameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',
685
660
  getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),
686
661
 
687
662
  parameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',
@@ -718,7 +693,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
718
693
 
719
694
  prefixFragment = [
720
695
  '#define varying in',
721
- ( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',
696
+ ( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',
722
697
  ( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',
723
698
  '#define gl_FragDepthEXT gl_FragDepth',
724
699
  '#define texture2D texture',
@@ -1,10 +1,14 @@
1
- import { BackSide, DoubleSide, CubeUVRefractionMapping, CubeUVReflectionMapping, LinearEncoding, sRGBEncoding, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, RGBAFormat, UnsignedByteType } from '../../constants.js';
1
+ import { BackSide, DoubleSide, CubeUVRefractionMapping, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, sRGBEncoding } from '../../constants.js';
2
+ import { Layers } from '../../core/Layers.js';
2
3
  import { WebGLProgram } from './WebGLProgram.js';
4
+ import { WebGLShaderCache } from './WebGLShaderCache.js';
3
5
  import { ShaderLib } from '../shaders/ShaderLib.js';
4
6
  import { UniformsUtils } from '../shaders/UniformsUtils.js';
5
7
 
6
8
  function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {
7
9
 
10
+ const _programLayers = new Layers();
11
+ const _customShaders = new WebGLShaderCache();
8
12
  const programs = [];
9
13
 
10
14
  const isWebGL2 = capabilities.isWebGL2;
@@ -12,7 +16,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
12
16
  const floatVertexTextures = capabilities.floatVertexTextures;
13
17
  const maxVertexUniforms = capabilities.maxVertexUniforms;
14
18
  const vertexTextures = capabilities.vertexTextures;
15
-
16
19
  let precision = capabilities.precision;
17
20
 
18
21
  const shaderIDs = {
@@ -33,24 +36,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
33
36
  SpriteMaterial: 'sprite'
34
37
  };
35
38
 
36
- const parameterNames = [
37
- 'precision', 'isWebGL2', 'supportsVertexTextures', 'outputEncoding', 'instancing', 'instancingColor',
38
- 'map', 'mapEncoding', 'matcap', 'matcapEncoding', 'envMap', 'envMapMode', 'envMapEncoding', 'envMapCubeUV',
39
- 'lightMap', 'lightMapEncoding', 'aoMap', 'emissiveMap', 'emissiveMapEncoding', 'bumpMap', 'normalMap',
40
- 'objectSpaceNormalMap', 'tangentSpaceNormalMap',
41
- 'clearcoat', 'clearcoatMap', 'clearcoatRoughnessMap', 'clearcoatNormalMap',
42
- 'displacementMap',
43
- 'specularMap', 'specularIntensityMap', 'specularTintMap', 'specularTintMapEncoding', 'roughnessMap', 'metalnessMap', 'gradientMap',
44
- 'alphaMap', 'alphaTest', 'combine', 'vertexColors', 'vertexAlphas', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2',
45
- 'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning',
46
- 'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals', 'morphTargetsCount', 'premultipliedAlpha',
47
- 'numDirLights', 'numPointLights', 'numSpotLights', 'numHemiLights', 'numRectAreaLights',
48
- 'numDirLightShadows', 'numPointLightShadows', 'numSpotLightShadows',
49
- 'shadowMapEnabled', 'shadowMapType', 'toneMapping', 'physicallyCorrectLights',
50
- 'doubleSided', 'flipSided', 'numClippingPlanes', 'numClipIntersection', 'depthPacking', 'dithering', 'format',
51
- 'sheen', 'transmission', 'transmissionMap', 'thicknessMap'
52
- ];
53
-
54
39
  function getMaxBones( object ) {
55
40
 
56
41
  const skeleton = object.skeleton;
@@ -87,35 +72,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
87
72
 
88
73
  }
89
74
 
90
- function getTextureEncodingFromMap( map ) {
91
-
92
- let encoding;
93
-
94
- if ( map && map.isTexture ) {
95
-
96
- encoding = map.encoding;
97
-
98
- } else if ( map && map.isWebGLRenderTarget ) {
99
-
100
- console.warn( 'THREE.WebGLPrograms.getTextureEncodingFromMap: don\'t use render targets as textures. Use their .texture property instead.' );
101
- encoding = map.texture.encoding;
102
-
103
- } else {
104
-
105
- encoding = LinearEncoding;
106
-
107
- }
108
-
109
- if ( isWebGL2 && map && map.isTexture && map.format === RGBAFormat && map.type === UnsignedByteType && map.encoding === sRGBEncoding ) {
110
-
111
- encoding = LinearEncoding; // disable inline decode for sRGB textures in WebGL 2
112
-
113
- }
114
-
115
- return encoding;
116
-
117
- }
118
-
119
75
  function getParameters( material, lights, shadows, scene, object ) {
120
76
 
121
77
  const fog = scene.fog;
@@ -143,6 +99,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
143
99
  }
144
100
 
145
101
  let vertexShader, fragmentShader;
102
+ let customVertexShaderID, customFragmentShaderID;
146
103
 
147
104
  if ( shaderID ) {
148
105
 
@@ -156,6 +113,11 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
156
113
  vertexShader = material.vertexShader;
157
114
  fragmentShader = material.fragmentShader;
158
115
 
116
+ _customShaders.update( material );
117
+
118
+ customVertexShaderID = _customShaders.getVertexShaderID( material );
119
+ customFragmentShaderID = _customShaders.getFragmentShaderID( material );
120
+
159
121
  }
160
122
 
161
123
  const currentRenderTarget = renderer.getRenderTarget();
@@ -174,6 +136,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
174
136
  fragmentShader: fragmentShader,
175
137
  defines: material.defines,
176
138
 
139
+ customVertexShaderID: customVertexShaderID,
140
+ customFragmentShaderID: customFragmentShaderID,
141
+
177
142
  isRawShaderMaterial: material.isRawShaderMaterial === true,
178
143
  glslVersion: material.glslVersion,
179
144
 
@@ -183,25 +148,22 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
183
148
  instancingColor: object.isInstancedMesh === true && object.instanceColor !== null,
184
149
 
185
150
  supportsVertexTextures: vertexTextures,
186
- outputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding,
151
+ outputEncoding: ( currentRenderTarget !== null ) ? currentRenderTarget.texture.encoding : renderer.outputEncoding,
187
152
  map: !! material.map,
188
- mapEncoding: getTextureEncodingFromMap( material.map ),
189
153
  matcap: !! material.matcap,
190
- matcapEncoding: getTextureEncodingFromMap( material.matcap ),
191
154
  envMap: !! envMap,
192
155
  envMapMode: envMap && envMap.mapping,
193
- envMapEncoding: getTextureEncodingFromMap( envMap ),
194
156
  envMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ),
195
157
  lightMap: !! material.lightMap,
196
- lightMapEncoding: getTextureEncodingFromMap( material.lightMap ),
197
158
  aoMap: !! material.aoMap,
198
159
  emissiveMap: !! material.emissiveMap,
199
- emissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ),
200
160
  bumpMap: !! material.bumpMap,
201
161
  normalMap: !! material.normalMap,
202
162
  objectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,
203
163
  tangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,
204
164
 
165
+ decodeVideoTexture: !! material.map && ( material.map.isVideoTexture === true ) && ( material.map.encoding === sRGBEncoding ),
166
+
205
167
  clearcoat: useClearcoat,
206
168
  clearcoatMap: useClearcoat && !! material.clearcoatMap,
207
169
  clearcoatRoughnessMap: useClearcoat && !! material.clearcoatRoughnessMap,
@@ -212,15 +174,17 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
212
174
  metalnessMap: !! material.metalnessMap,
213
175
  specularMap: !! material.specularMap,
214
176
  specularIntensityMap: !! material.specularIntensityMap,
215
- specularTintMap: !! material.specularTintMap,
216
- specularTintMapEncoding: getTextureEncodingFromMap( material.specularTintMap ),
177
+ specularColorMap: !! material.specularColorMap,
217
178
 
218
179
  alphaMap: !! material.alphaMap,
219
180
  alphaTest: useAlphaTest,
181
+ alphaWrite: material.alphaWrite || material.transparent,
220
182
 
221
183
  gradientMap: !! material.gradientMap,
222
184
 
223
185
  sheen: material.sheen > 0,
186
+ sheenColorMap: !! material.sheenColorMap,
187
+ sheenRoughnessMap: !! material.sheenRoughnessMap,
224
188
 
225
189
  transmission: material.transmission > 0,
226
190
  transmissionMap: !! material.transmissionMap,
@@ -231,8 +195,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
231
195
  vertexTangents: ( !! material.normalMap && !! object.geometry && !! object.geometry.attributes.tangent ),
232
196
  vertexColors: material.vertexColors,
233
197
  vertexAlphas: material.vertexColors === true && !! object.geometry && !! object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4,
234
- vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularTintMap,
235
- uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularTintMap ) && !! material.displacementMap,
198
+ vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheenColorMap || !! material.sheenRoughnessMap,
199
+ uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || material.sheen > 0 || !! material.sheenColorMap || !! material.sheenRoughnessMap ) && !! material.displacementMap,
236
200
 
237
201
  fog: !! fog,
238
202
  useFog: material.fog,
@@ -264,7 +228,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
264
228
  numClippingPlanes: clipping.numPlanes,
265
229
  numClipIntersection: clipping.numIntersection,
266
230
 
267
- format: material.format,
268
231
  dithering: material.dithering,
269
232
 
270
233
  shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,
@@ -309,8 +272,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
309
272
 
310
273
  } else {
311
274
 
312
- array.push( parameters.fragmentShader );
313
- array.push( parameters.vertexShader );
275
+ array.push( parameters.customVertexShaderID );
276
+ array.push( parameters.customFragmentShaderID );
314
277
 
315
278
  }
316
279
 
@@ -327,14 +290,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
327
290
 
328
291
  if ( parameters.isRawShaderMaterial === false ) {
329
292
 
330
- for ( let i = 0; i < parameterNames.length; i ++ ) {
331
-
332
- array.push( parameters[ parameterNames[ i ] ] );
333
-
334
- }
335
-
293
+ getProgramCacheKeyParameters( array, parameters );
294
+ getProgramCacheKeyBooleans( array, parameters );
336
295
  array.push( renderer.outputEncoding );
337
- array.push( renderer.gammaFactor );
338
296
 
339
297
  }
340
298
 
@@ -344,6 +302,156 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
344
302
 
345
303
  }
346
304
 
305
+ function getProgramCacheKeyParameters( array, parameters ) {
306
+
307
+ array.push( parameters.precision );
308
+ array.push( parameters.outputEncoding );
309
+ array.push( parameters.envMapMode );
310
+ array.push( parameters.combine );
311
+ array.push( parameters.vertexUvs );
312
+ array.push( parameters.fogExp2 );
313
+ array.push( parameters.sizeAttenuation );
314
+ array.push( parameters.maxBones );
315
+ array.push( parameters.morphTargetsCount );
316
+ array.push( parameters.numDirLights );
317
+ array.push( parameters.numPointLights );
318
+ array.push( parameters.numSpotLights );
319
+ array.push( parameters.numHemiLights );
320
+ array.push( parameters.numRectAreaLights );
321
+ array.push( parameters.numDirLightShadows );
322
+ array.push( parameters.numPointLightShadows );
323
+ array.push( parameters.numSpotLightShadows );
324
+ array.push( parameters.shadowMapType );
325
+ array.push( parameters.toneMapping );
326
+ array.push( parameters.numClippingPlanes );
327
+ array.push( parameters.numClipIntersection );
328
+ array.push( parameters.alphaWrite );
329
+
330
+ }
331
+
332
+ function getProgramCacheKeyBooleans( array, parameters ) {
333
+
334
+ _programLayers.disableAll();
335
+
336
+ if ( parameters.isWebGL2 )
337
+ _programLayers.enable( 0 );
338
+ if ( parameters.supportsVertexTextures )
339
+ _programLayers.enable( 1 );
340
+ if ( parameters.instancing )
341
+ _programLayers.enable( 2 );
342
+ if ( parameters.instancingColor )
343
+ _programLayers.enable( 3 );
344
+ if ( parameters.map )
345
+ _programLayers.enable( 4 );
346
+ if ( parameters.matcap )
347
+ _programLayers.enable( 5 );
348
+ if ( parameters.envMap )
349
+ _programLayers.enable( 6 );
350
+ if ( parameters.envMapCubeUV )
351
+ _programLayers.enable( 7 );
352
+ if ( parameters.lightMap )
353
+ _programLayers.enable( 8 );
354
+ if ( parameters.aoMap )
355
+ _programLayers.enable( 9 );
356
+ if ( parameters.emissiveMap )
357
+ _programLayers.enable( 10 );
358
+ if ( parameters.bumpMap )
359
+ _programLayers.enable( 11 );
360
+ if ( parameters.normalMap )
361
+ _programLayers.enable( 12 );
362
+ if ( parameters.objectSpaceNormalMap )
363
+ _programLayers.enable( 13 );
364
+ if ( parameters.tangentSpaceNormalMap )
365
+ _programLayers.enable( 14 );
366
+ if ( parameters.clearcoat )
367
+ _programLayers.enable( 15 );
368
+ if ( parameters.clearcoatMap )
369
+ _programLayers.enable( 16 );
370
+ if ( parameters.clearcoatRoughnessMap )
371
+ _programLayers.enable( 17 );
372
+ if ( parameters.clearcoatNormalMap )
373
+ _programLayers.enable( 18 );
374
+ if ( parameters.displacementMap )
375
+ _programLayers.enable( 19 );
376
+ if ( parameters.specularMap )
377
+ _programLayers.enable( 20 );
378
+ if ( parameters.roughnessMap )
379
+ _programLayers.enable( 21 );
380
+ if ( parameters.metalnessMap )
381
+ _programLayers.enable( 22 );
382
+ if ( parameters.gradientMap )
383
+ _programLayers.enable( 23 );
384
+ if ( parameters.alphaMap )
385
+ _programLayers.enable( 24 );
386
+ if ( parameters.alphaTest )
387
+ _programLayers.enable( 25 );
388
+ if ( parameters.vertexColors )
389
+ _programLayers.enable( 26 );
390
+ if ( parameters.vertexAlphas )
391
+ _programLayers.enable( 27 );
392
+ if ( parameters.vertexUvs )
393
+ _programLayers.enable( 28 );
394
+ if ( parameters.vertexTangents )
395
+ _programLayers.enable( 29 );
396
+ if ( parameters.uvsVertexOnly )
397
+ _programLayers.enable( 30 );
398
+ if ( parameters.fog )
399
+ _programLayers.enable( 31 );
400
+
401
+ array.push( _programLayers.mask );
402
+ _programLayers.disableAll();
403
+
404
+ if ( parameters.useFog )
405
+ _programLayers.enable( 0 );
406
+ if ( parameters.flatShading )
407
+ _programLayers.enable( 1 );
408
+ if ( parameters.logarithmicDepthBuffer )
409
+ _programLayers.enable( 2 );
410
+ if ( parameters.skinning )
411
+ _programLayers.enable( 3 );
412
+ if ( parameters.useVertexTexture )
413
+ _programLayers.enable( 4 );
414
+ if ( parameters.morphTargets )
415
+ _programLayers.enable( 5 );
416
+ if ( parameters.morphNormals )
417
+ _programLayers.enable( 6 );
418
+ if ( parameters.premultipliedAlpha )
419
+ _programLayers.enable( 7 );
420
+ if ( parameters.shadowMapEnabled )
421
+ _programLayers.enable( 8 );
422
+ if ( parameters.physicallyCorrectLights )
423
+ _programLayers.enable( 9 );
424
+ if ( parameters.doubleSided )
425
+ _programLayers.enable( 10 );
426
+ if ( parameters.flipSided )
427
+ _programLayers.enable( 11 );
428
+ if ( parameters.depthPacking )
429
+ _programLayers.enable( 12 );
430
+ if ( parameters.dithering )
431
+ _programLayers.enable( 13 );
432
+ if ( parameters.specularIntensityMap )
433
+ _programLayers.enable( 14 );
434
+ if ( parameters.specularColorMap )
435
+ _programLayers.enable( 15 );
436
+ if ( parameters.transmission )
437
+ _programLayers.enable( 16 );
438
+ if ( parameters.transmissionMap )
439
+ _programLayers.enable( 17 );
440
+ if ( parameters.thicknessMap )
441
+ _programLayers.enable( 18 );
442
+ if ( parameters.sheen )
443
+ _programLayers.enable( 19 );
444
+ if ( parameters.sheenColorMap )
445
+ _programLayers.enable( 20 );
446
+ if ( parameters.sheenRoughnessMap )
447
+ _programLayers.enable( 21 );
448
+ if ( parameters.decodeVideoTexture )
449
+ _programLayers.enable( 22 );
450
+
451
+ array.push( _programLayers.mask );
452
+
453
+ }
454
+
347
455
  function getUniforms( material ) {
348
456
 
349
457
  const shaderID = shaderIDs[ material.type ];
@@ -411,14 +519,28 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
411
519
 
412
520
  }
413
521
 
522
+ function releaseShaderCache( material ) {
523
+
524
+ _customShaders.remove( material );
525
+
526
+ }
527
+
528
+ function dispose() {
529
+
530
+ _customShaders.dispose();
531
+
532
+ }
533
+
414
534
  return {
415
535
  getParameters: getParameters,
416
536
  getProgramCacheKey: getProgramCacheKey,
417
537
  getUniforms: getUniforms,
418
538
  acquireProgram: acquireProgram,
419
539
  releaseProgram: releaseProgram,
540
+ releaseShaderCache: releaseShaderCache,
420
541
  // Exposed for resource monitoring & error feedback via renderer.info:
421
- programs: programs
542
+ programs: programs,
543
+ dispose: dispose
422
544
  };
423
545
 
424
546
  }
@@ -8,10 +8,6 @@ function painterSortStable( a, b ) {
8
8
 
9
9
  return a.renderOrder - b.renderOrder;
10
10
 
11
- } else if ( a.program !== b.program ) {
12
-
13
- return a.program.id - b.program.id;
14
-
15
11
  } else if ( a.material.id !== b.material.id ) {
16
12
 
17
13
  return a.material.id - b.material.id;
@@ -51,7 +47,7 @@ function reversePainterSortStable( a, b ) {
51
47
  }
52
48
 
53
49
 
54
- function WebGLRenderList( properties ) {
50
+ function WebGLRenderList() {
55
51
 
56
52
  const renderItems = [];
57
53
  let renderItemsIndex = 0;
@@ -60,8 +56,6 @@ function WebGLRenderList( properties ) {
60
56
  const transmissive = [];
61
57
  const transparent = [];
62
58
 
63
- const defaultProgram = { id: - 1 };
64
-
65
59
  function init() {
66
60
 
67
61
  renderItemsIndex = 0;
@@ -75,7 +69,6 @@ function WebGLRenderList( properties ) {
75
69
  function getNextRenderItem( object, geometry, material, groupOrder, z, group ) {
76
70
 
77
71
  let renderItem = renderItems[ renderItemsIndex ];
78
- const materialProperties = properties.get( material );
79
72
 
80
73
  if ( renderItem === undefined ) {
81
74
 
@@ -84,7 +77,6 @@ function WebGLRenderList( properties ) {
84
77
  object: object,
85
78
  geometry: geometry,
86
79
  material: material,
87
- program: materialProperties.program || defaultProgram,
88
80
  groupOrder: groupOrder,
89
81
  renderOrder: object.renderOrder,
90
82
  z: z,
@@ -99,7 +91,6 @@ function WebGLRenderList( properties ) {
99
91
  renderItem.object = object;
100
92
  renderItem.geometry = geometry;
101
93
  renderItem.material = material;
102
- renderItem.program = materialProperties.program || defaultProgram;
103
94
  renderItem.groupOrder = groupOrder;
104
95
  renderItem.renderOrder = object.renderOrder;
105
96
  renderItem.z = z;
@@ -175,7 +166,6 @@ function WebGLRenderList( properties ) {
175
166
  renderItem.object = null;
176
167
  renderItem.geometry = null;
177
168
  renderItem.material = null;
178
- renderItem.program = null;
179
169
  renderItem.group = null;
180
170
 
181
171
  }
@@ -198,7 +188,7 @@ function WebGLRenderList( properties ) {
198
188
 
199
189
  }
200
190
 
201
- function WebGLRenderLists( properties ) {
191
+ function WebGLRenderLists() {
202
192
 
203
193
  let lists = new WeakMap();
204
194
 
@@ -208,14 +198,14 @@ function WebGLRenderLists( properties ) {
208
198
 
209
199
  if ( lists.has( scene ) === false ) {
210
200
 
211
- list = new WebGLRenderList( properties );
201
+ list = new WebGLRenderList();
212
202
  lists.set( scene, [ list ] );
213
203
 
214
204
  } else {
215
205
 
216
206
  if ( renderCallDepth >= lists.get( scene ).length ) {
217
207
 
218
- list = new WebGLRenderList( properties );
208
+ list = new WebGLRenderList();
219
209
  lists.get( scene ).push( list );
220
210
 
221
211
  } else {