super-three 0.141.0 → 0.144.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 (353) hide show
  1. package/README.md +8 -8
  2. package/build/three.cjs +1558 -1034
  3. package/build/three.js +1558 -1034
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +2012 -1243
  6. package/examples/js/animation/MMDPhysics.js +1 -16
  7. package/examples/js/controls/ArcballControls.js +16 -3
  8. package/examples/js/controls/FirstPersonControls.js +0 -7
  9. package/examples/js/controls/FlyControls.js +0 -8
  10. package/examples/js/controls/OrbitControls.js +0 -4
  11. package/examples/js/controls/PointerLockControls.js +0 -8
  12. package/examples/js/controls/TrackballControls.js +0 -2
  13. package/examples/js/controls/TransformControls.js +20 -16
  14. package/examples/js/effects/AnaglyphEffect.js +2 -2
  15. package/examples/js/effects/OutlineEffect.js +4 -24
  16. package/examples/js/effects/ParallaxBarrierEffect.js +2 -2
  17. package/examples/js/effects/PeppersGhostEffect.js +2 -2
  18. package/examples/js/effects/StereoEffect.js +2 -2
  19. package/examples/js/environments/RoomEnvironment.js +22 -0
  20. package/examples/js/exporters/ColladaExporter.js +4 -13
  21. package/examples/js/exporters/DRACOExporter.js +0 -12
  22. package/examples/js/exporters/GLTFExporter.js +28 -29
  23. package/examples/js/exporters/OBJExporter.js +2 -23
  24. package/examples/js/exporters/PLYExporter.js +12 -24
  25. package/examples/js/exporters/STLExporter.js +0 -7
  26. package/examples/js/exporters/USDZExporter.js +6 -0
  27. package/examples/js/geometries/ConvexGeometry.js +1 -1
  28. package/examples/js/geometries/ParametricGeometry.js +1 -8
  29. package/examples/js/interactive/SelectionHelper.js +2 -0
  30. package/examples/js/libs/ktx-parse.umd.js +1 -0
  31. package/examples/js/libs/meshopt_decoder.js +98 -32
  32. package/examples/js/loaders/ColladaLoader.js +1 -0
  33. package/examples/js/loaders/DRACOLoader.js +2 -25
  34. package/examples/js/loaders/EXRLoader.js +2 -13
  35. package/examples/js/loaders/FBXLoader.js +10 -3
  36. package/examples/js/loaders/FontLoader.js +3 -16
  37. package/examples/js/loaders/GLTFLoader.js +52 -36
  38. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -11
  39. package/examples/js/loaders/LDrawLoader.js +139 -74
  40. package/examples/js/loaders/OBJLoader.js +7 -13
  41. package/examples/js/loaders/PCDLoader.js +59 -14
  42. package/examples/js/loaders/PLYLoader.js +3 -3
  43. package/examples/js/loaders/SVGLoader.js +4 -3
  44. package/examples/js/loaders/TIFFLoader.js +31 -0
  45. package/examples/js/loaders/VRMLLoader.js +33 -24
  46. package/examples/js/loaders/VTKLoader.js +1 -1
  47. package/examples/js/loaders/lwo/LWO2Parser.js +8 -7
  48. package/examples/js/loaders/lwo/LWO3Parser.js +8 -7
  49. package/examples/js/materials/MeshGouraudMaterial.js +385 -0
  50. package/examples/js/math/ColorConverter.js +0 -50
  51. package/examples/js/misc/GPUComputationRenderer.js +23 -0
  52. package/examples/js/misc/Volume.js +198 -190
  53. package/examples/js/misc/VolumeSlice.js +90 -88
  54. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  55. package/examples/js/objects/GroundProjectedEnv.js +193 -0
  56. package/examples/js/objects/Reflector.js +9 -2
  57. package/examples/js/objects/ReflectorForSSRPass.js +3 -4
  58. package/examples/js/objects/Refractor.js +10 -4
  59. package/examples/js/objects/ShadowMesh.js +5 -1
  60. package/examples/js/postprocessing/OutlinePass.js +5 -3
  61. package/examples/js/renderers/CSS2DRenderer.js +2 -2
  62. package/examples/js/renderers/CSS3DRenderer.js +2 -2
  63. package/examples/js/renderers/Projector.js +2 -23
  64. package/examples/js/shaders/LuminosityShader.js +1 -1
  65. package/examples/js/shaders/MMDToonShader.js +6 -2
  66. package/examples/js/shaders/ToneMapShader.js +1 -1
  67. package/examples/js/utils/BufferGeometryUtils.js +1 -1
  68. package/examples/js/utils/GeometryUtils.js +2 -18
  69. package/examples/js/utils/PackedPhongMaterial.js +1 -1
  70. package/examples/js/utils/SceneUtils.js +0 -16
  71. package/examples/jsm/animation/MMDPhysics.js +3 -22
  72. package/examples/jsm/controls/ArcballControls.js +17 -2
  73. package/examples/jsm/controls/FirstPersonControls.js +0 -7
  74. package/examples/jsm/controls/FlyControls.js +0 -7
  75. package/examples/jsm/controls/OrbitControls.js +0 -5
  76. package/examples/jsm/controls/PointerLockControls.js +0 -7
  77. package/examples/jsm/controls/TrackballControls.js +0 -3
  78. package/examples/jsm/controls/TransformControls.js +18 -16
  79. package/examples/jsm/effects/AnaglyphEffect.js +2 -2
  80. package/examples/jsm/effects/OutlineEffect.js +4 -25
  81. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  82. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  83. package/examples/jsm/effects/StereoEffect.js +2 -2
  84. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  85. package/examples/jsm/exporters/ColladaExporter.js +4 -13
  86. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  87. package/examples/jsm/exporters/GLTFExporter.js +29 -31
  88. package/examples/jsm/exporters/KTX2Exporter.js +29 -29
  89. package/examples/jsm/exporters/OBJExporter.js +0 -18
  90. package/examples/jsm/exporters/PLYExporter.js +14 -22
  91. package/examples/jsm/exporters/STLExporter.js +1 -9
  92. package/examples/jsm/exporters/USDZExporter.js +14 -3
  93. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  94. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  95. package/examples/jsm/interactive/HTMLMesh.js +9 -9
  96. package/examples/jsm/interactive/SelectionHelper.js +5 -3
  97. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  98. package/examples/jsm/libs/utif.module.js +1579 -0
  99. package/examples/jsm/libs/zstddec.module.js +1 -0
  100. package/examples/jsm/loaders/ColladaLoader.js +1 -0
  101. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  102. package/examples/jsm/loaders/EXRLoader.js +3 -13
  103. package/examples/jsm/loaders/FBXLoader.js +10 -3
  104. package/examples/jsm/loaders/FontLoader.js +3 -16
  105. package/examples/jsm/loaders/GLTFLoader.js +52 -36
  106. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  107. package/examples/jsm/loaders/KTX2Loader.js +192 -30
  108. package/examples/jsm/loaders/LDrawLoader.js +135 -74
  109. package/examples/jsm/loaders/OBJLoader.js +6 -14
  110. package/examples/jsm/loaders/PCDLoader.js +59 -13
  111. package/examples/jsm/loaders/PLYLoader.js +3 -3
  112. package/examples/jsm/loaders/RGBELoader.js +1 -1
  113. package/examples/jsm/loaders/SVGLoader.js +4 -3
  114. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  115. package/examples/jsm/loaders/USDZLoader.js +393 -0
  116. package/examples/jsm/loaders/VRMLLoader.js +23 -25
  117. package/examples/jsm/loaders/VTKLoader.js +1 -1
  118. package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
  119. package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
  120. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  121. package/examples/jsm/math/ColorConverter.js +1 -49
  122. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  123. package/examples/jsm/misc/Volume.js +169 -171
  124. package/examples/jsm/misc/VolumeSlice.js +78 -80
  125. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  126. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
  127. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  128. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  129. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  130. package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
  131. package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
  132. package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
  133. package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
  134. package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
  135. package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
  136. package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
  137. package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
  138. package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
  139. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +1 -1
  140. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
  141. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +1 -1
  142. package/examples/jsm/node-editor/math/AngleEditor.js +1 -1
  143. package/examples/jsm/node-editor/math/DotEditor.js +1 -1
  144. package/examples/jsm/node-editor/math/InvertEditor.js +1 -1
  145. package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
  146. package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
  147. package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
  148. package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
  149. package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
  150. package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
  151. package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
  152. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  153. package/examples/jsm/node-editor/utils/PreviewEditor.js +3 -3
  154. package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
  155. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  156. package/examples/jsm/nodes/Nodes.js +43 -13
  157. package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
  158. package/examples/jsm/nodes/accessors/NormalNode.js +4 -4
  159. package/examples/jsm/nodes/accessors/PositionNode.js +5 -5
  160. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  161. package/examples/jsm/nodes/core/AttributeNode.js +3 -3
  162. package/examples/jsm/nodes/core/CodeNode.js +3 -3
  163. package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
  164. package/examples/jsm/nodes/core/FunctionNode.js +2 -2
  165. package/examples/jsm/nodes/core/Node.js +14 -12
  166. package/examples/jsm/nodes/core/NodeBuilder.js +12 -12
  167. package/examples/jsm/nodes/core/NodeUtils.js +23 -1
  168. package/examples/jsm/nodes/core/{NodeVary.js → NodeVarying.js} +3 -3
  169. package/examples/jsm/nodes/core/{VaryNode.js → VaryingNode.js} +7 -7
  170. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +94 -0
  171. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  172. package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -0
  173. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
  174. package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
  175. package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
  176. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +31 -0
  177. package/examples/jsm/nodes/materials/Materials.js +13 -25
  178. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  179. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
  180. package/examples/jsm/nodes/materials/NodeMaterial.js +2 -2
  181. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
  182. package/examples/jsm/nodes/materialx/Disclaimer.md +199 -0
  183. package/examples/jsm/nodes/materialx/functions/lib/mx_hsv.js +56 -0
  184. package/examples/jsm/nodes/materialx/functions/lib/mx_noise.js +607 -0
  185. package/examples/jsm/nodes/math/MathNode.js +2 -12
  186. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
  187. package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
  188. package/examples/jsm/nodes/shadernode/ShaderNode.js +5 -5
  189. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +8 -5
  190. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +20 -6
  191. package/examples/jsm/nodes/utils/ConvertNode.js +8 -3
  192. package/examples/jsm/nodes/utils/JoinNode.js +7 -7
  193. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +2 -1
  194. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  195. package/examples/jsm/nodes/utils/SplitNode.js +21 -5
  196. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  197. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  198. package/examples/jsm/objects/Reflector.js +12 -5
  199. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
  200. package/examples/jsm/objects/Refractor.js +12 -6
  201. package/examples/jsm/objects/ShadowMesh.js +8 -2
  202. package/examples/jsm/postprocessing/OutlinePass.js +5 -3
  203. package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
  204. package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
  205. package/examples/jsm/renderers/Projector.js +2 -24
  206. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  207. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +329 -218
  208. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
  209. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +39 -3
  210. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
  211. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  212. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  213. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
  214. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
  215. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
  216. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +66 -81
  217. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
  218. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
  219. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  220. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +25 -30
  221. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  222. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  223. package/examples/jsm/shaders/MMDToonShader.js +2 -2
  224. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  225. package/examples/jsm/utils/BufferGeometryUtils.js +2 -1
  226. package/examples/jsm/utils/GeometryUtils.js +17 -25
  227. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  228. package/examples/jsm/utils/SceneUtils.js +1 -21
  229. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
  230. package/examples/jsm/webxr/VRButton.js +1 -7
  231. package/package.json +18 -14
  232. package/src/Three.Legacy.js +262 -36
  233. package/src/Three.js +3 -2
  234. package/src/animation/AnimationAction.js +6 -5
  235. package/src/animation/AnimationClip.js +1 -1
  236. package/src/animation/AnimationMixer.js +1 -1
  237. package/src/animation/AnimationUtils.js +204 -199
  238. package/src/animation/KeyframeTrack.js +1 -1
  239. package/src/animation/PropertyBinding.js +24 -5
  240. package/src/cameras/CubeCamera.js +0 -7
  241. package/src/constants.js +2 -4
  242. package/src/core/BufferAttribute.js +81 -111
  243. package/src/core/BufferGeometry.js +3 -41
  244. package/src/core/InstancedBufferAttribute.js +0 -10
  245. package/src/core/InterleavedBuffer.js +1 -1
  246. package/src/core/InterleavedBufferAttribute.js +56 -7
  247. package/src/core/Object3D.js +22 -5
  248. package/src/core/Uniform.js +0 -7
  249. package/src/core/UniformsGroup.js +92 -0
  250. package/src/extras/DataUtils.js +104 -88
  251. package/src/extras/core/Path.js +1 -0
  252. package/src/extras/core/ShapePath.js +1 -4
  253. package/src/extras/curves/CatmullRomCurve3.js +4 -2
  254. package/src/geometries/BoxGeometry.js +1 -1
  255. package/src/geometries/CapsuleGeometry.js +1 -1
  256. package/src/geometries/CircleGeometry.js +1 -1
  257. package/src/geometries/ConeGeometry.js +1 -1
  258. package/src/geometries/CylinderGeometry.js +2 -1
  259. package/src/geometries/DodecahedronGeometry.js +1 -1
  260. package/src/geometries/EdgesGeometry.js +5 -4
  261. package/src/geometries/ExtrudeGeometry.js +2 -11
  262. package/src/geometries/IcosahedronGeometry.js +1 -1
  263. package/src/geometries/LatheGeometry.js +2 -2
  264. package/src/geometries/OctahedronGeometry.js +1 -1
  265. package/src/geometries/PlaneGeometry.js +2 -1
  266. package/src/geometries/PolyhedronGeometry.js +1 -1
  267. package/src/geometries/RingGeometry.js +1 -1
  268. package/src/geometries/ShapeGeometry.js +2 -1
  269. package/src/geometries/SphereGeometry.js +2 -1
  270. package/src/geometries/TetrahedronGeometry.js +1 -1
  271. package/src/geometries/TorusGeometry.js +2 -1
  272. package/src/geometries/TorusKnotGeometry.js +2 -1
  273. package/src/geometries/TubeGeometry.js +2 -1
  274. package/src/geometries/WireframeGeometry.js +1 -0
  275. package/src/helpers/CameraHelper.js +97 -38
  276. package/src/helpers/DirectionalLightHelper.js +1 -0
  277. package/src/helpers/HemisphereLightHelper.js +1 -0
  278. package/src/helpers/PlaneHelper.js +6 -9
  279. package/src/helpers/PolarGridHelper.js +18 -14
  280. package/src/helpers/SpotLightHelper.js +1 -0
  281. package/src/lights/SpotLight.js +2 -0
  282. package/src/loaders/FileLoader.js +12 -1
  283. package/src/loaders/LoadingManager.js +1 -1
  284. package/src/loaders/MaterialLoader.js +49 -7
  285. package/src/loaders/ObjectLoader.js +4 -41
  286. package/src/materials/Material.js +1 -33
  287. package/src/materials/Materials.js +0 -27
  288. package/src/materials/MeshLambertMaterial.js +28 -1
  289. package/src/materials/ShaderMaterial.js +3 -7
  290. package/src/math/Color.js +3 -13
  291. package/src/math/MathUtils.js +1 -7
  292. package/src/math/Matrix3.js +1 -7
  293. package/src/math/Matrix4.js +3 -27
  294. package/src/math/Quaternion.js +1 -21
  295. package/src/math/Vector2.js +4 -24
  296. package/src/math/Vector3.js +7 -46
  297. package/src/math/Vector4.js +4 -24
  298. package/src/renderers/WebGLRenderer.js +84 -8
  299. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
  300. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  301. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
  302. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
  303. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  304. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  305. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  306. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
  307. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -12
  308. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  309. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +30 -0
  310. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
  311. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
  312. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  313. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  314. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  315. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  316. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  317. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  318. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  319. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  320. package/src/renderers/shaders/ShaderChunk.js +4 -2
  321. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
  322. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
  323. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  324. package/src/renderers/shaders/ShaderLib.js +31 -31
  325. package/src/renderers/shaders/UniformsLib.js +12 -11
  326. package/src/renderers/shaders/UniformsUtils.js +14 -0
  327. package/src/renderers/webgl/WebGLBackground.js +2 -2
  328. package/src/renderers/webgl/WebGLLights.js +37 -13
  329. package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
  330. package/src/renderers/webgl/WebGLProgram.js +6 -11
  331. package/src/renderers/webgl/WebGLPrograms.js +30 -26
  332. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  333. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  334. package/src/renderers/webgl/WebGLShaderCache.js +9 -6
  335. package/src/renderers/webgl/WebGLShadowMap.js +10 -15
  336. package/src/renderers/webgl/WebGLState.js +47 -0
  337. package/src/renderers/webgl/WebGLUniforms.js +4 -4
  338. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  339. package/src/renderers/webgl/WebGLUtils.js +2 -0
  340. package/src/renderers/webvr/WebVRManager.js +42 -9
  341. package/src/renderers/webvr/WebVRUtils.js +1 -1
  342. package/src/renderers/webxr/WebXRController.js +45 -37
  343. package/src/renderers/webxr/WebXRManager.js +58 -33
  344. package/src/scenes/Scene.js +16 -3
  345. package/src/textures/Source.js +1 -1
  346. package/src/utils.js +1 -1
  347. package/examples/js/controls/experimental/CameraControls.js +0 -1048
  348. package/examples/js/loaders/KTX2Loader.js +0 -558
  349. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  350. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
  351. package/examples/jsm/package.json +0 -3
  352. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  353. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -144,9 +144,9 @@ function ShadowUniformsCache() {
144
144
 
145
145
  let nextVersion = 0;
146
146
 
147
- function shadowCastingLightsFirst( lightA, lightB ) {
147
+ function shadowCastingAndTexturingLightsFirst( lightA, lightB ) {
148
148
 
149
- return ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 );
149
+ return ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 );
150
150
 
151
151
  }
152
152
 
@@ -169,7 +169,8 @@ function WebGLLights( extensions, capabilities ) {
169
169
 
170
170
  numDirectionalShadows: - 1,
171
171
  numPointShadows: - 1,
172
- numSpotShadows: - 1
172
+ numSpotShadows: - 1,
173
+ numSpotMaps: - 1
173
174
  },
174
175
 
175
176
  ambient: [ 0, 0, 0 ],
@@ -179,9 +180,10 @@ function WebGLLights( extensions, capabilities ) {
179
180
  directionalShadowMap: [],
180
181
  directionalShadowMatrix: [],
181
182
  spot: [],
183
+ spotLightMap: [],
182
184
  spotShadow: [],
183
185
  spotShadowMap: [],
184
- spotShadowMatrix: [],
186
+ spotLightMatrix: [],
185
187
  rectArea: [],
186
188
  rectAreaLTC1: null,
187
189
  rectAreaLTC2: null,
@@ -189,7 +191,8 @@ function WebGLLights( extensions, capabilities ) {
189
191
  pointShadow: [],
190
192
  pointShadowMap: [],
191
193
  pointShadowMatrix: [],
192
- hemi: []
194
+ hemi: [],
195
+ numSpotLightShadowsWithMaps: 0
193
196
 
194
197
  };
195
198
 
@@ -214,8 +217,11 @@ function WebGLLights( extensions, capabilities ) {
214
217
  let numDirectionalShadows = 0;
215
218
  let numPointShadows = 0;
216
219
  let numSpotShadows = 0;
220
+ let numSpotMaps = 0;
221
+ let numSpotShadowsWithMaps = 0;
217
222
 
218
- lights.sort( shadowCastingLightsFirst );
223
+ // ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]
224
+ lights.sort( shadowCastingAndTexturingLightsFirst );
219
225
 
220
226
  // artist-friendly light intensity scaling factor
221
227
  const scaleFactor = ( physicallyCorrectLights !== true ) ? Math.PI : 1;
@@ -286,9 +292,26 @@ function WebGLLights( extensions, capabilities ) {
286
292
  uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );
287
293
  uniforms.decay = light.decay;
288
294
 
289
- if ( light.castShadow ) {
295
+ state.spot[ spotLength ] = uniforms;
290
296
 
291
- const shadow = light.shadow;
297
+ const shadow = light.shadow;
298
+
299
+ if ( light.map ) {
300
+
301
+ state.spotLightMap[ numSpotMaps ] = light.map;
302
+ numSpotMaps ++;
303
+
304
+ // make sure the lightMatrix is up to date
305
+ // TODO : do it if required only
306
+ shadow.updateMatrices( light );
307
+
308
+ if ( light.castShadow ) numSpotShadowsWithMaps ++;
309
+
310
+ }
311
+
312
+ state.spotLightMatrix[ spotLength ] = shadow.matrix;
313
+
314
+ if ( light.castShadow ) {
292
315
 
293
316
  const shadowUniforms = shadowCache.get( light );
294
317
 
@@ -299,14 +322,11 @@ function WebGLLights( extensions, capabilities ) {
299
322
 
300
323
  state.spotShadow[ spotLength ] = shadowUniforms;
301
324
  state.spotShadowMap[ spotLength ] = shadowMap;
302
- state.spotShadowMatrix[ spotLength ] = light.shadow.matrix;
303
325
 
304
326
  numSpotShadows ++;
305
327
 
306
328
  }
307
329
 
308
- state.spot[ spotLength ] = uniforms;
309
-
310
330
  spotLength ++;
311
331
 
312
332
  } else if ( light.isRectAreaLight ) {
@@ -420,7 +440,8 @@ function WebGLLights( extensions, capabilities ) {
420
440
  hash.hemiLength !== hemiLength ||
421
441
  hash.numDirectionalShadows !== numDirectionalShadows ||
422
442
  hash.numPointShadows !== numPointShadows ||
423
- hash.numSpotShadows !== numSpotShadows ) {
443
+ hash.numSpotShadows !== numSpotShadows ||
444
+ hash.numSpotMaps !== numSpotMaps ) {
424
445
 
425
446
  state.directional.length = directionalLength;
426
447
  state.spot.length = spotLength;
@@ -436,7 +457,9 @@ function WebGLLights( extensions, capabilities ) {
436
457
  state.spotShadowMap.length = numSpotShadows;
437
458
  state.directionalShadowMatrix.length = numDirectionalShadows;
438
459
  state.pointShadowMatrix.length = numPointShadows;
439
- state.spotShadowMatrix.length = numSpotShadows;
460
+ state.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;
461
+ state.spotLightMap.length = numSpotMaps;
462
+ state.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;
440
463
 
441
464
  hash.directionalLength = directionalLength;
442
465
  hash.pointLength = pointLength;
@@ -447,6 +470,7 @@ function WebGLLights( extensions, capabilities ) {
447
470
  hash.numDirectionalShadows = numDirectionalShadows;
448
471
  hash.numPointShadows = numPointShadows;
449
472
  hash.numSpotShadows = numSpotShadows;
473
+ hash.numSpotMaps = numSpotMaps;
450
474
 
451
475
  state.version = nextVersion ++;
452
476
 
@@ -15,20 +15,6 @@ function absNumericalSort( a, b ) {
15
15
 
16
16
  }
17
17
 
18
- function denormalize( morph, attribute ) {
19
-
20
- let denominator = 1;
21
- const array = attribute.isInterleavedBufferAttribute ? attribute.data.array : attribute.array;
22
-
23
- if ( array instanceof Int8Array ) denominator = 127;
24
- else if ( array instanceof Int16Array ) denominator = 32767;
25
- else if ( array instanceof Int32Array ) denominator = 2147483647;
26
- else console.error( 'THREE.WebGLMorphtargets: Unsupported morph attribute data type: ', array );
27
-
28
- morph.divideScalar( denominator );
29
-
30
- }
31
-
32
18
  function WebGLMorphtargets( gl, capabilities, textures ) {
33
19
 
34
20
  const influencesList = {};
@@ -112,8 +98,6 @@ function WebGLMorphtargets( gl, capabilities, textures ) {
112
98
 
113
99
  morph.fromBufferAttribute( morphTarget, j );
114
100
 
115
- if ( morphTarget.normalized === true ) denormalize( morph, morphTarget );
116
-
117
101
  buffer[ offset + stride + 0 ] = morph.x;
118
102
  buffer[ offset + stride + 1 ] = morph.y;
119
103
  buffer[ offset + stride + 2 ] = morph.z;
@@ -125,8 +109,6 @@ function WebGLMorphtargets( gl, capabilities, textures ) {
125
109
 
126
110
  morph.fromBufferAttribute( morphNormal, j );
127
111
 
128
- if ( morphNormal.normalized === true ) denormalize( morph, morphNormal );
129
-
130
112
  buffer[ offset + stride + 4 ] = morph.x;
131
113
  buffer[ offset + stride + 5 ] = morph.y;
132
114
  buffer[ offset + stride + 6 ] = morph.z;
@@ -138,8 +120,6 @@ function WebGLMorphtargets( gl, capabilities, textures ) {
138
120
 
139
121
  morph.fromBufferAttribute( morphColor, j );
140
122
 
141
- if ( morphColor.normalized === true ) denormalize( morph, morphColor );
142
-
143
123
  buffer[ offset + stride + 8 ] = morph.x;
144
124
  buffer[ offset + stride + 9 ] = morph.y;
145
125
  buffer[ offset + stride + 10 ] = morph.z;
@@ -176,13 +176,18 @@ function filterEmptyLine( string ) {
176
176
 
177
177
  function replaceLightNums( string, parameters ) {
178
178
 
179
+ const numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;
180
+
179
181
  return string
180
182
  .replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )
181
183
  .replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )
184
+ .replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )
185
+ .replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )
182
186
  .replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )
183
187
  .replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )
184
188
  .replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )
185
189
  .replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )
190
+ .replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )
186
191
  .replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )
187
192
  .replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );
188
193
 
@@ -222,21 +227,11 @@ function includeReplacer( match, include ) {
222
227
 
223
228
  // Unroll Loops
224
229
 
225
- const deprecatedUnrollLoopPattern = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g;
226
230
  const unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;
227
231
 
228
232
  function unrollLoops( string ) {
229
233
 
230
- return string
231
- .replace( unrollLoopPattern, loopReplacer )
232
- .replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer );
233
-
234
- }
235
-
236
- function deprecatedLoopReplacer( match, start, end, snippet ) {
237
-
238
- console.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' );
239
- return loopReplacer( match, start, end, snippet );
234
+ return string.replace( unrollLoopPattern, loopReplacer );
240
235
 
241
236
  }
242
237
 
@@ -199,12 +199,14 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
199
199
  numDirLights: lights.directional.length,
200
200
  numPointLights: lights.point.length,
201
201
  numSpotLights: lights.spot.length,
202
+ numSpotLightMaps: lights.spotLightMap.length,
202
203
  numRectAreaLights: lights.rectArea.length,
203
204
  numHemiLights: lights.hemi.length,
204
205
 
205
206
  numDirLightShadows: lights.directionalShadowMap.length,
206
207
  numPointLightShadows: lights.pointShadowMap.length,
207
208
  numSpotLightShadows: lights.spotShadowMap.length,
209
+ numSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,
208
210
 
209
211
  numClippingPlanes: clipping.numPlanes,
210
212
  numClipIntersection: clipping.numIntersection,
@@ -299,11 +301,13 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
299
301
  array.push( parameters.numDirLights );
300
302
  array.push( parameters.numPointLights );
301
303
  array.push( parameters.numSpotLights );
304
+ array.push( parameters.numSpotLightMaps );
302
305
  array.push( parameters.numHemiLights );
303
306
  array.push( parameters.numRectAreaLights );
304
307
  array.push( parameters.numDirLightShadows );
305
308
  array.push( parameters.numPointLightShadows );
306
309
  array.push( parameters.numSpotLightShadows );
310
+ array.push( parameters.numSpotLightShadowsWithMaps );
307
311
  array.push( parameters.shadowMapType );
308
312
  array.push( parameters.toneMapping );
309
313
  array.push( parameters.numClippingPlanes );
@@ -382,60 +386,60 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
382
386
  _programLayers.enable( 31 );
383
387
  if ( parameters.uvsVertexOnly )
384
388
  _programLayers.enable( 32 );
385
- if ( parameters.fog )
386
- _programLayers.enable( 33 );
387
389
 
388
390
  array.push( _programLayers.mask );
389
391
  _programLayers.disableAll();
390
392
 
391
- if ( parameters.useFog )
393
+ if ( parameters.fog )
392
394
  _programLayers.enable( 0 );
393
- if ( parameters.flatShading )
395
+ if ( parameters.useFog )
394
396
  _programLayers.enable( 1 );
395
- if ( parameters.logarithmicDepthBuffer )
397
+ if ( parameters.flatShading )
396
398
  _programLayers.enable( 2 );
397
- if ( parameters.skinning )
399
+ if ( parameters.logarithmicDepthBuffer )
398
400
  _programLayers.enable( 3 );
399
- if ( parameters.morphTargets )
401
+ if ( parameters.skinning )
400
402
  _programLayers.enable( 4 );
401
- if ( parameters.morphNormals )
403
+ if ( parameters.morphTargets )
402
404
  _programLayers.enable( 5 );
403
- if ( parameters.morphColors )
405
+ if ( parameters.morphNormals )
404
406
  _programLayers.enable( 6 );
405
- if ( parameters.premultipliedAlpha )
407
+ if ( parameters.morphColors )
406
408
  _programLayers.enable( 7 );
407
- if ( parameters.shadowMapEnabled )
409
+ if ( parameters.premultipliedAlpha )
408
410
  _programLayers.enable( 8 );
409
- if ( parameters.physicallyCorrectLights )
411
+ if ( parameters.shadowMapEnabled )
410
412
  _programLayers.enable( 9 );
411
- if ( parameters.doubleSided )
413
+ if ( parameters.physicallyCorrectLights )
412
414
  _programLayers.enable( 10 );
413
- if ( parameters.flipSided )
415
+ if ( parameters.doubleSided )
414
416
  _programLayers.enable( 11 );
415
- if ( parameters.useDepthPacking )
417
+ if ( parameters.flipSided )
416
418
  _programLayers.enable( 12 );
417
- if ( parameters.dithering )
419
+ if ( parameters.useDepthPacking )
418
420
  _programLayers.enable( 13 );
419
- if ( parameters.specularIntensityMap )
421
+ if ( parameters.dithering )
420
422
  _programLayers.enable( 14 );
421
- if ( parameters.specularColorMap )
423
+ if ( parameters.specularIntensityMap )
422
424
  _programLayers.enable( 15 );
423
- if ( parameters.transmission )
425
+ if ( parameters.specularColorMap )
424
426
  _programLayers.enable( 16 );
425
- if ( parameters.transmissionMap )
427
+ if ( parameters.transmission )
426
428
  _programLayers.enable( 17 );
427
- if ( parameters.thicknessMap )
429
+ if ( parameters.transmissionMap )
428
430
  _programLayers.enable( 18 );
429
- if ( parameters.sheen )
431
+ if ( parameters.thicknessMap )
430
432
  _programLayers.enable( 19 );
431
- if ( parameters.sheenColorMap )
433
+ if ( parameters.sheen )
432
434
  _programLayers.enable( 20 );
433
- if ( parameters.sheenRoughnessMap )
435
+ if ( parameters.sheenColorMap )
434
436
  _programLayers.enable( 21 );
435
- if ( parameters.decodeVideoTexture )
437
+ if ( parameters.sheenRoughnessMap )
436
438
  _programLayers.enable( 22 );
437
- if ( parameters.opaque )
439
+ if ( parameters.decodeVideoTexture )
438
440
  _programLayers.enable( 23 );
441
+ if ( parameters.opaque )
442
+ _programLayers.enable( 24 );
439
443
 
440
444
  array.push( _programLayers.mask );
441
445
 
@@ -194,23 +194,24 @@ function WebGLRenderLists() {
194
194
 
195
195
  function get( scene, renderCallDepth ) {
196
196
 
197
+ const listArray = lists.get( scene );
197
198
  let list;
198
199
 
199
- if ( lists.has( scene ) === false ) {
200
+ if ( listArray === undefined ) {
200
201
 
201
202
  list = new WebGLRenderList();
202
203
  lists.set( scene, [ list ] );
203
204
 
204
205
  } else {
205
206
 
206
- if ( renderCallDepth >= lists.get( scene ).length ) {
207
+ if ( renderCallDepth >= listArray.length ) {
207
208
 
208
209
  list = new WebGLRenderList();
209
- lists.get( scene ).push( list );
210
+ listArray.push( list );
210
211
 
211
212
  } else {
212
213
 
213
- list = lists.get( scene )[ renderCallDepth ];
214
+ list = listArray[ renderCallDepth ];
214
215
 
215
216
  }
216
217
 
@@ -63,23 +63,24 @@ function WebGLRenderStates( extensions, capabilities ) {
63
63
 
64
64
  function get( scene, renderCallDepth = 0 ) {
65
65
 
66
+ const renderStateArray = renderStates.get( scene );
66
67
  let renderState;
67
68
 
68
- if ( renderStates.has( scene ) === false ) {
69
+ if ( renderStateArray === undefined ) {
69
70
 
70
71
  renderState = new WebGLRenderState( extensions, capabilities );
71
72
  renderStates.set( scene, [ renderState ] );
72
73
 
73
74
  } else {
74
75
 
75
- if ( renderCallDepth >= renderStates.get( scene ).length ) {
76
+ if ( renderCallDepth >= renderStateArray.length ) {
76
77
 
77
78
  renderState = new WebGLRenderState( extensions, capabilities );
78
- renderStates.get( scene ).push( renderState );
79
+ renderStateArray.push( renderState );
79
80
 
80
81
  } else {
81
82
 
82
- renderState = renderStates.get( scene )[ renderCallDepth ];
83
+ renderState = renderStateArray[ renderCallDepth ];
83
84
 
84
85
  }
85
86
 
@@ -77,29 +77,32 @@ class WebGLShaderCache {
77
77
  _getShaderCacheForMaterial( material ) {
78
78
 
79
79
  const cache = this.materialCache;
80
+ let set = cache.get( material );
80
81
 
81
- if ( cache.has( material ) === false ) {
82
+ if ( set === undefined ) {
82
83
 
83
- cache.set( material, new Set() );
84
+ set = new Set();
85
+ cache.set( material, set );
84
86
 
85
87
  }
86
88
 
87
- return cache.get( material );
89
+ return set;
88
90
 
89
91
  }
90
92
 
91
93
  _getShaderStage( code ) {
92
94
 
93
95
  const cache = this.shaderCache;
96
+ let stage = cache.get( code );
94
97
 
95
- if ( cache.has( code ) === false ) {
98
+ if ( stage === undefined ) {
96
99
 
97
- const stage = new WebGLShaderStage( code );
100
+ stage = new WebGLShaderStage( code );
98
101
  cache.set( code, stage );
99
102
 
100
103
  }
101
104
 
102
- return cache.get( code );
105
+ return stage;
103
106
 
104
107
  }
105
108
 
@@ -1,4 +1,4 @@
1
- import { FrontSide, BackSide, DoubleSide, RGBAFormat, NearestFilter, PCFShadowMap, VSMShadowMap, RGBADepthPacking, NoBlending } from '../../constants.js';
1
+ import { FrontSide, BackSide, DoubleSide, NearestFilter, PCFShadowMap, VSMShadowMap, RGBADepthPacking, NoBlending } from '../../constants.js';
2
2
  import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
3
3
  import { MeshDepthMaterial } from '../../materials/MeshDepthMaterial.js';
4
4
  import { MeshDistanceMaterial } from '../../materials/MeshDistanceMaterial.js';
@@ -131,20 +131,9 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
131
131
 
132
132
  }
133
133
 
134
- if ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {
135
-
136
- shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );
137
- shadow.map.texture.name = light.name + '.shadowMap';
138
-
139
- shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );
140
-
141
- shadow.camera.updateProjectionMatrix();
142
-
143
- }
144
-
145
134
  if ( shadow.map === null ) {
146
135
 
147
- const pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };
136
+ const pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {};
148
137
 
149
138
  shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );
150
139
  shadow.map.texture.name = light.name + '.shadowMap';
@@ -181,7 +170,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
181
170
 
182
171
  // do blur pass for VSM
183
172
 
184
- if ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {
173
+ if ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) {
185
174
 
186
175
  VSMPass( shadow, camera );
187
176
 
@@ -211,6 +200,12 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
211
200
 
212
201
  }
213
202
 
203
+ if ( shadow.mapPass === null ) {
204
+
205
+ shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );
206
+
207
+ }
208
+
214
209
  // vertical pass
215
210
 
216
211
  shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;
@@ -247,7 +242,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
247
242
 
248
243
  }
249
244
 
250
- if ( ( _renderer.localClippingEnabled && material.clipShadows === true && material.clippingPlanes.length !== 0 ) ||
245
+ if ( ( _renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||
251
246
  ( material.displacementMap && material.displacementScale !== 0 ) ||
252
247
  ( material.alphaMap && material.alphaTest > 0 ) ) {
253
248
 
@@ -314,6 +314,9 @@ function WebGLState( gl, extensions, capabilities ) {
314
314
  const depthBuffer = new DepthBuffer();
315
315
  const stencilBuffer = new StencilBuffer();
316
316
 
317
+ const uboBindings = new WeakMap();
318
+ const uboProgamMap = new WeakMap();
319
+
317
320
  let enabledCapabilities = {};
318
321
 
319
322
  let currentBoundFramebuffers = {};
@@ -1064,6 +1067,47 @@ function WebGLState( gl, extensions, capabilities ) {
1064
1067
 
1065
1068
  }
1066
1069
 
1070
+ function updateUBOMapping( uniformsGroup, program ) {
1071
+
1072
+ let mapping = uboProgamMap.get( program );
1073
+
1074
+ if ( mapping === undefined ) {
1075
+
1076
+ mapping = new WeakMap();
1077
+
1078
+ uboProgamMap.set( program, mapping );
1079
+
1080
+ }
1081
+
1082
+ let blockIndex = mapping.get( uniformsGroup );
1083
+
1084
+ if ( blockIndex === undefined ) {
1085
+
1086
+ blockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );
1087
+
1088
+ mapping.set( uniformsGroup, blockIndex );
1089
+
1090
+ }
1091
+
1092
+ }
1093
+
1094
+ function uniformBlockBinding( uniformsGroup, program ) {
1095
+
1096
+ const mapping = uboProgamMap.get( program );
1097
+ const blockIndex = mapping.get( uniformsGroup );
1098
+
1099
+ if ( uboBindings.get( uniformsGroup ) !== blockIndex ) {
1100
+
1101
+ // bind shader specific block index to global block point
1102
+
1103
+ gl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );
1104
+
1105
+ uboBindings.set( uniformsGroup, blockIndex );
1106
+
1107
+ }
1108
+
1109
+ }
1110
+
1067
1111
  //
1068
1112
 
1069
1113
  function reset() {
@@ -1191,6 +1235,9 @@ function WebGLState( gl, extensions, capabilities ) {
1191
1235
  texImage2D: texImage2D,
1192
1236
  texImage3D: texImage3D,
1193
1237
 
1238
+ updateUBOMapping: updateUBOMapping,
1239
+ uniformBlockBinding: uniformBlockBinding,
1240
+
1194
1241
  texStorage2D: texStorage2D,
1195
1242
  texStorage3D: texStorage3D,
1196
1243
  texSubImage2D: texSubImage2D,
@@ -46,10 +46,10 @@ import { Texture } from '../../textures/Texture.js';
46
46
  import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
47
47
  import { Data3DTexture } from '../../textures/Data3DTexture.js';
48
48
 
49
- const emptyTexture = new Texture();
50
- const emptyArrayTexture = new DataArrayTexture();
51
- const empty3dTexture = new Data3DTexture();
52
- const emptyCubeTexture = new CubeTexture();
49
+ const emptyTexture = /*@__PURE__*/ new Texture();
50
+ const emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();
51
+ const empty3dTexture = /*@__PURE__*/ new Data3DTexture();
52
+ const emptyCubeTexture = /*@__PURE__*/ new CubeTexture();
53
53
 
54
54
  // --- Utilities ---
55
55