@plastic-software/three 0.181.3 → 0.183.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 (437) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +11330 -10017
  4. package/build/three.core.js +10011 -9493
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1414 -631
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +21 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +8007 -5427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +8005 -5426
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  16. package/examples/jsm/controls/ArcballControls.js +3 -3
  17. package/examples/jsm/controls/MapControls.js +55 -1
  18. package/examples/jsm/controls/OrbitControls.js +109 -6
  19. package/examples/jsm/controls/TrackballControls.js +6 -6
  20. package/examples/jsm/csm/CSM.js +2 -1
  21. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  22. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  24. package/examples/jsm/exporters/EXRExporter.js +1 -1
  25. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  26. package/examples/jsm/exporters/USDZExporter.js +22 -3
  27. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  28. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  29. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  30. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  31. package/examples/jsm/helpers/ViewHelper.js +67 -8
  32. package/examples/jsm/inspector/Inspector.js +74 -14
  33. package/examples/jsm/inspector/RendererInspector.js +12 -2
  34. package/examples/jsm/inspector/tabs/Console.js +41 -7
  35. package/examples/jsm/inspector/tabs/Parameters.js +18 -2
  36. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  37. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  38. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  39. package/examples/jsm/inspector/ui/Style.js +973 -14
  40. package/examples/jsm/inspector/ui/Tab.js +188 -1
  41. package/examples/jsm/inspector/ui/Values.js +17 -1
  42. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  43. package/examples/jsm/lines/LineMaterial.js +6 -0
  44. package/examples/jsm/loaders/3DMLoader.js +5 -4
  45. package/examples/jsm/loaders/3MFLoader.js +2 -2
  46. package/examples/jsm/loaders/AMFLoader.js +2 -2
  47. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  48. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  49. package/examples/jsm/loaders/EXRLoader.js +5 -5
  50. package/examples/jsm/loaders/FBXLoader.js +2 -4
  51. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  52. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  53. package/examples/jsm/loaders/HDRLoader.js +0 -1
  54. package/examples/jsm/loaders/KMZLoader.js +5 -5
  55. package/examples/jsm/loaders/KTX2Loader.js +19 -3
  56. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  57. package/examples/jsm/loaders/LWOLoader.js +7 -39
  58. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  59. package/examples/jsm/loaders/PCDLoader.js +4 -2
  60. package/examples/jsm/loaders/SVGLoader.js +1 -1
  61. package/examples/jsm/loaders/TDSLoader.js +0 -2
  62. package/examples/jsm/loaders/TGALoader.js +0 -2
  63. package/examples/jsm/loaders/USDLoader.js +100 -40
  64. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  65. package/examples/jsm/loaders/VOXLoader.js +660 -117
  66. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  67. package/examples/jsm/loaders/VTKLoader.js +37 -24
  68. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  69. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  70. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  71. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  72. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  73. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  74. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  75. package/examples/jsm/math/Octree.js +131 -1
  76. package/examples/jsm/misc/Volume.js +0 -1
  77. package/examples/jsm/misc/VolumeSlice.js +0 -1
  78. package/examples/jsm/objects/LensflareMesh.js +1 -1
  79. package/examples/jsm/objects/Sky.js +76 -4
  80. package/examples/jsm/objects/SkyMesh.js +127 -10
  81. package/examples/jsm/objects/Water.js +4 -3
  82. package/examples/jsm/objects/Water2.js +5 -3
  83. package/examples/jsm/objects/WaterMesh.js +5 -7
  84. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  85. package/examples/jsm/physics/JoltPhysics.js +10 -6
  86. package/examples/jsm/physics/RapierPhysics.js +9 -5
  87. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  88. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  89. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  90. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  91. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  92. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  93. package/examples/jsm/renderers/Projector.js +268 -30
  94. package/examples/jsm/renderers/SVGRenderer.js +193 -60
  95. package/examples/jsm/shaders/GTAOShader.js +19 -6
  96. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  98. package/examples/jsm/shaders/SAOShader.js +17 -4
  99. package/examples/jsm/shaders/SSAOShader.js +11 -1
  100. package/examples/jsm/shaders/SSRShader.js +6 -5
  101. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/AST.js +44 -0
  104. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  105. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  106. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  107. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  108. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  109. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  110. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  111. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  112. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  113. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  114. package/examples/jsm/tsl/display/CRT.js +150 -0
  115. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  116. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  117. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  118. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  119. package/examples/jsm/tsl/display/GTAONode.js +5 -4
  120. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  121. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  122. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  123. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  124. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  125. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  126. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  127. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  128. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  129. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  130. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  131. package/examples/jsm/tsl/display/SSGINode.js +8 -20
  132. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  133. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  134. package/examples/jsm/tsl/display/Shape.js +29 -0
  135. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  136. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  137. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  138. package/examples/jsm/tsl/display/TRAANode.js +273 -125
  139. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  140. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  141. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  142. package/examples/jsm/tsl/math/Bayer.js +40 -1
  143. package/examples/jsm/utils/LDrawUtils.js +1 -1
  144. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  145. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  146. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  147. package/package.json +20 -26
  148. package/src/Three.Core.js +2 -1
  149. package/src/Three.TSL.js +19 -11
  150. package/src/Three.WebGPU.Nodes.js +2 -0
  151. package/src/Three.WebGPU.js +3 -0
  152. package/src/Three.js +1 -0
  153. package/src/animation/AnimationAction.js +1 -1
  154. package/src/animation/AnimationClip.js +1 -1
  155. package/src/animation/AnimationMixer.js +6 -0
  156. package/src/animation/AnimationUtils.js +1 -12
  157. package/src/animation/KeyframeTrack.js +47 -8
  158. package/src/animation/PropertyMixer.js +4 -4
  159. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  160. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  161. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  162. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  163. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  164. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  165. package/src/audio/Audio.js +1 -1
  166. package/src/audio/AudioListener.js +5 -3
  167. package/src/cameras/Camera.js +32 -2
  168. package/src/cameras/CubeCamera.js +20 -0
  169. package/src/constants.js +90 -5
  170. package/src/core/BufferGeometry.js +14 -2
  171. package/src/core/Clock.js +7 -0
  172. package/src/core/Object3D.js +56 -4
  173. package/src/core/Raycaster.js +2 -2
  174. package/src/core/RenderTarget.js +3 -4
  175. package/src/extras/PMREMGenerator.js +7 -18
  176. package/src/extras/TextureUtils.js +5 -1
  177. package/src/geometries/ExtrudeGeometry.js +2 -2
  178. package/src/geometries/PolyhedronGeometry.js +1 -1
  179. package/src/geometries/TorusGeometry.js +8 -3
  180. package/src/helpers/CameraHelper.js +3 -0
  181. package/src/helpers/DirectionalLightHelper.js +4 -1
  182. package/src/helpers/HemisphereLightHelper.js +3 -0
  183. package/src/helpers/PointLightHelper.js +1 -25
  184. package/src/helpers/SpotLightHelper.js +3 -0
  185. package/src/lights/DirectionalLight.js +13 -0
  186. package/src/lights/HemisphereLight.js +10 -0
  187. package/src/lights/Light.js +1 -11
  188. package/src/lights/LightProbe.js +0 -15
  189. package/src/lights/LightShadow.js +15 -6
  190. package/src/lights/PointLight.js +15 -0
  191. package/src/lights/PointLightShadow.js +0 -86
  192. package/src/lights/SpotLight.js +22 -1
  193. package/src/lights/webgpu/IESSpotLight.js +2 -1
  194. package/src/loaders/Cache.js +28 -0
  195. package/src/loaders/FileLoader.js +1 -1
  196. package/src/loaders/ImageBitmapLoader.js +8 -3
  197. package/src/loaders/Loader.js +6 -0
  198. package/src/loaders/MaterialLoader.js +2 -1
  199. package/src/loaders/ObjectLoader.js +21 -2
  200. package/src/loaders/nodes/NodeLoader.js +2 -2
  201. package/src/materials/Material.js +2 -0
  202. package/src/materials/MeshLambertMaterial.js +9 -0
  203. package/src/materials/MeshPhongMaterial.js +9 -0
  204. package/src/materials/ShaderMaterial.js +20 -1
  205. package/src/materials/nodes/Line2NodeMaterial.js +7 -7
  206. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  207. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  208. package/src/materials/nodes/NodeMaterial.js +72 -25
  209. package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
  210. package/src/math/Line3.js +3 -5
  211. package/src/math/MathUtils.js +10 -10
  212. package/src/math/Matrix4.js +74 -65
  213. package/src/math/Quaternion.js +3 -29
  214. package/src/math/Sphere.js +1 -1
  215. package/src/math/Vector3.js +3 -5
  216. package/src/math/interpolants/BezierInterpolant.js +108 -0
  217. package/src/nodes/Nodes.js +87 -68
  218. package/src/nodes/TSL.js +6 -6
  219. package/src/nodes/accessors/Arrays.js +1 -1
  220. package/src/nodes/accessors/BatchNode.js +10 -10
  221. package/src/nodes/accessors/Bitangent.js +5 -5
  222. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  223. package/src/nodes/accessors/BufferNode.js +29 -2
  224. package/src/nodes/accessors/Camera.js +149 -28
  225. package/src/nodes/accessors/ClippingNode.js +4 -4
  226. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  227. package/src/nodes/accessors/InstanceNode.js +148 -43
  228. package/src/nodes/accessors/MaterialNode.js +9 -1
  229. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  230. package/src/nodes/accessors/ModelNode.js +1 -1
  231. package/src/nodes/accessors/Normal.js +11 -11
  232. package/src/nodes/accessors/Position.js +34 -2
  233. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  234. package/src/nodes/accessors/ReferenceNode.js +4 -4
  235. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  236. package/src/nodes/accessors/SceneProperties.js +53 -0
  237. package/src/nodes/accessors/SkinningNode.js +27 -26
  238. package/src/nodes/accessors/StorageBufferNode.js +4 -21
  239. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  240. package/src/nodes/accessors/Tangent.js +4 -14
  241. package/src/nodes/accessors/Texture3DNode.js +32 -35
  242. package/src/nodes/accessors/TextureNode.js +58 -22
  243. package/src/nodes/accessors/UniformArrayNode.js +4 -2
  244. package/src/nodes/accessors/UserDataNode.js +1 -2
  245. package/src/nodes/accessors/VertexColorNode.js +1 -2
  246. package/src/nodes/code/FunctionNode.js +1 -2
  247. package/src/nodes/core/ArrayNode.js +20 -1
  248. package/src/nodes/core/AssignNode.js +2 -2
  249. package/src/nodes/core/AttributeNode.js +2 -2
  250. package/src/nodes/core/ContextNode.js +103 -4
  251. package/src/nodes/core/MRTNode.js +48 -2
  252. package/src/nodes/core/Node.js +29 -3
  253. package/src/nodes/core/NodeBuilder.js +170 -53
  254. package/src/nodes/core/NodeError.js +28 -0
  255. package/src/nodes/core/NodeFrame.js +12 -4
  256. package/src/nodes/core/NodeUtils.js +10 -8
  257. package/src/nodes/core/OutputStructNode.js +12 -10
  258. package/src/nodes/core/ParameterNode.js +3 -3
  259. package/src/nodes/core/PropertyNode.js +19 -3
  260. package/src/nodes/core/StackNode.js +65 -16
  261. package/src/nodes/core/StackTrace.js +139 -0
  262. package/src/nodes/core/StructNode.js +16 -2
  263. package/src/nodes/core/StructTypeNode.js +11 -17
  264. package/src/nodes/core/SubBuildNode.js +1 -1
  265. package/src/nodes/core/UniformNode.js +21 -5
  266. package/src/nodes/core/VarNode.js +47 -22
  267. package/src/nodes/core/VaryingNode.js +1 -18
  268. package/src/nodes/display/BlendModes.js +0 -64
  269. package/src/nodes/display/ColorAdjustment.js +17 -0
  270. package/src/nodes/display/ColorSpaceNode.js +3 -3
  271. package/src/nodes/display/NormalMapNode.js +39 -4
  272. package/src/nodes/display/PassNode.js +98 -9
  273. package/src/nodes/display/RenderOutputNode.js +3 -3
  274. package/src/nodes/display/ScreenNode.js +3 -1
  275. package/src/nodes/display/ToneMappingNode.js +1 -1
  276. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  277. package/src/nodes/display/ViewportDepthNode.js +52 -4
  278. package/src/nodes/display/ViewportTextureNode.js +21 -4
  279. package/src/nodes/fog/Fog.js +18 -35
  280. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  281. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  282. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  283. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  284. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  285. package/src/nodes/geometry/RangeNode.js +4 -2
  286. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  287. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  288. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  289. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  290. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  291. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  292. package/src/nodes/lighting/LightsNode.js +2 -2
  293. package/src/nodes/lighting/PointShadowNode.js +162 -149
  294. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  295. package/src/nodes/lighting/ShadowNode.js +97 -41
  296. package/src/nodes/math/BitcountNode.js +433 -0
  297. package/src/nodes/math/ConditionalNode.js +2 -2
  298. package/src/nodes/math/MathNode.js +3 -40
  299. package/src/nodes/math/OperatorNode.js +2 -1
  300. package/src/nodes/math/PackFloatNode.js +98 -0
  301. package/src/nodes/math/UnpackFloatNode.js +96 -0
  302. package/src/nodes/pmrem/PMREMNode.js +1 -1
  303. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  304. package/src/nodes/tsl/TSLCore.js +17 -14
  305. package/src/nodes/utils/ArrayElementNode.js +13 -0
  306. package/src/nodes/utils/DebugNode.js +11 -11
  307. package/src/nodes/utils/EventNode.js +1 -2
  308. package/src/nodes/utils/JoinNode.js +2 -2
  309. package/src/nodes/utils/LoopNode.js +1 -1
  310. package/src/nodes/utils/MemberNode.js +1 -1
  311. package/src/nodes/utils/Packing.js +13 -1
  312. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  313. package/src/nodes/utils/RTTNode.js +1 -1
  314. package/src/nodes/utils/ReflectorNode.js +3 -4
  315. package/src/nodes/utils/SampleNode.js +1 -1
  316. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  317. package/src/nodes/utils/UVUtils.js +28 -0
  318. package/src/objects/BatchedMesh.js +27 -14
  319. package/src/objects/InstancedMesh.js +11 -0
  320. package/src/objects/Line.js +1 -1
  321. package/src/objects/Mesh.js +1 -1
  322. package/src/objects/Points.js +1 -1
  323. package/src/objects/Skeleton.js +9 -0
  324. package/src/renderers/WebGLRenderer.js +178 -92
  325. package/src/renderers/common/Backend.js +29 -0
  326. package/src/renderers/common/Background.js +24 -11
  327. package/src/renderers/common/BindGroup.js +1 -9
  328. package/src/renderers/common/Binding.js +11 -0
  329. package/src/renderers/common/Bindings.js +27 -12
  330. package/src/renderers/common/BlendMode.js +143 -0
  331. package/src/renderers/common/Buffer.js +40 -0
  332. package/src/renderers/common/BundleGroup.js +1 -1
  333. package/src/renderers/common/ChainMap.js +30 -6
  334. package/src/renderers/common/CubeRenderTarget.js +50 -6
  335. package/src/renderers/common/Geometries.js +29 -3
  336. package/src/renderers/common/Lighting.js +5 -21
  337. package/src/renderers/common/Pipelines.js +4 -4
  338. package/src/renderers/common/PostProcessing.js +8 -206
  339. package/src/renderers/common/RenderBundles.js +2 -1
  340. package/src/renderers/common/RenderContext.js +16 -0
  341. package/src/renderers/common/RenderContexts.js +33 -49
  342. package/src/renderers/common/RenderLists.js +2 -1
  343. package/src/renderers/common/RenderObject.js +15 -3
  344. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  345. package/src/renderers/common/RenderObjects.js +18 -2
  346. package/src/renderers/common/RenderPipeline.js +203 -17
  347. package/src/renderers/common/Renderer.js +257 -72
  348. package/src/renderers/common/Sampler.js +4 -4
  349. package/src/renderers/common/StorageBuffer.js +13 -1
  350. package/src/renderers/common/Textures.js +17 -1
  351. package/src/renderers/common/TimestampQueryPool.js +5 -3
  352. package/src/renderers/common/Uniform.js +8 -0
  353. package/src/renderers/common/UniformsGroup.js +61 -0
  354. package/src/renderers/common/XRManager.js +3 -2
  355. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  356. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  357. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  358. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  359. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  360. package/src/renderers/shaders/DFGLUTData.js +19 -34
  361. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  362. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  363. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  364. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  365. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  366. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  371. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  375. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk.js +3 -3
  377. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  378. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  379. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  380. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  381. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  382. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  383. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  384. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  386. package/src/renderers/shaders/ShaderLib.js +7 -5
  387. package/src/renderers/shaders/UniformsLib.js +0 -3
  388. package/src/renderers/webgl/WebGLBackground.js +2 -2
  389. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  390. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  391. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  392. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  393. package/src/renderers/webgl/WebGLLights.js +18 -1
  394. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  395. package/src/renderers/webgl/WebGLObjects.js +3 -1
  396. package/src/renderers/webgl/WebGLOutput.js +267 -0
  397. package/src/renderers/webgl/WebGLProgram.js +45 -109
  398. package/src/renderers/webgl/WebGLPrograms.js +45 -49
  399. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  400. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  401. package/src/renderers/webgl/WebGLState.js +32 -37
  402. package/src/renderers/webgl/WebGLTextures.js +89 -28
  403. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  404. package/src/renderers/webgl/WebGLUtils.js +6 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
  407. package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
  408. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  409. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  410. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  411. package/src/renderers/webgpu/WebGPUBackend.js +119 -13
  412. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  413. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
  414. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  415. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  416. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  417. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  418. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  419. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
  420. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  421. package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
  422. package/src/renderers/webxr/WebXRManager.js +2 -2
  423. package/src/textures/CubeDepthTexture.js +76 -0
  424. package/src/textures/Source.js +1 -1
  425. package/src/textures/Texture.js +3 -3
  426. package/src/utils.js +258 -3
  427. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  428. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  429. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  430. package/src/nodes/accessors/SceneNode.js +0 -145
  431. package/src/nodes/code/ScriptableNode.js +0 -726
  432. package/src/nodes/code/ScriptableValueNode.js +0 -253
  433. package/src/nodes/display/PosterizeNode.js +0 -65
  434. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  435. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  436. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  437. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -7,21 +7,21 @@ import { UniformsUtils } from '../shaders/UniformsUtils.js';
7
7
  import { ColorManagement } from '../../math/ColorManagement.js';
8
8
  import { warn } from '../../utils.js';
9
9
 
10
- function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {
10
+ function WebGLPrograms( renderer, environments, extensions, capabilities, bindingStates, clipping ) {
11
11
 
12
12
  const _programLayers = new Layers();
13
13
  const _customShaders = new WebGLShaderCache();
14
14
  const _activeChannels = new Set();
15
15
  const programs = [];
16
+ const programsMap = new Map();
16
17
 
17
18
  const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
18
- const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;
19
19
 
20
20
  let precision = capabilities.precision;
21
21
 
22
22
  const shaderIDs = {
23
23
  MeshDepthMaterial: 'depth',
24
- MeshDistanceMaterial: 'distanceRGBA',
24
+ MeshDistanceMaterial: 'distance',
25
25
  MeshNormalMaterial: 'normal',
26
26
  MeshBasicMaterial: 'basic',
27
27
  MeshLambertMaterial: 'lambert',
@@ -51,9 +51,10 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
51
51
 
52
52
  const fog = scene.fog;
53
53
  const geometry = object.geometry;
54
- const environment = material.isMeshStandardMaterial ? scene.environment : null;
54
+ const environment = ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) ? scene.environment : null;
55
55
 
56
- const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );
56
+ const usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );
57
+ const envMap = environments.get( material.envMap || environment, usePMREM );
57
58
  const envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;
58
59
 
59
60
  const shaderID = shaderIDs[ material.type ];
@@ -200,7 +201,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
200
201
  instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
201
202
  instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,
202
203
 
203
- supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,
204
204
  outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),
205
205
  alphaToCoverage: !! material.alphaToCoverage,
206
206
 
@@ -213,7 +213,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
213
213
  lightMap: HAS_LIGHTMAP,
214
214
  bumpMap: HAS_BUMPMAP,
215
215
  normalMap: HAS_NORMALMAP,
216
- displacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP,
216
+ displacementMap: HAS_DISPLACEMENTMAP,
217
217
  emissiveMap: HAS_EMISSIVEMAP,
218
218
 
219
219
  normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,
@@ -311,7 +311,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
311
311
  useFog: material.fog === true,
312
312
  fogExp2: ( !! fog && fog.isFogExp2 ),
313
313
 
314
- flatShading: ( material.flatShading === true && material.wireframe === false ),
314
+ flatShading: material.wireframe === false && (
315
+ material.flatShading === true ||
316
+ ( geometry.attributes.normal === undefined && HAS_NORMALMAP === false &&
317
+ ( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isMeshPhysicalMaterial )
318
+ )
319
+ ),
315
320
 
316
321
  sizeAttenuation: material.sizeAttenuation === true,
317
322
  logarithmicDepthBuffer: logarithmicDepthBuffer,
@@ -487,54 +492,52 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
487
492
 
488
493
  _programLayers.disableAll();
489
494
 
490
- if ( parameters.supportsVertexTextures )
491
- _programLayers.enable( 0 );
492
495
  if ( parameters.instancing )
493
- _programLayers.enable( 1 );
496
+ _programLayers.enable( 0 );
494
497
  if ( parameters.instancingColor )
495
- _programLayers.enable( 2 );
498
+ _programLayers.enable( 1 );
496
499
  if ( parameters.instancingMorph )
497
- _programLayers.enable( 3 );
500
+ _programLayers.enable( 2 );
498
501
  if ( parameters.matcap )
499
- _programLayers.enable( 4 );
502
+ _programLayers.enable( 3 );
500
503
  if ( parameters.envMap )
501
- _programLayers.enable( 5 );
504
+ _programLayers.enable( 4 );
502
505
  if ( parameters.normalMapObjectSpace )
503
- _programLayers.enable( 6 );
506
+ _programLayers.enable( 5 );
504
507
  if ( parameters.normalMapTangentSpace )
505
- _programLayers.enable( 7 );
508
+ _programLayers.enable( 6 );
506
509
  if ( parameters.clearcoat )
507
- _programLayers.enable( 8 );
510
+ _programLayers.enable( 7 );
508
511
  if ( parameters.iridescence )
509
- _programLayers.enable( 9 );
512
+ _programLayers.enable( 8 );
510
513
  if ( parameters.alphaTest )
511
- _programLayers.enable( 10 );
514
+ _programLayers.enable( 9 );
512
515
  if ( parameters.vertexColors )
513
- _programLayers.enable( 11 );
516
+ _programLayers.enable( 10 );
514
517
  if ( parameters.vertexAlphas )
515
- _programLayers.enable( 12 );
518
+ _programLayers.enable( 11 );
516
519
  if ( parameters.vertexUv1s )
517
- _programLayers.enable( 13 );
520
+ _programLayers.enable( 12 );
518
521
  if ( parameters.vertexUv2s )
519
- _programLayers.enable( 14 );
522
+ _programLayers.enable( 13 );
520
523
  if ( parameters.vertexUv3s )
521
- _programLayers.enable( 15 );
524
+ _programLayers.enable( 14 );
522
525
  if ( parameters.vertexTangents )
523
- _programLayers.enable( 16 );
526
+ _programLayers.enable( 15 );
524
527
  if ( parameters.anisotropy )
525
- _programLayers.enable( 17 );
528
+ _programLayers.enable( 16 );
526
529
  if ( parameters.alphaHash )
527
- _programLayers.enable( 18 );
530
+ _programLayers.enable( 17 );
528
531
  if ( parameters.batching )
529
- _programLayers.enable( 19 );
532
+ _programLayers.enable( 18 );
530
533
  if ( parameters.dispersion )
531
- _programLayers.enable( 20 );
534
+ _programLayers.enable( 19 );
532
535
  if ( parameters.batchingColor )
533
- _programLayers.enable( 21 );
536
+ _programLayers.enable( 20 );
534
537
  if ( parameters.gradientMap )
535
- _programLayers.enable( 22 );
538
+ _programLayers.enable( 21 );
536
539
  if ( parameters.batchingMatrix )
537
- _programLayers.enable( 23 );
540
+ _programLayers.enable( 22 );
538
541
 
539
542
  array.push( _programLayers.mask );
540
543
  _programLayers.disableAll();
@@ -610,29 +613,19 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
610
613
 
611
614
  function acquireProgram( parameters, cacheKey ) {
612
615
 
613
- let program;
614
-
615
- // Check if code has been already compiled
616
- for ( let p = 0, pl = programs.length; p < pl; p ++ ) {
617
-
618
- const preexistingProgram = programs[ p ];
619
-
620
- if ( preexistingProgram.cacheKey === cacheKey ) {
616
+ let program = programsMap.get( cacheKey );
621
617
 
622
- program = preexistingProgram;
623
- ++ program.usedTimes;
618
+ if ( program !== undefined ) {
624
619
 
625
- break;
620
+ ++ program.usedTimes;
626
621
 
627
- }
628
-
629
- }
630
-
631
- if ( program === undefined ) {
622
+ } else {
632
623
 
633
624
  program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );
634
625
  programs.push( program );
635
626
 
627
+ programsMap.set( cacheKey, program );
628
+
636
629
  }
637
630
 
638
631
  return program;
@@ -648,6 +641,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
648
641
  programs[ i ] = programs[ programs.length - 1 ];
649
642
  programs.pop();
650
643
 
644
+ // Remove from map
645
+ programsMap.delete( program.cacheKey );
646
+
651
647
  // Free WebGL resources
652
648
  program.destroy();
653
649
 
@@ -12,6 +12,10 @@ function painterSortStable( a, b ) {
12
12
 
13
13
  return a.material.id - b.material.id;
14
14
 
15
+ } else if ( a.materialVariant !== b.materialVariant ) {
16
+
17
+ return a.materialVariant - b.materialVariant;
18
+
15
19
  } else if ( a.z !== b.z ) {
16
20
 
17
21
  return a.z - b.z;
@@ -66,6 +70,15 @@ function WebGLRenderList() {
66
70
 
67
71
  }
68
72
 
73
+ function materialVariant( object ) {
74
+
75
+ let variant = 0;
76
+ if ( object.isInstancedMesh ) variant += 2;
77
+ if ( object.isSkinnedMesh ) variant += 1;
78
+ return variant;
79
+
80
+ }
81
+
69
82
  function getNextRenderItem( object, geometry, material, groupOrder, z, group ) {
70
83
 
71
84
  let renderItem = renderItems[ renderItemsIndex ];
@@ -77,6 +90,7 @@ function WebGLRenderList() {
77
90
  object: object,
78
91
  geometry: geometry,
79
92
  material: material,
93
+ materialVariant: materialVariant( object ),
80
94
  groupOrder: groupOrder,
81
95
  renderOrder: object.renderOrder,
82
96
  z: z,
@@ -91,6 +105,7 @@ function WebGLRenderList() {
91
105
  renderItem.object = object;
92
106
  renderItem.geometry = geometry;
93
107
  renderItem.material = material;
108
+ renderItem.materialVariant = materialVariant( object );
94
109
  renderItem.groupOrder = groupOrder;
95
110
  renderItem.renderOrder = object.renderOrder;
96
111
  renderItem.z = z;
@@ -1,5 +1,6 @@
1
- import { FrontSide, BackSide, DoubleSide, NearestFilter, PCFShadowMap, VSMShadowMap, RGBADepthPacking, NoBlending } from '../../constants.js';
1
+ import { FrontSide, BackSide, DoubleSide, NearestFilter, LinearFilter, PCFShadowMap, VSMShadowMap, NoBlending, LessEqualCompare, GreaterEqualCompare, DepthFormat, UnsignedIntType, RGFormat, HalfFloatType, FloatType, PCFSoftShadowMap } from '../../constants.js';
2
2
  import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
3
+ import { WebGLCubeRenderTarget } from '../WebGLCubeRenderTarget.js';
3
4
  import { MeshDepthMaterial } from '../../materials/MeshDepthMaterial.js';
4
5
  import { MeshDistanceMaterial } from '../../materials/MeshDistanceMaterial.js';
5
6
  import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
@@ -8,10 +9,28 @@ import { BufferGeometry } from '../../core/BufferGeometry.js';
8
9
  import { Mesh } from '../../objects/Mesh.js';
9
10
  import { Vector4 } from '../../math/Vector4.js';
10
11
  import { Vector2 } from '../../math/Vector2.js';
12
+ import { Matrix4 } from '../../math/Matrix4.js';
11
13
  import { Frustum } from '../../math/Frustum.js';
14
+ import { DepthTexture } from '../../textures/DepthTexture.js';
15
+ import { CubeDepthTexture } from '../../textures/CubeDepthTexture.js';
12
16
 
13
17
  import * as vsm from '../shaders/ShaderLib/vsm.glsl.js';
14
18
  import { warn } from '../../utils.js';
19
+ import { Vector3 } from '../../math/Vector3.js';
20
+
21
+ const _cubeDirections = [
22
+ /*@__PURE__*/ new Vector3( 1, 0, 0 ), /*@__PURE__*/ new Vector3( - 1, 0, 0 ), /*@__PURE__*/ new Vector3( 0, 1, 0 ),
23
+ /*@__PURE__*/ new Vector3( 0, - 1, 0 ), /*@__PURE__*/ new Vector3( 0, 0, 1 ), /*@__PURE__*/ new Vector3( 0, 0, - 1 )
24
+ ];
25
+
26
+ const _cubeUps = [
27
+ /*@__PURE__*/ new Vector3( 0, - 1, 0 ), /*@__PURE__*/ new Vector3( 0, - 1, 0 ), /*@__PURE__*/ new Vector3( 0, 0, 1 ),
28
+ /*@__PURE__*/ new Vector3( 0, 0, - 1 ), /*@__PURE__*/ new Vector3( 0, - 1, 0 ), /*@__PURE__*/ new Vector3( 0, - 1, 0 )
29
+ ];
30
+
31
+ const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
32
+ const _lightPositionWorld = /*@__PURE__*/ new Vector3();
33
+ const _lookTarget = /*@__PURE__*/ new Vector3();
15
34
 
16
35
  function WebGLShadowMap( renderer, objects, capabilities ) {
17
36
 
@@ -22,7 +41,7 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
22
41
 
23
42
  _viewport = new Vector4(),
24
43
 
25
- _depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),
44
+ _depthMaterial = new MeshDepthMaterial(),
26
45
  _distanceMaterial = new MeshDistanceMaterial(),
27
46
 
28
47
  _materialCache = {},
@@ -77,6 +96,13 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
77
96
 
78
97
  if ( lights.length === 0 ) return;
79
98
 
99
+ if ( this.type === PCFSoftShadowMap ) {
100
+
101
+ warn( 'WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead.' );
102
+ this.type = PCFShadowMap;
103
+
104
+ }
105
+
80
106
  const currentRenderTarget = renderer.getRenderTarget();
81
107
  const activeCubeFace = renderer.getActiveCubeFace();
82
108
  const activeMipmapLevel = renderer.getActiveMipmapLevel();
@@ -101,8 +127,31 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
101
127
 
102
128
  // check for shadow map type changes
103
129
 
104
- const toVSM = ( _previousType !== VSMShadowMap && this.type === VSMShadowMap );
105
- const fromVSM = ( _previousType === VSMShadowMap && this.type !== VSMShadowMap );
130
+ const typeChanged = _previousType !== this.type;
131
+
132
+ // When shadow map type changes, materials need recompilation because sampler types change
133
+ // (sampler2DShadow for PCF vs sampler2D for Basic)
134
+ if ( typeChanged ) {
135
+
136
+ scene.traverse( function ( object ) {
137
+
138
+ if ( object.material ) {
139
+
140
+ if ( Array.isArray( object.material ) ) {
141
+
142
+ object.material.forEach( mat => mat.needsUpdate = true );
143
+
144
+ } else {
145
+
146
+ object.material.needsUpdate = true;
147
+
148
+ }
149
+
150
+ }
151
+
152
+ } );
153
+
154
+ }
106
155
 
107
156
  // render depth map
108
157
 
@@ -148,42 +197,154 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
148
197
 
149
198
  }
150
199
 
151
- if ( shadow.map === null || toVSM === true || fromVSM === true ) {
200
+ const reversedDepthBuffer = renderer.state.buffers.depth.getReversed();
201
+ shadow.camera._reversedDepth = reversedDepthBuffer;
152
202
 
153
- const pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {};
203
+ if ( shadow.map === null || typeChanged === true ) {
154
204
 
155
205
  if ( shadow.map !== null ) {
156
206
 
207
+ if ( shadow.map.depthTexture !== null ) {
208
+
209
+ shadow.map.depthTexture.dispose();
210
+ shadow.map.depthTexture = null;
211
+
212
+ }
213
+
157
214
  shadow.map.dispose();
158
215
 
159
216
  }
160
217
 
161
- shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );
162
- shadow.map.texture.name = light.name + '.shadowMap';
218
+ if ( this.type === VSMShadowMap ) {
219
+
220
+ if ( light.isPointLight ) {
221
+
222
+ warn( 'WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.' );
223
+ continue;
224
+
225
+ }
226
+
227
+ shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, {
228
+ format: RGFormat,
229
+ type: HalfFloatType,
230
+ minFilter: LinearFilter,
231
+ magFilter: LinearFilter,
232
+ generateMipmaps: false
233
+ } );
234
+ shadow.map.texture.name = light.name + '.shadowMap';
235
+
236
+ // Native depth texture for VSM - depth is captured here, then blurred into the color texture
237
+ shadow.map.depthTexture = new DepthTexture( _shadowMapSize.x, _shadowMapSize.y, FloatType );
238
+ shadow.map.depthTexture.name = light.name + '.shadowMapDepth';
239
+ shadow.map.depthTexture.format = DepthFormat;
240
+ shadow.map.depthTexture.compareFunction = null; // For regular sampling (not shadow comparison)
241
+ shadow.map.depthTexture.minFilter = NearestFilter;
242
+ shadow.map.depthTexture.magFilter = NearestFilter;
243
+
244
+ } else {
245
+
246
+ if ( light.isPointLight ) {
247
+
248
+ shadow.map = new WebGLCubeRenderTarget( _shadowMapSize.x );
249
+ shadow.map.depthTexture = new CubeDepthTexture( _shadowMapSize.x, UnsignedIntType );
250
+
251
+ } else {
252
+
253
+ shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );
254
+ shadow.map.depthTexture = new DepthTexture( _shadowMapSize.x, _shadowMapSize.y, UnsignedIntType );
255
+
256
+ }
257
+
258
+ shadow.map.depthTexture.name = light.name + '.shadowMap';
259
+ shadow.map.depthTexture.format = DepthFormat;
260
+
261
+ if ( this.type === PCFShadowMap ) {
262
+
263
+ shadow.map.depthTexture.compareFunction = reversedDepthBuffer ? GreaterEqualCompare : LessEqualCompare;
264
+ shadow.map.depthTexture.minFilter = LinearFilter;
265
+ shadow.map.depthTexture.magFilter = LinearFilter;
266
+
267
+ } else {
268
+
269
+ shadow.map.depthTexture.compareFunction = null;
270
+ shadow.map.depthTexture.minFilter = NearestFilter;
271
+ shadow.map.depthTexture.magFilter = NearestFilter;
272
+
273
+ }
274
+
275
+ }
163
276
 
164
277
  shadow.camera.updateProjectionMatrix();
165
278
 
166
279
  }
167
280
 
168
- renderer.setRenderTarget( shadow.map );
169
- renderer.clear();
281
+ // For cube render targets (PointLights), render all 6 faces. Otherwise, render once.
282
+ const faceCount = shadow.map.isWebGLCubeRenderTarget ? 6 : 1;
283
+
284
+ for ( let face = 0; face < faceCount; face ++ ) {
285
+
286
+ // For cube render targets, render to each face separately
287
+ if ( shadow.map.isWebGLCubeRenderTarget ) {
288
+
289
+ renderer.setRenderTarget( shadow.map, face );
290
+ renderer.clear();
291
+
292
+ } else {
293
+
294
+ // For 2D render targets, use viewports
295
+ if ( face === 0 ) {
170
296
 
171
- const viewportCount = shadow.getViewportCount();
297
+ renderer.setRenderTarget( shadow.map );
298
+ renderer.clear();
172
299
 
173
- for ( let vp = 0; vp < viewportCount; vp ++ ) {
300
+ }
301
+
302
+ const viewport = shadow.getViewport( face );
303
+
304
+ _viewport.set(
305
+ _viewportSize.x * viewport.x,
306
+ _viewportSize.y * viewport.y,
307
+ _viewportSize.x * viewport.z,
308
+ _viewportSize.y * viewport.w
309
+ );
174
310
 
175
- const viewport = shadow.getViewport( vp );
311
+ _state.viewport( _viewport );
312
+
313
+ }
176
314
 
177
- _viewport.set(
178
- _viewportSize.x * viewport.x,
179
- _viewportSize.y * viewport.y,
180
- _viewportSize.x * viewport.z,
181
- _viewportSize.y * viewport.w
182
- );
315
+ if ( light.isPointLight ) {
183
316
 
184
- _state.viewport( _viewport );
317
+ const camera = shadow.camera;
318
+ const shadowMatrix = shadow.matrix;
185
319
 
186
- shadow.updateMatrices( light, vp );
320
+ const far = light.distance || camera.far;
321
+
322
+ if ( far !== camera.far ) {
323
+
324
+ camera.far = far;
325
+ camera.updateProjectionMatrix();
326
+
327
+ }
328
+
329
+ _lightPositionWorld.setFromMatrixPosition( light.matrixWorld );
330
+ camera.position.copy( _lightPositionWorld );
331
+
332
+ _lookTarget.copy( camera.position );
333
+ _lookTarget.add( _cubeDirections[ face ] );
334
+ camera.up.copy( _cubeUps[ face ] );
335
+ camera.lookAt( _lookTarget );
336
+ camera.updateMatrixWorld();
337
+
338
+ shadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );
339
+
340
+ _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
341
+ shadow._frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
342
+
343
+ } else {
344
+
345
+ shadow.updateMatrices( light );
346
+
347
+ }
187
348
 
188
349
  _frustum = shadow.getFrustum();
189
350
 
@@ -227,13 +388,16 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
227
388
 
228
389
  if ( shadow.mapPass === null ) {
229
390
 
230
- shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );
391
+ shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, {
392
+ format: RGFormat,
393
+ type: HalfFloatType
394
+ } );
231
395
 
232
396
  }
233
397
 
234
- // vertical pass
398
+ // vertical pass - read from native depth texture
235
399
 
236
- shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;
400
+ shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.depthTexture;
237
401
  shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;
238
402
  shadowMaterialVertical.uniforms.radius.value = shadow.radius;
239
403
  renderer.setRenderTarget( shadow.mapPass );