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
@@ -2,7 +2,6 @@ import {
2
2
  Color,
3
3
  Matrix4,
4
4
  Mesh,
5
- PerspectiveCamera,
6
5
  Plane,
7
6
  ShaderMaterial,
8
7
  UniformsUtils,
@@ -67,12 +66,12 @@ class Reflector extends Mesh {
67
66
  this.forceUpdate = false;
68
67
 
69
68
  /**
70
- * The reflector's virtual camera. This is used to render
71
- * the scene from the mirror's point of view.
69
+ * Weak map for managing reflection cameras.
72
70
  *
73
- * @type {PerspectiveCamera}
71
+ * @private
72
+ * @type {WeakMap<Camera, Camera>}
74
73
  */
75
- this.camera = new PerspectiveCamera();
74
+ this._reflectionCameras = new WeakMap();
76
75
 
77
76
  const scope = this;
78
77
 
@@ -98,7 +97,6 @@ class Reflector extends Mesh {
98
97
  const q = new Vector4();
99
98
 
100
99
  const textureMatrix = new Matrix4();
101
- const virtualCamera = this.camera;
102
100
 
103
101
  const renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { samples: multisample, type: HalfFloatType } );
104
102
 
@@ -117,6 +115,8 @@ class Reflector extends Mesh {
117
115
 
118
116
  this.onBeforeRender = function ( renderer, scene, camera ) {
119
117
 
118
+ const reflectionCamera = this.getReflectionCamera( camera );
119
+
120
120
  reflectorWorldPosition.setFromMatrixPosition( scope.matrixWorld );
121
121
  cameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );
122
122
 
@@ -145,16 +145,16 @@ class Reflector extends Mesh {
145
145
  target.reflect( normal ).negate();
146
146
  target.add( reflectorWorldPosition );
147
147
 
148
- virtualCamera.position.copy( view );
149
- virtualCamera.up.set( 0, 1, 0 );
150
- virtualCamera.up.applyMatrix4( rotationMatrix );
151
- virtualCamera.up.reflect( normal );
152
- virtualCamera.lookAt( target );
148
+ reflectionCamera.position.copy( view );
149
+ reflectionCamera.up.set( 0, 1, 0 );
150
+ reflectionCamera.up.applyMatrix4( rotationMatrix );
151
+ reflectionCamera.up.reflect( normal );
152
+ reflectionCamera.lookAt( target );
153
153
 
154
- virtualCamera.far = camera.far; // Used in WebGLBackground
154
+ reflectionCamera.far = camera.far; // Used in WebGLBackground
155
155
 
156
- virtualCamera.updateMatrixWorld();
157
- virtualCamera.projectionMatrix.copy( camera.projectionMatrix );
156
+ reflectionCamera.updateMatrixWorld();
157
+ reflectionCamera.projectionMatrix.copy( camera.projectionMatrix );
158
158
 
159
159
  // Update the texture matrix
160
160
  textureMatrix.set(
@@ -163,23 +163,34 @@ class Reflector extends Mesh {
163
163
  0.0, 0.0, 0.5, 0.5,
164
164
  0.0, 0.0, 0.0, 1.0
165
165
  );
166
- textureMatrix.multiply( virtualCamera.projectionMatrix );
167
- textureMatrix.multiply( virtualCamera.matrixWorldInverse );
166
+ textureMatrix.multiply( reflectionCamera.projectionMatrix );
167
+ textureMatrix.multiply( reflectionCamera.matrixWorldInverse );
168
168
  textureMatrix.multiply( scope.matrixWorld );
169
169
 
170
170
  // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
171
171
  // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
172
172
  reflectorPlane.setFromNormalAndCoplanarPoint( normal, reflectorWorldPosition );
173
- reflectorPlane.applyMatrix4( virtualCamera.matrixWorldInverse );
173
+ reflectorPlane.applyMatrix4( reflectionCamera.matrixWorldInverse );
174
174
 
175
175
  clipPlane.set( reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant );
176
176
 
177
- const projectionMatrix = virtualCamera.projectionMatrix;
177
+ const projectionMatrix = reflectionCamera.projectionMatrix;
178
+
179
+ if ( reflectionCamera.isOrthographicCamera ) {
180
+
181
+ q.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
182
+ q.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
183
+ q.z = - camera.far; // actual view-space z at the far plane, no normalization needed
184
+ q.w = 1.0; // w_clip = 1 in orthographic (no perspective division)
185
+
186
+ } else {
178
187
 
179
- q.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
180
- q.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
181
- q.z = - 1.0;
182
- q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
188
+ q.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
189
+ q.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
190
+ q.z = - 1.0;
191
+ q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
192
+
193
+ }
183
194
 
184
195
  // Calculate the scaled plane vector
185
196
  clipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );
@@ -187,8 +198,21 @@ class Reflector extends Mesh {
187
198
  // Replacing the third row of the projection matrix
188
199
  projectionMatrix.elements[ 2 ] = clipPlane.x;
189
200
  projectionMatrix.elements[ 6 ] = clipPlane.y;
190
- projectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;
191
- projectionMatrix.elements[ 14 ] = clipPlane.w;
201
+
202
+ if ( reflectionCamera.isOrthographicCamera ) {
203
+
204
+ // For orthographic cameras, w_clip = 1 always (no perspective division),
205
+ // so the -1 near-plane offset must go into the constant term (elements[14])
206
+ // rather than the z coefficient (elements[10]).
207
+ projectionMatrix.elements[ 10 ] = clipPlane.z - clipBias;
208
+ projectionMatrix.elements[ 14 ] = clipPlane.w - 1.0;
209
+
210
+ } else {
211
+
212
+ projectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;
213
+ projectionMatrix.elements[ 14 ] = clipPlane.w;
214
+
215
+ }
192
216
 
193
217
  // Render
194
218
  scope.visible = false;
@@ -206,7 +230,7 @@ class Reflector extends Mesh {
206
230
  renderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897
207
231
 
208
232
  if ( renderer.autoClear === false ) renderer.clear();
209
- renderer.render( scene, virtualCamera );
233
+ renderer.render( scene, reflectionCamera );
210
234
 
211
235
  renderer.xr.enabled = currentXrEnabled;
212
236
  renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
@@ -250,6 +274,29 @@ class Reflector extends Mesh {
250
274
 
251
275
  };
252
276
 
277
+ /**
278
+ * Returns a reflection camera for the given camera. The reflection camera is used to
279
+ * render the scene from the reflector's view so correct reflections can be produced.
280
+ *
281
+ * @param {Camera} camera - The scene's camera.
282
+ * @return {Camera} The corresponding reflection camera.
283
+ */
284
+ this.getReflectionCamera = function ( camera ) {
285
+
286
+ let reflectionCamera = this._reflectionCameras.get( camera );
287
+
288
+ if ( reflectionCamera === undefined ) {
289
+
290
+ reflectionCamera = camera.clone();
291
+
292
+ this._reflectionCameras.set( camera, reflectionCamera );
293
+
294
+ }
295
+
296
+ return reflectionCamera;
297
+
298
+ };
299
+
253
300
  }
254
301
 
255
302
  }
@@ -25,6 +25,16 @@ import {
25
25
  * sky.scale.setScalar( 10000 );
26
26
  * scene.add( sky );
27
27
  * ```
28
+ *
29
+ * It can be useful to hide the sun disc when generating an environment map to avoid artifacts
30
+ *
31
+ * ```js
32
+ * // disable before rendering environment map
33
+ * sky.material.uniforms.showSunDisc.value = false;
34
+ * // ...
35
+ * // re-enable before scene sky box rendering
36
+ * sky.material.uniforms.showSunDisc.value = true;
37
+ * ```
28
38
  *
29
39
  * @augments Mesh
30
40
  * @three_import import { Sky } from 'three/addons/objects/Sky.js';
@@ -72,7 +82,14 @@ Sky.SkyShader = {
72
82
  'mieCoefficient': { value: 0.005 },
73
83
  'mieDirectionalG': { value: 0.8 },
74
84
  'sunPosition': { value: new Vector3() },
75
- 'up': { value: new Vector3( 0, 1, 0 ) }
85
+ 'up': { value: new Vector3( 0, 1, 0 ) },
86
+ 'cloudScale': { value: 0.0002 },
87
+ 'cloudSpeed': { value: 0.0001 },
88
+ 'cloudCoverage': { value: 0.4 },
89
+ 'cloudDensity': { value: 0.4 },
90
+ 'cloudElevation': { value: 0.5 },
91
+ 'showSunDisc': { value: 1 },
92
+ 'time': { value: 0.0 }
76
93
  },
77
94
 
78
95
  vertexShader: /* glsl */`
@@ -150,13 +167,46 @@ Sky.SkyShader = {
150
167
  fragmentShader: /* glsl */`
151
168
  varying vec3 vWorldPosition;
152
169
  varying vec3 vSunDirection;
153
- varying float vSunfade;
154
170
  varying vec3 vBetaR;
155
171
  varying vec3 vBetaM;
156
172
  varying float vSunE;
157
173
 
158
174
  uniform float mieDirectionalG;
159
175
  uniform vec3 up;
176
+ uniform float cloudScale;
177
+ uniform float cloudSpeed;
178
+ uniform float cloudCoverage;
179
+ uniform float cloudDensity;
180
+ uniform float cloudElevation;
181
+ uniform float showSunDisc;
182
+ uniform float time;
183
+
184
+ // Cloud noise functions
185
+ float hash( vec2 p ) {
186
+ return fract( sin( dot( p, vec2( 127.1, 311.7 ) ) ) * 43758.5453123 );
187
+ }
188
+
189
+ float noise( vec2 p ) {
190
+ vec2 i = floor( p );
191
+ vec2 f = fract( p );
192
+ f = f * f * ( 3.0 - 2.0 * f );
193
+ float a = hash( i );
194
+ float b = hash( i + vec2( 1.0, 0.0 ) );
195
+ float c = hash( i + vec2( 0.0, 1.0 ) );
196
+ float d = hash( i + vec2( 1.0, 1.0 ) );
197
+ return mix( mix( a, b, f.x ), mix( c, d, f.x ), f.y );
198
+ }
199
+
200
+ float fbm( vec2 p ) {
201
+ float value = 0.0;
202
+ float amplitude = 0.5;
203
+ for ( int i = 0; i < 5; i ++ ) {
204
+ value += amplitude * noise( p );
205
+ p *= 2.0;
206
+ amplitude *= 0.5;
207
+ }
208
+ return value;
209
+ }
160
210
 
161
211
  // constants for atmospheric scattering
162
212
  const float pi = 3.141592653589793238462643383279502884197169;
@@ -218,14 +268,48 @@ Sky.SkyShader = {
218
268
  vec3 L0 = vec3( 0.1 ) * Fex;
219
269
 
220
270
  // composition + solar disc
221
- float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );
222
- L0 += ( vSunE * 19000.0 * Fex ) * sundisk;
271
+ float sundisc = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta ) * showSunDisc;
272
+ L0 += ( vSunE * 19000.0 * Fex ) * sundisc;
223
273
 
224
274
  vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );
225
275
 
226
- vec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );
276
+ // Clouds
277
+ if ( direction.y > 0.0 && cloudCoverage > 0.0 ) {
278
+
279
+ // Project to cloud plane (higher elevation = clouds appear lower/closer)
280
+ float elevation = mix( 1.0, 0.1, cloudElevation );
281
+ vec2 cloudUV = direction.xz / ( direction.y * elevation );
282
+ cloudUV *= cloudScale;
283
+ cloudUV += time * cloudSpeed;
284
+
285
+ // Multi-octave noise for fluffy clouds
286
+ float cloudNoise = fbm( cloudUV * 1000.0 );
287
+ cloudNoise += 0.5 * fbm( cloudUV * 2000.0 + 3.7 );
288
+ cloudNoise = cloudNoise * 0.5 + 0.5;
289
+
290
+ // Apply coverage threshold
291
+ float cloudMask = smoothstep( 1.0 - cloudCoverage, 1.0 - cloudCoverage + 0.3, cloudNoise );
292
+
293
+ // Fade clouds near horizon (adjusted by elevation)
294
+ float horizonFade = smoothstep( 0.0, 0.1 + 0.2 * cloudElevation, direction.y );
295
+ cloudMask *= horizonFade;
296
+
297
+ // Cloud lighting based on sun position
298
+ float sunInfluence = dot( direction, vSunDirection ) * 0.5 + 0.5;
299
+ float daylight = max( 0.0, vSunDirection.y * 2.0 );
300
+
301
+ // Base cloud color affected by atmosphere
302
+ vec3 atmosphereColor = Lin * 0.04;
303
+ vec3 cloudColor = mix( vec3( 0.3 ), vec3( 1.0 ), daylight );
304
+ cloudColor = mix( cloudColor, atmosphereColor + vec3( 1.0 ), sunInfluence * 0.5 );
305
+ cloudColor *= vSunE * 0.00002;
306
+
307
+ // Blend clouds with sky
308
+ texColor = mix( texColor, cloudColor, cloudMask * cloudDensity );
309
+
310
+ }
227
311
 
228
- gl_FragColor = vec4( retColor, 1.0 );
312
+ gl_FragColor = vec4( texColor, 1.0 );
229
313
 
230
314
  #include <tonemapping_fragment>
231
315
  #include <colorspace_fragment>
@@ -6,14 +6,14 @@ import {
6
6
  NodeMaterial
7
7
  } from 'three/webgpu';
8
8
 
9
- import { Fn, float, vec3, acos, add, mul, clamp, cos, dot, exp, max, mix, modelViewProjection, normalize, positionWorld, pow, smoothstep, sub, varyingProperty, vec4, uniform, cameraPosition } from 'three/tsl';
9
+ import { Fn, float, vec2, vec3, acos, add, mul, clamp, cos, dot, exp, max, mix, modelViewProjection, normalize, positionWorld, pow, smoothstep, sub, varyingProperty, vec4, uniform, cameraPosition, fract, floor, sin, time, Loop, If } from 'three/tsl';
10
10
 
11
11
  /**
12
12
  * Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight](https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight)
13
13
  * aka The Preetham Model, the de facto standard for analytical skydomes.
14
14
  *
15
- * Note that this class can only be used with {@link WebGLRenderer}.
16
- * When using {@link WebGPURenderer}, use {@link SkyMesh}.
15
+ * Note that this class can only be used with {@link WebGPURenderer}.
16
+ * When using {@link WebGLRenderer}, use {@link Sky}.
17
17
  *
18
18
  * More references:
19
19
  *
@@ -26,6 +26,16 @@ import { Fn, float, vec3, acos, add, mul, clamp, cos, dot, exp, max, mix, modelV
26
26
  * scene.add( sky );
27
27
  * ```
28
28
  *
29
+ * It can be useful to hide the sun disc when generating an environment map to avoid artifacts
30
+ *
31
+ * ```js
32
+ * // disable before rendering environment map
33
+ * sky.showSunDisc.value = false;
34
+ * // ...
35
+ * // re-enable before scene sky box rendering
36
+ * sky.showSunDisc.value = true;
37
+ * ```
38
+ *
29
39
  * @augments Mesh
30
40
  * @three_import import { SkyMesh } from 'three/addons/objects/SkyMesh.js';
31
41
  */
@@ -82,6 +92,58 @@ class SkyMesh extends Mesh {
82
92
  */
83
93
  this.upUniform = uniform( new Vector3( 0, 1, 0 ) );
84
94
 
95
+ /**
96
+ * The cloud scale uniform.
97
+ *
98
+ * @type {UniformNode<float>}
99
+ */
100
+ this.cloudScale = uniform( 0.0002 );
101
+
102
+ /**
103
+ * The cloud speed uniform.
104
+ *
105
+ * @type {UniformNode<float>}
106
+ */
107
+ this.cloudSpeed = uniform( 0.0001 );
108
+
109
+ /**
110
+ * The cloud coverage uniform.
111
+ *
112
+ * @type {UniformNode<float>}
113
+ */
114
+ this.cloudCoverage = uniform( 0.4 );
115
+
116
+ /**
117
+ * The cloud density uniform.
118
+ *
119
+ * @type {UniformNode<float>}
120
+ */
121
+ this.cloudDensity = uniform( 0.4 );
122
+
123
+ /**
124
+ * The cloud elevation uniform.
125
+ *
126
+ * @type {UniformNode<float>}
127
+ */
128
+ this.cloudElevation = uniform( 0.5 );
129
+
130
+ /**
131
+ * Whether to render the solar disc.
132
+ *
133
+ * @type {UniformNode<float>}
134
+ */
135
+ this.showSunDisc = uniform( 1 );
136
+
137
+ /**
138
+ * This flag can be used for type testing.
139
+ *
140
+ * @type {boolean}
141
+ * @readonly
142
+ * @default true
143
+ * @deprecated Use isSkyMesh instead.
144
+ */
145
+ this.isSky = true; // @deprecated, r182
146
+
85
147
  /**
86
148
  * This flag can be used for type testing.
87
149
  *
@@ -89,21 +151,20 @@ class SkyMesh extends Mesh {
89
151
  * @readonly
90
152
  * @default true
91
153
  */
92
- this.isSky = true;
154
+ this.isSkyMesh = true;
93
155
 
94
156
  // Varyings
95
157
 
96
158
  const vSunDirection = varyingProperty( 'vec3' );
97
159
  const vSunE = varyingProperty( 'float' );
98
- const vSunfade = varyingProperty( 'float' );
99
160
  const vBetaR = varyingProperty( 'vec3' );
100
161
  const vBetaM = varyingProperty( 'vec3' );
101
162
 
102
163
  const vertexNode = /*@__PURE__*/ Fn( () => {
103
164
 
104
165
  // constants for atmospheric scattering
105
- const e = float( 2.71828182845904523536028747135266249775724709369995957 );
106
- // const pi = float( 3.141592653589793238462643383279502884197169 );
166
+ const e = float( 2.718281828459045 );
167
+ // const pi = float( 3.141592653589793 );
107
168
 
108
169
  // wavelength of used primaries, according to preetham
109
170
  // const lambda = vec3( 680E-9, 550E-9, 450E-9 );
@@ -136,10 +197,9 @@ class SkyMesh extends Mesh {
136
197
  const sunIntensity = EE.mul( max( 0.0, float( 1.0 ).sub( pow( e, cutoffAngle.sub( acos( zenithAngleCos ) ).div( steepness ).negate() ) ) ) );
137
198
  vSunE.assign( sunIntensity );
138
199
 
139
- // varying sun fade
200
+ // sun fade
140
201
 
141
202
  const sunfade = float( 1.0 ).sub( clamp( float( 1.0 ).sub( exp( this.sunPosition.y.div( 450000.0 ) ) ), 0, 1 ) );
142
- vSunfade.assign( sunfade );
143
203
 
144
204
  // varying vBetaR
145
205
 
@@ -168,13 +228,13 @@ class SkyMesh extends Mesh {
168
228
  const colorNode = /*@__PURE__*/ Fn( () => {
169
229
 
170
230
  // constants for atmospheric scattering
171
- const pi = float( 3.141592653589793238462643383279502884197169 );
231
+ const pi = float( 3.141592653589793 );
172
232
 
173
233
  // optical length at zenith for molecules
174
234
  const rayleighZenithLength = float( 8.4E3 );
175
235
  const mieZenithLength = float( 1.25E3 );
176
236
  // 66 arc seconds -> degrees, and the cosine of that
177
- const sunAngularDiameterCos = float( 0.999956676946448443553574619906976478926848692873900859324 );
237
+ const sunAngularDiameterCos = float( 0.9999566769464484 );
178
238
 
179
239
  // 3.0 / ( 16.0 * pi )
180
240
  const THREE_OVER_SIXTEENPI = float( 0.05968310365946075 );
@@ -219,14 +279,88 @@ class SkyMesh extends Mesh {
219
279
  const L0 = vec3( 0.1 ).mul( Fex );
220
280
 
221
281
  // composition + solar disc
222
- const sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos.add( 0.00002 ), cosTheta );
223
- L0.addAssign( vSunE.mul( 19000.0 ).mul( Fex ).mul( sundisk ) );
282
+ const sundisc = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos.add( 0.00002 ), cosTheta ).mul( this.showSunDisc );
283
+ L0.addAssign( vSunE.mul( 19000.0 ).mul( Fex ).mul( sundisc ) );
284
+
285
+ const texColor = add( Lin, L0 ).mul( 0.04 ).add( vec3( 0.0, 0.0003, 0.00075 ) ).toVar();
286
+
287
+ // Cloud noise functions
288
+ const hash = Fn( ( [ p ] ) => {
289
+
290
+ return fract( sin( dot( p, vec2( 127.1, 311.7 ) ) ).mul( 43758.5453123 ) );
291
+
292
+ } );
293
+
294
+ const noise = Fn( ( [ p_immutable ] ) => {
295
+
296
+ const p = vec2( p_immutable ).toVar();
297
+ const i = floor( p );
298
+ const f = fract( p );
299
+ const ff = f.mul( f ).mul( sub( 3.0, f.mul( 2.0 ) ) );
300
+
301
+ const a = hash( i );
302
+ const b = hash( add( i, vec2( 1.0, 0.0 ) ) );
303
+ const c = hash( add( i, vec2( 0.0, 1.0 ) ) );
304
+ const d = hash( add( i, vec2( 1.0, 1.0 ) ) );
305
+
306
+ return mix( mix( a, b, ff.x ), mix( c, d, ff.x ), ff.y );
307
+
308
+ } );
309
+
310
+ const fbm = Fn( ( [ p_immutable ] ) => {
311
+
312
+ const p = vec2( p_immutable ).toVar();
313
+ const value = float( 0.0 ).toVar();
314
+ const amplitude = float( 0.5 ).toVar();
315
+
316
+ Loop( 5, () => {
317
+
318
+ value.addAssign( amplitude.mul( noise( p ) ) );
319
+ p.mulAssign( 2.0 );
320
+ amplitude.mulAssign( 0.5 );
321
+
322
+ } );
323
+
324
+ return value;
325
+
326
+ } );
327
+
328
+ // Clouds
329
+ If( direction.y.greaterThan( 0.0 ).and( this.cloudCoverage.greaterThan( 0.0 ) ), () => {
330
+
331
+ // Project to cloud plane (higher elevation = clouds appear lower/closer)
332
+ const elevation = mix( 1.0, 0.1, this.cloudElevation );
333
+ const cloudUV = direction.xz.div( direction.y.mul( elevation ) ).toVar();
334
+ cloudUV.mulAssign( this.cloudScale );
335
+ cloudUV.addAssign( time.mul( this.cloudSpeed ) );
336
+
337
+ // Multi-octave noise for fluffy clouds
338
+ const cloudNoise = fbm( cloudUV.mul( 1000.0 ) ).add( fbm( cloudUV.mul( 2000.0 ).add( 3.7 ) ).mul( 0.5 ) ).toVar();
339
+ cloudNoise.assign( cloudNoise.mul( 0.5 ).add( 0.5 ) );
340
+
341
+ // Apply coverage threshold
342
+ const cloudMask = smoothstep( sub( 1.0, this.cloudCoverage ), sub( 1.0, this.cloudCoverage ).add( 0.3 ), cloudNoise ).toVar();
343
+
344
+ // Fade clouds near horizon (adjusted by elevation)
345
+ const horizonFade = smoothstep( 0.0, add( 0.1, mul( 0.2, this.cloudElevation ) ), direction.y );
346
+ cloudMask.mulAssign( horizonFade );
347
+
348
+ // Cloud lighting based on sun position
349
+ const sunInfluence = dot( direction, vSunDirection ).mul( 0.5 ).add( 0.5 );
350
+ const daylight = max( 0.0, vSunDirection.y.mul( 2.0 ) );
351
+
352
+ // Base cloud color affected by atmosphere
353
+ const atmosphereColor = Lin.mul( 0.04 );
354
+ const cloudColor = mix( vec3( 0.3 ), vec3( 1.0 ), daylight ).toVar();
355
+ cloudColor.assign( mix( cloudColor, atmosphereColor.add( vec3( 1.0 ) ), sunInfluence.mul( 0.5 ) ) );
356
+ cloudColor.mulAssign( vSunE.mul( 0.00002 ) );
224
357
 
225
- const texColor = add( Lin, L0 ).mul( 0.04 ).add( vec3( 0.0, 0.0003, 0.00075 ) );
358
+ // Blend clouds with sky
359
+ texColor.assign( mix( texColor, cloudColor, cloudMask.mul( this.cloudDensity ) ) );
226
360
 
227
- const retColor = pow( texColor, vec3( float( 1.0 ).div( float( 1.2 ).add( vSunfade.mul( 1.2 ) ) ) ) );
361
+ } );
228
362
 
229
- return vec4( retColor, 1.0 );
363
+ return vec4( texColor, 1.0 );
230
364
 
231
365
  } )();
232
366
 
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  Color,
3
3
  FrontSide,
4
+ HalfFloatType,
4
5
  Matrix4,
5
6
  Mesh,
6
7
  PerspectiveCamera,
@@ -84,7 +85,7 @@ class Water extends Mesh {
84
85
 
85
86
  const mirrorCamera = new PerspectiveCamera();
86
87
 
87
- const renderTarget = new WebGLRenderTarget( textureWidth, textureHeight );
88
+ const renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { type: HalfFloatType } );
88
89
 
89
90
  const mirrorShader = {
90
91
 
@@ -196,10 +197,10 @@ class Water extends Mesh {
196
197
  vec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );
197
198
 
198
199
  float theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );
199
- float rf0 = 0.3;
200
+ float rf0 = 0.02;
200
201
  float reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );
201
202
  vec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;
202
- vec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);
203
+ vec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), reflectionSample + specularLight, reflectance );
203
204
  vec3 outgoingLight = albedo;
204
205
  gl_FragColor = vec4( outgoingLight, alpha );
205
206
 
@@ -1,5 +1,5 @@
1
1
  import {
2
- Clock,
2
+ Timer,
3
3
  Color,
4
4
  Matrix4,
5
5
  Mesh,
@@ -74,7 +74,7 @@ class Water extends Mesh {
74
74
  const cycle = 0.15; // a cycle of a flow map phase
75
75
  const halfCycle = cycle * 0.5;
76
76
  const textureMatrix = new Matrix4();
77
- const clock = new Clock();
77
+ const timer = new Timer();
78
78
 
79
79
  // internal components
80
80
 
@@ -180,7 +180,7 @@ class Water extends Mesh {
180
180
 
181
181
  function updateFlow() {
182
182
 
183
- const delta = clock.getDelta();
183
+ const delta = timer.getDelta();
184
184
  const config = scope.material.uniforms[ 'config' ];
185
185
 
186
186
  config.value.x += flowSpeed * delta; // flowMapOffset0
@@ -207,6 +207,8 @@ class Water extends Mesh {
207
207
 
208
208
  this.onBeforeRender = function ( renderer, scene, camera ) {
209
209
 
210
+ timer.update();
211
+
210
212
  updateTextureMatrix( camera );
211
213
  updateFlow();
212
214
 
@@ -66,7 +66,7 @@ class WaterNode extends TempNode {
66
66
 
67
67
  this.normalMap0 = texture( options.normalMap0 );
68
68
  this.normalMap1 = texture( options.normalMap1 );
69
- this.flowMap = texture( options.flowMap !== undefined ? options.flowMap : null );
69
+ this.flowMap = texture( options.flowMap );
70
70
 
71
71
  this.color = uniform( options.color !== undefined ? new Color( options.color ) : new Color( 0xffffff ) );
72
72
  this.flowDirection = uniform( options.flowDirection !== undefined ? options.flowDirection : new Vector2( 1, 0 ) );
@@ -2,10 +2,10 @@ import {
2
2
  Color,
3
3
  Mesh,
4
4
  Vector3,
5
- MeshLambertNodeMaterial
5
+ NodeMaterial
6
6
  } from 'three/webgpu';
7
7
 
8
- import { Fn, add, cameraPosition, div, normalize, positionWorld, sub, time, texture, vec2, vec3, max, dot, reflect, pow, length, float, uniform, reflector, mul, mix, diffuseColor } from 'three/tsl';
8
+ import { Fn, add, cameraPosition, div, normalize, positionWorld, sub, time, texture, vec2, max, dot, reflect, pow, length, float, uniform, reflector, mul, mix } from 'three/tsl';
9
9
 
10
10
  /**
11
11
  * A basic flat, reflective water effect.
@@ -32,7 +32,7 @@ class WaterMesh extends Mesh {
32
32
  */
33
33
  constructor( geometry, options ) {
34
34
 
35
- const material = new MeshLambertNodeMaterial();
35
+ const material = new NodeMaterial();
36
36
 
37
37
  super( geometry, material );
38
38
 
@@ -155,8 +155,6 @@ class WaterMesh extends Mesh {
155
155
 
156
156
  material.receivedShadowPositionNode = positionWorld.add( distortion );
157
157
 
158
- material.setupOutgoingLight = () => diffuseColor.rgb; // backwards compatibility
159
-
160
158
  material.colorNode = Fn( () => {
161
159
 
162
160
  const mirrorSampler = reflector();
@@ -166,10 +164,10 @@ class WaterMesh extends Mesh {
166
164
  this.add( mirrorSampler.target );
167
165
 
168
166
  const theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );
169
- const rf0 = float( 0.3 );
167
+ const rf0 = float( 0.02 );
170
168
  const reflectance = mul( pow( float( 1.0 ).sub( theta ), 5.0 ), float( 1.0 ).sub( rf0 ) ).add( rf0 );
171
169
  const scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ).mul( this.waterColor );
172
- const albedo = mix( this.sunColor.mul( diffuseLight ).mul( 0.3 ).add( scatter ), mirrorSampler.rgb.mul( specularLight ).add( mirrorSampler.rgb.mul( 0.9 ) ).add( vec3( 0.1 ) ), reflectance );
170
+ const albedo = mix( this.sunColor.mul( diffuseLight ).mul( 0.3 ).add( scatter ), mirrorSampler.rgb.add( specularLight ), reflectance );
173
171
 
174
172
  return albedo;
175
173