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
@@ -0,0 +1,681 @@
1
+ import {
2
+ Box3,
3
+ CubeCamera,
4
+ FloatType,
5
+ HalfFloatType,
6
+ LinearFilter,
7
+ Mesh,
8
+ NearestFilter,
9
+ Object3D,
10
+ OrthographicCamera,
11
+ PlaneGeometry,
12
+ RGBAFormat,
13
+ Scene,
14
+ ShaderMaterial,
15
+ Vector3,
16
+ Vector4,
17
+ WebGL3DRenderTarget,
18
+ WebGLCubeRenderTarget,
19
+ WebGLRenderTarget
20
+ } from 'three';
21
+
22
+ // Shared fullscreen-quad scene / camera
23
+ let _scene = null;
24
+ let _camera = null;
25
+ let _mesh = null;
26
+
27
+ // SH projection material (depends on cubemapSize)
28
+ let _shMaterial = null;
29
+ let _lastCubemapSize = 0;
30
+
31
+ // Repack materials (one per output sub-volume / texture index)
32
+ let _repackMaterials = null;
33
+
34
+ // Cached bake resources
35
+ let _cubeRenderTarget = null;
36
+ let _cubeCamera = null;
37
+ let _cachedCubemapSize = 0;
38
+ let _cachedNear = 0;
39
+ let _cachedFar = 0;
40
+
41
+ // Cached batch render target
42
+ let _batchTarget = null;
43
+ let _batchTargetProbes = 0;
44
+
45
+ // Reusable temp objects
46
+ const _position = /*@__PURE__*/ new Vector3();
47
+ const _size = /*@__PURE__*/ new Vector3();
48
+ const _currentViewport = /*@__PURE__*/ new Vector4();
49
+ const _currentScissor = /*@__PURE__*/ new Vector4();
50
+
51
+ // Number of padding texels added at each boundary of every sub-volume in the atlas.
52
+ const ATLAS_PADDING = 1;
53
+
54
+ /**
55
+ * A 3D grid of L2 Spherical Harmonic irradiance probes that provides
56
+ * position-dependent diffuse global illumination.
57
+ *
58
+ * Note that this class can only be used with {@link WebGLRenderer}.
59
+ * A version for {@link WebGPURenderer} will be added at a later point.
60
+ *
61
+ * All seven packed SH sub-volumes are stored in a **single** RGBA
62
+ * `WebGL3DRenderTarget` using a texture-atlas layout along the Z axis.
63
+ * Each sub-volume occupies `( nz + 2 )` atlas slices: one padding slice at
64
+ * each end (a copy of the nearest edge data slice) to prevent color bleeding
65
+ * when the hardware trilinear filter reads across a sub-volume boundary.
66
+ *
67
+ * Atlas layout (nz = resolution.z, PADDING = 1):
68
+ * ```
69
+ * slice 0 : padding (copy of sub-volume 0, data slice 0)
70
+ * slices 1 … nz : sub-volume 0 data
71
+ * slice nz + 1 : padding (copy of sub-volume 0, data slice nz-1)
72
+ * slice nz + 2 : padding (copy of sub-volume 1, data slice 0)
73
+ * slices nz+3 … 2*nz+2 : sub-volume 1 data
74
+ * …
75
+ * ```
76
+ * Total atlas depth = `7 * ( nz + 2 )`.
77
+ *
78
+ * Baking is fully GPU-resident: cubemap rendering, SH projection, and
79
+ * texture packing all happen on the GPU with zero CPU readback.
80
+ *
81
+ * @three_import import { LightProbeGrid } from 'three/addons/lighting/LightProbeGrid.js';
82
+ */
83
+ class LightProbeGrid extends Object3D {
84
+
85
+ /**
86
+ * Constructs a new irradiance probe grid.
87
+ *
88
+ * The volume is centered at the object's position.
89
+ *
90
+ * @param {number} [width=1] - Full width of the volume along X.
91
+ * @param {number} [height=1] - Full height of the volume along Y.
92
+ * @param {number} [depth=1] - Full depth of the volume along Z.
93
+ * @param {number} [widthProbes] - Number of probes along X. Defaults to `Math.max( 2, Math.round( width ) + 1 )`.
94
+ * @param {number} [heightProbes] - Number of probes along Y. Defaults to `Math.max( 2, Math.round( height ) + 1 )`.
95
+ * @param {number} [depthProbes] - Number of probes along Z. Defaults to `Math.max( 2, Math.round( depth ) + 1 )`.
96
+ */
97
+ constructor( width = 1, height = 1, depth = 1, widthProbes, heightProbes, depthProbes ) {
98
+
99
+ super();
100
+
101
+ /**
102
+ * This flag can be used for type testing.
103
+ *
104
+ * @type {boolean}
105
+ * @readonly
106
+ * @default true
107
+ */
108
+ this.isLightProbeGrid = true;
109
+
110
+ /**
111
+ * The full width of the volume along X.
112
+ *
113
+ * @type {number}
114
+ */
115
+ this.width = width;
116
+
117
+ /**
118
+ * The full height of the volume along Y.
119
+ *
120
+ * @type {number}
121
+ */
122
+ this.height = height;
123
+
124
+ /**
125
+ * The full depth of the volume along Z.
126
+ *
127
+ * @type {number}
128
+ */
129
+ this.depth = depth;
130
+
131
+ /**
132
+ * The number of probes along each axis.
133
+ *
134
+ * @type {Vector3}
135
+ */
136
+ this.resolution = new Vector3(
137
+ widthProbes !== undefined ? widthProbes : Math.max( 2, Math.round( width ) + 1 ),
138
+ heightProbes !== undefined ? heightProbes : Math.max( 2, Math.round( height ) + 1 ),
139
+ depthProbes !== undefined ? depthProbes : Math.max( 2, Math.round( depth ) + 1 )
140
+ );
141
+
142
+ /**
143
+ * The world-space bounding box for the grid. Updated automatically
144
+ * by {@link LightProbeGrid#bake}.
145
+ *
146
+ * @type {Box3}
147
+ */
148
+ this.boundingBox = new Box3();
149
+
150
+ /**
151
+ * The single RGBA atlas 3D texture storing all seven packed SH sub-volumes.
152
+ *
153
+ * @type {?Data3DTexture}
154
+ * @default null
155
+ */
156
+ this.texture = null;
157
+
158
+ /**
159
+ * Internal render target for GPU-resident baking.
160
+ *
161
+ * @private
162
+ * @type {?WebGL3DRenderTarget}
163
+ * @default null
164
+ */
165
+ this._renderTarget = null;
166
+
167
+ this.updateBoundingBox();
168
+
169
+ }
170
+
171
+ /**
172
+ * Returns the world-space position of the probe at grid indices (ix, iy, iz).
173
+ *
174
+ * @param {number} ix - X index.
175
+ * @param {number} iy - Y index.
176
+ * @param {number} iz - Z index.
177
+ * @param {Vector3} target - The target vector.
178
+ * @return {Vector3} The world-space position.
179
+ */
180
+ getProbePosition( ix, iy, iz, target ) {
181
+
182
+ const pos = this.position;
183
+ const res = this.resolution;
184
+ const w = this.width, h = this.height, d = this.depth;
185
+
186
+ target.set(
187
+ res.x > 1 ? pos.x - w / 2 + ix * w / ( res.x - 1 ) : pos.x,
188
+ res.y > 1 ? pos.y - h / 2 + iy * h / ( res.y - 1 ) : pos.y,
189
+ res.z > 1 ? pos.z - d / 2 + iz * d / ( res.z - 1 ) : pos.z
190
+ );
191
+
192
+ return target;
193
+
194
+ }
195
+
196
+ /**
197
+ * Updates the world-space bounding box from the current position and size.
198
+ */
199
+ updateBoundingBox() {
200
+
201
+ _size.set( this.width, this.height, this.depth );
202
+ this.boundingBox.setFromCenterAndSize( this.position, _size );
203
+
204
+ }
205
+
206
+ /**
207
+ * Bakes all probes by rendering cubemaps at each probe position
208
+ * and projecting to L2 SH. Optionally iterates additional passes to
209
+ * capture indirect bounces — each extra pass samples the previous pass's
210
+ * atlas as indirect light, so a grid added to the scene before baking
211
+ * accumulates one bounce per extra pass.
212
+ *
213
+ * @param {WebGLRenderer} renderer - The renderer.
214
+ * @param {Scene} scene - The scene to render.
215
+ * @param {Object} [options] - Bake options.
216
+ * @param {number} [options.cubemapSize=8] - Resolution of each cubemap face.
217
+ * @param {number} [options.near=0.1] - Near plane for the cube camera.
218
+ * @param {number} [options.far=100] - Far plane for the cube camera.
219
+ * @param {number} [options.bounces=0] - Additional bounce passes after the initial direct pass.
220
+ */
221
+ bake( renderer, scene, options = {} ) {
222
+
223
+ const { bounces = 0 } = options;
224
+ const { cubeRenderTarget, cubeCamera } = _ensureBakeResources( options );
225
+
226
+ this._ensureTextures();
227
+ this.updateBoundingBox();
228
+
229
+ const res = this.resolution;
230
+ const totalProbes = res.x * res.y * res.z;
231
+
232
+ // Batch render target for SH coefficients: 9 pixels wide, one row per probe
233
+ const batchTarget = _ensureBatchTarget( totalProbes );
234
+
235
+ // Save renderer state
236
+ const currentRenderTarget = renderer.getRenderTarget();
237
+ renderer.getViewport( _currentViewport );
238
+ renderer.getScissor( _currentScissor );
239
+ const currentScissorTest = renderer.getScissorTest();
240
+
241
+ // Scene is static across the bake — update once and disable per-render auto updates.
242
+ const currentMatrixWorldAutoUpdate = scene.matrixWorldAutoUpdate;
243
+ if ( currentMatrixWorldAutoUpdate === true ) {
244
+
245
+ scene.updateMatrixWorld( true );
246
+ scene.matrixWorldAutoUpdate = false;
247
+
248
+ }
249
+
250
+ // Disable shadow map auto-update across all passes — lights don't move.
251
+ // Force a single shadow update on the first render so maps are initialized.
252
+ const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
253
+ renderer.shadowMap.autoUpdate = false;
254
+ renderer.shadowMap.needsUpdate = true;
255
+
256
+ _ensureRepackResources();
257
+
258
+ const paddedSlices = res.z + 2 * ATLAS_PADDING;
259
+ const rt = this._renderTarget;
260
+
261
+ // const t0 = performance.now();
262
+
263
+ // Pass 0 captures direct light only (grid hidden, so probesSH is not sampled
264
+ // — the atlas at this point may be uninitialized or hold a prior bake).
265
+ // Each subsequent pass keeps the grid visible so the cube cameras read the
266
+ // previous pass's atlas as indirect light, accumulating one bounce per pass.
267
+ // Phase 1 writes to the batch target and Phase 2 only swaps it into the atlas
268
+ // at the very end of each pass, which gives an implicit ping-pong for free.
269
+
270
+ for ( let pass = 0; pass <= bounces; pass ++ ) {
271
+
272
+ this.visible = pass > 0;
273
+
274
+ // Clear pooled batch target so skipped probes read as zero
275
+ batchTarget.scissorTest = false;
276
+ batchTarget.viewport.set( 0, 0, 9, totalProbes );
277
+ renderer.setRenderTarget( batchTarget );
278
+ renderer.clear();
279
+
280
+ // Phase 1: Render cubemaps and project to SH into batch target
281
+ // Note: set viewport/scissor on the render target directly to avoid pixel ratio scaling
282
+ batchTarget.scissorTest = true;
283
+
284
+ for ( let iz = 0; iz < res.z; iz ++ ) {
285
+
286
+ for ( let iy = 0; iy < res.y; iy ++ ) {
287
+
288
+ for ( let ix = 0; ix < res.x; ix ++ ) {
289
+
290
+ const probeIndex = ix + iy * res.x + iz * res.x * res.y;
291
+
292
+ this.getProbePosition( ix, iy, iz, _position );
293
+ cubeCamera.position.copy( _position );
294
+ cubeCamera.update( renderer, scene );
295
+
296
+ // SH projection
297
+ _shMaterial.uniforms.envMap.value = cubeRenderTarget.texture;
298
+ _mesh.material = _shMaterial;
299
+ batchTarget.viewport.set( 0, probeIndex, 9, 1 );
300
+ batchTarget.scissor.set( 0, probeIndex, 9, 1 );
301
+ renderer.setRenderTarget( batchTarget );
302
+ renderer.render( _scene, _camera );
303
+
304
+ }
305
+
306
+ }
307
+
308
+ }
309
+
310
+ // Phase 2: Repack SH data from batch target into the atlas 3D texture (GPU-to-GPU).
311
+ //
312
+ // For each of the 7 packed sub-volumes (texture index t) we write:
313
+ // - A leading padding slice (copy of data slice iz = 0)
314
+ // - All nz data slices (iz = 0 … nz-1)
315
+ // - A trailing padding slice (copy of data slice iz = nz-1)
316
+ //
317
+ // In the atlas the slices for sub-volume t occupy the range:
318
+ // [ t * paddedSlices, t * paddedSlices + paddedSlices - 1 ]
319
+ // where paddedSlices = nz + 2 * ATLAS_PADDING.
320
+
321
+ rt.scissorTest = false;
322
+ rt.viewport.set( 0, 0, res.x, res.y );
323
+
324
+ for ( let t = 0; t < 7; t ++ ) {
325
+
326
+ _repackMaterials[ t ].uniforms.batchTexture.value = batchTarget.texture;
327
+ _repackMaterials[ t ].uniforms.resolution.value.copy( res );
328
+
329
+ // Write data slices
330
+ for ( let iz = 0; iz < res.z; iz ++ ) {
331
+
332
+ _repackMaterials[ t ].uniforms.sliceZ.value = iz;
333
+ _mesh.material = _repackMaterials[ t ];
334
+ renderer.setRenderTarget( rt, t * paddedSlices + ATLAS_PADDING + iz );
335
+ renderer.render( _scene, _camera );
336
+
337
+ }
338
+
339
+ // Leading padding: copy of data slice iz = 0
340
+ _repackMaterials[ t ].uniforms.sliceZ.value = 0;
341
+ _mesh.material = _repackMaterials[ t ];
342
+ renderer.setRenderTarget( rt, t * paddedSlices );
343
+ renderer.render( _scene, _camera );
344
+
345
+ // Trailing padding: copy of data slice iz = nz - 1
346
+ _repackMaterials[ t ].uniforms.sliceZ.value = res.z - 1;
347
+ _mesh.material = _repackMaterials[ t ];
348
+ renderer.setRenderTarget( rt, t * paddedSlices + ATLAS_PADDING + res.z );
349
+ renderer.render( _scene, _camera );
350
+
351
+ }
352
+
353
+ }
354
+
355
+ renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
356
+
357
+ // Restore renderer state
358
+ renderer.setRenderTarget( currentRenderTarget );
359
+ renderer.setViewport( _currentViewport );
360
+ renderer.setScissor( _currentScissor );
361
+ renderer.setScissorTest( currentScissorTest );
362
+
363
+ scene.matrixWorldAutoUpdate = currentMatrixWorldAutoUpdate;
364
+
365
+ // console.log( `LightProbeGrid: bake complete ${ ( performance.now() - t0 ).toFixed( 1 ) }ms` );
366
+
367
+ this.visible = true;
368
+
369
+ }
370
+
371
+ /**
372
+ * Ensures the atlas 3D render target exists with the correct dimensions.
373
+ *
374
+ * @private
375
+ */
376
+ _ensureTextures() {
377
+
378
+ if ( this._renderTarget !== null ) return;
379
+
380
+ const res = this.resolution;
381
+ const nx = res.x, ny = res.y, nz = res.z;
382
+
383
+ // Atlas depth: 7 sub-volumes, each with ATLAS_PADDING slices at both ends
384
+ const atlasDepth = 7 * ( nz + 2 * ATLAS_PADDING );
385
+
386
+ const rt = new WebGL3DRenderTarget( nx, ny, atlasDepth, {
387
+ format: RGBAFormat,
388
+ type: FloatType,
389
+ minFilter: LinearFilter,
390
+ magFilter: LinearFilter,
391
+ generateMipmaps: false,
392
+ depthBuffer: false
393
+ } );
394
+
395
+ this._renderTarget = rt;
396
+ this.texture = rt.texture;
397
+
398
+ }
399
+
400
+ /**
401
+ * Frees GPU resources.
402
+ */
403
+ dispose() {
404
+
405
+ if ( this._renderTarget !== null ) {
406
+
407
+ this._renderTarget.dispose();
408
+ this._renderTarget = null;
409
+ this.texture = null;
410
+
411
+ }
412
+
413
+ }
414
+
415
+ }
416
+
417
+ // Internal: Ensure the shared fullscreen-quad scene exists
418
+ function _ensureScene() {
419
+
420
+ if ( _scene === null ) {
421
+
422
+ _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
423
+ _mesh = new Mesh( new PlaneGeometry( 2, 2 ) );
424
+ _scene = new Scene();
425
+ _scene.add( _mesh );
426
+
427
+ }
428
+
429
+ }
430
+
431
+ // Internal: Ensure GPU resources for SH projection are created
432
+ function _ensureGPUResources( cubemapSize ) {
433
+
434
+ _ensureScene();
435
+
436
+ // Recreate material when cubemap size changes
437
+ if ( cubemapSize !== _lastCubemapSize ) {
438
+
439
+ if ( _shMaterial !== null ) _shMaterial.dispose();
440
+
441
+ _shMaterial = new ShaderMaterial( {
442
+ precision: 'highp',
443
+ defines: {
444
+ CUBEMAP_SIZE: cubemapSize
445
+ },
446
+ uniforms: {
447
+ envMap: { value: null }
448
+ },
449
+ vertexShader: /* glsl */`
450
+ void main() {
451
+ gl_Position = vec4( position.xy, 0.0, 1.0 );
452
+ }
453
+ `,
454
+ fragmentShader: /* glsl */`
455
+ #include <common>
456
+
457
+ uniform samplerCube envMap;
458
+
459
+ void main() {
460
+
461
+ int coefIndex = int( gl_FragCoord.x );
462
+
463
+ vec3 accum0 = vec3( 0.0 );
464
+ vec3 accum1 = vec3( 0.0 );
465
+ vec3 accum2 = vec3( 0.0 );
466
+ vec3 accum3 = vec3( 0.0 );
467
+ vec3 accum4 = vec3( 0.0 );
468
+ vec3 accum5 = vec3( 0.0 );
469
+ vec3 accum6 = vec3( 0.0 );
470
+ vec3 accum7 = vec3( 0.0 );
471
+ vec3 accum8 = vec3( 0.0 );
472
+ float totalWeight = 0.0;
473
+ float pixelSize = 2.0 / float( CUBEMAP_SIZE );
474
+
475
+ for ( int face = 0; face < 6; face ++ ) {
476
+
477
+ for ( int iy = 0; iy < CUBEMAP_SIZE; iy ++ ) {
478
+
479
+ for ( int ix = 0; ix < CUBEMAP_SIZE; ix ++ ) {
480
+
481
+ // WebGL cubemaps have a left-handed orientation (flip = -1)
482
+ float col = ( float( ix ) + 0.5 ) * pixelSize - 1.0;
483
+ float row = 1.0 - ( float( iy ) + 0.5 ) * pixelSize;
484
+
485
+ vec3 coord;
486
+
487
+ if ( face == 0 ) coord = vec3( 1.0, row, -col );
488
+ else if ( face == 1 ) coord = vec3( -1.0, row, col );
489
+ else if ( face == 2 ) coord = vec3( col, 1.0, -row );
490
+ else if ( face == 3 ) coord = vec3( col, -1.0, row );
491
+ else if ( face == 4 ) coord = vec3( col, row, 1.0 );
492
+ else coord = vec3( -col, row, -1.0 );
493
+
494
+ float lengthSq = dot( coord, coord );
495
+ float weight = 4.0 / ( sqrt( lengthSq ) * lengthSq );
496
+ totalWeight += weight;
497
+
498
+ vec3 dir = normalize( coord );
499
+ vec3 cw = textureCube( envMap, coord ).rgb * weight;
500
+
501
+ // band 0
502
+ accum0 += cw * 0.282095;
503
+
504
+ // band 1
505
+ accum1 += cw * ( 0.488603 * dir.y );
506
+ accum2 += cw * ( 0.488603 * dir.z );
507
+ accum3 += cw * ( 0.488603 * dir.x );
508
+
509
+ // band 2
510
+ accum4 += cw * ( 1.092548 * ( dir.x * dir.y ) );
511
+ accum5 += cw * ( 1.092548 * ( dir.y * dir.z ) );
512
+ accum6 += cw * ( 0.315392 * ( 3.0 * dir.z * dir.z - 1.0 ) );
513
+ accum7 += cw * ( 1.092548 * ( dir.x * dir.z ) );
514
+ accum8 += cw * ( 0.546274 * ( dir.x * dir.x - dir.y * dir.y ) );
515
+
516
+ }
517
+
518
+ }
519
+
520
+ }
521
+
522
+ float norm = 4.0 * PI / totalWeight;
523
+
524
+ vec3 accum;
525
+ if ( coefIndex == 0 ) accum = accum0;
526
+ else if ( coefIndex == 1 ) accum = accum1;
527
+ else if ( coefIndex == 2 ) accum = accum2;
528
+ else if ( coefIndex == 3 ) accum = accum3;
529
+ else if ( coefIndex == 4 ) accum = accum4;
530
+ else if ( coefIndex == 5 ) accum = accum5;
531
+ else if ( coefIndex == 6 ) accum = accum6;
532
+ else if ( coefIndex == 7 ) accum = accum7;
533
+ else accum = accum8;
534
+
535
+ gl_FragColor = vec4( accum * norm, 1.0 );
536
+
537
+ }
538
+ `
539
+ } );
540
+
541
+ _lastCubemapSize = cubemapSize;
542
+
543
+ }
544
+
545
+ }
546
+
547
+ // Internal: Ensure GPU resources for repacking SH into the atlas 3D texture
548
+ function _ensureRepackResources() {
549
+
550
+ if ( _repackMaterials !== null ) return;
551
+
552
+ _ensureScene();
553
+
554
+ // Create 7 materials, one per output texture packing
555
+ // Texture 0: (c0.r, c0.g, c0.b, c1.r)
556
+ // Texture 1: (c1.g, c1.b, c2.r, c2.g)
557
+ // Texture 2: (c2.b, c3.r, c3.g, c3.b)
558
+ // Texture 3: (c4.r, c4.g, c4.b, c5.r)
559
+ // Texture 4: (c5.g, c5.b, c6.r, c6.g)
560
+ // Texture 5: (c6.b, c7.r, c7.g, c7.b)
561
+ // Texture 6: (c8.r, c8.g, c8.b, 0.0)
562
+
563
+ const repackVertexShader = /* glsl */`
564
+ void main() {
565
+ gl_Position = vec4( position.xy, 0.0, 1.0 );
566
+ }
567
+ `;
568
+
569
+ _repackMaterials = [];
570
+
571
+ for ( let t = 0; t < 7; t ++ ) {
572
+
573
+ _repackMaterials[ t ] = new ShaderMaterial( {
574
+ precision: 'highp',
575
+ defines: {
576
+ TEXTURE_INDEX: t
577
+ },
578
+ uniforms: {
579
+ batchTexture: { value: null },
580
+ resolution: { value: new Vector3() },
581
+ sliceZ: { value: 0 }
582
+ },
583
+ vertexShader: repackVertexShader,
584
+ fragmentShader: /* glsl */`
585
+ uniform sampler2D batchTexture;
586
+ uniform vec3 resolution;
587
+ uniform int sliceZ;
588
+
589
+ void main() {
590
+
591
+ int ix = int( gl_FragCoord.x );
592
+ int iy = int( gl_FragCoord.y );
593
+ int iz = sliceZ;
594
+
595
+ int probeIndex = ix + iy * int( resolution.x ) + iz * int( resolution.x ) * int( resolution.y );
596
+
597
+ // Read 9 SH coefficients from the batch texture row
598
+ vec4 c0 = texelFetch( batchTexture, ivec2( 0, probeIndex ), 0 );
599
+ vec4 c1 = texelFetch( batchTexture, ivec2( 1, probeIndex ), 0 );
600
+ vec4 c2 = texelFetch( batchTexture, ivec2( 2, probeIndex ), 0 );
601
+ vec4 c3 = texelFetch( batchTexture, ivec2( 3, probeIndex ), 0 );
602
+ vec4 c4 = texelFetch( batchTexture, ivec2( 4, probeIndex ), 0 );
603
+ vec4 c5 = texelFetch( batchTexture, ivec2( 5, probeIndex ), 0 );
604
+ vec4 c6 = texelFetch( batchTexture, ivec2( 6, probeIndex ), 0 );
605
+ vec4 c7 = texelFetch( batchTexture, ivec2( 7, probeIndex ), 0 );
606
+ vec4 c8 = texelFetch( batchTexture, ivec2( 8, probeIndex ), 0 );
607
+
608
+ // Pack into the output format for this texture index
609
+ #if TEXTURE_INDEX == 0
610
+ gl_FragColor = vec4( c0.rgb, c1.r );
611
+ #elif TEXTURE_INDEX == 1
612
+ gl_FragColor = vec4( c1.gb, c2.rg );
613
+ #elif TEXTURE_INDEX == 2
614
+ gl_FragColor = vec4( c2.b, c3.rgb );
615
+ #elif TEXTURE_INDEX == 3
616
+ gl_FragColor = vec4( c4.rgb, c5.r );
617
+ #elif TEXTURE_INDEX == 4
618
+ gl_FragColor = vec4( c5.gb, c6.rg );
619
+ #elif TEXTURE_INDEX == 5
620
+ gl_FragColor = vec4( c6.b, c7.rgb );
621
+ #else
622
+ gl_FragColor = vec4( c8.rgb, 0.0 );
623
+ #endif
624
+
625
+ }
626
+ `
627
+ } );
628
+
629
+ }
630
+
631
+ }
632
+
633
+ // Internal: Ensure cube render target and camera exist with the right parameters
634
+ function _ensureBakeResources( options ) {
635
+
636
+ const {
637
+ cubemapSize = 8,
638
+ near = 0.1,
639
+ far = 100
640
+ } = options;
641
+
642
+ if ( _cubeRenderTarget === null || cubemapSize !== _cachedCubemapSize || near !== _cachedNear || far !== _cachedFar ) {
643
+
644
+ if ( _cubeRenderTarget !== null ) _cubeRenderTarget.dispose();
645
+
646
+ _cubeRenderTarget = new WebGLCubeRenderTarget( cubemapSize, { type: HalfFloatType } );
647
+ _cubeCamera = new CubeCamera( near, far, _cubeRenderTarget );
648
+ _cachedCubemapSize = cubemapSize;
649
+ _cachedNear = near;
650
+ _cachedFar = far;
651
+
652
+ }
653
+
654
+ _ensureGPUResources( cubemapSize );
655
+
656
+ return { cubeRenderTarget: _cubeRenderTarget, cubeCamera: _cubeCamera };
657
+
658
+ }
659
+
660
+ function _ensureBatchTarget( totalProbes ) {
661
+
662
+ if ( _batchTarget === null || _batchTargetProbes !== totalProbes ) {
663
+
664
+ if ( _batchTarget !== null ) _batchTarget.dispose();
665
+
666
+ _batchTarget = new WebGLRenderTarget( 9, totalProbes, {
667
+ type: FloatType,
668
+ minFilter: NearestFilter,
669
+ magFilter: NearestFilter,
670
+ depthBuffer: false
671
+ } );
672
+
673
+ _batchTargetProbes = totalProbes;
674
+
675
+ }
676
+
677
+ return _batchTarget;
678
+
679
+ }
680
+
681
+ export { LightProbeGrid };