super-three 0.181.0 → 0.185.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 (693) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +21332 -19201
  4. package/build/three.core.js +20908 -19853
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1947 -862
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +37 -16
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +33628 -25197
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +33394 -25000
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +14 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +13 -6
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +127 -86
  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 +102 -17
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMFrustum.js +31 -6
  26. package/examples/jsm/csm/CSMShadowNode.js +10 -3
  27. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  28. package/examples/jsm/effects/AsciiEffect.js +14 -1
  29. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  30. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  31. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  32. package/examples/jsm/exporters/EXRExporter.js +1 -1
  33. package/examples/jsm/exporters/GLTFExporter.js +266 -21
  34. package/examples/jsm/exporters/PLYExporter.js +286 -73
  35. package/examples/jsm/exporters/USDZExporter.js +353 -99
  36. package/examples/jsm/generators/CityGenerator.js +346 -0
  37. package/examples/jsm/generators/ForestGenerator.js +347 -0
  38. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  39. package/examples/jsm/generators/TreeGenerator.js +377 -0
  40. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  41. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  42. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  43. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  44. package/examples/jsm/geometries/TextGeometry.js +18 -0
  45. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  46. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  47. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  48. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  49. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  50. package/examples/jsm/helpers/ViewHelper.js +83 -14
  51. package/examples/jsm/inspector/Extension.js +13 -0
  52. package/examples/jsm/inspector/Inspector.js +244 -91
  53. package/examples/jsm/inspector/RendererInspector.js +165 -39
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  55. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  56. package/examples/jsm/inspector/tabs/Console.js +241 -25
  57. package/examples/jsm/inspector/tabs/Memory.js +136 -0
  58. package/examples/jsm/inspector/tabs/Parameters.js +115 -7
  59. package/examples/jsm/inspector/tabs/Performance.js +24 -9
  60. package/examples/jsm/inspector/tabs/Settings.js +306 -0
  61. package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
  62. package/examples/jsm/inspector/tabs/Viewer.js +723 -9
  63. package/examples/jsm/inspector/ui/Graph.js +162 -25
  64. package/examples/jsm/inspector/ui/Item.js +92 -13
  65. package/examples/jsm/inspector/ui/List.js +2 -2
  66. package/examples/jsm/inspector/ui/Profiler.js +1991 -44
  67. package/examples/jsm/inspector/ui/Style.js +1943 -543
  68. package/examples/jsm/inspector/ui/Tab.js +226 -5
  69. package/examples/jsm/inspector/ui/Values.js +126 -8
  70. package/examples/jsm/inspector/ui/utils.js +143 -10
  71. package/examples/jsm/interaction/InteractionManager.js +226 -0
  72. package/examples/jsm/libs/basis/README.md +0 -1
  73. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  74. package/examples/jsm/libs/draco/README.md +0 -1
  75. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  76. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  77. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  78. package/examples/jsm/libs/mikktspace.module.js +34 -9
  79. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  80. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  81. package/examples/jsm/lighting/LightProbeGrid.js +681 -0
  82. package/examples/jsm/lines/LineMaterial.js +45 -16
  83. package/examples/jsm/lines/LineSegments2.js +8 -0
  84. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  85. package/examples/jsm/loaders/3DMLoader.js +6 -5
  86. package/examples/jsm/loaders/3MFLoader.js +2 -2
  87. package/examples/jsm/loaders/AMFLoader.js +2 -2
  88. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  89. package/examples/jsm/loaders/DRACOLoader.js +51 -18
  90. package/examples/jsm/loaders/EXRLoader.js +701 -90
  91. package/examples/jsm/loaders/FBXLoader.js +235 -37
  92. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  93. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  94. package/examples/jsm/loaders/HDRLoader.js +7 -30
  95. package/examples/jsm/loaders/KMZLoader.js +5 -5
  96. package/examples/jsm/loaders/KTX2Loader.js +58 -17
  97. package/examples/jsm/loaders/LDrawLoader.js +49 -58
  98. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  99. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  100. package/examples/jsm/loaders/LWOLoader.js +11 -39
  101. package/examples/jsm/loaders/LottieLoader.js +1 -1
  102. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  103. package/examples/jsm/loaders/NRRDLoader.js +5 -5
  104. package/examples/jsm/loaders/PCDLoader.js +11 -9
  105. package/examples/jsm/loaders/PLYLoader.js +218 -55
  106. package/examples/jsm/loaders/SVGLoader.js +549 -497
  107. package/examples/jsm/loaders/TDSLoader.js +0 -2
  108. package/examples/jsm/loaders/TGALoader.js +0 -2
  109. package/examples/jsm/loaders/TTFLoader.js +1 -1
  110. package/examples/jsm/loaders/USDLoader.js +127 -43
  111. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  112. package/examples/jsm/loaders/VOXLoader.js +660 -117
  113. package/examples/jsm/loaders/VRMLLoader.js +80 -3
  114. package/examples/jsm/loaders/VTKLoader.js +42 -25
  115. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  116. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  117. package/examples/jsm/loaders/usd/USDAParser.js +504 -344
  118. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  119. package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
  120. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  121. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  122. package/examples/jsm/math/Octree.js +131 -1
  123. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  124. package/examples/jsm/misc/RollerCoaster.js +42 -4
  125. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  126. package/examples/jsm/misc/Volume.js +2 -3
  127. package/examples/jsm/misc/VolumeSlice.js +0 -1
  128. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  129. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  130. package/examples/jsm/objects/LensflareMesh.js +1 -1
  131. package/examples/jsm/objects/Reflector.js +72 -25
  132. package/examples/jsm/objects/Sky.js +90 -6
  133. package/examples/jsm/objects/SkyMesh.js +150 -16
  134. package/examples/jsm/objects/Water.js +4 -3
  135. package/examples/jsm/objects/Water2.js +5 -3
  136. package/examples/jsm/objects/Water2Mesh.js +1 -1
  137. package/examples/jsm/objects/WaterMesh.js +5 -7
  138. package/examples/jsm/physics/AmmoPhysics.js +27 -15
  139. package/examples/jsm/physics/JoltPhysics.js +10 -6
  140. package/examples/jsm/physics/RapierPhysics.js +36 -7
  141. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  142. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  143. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  144. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  145. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  146. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  147. package/examples/jsm/renderers/Projector.js +246 -28
  148. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  149. package/examples/jsm/shaders/GTAOShader.js +19 -6
  150. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  151. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  152. package/examples/jsm/shaders/SAOShader.js +17 -4
  153. package/examples/jsm/shaders/SSAOShader.js +11 -1
  154. package/examples/jsm/shaders/SSRShader.js +6 -5
  155. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  156. package/examples/jsm/shaders/VignetteShader.js +1 -1
  157. package/examples/jsm/shaders/VolumeShader.js +31 -44
  158. package/examples/jsm/transpiler/AST.js +44 -0
  159. package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
  160. package/examples/jsm/transpiler/Linker.js +1 -1
  161. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  162. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  163. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  164. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  165. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  166. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  167. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  168. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  169. package/examples/jsm/tsl/display/BloomNode.js +75 -25
  170. package/examples/jsm/tsl/display/CRT.js +150 -0
  171. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  172. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  173. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  174. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  175. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  176. package/examples/jsm/tsl/display/FXAANode.js +13 -14
  177. package/examples/jsm/tsl/display/GTAONode.js +40 -17
  178. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  179. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  180. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  181. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  182. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  183. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  184. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  185. package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
  186. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  187. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  188. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  189. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  190. package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
  191. package/examples/jsm/tsl/display/SSGINode.js +96 -62
  192. package/examples/jsm/tsl/display/SSRNode.js +831 -134
  193. package/examples/jsm/tsl/display/SSSNode.js +8 -6
  194. package/examples/jsm/tsl/display/Shape.js +29 -0
  195. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  196. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  197. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  198. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  199. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  200. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  201. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  202. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  203. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  204. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  205. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  206. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  207. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  208. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  209. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  210. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  211. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  212. package/examples/jsm/tsl/math/Bayer.js +53 -3
  213. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  214. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  215. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  216. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  217. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  218. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  219. package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
  220. package/examples/jsm/utils/ColorUtils.js +76 -0
  221. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  222. package/examples/jsm/utils/LDrawUtils.js +1 -1
  223. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  224. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  225. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  226. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  227. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  228. package/examples/jsm/webxr/ARButton.js +1 -1
  229. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  230. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  231. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  232. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  233. package/package.json +28 -34
  234. package/src/Three.Core.js +3 -1
  235. package/src/Three.TSL.js +35 -14
  236. package/src/Three.WebGPU.Nodes.js +5 -0
  237. package/src/Three.WebGPU.js +13 -0
  238. package/src/Three.js +1 -0
  239. package/src/animation/AnimationAction.js +18 -4
  240. package/src/animation/AnimationClip.js +0 -139
  241. package/src/animation/AnimationMixer.js +6 -0
  242. package/src/animation/AnimationUtils.js +1 -12
  243. package/src/animation/KeyframeTrack.js +47 -8
  244. package/src/animation/PropertyBinding.js +2 -2
  245. package/src/animation/PropertyMixer.js +4 -4
  246. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  247. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  248. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  249. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  250. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  251. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  252. package/src/audio/Audio.js +1 -1
  253. package/src/audio/AudioContext.js +2 -2
  254. package/src/audio/AudioListener.js +5 -3
  255. package/src/cameras/Camera.js +34 -4
  256. package/src/cameras/CubeCamera.js +20 -0
  257. package/src/cameras/StereoCamera.js +5 -2
  258. package/src/constants.js +90 -5
  259. package/src/core/BufferAttribute.js +13 -1
  260. package/src/core/BufferGeometry.js +43 -9
  261. package/src/core/Clock.js +7 -0
  262. package/src/core/Object3D.js +69 -11
  263. package/src/core/Raycaster.js +3 -3
  264. package/src/core/RenderTarget.js +19 -6
  265. package/src/extras/PMREMGenerator.js +13 -22
  266. package/src/extras/TextureUtils.js +6 -2
  267. package/src/extras/core/ShapePath.js +149 -160
  268. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  269. package/src/geometries/ExtrudeGeometry.js +2 -2
  270. package/src/geometries/PolyhedronGeometry.js +1 -1
  271. package/src/geometries/SphereGeometry.js +8 -3
  272. package/src/geometries/TorusGeometry.js +8 -3
  273. package/src/helpers/CameraHelper.js +3 -0
  274. package/src/helpers/DirectionalLightHelper.js +6 -1
  275. package/src/helpers/HemisphereLightHelper.js +5 -0
  276. package/src/helpers/PointLightHelper.js +3 -25
  277. package/src/helpers/SpotLightHelper.js +4 -1
  278. package/src/lights/DirectionalLight.js +13 -0
  279. package/src/lights/HemisphereLight.js +10 -0
  280. package/src/lights/Light.js +1 -11
  281. package/src/lights/LightProbe.js +0 -15
  282. package/src/lights/LightShadow.js +15 -6
  283. package/src/lights/PointLight.js +15 -0
  284. package/src/lights/PointLightShadow.js +0 -86
  285. package/src/lights/SpotLight.js +22 -1
  286. package/src/lights/webgpu/IESSpotLight.js +2 -1
  287. package/src/loaders/AudioLoader.js +11 -1
  288. package/src/loaders/Cache.js +28 -0
  289. package/src/loaders/DataTextureLoader.js +75 -42
  290. package/src/loaders/FileLoader.js +2 -3
  291. package/src/loaders/ImageBitmapLoader.js +12 -9
  292. package/src/loaders/Loader.js +6 -0
  293. package/src/loaders/LoadingManager.js +5 -0
  294. package/src/loaders/MaterialLoader.js +37 -266
  295. package/src/loaders/ObjectLoader.js +48 -6
  296. package/src/loaders/nodes/NodeLoader.js +2 -2
  297. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  298. package/src/materials/LineBasicMaterial.js +4 -0
  299. package/src/materials/Material.js +198 -1
  300. package/src/materials/MeshBasicMaterial.js +24 -0
  301. package/src/materials/MeshDepthMaterial.js +10 -0
  302. package/src/materials/MeshDistanceMaterial.js +10 -0
  303. package/src/materials/MeshLambertMaterial.js +49 -1
  304. package/src/materials/MeshMatcapMaterial.js +25 -1
  305. package/src/materials/MeshNormalMaterial.js +9 -1
  306. package/src/materials/MeshPhongMaterial.js +49 -1
  307. package/src/materials/MeshPhysicalMaterial.js +38 -0
  308. package/src/materials/MeshStandardMaterial.js +42 -1
  309. package/src/materials/MeshToonMaterial.js +35 -2
  310. package/src/materials/PointsMaterial.js +7 -0
  311. package/src/materials/ShaderMaterial.js +106 -1
  312. package/src/materials/SpriteMaterial.js +7 -0
  313. package/src/materials/nodes/Line2NodeMaterial.js +380 -297
  314. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  315. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  316. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  317. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
  318. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  319. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
  320. package/src/materials/nodes/NodeMaterial.js +153 -89
  321. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  322. package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
  323. package/src/math/Box3.js +5 -0
  324. package/src/math/FrustumArray.js +103 -133
  325. package/src/math/Interpolant.js +1 -1
  326. package/src/math/Line3.js +6 -5
  327. package/src/math/MathUtils.js +12 -12
  328. package/src/math/Matrix2.js +13 -9
  329. package/src/math/Matrix3.js +24 -9
  330. package/src/math/Matrix4.js +112 -74
  331. package/src/math/Plane.js +4 -3
  332. package/src/math/Quaternion.js +3 -29
  333. package/src/math/Sphere.js +1 -1
  334. package/src/math/Triangle.js +1 -1
  335. package/src/math/Vector2.js +13 -9
  336. package/src/math/Vector3.js +17 -15
  337. package/src/math/Vector4.js +15 -11
  338. package/src/math/interpolants/BezierInterpolant.js +106 -0
  339. package/src/nodes/Nodes.js +86 -71
  340. package/src/nodes/TSL.js +15 -13
  341. package/src/nodes/accessors/Arrays.js +5 -5
  342. package/src/nodes/accessors/Batch.js +108 -0
  343. package/src/nodes/accessors/Bitangent.js +7 -7
  344. package/src/nodes/accessors/BufferAttributeNode.js +120 -17
  345. package/src/nodes/accessors/BufferNode.js +29 -2
  346. package/src/nodes/accessors/Camera.js +149 -28
  347. package/src/nodes/accessors/ClippingNode.js +5 -5
  348. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  349. package/src/nodes/accessors/Instance.js +264 -0
  350. package/src/nodes/accessors/MaterialNode.js +27 -3
  351. package/src/nodes/accessors/MaterialProperties.js +6 -8
  352. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  353. package/src/nodes/accessors/ModelNode.js +1 -1
  354. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  355. package/src/nodes/accessors/Normal.js +24 -24
  356. package/src/nodes/accessors/Object3DNode.js +1 -1
  357. package/src/nodes/accessors/Position.js +39 -3
  358. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  359. package/src/nodes/accessors/ReferenceNode.js +9 -8
  360. package/src/nodes/accessors/ReflectVector.js +3 -3
  361. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  362. package/src/nodes/accessors/SceneProperties.js +47 -0
  363. package/src/nodes/accessors/Skinning.js +263 -0
  364. package/src/nodes/accessors/StorageBufferNode.js +16 -27
  365. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  366. package/src/nodes/accessors/StorageTextureNode.js +74 -11
  367. package/src/nodes/accessors/Tangent.js +8 -18
  368. package/src/nodes/accessors/Texture3DNode.js +32 -35
  369. package/src/nodes/accessors/TextureNode.js +124 -25
  370. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  371. package/src/nodes/accessors/UserDataNode.js +1 -2
  372. package/src/nodes/accessors/VertexColorNode.js +1 -2
  373. package/src/nodes/code/FunctionCallNode.js +1 -1
  374. package/src/nodes/code/FunctionNode.js +4 -19
  375. package/src/nodes/core/ArrayNode.js +21 -2
  376. package/src/nodes/core/AssignNode.js +3 -3
  377. package/src/nodes/core/AttributeNode.js +3 -3
  378. package/src/nodes/core/BypassNode.js +1 -1
  379. package/src/nodes/core/ContextNode.js +104 -5
  380. package/src/nodes/core/IndexNode.js +2 -1
  381. package/src/nodes/core/InputNode.js +1 -1
  382. package/src/nodes/core/InspectorNode.js +1 -1
  383. package/src/nodes/core/IsolateNode.js +1 -1
  384. package/src/nodes/core/MRTNode.js +55 -4
  385. package/src/nodes/core/Node.js +151 -17
  386. package/src/nodes/core/NodeBuilder.js +479 -101
  387. package/src/nodes/core/NodeError.js +28 -0
  388. package/src/nodes/core/NodeFrame.js +12 -4
  389. package/src/nodes/core/NodeUtils.js +20 -18
  390. package/src/nodes/core/OutputStructNode.js +13 -11
  391. package/src/nodes/core/OverrideContextNode.js +153 -0
  392. package/src/nodes/core/ParameterNode.js +4 -4
  393. package/src/nodes/core/PropertyNode.js +66 -4
  394. package/src/nodes/core/StackNode.js +91 -20
  395. package/src/nodes/core/StackTrace.js +139 -0
  396. package/src/nodes/core/StructNode.js +20 -8
  397. package/src/nodes/core/StructTypeNode.js +17 -23
  398. package/src/nodes/core/SubBuildNode.js +2 -2
  399. package/src/nodes/core/UniformGroupNode.js +36 -6
  400. package/src/nodes/core/UniformNode.js +21 -5
  401. package/src/nodes/core/VarNode.js +56 -23
  402. package/src/nodes/core/VaryingNode.js +14 -21
  403. package/src/nodes/display/BlendModes.js +1 -105
  404. package/src/nodes/display/BumpMapNode.js +6 -1
  405. package/src/nodes/display/ColorAdjustment.js +27 -9
  406. package/src/nodes/display/ColorSpaceNode.js +3 -3
  407. package/src/nodes/display/FrontFacingNode.js +38 -9
  408. package/src/nodes/display/NormalMapNode.js +41 -6
  409. package/src/nodes/display/PassNode.js +157 -56
  410. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  411. package/src/nodes/display/RenderOutputNode.js +19 -10
  412. package/src/nodes/display/ScreenNode.js +4 -2
  413. package/src/nodes/display/ToneMappingNode.js +1 -1
  414. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  415. package/src/nodes/display/ViewportDepthNode.js +52 -4
  416. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  417. package/src/nodes/display/ViewportTextureNode.js +39 -11
  418. package/src/nodes/fog/Fog.js +18 -35
  419. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  420. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  421. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  422. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  423. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  424. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  425. package/src/nodes/geometry/RangeNode.js +5 -3
  426. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  427. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  428. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  429. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  430. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  431. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
  432. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  433. package/src/nodes/lighting/EnvironmentNode.js +30 -5
  434. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  435. package/src/nodes/lighting/LightingContextNode.js +10 -2
  436. package/src/nodes/lighting/LightsNode.js +97 -65
  437. package/src/nodes/lighting/PointShadowNode.js +166 -148
  438. package/src/nodes/lighting/ShadowFilterNode.js +74 -117
  439. package/src/nodes/lighting/ShadowNode.js +149 -51
  440. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  441. package/src/nodes/math/BitcastNode.js +1 -1
  442. package/src/nodes/math/BitcountNode.js +433 -0
  443. package/src/nodes/math/ConditionalNode.js +6 -6
  444. package/src/nodes/math/MathNode.js +115 -52
  445. package/src/nodes/math/OperatorNode.js +24 -23
  446. package/src/nodes/math/PackFloatNode.js +98 -0
  447. package/src/nodes/math/UnpackFloatNode.js +96 -0
  448. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  449. package/src/nodes/pmrem/PMREMNode.js +34 -3
  450. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  451. package/src/nodes/tsl/TSLBase.js +1 -1
  452. package/src/nodes/tsl/TSLCore.js +99 -33
  453. package/src/nodes/utils/ArrayElementNode.js +14 -1
  454. package/src/nodes/utils/ConvertNode.js +1 -1
  455. package/src/nodes/utils/DebugNode.js +12 -12
  456. package/src/nodes/utils/EquirectUV.js +30 -5
  457. package/src/nodes/utils/EventNode.js +31 -2
  458. package/src/nodes/utils/FlipNode.js +1 -1
  459. package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
  460. package/src/nodes/utils/JoinNode.js +3 -3
  461. package/src/nodes/utils/LoopNode.js +1 -1
  462. package/src/nodes/utils/MemberNode.js +2 -2
  463. package/src/nodes/utils/Packing.js +48 -5
  464. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  465. package/src/nodes/utils/RTTNode.js +41 -25
  466. package/src/nodes/utils/ReflectorNode.js +4 -4
  467. package/src/nodes/utils/Remap.js +48 -0
  468. package/src/nodes/utils/RotateNode.js +1 -1
  469. package/src/nodes/utils/SampleNode.js +1 -1
  470. package/src/nodes/utils/SetNode.js +1 -1
  471. package/src/nodes/utils/SplitNode.js +1 -1
  472. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  473. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  474. package/src/nodes/utils/UVUtils.js +28 -0
  475. package/src/objects/BatchedMesh.js +66 -30
  476. package/src/objects/InstancedMesh.js +19 -3
  477. package/src/objects/Line.js +1 -1
  478. package/src/objects/Mesh.js +1 -1
  479. package/src/objects/Points.js +1 -1
  480. package/src/objects/SkinnedMesh.js +26 -9
  481. package/src/renderers/WebGLRenderer.js +344 -156
  482. package/src/renderers/common/Animation.js +3 -3
  483. package/src/renderers/common/Attributes.js +15 -1
  484. package/src/renderers/common/Backend.js +78 -13
  485. package/src/renderers/common/Background.js +26 -13
  486. package/src/renderers/common/BindGroup.js +1 -16
  487. package/src/renderers/common/Binding.js +11 -0
  488. package/src/renderers/common/Bindings.js +141 -57
  489. package/src/renderers/common/BlendMode.js +143 -0
  490. package/src/renderers/common/Buffer.js +49 -0
  491. package/src/renderers/common/BundleGroup.js +1 -1
  492. package/src/renderers/common/ChainMap.js +30 -6
  493. package/src/renderers/common/ClippingContext.js +10 -2
  494. package/src/renderers/common/ComputePipeline.js +1 -1
  495. package/src/renderers/common/CubeRenderTarget.js +51 -7
  496. package/src/renderers/common/Geometries.js +29 -3
  497. package/src/renderers/common/Info.js +374 -4
  498. package/src/renderers/common/InspectorBase.js +6 -1
  499. package/src/renderers/common/Lighting.js +51 -19
  500. package/src/renderers/common/Pipelines.js +40 -7
  501. package/src/renderers/common/PostProcessing.js +8 -206
  502. package/src/renderers/common/ReadbackBuffer.js +78 -0
  503. package/src/renderers/common/RenderBundle.js +3 -1
  504. package/src/renderers/common/RenderBundles.js +7 -3
  505. package/src/renderers/common/RenderContext.js +16 -0
  506. package/src/renderers/common/RenderContexts.js +33 -49
  507. package/src/renderers/common/RenderList.js +41 -4
  508. package/src/renderers/common/RenderLists.js +2 -1
  509. package/src/renderers/common/RenderObject.js +88 -16
  510. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  511. package/src/renderers/common/RenderObjects.js +21 -5
  512. package/src/renderers/common/RenderPipeline.js +232 -17
  513. package/src/renderers/common/Renderer.js +700 -163
  514. package/src/renderers/common/Sampler.js +16 -48
  515. package/src/renderers/common/StorageBuffer.js +13 -1
  516. package/src/renderers/common/Textures.js +121 -9
  517. package/src/renderers/common/TimestampQueryPool.js +6 -4
  518. package/src/renderers/common/Uniform.js +8 -0
  519. package/src/renderers/common/UniformsGroup.js +84 -1
  520. package/src/renderers/common/XRManager.js +377 -51
  521. package/src/renderers/common/extras/PMREMGenerator.js +40 -61
  522. package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
  523. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  524. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
  525. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  526. package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
  527. package/src/renderers/shaders/DFGLUTData.js +19 -34
  528. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  529. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  530. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  531. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  532. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  533. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  534. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  535. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  536. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
  537. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  538. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  540. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  541. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  542. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  543. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
  544. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  546. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  547. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  548. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  549. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  550. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  551. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  552. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  553. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  554. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  555. package/src/renderers/shaders/ShaderChunk.js +5 -3
  556. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  557. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  558. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
  559. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  560. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  561. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  562. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  563. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  564. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  565. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  566. package/src/renderers/shaders/ShaderLib.js +7 -6
  567. package/src/renderers/shaders/UniformsLib.js +7 -5
  568. package/src/renderers/shaders/UniformsUtils.js +27 -5
  569. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  570. package/src/renderers/webgl/WebGLBackground.js +15 -15
  571. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  572. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  573. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  574. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  575. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  576. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  577. package/src/renderers/webgl/WebGLLights.js +18 -1
  578. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  579. package/src/renderers/webgl/WebGLObjects.js +3 -1
  580. package/src/renderers/webgl/WebGLOutput.js +271 -0
  581. package/src/renderers/webgl/WebGLProgram.js +54 -113
  582. package/src/renderers/webgl/WebGLPrograms.js +74 -55
  583. package/src/renderers/webgl/WebGLRenderLists.js +24 -1
  584. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  585. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  586. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  587. package/src/renderers/webgl/WebGLState.js +75 -37
  588. package/src/renderers/webgl/WebGLTextures.js +230 -56
  589. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  590. package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
  591. package/src/renderers/webgl/WebGLUtils.js +6 -2
  592. package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
  593. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  594. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
  595. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  596. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  597. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  598. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
  599. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  600. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
  601. package/src/renderers/webgpu/WebGPUBackend.js +733 -302
  602. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  603. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  604. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  605. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  606. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  607. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  608. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  609. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  610. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  611. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  612. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  613. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  614. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  615. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  616. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  617. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  618. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  619. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  620. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  621. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  622. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  623. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  624. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  625. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  626. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  627. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
  628. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  629. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
  630. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
  631. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  632. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  633. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
  634. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
  635. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
  636. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
  637. package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
  638. package/src/renderers/webxr/WebXRController.js +12 -0
  639. package/src/renderers/webxr/WebXRManager.js +4 -2
  640. package/src/textures/CubeDepthTexture.js +76 -0
  641. package/src/textures/DepthTexture.js +1 -1
  642. package/src/textures/ExternalTexture.js +0 -3
  643. package/src/textures/HTMLTexture.js +74 -0
  644. package/src/textures/Source.js +2 -2
  645. package/src/textures/Texture.js +16 -5
  646. package/src/utils.js +280 -3
  647. package/examples/fonts/LICENSE +0 -13
  648. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  649. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  650. package/examples/fonts/README.md +0 -11
  651. package/examples/fonts/droid/NOTICE +0 -190
  652. package/examples/fonts/droid/README.txt +0 -18
  653. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  654. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  655. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  656. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  657. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  658. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  659. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  660. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  661. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  662. package/examples/fonts/optimer_bold.typeface.json +0 -1
  663. package/examples/fonts/optimer_regular.typeface.json +0 -1
  664. package/examples/fonts/ttf/README.md +0 -9
  665. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  666. package/examples/jsm/libs/ammo.wasm.js +0 -822
  667. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  668. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  669. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  670. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  671. package/examples/jsm/libs/opentype.module.js +0 -14506
  672. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  673. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  674. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  675. package/examples/jsm/lighting/TiledLighting.js +0 -42
  676. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  677. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  678. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  679. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
  680. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  681. package/src/nodes/accessors/BatchNode.js +0 -163
  682. package/src/nodes/accessors/InstanceNode.js +0 -244
  683. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  684. package/src/nodes/accessors/SceneNode.js +0 -145
  685. package/src/nodes/accessors/SkinningNode.js +0 -327
  686. package/src/nodes/code/ScriptableNode.js +0 -726
  687. package/src/nodes/code/ScriptableValueNode.js +0 -253
  688. package/src/nodes/display/PosterizeNode.js +0 -65
  689. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  690. package/src/nodes/utils/RemapNode.js +0 -125
  691. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  692. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  693. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,7 +1,7 @@
1
1
  import { WebGLUniforms } from './WebGLUniforms.js';
2
2
  import { WebGLShader } from './WebGLShader.js';
3
3
  import { ShaderChunk } from '../shaders/ShaderChunk.js';
4
- import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, NeutralToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearTransfer, SRGBTransfer } from '../../constants.js';
4
+ import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, NeutralToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearTransfer, SRGBTransfer } from '../../constants.js';
5
5
  import { ColorManagement } from '../../math/ColorManagement.js';
6
6
  import { Vector3 } from '../../math/Vector3.js';
7
7
  import { Matrix3 } from '../../math/Matrix3.js';
@@ -97,43 +97,24 @@ function getTexelEncodingFunction( functionName, colorSpace ) {
97
97
 
98
98
  }
99
99
 
100
- function getToneMappingFunction( functionName, toneMapping ) {
101
-
102
- let toneMappingName;
103
-
104
- switch ( toneMapping ) {
105
-
106
- case LinearToneMapping:
107
- toneMappingName = 'Linear';
108
- break;
109
-
110
- case ReinhardToneMapping:
111
- toneMappingName = 'Reinhard';
112
- break;
113
-
114
- case CineonToneMapping:
115
- toneMappingName = 'Cineon';
116
- break;
117
-
118
- case ACESFilmicToneMapping:
119
- toneMappingName = 'ACESFilmic';
120
- break;
100
+ const toneMappingFunctions = {
101
+ [ LinearToneMapping ]: 'Linear',
102
+ [ ReinhardToneMapping ]: 'Reinhard',
103
+ [ CineonToneMapping ]: 'Cineon',
104
+ [ ACESFilmicToneMapping ]: 'ACESFilmic',
105
+ [ AgXToneMapping ]: 'AgX',
106
+ [ NeutralToneMapping ]: 'Neutral',
107
+ [ CustomToneMapping ]: 'Custom'
108
+ };
121
109
 
122
- case AgXToneMapping:
123
- toneMappingName = 'AgX';
124
- break;
110
+ function getToneMappingFunction( functionName, toneMapping ) {
125
111
 
126
- case NeutralToneMapping:
127
- toneMappingName = 'Neutral';
128
- break;
112
+ const toneMappingName = toneMappingFunctions[ toneMapping ];
129
113
 
130
- case CustomToneMapping:
131
- toneMappingName = 'Custom';
132
- break;
114
+ if ( toneMappingName === undefined ) {
133
115
 
134
- default:
135
- warn( 'WebGLProgram: Unsupported toneMapping:', toneMapping );
136
- toneMappingName = 'Linear';
116
+ warn( 'WebGLProgram: Unsupported toneMapping:', toneMapping );
117
+ return 'vec3 ' + functionName + '( vec3 color ) { return LinearToneMapping( color ); }';
137
118
 
138
119
  }
139
120
 
@@ -284,7 +265,7 @@ function includeReplacer( match, include ) {
284
265
 
285
266
  } else {
286
267
 
287
- throw new Error( 'Can not resolve #include <' + include + '>' );
268
+ throw new Error( 'THREE.WebGLProgram: Can not resolve #include <' + include + '>' );
288
269
 
289
270
  }
290
271
 
@@ -361,99 +342,54 @@ function generatePrecision( parameters ) {
361
342
 
362
343
  }
363
344
 
364
- function generateShadowMapTypeDefine( parameters ) {
365
-
366
- let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';
367
-
368
- if ( parameters.shadowMapType === PCFShadowMap ) {
369
-
370
- shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';
345
+ const shadowMapTypeDefines = {
346
+ [ PCFShadowMap ]: 'SHADOWMAP_TYPE_PCF',
347
+ [ VSMShadowMap ]: 'SHADOWMAP_TYPE_VSM'
348
+ };
371
349
 
372
- } else if ( parameters.shadowMapType === PCFSoftShadowMap ) {
373
-
374
- shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';
375
-
376
- } else if ( parameters.shadowMapType === VSMShadowMap ) {
377
-
378
- shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';
379
-
380
- }
350
+ function generateShadowMapTypeDefine( parameters ) {
381
351
 
382
- return shadowMapTypeDefine;
352
+ return shadowMapTypeDefines[ parameters.shadowMapType ] || 'SHADOWMAP_TYPE_BASIC';
383
353
 
384
354
  }
385
355
 
386
- function generateEnvMapTypeDefine( parameters ) {
387
-
388
- let envMapTypeDefine = 'ENVMAP_TYPE_CUBE';
389
-
390
- if ( parameters.envMap ) {
391
-
392
- switch ( parameters.envMapMode ) {
393
-
394
- case CubeReflectionMapping:
395
- case CubeRefractionMapping:
396
- envMapTypeDefine = 'ENVMAP_TYPE_CUBE';
397
- break;
398
-
399
- case CubeUVReflectionMapping:
400
- envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';
401
- break;
356
+ const envMapTypeDefines = {
357
+ [ CubeReflectionMapping ]: 'ENVMAP_TYPE_CUBE',
358
+ [ CubeRefractionMapping ]: 'ENVMAP_TYPE_CUBE',
359
+ [ CubeUVReflectionMapping ]: 'ENVMAP_TYPE_CUBE_UV'
360
+ };
402
361
 
403
- }
362
+ function generateEnvMapTypeDefine( parameters ) {
404
363
 
405
- }
364
+ if ( parameters.envMap === false ) return 'ENVMAP_TYPE_CUBE';
406
365
 
407
- return envMapTypeDefine;
366
+ return envMapTypeDefines[ parameters.envMapMode ] || 'ENVMAP_TYPE_CUBE';
408
367
 
409
368
  }
410
369
 
411
- function generateEnvMapModeDefine( parameters ) {
412
-
413
- let envMapModeDefine = 'ENVMAP_MODE_REFLECTION';
414
-
415
- if ( parameters.envMap ) {
416
-
417
- switch ( parameters.envMapMode ) {
370
+ const envMapModeDefines = {
371
+ [ CubeRefractionMapping ]: 'ENVMAP_MODE_REFRACTION'
372
+ };
418
373
 
419
- case CubeRefractionMapping:
420
-
421
- envMapModeDefine = 'ENVMAP_MODE_REFRACTION';
422
- break;
423
-
424
- }
374
+ function generateEnvMapModeDefine( parameters ) {
425
375
 
426
- }
376
+ if ( parameters.envMap === false ) return 'ENVMAP_MODE_REFLECTION';
427
377
 
428
- return envMapModeDefine;
378
+ return envMapModeDefines[ parameters.envMapMode ] || 'ENVMAP_MODE_REFLECTION';
429
379
 
430
380
  }
431
381
 
432
- function generateEnvMapBlendingDefine( parameters ) {
382
+ const envMapBlendingDefines = {
383
+ [ MultiplyOperation ]: 'ENVMAP_BLENDING_MULTIPLY',
384
+ [ MixOperation ]: 'ENVMAP_BLENDING_MIX',
385
+ [ AddOperation ]: 'ENVMAP_BLENDING_ADD'
386
+ };
433
387
 
434
- let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';
435
-
436
- if ( parameters.envMap ) {
437
-
438
- switch ( parameters.combine ) {
439
-
440
- case MultiplyOperation:
441
- envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';
442
- break;
443
-
444
- case MixOperation:
445
- envMapBlendingDefine = 'ENVMAP_BLENDING_MIX';
446
- break;
447
-
448
- case AddOperation:
449
- envMapBlendingDefine = 'ENVMAP_BLENDING_ADD';
450
- break;
451
-
452
- }
388
+ function generateEnvMapBlendingDefine( parameters ) {
453
389
 
454
- }
390
+ if ( parameters.envMap === false ) return 'ENVMAP_BLENDING_NONE';
455
391
 
456
- return envMapBlendingDefine;
392
+ return envMapBlendingDefines[ parameters.combine ] || 'ENVMAP_BLENDING_NONE';
457
393
 
458
394
  }
459
395
 
@@ -629,6 +565,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
629
565
  //
630
566
 
631
567
  parameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',
568
+ parameters.vertexNormals ? '#define HAS_NORMAL' : '',
632
569
  parameters.vertexColors ? '#define USE_COLOR' : '',
633
570
  parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
634
571
  parameters.vertexUv1s ? '#define USE_UV1' : '',
@@ -762,6 +699,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
762
699
  parameters.normalMap ? '#define USE_NORMALMAP' : '',
763
700
  parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',
764
701
  parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',
702
+ parameters.packedNormalMap ? '#define USE_PACKED_NORMALMAP' : '',
765
703
  parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
766
704
 
767
705
  parameters.anisotropy ? '#define USE_ANISOTROPY' : '',
@@ -798,8 +736,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
798
736
  parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
799
737
 
800
738
  parameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',
801
- parameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? '#define USE_COLOR' : '',
802
- parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
739
+ parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',
740
+ parameters.vertexAlphas || parameters.batchingColor ? '#define USE_COLOR_ALPHA' : '',
803
741
  parameters.vertexUv1s ? '#define USE_UV1' : '',
804
742
  parameters.vertexUv2s ? '#define USE_UV2' : '',
805
743
  parameters.vertexUv3s ? '#define USE_UV3' : '',
@@ -820,6 +758,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
820
758
 
821
759
  parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
822
760
 
761
+ parameters.numLightProbeGrids > 0 ? '#define USE_LIGHT_PROBES_GRID' : '',
762
+
823
763
  parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
824
764
  parameters.decodeVideoTextureEmissive ? '#define DECODE_VIDEO_TEXTURE_EMISSIVE' : '',
825
765
 
@@ -956,9 +896,10 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
956
896
 
957
897
  gl.bindAttribLocation( program, 0, parameters.index0AttributeName );
958
898
 
959
- } else if ( parameters.morphTargets === true ) {
899
+ } else if ( parameters.hasPositionAttribute === true ) {
900
+
901
+ // below avoids the "Attribute 0 is disabled" performance penalty
960
902
 
961
- // programs with morphTargets displace position out of attribute 0
962
903
  gl.bindAttribLocation( program, 0, 'position' );
963
904
 
964
905
  }
@@ -997,7 +938,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
997
938
  const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );
998
939
 
999
940
  error(
1000
- 'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
941
+ 'WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
1001
942
  'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\n\n' +
1002
943
  'Material Name: ' + self.name + '\n' +
1003
944
  'Material Type: ' + self.type + '\n\n' +
@@ -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 ];
@@ -101,10 +108,13 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
101
108
  vertexShader = material.vertexShader;
102
109
  fragmentShader = material.fragmentShader;
103
110
 
104
- _customShaders.update( material );
111
+ const vertexShaderStage = _customShaders.getVertexShaderStage( material );
112
+ const fragmentShaderStage = _customShaders.getFragmentShaderStage( material );
105
113
 
106
- customVertexShaderID = _customShaders.getVertexShaderID( material );
107
- customFragmentShaderID = _customShaders.getFragmentShaderID( material );
114
+ _customShaders.update( material, vertexShaderStage, fragmentShaderStage );
115
+
116
+ customVertexShaderID = vertexShaderStage.id;
117
+ customFragmentShaderID = fragmentShaderStage.id;
108
118
 
109
119
  }
110
120
 
@@ -121,7 +131,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
121
131
  const HAS_ENVMAP = !! envMap;
122
132
  const HAS_AOMAP = !! material.aoMap;
123
133
  const HAS_LIGHTMAP = !! material.lightMap;
124
- const HAS_BUMPMAP = !! material.bumpMap;
134
+ const HAS_BUMPMAP = !! material.bumpMap && material.wireframe === false;
125
135
  const HAS_NORMALMAP = !! material.normalMap;
126
136
  const HAS_DISPLACEMENTMAP = !! material.displacementMap;
127
137
  const HAS_EMISSIVEMAP = !! material.emissiveMap;
@@ -201,9 +211,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
201
211
  instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
202
212
  instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,
203
213
 
204
- supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,
205
214
  numMultiviewViews: numMultiviewViews,
206
- outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),
215
+ outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : ColorManagement.workingColorSpace ),
207
216
  alphaToCoverage: !! material.alphaToCoverage,
208
217
 
209
218
  map: HAS_MAP,
@@ -215,11 +224,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
215
224
  lightMap: HAS_LIGHTMAP,
216
225
  bumpMap: HAS_BUMPMAP,
217
226
  normalMap: HAS_NORMALMAP,
218
- displacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP,
227
+ displacementMap: HAS_DISPLACEMENTMAP,
219
228
  emissiveMap: HAS_EMISSIVEMAP,
220
229
 
221
230
  normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,
222
231
  normalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap,
232
+ packedNormalMap: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap && isPackedRGFormat( material.normalMap.format ),
223
233
 
224
234
  metalnessMap: HAS_METALNESSMAP,
225
235
  roughnessMap: HAS_ROUGHNESSMAP,
@@ -297,6 +307,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
297
307
  //
298
308
 
299
309
  vertexTangents: !! geometry.attributes.tangent && ( HAS_NORMALMAP || HAS_ANISOTROPY ),
310
+ vertexNormals: !! geometry.attributes.normal,
300
311
  vertexColors: material.vertexColors,
301
312
  vertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,
302
313
 
@@ -306,7 +317,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
306
317
  useFog: material.fog === true,
307
318
  fogExp2: ( !! fog && fog.isFogExp2 ),
308
319
 
309
- flatShading: ( material.flatShading === true && material.wireframe === false ),
320
+ flatShading: material.wireframe === false && (
321
+ material.flatShading === true ||
322
+ ( geometry.attributes.normal === undefined && HAS_NORMALMAP === false &&
323
+ ( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isMeshPhysicalMaterial )
324
+ )
325
+ ),
310
326
 
311
327
  sizeAttenuation: material.sizeAttenuation === true,
312
328
  logarithmicDepthBuffer: logarithmicDepthBuffer,
@@ -314,6 +330,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
314
330
 
315
331
  skinning: object.isSkinnedMesh === true,
316
332
 
333
+ hasPositionAttribute: geometry.attributes.position !== undefined,
334
+
317
335
  morphTargets: geometry.morphAttributes.position !== undefined,
318
336
  morphNormals: geometry.morphAttributes.normal !== undefined,
319
337
  morphColors: geometry.morphAttributes.color !== undefined,
@@ -334,6 +352,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
334
352
 
335
353
  numLightProbes: lights.numLightProbes,
336
354
 
355
+ numLightProbeGrids: lightProbeGrids.length,
356
+
337
357
  numClippingPlanes: clipping.numPlanes,
338
358
  numClipIntersection: clipping.numIntersection,
339
359
 
@@ -475,52 +495,54 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
475
495
 
476
496
  _programLayers.disableAll();
477
497
 
478
- if ( parameters.supportsVertexTextures )
479
- _programLayers.enable( 0 );
480
498
  if ( parameters.instancing )
481
- _programLayers.enable( 1 );
499
+ _programLayers.enable( 0 );
482
500
  if ( parameters.instancingColor )
483
- _programLayers.enable( 2 );
501
+ _programLayers.enable( 1 );
484
502
  if ( parameters.instancingMorph )
485
- _programLayers.enable( 3 );
503
+ _programLayers.enable( 2 );
486
504
  if ( parameters.matcap )
487
- _programLayers.enable( 4 );
505
+ _programLayers.enable( 3 );
488
506
  if ( parameters.envMap )
489
- _programLayers.enable( 5 );
507
+ _programLayers.enable( 4 );
490
508
  if ( parameters.normalMapObjectSpace )
491
- _programLayers.enable( 6 );
509
+ _programLayers.enable( 5 );
492
510
  if ( parameters.normalMapTangentSpace )
493
- _programLayers.enable( 7 );
511
+ _programLayers.enable( 6 );
494
512
  if ( parameters.clearcoat )
495
- _programLayers.enable( 8 );
513
+ _programLayers.enable( 7 );
496
514
  if ( parameters.iridescence )
497
- _programLayers.enable( 9 );
515
+ _programLayers.enable( 8 );
498
516
  if ( parameters.alphaTest )
499
- _programLayers.enable( 10 );
517
+ _programLayers.enable( 9 );
500
518
  if ( parameters.vertexColors )
501
- _programLayers.enable( 11 );
519
+ _programLayers.enable( 10 );
502
520
  if ( parameters.vertexAlphas )
503
- _programLayers.enable( 12 );
521
+ _programLayers.enable( 11 );
504
522
  if ( parameters.vertexUv1s )
505
- _programLayers.enable( 13 );
523
+ _programLayers.enable( 12 );
506
524
  if ( parameters.vertexUv2s )
507
- _programLayers.enable( 14 );
525
+ _programLayers.enable( 13 );
508
526
  if ( parameters.vertexUv3s )
509
- _programLayers.enable( 15 );
527
+ _programLayers.enable( 14 );
510
528
  if ( parameters.vertexTangents )
511
- _programLayers.enable( 16 );
529
+ _programLayers.enable( 15 );
512
530
  if ( parameters.anisotropy )
513
- _programLayers.enable( 17 );
531
+ _programLayers.enable( 16 );
514
532
  if ( parameters.alphaHash )
515
- _programLayers.enable( 18 );
533
+ _programLayers.enable( 17 );
516
534
  if ( parameters.batching )
517
- _programLayers.enable( 19 );
535
+ _programLayers.enable( 18 );
518
536
  if ( parameters.dispersion )
519
- _programLayers.enable( 20 );
537
+ _programLayers.enable( 19 );
520
538
  if ( parameters.batchingColor )
521
- _programLayers.enable( 21 );
539
+ _programLayers.enable( 20 );
522
540
  if ( parameters.gradientMap )
541
+ _programLayers.enable( 21 );
542
+ if ( parameters.packedNormalMap )
523
543
  _programLayers.enable( 22 );
544
+ if ( parameters.vertexNormals )
545
+ _programLayers.enable( 23 );
524
546
 
525
547
  array.push( _programLayers.mask );
526
548
  _programLayers.disableAll();
@@ -569,8 +591,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
569
591
  _programLayers.enable( 20 );
570
592
  if ( parameters.alphaToCoverage )
571
593
  _programLayers.enable( 21 );
572
- if ( parameters.numMultiviewViews )
594
+ if ( parameters.numLightProbeGrids > 0 )
573
595
  _programLayers.enable( 22 );
596
+ if ( parameters.hasPositionAttribute )
597
+ _programLayers.enable( 23 );
598
+ if ( parameters.numMultiviewViews )
599
+ _programLayers.enable( 24 );
574
600
 
575
601
  array.push( _programLayers.mask );
576
602
 
@@ -598,29 +624,19 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
598
624
 
599
625
  function acquireProgram( parameters, cacheKey ) {
600
626
 
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 ) {
627
+ let program = programsMap.get( cacheKey );
609
628
 
610
- program = preexistingProgram;
611
- ++ program.usedTimes;
629
+ if ( program !== undefined ) {
612
630
 
613
- break;
631
+ ++ program.usedTimes;
614
632
 
615
- }
616
-
617
- }
618
-
619
- if ( program === undefined ) {
633
+ } else {
620
634
 
621
635
  program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );
622
636
  programs.push( program );
623
637
 
638
+ programsMap.set( cacheKey, program );
639
+
624
640
  }
625
641
 
626
642
  return program;
@@ -636,6 +652,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
636
652
  programs[ i ] = programs[ programs.length - 1 ];
637
653
  programs.pop();
638
654
 
655
+ // Remove from map
656
+ programsMap.delete( program.cacheKey );
657
+
639
658
  // Free WebGL resources
640
659
  program.destroy();
641
660
 
@@ -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;
@@ -144,12 +159,20 @@ function WebGLRenderList() {
144
159
 
145
160
  }
146
161
 
147
- function sort( customOpaqueSort, customTransparentSort ) {
162
+ function sort( customOpaqueSort, customTransparentSort, reversedDepth ) {
148
163
 
149
164
  if ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );
150
165
  if ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );
151
166
  if ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );
152
167
 
168
+ if ( reversedDepth ) {
169
+
170
+ opaque.reverse();
171
+ transmissive.reverse();
172
+ transparent.reverse();
173
+
174
+ }
175
+
153
176
  }
154
177
 
155
178
  function finish() {
@@ -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
  }