super-three 0.179.0 → 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (696) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +14522 -12207
  4. package/build/three.core.js +12005 -10954
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +2270 -1005
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +63 -18
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +16573 -7890
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +16533 -7888
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +12 -4
  17. package/examples/jsm/animation/CCDIKSolver.js +8 -4
  18. package/examples/jsm/controls/ArcballControls.js +15 -12
  19. package/examples/jsm/controls/DragControls.js +9 -59
  20. package/examples/jsm/controls/FirstPersonControls.js +61 -57
  21. package/examples/jsm/controls/FlyControls.js +5 -1
  22. package/examples/jsm/controls/MapControls.js +55 -1
  23. package/examples/jsm/controls/OrbitControls.js +113 -10
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +9 -9
  26. package/examples/jsm/controls/TransformControls.js +35 -3
  27. package/examples/jsm/csm/CSM.js +2 -1
  28. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  29. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  30. package/examples/jsm/effects/AsciiEffect.js +8 -8
  31. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  32. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  33. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  34. package/examples/jsm/exporters/EXRExporter.js +2 -2
  35. package/examples/jsm/exporters/GLTFExporter.js +185 -34
  36. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  37. package/examples/jsm/exporters/PLYExporter.js +1 -1
  38. package/examples/jsm/exporters/USDZExporter.js +31 -5
  39. package/examples/jsm/geometries/DecalGeometry.js +3 -3
  40. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  41. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  42. package/examples/jsm/geometries/TextGeometry.js +21 -2
  43. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  44. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  45. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  46. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  47. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  48. package/examples/jsm/helpers/ViewHelper.js +110 -13
  49. package/examples/jsm/inspector/Extension.js +13 -0
  50. package/examples/jsm/inspector/Inspector.js +542 -0
  51. package/examples/jsm/inspector/RendererInspector.js +425 -0
  52. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  53. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  55. package/examples/jsm/inspector/tabs/Console.js +238 -0
  56. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  57. package/examples/jsm/inspector/tabs/Parameters.js +380 -0
  58. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  59. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  60. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  61. package/examples/jsm/inspector/tabs/Viewer.js +268 -0
  62. package/examples/jsm/inspector/ui/Graph.js +95 -0
  63. package/examples/jsm/inspector/ui/Item.js +170 -0
  64. package/examples/jsm/inspector/ui/List.js +75 -0
  65. package/examples/jsm/inspector/ui/Profiler.js +2072 -0
  66. package/examples/jsm/inspector/ui/Style.js +1667 -0
  67. package/examples/jsm/inspector/ui/Tab.js +265 -0
  68. package/examples/jsm/inspector/ui/Values.js +476 -0
  69. package/examples/jsm/inspector/ui/utils.js +69 -0
  70. package/examples/jsm/interaction/InteractionManager.js +226 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  73. package/examples/jsm/interactive/SelectionBox.js +30 -0
  74. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  75. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  76. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  77. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  79. package/examples/jsm/lines/Line2.js +3 -3
  80. package/examples/jsm/lines/LineGeometry.js +1 -1
  81. package/examples/jsm/lines/LineMaterial.js +7 -1
  82. package/examples/jsm/lines/LineSegments2.js +2 -2
  83. package/examples/jsm/lines/Wireframe.js +2 -2
  84. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  85. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  86. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  87. package/examples/jsm/loaders/3DMLoader.js +5 -4
  88. package/examples/jsm/loaders/3MFLoader.js +3 -3
  89. package/examples/jsm/loaders/AMFLoader.js +2 -2
  90. package/examples/jsm/loaders/ColladaLoader.js +27 -4029
  91. package/examples/jsm/loaders/DDSLoader.js +1 -1
  92. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  93. package/examples/jsm/loaders/EXRLoader.js +692 -53
  94. package/examples/jsm/loaders/FBXLoader.js +237 -39
  95. package/examples/jsm/loaders/FontLoader.js +23 -5
  96. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  97. package/examples/jsm/loaders/GLTFLoader.js +159 -185
  98. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  99. package/examples/jsm/loaders/HDRLoader.js +485 -0
  100. package/examples/jsm/loaders/KMZLoader.js +5 -5
  101. package/examples/jsm/loaders/KTX2Loader.js +162 -53
  102. package/examples/jsm/loaders/KTXLoader.js +2 -2
  103. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  104. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  105. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  106. package/examples/jsm/loaders/LWOLoader.js +9 -41
  107. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  108. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  109. package/examples/jsm/loaders/OBJLoader.js +1 -1
  110. package/examples/jsm/loaders/PCDLoader.js +4 -2
  111. package/examples/jsm/loaders/PDBLoader.js +1 -1
  112. package/examples/jsm/loaders/RGBELoader.js +7 -473
  113. package/examples/jsm/loaders/SVGLoader.js +4 -4
  114. package/examples/jsm/loaders/TDSLoader.js +0 -2
  115. package/examples/jsm/loaders/TGALoader.js +0 -2
  116. package/examples/jsm/loaders/TTFLoader.js +4 -4
  117. package/examples/jsm/loaders/USDLoader.js +100 -40
  118. package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
  119. package/examples/jsm/loaders/VOXLoader.js +660 -117
  120. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  121. package/examples/jsm/loaders/VTKLoader.js +42 -25
  122. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  123. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  124. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  125. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  126. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  127. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  128. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  129. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  130. package/examples/jsm/math/ColorSpaces.js +19 -1
  131. package/examples/jsm/math/ConvexHull.js +3 -3
  132. package/examples/jsm/math/ImprovedNoise.js +1 -1
  133. package/examples/jsm/math/Lut.js +2 -2
  134. package/examples/jsm/math/Octree.js +131 -1
  135. package/examples/jsm/math/SimplexNoise.js +1 -1
  136. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  137. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  138. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  139. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  140. package/examples/jsm/misc/RollerCoaster.js +42 -4
  141. package/examples/jsm/misc/TubePainter.js +383 -40
  142. package/examples/jsm/misc/Volume.js +1 -2
  143. package/examples/jsm/misc/VolumeSlice.js +0 -1
  144. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  145. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  146. package/examples/jsm/objects/LensflareMesh.js +1 -1
  147. package/examples/jsm/objects/Reflector.js +73 -25
  148. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  149. package/examples/jsm/objects/Sky.js +91 -7
  150. package/examples/jsm/objects/SkyMesh.js +151 -17
  151. package/examples/jsm/objects/Water.js +7 -6
  152. package/examples/jsm/objects/Water2.js +5 -3
  153. package/examples/jsm/objects/WaterMesh.js +11 -13
  154. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  155. package/examples/jsm/physics/JoltPhysics.js +10 -6
  156. package/examples/jsm/physics/RapierPhysics.js +9 -5
  157. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  158. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  159. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  160. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  161. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  162. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  163. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  164. package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
  165. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  166. package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
  167. package/examples/jsm/renderers/Projector.js +246 -28
  168. package/examples/jsm/renderers/SVGRenderer.js +175 -61
  169. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  170. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  171. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  172. package/examples/jsm/shaders/BokehShader.js +1 -1
  173. package/examples/jsm/shaders/BokehShader2.js +1 -1
  174. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  175. package/examples/jsm/shaders/FocusShader.js +1 -1
  176. package/examples/jsm/shaders/GTAOShader.js +21 -8
  177. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  178. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  179. package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
  180. package/examples/jsm/shaders/SAOShader.js +17 -4
  181. package/examples/jsm/shaders/SSAOShader.js +11 -1
  182. package/examples/jsm/shaders/SSRShader.js +7 -6
  183. package/examples/jsm/shaders/SepiaShader.js +1 -1
  184. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  185. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  186. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
  187. package/examples/jsm/shaders/VignetteShader.js +1 -1
  188. package/examples/jsm/transpiler/AST.js +44 -0
  189. package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
  190. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  191. package/examples/jsm/transpiler/TSLEncoder.js +52 -10
  192. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  193. package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
  194. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  195. package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
  196. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  197. package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
  198. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  199. package/examples/jsm/tsl/display/BloomNode.js +23 -9
  200. package/examples/jsm/tsl/display/CRT.js +150 -0
  201. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
  202. package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
  203. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  204. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  205. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  206. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  207. package/examples/jsm/tsl/display/GTAONode.js +59 -9
  208. package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
  209. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  210. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  211. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  212. package/examples/jsm/tsl/display/OutlineNode.js +81 -20
  213. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  214. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  215. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  216. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  217. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  218. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  219. package/examples/jsm/tsl/display/SSGINode.js +638 -0
  220. package/examples/jsm/tsl/display/SSRNode.js +186 -69
  221. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  222. package/examples/jsm/tsl/display/Shape.js +29 -0
  223. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  224. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  225. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  226. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  227. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  228. package/examples/jsm/tsl/display/TRAANode.js +381 -75
  229. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  230. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  231. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  232. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  233. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  234. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  235. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  236. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  237. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  238. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  239. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  240. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  241. package/examples/jsm/tsl/math/Bayer.js +53 -3
  242. package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
  243. package/examples/jsm/utils/ColorUtils.js +76 -0
  244. package/examples/jsm/utils/LDrawUtils.js +1 -1
  245. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  246. package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
  247. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  248. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  249. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  250. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  251. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  252. package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
  253. package/package.json +27 -38
  254. package/src/Three.Core.js +7 -3
  255. package/src/Three.TSL.js +61 -16
  256. package/src/Three.WebGPU.Nodes.js +7 -0
  257. package/src/Three.WebGPU.js +11 -0
  258. package/src/Three.js +1 -0
  259. package/src/animation/AnimationAction.js +12 -2
  260. package/src/animation/AnimationClip.js +21 -5
  261. package/src/animation/AnimationMixer.js +9 -3
  262. package/src/animation/AnimationObjectGroup.js +2 -1
  263. package/src/animation/AnimationUtils.js +1 -12
  264. package/src/animation/KeyframeTrack.js +54 -14
  265. package/src/animation/PropertyBinding.js +12 -11
  266. package/src/animation/PropertyMixer.js +4 -4
  267. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  268. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  269. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  270. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  271. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  272. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  273. package/src/audio/Audio.js +11 -10
  274. package/src/audio/AudioContext.js +2 -2
  275. package/src/audio/AudioListener.js +5 -3
  276. package/src/audio/PositionalAudio.js +1 -1
  277. package/src/cameras/Camera.js +32 -2
  278. package/src/cameras/CubeCamera.js +20 -0
  279. package/src/cameras/OrthographicCamera.js +1 -1
  280. package/src/cameras/PerspectiveCamera.js +1 -1
  281. package/src/cameras/StereoCamera.js +2 -2
  282. package/src/constants.js +100 -7
  283. package/src/core/BufferAttribute.js +13 -1
  284. package/src/core/BufferGeometry.js +24 -12
  285. package/src/core/Clock.js +7 -0
  286. package/src/core/EventDispatcher.js +1 -1
  287. package/src/core/InterleavedBuffer.js +1 -1
  288. package/src/core/InterleavedBufferAttribute.js +3 -2
  289. package/src/core/Object3D.js +55 -6
  290. package/src/core/Raycaster.js +4 -3
  291. package/src/core/RenderTarget.js +14 -5
  292. package/src/extras/Controls.js +5 -4
  293. package/src/extras/DataUtils.js +2 -1
  294. package/src/extras/Earcut.js +6 -0
  295. package/src/extras/ImageUtils.js +2 -2
  296. package/src/extras/PMREMGenerator.js +259 -57
  297. package/src/extras/TextureUtils.js +6 -1
  298. package/src/extras/core/Curve.js +2 -1
  299. package/src/extras/core/Interpolations.js +7 -1
  300. package/src/extras/core/ShapePath.js +4 -4
  301. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  302. package/src/extras/lib/earcut.js +8 -8
  303. package/src/geometries/BoxGeometry.js +1 -0
  304. package/src/geometries/CapsuleGeometry.js +1 -0
  305. package/src/geometries/CircleGeometry.js +1 -0
  306. package/src/geometries/ConeGeometry.js +1 -0
  307. package/src/geometries/CylinderGeometry.js +1 -0
  308. package/src/geometries/DodecahedronGeometry.js +1 -0
  309. package/src/geometries/ExtrudeGeometry.js +10 -8
  310. package/src/geometries/IcosahedronGeometry.js +1 -0
  311. package/src/geometries/LatheGeometry.js +1 -0
  312. package/src/geometries/OctahedronGeometry.js +1 -0
  313. package/src/geometries/PlaneGeometry.js +1 -0
  314. package/src/geometries/PolyhedronGeometry.js +1 -1
  315. package/src/geometries/RingGeometry.js +1 -0
  316. package/src/geometries/ShapeGeometry.js +1 -0
  317. package/src/geometries/SphereGeometry.js +1 -0
  318. package/src/geometries/TetrahedronGeometry.js +1 -0
  319. package/src/geometries/TorusGeometry.js +9 -3
  320. package/src/geometries/TorusKnotGeometry.js +1 -0
  321. package/src/geometries/TubeGeometry.js +1 -0
  322. package/src/helpers/CameraHelper.js +4 -1
  323. package/src/helpers/DirectionalLightHelper.js +4 -1
  324. package/src/helpers/HemisphereLightHelper.js +3 -0
  325. package/src/helpers/PointLightHelper.js +1 -25
  326. package/src/helpers/SpotLightHelper.js +3 -0
  327. package/src/lights/DirectionalLight.js +13 -0
  328. package/src/lights/HemisphereLight.js +10 -0
  329. package/src/lights/Light.js +1 -11
  330. package/src/lights/LightProbe.js +0 -15
  331. package/src/lights/LightShadow.js +15 -6
  332. package/src/lights/PointLight.js +15 -0
  333. package/src/lights/PointLightShadow.js +0 -86
  334. package/src/lights/SpotLight.js +22 -1
  335. package/src/lights/webgpu/IESSpotLight.js +2 -1
  336. package/src/lights/webgpu/ProjectorLight.js +1 -1
  337. package/src/loaders/AnimationLoader.js +2 -1
  338. package/src/loaders/AudioLoader.js +13 -2
  339. package/src/loaders/BufferGeometryLoader.js +2 -2
  340. package/src/loaders/Cache.js +30 -2
  341. package/src/loaders/DataTextureLoader.js +6 -4
  342. package/src/loaders/FileLoader.js +4 -4
  343. package/src/loaders/ImageBitmapLoader.js +17 -13
  344. package/src/loaders/ImageLoader.js +1 -1
  345. package/src/loaders/Loader.js +9 -3
  346. package/src/loaders/LoadingManager.js +25 -3
  347. package/src/loaders/MaterialLoader.js +6 -4
  348. package/src/loaders/ObjectLoader.js +57 -17
  349. package/src/loaders/TextureLoader.js +1 -1
  350. package/src/loaders/nodes/NodeLoader.js +5 -4
  351. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  352. package/src/materials/Material.js +18 -3
  353. package/src/materials/MeshBasicMaterial.js +1 -0
  354. package/src/materials/MeshDepthMaterial.js +1 -0
  355. package/src/materials/MeshDistanceMaterial.js +1 -1
  356. package/src/materials/MeshLambertMaterial.js +11 -1
  357. package/src/materials/MeshMatcapMaterial.js +22 -0
  358. package/src/materials/MeshNormalMaterial.js +1 -0
  359. package/src/materials/MeshPhongMaterial.js +11 -1
  360. package/src/materials/MeshPhysicalMaterial.js +2 -1
  361. package/src/materials/MeshStandardMaterial.js +8 -7
  362. package/src/materials/MeshToonMaterial.js +2 -1
  363. package/src/materials/PointsMaterial.js +1 -1
  364. package/src/materials/ShaderMaterial.js +22 -3
  365. package/src/materials/nodes/Line2NodeMaterial.js +36 -9
  366. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  367. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  368. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  369. package/src/materials/nodes/NodeMaterial.js +95 -35
  370. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  371. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  372. package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
  373. package/src/math/Color.js +6 -5
  374. package/src/math/ColorManagement.js +9 -3
  375. package/src/math/Cylindrical.js +1 -1
  376. package/src/math/Euler.js +2 -1
  377. package/src/math/Line3.js +6 -5
  378. package/src/math/MathUtils.js +23 -21
  379. package/src/math/Matrix2.js +14 -10
  380. package/src/math/Matrix3.js +15 -11
  381. package/src/math/Matrix4.js +94 -81
  382. package/src/math/Plane.js +5 -4
  383. package/src/math/Quaternion.js +60 -84
  384. package/src/math/Sphere.js +1 -1
  385. package/src/math/Spherical.js +1 -1
  386. package/src/math/Triangle.js +1 -1
  387. package/src/math/Vector2.js +11 -7
  388. package/src/math/Vector3.js +15 -13
  389. package/src/math/Vector4.js +13 -9
  390. package/src/math/interpolants/BezierInterpolant.js +108 -0
  391. package/src/nodes/Nodes.js +86 -65
  392. package/src/nodes/TSL.js +11 -8
  393. package/src/nodes/accessors/Arrays.js +1 -1
  394. package/src/nodes/accessors/BatchNode.js +10 -10
  395. package/src/nodes/accessors/Bitangent.js +5 -5
  396. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  397. package/src/nodes/accessors/BufferNode.js +30 -3
  398. package/src/nodes/accessors/Camera.js +260 -13
  399. package/src/nodes/accessors/ClippingNode.js +10 -9
  400. package/src/nodes/accessors/CubeTextureNode.js +32 -6
  401. package/src/nodes/accessors/InstanceNode.js +164 -39
  402. package/src/nodes/accessors/Lights.js +10 -0
  403. package/src/nodes/accessors/MaterialNode.js +9 -1
  404. package/src/nodes/accessors/MaterialProperties.js +2 -5
  405. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  406. package/src/nodes/accessors/ModelNode.js +1 -1
  407. package/src/nodes/accessors/Normal.js +16 -15
  408. package/src/nodes/accessors/Object3DNode.js +2 -2
  409. package/src/nodes/accessors/Position.js +51 -3
  410. package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
  411. package/src/nodes/accessors/ReferenceNode.js +11 -10
  412. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  413. package/src/nodes/accessors/SceneProperties.js +47 -0
  414. package/src/nodes/accessors/SkinningNode.js +27 -26
  415. package/src/nodes/accessors/StorageBufferNode.js +14 -24
  416. package/src/nodes/accessors/StorageTextureNode.js +62 -9
  417. package/src/nodes/accessors/Tangent.js +4 -14
  418. package/src/nodes/accessors/Texture3DNode.js +41 -31
  419. package/src/nodes/accessors/TextureNode.js +193 -63
  420. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  421. package/src/nodes/accessors/UserDataNode.js +1 -2
  422. package/src/nodes/accessors/VertexColorNode.js +1 -2
  423. package/src/nodes/code/FunctionCallNode.js +25 -5
  424. package/src/nodes/code/FunctionNode.js +25 -3
  425. package/src/nodes/core/ArrayNode.js +22 -2
  426. package/src/nodes/core/AssignNode.js +6 -5
  427. package/src/nodes/core/AttributeNode.js +5 -4
  428. package/src/nodes/core/BypassNode.js +1 -1
  429. package/src/nodes/core/ContextNode.js +133 -15
  430. package/src/nodes/core/IndexNode.js +4 -3
  431. package/src/nodes/core/InputNode.js +3 -2
  432. package/src/nodes/core/InspectorNode.js +128 -0
  433. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
  434. package/src/nodes/core/MRTNode.js +48 -2
  435. package/src/nodes/core/Node.js +264 -46
  436. package/src/nodes/core/NodeBuilder.js +453 -87
  437. package/src/nodes/core/NodeError.js +28 -0
  438. package/src/nodes/core/NodeFrame.js +31 -23
  439. package/src/nodes/core/NodeFunction.js +2 -1
  440. package/src/nodes/core/NodeParser.js +2 -1
  441. package/src/nodes/core/NodeUniform.js +1 -1
  442. package/src/nodes/core/NodeUtils.js +25 -97
  443. package/src/nodes/core/OutputStructNode.js +12 -10
  444. package/src/nodes/core/ParameterNode.js +34 -3
  445. package/src/nodes/core/PropertyNode.js +26 -3
  446. package/src/nodes/core/StackNode.js +99 -23
  447. package/src/nodes/core/StackTrace.js +139 -0
  448. package/src/nodes/core/StructNode.js +22 -8
  449. package/src/nodes/core/StructTypeNode.js +13 -18
  450. package/src/nodes/core/SubBuildNode.js +4 -4
  451. package/src/nodes/core/UniformGroupNode.js +36 -6
  452. package/src/nodes/core/UniformNode.js +37 -13
  453. package/src/nodes/core/VarNode.js +96 -34
  454. package/src/nodes/core/VaryingNode.js +2 -18
  455. package/src/nodes/display/BlendModes.js +0 -63
  456. package/src/nodes/display/BumpMapNode.js +1 -1
  457. package/src/nodes/display/ColorAdjustment.js +18 -1
  458. package/src/nodes/display/ColorSpaceNode.js +3 -3
  459. package/src/nodes/display/FrontFacingNode.js +4 -8
  460. package/src/nodes/display/NormalMapNode.js +41 -5
  461. package/src/nodes/display/PassNode.js +175 -25
  462. package/src/nodes/display/RenderOutputNode.js +35 -9
  463. package/src/nodes/display/ScreenNode.js +47 -15
  464. package/src/nodes/display/ToneMappingNode.js +32 -5
  465. package/src/nodes/display/ToonOutlinePassNode.js +10 -2
  466. package/src/nodes/display/ViewportDepthNode.js +52 -4
  467. package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
  468. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  469. package/src/nodes/display/ViewportTextureNode.js +72 -14
  470. package/src/nodes/fog/Fog.js +18 -34
  471. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  472. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  473. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  474. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  475. package/src/nodes/functions/BasicLightingModel.js +2 -1
  476. package/src/nodes/functions/PhysicalLightingModel.js +128 -46
  477. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  478. package/src/nodes/geometry/RangeNode.js +44 -6
  479. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  480. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  481. package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
  482. package/src/nodes/gpgpu/ComputeNode.js +76 -38
  483. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  484. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
  485. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  486. package/src/nodes/lighting/EnvironmentNode.js +34 -9
  487. package/src/nodes/lighting/LightsNode.js +10 -32
  488. package/src/nodes/lighting/PointShadowNode.js +167 -148
  489. package/src/nodes/lighting/ShadowFilterNode.js +55 -65
  490. package/src/nodes/lighting/ShadowNode.js +189 -44
  491. package/src/nodes/math/BitcastNode.js +156 -0
  492. package/src/nodes/math/BitcountNode.js +433 -0
  493. package/src/nodes/math/ConditionalNode.js +25 -8
  494. package/src/nodes/math/MathNode.js +98 -57
  495. package/src/nodes/math/OperatorNode.js +8 -5
  496. package/src/nodes/math/PackFloatNode.js +98 -0
  497. package/src/nodes/math/UnpackFloatNode.js +96 -0
  498. package/src/nodes/pmrem/PMREMNode.js +1 -1
  499. package/src/nodes/pmrem/PMREMUtils.js +111 -2
  500. package/src/nodes/shapes/Shapes.js +1 -1
  501. package/src/nodes/tsl/TSLBase.js +6 -3
  502. package/src/nodes/tsl/TSLCore.js +488 -166
  503. package/src/nodes/utils/ArrayElementNode.js +14 -1
  504. package/src/nodes/utils/ConvertNode.js +1 -1
  505. package/src/nodes/utils/DebugNode.js +14 -13
  506. package/src/nodes/utils/EventNode.js +67 -2
  507. package/src/nodes/utils/FlipNode.js +1 -1
  508. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  509. package/src/nodes/utils/JoinNode.js +7 -4
  510. package/src/nodes/utils/LoopNode.js +20 -24
  511. package/src/nodes/utils/MemberNode.js +60 -8
  512. package/src/nodes/utils/Packing.js +13 -1
  513. package/src/nodes/utils/PostProcessingUtils.js +60 -1
  514. package/src/nodes/utils/RTTNode.js +14 -4
  515. package/src/nodes/utils/ReflectorNode.js +61 -11
  516. package/src/nodes/utils/Remap.js +48 -0
  517. package/src/nodes/utils/RotateNode.js +1 -1
  518. package/src/nodes/utils/SampleNode.js +12 -2
  519. package/src/nodes/utils/SetNode.js +1 -1
  520. package/src/nodes/utils/SplitNode.js +12 -1
  521. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  522. package/src/nodes/utils/Timer.js +0 -47
  523. package/src/nodes/utils/UVUtils.js +28 -0
  524. package/src/objects/BatchedMesh.js +46 -18
  525. package/src/objects/InstancedMesh.js +30 -3
  526. package/src/objects/LOD.js +1 -1
  527. package/src/objects/Line.js +3 -2
  528. package/src/objects/LineSegments.js +2 -1
  529. package/src/objects/Mesh.js +1 -1
  530. package/src/objects/Points.js +1 -1
  531. package/src/objects/Skeleton.js +12 -2
  532. package/src/objects/SkinnedMesh.js +29 -10
  533. package/src/objects/Sprite.js +4 -3
  534. package/src/renderers/WebGLRenderer.js +372 -179
  535. package/src/renderers/common/Animation.js +16 -4
  536. package/src/renderers/common/Attributes.js +16 -2
  537. package/src/renderers/common/Backend.js +137 -35
  538. package/src/renderers/common/Background.js +28 -14
  539. package/src/renderers/common/BindGroup.js +1 -16
  540. package/src/renderers/common/Binding.js +11 -0
  541. package/src/renderers/common/Bindings.js +83 -12
  542. package/src/renderers/common/BlendMode.js +143 -0
  543. package/src/renderers/common/Buffer.js +40 -0
  544. package/src/renderers/common/BundleGroup.js +1 -1
  545. package/src/renderers/common/CanvasTarget.js +341 -0
  546. package/src/renderers/common/ChainMap.js +30 -6
  547. package/src/renderers/common/ComputePipeline.js +1 -1
  548. package/src/renderers/common/CubeRenderTarget.js +51 -7
  549. package/src/renderers/common/DataMap.js +1 -1
  550. package/src/renderers/common/Geometries.js +55 -3
  551. package/src/renderers/common/Info.js +337 -6
  552. package/src/renderers/common/InspectorBase.js +151 -0
  553. package/src/renderers/common/Lighting.js +5 -21
  554. package/src/renderers/common/Pipelines.js +41 -8
  555. package/src/renderers/common/PostProcessing.js +9 -226
  556. package/src/renderers/common/QuadMesh.js +7 -1
  557. package/src/renderers/common/ReadbackBuffer.js +78 -0
  558. package/src/renderers/common/RenderBundle.js +3 -1
  559. package/src/renderers/common/RenderBundles.js +7 -3
  560. package/src/renderers/common/RenderContext.js +18 -2
  561. package/src/renderers/common/RenderContexts.js +33 -49
  562. package/src/renderers/common/RenderList.js +7 -3
  563. package/src/renderers/common/RenderLists.js +2 -1
  564. package/src/renderers/common/RenderObject.js +32 -6
  565. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  566. package/src/renderers/common/RenderObjects.js +22 -6
  567. package/src/renderers/common/RenderPipeline.js +232 -17
  568. package/src/renderers/common/Renderer.js +927 -335
  569. package/src/renderers/common/RendererUtils.js +9 -0
  570. package/src/renderers/common/SampledTexture.js +9 -1
  571. package/src/renderers/common/Sampler.js +52 -14
  572. package/src/renderers/common/StorageBuffer.js +13 -1
  573. package/src/renderers/common/StorageTexture.js +9 -1
  574. package/src/renderers/common/Textures.js +208 -47
  575. package/src/renderers/common/TimestampQueryPool.js +70 -6
  576. package/src/renderers/common/Uniform.js +8 -0
  577. package/src/renderers/common/UniformsGroup.js +64 -2
  578. package/src/renderers/common/XRManager.js +79 -51
  579. package/src/renderers/common/extras/PMREMGenerator.js +176 -79
  580. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  581. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  582. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
  583. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  584. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  585. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  586. package/src/renderers/shaders/DFGLUTData.js +49 -0
  587. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  588. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  589. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  590. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  591. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  592. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  593. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
  594. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  595. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  597. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  598. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  599. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  600. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  601. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  602. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
  603. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  604. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  605. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  606. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  607. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  608. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  609. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  610. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
  611. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  612. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  613. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  614. package/src/renderers/shaders/ShaderChunk.js +5 -3
  615. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  616. package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
  617. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  618. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  619. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  620. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  621. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  622. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  623. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  624. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  625. package/src/renderers/shaders/ShaderLib.js +7 -6
  626. package/src/renderers/shaders/UniformsLib.js +8 -5
  627. package/src/renderers/shaders/UniformsUtils.js +52 -9
  628. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  629. package/src/renderers/webgl/WebGLBackground.js +15 -15
  630. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  631. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  632. package/src/renderers/webgl/WebGLCapabilities.js +11 -5
  633. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  634. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  635. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  637. package/src/renderers/webgl/WebGLInfo.js +3 -1
  638. package/src/renderers/webgl/WebGLLights.js +18 -1
  639. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  640. package/src/renderers/webgl/WebGLObjects.js +3 -1
  641. package/src/renderers/webgl/WebGLOutput.js +270 -0
  642. package/src/renderers/webgl/WebGLProgram.js +63 -122
  643. package/src/renderers/webgl/WebGLPrograms.js +65 -52
  644. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  645. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  646. package/src/renderers/webgl/WebGLShadowMap.js +191 -26
  647. package/src/renderers/webgl/WebGLState.js +79 -40
  648. package/src/renderers/webgl/WebGLTextures.js +234 -68
  649. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  650. package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
  651. package/src/renderers/webgl/WebGLUtils.js +8 -3
  652. package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
  653. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  654. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
  655. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  656. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  657. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  658. package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
  659. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
  660. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
  661. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
  662. package/src/renderers/webgpu/WebGPUBackend.js +403 -253
  663. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  664. package/src/renderers/webgpu/WebGPURenderer.js +5 -3
  665. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
  666. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
  667. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
  668. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  669. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
  670. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
  671. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
  672. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
  673. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
  674. package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
  675. package/src/renderers/webxr/WebXRController.js +12 -0
  676. package/src/renderers/webxr/WebXRManager.js +45 -29
  677. package/src/textures/CubeDepthTexture.js +76 -0
  678. package/src/textures/ExternalTexture.js +15 -4
  679. package/src/textures/HTMLTexture.js +74 -0
  680. package/src/textures/Source.js +5 -4
  681. package/src/textures/Texture.js +19 -7
  682. package/src/textures/VideoTexture.js +2 -3
  683. package/src/utils.js +344 -3
  684. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  685. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  686. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  687. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  688. package/src/nodes/accessors/SceneNode.js +0 -144
  689. package/src/nodes/code/ScriptableNode.js +0 -726
  690. package/src/nodes/code/ScriptableValueNode.js +0 -253
  691. package/src/nodes/display/PosterizeNode.js +0 -65
  692. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  693. package/src/nodes/utils/RemapNode.js +0 -125
  694. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  695. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  696. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,4 +1,5 @@
1
1
  import { EventDispatcher } from '../core/EventDispatcher.js';
2
+ import { warn } from '../utils.js';
2
3
 
3
4
  /**
4
5
  * Abstract base class for controls.
@@ -12,7 +13,7 @@ class Controls extends EventDispatcher {
12
13
  * Constructs a new controls instance.
13
14
  *
14
15
  * @param {Object3D} object - The object that is managed by the controls.
15
- * @param {?HTMLDOMElement} domElement - The HTML element used for event listeners.
16
+ * @param {?HTMLElement} domElement - The HTML element used for event listeners.
16
17
  */
17
18
  constructor( object, domElement = null ) {
18
19
 
@@ -28,7 +29,7 @@ class Controls extends EventDispatcher {
28
29
  /**
29
30
  * The HTML element used for event listeners.
30
31
  *
31
- * @type {?HTMLDOMElement}
32
+ * @type {?HTMLElement}
32
33
  * @default null
33
34
  */
34
35
  this.domElement = domElement;
@@ -78,13 +79,13 @@ class Controls extends EventDispatcher {
78
79
  * Connects the controls to the DOM. This method has so called "side effects" since
79
80
  * it adds the module's event listeners to the DOM.
80
81
  *
81
- * @param {HTMLDOMElement} element - The DOM element to connect to.
82
+ * @param {HTMLElement} element - The DOM element to connect to.
82
83
  */
83
84
  connect( element ) {
84
85
 
85
86
  if ( element === undefined ) {
86
87
 
87
- console.warn( 'THREE.Controls: connect() now requires an element.' ); // @deprecated, the warning can be removed with r185
88
+ warn( 'Controls: connect() now requires an element.' ); // @deprecated, the warning can be removed with r185
88
89
  return;
89
90
 
90
91
  }
@@ -1,4 +1,5 @@
1
1
  import { clamp } from '../math/MathUtils.js';
2
+ import { warn } from '../utils.js';
2
3
 
3
4
  // Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf
4
5
 
@@ -148,7 +149,7 @@ function _generateTables() {
148
149
  */
149
150
  function toHalfFloat( val ) {
150
151
 
151
- if ( Math.abs( val ) > 65504 ) console.warn( 'THREE.DataUtils.toHalfFloat(): Value out of range.' );
152
+ if ( Math.abs( val ) > 65504 ) warn( 'DataUtils.toHalfFloat(): Value out of range.' );
152
153
 
153
154
  val = clamp( val, - 65504, 65504 );
154
155
 
@@ -1,5 +1,11 @@
1
1
  import earcut from './lib/earcut.js';
2
2
 
3
+ /**
4
+ * An implementation of the earcut polygon triangulation algorithm.
5
+ * The code is a port of [mapbox/earcut](https://github.com/mapbox/earcut).
6
+ *
7
+ * @see https://github.com/mapbox/earcut
8
+ */
3
9
  class Earcut {
4
10
 
5
11
  /**
@@ -1,4 +1,4 @@
1
- import { createElementNS } from '../utils.js';
1
+ import { createElementNS, warn } from '../utils.js';
2
2
  import { SRGBToLinear } from '../math/ColorManagement.js';
3
3
 
4
4
  let _canvas;
@@ -125,7 +125,7 @@ class ImageUtils {
125
125
 
126
126
  } else {
127
127
 
128
- console.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );
128
+ warn( 'ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );
129
129
  return image;
130
130
 
131
131
  }
@@ -22,19 +22,22 @@ import { Color } from '../math/Color.js';
22
22
  import { WebGLRenderTarget } from '../renderers/WebGLRenderTarget.js';
23
23
  import { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js';
24
24
  import { BoxGeometry } from '../geometries/BoxGeometry.js';
25
+ import { error, warn } from '../utils.js';
25
26
 
26
27
  const LOD_MIN = 4;
27
28
 
28
- // The standard deviations (radians) associated with the extra mips. These are
29
- // chosen to approximate a Trowbridge-Reitz distribution function times the
30
- // geometric shadowing function. These sigma values squared must match the
31
- // variance #defines in cube_uv_reflection_fragment.glsl.js.
29
+ // The standard deviations (radians) associated with the extra mips.
30
+ // Used for scene blur in fromScene() method.
32
31
  const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];
33
32
 
34
33
  // The maximum length of the blur for loop. Smaller sigmas will use fewer
35
34
  // samples and exit early, but not recompile the shader.
35
+ // Used for scene blur in fromScene() method.
36
36
  const MAX_SAMPLES = 20;
37
37
 
38
+ // GGX VNDF importance sampling configuration
39
+ const GGX_SAMPLES = 256;
40
+
38
41
  const _flatCamera = /*@__PURE__*/ new OrthographicCamera();
39
42
  const _clearColor = /*@__PURE__*/ new Color();
40
43
  let _oldTarget = null;
@@ -42,24 +45,6 @@ let _oldActiveCubeFace = 0;
42
45
  let _oldActiveMipmapLevel = 0;
43
46
  let _oldXrEnabled = false;
44
47
 
45
- // Golden Ratio
46
- const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
47
- const INV_PHI = 1 / PHI;
48
-
49
- // Vertices of a dodecahedron (except the opposites, which represent the
50
- // same axis), used as axis directions evenly spread on a sphere.
51
- const _axisDirections = [
52
- /*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),
53
- /*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),
54
- /*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
55
- /*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
56
- /*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
57
- /*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
58
- /*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
59
- /*@__PURE__*/ new Vector3( 1, 1, - 1 ),
60
- /*@__PURE__*/ new Vector3( - 1, 1, 1 ),
61
- /*@__PURE__*/ new Vector3( 1, 1, 1 ) ];
62
-
63
48
  const _origin = /*@__PURE__*/ new Vector3();
64
49
 
65
50
  /**
@@ -73,9 +58,11 @@ const _origin = /*@__PURE__*/ new Vector3();
73
58
  * higher roughness levels. In this way we maintain resolution to smoothly
74
59
  * interpolate diffuse lighting while limiting sampling computation.
75
60
  *
76
- * Paper: Fast, Accurate Image-Based Lighting:
77
- * {@link https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view}
78
- */
61
+ * The prefiltering uses GGX VNDF (Visible Normal Distribution Function)
62
+ * importance sampling based on "Sampling the GGX Distribution of Visible Normals"
63
+ * (Heitz, 2018) to generate environment maps that accurately match the GGX BRDF
64
+ * used in material rendering for physically-based image-based lighting.
65
+ */
79
66
  class PMREMGenerator {
80
67
 
81
68
  /**
@@ -90,15 +77,17 @@ class PMREMGenerator {
90
77
 
91
78
  this._lodMax = 0;
92
79
  this._cubeSize = 0;
93
- this._lodPlanes = [];
94
80
  this._sizeLods = [];
95
81
  this._sigmas = [];
82
+ this._lodMeshes = [];
83
+
84
+ this._backgroundBox = null;
96
85
 
97
- this._blurMaterial = null;
98
86
  this._cubemapMaterial = null;
99
87
  this._equirectMaterial = null;
100
88
 
101
- this._compileMaterial( this._blurMaterial );
89
+ this._blurMaterial = null;
90
+ this._ggxMaterial = null;
102
91
 
103
92
  }
104
93
 
@@ -114,7 +103,7 @@ class PMREMGenerator {
114
103
  * @param {number} [far=100] - The far plane distance.
115
104
  * @param {Object} [options={}] - The configuration options.
116
105
  * @param {number} [options.size=256] - The texture size of the PMREM.
117
- * @param {Vector3} [options.renderTarget=origin] - The position of the internal cube camera that renders the scene.
106
+ * @param {Vector3} [options.position=origin] - The position of the internal cube camera that renders the scene.
118
107
  * @return {WebGLRenderTarget} The resulting PMREM.
119
108
  */
120
109
  fromScene( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
@@ -223,6 +212,13 @@ class PMREMGenerator {
223
212
  if ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();
224
213
  if ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();
225
214
 
215
+ if ( this._backgroundBox !== null ) {
216
+
217
+ this._backgroundBox.geometry.dispose();
218
+ this._backgroundBox.material.dispose();
219
+
220
+ }
221
+
226
222
  }
227
223
 
228
224
  // private interface
@@ -237,12 +233,13 @@ class PMREMGenerator {
237
233
  _dispose() {
238
234
 
239
235
  if ( this._blurMaterial !== null ) this._blurMaterial.dispose();
236
+ if ( this._ggxMaterial !== null ) this._ggxMaterial.dispose();
240
237
 
241
238
  if ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();
242
239
 
243
- for ( let i = 0; i < this._lodPlanes.length; i ++ ) {
240
+ for ( let i = 0; i < this._lodMeshes.length; i ++ ) {
244
241
 
245
- this._lodPlanes[ i ].dispose();
242
+ this._lodMeshes[ i ].geometry.dispose();
246
243
 
247
244
  }
248
245
 
@@ -314,9 +311,10 @@ class PMREMGenerator {
314
311
  this._pingPongRenderTarget = _createRenderTarget( width, height, params );
315
312
 
316
313
  const { _lodMax } = this;
317
- ( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
314
+ ( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
318
315
 
319
316
  this._blurMaterial = _getBlurShader( _lodMax, width, height );
317
+ this._ggxMaterial = _getGGXShader( _lodMax, width, height );
320
318
 
321
319
  }
322
320
 
@@ -326,8 +324,8 @@ class PMREMGenerator {
326
324
 
327
325
  _compileMaterial( material ) {
328
326
 
329
- const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );
330
- this._renderer.compile( tmpMesh, _flatCamera );
327
+ const mesh = new Mesh( new BufferGeometry(), material );
328
+ this._renderer.compile( mesh, _flatCamera );
331
329
 
332
330
  }
333
331
 
@@ -358,16 +356,25 @@ class PMREMGenerator {
358
356
 
359
357
  }
360
358
 
361
- const backgroundMaterial = new MeshBasicMaterial( {
362
- name: 'PMREM.Background',
363
- side: BackSide,
364
- depthWrite: false,
365
- depthTest: false,
366
- } );
359
+ if ( this._backgroundBox === null ) {
367
360
 
368
- const backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );
361
+ this._backgroundBox = new Mesh(
362
+ new BoxGeometry(),
363
+ new MeshBasicMaterial( {
364
+ name: 'PMREM.Background',
365
+ side: BackSide,
366
+ depthWrite: false,
367
+ depthTest: false,
368
+ } )
369
+ );
370
+
371
+ }
372
+
373
+ const backgroundBox = this._backgroundBox;
374
+ const backgroundMaterial = backgroundBox.material;
369
375
 
370
376
  let useSolidColor = false;
377
+
371
378
  const background = scene.background;
372
379
 
373
380
  if ( background ) {
@@ -428,9 +435,6 @@ class PMREMGenerator {
428
435
 
429
436
  }
430
437
 
431
- backgroundBox.geometry.dispose();
432
- backgroundBox.material.dispose();
433
-
434
438
  renderer.toneMapping = toneMapping;
435
439
  renderer.autoClear = originalAutoClear;
436
440
  scene.background = background;
@@ -464,7 +468,9 @@ class PMREMGenerator {
464
468
  }
465
469
 
466
470
  const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;
467
- const mesh = new Mesh( this._lodPlanes[ 0 ], material );
471
+
472
+ const mesh = this._lodMeshes[ 0 ];
473
+ mesh.material = material;
468
474
 
469
475
  const uniforms = material.uniforms;
470
476
 
@@ -484,15 +490,13 @@ class PMREMGenerator {
484
490
  const renderer = this._renderer;
485
491
  const autoClear = renderer.autoClear;
486
492
  renderer.autoClear = false;
487
- const n = this._lodPlanes.length;
488
-
489
- for ( let i = 1; i < n; i ++ ) {
490
493
 
491
- const sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );
494
+ const n = this._lodMeshes.length;
492
495
 
493
- const poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];
496
+ // Use GGX VNDF importance sampling
497
+ for ( let i = 1; i < n; i ++ ) {
494
498
 
495
- this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );
499
+ this._applyGGXFilter( cubeUVRenderTarget, i - 1, i );
496
500
 
497
501
  }
498
502
 
@@ -500,6 +504,63 @@ class PMREMGenerator {
500
504
 
501
505
  }
502
506
 
507
+ /**
508
+ * Applies GGX VNDF importance sampling filter to generate a prefiltered environment map.
509
+ * Uses Monte Carlo integration with VNDF importance sampling to accurately represent the
510
+ * GGX BRDF for physically-based rendering. Reads from the previous LOD level and
511
+ * applies incremental roughness filtering to avoid over-blurring.
512
+ *
513
+ * @private
514
+ * @param {WebGLRenderTarget} cubeUVRenderTarget
515
+ * @param {number} lodIn - Source LOD level to read from
516
+ * @param {number} lodOut - Target LOD level to write to
517
+ */
518
+ _applyGGXFilter( cubeUVRenderTarget, lodIn, lodOut ) {
519
+
520
+ const renderer = this._renderer;
521
+ const pingPongRenderTarget = this._pingPongRenderTarget;
522
+
523
+ const ggxMaterial = this._ggxMaterial;
524
+ const ggxMesh = this._lodMeshes[ lodOut ];
525
+ ggxMesh.material = ggxMaterial;
526
+
527
+ const ggxUniforms = ggxMaterial.uniforms;
528
+
529
+ // Calculate incremental roughness between LOD levels
530
+ const targetRoughness = lodOut / ( this._lodMeshes.length - 1 );
531
+ const sourceRoughness = lodIn / ( this._lodMeshes.length - 1 );
532
+ const incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );
533
+
534
+ // Apply blur strength mapping for better quality across the roughness range
535
+ const blurStrength = 0.0 + targetRoughness * 1.25;
536
+ const adjustedRoughness = incrementalRoughness * blurStrength;
537
+
538
+ // Calculate viewport position based on output LOD level
539
+ const { _lodMax } = this;
540
+ const outputSize = this._sizeLods[ lodOut ];
541
+ const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
542
+ const y = 4 * ( this._cubeSize - outputSize );
543
+
544
+ // Read from previous LOD with incremental roughness
545
+ ggxUniforms[ 'envMap' ].value = cubeUVRenderTarget.texture;
546
+ ggxUniforms[ 'roughness' ].value = adjustedRoughness;
547
+ ggxUniforms[ 'mipInt' ].value = _lodMax - lodIn; // Sample from input LOD
548
+
549
+ _setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
550
+ renderer.setRenderTarget( pingPongRenderTarget );
551
+ renderer.render( ggxMesh, _flatCamera );
552
+
553
+ // Copy from pingPong back to cubeUV (simple direct copy)
554
+ ggxUniforms[ 'envMap' ].value = pingPongRenderTarget.texture;
555
+ ggxUniforms[ 'roughness' ].value = 0.0; // Direct copy
556
+ ggxUniforms[ 'mipInt' ].value = _lodMax - lodOut; // Read from the level we just wrote
557
+
558
+ _setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
559
+ renderer.setRenderTarget( cubeUVRenderTarget );
560
+ renderer.render( ggxMesh, _flatCamera );
561
+
562
+ }
563
+
503
564
  /**
504
565
  * This is a two-pass Gaussian blur for a cubemap. Normally this is done
505
566
  * vertically and horizontally, but this breaks down on a cube. Here we apply
@@ -507,6 +568,8 @@ class PMREMGenerator {
507
568
  * the poles) to approximate the orthogonally-separable blur. It is least
508
569
  * accurate at the poles, but still does a decent job.
509
570
  *
571
+ * Used for initial scene blur in fromScene() method when sigma > 0.
572
+ *
510
573
  * @private
511
574
  * @param {WebGLRenderTarget} cubeUVRenderTarget
512
575
  * @param {number} lodIn
@@ -545,7 +608,7 @@ class PMREMGenerator {
545
608
 
546
609
  if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {
547
610
 
548
- console.error(
611
+ error(
549
612
  'blur direction must be either latitudinal or longitudinal!' );
550
613
 
551
614
  }
@@ -553,7 +616,9 @@ class PMREMGenerator {
553
616
  // Number of standard deviations at which to cut off the discrete approximation.
554
617
  const STANDARD_DEVIATIONS = 3;
555
618
 
556
- const blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );
619
+ const blurMesh = this._lodMeshes[ lodOut ];
620
+ blurMesh.material = blurMaterial;
621
+
557
622
  const blurUniforms = blurMaterial.uniforms;
558
623
 
559
624
  const pixels = this._sizeLods[ lodIn ] - 1;
@@ -563,7 +628,7 @@ class PMREMGenerator {
563
628
 
564
629
  if ( samples > MAX_SAMPLES ) {
565
630
 
566
- console.warn( `sigmaRadians, ${
631
+ warn( `sigmaRadians, ${
567
632
  sigmaRadians}, is too large and will clip, as it requested ${
568
633
  samples} samples when the maximum is set to ${MAX_SAMPLES}` );
569
634
 
@@ -627,9 +692,9 @@ class PMREMGenerator {
627
692
 
628
693
  function _createPlanes( lodMax ) {
629
694
 
630
- const lodPlanes = [];
631
695
  const sizeLods = [];
632
696
  const sigmas = [];
697
+ const lodMeshes = [];
633
698
 
634
699
  let lod = lodMax;
635
700
 
@@ -691,7 +756,7 @@ function _createPlanes( lodMax ) {
691
756
  planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );
692
757
  planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
693
758
  planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
694
- lodPlanes.push( planes );
759
+ lodMeshes.push( new Mesh( planes, null ) );
695
760
 
696
761
  if ( lod > LOD_MIN ) {
697
762
 
@@ -701,7 +766,7 @@ function _createPlanes( lodMax ) {
701
766
 
702
767
  }
703
768
 
704
- return { lodPlanes, sizeLods, sigmas };
769
+ return { lodMeshes, sizeLods, sigmas };
705
770
 
706
771
  }
707
772
 
@@ -722,6 +787,143 @@ function _setViewport( target, x, y, width, height ) {
722
787
 
723
788
  }
724
789
 
790
+ function _getGGXShader( lodMax, width, height ) {
791
+
792
+ const shaderMaterial = new ShaderMaterial( {
793
+
794
+ name: 'PMREMGGXConvolution',
795
+
796
+ defines: {
797
+ 'GGX_SAMPLES': GGX_SAMPLES,
798
+ 'CUBEUV_TEXEL_WIDTH': 1.0 / width,
799
+ 'CUBEUV_TEXEL_HEIGHT': 1.0 / height,
800
+ 'CUBEUV_MAX_MIP': `${lodMax}.0`,
801
+ },
802
+
803
+ uniforms: {
804
+ 'envMap': { value: null },
805
+ 'roughness': { value: 0.0 },
806
+ 'mipInt': { value: 0 }
807
+ },
808
+
809
+ vertexShader: _getCommonVertexShader(),
810
+
811
+ fragmentShader: /* glsl */`
812
+
813
+ precision highp float;
814
+ precision highp int;
815
+
816
+ varying vec3 vOutputDirection;
817
+
818
+ uniform sampler2D envMap;
819
+ uniform float roughness;
820
+ uniform float mipInt;
821
+
822
+ #define ENVMAP_TYPE_CUBE_UV
823
+ #include <cube_uv_reflection_fragment>
824
+
825
+ #define PI 3.14159265359
826
+
827
+ // Van der Corput radical inverse
828
+ float radicalInverse_VdC(uint bits) {
829
+ bits = (bits << 16u) | (bits >> 16u);
830
+ bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
831
+ bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
832
+ bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
833
+ bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
834
+ return float(bits) * 2.3283064365386963e-10; // / 0x100000000
835
+ }
836
+
837
+ // Hammersley sequence
838
+ vec2 hammersley(uint i, uint N) {
839
+ return vec2(float(i) / float(N), radicalInverse_VdC(i));
840
+ }
841
+
842
+ // GGX VNDF importance sampling (Eric Heitz 2018)
843
+ // "Sampling the GGX Distribution of Visible Normals"
844
+ // https://jcgt.org/published/0007/04/01/
845
+ vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {
846
+ float alpha = roughness * roughness;
847
+
848
+ // Section 4.1: Orthonormal basis
849
+ vec3 T1 = vec3(1.0, 0.0, 0.0);
850
+ vec3 T2 = cross(V, T1);
851
+
852
+ // Section 4.2: Parameterization of projected area
853
+ float r = sqrt(Xi.x);
854
+ float phi = 2.0 * PI * Xi.y;
855
+ float t1 = r * cos(phi);
856
+ float t2 = r * sin(phi);
857
+ float s = 0.5 * (1.0 + V.z);
858
+ t2 = (1.0 - s) * sqrt(1.0 - t1 * t1) + s * t2;
859
+
860
+ // Section 4.3: Reprojection onto hemisphere
861
+ vec3 Nh = t1 * T1 + t2 * T2 + sqrt(max(0.0, 1.0 - t1 * t1 - t2 * t2)) * V;
862
+
863
+ // Section 3.4: Transform back to ellipsoid configuration
864
+ return normalize(vec3(alpha * Nh.x, alpha * Nh.y, max(0.0, Nh.z)));
865
+ }
866
+
867
+ void main() {
868
+ vec3 N = normalize(vOutputDirection);
869
+ vec3 V = N; // Assume view direction equals normal for pre-filtering
870
+
871
+ vec3 prefilteredColor = vec3(0.0);
872
+ float totalWeight = 0.0;
873
+
874
+ // For very low roughness, just sample the environment directly
875
+ if (roughness < 0.001) {
876
+ gl_FragColor = vec4(bilinearCubeUV(envMap, N, mipInt), 1.0);
877
+ return;
878
+ }
879
+
880
+ // Tangent space basis for VNDF sampling
881
+ vec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
882
+ vec3 tangent = normalize(cross(up, N));
883
+ vec3 bitangent = cross(N, tangent);
884
+
885
+ for(uint i = 0u; i < uint(GGX_SAMPLES); i++) {
886
+ vec2 Xi = hammersley(i, uint(GGX_SAMPLES));
887
+
888
+ // For PMREM, V = N, so in tangent space V is always (0, 0, 1)
889
+ vec3 H_tangent = importanceSampleGGX_VNDF(Xi, vec3(0.0, 0.0, 1.0), roughness);
890
+
891
+ // Transform H back to world space
892
+ vec3 H = normalize(tangent * H_tangent.x + bitangent * H_tangent.y + N * H_tangent.z);
893
+ vec3 L = normalize(2.0 * dot(V, H) * H - V);
894
+
895
+ float NdotL = max(dot(N, L), 0.0);
896
+
897
+ if(NdotL > 0.0) {
898
+ // Sample environment at fixed mip level
899
+ // VNDF importance sampling handles the distribution filtering
900
+ vec3 sampleColor = bilinearCubeUV(envMap, L, mipInt);
901
+
902
+ // Weight by NdotL for the split-sum approximation
903
+ // VNDF PDF naturally accounts for the visible microfacet distribution
904
+ prefilteredColor += sampleColor * NdotL;
905
+ totalWeight += NdotL;
906
+ }
907
+ }
908
+
909
+ if (totalWeight > 0.0) {
910
+ prefilteredColor = prefilteredColor / totalWeight;
911
+ }
912
+
913
+ gl_FragColor = vec4(prefilteredColor, 1.0);
914
+ }
915
+ `,
916
+
917
+ blending: NoBlending,
918
+ depthTest: false,
919
+ depthWrite: false
920
+
921
+ } );
922
+
923
+ return shaderMaterial;
924
+
925
+ }
926
+
725
927
  function _getBlurShader( lodMax, width, height ) {
726
928
 
727
929
  const weights = new Float32Array( MAX_SAMPLES );
@@ -1,4 +1,4 @@
1
- import { AlphaFormat, RedFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBFormat, RGBAFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, UnsignedByteType, ByteType, UnsignedShortType, ShortType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedIntType, IntType, FloatType, UnsignedInt5999Type } from '../constants.js';
1
+ import { AlphaFormat, RedFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBFormat, RGBAFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, UnsignedByteType, ByteType, UnsignedShortType, ShortType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedIntType, IntType, FloatType, UnsignedInt5999Type, UnsignedInt101111Type } from '../constants.js';
2
2
 
3
3
  /**
4
4
  * Scales the texture as large as possible within its surface without cropping
@@ -140,8 +140,12 @@ function getByteLength( width, height, format, type ) {
140
140
  // https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_etc/
141
141
  case RGB_ETC1_Format:
142
142
  case RGB_ETC2_Format:
143
+ case R11_EAC_Format:
144
+ case SIGNED_R11_EAC_Format:
143
145
  return Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;
144
146
  case RGBA_ETC2_EAC_Format:
147
+ case RG11_EAC_Format:
148
+ case SIGNED_RG11_EAC_Format:
145
149
  return Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;
146
150
 
147
151
  // https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_astc/
@@ -215,6 +219,7 @@ function getTextureTypeByteLength( type ) {
215
219
  case FloatType:
216
220
  return { byteLength: 4, components: 1 };
217
221
  case UnsignedInt5999Type:
222
+ case UnsignedInt101111Type:
218
223
  return { byteLength: 4, components: 3 };
219
224
 
220
225
  }
@@ -2,6 +2,7 @@ import { clamp } from '../../math/MathUtils.js';
2
2
  import { Vector2 } from '../../math/Vector2.js';
3
3
  import { Vector3 } from '../../math/Vector3.js';
4
4
  import { Matrix4 } from '../../math/Matrix4.js';
5
+ import { warn } from '../../utils.js';
5
6
 
6
7
  /**
7
8
  * An abstract base class for creating an analytic curve object that contains methods
@@ -66,7 +67,7 @@ class Curve {
66
67
  */
67
68
  getPoint( /* t, optionalTarget */ ) {
68
69
 
69
- console.warn( 'THREE.Curve: .getPoint() not implemented.' );
70
+ warn( 'Curve: .getPoint() not implemented.' );
70
71
 
71
72
  }
72
73
 
@@ -1,4 +1,10 @@
1
- // Bezier Curves formulas obtained from: https://en.wikipedia.org/wiki/B%C3%A9zier_curve
1
+ /**
2
+ * Interpolations contains spline and Bézier functions internally used by concrete curve classes.
3
+ *
4
+ * Bezier Curves formulas obtained from: https://en.wikipedia.org/wiki/B%C3%A9zier_curve
5
+ *
6
+ * @module Interpolations
7
+ */
2
8
 
3
9
  /**
4
10
  * Computes a point on a Catmull-Rom spline.
@@ -236,7 +236,7 @@ class ShapePath {
236
236
  let holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );
237
237
  holesFirst = isCCW ? ! holesFirst : holesFirst;
238
238
 
239
- // console.log("Holes first", holesFirst);
239
+ // log("Holes first", holesFirst);
240
240
 
241
241
  const betterShapeHoles = [];
242
242
  const newShapes = [];
@@ -264,13 +264,13 @@ class ShapePath {
264
264
  if ( holesFirst ) mainIdx ++;
265
265
  newShapeHoles[ mainIdx ] = [];
266
266
 
267
- //console.log('cw', i);
267
+ //log('cw', i);
268
268
 
269
269
  } else {
270
270
 
271
271
  newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );
272
272
 
273
- //console.log('ccw', i);
273
+ //log('ccw', i);
274
274
 
275
275
  }
276
276
 
@@ -355,7 +355,7 @@ class ShapePath {
355
355
 
356
356
  }
357
357
 
358
- //console.log("shape", shapes);
358
+ //log("shape", shapes);
359
359
 
360
360
  return shapes;
361
361
 
@@ -78,6 +78,7 @@ function CubicPoly() {
78
78
  //
79
79
 
80
80
  const tmp = /*@__PURE__*/ new Vector3();
81
+ const tmp2 = /*@__PURE__*/ new Vector3();
81
82
  const px = /*@__PURE__*/ new CubicPoly();
82
83
  const py = /*@__PURE__*/ new CubicPoly();
83
84
  const pz = /*@__PURE__*/ new CubicPoly();
@@ -202,8 +203,8 @@ class CatmullRomCurve3 extends Curve {
202
203
  } else {
203
204
 
204
205
  // extrapolate first point
205
- tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );
206
- p0 = tmp;
206
+ tmp2.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );
207
+ p0 = tmp2;
207
208
 
208
209
  }
209
210