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
@@ -1,10 +1,14 @@
1
1
  import { BackSide, DoubleSide, CubeUVRefractionMapping, CubeUVReflectionMapping, LinearEncoding, sRGBEncoding, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, RGBAFormat, UnsignedByteType } 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;
@@ -143,6 +128,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
143
128
  }
144
129
 
145
130
  let vertexShader, fragmentShader;
131
+ let customVertexShaderID, customFragmentShaderID;
146
132
 
147
133
  if ( shaderID ) {
148
134
 
@@ -156,6 +142,11 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
156
142
  vertexShader = material.vertexShader;
157
143
  fragmentShader = material.fragmentShader;
158
144
 
145
+ _customShaders.update( material );
146
+
147
+ customVertexShaderID = _customShaders.getVertexShaderID( material );
148
+ customFragmentShaderID = _customShaders.getFragmentShaderID( material );
149
+
159
150
  }
160
151
 
161
152
  const currentRenderTarget = renderer.getRenderTarget();
@@ -174,6 +165,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
174
165
  fragmentShader: fragmentShader,
175
166
  defines: material.defines,
176
167
 
168
+ customVertexShaderID: customVertexShaderID,
169
+ customFragmentShaderID: customFragmentShaderID,
170
+
177
171
  isRawShaderMaterial: material.isRawShaderMaterial === true,
178
172
  glslVersion: material.glslVersion,
179
173
 
@@ -212,8 +206,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
212
206
  metalnessMap: !! material.metalnessMap,
213
207
  specularMap: !! material.specularMap,
214
208
  specularIntensityMap: !! material.specularIntensityMap,
215
- specularTintMap: !! material.specularTintMap,
216
- specularTintMapEncoding: getTextureEncodingFromMap( material.specularTintMap ),
209
+ specularColorMap: !! material.specularColorMap,
210
+ specularColorMapEncoding: getTextureEncodingFromMap( material.specularColorMap ),
217
211
 
218
212
  alphaMap: !! material.alphaMap,
219
213
  alphaTest: useAlphaTest,
@@ -221,6 +215,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
221
215
  gradientMap: !! material.gradientMap,
222
216
 
223
217
  sheen: material.sheen > 0,
218
+ sheenColorMap: !! material.sheenColorMap,
219
+ sheenColorMapEncoding: getTextureEncodingFromMap( material.sheenColorMap ),
220
+ sheenRoughnessMap: !! material.sheenRoughnessMap,
224
221
 
225
222
  transmission: material.transmission > 0,
226
223
  transmissionMap: !! material.transmissionMap,
@@ -231,8 +228,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
231
228
  vertexTangents: ( !! material.normalMap && !! object.geometry && !! object.geometry.attributes.tangent ),
232
229
  vertexColors: material.vertexColors,
233
230
  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,
231
+ 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,
232
+ 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
233
 
237
234
  fog: !! fog,
238
235
  useFog: material.fog,
@@ -309,8 +306,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
309
306
 
310
307
  } else {
311
308
 
312
- array.push( parameters.fragmentShader );
313
- array.push( parameters.vertexShader );
309
+ array.push( parameters.customVertexShaderID );
310
+ array.push( parameters.customFragmentShaderID );
314
311
 
315
312
  }
316
313
 
@@ -327,14 +324,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
327
324
 
328
325
  if ( parameters.isRawShaderMaterial === false ) {
329
326
 
330
- for ( let i = 0; i < parameterNames.length; i ++ ) {
331
-
332
- array.push( parameters[ parameterNames[ i ] ] );
333
-
334
- }
335
-
327
+ getProgramCacheKeyParameters( array, parameters );
328
+ getProgramCacheKeyBooleans( array, parameters );
336
329
  array.push( renderer.outputEncoding );
337
- array.push( renderer.gammaFactor );
338
330
 
339
331
  }
340
332
 
@@ -344,6 +336,161 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
344
336
 
345
337
  }
346
338
 
339
+ function getProgramCacheKeyParameters( array, parameters ) {
340
+
341
+ array.push( parameters.precision );
342
+ array.push( parameters.outputEncoding );
343
+ array.push( parameters.mapEncoding );
344
+ array.push( parameters.matcapEncoding );
345
+ array.push( parameters.envMapMode );
346
+ array.push( parameters.envMapEncoding );
347
+ array.push( parameters.lightMapEncoding );
348
+ array.push( parameters.emissiveMapEncoding );
349
+ array.push( parameters.combine );
350
+ array.push( parameters.vertexUvs );
351
+ array.push( parameters.fogExp2 );
352
+ array.push( parameters.sizeAttenuation );
353
+ array.push( parameters.maxBones );
354
+ array.push( parameters.morphTargetsCount );
355
+ array.push( parameters.numDirLights );
356
+ array.push( parameters.numPointLights );
357
+ array.push( parameters.numSpotLights );
358
+ array.push( parameters.numHemiLights );
359
+ array.push( parameters.numRectAreaLights );
360
+ array.push( parameters.numDirLightShadows );
361
+ array.push( parameters.numPointLightShadows );
362
+ array.push( parameters.numSpotLightShadows );
363
+ array.push( parameters.shadowMapType );
364
+ array.push( parameters.toneMapping );
365
+ array.push( parameters.numClippingPlanes );
366
+ array.push( parameters.numClipIntersection );
367
+ array.push( parameters.format );
368
+ array.push( parameters.specularColorMapEncoding );
369
+ array.push( parameters.sheenColorMapEncoding );
370
+
371
+ }
372
+
373
+ function getProgramCacheKeyBooleans( array, parameters ) {
374
+
375
+ _programLayers.disableAll();
376
+
377
+ if ( parameters.isWebGL2 )
378
+ _programLayers.enable( 0 );
379
+ if ( parameters.supportsVertexTextures )
380
+ _programLayers.enable( 1 );
381
+ if ( parameters.instancing )
382
+ _programLayers.enable( 2 );
383
+ if ( parameters.instancingColor )
384
+ _programLayers.enable( 3 );
385
+ if ( parameters.map )
386
+ _programLayers.enable( 4 );
387
+ if ( parameters.matcap )
388
+ _programLayers.enable( 5 );
389
+ if ( parameters.envMap )
390
+ _programLayers.enable( 6 );
391
+ if ( parameters.envMapCubeUV )
392
+ _programLayers.enable( 7 );
393
+ if ( parameters.lightMap )
394
+ _programLayers.enable( 8 );
395
+ if ( parameters.aoMap )
396
+ _programLayers.enable( 9 );
397
+ if ( parameters.emissiveMap )
398
+ _programLayers.enable( 10 );
399
+ if ( parameters.bumpMap )
400
+ _programLayers.enable( 11 );
401
+ if ( parameters.normalMap )
402
+ _programLayers.enable( 12 );
403
+ if ( parameters.objectSpaceNormalMap )
404
+ _programLayers.enable( 13 );
405
+ if ( parameters.tangentSpaceNormalMap )
406
+ _programLayers.enable( 14 );
407
+ if ( parameters.clearcoat )
408
+ _programLayers.enable( 15 );
409
+ if ( parameters.clearcoatMap )
410
+ _programLayers.enable( 16 );
411
+ if ( parameters.clearcoatRoughnessMap )
412
+ _programLayers.enable( 17 );
413
+ if ( parameters.clearcoatNormalMap )
414
+ _programLayers.enable( 18 );
415
+ if ( parameters.displacementMap )
416
+ _programLayers.enable( 19 );
417
+ if ( parameters.specularMap )
418
+ _programLayers.enable( 20 );
419
+ if ( parameters.roughnessMap )
420
+ _programLayers.enable( 21 );
421
+ if ( parameters.metalnessMap )
422
+ _programLayers.enable( 22 );
423
+ if ( parameters.gradientMap )
424
+ _programLayers.enable( 23 );
425
+ if ( parameters.alphaMap )
426
+ _programLayers.enable( 24 );
427
+ if ( parameters.alphaTest )
428
+ _programLayers.enable( 25 );
429
+ if ( parameters.vertexColors )
430
+ _programLayers.enable( 26 );
431
+ if ( parameters.vertexAlphas )
432
+ _programLayers.enable( 27 );
433
+ if ( parameters.vertexUvs )
434
+ _programLayers.enable( 28 );
435
+ if ( parameters.vertexTangents )
436
+ _programLayers.enable( 29 );
437
+ if ( parameters.uvsVertexOnly )
438
+ _programLayers.enable( 30 );
439
+ if ( parameters.fog )
440
+ _programLayers.enable( 31 );
441
+
442
+ array.push( _programLayers.mask );
443
+ _programLayers.disableAll();
444
+
445
+ if ( parameters.useFog )
446
+ _programLayers.enable( 0 );
447
+ if ( parameters.flatShading )
448
+ _programLayers.enable( 1 );
449
+ if ( parameters.logarithmicDepthBuffer )
450
+ _programLayers.enable( 2 );
451
+ if ( parameters.skinning )
452
+ _programLayers.enable( 3 );
453
+ if ( parameters.useVertexTexture )
454
+ _programLayers.enable( 4 );
455
+ if ( parameters.morphTargets )
456
+ _programLayers.enable( 5 );
457
+ if ( parameters.morphNormals )
458
+ _programLayers.enable( 6 );
459
+ if ( parameters.premultipliedAlpha )
460
+ _programLayers.enable( 7 );
461
+ if ( parameters.shadowMapEnabled )
462
+ _programLayers.enable( 8 );
463
+ if ( parameters.physicallyCorrectLights )
464
+ _programLayers.enable( 9 );
465
+ if ( parameters.doubleSided )
466
+ _programLayers.enable( 10 );
467
+ if ( parameters.flipSided )
468
+ _programLayers.enable( 11 );
469
+ if ( parameters.depthPacking )
470
+ _programLayers.enable( 12 );
471
+ if ( parameters.dithering )
472
+ _programLayers.enable( 13 );
473
+ if ( parameters.specularIntensityMap )
474
+ _programLayers.enable( 14 );
475
+ if ( parameters.specularColorMap )
476
+ _programLayers.enable( 15 );
477
+ if ( parameters.transmission )
478
+ _programLayers.enable( 16 );
479
+ if ( parameters.transmissionMap )
480
+ _programLayers.enable( 17 );
481
+ if ( parameters.thicknessMap )
482
+ _programLayers.enable( 18 );
483
+ if ( parameters.sheen )
484
+ _programLayers.enable( 19 );
485
+ if ( parameters.sheenColorMap )
486
+ _programLayers.enable( 20 );
487
+ if ( parameters.sheenRoughnessMap )
488
+ _programLayers.enable( 21 );
489
+
490
+ array.push( _programLayers.mask );
491
+
492
+ }
493
+
347
494
  function getUniforms( material ) {
348
495
 
349
496
  const shaderID = shaderIDs[ material.type ];
@@ -411,14 +558,28 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
411
558
 
412
559
  }
413
560
 
561
+ function releaseShaderCache( material ) {
562
+
563
+ _customShaders.remove( material );
564
+
565
+ }
566
+
567
+ function dispose() {
568
+
569
+ _customShaders.dispose();
570
+
571
+ }
572
+
414
573
  return {
415
574
  getParameters: getParameters,
416
575
  getProgramCacheKey: getProgramCacheKey,
417
576
  getUniforms: getUniforms,
418
577
  acquireProgram: acquireProgram,
419
578
  releaseProgram: releaseProgram,
579
+ releaseShaderCache: releaseShaderCache,
420
580
  // Exposed for resource monitoring & error feedback via renderer.info:
421
- programs: programs
581
+ programs: programs,
582
+ dispose: dispose
422
583
  };
423
584
 
424
585
  }
@@ -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 {
@@ -0,0 +1,120 @@
1
+ let _id = 0;
2
+
3
+ class WebGLShaderCache {
4
+
5
+ constructor() {
6
+
7
+ this.shaderCache = new Map();
8
+ this.materialCache = new Map();
9
+
10
+ }
11
+
12
+ update( material ) {
13
+
14
+ const vertexShader = material.vertexShader;
15
+ const fragmentShader = material.fragmentShader;
16
+
17
+ const vertexShaderStage = this._getShaderStage( vertexShader );
18
+ const fragmentShaderStage = this._getShaderStage( fragmentShader );
19
+
20
+ const materialShaders = this._getShaderCacheForMaterial( material );
21
+
22
+ if ( materialShaders.has( vertexShaderStage ) === false ) {
23
+
24
+ materialShaders.add( vertexShaderStage );
25
+ vertexShaderStage.usedTimes ++;
26
+
27
+ }
28
+
29
+ if ( materialShaders.has( fragmentShaderStage ) === false ) {
30
+
31
+ materialShaders.add( fragmentShaderStage );
32
+ fragmentShaderStage.usedTimes ++;
33
+
34
+ }
35
+
36
+ return this;
37
+
38
+ }
39
+
40
+ remove( material ) {
41
+
42
+ const materialShaders = this.materialCache.get( material );
43
+
44
+ for ( const shaderStage of materialShaders ) {
45
+
46
+ shaderStage.usedTimes --;
47
+
48
+ if ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage );
49
+
50
+ }
51
+
52
+ this.materialCache.delete( material );
53
+
54
+ return this;
55
+
56
+ }
57
+
58
+ getVertexShaderID( material ) {
59
+
60
+ return this._getShaderStage( material.vertexShader ).id;
61
+
62
+ }
63
+
64
+ getFragmentShaderID( material ) {
65
+
66
+ return this._getShaderStage( material.fragmentShader ).id;
67
+
68
+ }
69
+
70
+ dispose() {
71
+
72
+ this.shaderCache.clear();
73
+ this.materialCache.clear();
74
+
75
+ }
76
+
77
+ _getShaderCacheForMaterial( material ) {
78
+
79
+ const cache = this.materialCache;
80
+
81
+ if ( cache.has( material ) === false ) {
82
+
83
+ cache.set( material, new Set() );
84
+
85
+ }
86
+
87
+ return cache.get( material );
88
+
89
+ }
90
+
91
+ _getShaderStage( code ) {
92
+
93
+ const cache = this.shaderCache;
94
+
95
+ if ( cache.has( code ) === false ) {
96
+
97
+ const stage = new WebGLShaderStage();
98
+ cache.set( code, stage );
99
+
100
+ }
101
+
102
+ return cache.get( code );
103
+
104
+ }
105
+
106
+ }
107
+
108
+ class WebGLShaderStage {
109
+
110
+ constructor() {
111
+
112
+ this.id = _id ++;
113
+
114
+ this.usedTimes = 0;
115
+
116
+ }
117
+
118
+ }
119
+
120
+ export { WebGLShaderCache };
@@ -31,12 +31,13 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
31
31
  const shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };
32
32
 
33
33
  const shadowMaterialVertical = new ShaderMaterial( {
34
-
34
+ defines: {
35
+ VSM_SAMPLES: 8
36
+ },
35
37
  uniforms: {
36
38
  shadow_pass: { value: null },
37
39
  resolution: { value: new Vector2() },
38
- radius: { value: 4.0 },
39
- samples: { value: 8.0 }
40
+ radius: { value: 4.0 }
40
41
  },
41
42
 
42
43
  vertexShader: vsm.vertex,
@@ -202,12 +203,21 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
202
203
 
203
204
  const geometry = _objects.update( fullScreenMesh );
204
205
 
206
+ if ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {
207
+
208
+ shadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;
209
+ shadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;
210
+
211
+ shadowMaterialVertical.needsUpdate = true;
212
+ shadowMaterialHorizontal.needsUpdate = true;
213
+
214
+ }
215
+
205
216
  // vertical pass
206
217
 
207
218
  shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;
208
219
  shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;
209
220
  shadowMaterialVertical.uniforms.radius.value = shadow.radius;
210
- shadowMaterialVertical.uniforms.samples.value = shadow.blurSamples;
211
221
  _renderer.setRenderTarget( shadow.mapPass );
212
222
  _renderer.clear();
213
223
  _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );
@@ -217,7 +227,6 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
217
227
  shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;
218
228
  shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;
219
229
  shadowMaterialHorizontal.uniforms.radius.value = shadow.radius;
220
- shadowMaterialHorizontal.uniforms.samples.value = shadow.blurSamples;
221
230
  _renderer.setRenderTarget( shadow.map );
222
231
  _renderer.clear();
223
232
  _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );