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
@@ -38,15 +38,19 @@ class VolumetricLightingModel extends LightingModel {
38
38
  // This approach dynamically changes the direction of the ray,
39
39
  // prioritizing the ray from the camera to the object if it is inside the mesh, and from the object to the camera if it is far away.
40
40
 
41
+ const isFrontToBack = property( 'bool' );
42
+
41
43
  If( cameraPosition.sub( positionWorld ).length().greaterThan( modelRadius.mul( 2 ) ), () => {
42
44
 
43
45
  startPos.assign( cameraPosition );
44
46
  endPos.assign( positionWorld );
47
+ isFrontToBack.assign( true );
45
48
 
46
49
  } ).Else( () => {
47
50
 
48
51
  startPos.assign( positionWorld );
49
52
  endPos.assign( cameraPosition );
53
+ isFrontToBack.assign( false );
50
54
 
51
55
  } );
52
56
 
@@ -90,12 +94,17 @@ class VolumetricLightingModel extends LightingModel {
90
94
  scatteringDensity.assign( 0 );
91
95
 
92
96
  let scatteringNode;
97
+ let scatteringEmissiveNode;
93
98
 
94
99
  if ( material.scatteringNode ) {
95
100
 
96
- scatteringNode = material.scatteringNode( {
97
- positionRay
98
- } );
101
+ scatteringNode = material.scatteringNode( { positionRay } );
102
+
103
+ }
104
+
105
+ if ( material.scatteringEmissiveNode ) {
106
+
107
+ scatteringEmissiveNode = material.scatteringEmissiveNode( { positionRay } );
99
108
 
100
109
  }
101
110
 
@@ -107,9 +116,28 @@ class VolumetricLightingModel extends LightingModel {
107
116
 
108
117
  }
109
118
 
119
+ const stepLight = scatteringDensity.mul( 0.01 ).toVar();
120
+
121
+ if ( scatteringEmissiveNode ) {
122
+
123
+ stepLight.addAssign( scatteringEmissiveNode.mul( 0.01 ) );
124
+
125
+ }
126
+
110
127
  // beer's law
111
128
 
112
129
  const falloff = scatteringDensity.mul( .01 ).negate().mul( stepSize ).exp();
130
+
131
+ If( isFrontToBack, () => {
132
+
133
+ outgoingRayLight.addAssign( stepLight.mul( transmittance ).mul( stepSize ) );
134
+
135
+ } ).Else( () => {
136
+
137
+ outgoingRayLight.assign( outgoingRayLight.mul( falloff ).add( stepLight.mul( stepSize ) ) );
138
+
139
+ } );
140
+
113
141
  transmittance.mulAssign( falloff );
114
142
 
115
143
  // move along the ray
@@ -118,7 +146,7 @@ class VolumetricLightingModel extends LightingModel {
118
146
 
119
147
  } );
120
148
 
121
- outgoingRayLight.addAssign( transmittance.saturate().oneMinus() );
149
+
122
150
 
123
151
  }
124
152
 
@@ -144,14 +172,19 @@ class VolumetricLightingModel extends LightingModel {
144
172
 
145
173
  direct( { lightNode, lightColor }, builder ) {
146
174
 
147
- // Ignore lights with infinite distance
175
+ // Ignore non-analytical lights and lights with infinite distance
148
176
 
149
- if ( lightNode.light.distance === undefined ) return;
177
+ if ( lightNode.isAnalyticLightNode !== true || lightNode.light.distance === undefined ) return;
150
178
 
151
179
  // TODO: We need a viewportOpaque*() ( output, depth ) to fit with modern rendering approaches
152
180
 
153
181
  const directLight = lightColor.xyz.toVar();
154
- directLight.mulAssign( lightNode.shadowNode ); // it no should be necessary if used in the same render pass
182
+
183
+ if ( lightNode.shadowNode !== null ) {
184
+
185
+ directLight.mulAssign( lightNode.shadowNode ); // it no should be necessary if used in the same render pass
186
+
187
+ }
155
188
 
156
189
  this.scatteringLight( directLight, builder );
157
190
 
@@ -1,4 +1,5 @@
1
1
  import Node from '../core/Node.js';
2
+ import NodeError from '../core/NodeError.js';
2
3
  import { getValueType } from '../core/NodeUtils.js';
3
4
  import { buffer } from '../accessors/BufferNode.js';
4
5
  import { instancedBufferAttribute } from '../accessors/BufferAttributeNode.js';
@@ -83,7 +84,7 @@ class RangeNode extends Node {
83
84
  * @param {NodeBuilder} builder - The current node builder.
84
85
  * @return {string} The node type.
85
86
  */
86
- getNodeType( builder ) {
87
+ generateNodeType( builder ) {
87
88
 
88
89
  return builder.object.count > 1 ? builder.getTypeFromLength( this.getVectorLength( builder ) ) : 'float';
89
90
 
@@ -111,7 +112,7 @@ class RangeNode extends Node {
111
112
 
112
113
  if ( output === null ) {
113
114
 
114
- throw new Error( 'THREE.TSL: No "ConstNode" found in node graph.' );
115
+ throw new NodeError( 'THREE.TSL: No "ConstNode" found in node graph.', this.stackTrace );
115
116
 
116
117
  }
117
118
 
@@ -167,8 +168,9 @@ class RangeNode extends Node {
167
168
  }
168
169
 
169
170
  const nodeType = this.getNodeType( builder );
171
+ const uniformBufferSize = object.count * 4 * 4; // count * 4 components * 4 bytes (float)
170
172
 
171
- if ( object.count <= 4096 ) {
173
+ if ( uniformBufferSize <= builder.getUniformBufferLimit() ) {
172
174
 
173
175
  output = buffer( array, 'vec4', object.count ).element( instanceIndex ).convert( nodeType );
174
176
 
@@ -82,7 +82,7 @@ class AtomicFunctionNode extends Node {
82
82
  * @param {NodeBuilder} builder - The current node builder.
83
83
  * @return {string} The node type.
84
84
  */
85
- getNodeType( builder ) {
85
+ generateNodeType( builder ) {
86
86
 
87
87
  return this.getInputType( builder );
88
88
 
@@ -21,6 +21,15 @@ class BarrierNode extends Node {
21
21
 
22
22
  this.scope = scope;
23
23
 
24
+ this.isBarrierNode = true;
25
+
26
+ }
27
+
28
+ setup( builder ) {
29
+
30
+ builder.allowEarlyReturns = false;
31
+ builder.allowGlobalVariables = false;
32
+
24
33
  }
25
34
 
26
35
  generate( builder ) {
@@ -1,5 +1,4 @@
1
1
  import Node from '../core/Node.js';
2
- import { nodeObject } from '../tsl/TSLBase.js';
3
2
  import { warn } from '../../utils.js';
4
3
 
5
4
  /**
@@ -56,7 +55,7 @@ class ComputeBuiltinNode extends Node {
56
55
  * @param {NodeBuilder} builder - The current node builder.
57
56
  * @return {string} The node type.
58
57
  */
59
- getNodeType( /*builder*/ ) {
58
+ generateNodeType( /*builder*/ ) {
60
59
 
61
60
  return this.nodeType;
62
61
 
@@ -149,7 +148,7 @@ export default ComputeBuiltinNode;
149
148
  * @param {string} nodeType - The node type.
150
149
  * @returns {ComputeBuiltinNode}
151
150
  */
152
- const computeBuiltin = ( name, nodeType ) => nodeObject( new ComputeBuiltinNode( name, nodeType ) );
151
+ const computeBuiltin = ( name, nodeType ) => new ComputeBuiltinNode( name, nodeType );
153
152
 
154
153
  /**
155
154
  * Represents the number of workgroups dispatched by the compute shader.
@@ -1,10 +1,13 @@
1
1
  import Node from '../core/Node.js';
2
+ import { instanceIndex } from '../core/IndexNode.js';
3
+ import StackTrace from '../core/StackTrace.js';
4
+ import { uniform } from '../core/UniformNode.js';
2
5
  import { NodeUpdateType } from '../core/constants.js';
3
6
  import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
4
7
  import { warn, error } from '../../utils.js';
5
8
 
6
9
  /**
7
- * TODO
10
+ * Represents a compute shader node.
8
11
  *
9
12
  * @augments Node
10
13
  */
@@ -19,8 +22,8 @@ class ComputeNode extends Node {
19
22
  /**
20
23
  * Constructs a new compute node.
21
24
  *
22
- * @param {Node} computeNode - TODO
23
- * @param {Array<number>} workgroupSize - TODO.
25
+ * @param {Node} computeNode - The node that defines the compute shader logic.
26
+ * @param {Array<number>} workgroupSize - An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.
24
27
  */
25
28
  constructor( computeNode, workgroupSize ) {
26
29
 
@@ -36,15 +39,14 @@ class ComputeNode extends Node {
36
39
  this.isComputeNode = true;
37
40
 
38
41
  /**
39
- * TODO
42
+ * The node that defines the compute shader logic.
40
43
  *
41
44
  * @type {Node}
42
45
  */
43
46
  this.computeNode = computeNode;
44
47
 
45
-
46
48
  /**
47
- * TODO
49
+ * An array defining the X, Y, and Z dimensions of the workgroup for compute shader execution.
48
50
  *
49
51
  * @type {Array<number>}
50
52
  * @default [ 64 ]
@@ -52,14 +54,23 @@ class ComputeNode extends Node {
52
54
  this.workgroupSize = workgroupSize;
53
55
 
54
56
  /**
55
- * TODO
57
+ * The total number of threads (invocations) to execute. If it is a number, it will be used
58
+ * to automatically generate bounds checking against `instanceIndex`.
56
59
  *
57
60
  * @type {number|Array<number>}
58
61
  */
59
62
  this.count = null;
60
63
 
61
64
  /**
62
- * TODO
65
+ * The dispatch size for workgroups on X, Y, and Z axes.
66
+ * Used directly if `count` is not provided.
67
+ *
68
+ * @type {number|Array<number>}
69
+ */
70
+ this.dispatchSize = null;
71
+
72
+ /**
73
+ * The version of the node.
63
74
  *
64
75
  * @type {number}
65
76
  */
@@ -83,36 +94,19 @@ class ComputeNode extends Node {
83
94
  this.updateBeforeType = NodeUpdateType.OBJECT;
84
95
 
85
96
  /**
86
- * TODO
97
+ * A callback executed when the compute node finishes initialization.
87
98
  *
88
99
  * @type {?Function}
89
100
  */
90
101
  this.onInitFunction = null;
91
102
 
92
- }
93
-
94
- /**
95
- * TODO
96
- *
97
- * @param {number|Array<number>} count - Array with [ x, y, z ] values for dispatch or a single number for the count
98
- * @return {ComputeNode}
99
- */
100
- setCount( count ) {
101
-
102
- this.count = count;
103
-
104
- return this;
105
-
106
- }
107
-
108
- /**
109
- * TODO
110
- *
111
- * @return {number|Array<number>}
112
- */
113
- getCount() {
114
-
115
- return this.count;
103
+ /**
104
+ * A uniform node holding the dispatch count for bounds checking.
105
+ * Created automatically when `count` is a number.
106
+ *
107
+ * @type {?UniformNode}
108
+ */
109
+ this.countNode = null;
116
110
 
117
111
  }
118
112
 
@@ -148,16 +142,16 @@ class ComputeNode extends Node {
148
142
  */
149
143
  label( name ) {
150
144
 
151
- warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
145
+ warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.', new StackTrace() ); // @deprecated r179
152
146
 
153
147
  return this.setName( name );
154
148
 
155
149
  }
156
150
 
157
151
  /**
158
- * TODO
152
+ * Sets the callback to run during initialization.
159
153
  *
160
- * @param {Function} callback - TODO.
154
+ * @param {Function} callback - The callback function.
161
155
  * @return {ComputeNode} A reference to this node.
162
156
  */
163
157
  onInit( callback ) {
@@ -181,6 +175,12 @@ class ComputeNode extends Node {
181
175
 
182
176
  setup( builder ) {
183
177
 
178
+ if ( this.count !== null && this.countNode === null ) {
179
+
180
+ this.countNode = uniform( this.count, 'uint' ).onObjectUpdate( () => this.count );
181
+
182
+ }
183
+
184
184
  const result = this.computeNode.build( builder );
185
185
 
186
186
  if ( result ) {
@@ -210,6 +210,16 @@ class ComputeNode extends Node {
210
210
 
211
211
  }
212
212
 
213
+ if ( this.count !== null && builder.allowEarlyReturns === true ) {
214
+
215
+ const countSnippet = this.countNode.build( builder, 'uint' );
216
+ const indexSnippet = instanceIndex.build( builder, 'uint' );
217
+
218
+ builder.flow.code = `${ builder.tab }if ( ${ indexSnippet } >= ${ countSnippet } ) { return; }\n\n${ builder.flow.code }`;
219
+
220
+ }
221
+
222
+
213
223
  } else {
214
224
 
215
225
  const properties = builder.getNodeProperties( this );
@@ -234,15 +244,15 @@ export default ComputeNode;
234
244
  *
235
245
  * @tsl
236
246
  * @function
237
- * @param {Node} node - TODO
238
- * @param {Array<number>} [workgroupSize=[64]] - TODO.
239
- * @returns {AtomicFunctionNode}
247
+ * @param {Node} node - The TSL logic for the compute shader.
248
+ * @param {Array<number>} [workgroupSize=[64]] - The workgroup size.
249
+ * @returns {ComputeNode}
240
250
  */
241
251
  export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
242
252
 
243
253
  if ( workgroupSize.length === 0 || workgroupSize.length > 3 ) {
244
254
 
245
- error( 'TSL: compute() workgroupSize must have 1, 2, or 3 elements' );
255
+ error( 'TSL: compute() workgroupSize must have 1, 2, or 3 elements', new StackTrace() );
246
256
 
247
257
  }
248
258
 
@@ -252,7 +262,7 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
252
262
 
253
263
  if ( typeof val !== 'number' || val <= 0 || ! Number.isInteger( val ) ) {
254
264
 
255
- error( `TSL: compute() workgroupSize element at index [ ${ i } ] must be a positive integer` );
265
+ error( `TSL: compute() workgroupSize element at index [ ${ i } ] must be a positive integer`, new StackTrace() );
256
266
 
257
267
  }
258
268
 
@@ -264,7 +274,7 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
264
274
 
265
275
  //
266
276
 
267
- return nodeObject( new ComputeNode( nodeObject( node ), workgroupSize ) );
277
+ return new ComputeNode( nodeObject( node ), workgroupSize );
268
278
 
269
279
  };
270
280
 
@@ -273,12 +283,28 @@ export const computeKernel = ( node, workgroupSize = [ 64 ] ) => {
273
283
  *
274
284
  * @tsl
275
285
  * @function
276
- * @param {Node} node - TODO
277
- * @param {number|Array<number>} count - TODO.
278
- * @param {Array<number>} [workgroupSize=[64]] - TODO.
279
- * @returns {AtomicFunctionNode}
280
- */
281
- export const compute = ( node, count, workgroupSize ) => computeKernel( node, workgroupSize ).setCount( count );
286
+ * @param {Node} node - The TSL logic for the compute shader.
287
+ * @param {number|Array<number>} count - The compute count or dispatch size.
288
+ * @param {Array<number>} [workgroupSize=[64]] - The workgroup size.
289
+ * @returns {ComputeNode}
290
+ , */
291
+ export const compute = ( node, count, workgroupSize ) => {
292
+
293
+ const computeNode = computeKernel( node, workgroupSize );
294
+
295
+ if ( typeof count === 'number' ) {
296
+
297
+ computeNode.count = count;
298
+
299
+ } else {
300
+
301
+ computeNode.dispatchSize = count;
302
+
303
+ }
304
+
305
+ return computeNode;
306
+
307
+ };
282
308
 
283
309
  addMethodChaining( 'compute', compute );
284
310
  addMethodChaining( 'computeKernel', computeKernel );
@@ -35,7 +35,7 @@ class SubgroupFunctionNode extends TempNode {
35
35
  /**
36
36
  * The subgroup/wave intrinsic method to construct.
37
37
  *
38
- * @type {String}
38
+ * @type {string}
39
39
  */
40
40
  this.method = method;
41
41
 
@@ -75,7 +75,7 @@ class SubgroupFunctionNode extends TempNode {
75
75
 
76
76
  }
77
77
 
78
- getNodeType( builder ) {
78
+ generateNodeType( builder ) {
79
79
 
80
80
  const method = this.method;
81
81
 
@@ -1,7 +1,7 @@
1
1
  import ArrayElementNode from '../utils/ArrayElementNode.js';
2
- import { nodeObject } from '../tsl/TSLCore.js';
3
2
  import Node from '../core/Node.js';
4
3
  import { warn } from '../../utils.js';
4
+ import StackTrace from '../core/StackTrace.js';
5
5
 
6
6
  /**
7
7
  * Represents an element of a 'workgroup' scoped buffer.
@@ -35,7 +35,7 @@ class WorkgroupInfoElementNode extends ArrayElementNode {
35
35
 
36
36
  let snippet;
37
37
 
38
- const isAssignContext = builder.context.assign;
38
+ const isAssignContext = builder.isContextAssign();
39
39
  snippet = super.generate( builder );
40
40
 
41
41
  if ( isAssignContext !== true ) {
@@ -150,7 +150,7 @@ class WorkgroupInfoNode extends Node {
150
150
  */
151
151
  label( name ) {
152
152
 
153
- warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
153
+ warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.', new StackTrace() ); // @deprecated r179
154
154
 
155
155
  return this.setName( name );
156
156
 
@@ -203,7 +203,7 @@ class WorkgroupInfoNode extends Node {
203
203
  */
204
204
  element( indexNode ) {
205
205
 
206
- return nodeObject( new WorkgroupInfoElementNode( this, indexNode ) );
206
+ return new WorkgroupInfoElementNode( this, indexNode );
207
207
 
208
208
  }
209
209
 
@@ -229,6 +229,6 @@ export default WorkgroupInfoNode;
229
229
  * @param {number} [count=0] - The number of elements in the buffer.
230
230
  * @returns {WorkgroupInfoNode}
231
231
  */
232
- export const workgroupArray = ( type, count ) => nodeObject( new WorkgroupInfoNode( 'Workgroup', type, count ) );
232
+ export const workgroupArray = ( type, count ) => new WorkgroupInfoNode( 'Workgroup', type, count );
233
233
 
234
234
 
@@ -96,6 +96,53 @@ class AnalyticLightNode extends LightingNode {
96
96
  */
97
97
  this.updateType = NodeUpdateType.FRAME;
98
98
 
99
+ if ( light && light.shadow ) {
100
+
101
+ this._shadowDisposeListener = () => {
102
+
103
+ this.disposeShadow();
104
+
105
+ };
106
+
107
+ light.addEventListener( 'dispose', this._shadowDisposeListener );
108
+
109
+ }
110
+
111
+ }
112
+
113
+ dispose() {
114
+
115
+ if ( this._shadowDisposeListener ) {
116
+
117
+ this.light.removeEventListener( 'dispose', this._shadowDisposeListener );
118
+
119
+ }
120
+
121
+ super.dispose();
122
+
123
+ }
124
+
125
+ /**
126
+ * Frees internal resources related to shadows.
127
+ */
128
+ disposeShadow() {
129
+
130
+ if ( this.shadowNode !== null ) {
131
+
132
+ this.shadowNode.dispose();
133
+ this.shadowNode = null;
134
+
135
+ }
136
+
137
+ this.shadowColorNode = null;
138
+
139
+ if ( this.baseColorNode !== null ) {
140
+
141
+ this.colorNode = this.baseColorNode;
142
+ this.baseColorNode = null;
143
+
144
+ }
145
+
99
146
  }
100
147
 
101
148
  getHash() {
@@ -188,6 +235,12 @@ class AnalyticLightNode extends LightingNode {
188
235
 
189
236
  //
190
237
 
238
+ if ( builder.context.getShadow ) {
239
+
240
+ shadowColorNode = builder.context.getShadow( this, builder );
241
+
242
+ }
243
+
191
244
  this.colorNode = shadowColorNode;
192
245
 
193
246
  }
@@ -1,7 +1,7 @@
1
1
  import LightingNode from './LightingNode.js';
2
2
  import { isolate } from '../core/IsolateNode.js';
3
3
  import { roughness, clearcoatRoughness } from '../core/PropertyNode.js';
4
- import { cameraViewMatrix } from '../accessors/Camera.js';
4
+ import { cameraWorldMatrix } from '../accessors/Camera.js';
5
5
  import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
6
6
  import { positionViewDirection } from '../accessors/Position.js';
7
7
  import { float, pow4 } from '../tsl/TSLBase.js';
@@ -9,7 +9,7 @@ import { bentNormalView } from '../accessors/AccessorsUtils.js';
9
9
  import { pmremTexture } from '../pmrem/PMREMNode.js';
10
10
  import { materialEnvIntensity } from '../accessors/MaterialProperties.js';
11
11
 
12
- const _envNodeCache = new WeakMap();
12
+ const _rendererCache = new WeakMap();
13
13
 
14
14
  /**
15
15
  * Represents a physical model for Image-based lighting (IBL). The environment
@@ -55,13 +55,15 @@ class EnvironmentNode extends LightingNode {
55
55
 
56
56
  const value = ( envNode.isTextureNode ) ? envNode.value : material[ envNode.property ];
57
57
 
58
- let cacheEnvNode = _envNodeCache.get( value );
58
+ const cache = this._getPMREMNodeCache( builder.renderer );
59
+
60
+ let cacheEnvNode = cache.get( value );
59
61
 
60
62
  if ( cacheEnvNode === undefined ) {
61
63
 
62
64
  cacheEnvNode = pmremTexture( value );
63
65
 
64
- _envNodeCache.set( value, cacheEnvNode );
66
+ cache.set( value, cacheEnvNode );
65
67
 
66
68
  }
67
69
 
@@ -101,6 +103,29 @@ class EnvironmentNode extends LightingNode {
101
103
 
102
104
  }
103
105
 
106
+ /**
107
+ * Returns the PMREM node cache of the current renderer.
108
+ *
109
+ * @private
110
+ * @param {Renderer} renderer - The current renderer.
111
+ * @return {WeakMap} The node cache.
112
+ */
113
+ _getPMREMNodeCache( renderer ) {
114
+
115
+ let pmremCache = _rendererCache.get( renderer );
116
+
117
+ if ( pmremCache === undefined ) {
118
+
119
+ pmremCache = new WeakMap();
120
+
121
+ _rendererCache.set( renderer, pmremCache );
122
+
123
+ }
124
+
125
+ return pmremCache;
126
+
127
+ }
128
+
104
129
  }
105
130
 
106
131
  export default EnvironmentNode;
@@ -119,7 +144,7 @@ const createRadianceContext = ( roughnessNode, normalViewNode ) => {
119
144
  // Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.
120
145
  reflectVec = pow4( roughnessNode ).mix( reflectVec, normalViewNode ).normalize();
121
146
 
122
- reflectVec = reflectVec.transformDirection( cameraViewMatrix );
147
+ reflectVec = reflectVec.transformDirection( cameraWorldMatrix );
123
148
 
124
149
  }
125
150
 
@@ -15,6 +15,25 @@ class IESSpotLightNode extends SpotLightNode {
15
15
 
16
16
  }
17
17
 
18
+ /**
19
+ * Constructs a new IES spot light node.
20
+ *
21
+ * @param {?SpotLight} [light=null] - The spot light source.
22
+ */
23
+ constructor( light = null ) {
24
+
25
+ super( light );
26
+
27
+ /**
28
+ * The texture node representing the IES texture.
29
+ *
30
+ * @type {?TextureNode}
31
+ * @default null
32
+ */
33
+ this._iesTextureNode = null;
34
+
35
+ }
36
+
18
37
  /**
19
38
  * Overwrites the default implementation to compute an IES conform spot attenuation.
20
39
  *
@@ -32,11 +51,13 @@ class IESSpotLightNode extends SpotLightNode {
32
51
 
33
52
  const angle = angleCosine.acos().mul( 1.0 / Math.PI );
34
53
 
35
- spotAttenuation = texture( iesMap, vec2( angle, 0 ), 0 ).r;
54
+ this._iesTextureNode = texture( iesMap, vec2( angle, 0 ), 0 );
55
+
56
+ spotAttenuation = this._iesTextureNode.r;
36
57
 
37
58
  } else {
38
59
 
39
- spotAttenuation = super.getSpotAttenuation( angleCosine );
60
+ spotAttenuation = super.getSpotAttenuation( builder, angleCosine );
40
61
 
41
62
  }
42
63
 
@@ -44,6 +65,23 @@ class IESSpotLightNode extends SpotLightNode {
44
65
 
45
66
  }
46
67
 
68
+ /**
69
+ * Overwritten to update the IES spot light texture.
70
+ *
71
+ * @param {NodeFrame} frame - A reference to the current node frame.
72
+ */
73
+ update( frame ) {
74
+
75
+ super.update( frame );
76
+
77
+ if ( this._iesTextureNode !== null && this.light.iesMap ) {
78
+
79
+ this._iesTextureNode.value = this.light.iesMap;
80
+
81
+ }
82
+
83
+ }
84
+
47
85
  }
48
86
 
49
87
  export default IESSpotLightNode;