super-three 0.141.0 → 0.147.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 (646) hide show
  1. package/README.md +9 -9
  2. package/build/three.cjs +2441 -1569
  3. package/build/three.js +2441 -1569
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +2847 -1576
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +50 -67
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +71 -150
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +149 -403
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -61
  14. package/examples/js/controls/FlyControls.js +29 -63
  15. package/examples/js/controls/OrbitControls.js +125 -103
  16. package/examples/js/controls/PointerLockControls.js +5 -22
  17. package/examples/js/controls/TrackballControls.js +33 -88
  18. package/examples/js/controls/TransformControls.js +101 -182
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +6 -20
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +30 -54
  30. package/examples/js/effects/ParallaxBarrierEffect.js +2 -15
  31. package/examples/js/effects/PeppersGhostEffect.js +14 -41
  32. package/examples/js/effects/StereoEffect.js +2 -6
  33. package/examples/js/environments/RoomEnvironment.js +32 -8
  34. package/examples/js/exporters/ColladaExporter.js +52 -78
  35. package/examples/js/exporters/DRACOExporter.js +22 -34
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +168 -345
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +40 -52
  40. package/examples/js/exporters/PLYExporter.js +50 -57
  41. package/examples/js/exporters/STLExporter.js +5 -14
  42. package/examples/js/exporters/USDZExporter.js +119 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +12 -7
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +23 -17
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +25 -39
  60. package/examples/js/interactive/InteractiveGroup.js +9 -14
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +2 -8
  63. package/examples/js/libs/ktx-parse.umd.js +1 -0
  64. package/examples/js/libs/meshopt_decoder.js +98 -32
  65. package/examples/js/lights/LightProbeGenerator.js +32 -39
  66. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  67. package/examples/js/lines/LineGeometry.js +3 -5
  68. package/examples/js/lines/LineMaterial.js +4 -11
  69. package/examples/js/lines/LineSegments2.js +40 -89
  70. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  71. package/examples/js/lines/Wireframe.js +2 -7
  72. package/examples/js/lines/WireframeGeometry2.js +3 -1
  73. package/examples/js/loaders/3DMLoader.js +58 -155
  74. package/examples/js/loaders/3MFLoader.js +72 -106
  75. package/examples/js/loaders/AMFLoader.js +0 -25
  76. package/examples/js/loaders/BVHLoader.js +44 -43
  77. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  78. package/examples/js/loaders/ColladaLoader.js +229 -359
  79. package/examples/js/loaders/DDSLoader.js +24 -25
  80. package/examples/js/loaders/DRACOLoader.js +30 -90
  81. package/examples/js/loaders/EXRLoader.js +69 -177
  82. package/examples/js/loaders/FBXLoader.js +294 -441
  83. package/examples/js/loaders/FontLoader.js +9 -31
  84. package/examples/js/loaders/GCodeLoader.js +15 -16
  85. package/examples/js/loaders/GLTFLoader.js +458 -739
  86. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -17
  87. package/examples/js/loaders/KMZLoader.js +3 -7
  88. package/examples/js/loaders/KTXLoader.js +12 -30
  89. package/examples/js/loaders/LDrawLoader.js +309 -355
  90. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  91. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  92. package/examples/js/loaders/LWOLoader.js +59 -124
  93. package/examples/js/loaders/LogLuvLoader.js +27 -77
  94. package/examples/js/loaders/LottieLoader.js +4 -4
  95. package/examples/js/loaders/MD2Loader.js +26 -27
  96. package/examples/js/loaders/MDDLoader.js +6 -10
  97. package/examples/js/loaders/MMDLoader.js +180 -189
  98. package/examples/js/loaders/MTLLoader.js +18 -47
  99. package/examples/js/loaders/NRRDLoader.js +44 -84
  100. package/examples/js/loaders/OBJLoader.js +56 -77
  101. package/examples/js/loaders/PCDLoader.js +92 -42
  102. package/examples/js/loaders/PDBLoader.js +17 -13
  103. package/examples/js/loaders/PLYLoader.js +65 -51
  104. package/examples/js/loaders/PRWMLoader.js +11 -22
  105. package/examples/js/loaders/PVRLoader.js +7 -16
  106. package/examples/js/loaders/RGBELoader.js +36 -61
  107. package/examples/js/loaders/RGBMLoader.js +26 -87
  108. package/examples/js/loaders/STLLoader.js +20 -27
  109. package/examples/js/loaders/SVGLoader.js +365 -236
  110. package/examples/js/loaders/TDSLoader.js +81 -118
  111. package/examples/js/loaders/TGALoader.js +39 -41
  112. package/examples/js/loaders/TIFFLoader.js +30 -0
  113. package/examples/js/loaders/TTFLoader.js +0 -8
  114. package/examples/js/loaders/TiltLoader.js +14 -15
  115. package/examples/js/loaders/VOXLoader.js +8 -16
  116. package/examples/js/loaders/VRMLLoader.js +266 -354
  117. package/examples/js/loaders/VTKLoader.js +102 -119
  118. package/examples/js/loaders/XYZLoader.js +2 -4
  119. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  120. package/examples/js/loaders/lwo/LWO2Parser.js +39 -89
  121. package/examples/js/loaders/lwo/LWO3Parser.js +38 -79
  122. package/examples/js/materials/MeshGouraudMaterial.js +387 -0
  123. package/examples/js/math/Capsule.js +0 -17
  124. package/examples/js/math/ColorConverter.js +3 -53
  125. package/examples/js/math/ConvexHull.js +185 -141
  126. package/examples/js/math/ImprovedNoise.js +1 -1
  127. package/examples/js/math/Lut.js +8 -15
  128. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  129. package/examples/js/math/OBB.js +90 -49
  130. package/examples/js/math/Octree.js +2 -57
  131. package/examples/js/math/SimplexNoise.js +74 -88
  132. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  133. package/examples/js/misc/GPUComputationRenderer.js +47 -14
  134. package/examples/js/misc/Gyroscope.js +5 -9
  135. package/examples/js/misc/MD2Character.js +14 -23
  136. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  137. package/examples/js/misc/MorphAnimMesh.js +0 -6
  138. package/examples/js/misc/MorphBlendMesh.js +3 -30
  139. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  140. package/examples/js/misc/RollerCoaster.js +17 -24
  141. package/examples/js/misc/TubePainter.js +18 -12
  142. package/examples/js/misc/Volume.js +173 -194
  143. package/examples/js/misc/VolumeSlice.js +91 -99
  144. package/examples/js/modifiers/CurveModifier.js +19 -21
  145. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  146. package/examples/js/modifiers/SimplifyModifier.js +57 -60
  147. package/examples/js/modifiers/TessellateModifier.js +2 -9
  148. package/examples/js/objects/GroundProjectedEnv.js +181 -0
  149. package/examples/js/objects/Lensflare.js +47 -38
  150. package/examples/js/objects/LightningStorm.js +10 -13
  151. package/examples/js/objects/MarchingCubes.js +80 -59
  152. package/examples/js/objects/Reflector.js +31 -22
  153. package/examples/js/objects/ReflectorForSSRPass.js +20 -25
  154. package/examples/js/objects/Refractor.js +61 -33
  155. package/examples/js/objects/ShadowMesh.js +6 -3
  156. package/examples/js/objects/Sky.js +2 -7
  157. package/examples/js/objects/Water.js +23 -18
  158. package/examples/js/objects/Water2.js +20 -19
  159. package/examples/js/physics/AmmoPhysics.js +23 -20
  160. package/examples/js/physics/OimoPhysics.js +19 -17
  161. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  162. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  163. package/examples/js/postprocessing/BloomPass.js +38 -17
  164. package/examples/js/postprocessing/BokehPass.js +29 -12
  165. package/examples/js/postprocessing/ClearPass.js +1 -6
  166. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  167. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  168. package/examples/js/postprocessing/EffectComposer.js +25 -32
  169. package/examples/js/postprocessing/FilmPass.js +7 -5
  170. package/examples/js/postprocessing/GlitchPass.js +10 -11
  171. package/examples/js/postprocessing/HalftonePass.js +9 -9
  172. package/examples/js/postprocessing/LUTPass.js +2 -15
  173. package/examples/js/postprocessing/MaskPass.js +20 -17
  174. package/examples/js/postprocessing/OutlinePass.js +49 -38
  175. package/examples/js/postprocessing/Pass.js +11 -14
  176. package/examples/js/postprocessing/RenderPass.js +3 -7
  177. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  178. package/examples/js/postprocessing/SAOPass.js +40 -32
  179. package/examples/js/postprocessing/SMAAPass.js +34 -17
  180. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  181. package/examples/js/postprocessing/SSAOPass.js +56 -42
  182. package/examples/js/postprocessing/SSRPass.js +78 -61
  183. package/examples/js/postprocessing/SavePass.js +14 -6
  184. package/examples/js/postprocessing/ShaderPass.js +9 -8
  185. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  186. package/examples/js/postprocessing/TexturePass.js +7 -4
  187. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  188. package/examples/js/renderers/CSS2DRenderer.js +4 -23
  189. package/examples/js/renderers/CSS3DRenderer.js +5 -26
  190. package/examples/js/renderers/Projector.js +31 -108
  191. package/examples/js/renderers/SVGRenderer.js +4 -50
  192. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  193. package/examples/js/shaders/AfterimageShader.js +3 -6
  194. package/examples/js/shaders/BasicShader.js +3 -6
  195. package/examples/js/shaders/BleachBypassShader.js +3 -6
  196. package/examples/js/shaders/BlendShader.js +3 -6
  197. package/examples/js/shaders/BokehShader.js +3 -6
  198. package/examples/js/shaders/BokehShader2.js +4 -13
  199. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  200. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  201. package/examples/js/shaders/ColorifyShader.js +2 -6
  202. package/examples/js/shaders/ConvolutionShader.js +5 -10
  203. package/examples/js/shaders/CopyShader.js +3 -6
  204. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  205. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  206. package/examples/js/shaders/DigitalGlitch.js +3 -6
  207. package/examples/js/shaders/DotScreenShader.js +2 -6
  208. package/examples/js/shaders/FXAAShader.js +1 -3
  209. package/examples/js/shaders/FilmShader.js +3 -6
  210. package/examples/js/shaders/FocusShader.js +3 -6
  211. package/examples/js/shaders/FreiChenShader.js +2 -6
  212. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  213. package/examples/js/shaders/GodRaysShader.js +11 -24
  214. package/examples/js/shaders/HalftoneShader.js +3 -6
  215. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  216. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  217. package/examples/js/shaders/HueSaturationShader.js +3 -6
  218. package/examples/js/shaders/KaleidoShader.js +3 -6
  219. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  220. package/examples/js/shaders/LuminosityShader.js +4 -7
  221. package/examples/js/shaders/MMDToonShader.js +2 -4
  222. package/examples/js/shaders/MirrorShader.js +3 -6
  223. package/examples/js/shaders/NormalMapShader.js +2 -6
  224. package/examples/js/shaders/RGBShiftShader.js +3 -6
  225. package/examples/js/shaders/SAOShader.js +2 -6
  226. package/examples/js/shaders/SMAAShader.js +6 -18
  227. package/examples/js/shaders/SSAOShader.js +2 -6
  228. package/examples/js/shaders/SSRShader.js +6 -18
  229. package/examples/js/shaders/SepiaShader.js +3 -6
  230. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  231. package/examples/js/shaders/TechnicolorShader.js +3 -6
  232. package/examples/js/shaders/ToneMapShader.js +4 -7
  233. package/examples/js/shaders/ToonShader.js +8 -24
  234. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  235. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  236. package/examples/js/shaders/VelocityShader.js +126 -0
  237. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  238. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  239. package/examples/js/shaders/VignetteShader.js +3 -6
  240. package/examples/js/shaders/VolumeShader.js +2 -6
  241. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  242. package/examples/js/textures/FlakesTexture.js +0 -1
  243. package/examples/js/utils/BufferGeometryUtils.js +237 -171
  244. package/examples/js/utils/CameraUtils.js +5 -20
  245. package/examples/js/utils/GPUStatsPanel.js +3 -12
  246. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  247. package/examples/js/utils/GeometryUtils.js +15 -36
  248. package/examples/js/utils/LDrawUtils.js +8 -11
  249. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  250. package/examples/js/utils/SceneUtils.js +109 -14
  251. package/examples/js/utils/ShadowMapViewer.js +17 -14
  252. package/examples/js/utils/SkeletonUtils.js +13 -27
  253. package/examples/js/utils/UVsDebug.js +20 -12
  254. package/examples/js/utils/WorkerPool.js +1 -11
  255. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  256. package/examples/jsm/animation/MMDPhysics.js +28 -22
  257. package/examples/jsm/capabilities/WebGPU.js +3 -1
  258. package/examples/jsm/controls/ArcballControls.js +17 -2
  259. package/examples/jsm/controls/FirstPersonControls.js +20 -27
  260. package/examples/jsm/controls/FlyControls.js +16 -24
  261. package/examples/jsm/controls/OrbitControls.js +44 -9
  262. package/examples/jsm/controls/PointerLockControls.js +0 -7
  263. package/examples/jsm/controls/TrackballControls.js +14 -5
  264. package/examples/jsm/controls/TransformControls.js +18 -16
  265. package/examples/jsm/csm/CSM.js +1 -0
  266. package/examples/jsm/csm/CSMHelper.js +30 -0
  267. package/examples/jsm/effects/AnaglyphEffect.js +2 -2
  268. package/examples/jsm/effects/OutlineEffect.js +4 -25
  269. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  270. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  271. package/examples/jsm/effects/StereoEffect.js +2 -2
  272. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  273. package/examples/jsm/exporters/ColladaExporter.js +4 -13
  274. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  275. package/examples/jsm/exporters/GLTFExporter.js +29 -110
  276. package/examples/jsm/exporters/KTX2Exporter.js +29 -29
  277. package/examples/jsm/exporters/OBJExporter.js +0 -18
  278. package/examples/jsm/exporters/PLYExporter.js +14 -22
  279. package/examples/jsm/exporters/STLExporter.js +1 -9
  280. package/examples/jsm/exporters/USDZExporter.js +107 -4
  281. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  282. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  283. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  284. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  285. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  286. package/examples/jsm/helpers/ViewHelper.js +24 -0
  287. package/examples/jsm/interactive/HTMLMesh.js +14 -15
  288. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  289. package/examples/jsm/interactive/SelectionHelper.js +5 -3
  290. package/examples/jsm/libs/flow.module.js +610 -160
  291. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  292. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  293. package/examples/jsm/libs/utif.module.js +1579 -0
  294. package/examples/jsm/libs/zstddec.module.js +1 -0
  295. package/examples/jsm/lines/LineSegments2.js +4 -0
  296. package/examples/jsm/loaders/3DMLoader.js +1 -2
  297. package/examples/jsm/loaders/ColladaLoader.js +29 -0
  298. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  299. package/examples/jsm/loaders/EXRLoader.js +3 -13
  300. package/examples/jsm/loaders/FBXLoader.js +26 -3
  301. package/examples/jsm/loaders/FontLoader.js +3 -16
  302. package/examples/jsm/loaders/GLTFLoader.js +321 -464
  303. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  304. package/examples/jsm/loaders/KTX2Loader.js +254 -53
  305. package/examples/jsm/loaders/LDrawLoader.js +149 -87
  306. package/examples/jsm/loaders/LottieLoader.js +4 -2
  307. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  308. package/examples/jsm/loaders/OBJLoader.js +6 -14
  309. package/examples/jsm/loaders/PCDLoader.js +60 -14
  310. package/examples/jsm/loaders/PLYLoader.js +71 -19
  311. package/examples/jsm/loaders/RGBELoader.js +1 -1
  312. package/examples/jsm/loaders/SVGLoader.js +231 -17
  313. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  314. package/examples/jsm/loaders/USDZLoader.js +633 -0
  315. package/examples/jsm/loaders/VRMLLoader.js +36 -26
  316. package/examples/jsm/loaders/VTKLoader.js +1 -1
  317. package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
  318. package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
  319. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  320. package/examples/jsm/math/ColorConverter.js +1 -49
  321. package/examples/jsm/math/ConvexHull.js +4 -4
  322. package/examples/jsm/math/Octree.js +1 -1
  323. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  324. package/examples/jsm/misc/Volume.js +169 -171
  325. package/examples/jsm/misc/VolumeSlice.js +78 -80
  326. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  327. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  328. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
  329. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  330. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  331. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  332. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  333. package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
  334. package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
  335. package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
  336. package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
  337. package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
  338. package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
  339. package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
  340. package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
  341. package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
  342. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +7 -10
  343. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
  344. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +7 -10
  345. package/examples/jsm/node-editor/math/AngleEditor.js +4 -4
  346. package/examples/jsm/node-editor/math/DotEditor.js +1 -1
  347. package/examples/jsm/node-editor/math/InvertEditor.js +3 -3
  348. package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
  349. package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
  350. package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
  351. package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
  352. package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
  353. package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
  354. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  355. package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
  356. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  357. package/examples/jsm/node-editor/utils/PreviewEditor.js +7 -3
  358. package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
  359. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  360. package/examples/jsm/nodes/Nodes.js +70 -13
  361. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  362. package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
  363. package/examples/jsm/nodes/accessors/NormalNode.js +8 -8
  364. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  365. package/examples/jsm/nodes/accessors/PositionNode.js +11 -5
  366. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  367. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  368. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  369. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  370. package/examples/jsm/nodes/core/AttributeNode.js +32 -9
  371. package/examples/jsm/nodes/core/CodeNode.js +3 -3
  372. package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
  373. package/examples/jsm/nodes/core/FunctionNode.js +2 -2
  374. package/examples/jsm/nodes/core/Node.js +15 -13
  375. package/examples/jsm/nodes/core/NodeBuilder.js +67 -18
  376. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  377. package/examples/jsm/nodes/core/NodeUtils.js +23 -1
  378. package/examples/jsm/nodes/core/NodeVarying.js +17 -0
  379. package/examples/jsm/nodes/core/VaryingNode.js +56 -0
  380. package/examples/jsm/nodes/core/constants.js +13 -13
  381. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  382. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +84 -0
  383. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  384. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  385. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  386. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  387. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  388. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  389. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  390. package/examples/jsm/nodes/gpgpu/ComputeNode.js +3 -1
  391. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  392. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
  393. package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
  394. package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
  395. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +33 -0
  396. package/examples/jsm/nodes/materials/Materials.js +21 -31
  397. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  398. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
  399. package/examples/jsm/nodes/materials/NodeMaterial.js +11 -3
  400. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
  401. package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -0
  402. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  403. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +56 -0
  404. package/examples/jsm/nodes/materialx/lib/mx_noise.js +617 -0
  405. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  406. package/examples/jsm/nodes/math/MathNode.js +7 -17
  407. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  408. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
  409. package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
  410. package/examples/jsm/nodes/shadernode/ShaderNode.js +40 -25
  411. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +95 -68
  412. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +49 -6
  413. package/examples/jsm/nodes/utils/ConvertNode.js +18 -12
  414. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  415. package/examples/jsm/nodes/utils/JoinNode.js +15 -9
  416. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  417. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +3 -2
  418. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  419. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  420. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  421. package/examples/jsm/nodes/utils/SplitNode.js +21 -5
  422. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  423. package/examples/jsm/nodes/utils/TimerNode.js +23 -3
  424. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  425. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  426. package/examples/jsm/objects/Reflector.js +12 -5
  427. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
  428. package/examples/jsm/objects/Refractor.js +12 -6
  429. package/examples/jsm/objects/ShadowMesh.js +8 -2
  430. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  431. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  432. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  433. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  434. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  435. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  436. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  437. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  438. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  439. package/examples/jsm/postprocessing/OutlinePass.js +25 -3
  440. package/examples/jsm/postprocessing/Pass.js +2 -0
  441. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  442. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  443. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  444. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  445. package/examples/jsm/postprocessing/SavePass.js +17 -1
  446. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  447. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  448. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  449. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  450. package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
  451. package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
  452. package/examples/jsm/renderers/Projector.js +2 -24
  453. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  454. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +363 -231
  455. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
  456. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  457. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  458. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +68 -3
  459. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
  460. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  461. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  462. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
  463. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
  464. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
  465. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +113 -93
  466. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
  467. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
  468. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  469. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +63 -36
  470. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  471. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  472. package/examples/jsm/shaders/MMDToonShader.js +2 -4
  473. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  474. package/examples/jsm/shaders/VelocityShader.js +128 -0
  475. package/examples/jsm/utils/BufferGeometryUtils.js +176 -43
  476. package/examples/jsm/utils/GeometryUtils.js +17 -25
  477. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  478. package/examples/jsm/utils/SceneUtils.js +117 -12
  479. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  480. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
  481. package/examples/jsm/webxr/VRButton.js +1 -7
  482. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  483. package/package.json +22 -18
  484. package/src/Three.Legacy.js +262 -36
  485. package/src/Three.js +4 -2
  486. package/src/animation/AnimationAction.js +6 -5
  487. package/src/animation/AnimationClip.js +1 -1
  488. package/src/animation/AnimationMixer.js +1 -1
  489. package/src/animation/AnimationUtils.js +204 -199
  490. package/src/animation/KeyframeTrack.js +1 -1
  491. package/src/animation/PropertyBinding.js +31 -5
  492. package/src/audio/AudioContext.js +5 -5
  493. package/src/cameras/CubeCamera.js +14 -21
  494. package/src/constants.js +2 -4
  495. package/src/core/BufferAttribute.js +81 -111
  496. package/src/core/BufferGeometry.js +3 -41
  497. package/src/core/InstancedBufferAttribute.js +0 -10
  498. package/src/core/InstancedBufferGeometry.js +1 -7
  499. package/src/core/InterleavedBuffer.js +1 -1
  500. package/src/core/InterleavedBufferAttribute.js +57 -8
  501. package/src/core/Object3D.js +22 -5
  502. package/src/core/Uniform.js +0 -7
  503. package/src/core/UniformsGroup.js +92 -0
  504. package/src/extras/DataUtils.js +104 -88
  505. package/src/extras/Earcut.js +67 -67
  506. package/src/extras/core/Path.js +1 -0
  507. package/src/extras/core/ShapePath.js +1 -4
  508. package/src/extras/curves/CatmullRomCurve3.js +4 -2
  509. package/src/geometries/BoxGeometry.js +1 -1
  510. package/src/geometries/CapsuleGeometry.js +1 -1
  511. package/src/geometries/CircleGeometry.js +1 -1
  512. package/src/geometries/ConeGeometry.js +1 -1
  513. package/src/geometries/CylinderGeometry.js +2 -1
  514. package/src/geometries/DodecahedronGeometry.js +1 -1
  515. package/src/geometries/EdgesGeometry.js +5 -4
  516. package/src/geometries/ExtrudeGeometry.js +2 -11
  517. package/src/geometries/IcosahedronGeometry.js +1 -1
  518. package/src/geometries/LatheGeometry.js +2 -2
  519. package/src/geometries/OctahedronGeometry.js +1 -1
  520. package/src/geometries/PlaneGeometry.js +2 -1
  521. package/src/geometries/PolyhedronGeometry.js +2 -2
  522. package/src/geometries/RingGeometry.js +1 -1
  523. package/src/geometries/ShapeGeometry.js +3 -2
  524. package/src/geometries/SphereGeometry.js +2 -1
  525. package/src/geometries/TetrahedronGeometry.js +1 -1
  526. package/src/geometries/TorusGeometry.js +2 -1
  527. package/src/geometries/TorusKnotGeometry.js +2 -1
  528. package/src/geometries/TubeGeometry.js +2 -1
  529. package/src/geometries/WireframeGeometry.js +1 -0
  530. package/src/helpers/ArrowHelper.js +9 -0
  531. package/src/helpers/Box3Helper.js +7 -0
  532. package/src/helpers/BoxHelper.js +7 -1
  533. package/src/helpers/CameraHelper.js +97 -38
  534. package/src/helpers/DirectionalLightHelper.js +6 -1
  535. package/src/helpers/GridHelper.js +7 -0
  536. package/src/helpers/HemisphereLightHelper.js +5 -1
  537. package/src/helpers/PlaneHelper.js +15 -9
  538. package/src/helpers/PointLightHelper.js +2 -1
  539. package/src/helpers/PolarGridHelper.js +25 -14
  540. package/src/helpers/SkeletonHelper.js +7 -0
  541. package/src/helpers/SpotLightHelper.js +5 -2
  542. package/src/lights/LightShadow.js +1 -2
  543. package/src/lights/PointLight.js +2 -2
  544. package/src/lights/SpotLight.js +4 -2
  545. package/src/loaders/FileLoader.js +16 -2
  546. package/src/loaders/LoadingManager.js +1 -1
  547. package/src/loaders/MaterialLoader.js +49 -7
  548. package/src/loaders/ObjectLoader.js +9 -42
  549. package/src/materials/Material.js +2 -34
  550. package/src/materials/Materials.js +0 -27
  551. package/src/materials/MeshLambertMaterial.js +28 -1
  552. package/src/materials/MeshPhysicalMaterial.js +1 -1
  553. package/src/materials/ShaderMaterial.js +3 -7
  554. package/src/math/Color.js +8 -18
  555. package/src/math/MathUtils.js +1 -7
  556. package/src/math/Matrix3.js +54 -25
  557. package/src/math/Matrix4.js +3 -27
  558. package/src/math/Quaternion.js +1 -21
  559. package/src/math/Ray.js +2 -5
  560. package/src/math/Sphere.js +36 -21
  561. package/src/math/Vector2.js +4 -24
  562. package/src/math/Vector3.js +7 -46
  563. package/src/math/Vector4.js +4 -24
  564. package/src/objects/InstancedMesh.js +7 -0
  565. package/src/objects/LOD.js +25 -6
  566. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  567. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  568. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  569. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  570. package/src/renderers/WebGLRenderTarget.js +1 -1
  571. package/src/renderers/WebGLRenderer.js +119 -69
  572. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
  573. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  574. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
  575. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
  576. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  577. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  578. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  579. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  580. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
  581. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -13
  582. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  583. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
  584. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  585. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
  586. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
  587. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  588. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  589. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  590. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  591. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  592. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  593. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  594. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  595. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  597. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  598. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  599. package/src/renderers/shaders/ShaderChunk.js +7 -2
  600. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  601. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  602. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  603. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
  604. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
  605. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  606. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  607. package/src/renderers/shaders/ShaderLib.js +50 -36
  608. package/src/renderers/shaders/UniformsLib.js +13 -12
  609. package/src/renderers/shaders/UniformsUtils.js +29 -0
  610. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  611. package/src/renderers/webgl/WebGLBackground.js +17 -9
  612. package/src/renderers/webgl/WebGLLights.js +37 -17
  613. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  614. package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
  615. package/src/renderers/webgl/WebGLProgram.js +6 -11
  616. package/src/renderers/webgl/WebGLPrograms.js +30 -26
  617. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  618. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  619. package/src/renderers/webgl/WebGLShaderCache.js +9 -6
  620. package/src/renderers/webgl/WebGLShadowMap.js +13 -16
  621. package/src/renderers/webgl/WebGLState.js +125 -41
  622. package/src/renderers/webgl/WebGLTextures.js +94 -39
  623. package/src/renderers/webgl/WebGLUniforms.js +156 -28
  624. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  625. package/src/renderers/webgl/WebGLUtils.js +3 -1
  626. package/src/renderers/webvr/WebVRManager.js +42 -9
  627. package/src/renderers/webvr/WebVRUtils.js +1 -1
  628. package/src/renderers/webxr/WebXRController.js +91 -50
  629. package/src/renderers/webxr/WebXRManager.js +127 -34
  630. package/src/scenes/Scene.js +24 -3
  631. package/src/textures/CompressedArrayTexture.js +18 -0
  632. package/src/textures/Source.js +1 -1
  633. package/src/textures/Texture.js +2 -1
  634. package/src/utils.js +1 -1
  635. package/examples/js/controls/experimental/CameraControls.js +0 -1048
  636. package/examples/js/libs/lottie_canvas.js +0 -12751
  637. package/examples/js/loaders/KTX2Loader.js +0 -558
  638. package/examples/js/shaders/PixelShader.js +0 -51
  639. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  640. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
  641. package/examples/jsm/nodes/core/NodeVary.js +0 -14
  642. package/examples/jsm/nodes/core/VaryNode.js +0 -54
  643. package/examples/jsm/package.json +0 -3
  644. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  645. package/examples/jsm/shaders/PixelShader.js +0 -44
  646. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -1,3 +1,5 @@
1
+ import { sRGBEncoding, LinearSRGBColorSpace, SRGBColorSpace } from '../../constants.js';
2
+
1
3
  /**
2
4
  * Uniform Utilities
3
5
  */
@@ -59,6 +61,33 @@ export function mergeUniforms( uniforms ) {
59
61
 
60
62
  }
61
63
 
64
+ export function cloneUniformsGroups( src ) {
65
+
66
+ const dst = [];
67
+
68
+ for ( let u = 0; u < src.length; u ++ ) {
69
+
70
+ dst.push( src[ u ].clone() );
71
+
72
+ }
73
+
74
+ return dst;
75
+
76
+ }
77
+
78
+ export function getUnlitUniformColorSpace( renderer ) {
79
+
80
+ if ( renderer.getRenderTarget() === null ) {
81
+
82
+ // https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398
83
+ return renderer.outputEncoding === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;
84
+
85
+ }
86
+
87
+ return LinearSRGBColorSpace;
88
+
89
+ }
90
+
62
91
  // Legacy
63
92
 
64
93
  const UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };
@@ -112,6 +112,8 @@ function WebGLAttributes( gl, capabilities ) {
112
112
 
113
113
  }
114
114
 
115
+ attribute.onUploadCallback();
116
+
115
117
  }
116
118
 
117
119
  //
@@ -5,9 +5,11 @@ import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
5
5
  import { Color } from '../../math/Color.js';
6
6
  import { Mesh } from '../../objects/Mesh.js';
7
7
  import { ShaderLib } from '../shaders/ShaderLib.js';
8
- import { cloneUniforms } from '../shaders/UniformsUtils.js';
8
+ import { cloneUniforms, getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js';
9
9
 
10
- function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipliedAlpha ) {
10
+ const _rgb = { r: 0, b: 0, g: 0 };
11
+
12
+ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {
11
13
 
12
14
  const clearColor = new Color( 0x000000 );
13
15
  let clearAlpha = alpha === true ? 0 : 1;
@@ -26,7 +28,8 @@ function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipli
26
28
 
27
29
  if ( background && background.isTexture ) {
28
30
 
29
- background = cubemaps.get( background );
31
+ const usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background
32
+ background = ( usePMREM ? cubeuvmaps : cubemaps ).get( background );
30
33
 
31
34
  }
32
35
 
@@ -67,9 +70,9 @@ function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipli
67
70
  new BoxGeometry( 1, 1, 1 ),
68
71
  new ShaderMaterial( {
69
72
  name: 'BackgroundCubeMaterial',
70
- uniforms: cloneUniforms( ShaderLib.cube.uniforms ),
71
- vertexShader: ShaderLib.cube.vertexShader,
72
- fragmentShader: ShaderLib.cube.fragmentShader,
73
+ uniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),
74
+ vertexShader: ShaderLib.backgroundCube.vertexShader,
75
+ fragmentShader: ShaderLib.backgroundCube.fragmentShader,
73
76
  side: BackSide,
74
77
  depthTest: false,
75
78
  depthWrite: false,
@@ -86,7 +89,7 @@ function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipli
86
89
 
87
90
  };
88
91
 
89
- // enable code injection for non-built-in material
92
+ // add "envMap" material property so the renderer can evaluate it like for built-in materials
90
93
  Object.defineProperty( boxMesh.material, 'envMap', {
91
94
 
92
95
  get: function () {
@@ -103,6 +106,8 @@ function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipli
103
106
 
104
107
  boxMesh.material.uniforms.envMap.value = background;
105
108
  boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;
109
+ boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;
110
+ boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
106
111
 
107
112
  if ( currentBackground !== background ||
108
113
  currentBackgroundVersion !== background.version ||
@@ -141,7 +146,7 @@ function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipli
141
146
 
142
147
  planeMesh.geometry.deleteAttribute( 'normal' );
143
148
 
144
- // enable code injection for non-built-in material
149
+ // add "map" material property so the renderer can evaluate it like for built-in materials
145
150
  Object.defineProperty( planeMesh.material, 'map', {
146
151
 
147
152
  get: function () {
@@ -157,6 +162,7 @@ function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipli
157
162
  }
158
163
 
159
164
  planeMesh.material.uniforms.t2D.value = background;
165
+ planeMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
160
166
 
161
167
  if ( background.matrixAutoUpdate === true ) {
162
168
 
@@ -189,7 +195,9 @@ function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipli
189
195
 
190
196
  function setClear( color, alpha ) {
191
197
 
192
- state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );
198
+ color.getRGB( _rgb, getUnlitUniformColorSpace( renderer ) );
199
+
200
+ state.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha );
193
201
 
194
202
  }
195
203
 
@@ -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,24 +322,17 @@ 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 ) {
313
333
 
314
334
  const uniforms = cache.get( light );
315
335
 
316
- // (a) intensity is the total visible light emitted
317
- //uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );
318
-
319
- // (b) intensity is the brightness of the light
320
336
  uniforms.color.copy( color ).multiplyScalar( intensity );
321
337
 
322
338
  uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );
@@ -420,7 +436,8 @@ function WebGLLights( extensions, capabilities ) {
420
436
  hash.hemiLength !== hemiLength ||
421
437
  hash.numDirectionalShadows !== numDirectionalShadows ||
422
438
  hash.numPointShadows !== numPointShadows ||
423
- hash.numSpotShadows !== numSpotShadows ) {
439
+ hash.numSpotShadows !== numSpotShadows ||
440
+ hash.numSpotMaps !== numSpotMaps ) {
424
441
 
425
442
  state.directional.length = directionalLength;
426
443
  state.spot.length = spotLength;
@@ -436,7 +453,9 @@ function WebGLLights( extensions, capabilities ) {
436
453
  state.spotShadowMap.length = numSpotShadows;
437
454
  state.directionalShadowMatrix.length = numDirectionalShadows;
438
455
  state.pointShadowMatrix.length = numPointShadows;
439
- state.spotShadowMatrix.length = numSpotShadows;
456
+ state.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;
457
+ state.spotLightMap.length = numSpotMaps;
458
+ state.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;
440
459
 
441
460
  hash.directionalLength = directionalLength;
442
461
  hash.pointLength = pointLength;
@@ -447,6 +466,7 @@ function WebGLLights( extensions, capabilities ) {
447
466
  hash.numDirectionalShadows = numDirectionalShadows;
448
467
  hash.numPointShadows = numPointShadows;
449
468
  hash.numSpotShadows = numSpotShadows;
469
+ hash.numSpotMaps = numSpotMaps;
450
470
 
451
471
  state.version = nextVersion ++;
452
472
 
@@ -1,10 +1,11 @@
1
1
  import { BackSide } from '../../constants.js';
2
+ import { getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js';
2
3
 
3
4
  function WebGLMaterials( renderer, properties ) {
4
5
 
5
6
  function refreshFogUniforms( uniforms, fog ) {
6
7
 
7
- uniforms.fogColor.value.copy( fog.color );
8
+ fog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) );
8
9
 
9
10
  if ( fog.isFog ) {
10
11
 
@@ -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,9 +242,10 @@ 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
- ( material.alphaMap && material.alphaTest > 0 ) ) {
247
+ ( material.alphaMap && material.alphaTest > 0 ) ||
248
+ ( material.map && material.alphaTest > 0 ) ) {
253
249
 
254
250
  // in this case we need a unique material instance reflecting the
255
251
  // appropriate state
@@ -293,6 +289,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
293
289
 
294
290
  result.alphaMap = material.alphaMap;
295
291
  result.alphaTest = material.alphaTest;
292
+ result.map = material.map;
296
293
 
297
294
  result.clipShadows = material.clipShadows;
298
295
  result.clippingPlanes = material.clippingPlanes;