super-three 0.181.0 → 0.184.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 (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,4 +1,4 @@
1
- import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, LinearSRGBColorSpace, SRGBTransfer } from '../../constants.js';
1
+ import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, SRGBTransfer, RGFormat, RG11_EAC_Format, RED_GREEN_RGTC2_Format } from '../../constants.js';
2
2
  import { Layers } from '../../core/Layers.js';
3
3
  import { WebGLProgram } from './WebGLProgram.js';
4
4
  import { WebGLShaderCache } from './WebGLShaderCache.js';
@@ -7,21 +7,27 @@ 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 isPackedRGFormat( format ) {
11
+
12
+ return format === RGFormat || format === RG11_EAC_Format || format === RED_GREEN_RGTC2_Format;
13
+
14
+ }
15
+
16
+ function WebGLPrograms( renderer, environments, extensions, capabilities, bindingStates, clipping ) {
11
17
 
12
18
  const _programLayers = new Layers();
13
19
  const _customShaders = new WebGLShaderCache();
14
20
  const _activeChannels = new Set();
15
21
  const programs = [];
22
+ const programsMap = new Map();
16
23
 
17
24
  const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
18
- const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;
19
25
 
20
26
  let precision = capabilities.precision;
21
27
 
22
28
  const shaderIDs = {
23
29
  MeshDepthMaterial: 'depth',
24
- MeshDistanceMaterial: 'distanceRGBA',
30
+ MeshDistanceMaterial: 'distance',
25
31
  MeshNormalMaterial: 'normal',
26
32
  MeshBasicMaterial: 'basic',
27
33
  MeshLambertMaterial: 'lambert',
@@ -47,13 +53,14 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
47
53
 
48
54
  }
49
55
 
50
- function getParameters( material, lights, shadows, scene, object ) {
56
+ function getParameters( material, lights, shadows, scene, object, lightProbeGrids ) {
51
57
 
52
58
  const fog = scene.fog;
53
59
  const geometry = object.geometry;
54
- const environment = material.isMeshStandardMaterial ? scene.environment : null;
60
+ const environment = ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) ? scene.environment : null;
55
61
 
56
- const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );
62
+ const usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );
63
+ const envMap = environments.get( material.envMap || environment, usePMREM );
57
64
  const envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;
58
65
 
59
66
  const shaderID = shaderIDs[ material.type ];
@@ -201,9 +208,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
201
208
  instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
202
209
  instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,
203
210
 
204
- supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,
205
211
  numMultiviewViews: numMultiviewViews,
206
- outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),
212
+ outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : ColorManagement.workingColorSpace ),
207
213
  alphaToCoverage: !! material.alphaToCoverage,
208
214
 
209
215
  map: HAS_MAP,
@@ -215,11 +221,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
215
221
  lightMap: HAS_LIGHTMAP,
216
222
  bumpMap: HAS_BUMPMAP,
217
223
  normalMap: HAS_NORMALMAP,
218
- displacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP,
224
+ displacementMap: HAS_DISPLACEMENTMAP,
219
225
  emissiveMap: HAS_EMISSIVEMAP,
220
226
 
221
227
  normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,
222
228
  normalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap,
229
+ packedNormalMap: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap && isPackedRGFormat( material.normalMap.format ),
223
230
 
224
231
  metalnessMap: HAS_METALNESSMAP,
225
232
  roughnessMap: HAS_ROUGHNESSMAP,
@@ -297,6 +304,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
297
304
  //
298
305
 
299
306
  vertexTangents: !! geometry.attributes.tangent && ( HAS_NORMALMAP || HAS_ANISOTROPY ),
307
+ vertexNormals: !! geometry.attributes.normal,
300
308
  vertexColors: material.vertexColors,
301
309
  vertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,
302
310
 
@@ -306,7 +314,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
306
314
  useFog: material.fog === true,
307
315
  fogExp2: ( !! fog && fog.isFogExp2 ),
308
316
 
309
- flatShading: ( material.flatShading === true && material.wireframe === false ),
317
+ flatShading: material.wireframe === false && (
318
+ material.flatShading === true ||
319
+ ( geometry.attributes.normal === undefined && HAS_NORMALMAP === false &&
320
+ ( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isMeshPhysicalMaterial )
321
+ )
322
+ ),
310
323
 
311
324
  sizeAttenuation: material.sizeAttenuation === true,
312
325
  logarithmicDepthBuffer: logarithmicDepthBuffer,
@@ -334,6 +347,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
334
347
 
335
348
  numLightProbes: lights.numLightProbes,
336
349
 
350
+ numLightProbeGrids: lightProbeGrids.length,
351
+
337
352
  numClippingPlanes: clipping.numPlanes,
338
353
  numClipIntersection: clipping.numIntersection,
339
354
 
@@ -475,52 +490,54 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
475
490
 
476
491
  _programLayers.disableAll();
477
492
 
478
- if ( parameters.supportsVertexTextures )
479
- _programLayers.enable( 0 );
480
493
  if ( parameters.instancing )
481
- _programLayers.enable( 1 );
494
+ _programLayers.enable( 0 );
482
495
  if ( parameters.instancingColor )
483
- _programLayers.enable( 2 );
496
+ _programLayers.enable( 1 );
484
497
  if ( parameters.instancingMorph )
485
- _programLayers.enable( 3 );
498
+ _programLayers.enable( 2 );
486
499
  if ( parameters.matcap )
487
- _programLayers.enable( 4 );
500
+ _programLayers.enable( 3 );
488
501
  if ( parameters.envMap )
489
- _programLayers.enable( 5 );
502
+ _programLayers.enable( 4 );
490
503
  if ( parameters.normalMapObjectSpace )
491
- _programLayers.enable( 6 );
504
+ _programLayers.enable( 5 );
492
505
  if ( parameters.normalMapTangentSpace )
493
- _programLayers.enable( 7 );
506
+ _programLayers.enable( 6 );
494
507
  if ( parameters.clearcoat )
495
- _programLayers.enable( 8 );
508
+ _programLayers.enable( 7 );
496
509
  if ( parameters.iridescence )
497
- _programLayers.enable( 9 );
510
+ _programLayers.enable( 8 );
498
511
  if ( parameters.alphaTest )
499
- _programLayers.enable( 10 );
512
+ _programLayers.enable( 9 );
500
513
  if ( parameters.vertexColors )
501
- _programLayers.enable( 11 );
514
+ _programLayers.enable( 10 );
502
515
  if ( parameters.vertexAlphas )
503
- _programLayers.enable( 12 );
516
+ _programLayers.enable( 11 );
504
517
  if ( parameters.vertexUv1s )
505
- _programLayers.enable( 13 );
518
+ _programLayers.enable( 12 );
506
519
  if ( parameters.vertexUv2s )
507
- _programLayers.enable( 14 );
520
+ _programLayers.enable( 13 );
508
521
  if ( parameters.vertexUv3s )
509
- _programLayers.enable( 15 );
522
+ _programLayers.enable( 14 );
510
523
  if ( parameters.vertexTangents )
511
- _programLayers.enable( 16 );
524
+ _programLayers.enable( 15 );
512
525
  if ( parameters.anisotropy )
513
- _programLayers.enable( 17 );
526
+ _programLayers.enable( 16 );
514
527
  if ( parameters.alphaHash )
515
- _programLayers.enable( 18 );
528
+ _programLayers.enable( 17 );
516
529
  if ( parameters.batching )
517
- _programLayers.enable( 19 );
530
+ _programLayers.enable( 18 );
518
531
  if ( parameters.dispersion )
519
- _programLayers.enable( 20 );
532
+ _programLayers.enable( 19 );
520
533
  if ( parameters.batchingColor )
521
- _programLayers.enable( 21 );
534
+ _programLayers.enable( 20 );
522
535
  if ( parameters.gradientMap )
536
+ _programLayers.enable( 21 );
537
+ if ( parameters.packedNormalMap )
523
538
  _programLayers.enable( 22 );
539
+ if ( parameters.vertexNormals )
540
+ _programLayers.enable( 23 );
524
541
 
525
542
  array.push( _programLayers.mask );
526
543
  _programLayers.disableAll();
@@ -569,8 +586,10 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
569
586
  _programLayers.enable( 20 );
570
587
  if ( parameters.alphaToCoverage )
571
588
  _programLayers.enable( 21 );
572
- if ( parameters.numMultiviewViews )
589
+ if ( parameters.numLightProbeGrids > 0 )
573
590
  _programLayers.enable( 22 );
591
+ if ( parameters.numMultiviewViews )
592
+ _programLayers.enable( 23 );
574
593
 
575
594
  array.push( _programLayers.mask );
576
595
 
@@ -598,29 +617,19 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
598
617
 
599
618
  function acquireProgram( parameters, cacheKey ) {
600
619
 
601
- let program;
602
-
603
- // Check if code has been already compiled
604
- for ( let p = 0, pl = programs.length; p < pl; p ++ ) {
605
-
606
- const preexistingProgram = programs[ p ];
607
-
608
- if ( preexistingProgram.cacheKey === cacheKey ) {
620
+ let program = programsMap.get( cacheKey );
609
621
 
610
- program = preexistingProgram;
611
- ++ program.usedTimes;
622
+ if ( program !== undefined ) {
612
623
 
613
- break;
624
+ ++ program.usedTimes;
614
625
 
615
- }
616
-
617
- }
618
-
619
- if ( program === undefined ) {
626
+ } else {
620
627
 
621
628
  program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );
622
629
  programs.push( program );
623
630
 
631
+ programsMap.set( cacheKey, program );
632
+
624
633
  }
625
634
 
626
635
  return program;
@@ -636,6 +645,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
636
645
  programs[ i ] = programs[ programs.length - 1 ];
637
646
  programs.pop();
638
647
 
648
+ // Remove from map
649
+ programsMap.delete( program.cacheKey );
650
+
639
651
  // Free WebGL resources
640
652
  program.destroy();
641
653
 
@@ -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;
@@ -6,6 +6,7 @@ function WebGLRenderState( extensions ) {
6
6
 
7
7
  const lightsArray = [];
8
8
  const shadowsArray = [];
9
+ const lightProbeGridArray = [];
9
10
 
10
11
  function init( camera ) {
11
12
 
@@ -13,6 +14,7 @@ function WebGLRenderState( extensions ) {
13
14
 
14
15
  lightsArray.length = 0;
15
16
  shadowsArray.length = 0;
17
+ lightProbeGridArray.length = 0;
16
18
 
17
19
  }
18
20
 
@@ -28,6 +30,12 @@ function WebGLRenderState( extensions ) {
28
30
 
29
31
  }
30
32
 
33
+ function pushLightProbeGrid( volume ) {
34
+
35
+ lightProbeGridArray.push( volume );
36
+
37
+ }
38
+
31
39
  function setupLights() {
32
40
 
33
41
  lights.setup( lightsArray );
@@ -43,12 +51,14 @@ function WebGLRenderState( extensions ) {
43
51
  const state = {
44
52
  lightsArray: lightsArray,
45
53
  shadowsArray: shadowsArray,
54
+ lightProbeGridArray: lightProbeGridArray,
46
55
 
47
56
  camera: null,
48
57
 
49
58
  lights: lights,
50
59
 
51
- transmissionRenderTarget: {}
60
+ transmissionRenderTarget: {},
61
+ textureUnits: 0
52
62
  };
53
63
 
54
64
  return {
@@ -58,7 +68,8 @@ function WebGLRenderState( extensions ) {
58
68
  setupLightsView: setupLightsView,
59
69
 
60
70
  pushLight: pushLight,
61
- pushShadow: pushShadow
71
+ pushShadow: pushShadow,
72
+ pushLightProbeGrid: pushLightProbeGrid
62
73
  };
63
74
 
64
75
  }
@@ -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 );