@needle-tools/three 0.169.20 → 0.183.2-canary.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 (1051) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -6
  3. package/build/three.cjs +54178 -56709
  4. package/build/three.core.js +59506 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +11645 -73012
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +648 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +53905 -51657
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +53884 -51814
  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 +5 -15
  17. package/examples/jsm/animation/AnimationClipCreator.js +58 -6
  18. package/examples/jsm/animation/CCDIKSolver.js +152 -45
  19. package/examples/jsm/capabilities/WebGL.js +28 -29
  20. package/examples/jsm/capabilities/WebGPU.js +19 -17
  21. package/examples/jsm/controls/ArcballControls.js +474 -178
  22. package/examples/jsm/controls/DragControls.js +100 -58
  23. package/examples/jsm/controls/FirstPersonControls.js +116 -6
  24. package/examples/jsm/controls/FlyControls.js +50 -2
  25. package/examples/jsm/controls/MapControls.js +96 -8
  26. package/examples/jsm/controls/OrbitControls.js +496 -57
  27. package/examples/jsm/controls/PointerLockControls.js +115 -22
  28. package/examples/jsm/controls/TrackballControls.js +166 -14
  29. package/examples/jsm/controls/TransformControls.js +336 -26
  30. package/examples/jsm/csm/CSM.js +232 -18
  31. package/examples/jsm/csm/CSMFrustum.js +61 -4
  32. package/examples/jsm/csm/CSMHelper.js +50 -0
  33. package/examples/jsm/csm/CSMShader.js +13 -1
  34. package/examples/jsm/csm/CSMShadowNode.js +599 -0
  35. package/examples/jsm/curves/CurveExtras.js +303 -31
  36. package/examples/jsm/curves/NURBSCurve.js +91 -16
  37. package/examples/jsm/curves/NURBSSurface.js +52 -6
  38. package/examples/jsm/curves/NURBSUtils.js +102 -112
  39. package/examples/jsm/curves/NURBSVolume.js +24 -4
  40. package/examples/jsm/effects/AnaglyphEffect.js +134 -7
  41. package/examples/jsm/effects/AsciiEffect.js +69 -22
  42. package/examples/jsm/effects/OutlineEffect.js +61 -111
  43. package/examples/jsm/effects/ParallaxBarrierEffect.js +30 -0
  44. package/examples/jsm/effects/StereoEffect.js +31 -0
  45. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  46. package/examples/jsm/environments/DebugEnvironment.js +50 -0
  47. package/examples/jsm/environments/RoomEnvironment.js +83 -42
  48. package/examples/jsm/exporters/DRACOExporter.js +56 -14
  49. package/examples/jsm/exporters/EXRExporter.js +40 -9
  50. package/examples/jsm/exporters/GLTFExporter.js +502 -169
  51. package/examples/jsm/exporters/OBJExporter.js +21 -1
  52. package/examples/jsm/exporters/PLYExporter.js +44 -12
  53. package/examples/jsm/exporters/STLExporter.js +27 -5
  54. package/examples/jsm/exporters/USDZExporter.js +781 -291
  55. package/examples/jsm/geometries/BoxLineGeometry.js +23 -0
  56. package/examples/jsm/geometries/ConvexGeometry.js +19 -0
  57. package/examples/jsm/geometries/DecalGeometry.js +91 -30
  58. package/examples/jsm/geometries/ParametricFunctions.js +100 -0
  59. package/examples/jsm/geometries/ParametricGeometry.js +38 -5
  60. package/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
  61. package/examples/jsm/geometries/TeapotGeometry.js +23 -38
  62. package/examples/jsm/geometries/TextGeometry.js +48 -29
  63. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  64. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  65. package/examples/jsm/helpers/LightProbeHelper.js +36 -0
  66. package/examples/jsm/helpers/LightProbeHelperGPU.js +38 -1
  67. package/examples/jsm/helpers/OctreeHelper.js +36 -0
  68. package/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
  69. package/examples/jsm/helpers/RapierHelper.js +59 -0
  70. package/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
  71. package/examples/jsm/helpers/TextureHelper.js +28 -0
  72. package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
  73. package/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
  74. package/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
  75. package/examples/jsm/helpers/ViewHelper.js +181 -9
  76. package/examples/jsm/inspector/Inspector.js +487 -0
  77. package/examples/jsm/inspector/RendererInspector.js +425 -0
  78. package/examples/jsm/inspector/tabs/Console.js +238 -0
  79. package/examples/jsm/inspector/tabs/Parameters.js +348 -0
  80. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  81. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  82. package/examples/jsm/inspector/ui/Graph.js +95 -0
  83. package/examples/jsm/inspector/ui/Item.js +170 -0
  84. package/examples/jsm/inspector/ui/List.js +75 -0
  85. package/examples/jsm/inspector/ui/Profiler.js +1975 -0
  86. package/examples/jsm/inspector/ui/Style.js +1613 -0
  87. package/examples/jsm/inspector/ui/Tab.js +233 -0
  88. package/examples/jsm/inspector/ui/Values.js +439 -0
  89. package/examples/jsm/inspector/ui/utils.js +56 -0
  90. package/examples/jsm/interactive/HTMLMesh.js +43 -12
  91. package/examples/jsm/interactive/InteractiveGroup.js +170 -52
  92. package/examples/jsm/interactive/SelectionBox.js +106 -9
  93. package/examples/jsm/interactive/SelectionHelper.js +76 -30
  94. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  95. package/examples/jsm/libs/meshopt_decoder.module.js +76 -58
  96. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  97. package/examples/jsm/lighting/TiledLighting.js +42 -0
  98. package/examples/jsm/lights/LightProbeGenerator.js +44 -7
  99. package/examples/jsm/lights/RectAreaLightTexturesLib.js +50 -14
  100. package/examples/jsm/lights/RectAreaLightUniformsLib.js +16 -0
  101. package/examples/jsm/lines/Line2.js +41 -4
  102. package/examples/jsm/lines/LineGeometry.js +80 -2
  103. package/examples/jsm/lines/LineMaterial.js +105 -5
  104. package/examples/jsm/lines/LineSegments2.js +54 -4
  105. package/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
  106. package/examples/jsm/lines/Wireframe.js +41 -4
  107. package/examples/jsm/lines/WireframeGeometry2.js +27 -2
  108. package/examples/jsm/lines/webgpu/Line2.js +28 -2
  109. package/examples/jsm/lines/webgpu/LineSegments2.js +59 -24
  110. package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
  111. package/examples/jsm/loaders/3DMLoader.js +78 -6
  112. package/examples/jsm/loaders/3MFLoader.js +148 -7
  113. package/examples/jsm/loaders/AMFLoader.js +34 -14
  114. package/examples/jsm/loaders/BVHLoader.js +59 -12
  115. package/examples/jsm/loaders/ColladaLoader.js +61 -4027
  116. package/examples/jsm/loaders/DDSLoader.js +68 -1
  117. package/examples/jsm/loaders/DRACOLoader.js +146 -22
  118. package/examples/jsm/loaders/EXRLoader.js +255 -34
  119. package/examples/jsm/loaders/FBXLoader.js +80 -42
  120. package/examples/jsm/loaders/FontLoader.js +83 -6
  121. package/examples/jsm/loaders/GCodeLoader.js +71 -14
  122. package/examples/jsm/loaders/GLTFLoader.js +381 -263
  123. package/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
  124. package/examples/jsm/loaders/HDRLoader.js +485 -0
  125. package/examples/jsm/loaders/IESLoader.js +42 -0
  126. package/examples/jsm/loaders/KMZLoader.js +39 -6
  127. package/examples/jsm/loaders/KTX2Loader.js +124 -48
  128. package/examples/jsm/loaders/KTXLoader.js +31 -10
  129. package/examples/jsm/loaders/LDrawLoader.js +192 -145
  130. package/examples/jsm/loaders/LUT3dlLoader.js +47 -10
  131. package/examples/jsm/loaders/LUTCubeLoader.js +46 -9
  132. package/examples/jsm/loaders/LUTImageLoader.js +79 -38
  133. package/examples/jsm/loaders/LWOLoader.js +54 -59
  134. package/examples/jsm/loaders/LottieLoader.js +54 -1
  135. package/examples/jsm/loaders/MD2Loader.js +37 -1
  136. package/examples/jsm/loaders/MDDLoader.js +57 -12
  137. package/examples/jsm/loaders/MTLLoader.js +60 -35
  138. package/examples/jsm/loaders/MaterialXLoader.js +268 -34
  139. package/examples/jsm/loaders/NRRDLoader.js +40 -8
  140. package/examples/jsm/loaders/OBJLoader.js +51 -2
  141. package/examples/jsm/loaders/PCDLoader.js +173 -21
  142. package/examples/jsm/loaders/PDBLoader.js +41 -2
  143. package/examples/jsm/loaders/PLYLoader.js +70 -39
  144. package/examples/jsm/loaders/PVRLoader.js +25 -6
  145. package/examples/jsm/loaders/RGBELoader.js +6 -438
  146. package/examples/jsm/loaders/STLLoader.js +48 -38
  147. package/examples/jsm/loaders/SVGLoader.js +119 -25
  148. package/examples/jsm/loaders/TDSLoader.js +92 -74
  149. package/examples/jsm/loaders/TGALoader.js +23 -2
  150. package/examples/jsm/loaders/TIFFLoader.js +23 -0
  151. package/examples/jsm/loaders/TTFLoader.js +50 -3
  152. package/examples/jsm/loaders/USDLoader.js +279 -0
  153. package/examples/jsm/loaders/USDZLoader.js +4 -858
  154. package/examples/jsm/loaders/UltraHDRLoader.js +338 -166
  155. package/examples/jsm/loaders/VOXLoader.js +688 -87
  156. package/examples/jsm/loaders/VRMLLoader.js +121 -12
  157. package/examples/jsm/loaders/VTKLoader.js +77 -25
  158. package/examples/jsm/loaders/XYZLoader.js +36 -0
  159. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  160. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  161. package/examples/jsm/loaders/lwo/IFFParser.js +77 -77
  162. package/examples/jsm/loaders/usd/USDAParser.js +822 -0
  163. package/examples/jsm/loaders/usd/USDCParser.js +1852 -0
  164. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  165. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
  166. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
  167. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  168. package/examples/jsm/math/Capsule.js +91 -14
  169. package/examples/jsm/math/ColorConverter.js +22 -0
  170. package/examples/jsm/math/ColorSpaces.js +74 -2
  171. package/examples/jsm/math/ConvexHull.js +517 -93
  172. package/examples/jsm/math/ImprovedNoise.js +32 -15
  173. package/examples/jsm/math/Lut.js +113 -0
  174. package/examples/jsm/math/MeshSurfaceSampler.js +78 -13
  175. package/examples/jsm/math/OBB.js +141 -29
  176. package/examples/jsm/math/Octree.js +283 -7
  177. package/examples/jsm/math/SimplexNoise.js +68 -42
  178. package/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
  179. package/examples/jsm/misc/GPUComputationRenderer.js +96 -20
  180. package/examples/jsm/misc/Gyroscope.js +12 -0
  181. package/examples/jsm/misc/MD2Character.js +117 -2
  182. package/examples/jsm/misc/MD2CharacterComplex.js +175 -11
  183. package/examples/jsm/misc/MorphAnimMesh.js +44 -0
  184. package/examples/jsm/misc/MorphBlendMesh.js +103 -0
  185. package/examples/jsm/misc/ProgressiveLightMap.js +100 -54
  186. package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
  187. package/examples/jsm/misc/RollerCoaster.js +57 -0
  188. package/examples/jsm/misc/TubePainter.js +437 -40
  189. package/examples/jsm/misc/Volume.js +123 -76
  190. package/examples/jsm/misc/VolumeSlice.js +95 -49
  191. package/examples/jsm/modifiers/CurveModifier.js +66 -38
  192. package/examples/jsm/modifiers/CurveModifierGPU.js +42 -19
  193. package/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
  194. package/examples/jsm/modifiers/SimplifyModifier.js +24 -10
  195. package/examples/jsm/modifiers/TessellateModifier.js +35 -2
  196. package/examples/jsm/objects/GroundedSkybox.js +25 -6
  197. package/examples/jsm/objects/Lensflare.js +94 -2
  198. package/examples/jsm/objects/LensflareMesh.js +64 -10
  199. package/examples/jsm/objects/MarchingCubes.js +90 -5
  200. package/examples/jsm/objects/Reflector.js +76 -2
  201. package/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
  202. package/examples/jsm/objects/Refractor.js +62 -0
  203. package/examples/jsm/objects/ShadowMesh.js +54 -4
  204. package/examples/jsm/objects/Sky.js +106 -16
  205. package/examples/jsm/objects/SkyMesh.js +211 -38
  206. package/examples/jsm/objects/Water.js +49 -8
  207. package/examples/jsm/objects/Water2.js +49 -7
  208. package/examples/jsm/objects/Water2Mesh.js +50 -9
  209. package/examples/jsm/objects/WaterMesh.js +136 -43
  210. package/examples/jsm/physics/AmmoPhysics.js +60 -7
  211. package/examples/jsm/physics/JoltPhysics.js +65 -12
  212. package/examples/jsm/physics/RapierPhysics.js +217 -21
  213. package/examples/jsm/postprocessing/AfterimagePass.js +110 -29
  214. package/examples/jsm/postprocessing/BloomPass.js +128 -26
  215. package/examples/jsm/postprocessing/BokehPass.js +99 -22
  216. package/examples/jsm/postprocessing/ClearPass.js +54 -3
  217. package/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
  218. package/examples/jsm/postprocessing/DotScreenPass.js +59 -10
  219. package/examples/jsm/postprocessing/EffectComposer.js +140 -6
  220. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  221. package/examples/jsm/postprocessing/FilmPass.js +54 -5
  222. package/examples/jsm/postprocessing/GTAOPass.js +202 -57
  223. package/examples/jsm/postprocessing/GlitchPass.js +86 -34
  224. package/examples/jsm/postprocessing/HalftonePass.js +65 -10
  225. package/examples/jsm/postprocessing/LUTPass.js +38 -8
  226. package/examples/jsm/postprocessing/MaskPass.js +91 -0
  227. package/examples/jsm/postprocessing/OutlinePass.js +272 -135
  228. package/examples/jsm/postprocessing/OutputPass.js +65 -14
  229. package/examples/jsm/postprocessing/Pass.js +100 -4
  230. package/examples/jsm/postprocessing/RenderPass.js +94 -0
  231. package/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
  232. package/examples/jsm/postprocessing/RenderTransitionPass.js +120 -21
  233. package/examples/jsm/postprocessing/SAOPass.js +128 -55
  234. package/examples/jsm/postprocessing/SMAAPass.js +106 -75
  235. package/examples/jsm/postprocessing/SSAARenderPass.js +118 -35
  236. package/examples/jsm/postprocessing/SSAOPass.js +173 -60
  237. package/examples/jsm/postprocessing/SSRPass.js +268 -53
  238. package/examples/jsm/postprocessing/SavePass.js +69 -16
  239. package/examples/jsm/postprocessing/ShaderPass.js +65 -7
  240. package/examples/jsm/postprocessing/TAARenderPass.js +79 -24
  241. package/examples/jsm/postprocessing/TexturePass.js +72 -8
  242. package/examples/jsm/postprocessing/UnrealBloomPass.js +168 -59
  243. package/examples/jsm/renderers/CSS2DRenderer.js +98 -5
  244. package/examples/jsm/renderers/CSS3DRenderer.js +111 -7
  245. package/examples/jsm/renderers/Projector.js +288 -32
  246. package/examples/jsm/renderers/SVGRenderer.js +323 -61
  247. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +3 -1
  248. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  249. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +5 -1
  250. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
  251. package/examples/jsm/shaders/AfterimageShader.js +8 -3
  252. package/examples/jsm/shaders/BasicShader.js +8 -1
  253. package/examples/jsm/shaders/BleachBypassShader.js +10 -3
  254. package/examples/jsm/shaders/BlendShader.js +8 -1
  255. package/examples/jsm/shaders/BokehShader.js +9 -3
  256. package/examples/jsm/shaders/BokehShader2.js +11 -4
  257. package/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
  258. package/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
  259. package/examples/jsm/shaders/ColorifyShader.js +8 -1
  260. package/examples/jsm/shaders/ConvolutionShader.js +9 -38
  261. package/examples/jsm/shaders/CopyShader.js +8 -1
  262. package/examples/jsm/shaders/DOFMipMapShader.js +10 -3
  263. package/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
  264. package/examples/jsm/shaders/DigitalGlitch.js +10 -7
  265. package/examples/jsm/shaders/DotScreenShader.js +8 -3
  266. package/examples/jsm/shaders/ExposureShader.js +8 -1
  267. package/examples/jsm/shaders/FXAAShader.js +233 -221
  268. package/examples/jsm/shaders/FilmShader.js +13 -0
  269. package/examples/jsm/shaders/FocusShader.js +8 -3
  270. package/examples/jsm/shaders/FreiChenShader.js +10 -3
  271. package/examples/jsm/shaders/GTAOShader.js +55 -45
  272. package/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
  273. package/examples/jsm/shaders/HalftoneShader.js +24 -4
  274. package/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
  275. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
  276. package/examples/jsm/shaders/HueSaturationShader.js +10 -3
  277. package/examples/jsm/shaders/KaleidoShader.js +11 -4
  278. package/examples/jsm/shaders/LuminosityHighPassShader.js +8 -4
  279. package/examples/jsm/shaders/LuminosityShader.js +8 -2
  280. package/examples/jsm/shaders/MirrorShader.js +10 -4
  281. package/examples/jsm/shaders/NormalMapShader.js +7 -2
  282. package/examples/jsm/shaders/OutputShader.js +19 -1
  283. package/examples/jsm/shaders/PoissonDenoiseShader.js +30 -17
  284. package/examples/jsm/shaders/RGBShiftShader.js +8 -1
  285. package/examples/jsm/shaders/SAOShader.js +27 -5
  286. package/examples/jsm/shaders/SMAAShader.js +24 -1
  287. package/examples/jsm/shaders/SSAOShader.js +37 -6
  288. package/examples/jsm/shaders/SSRShader.js +32 -6
  289. package/examples/jsm/shaders/SepiaShader.js +8 -3
  290. package/examples/jsm/shaders/SobelOperatorShader.js +9 -3
  291. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
  292. package/examples/jsm/shaders/TechnicolorShader.js +10 -4
  293. package/examples/jsm/shaders/ToonShader.js +29 -6
  294. package/examples/jsm/shaders/TriangleBlurShader.js +9 -4
  295. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -6
  296. package/examples/jsm/shaders/VelocityShader.js +8 -1
  297. package/examples/jsm/shaders/VerticalBlurShader.js +9 -2
  298. package/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
  299. package/examples/jsm/shaders/VignetteShader.js +8 -3
  300. package/examples/jsm/shaders/VolumeShader.js +11 -2
  301. package/examples/jsm/shaders/WaterRefractionShader.js +11 -0
  302. package/examples/jsm/textures/FlakesTexture.js +14 -0
  303. package/examples/jsm/transpiler/AST.js +436 -31
  304. package/examples/jsm/transpiler/GLSLDecoder.js +380 -135
  305. package/examples/jsm/transpiler/Linker.js +327 -0
  306. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -1
  307. package/examples/jsm/transpiler/TSLEncoder.js +363 -97
  308. package/examples/jsm/transpiler/Transpiler.js +50 -1
  309. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  310. package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
  311. package/examples/jsm/tsl/display/AfterImageNode.js +244 -0
  312. package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
  313. package/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
  314. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  315. package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +11 -4
  316. package/examples/jsm/tsl/display/BloomNode.js +534 -0
  317. package/examples/jsm/tsl/display/CRT.js +150 -0
  318. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  319. package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
  320. package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
  321. package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
  322. package/examples/jsm/tsl/display/FXAANode.js +365 -0
  323. package/examples/jsm/tsl/display/FilmNode.js +101 -0
  324. package/examples/jsm/tsl/display/GTAONode.js +571 -0
  325. package/examples/jsm/tsl/display/GaussianBlurNode.js +389 -0
  326. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  327. package/examples/jsm/tsl/display/LensflareNode.js +279 -0
  328. package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
  329. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  330. package/examples/jsm/tsl/display/OutlineNode.js +762 -0
  331. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
  332. package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
  333. package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
  334. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  335. package/examples/jsm/tsl/display/SMAANode.js +768 -0
  336. package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +120 -49
  337. package/examples/jsm/tsl/display/SSGINode.js +642 -0
  338. package/examples/jsm/tsl/display/SSRNode.js +656 -0
  339. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  340. package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +9 -2
  341. package/examples/jsm/tsl/display/Shape.js +29 -0
  342. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +61 -19
  343. package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
  344. package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +48 -12
  345. package/examples/jsm/tsl/display/TRAANode.js +726 -0
  346. package/examples/jsm/tsl/display/TransitionNode.js +141 -0
  347. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  348. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  349. package/examples/jsm/tsl/display/hashBlur.js +54 -0
  350. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  351. package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
  352. package/examples/jsm/tsl/math/Bayer.js +73 -0
  353. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  354. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  355. package/examples/jsm/tsl/utils/Raymarching.js +70 -0
  356. package/examples/jsm/utils/BufferGeometryUtils.js +91 -29
  357. package/examples/jsm/utils/CameraUtils.js +15 -6
  358. package/examples/jsm/utils/GeometryCompressionUtils.js +23 -30
  359. package/examples/jsm/utils/GeometryUtils.js +32 -27
  360. package/examples/jsm/utils/LDrawUtils.js +14 -5
  361. package/examples/jsm/utils/SceneOptimizer.js +458 -0
  362. package/examples/jsm/utils/SceneUtils.js +53 -3
  363. package/examples/jsm/utils/ShadowMapViewer.js +72 -33
  364. package/examples/jsm/utils/ShadowMapViewerGPU.js +61 -29
  365. package/examples/jsm/utils/SkeletonUtils.js +48 -0
  366. package/examples/jsm/utils/SortUtils.js +17 -5
  367. package/examples/jsm/utils/UVsDebug.js +12 -4
  368. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +16 -0
  369. package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +20 -2
  370. package/examples/jsm/utils/WorkerPool.js +67 -2
  371. package/examples/jsm/webxr/ARButton.js +19 -0
  372. package/examples/jsm/webxr/OculusHandModel.js +84 -0
  373. package/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
  374. package/examples/jsm/webxr/Text2D.js +20 -6
  375. package/examples/jsm/webxr/VRButton.js +31 -0
  376. package/examples/jsm/webxr/XRButton.js +23 -0
  377. package/examples/jsm/webxr/XRControllerModelFactory.js +94 -3
  378. package/examples/jsm/webxr/XREstimatedLight.js +35 -4
  379. package/examples/jsm/webxr/XRHandMeshModel.js +37 -0
  380. package/examples/jsm/webxr/XRHandModelFactory.js +96 -6
  381. package/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
  382. package/examples/jsm/webxr/XRPlanes.js +18 -0
  383. package/package.json +29 -34
  384. package/src/Three.Core.js +198 -0
  385. package/src/Three.Legacy.js +0 -21
  386. package/src/Three.TSL.js +641 -0
  387. package/src/Three.WebGPU.Nodes.js +14 -186
  388. package/src/Three.WebGPU.js +16 -186
  389. package/src/Three.js +2 -197
  390. package/src/animation/AnimationAction.js +263 -31
  391. package/src/animation/AnimationClip.js +162 -7
  392. package/src/animation/AnimationMixer.js +99 -15
  393. package/src/animation/AnimationObjectGroup.js +45 -21
  394. package/src/animation/AnimationUtils.js +163 -24
  395. package/src/animation/KeyframeTrack.js +191 -17
  396. package/src/animation/PropertyBinding.js +91 -16
  397. package/src/animation/PropertyMixer.js +72 -5
  398. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  399. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  400. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  401. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  402. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  403. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  404. package/src/audio/Audio.js +386 -8
  405. package/src/audio/AudioAnalyser.js +58 -1
  406. package/src/audio/AudioContext.js +15 -0
  407. package/src/audio/AudioListener.js +94 -13
  408. package/src/audio/PositionalAudio.js +107 -0
  409. package/src/cameras/ArrayCamera.js +37 -0
  410. package/src/cameras/Camera.js +61 -0
  411. package/src/cameras/CubeCamera.js +86 -0
  412. package/src/cameras/OrthographicCamera.js +110 -1
  413. package/src/cameras/PerspectiveCamera.js +174 -35
  414. package/src/cameras/StereoCamera.js +48 -2
  415. package/src/constants.js +1546 -11
  416. package/src/core/BufferAttribute.js +417 -3
  417. package/src/core/BufferGeometry.js +407 -22
  418. package/src/core/Clock.js +69 -8
  419. package/src/core/EventDispatcher.js +52 -8
  420. package/src/core/GLBufferAttribute.js +113 -2
  421. package/src/core/InstancedBufferAttribute.js +29 -0
  422. package/src/core/InstancedBufferGeometry.js +20 -0
  423. package/src/core/InstancedInterleavedBuffer.js +26 -0
  424. package/src/core/InterleavedBuffer.js +141 -7
  425. package/src/core/InterleavedBufferAttribute.js +200 -2
  426. package/src/core/Layers.js +71 -10
  427. package/src/core/Object3D.js +673 -26
  428. package/src/core/Raycaster.js +136 -2
  429. package/src/core/RenderTarget.js +256 -27
  430. package/src/core/RenderTarget3D.js +48 -0
  431. package/src/core/Timer.js +184 -0
  432. package/src/core/Uniform.js +29 -0
  433. package/src/core/UniformsGroup.js +84 -2
  434. package/src/extras/Controls.js +89 -1
  435. package/src/extras/DataUtils.js +50 -9
  436. package/src/extras/Earcut.js +18 -779
  437. package/src/extras/ImageUtils.js +22 -14
  438. package/src/extras/PMREMGenerator.js +316 -67
  439. package/src/extras/ShapeUtils.js +24 -2
  440. package/src/extras/TextureUtils.js +101 -15
  441. package/src/extras/core/Curve.js +156 -55
  442. package/src/extras/core/CurvePath.js +63 -22
  443. package/src/extras/core/Interpolations.js +34 -2
  444. package/src/extras/core/Path.js +134 -1
  445. package/src/extras/core/Shape.js +66 -3
  446. package/src/extras/core/ShapePath.js +80 -4
  447. package/src/extras/curves/ArcCurve.js +22 -0
  448. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  449. package/src/extras/curves/CubicBezierCurve.js +67 -0
  450. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  451. package/src/extras/curves/EllipseCurve.js +102 -0
  452. package/src/extras/curves/LineCurve.js +36 -0
  453. package/src/extras/curves/LineCurve3.js +36 -0
  454. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  455. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  456. package/src/extras/curves/SplineCurve.js +48 -0
  457. package/src/extras/lib/earcut.js +685 -0
  458. package/src/geometries/BoxGeometry.js +39 -0
  459. package/src/geometries/CapsuleGeometry.js +196 -11
  460. package/src/geometries/CircleGeometry.js +41 -0
  461. package/src/geometries/ConeGeometry.js +39 -0
  462. package/src/geometries/CylinderGeometry.js +42 -2
  463. package/src/geometries/DodecahedronGeometry.js +33 -0
  464. package/src/geometries/EdgesGeometry.js +30 -2
  465. package/src/geometries/ExtrudeGeometry.js +148 -52
  466. package/src/geometries/IcosahedronGeometry.js +33 -0
  467. package/src/geometries/LatheGeometry.js +44 -3
  468. package/src/geometries/OctahedronGeometry.js +33 -0
  469. package/src/geometries/PlaneGeometry.js +35 -0
  470. package/src/geometries/PolyhedronGeometry.js +30 -1
  471. package/src/geometries/RingGeometry.js +37 -0
  472. package/src/geometries/ShapeGeometry.js +38 -0
  473. package/src/geometries/SphereGeometry.js +38 -0
  474. package/src/geometries/TetrahedronGeometry.js +33 -0
  475. package/src/geometries/TorusGeometry.js +44 -3
  476. package/src/geometries/TorusKnotGeometry.js +39 -0
  477. package/src/geometries/TubeGeometry.js +50 -0
  478. package/src/geometries/WireframeGeometry.js +32 -0
  479. package/src/helpers/ArrowHelper.js +62 -5
  480. package/src/helpers/AxesHelper.js +28 -0
  481. package/src/helpers/Box3Helper.js +28 -0
  482. package/src/helpers/BoxHelper.js +43 -7
  483. package/src/helpers/CameraHelper.js +103 -27
  484. package/src/helpers/DirectionalLightHelper.js +55 -0
  485. package/src/helpers/GridHelper.js +26 -0
  486. package/src/helpers/HemisphereLightHelper.js +42 -0
  487. package/src/helpers/PlaneHelper.js +33 -0
  488. package/src/helpers/PointLightHelper.js +43 -24
  489. package/src/helpers/PolarGridHelper.js +30 -0
  490. package/src/helpers/SkeletonHelper.js +73 -7
  491. package/src/helpers/SpotLightHelper.js +43 -0
  492. package/src/lights/AmbientLight.js +25 -0
  493. package/src/lights/DirectionalLight.js +70 -0
  494. package/src/lights/DirectionalLightShadow.js +15 -0
  495. package/src/lights/HemisphereLight.js +42 -0
  496. package/src/lights/Light.js +37 -11
  497. package/src/lights/LightProbe.js +37 -9
  498. package/src/lights/LightShadow.js +202 -7
  499. package/src/lights/PointLight.js +74 -0
  500. package/src/lights/PointLightShadow.js +15 -80
  501. package/src/lights/RectAreaLight.js +59 -0
  502. package/src/lights/SpotLight.js +124 -1
  503. package/src/lights/SpotLightShadow.js +33 -3
  504. package/src/lights/webgpu/IESSpotLight.js +22 -0
  505. package/src/lights/webgpu/ProjectorLight.js +46 -0
  506. package/src/loaders/AnimationLoader.js +34 -2
  507. package/src/loaders/AudioLoader.js +34 -2
  508. package/src/loaders/BufferGeometryLoader.js +38 -13
  509. package/src/loaders/Cache.js +75 -2
  510. package/src/loaders/CompressedTextureLoader.js +36 -3
  511. package/src/loaders/CubeTextureLoader.js +45 -0
  512. package/src/loaders/DataTextureLoader.js +45 -4
  513. package/src/loaders/FileLoader.js +85 -5
  514. package/src/loaders/ImageBitmapLoader.js +113 -11
  515. package/src/loaders/ImageLoader.js +85 -8
  516. package/src/loaders/Loader.js +144 -0
  517. package/src/loaders/LoaderUtils.js +18 -36
  518. package/src/loaders/LoadingManager.js +187 -0
  519. package/src/loaders/MaterialLoader.js +62 -3
  520. package/src/loaders/ObjectLoader.js +131 -31
  521. package/src/loaders/TextureLoader.js +33 -0
  522. package/src/loaders/nodes/NodeLoader.js +68 -4
  523. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  524. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  525. package/src/materials/LineBasicMaterial.js +74 -1
  526. package/src/materials/LineDashedMaterial.js +52 -1
  527. package/src/materials/Material.js +502 -8
  528. package/src/materials/MeshBasicMaterial.js +168 -2
  529. package/src/materials/MeshDepthMaterial.js +94 -0
  530. package/src/materials/MeshDistanceMaterial.js +76 -0
  531. package/src/materials/MeshLambertMaterial.js +283 -0
  532. package/src/materials/MeshMatcapMaterial.js +164 -0
  533. package/src/materials/MeshNormalMaterial.js +114 -0
  534. package/src/materials/MeshPhongMaterial.js +298 -0
  535. package/src/materials/MeshPhysicalMaterial.js +296 -4
  536. package/src/materials/MeshStandardMaterial.js +300 -2
  537. package/src/materials/MeshToonMaterial.js +219 -0
  538. package/src/materials/PointsMaterial.js +89 -0
  539. package/src/materials/RawShaderMaterial.js +25 -0
  540. package/src/materials/ShaderMaterial.js +234 -6
  541. package/src/materials/ShadowMaterial.js +54 -0
  542. package/src/materials/SpriteMaterial.js +82 -0
  543. package/src/materials/nodes/Line2NodeMaterial.js +158 -53
  544. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  545. package/src/materials/nodes/LineDashedNodeMaterial.js +81 -6
  546. package/src/materials/nodes/MeshBasicNodeMaterial.js +59 -2
  547. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  548. package/src/materials/nodes/MeshMatcapNodeMaterial.js +23 -3
  549. package/src/materials/nodes/MeshNormalNodeMaterial.js +27 -4
  550. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  551. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +276 -3
  552. package/src/materials/nodes/MeshSSSNodeMaterial.js +98 -10
  553. package/src/materials/nodes/MeshStandardNodeMaterial.js +83 -4
  554. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  555. package/src/materials/nodes/NodeMaterial.js +789 -74
  556. package/src/materials/nodes/NodeMaterials.js +0 -1
  557. package/src/materials/nodes/PointsNodeMaterial.js +180 -11
  558. package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
  559. package/src/materials/nodes/SpriteNodeMaterial.js +86 -23
  560. package/src/materials/nodes/VolumeNodeMaterial.js +57 -84
  561. package/src/materials/nodes/manager/NodeMaterialObserver.js +329 -12
  562. package/src/math/Box2.js +177 -0
  563. package/src/math/Box3.js +271 -0
  564. package/src/math/Color.js +355 -11
  565. package/src/math/ColorManagement.js +158 -92
  566. package/src/math/Cylindrical.js +65 -6
  567. package/src/math/Euler.js +139 -5
  568. package/src/math/Frustum.js +108 -9
  569. package/src/math/FrustumArray.js +258 -0
  570. package/src/math/Interpolant.js +87 -8
  571. package/src/math/Line3.js +221 -2
  572. package/src/math/MathUtils.js +408 -20
  573. package/src/math/Matrix2.js +70 -0
  574. package/src/math/Matrix3.js +229 -4
  575. package/src/math/Matrix4.js +489 -94
  576. package/src/math/Plane.js +164 -2
  577. package/src/math/Quaternion.js +322 -90
  578. package/src/math/Ray.js +162 -0
  579. package/src/math/Sphere.js +175 -0
  580. package/src/math/Spherical.js +73 -11
  581. package/src/math/SphericalHarmonics3.js +112 -14
  582. package/src/math/Triangle.js +206 -2
  583. package/src/math/Vector2.js +396 -10
  584. package/src/math/Vector3.js +550 -15
  585. package/src/math/Vector4.js +415 -9
  586. package/src/math/interpolants/BezierInterpolant.js +108 -0
  587. package/src/math/interpolants/CubicInterpolant.js +10 -1
  588. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  589. package/src/math/interpolants/LinearInterpolant.js +13 -0
  590. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  591. package/src/nodes/Nodes.js +91 -88
  592. package/src/nodes/TSL.js +32 -38
  593. package/src/nodes/accessors/AccessorsUtils.js +37 -9
  594. package/src/nodes/accessors/Arrays.js +68 -0
  595. package/src/nodes/accessors/BatchNode.js +49 -14
  596. package/src/nodes/accessors/Bitangent.js +82 -13
  597. package/src/nodes/accessors/BufferAttributeNode.js +269 -8
  598. package/src/nodes/accessors/BufferNode.js +91 -2
  599. package/src/nodes/accessors/BuiltinNode.js +63 -0
  600. package/src/nodes/accessors/Camera.js +400 -10
  601. package/src/nodes/accessors/ClippingNode.js +149 -45
  602. package/src/nodes/accessors/CubeTextureNode.js +137 -7
  603. package/src/nodes/accessors/InstanceNode.js +245 -40
  604. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  605. package/src/nodes/accessors/Lights.js +88 -0
  606. package/src/nodes/accessors/MaterialNode.js +355 -13
  607. package/src/nodes/accessors/MaterialProperties.js +57 -1
  608. package/src/nodes/accessors/MaterialReferenceNode.js +52 -14
  609. package/src/nodes/accessors/ModelNode.js +117 -5
  610. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -39
  611. package/src/nodes/accessors/MorphNode.js +73 -26
  612. package/src/nodes/accessors/Normal.js +174 -19
  613. package/src/nodes/accessors/Object3DNode.js +146 -12
  614. package/src/nodes/accessors/PointUVNode.js +25 -0
  615. package/src/nodes/accessors/Position.js +119 -7
  616. package/src/nodes/accessors/ReferenceBaseNode.js +190 -4
  617. package/src/nodes/accessors/ReferenceNode.js +223 -8
  618. package/src/nodes/accessors/ReflectVector.js +29 -3
  619. package/src/nodes/accessors/RendererReferenceNode.js +45 -2
  620. package/src/nodes/accessors/SceneProperties.js +53 -0
  621. package/src/nodes/accessors/SkinningNode.js +180 -43
  622. package/src/nodes/accessors/StorageBufferNode.js +278 -26
  623. package/src/nodes/accessors/StorageTextureNode.js +205 -12
  624. package/src/nodes/accessors/Tangent.js +48 -10
  625. package/src/nodes/accessors/TangentUtils.js +46 -0
  626. package/src/nodes/accessors/Texture3DNode.js +104 -11
  627. package/src/nodes/accessors/TextureBicubic.js +31 -4
  628. package/src/nodes/accessors/TextureNode.js +564 -52
  629. package/src/nodes/accessors/TextureSizeNode.js +42 -1
  630. package/src/nodes/accessors/UV.js +9 -1
  631. package/src/nodes/accessors/UniformArrayNode.js +226 -34
  632. package/src/nodes/accessors/UserDataNode.js +46 -2
  633. package/src/nodes/accessors/VelocityNode.js +93 -3
  634. package/src/nodes/accessors/VertexColorNode.js +39 -4
  635. package/src/nodes/code/CodeNode.js +101 -8
  636. package/src/nodes/code/ExpressionNode.js +29 -2
  637. package/src/nodes/code/FunctionCallNode.js +98 -10
  638. package/src/nodes/code/FunctionNode.js +69 -2
  639. package/src/nodes/core/ArrayNode.js +174 -0
  640. package/src/nodes/core/AssignNode.js +80 -9
  641. package/src/nodes/core/AttributeNode.js +47 -4
  642. package/src/nodes/core/BypassNode.js +47 -3
  643. package/src/nodes/core/ConstNode.js +32 -0
  644. package/src/nodes/core/ContextNode.js +220 -14
  645. package/src/nodes/core/IndexNode.js +72 -7
  646. package/src/nodes/core/InputNode.js +50 -1
  647. package/src/nodes/core/InspectorNode.js +128 -0
  648. package/src/nodes/core/IsolateNode.js +133 -0
  649. package/src/nodes/core/LightingModel.js +65 -5
  650. package/src/nodes/core/MRTNode.js +113 -2
  651. package/src/nodes/core/Node.js +595 -36
  652. package/src/nodes/core/NodeAttribute.js +38 -0
  653. package/src/nodes/core/NodeBuilder.js +1840 -121
  654. package/src/nodes/core/NodeCache.js +41 -2
  655. package/src/nodes/core/NodeCode.js +31 -0
  656. package/src/nodes/core/NodeError.js +28 -0
  657. package/src/nodes/core/NodeFrame.js +153 -24
  658. package/src/nodes/core/NodeFunction.js +48 -1
  659. package/src/nodes/core/NodeFunctionInput.js +44 -0
  660. package/src/nodes/core/NodeParser.js +13 -1
  661. package/src/nodes/core/NodeUniform.js +53 -1
  662. package/src/nodes/core/NodeUtils.js +201 -51
  663. package/src/nodes/core/NodeVar.js +47 -1
  664. package/src/nodes/core/NodeVarying.js +47 -1
  665. package/src/nodes/core/OutputStructNode.js +54 -12
  666. package/src/nodes/core/ParameterNode.js +60 -2
  667. package/src/nodes/core/PropertyNode.js +286 -7
  668. package/src/nodes/core/StackNode.js +337 -20
  669. package/src/nodes/core/StackTrace.js +139 -0
  670. package/src/nodes/core/StructNode.js +134 -0
  671. package/src/nodes/core/StructType.js +13 -0
  672. package/src/nodes/core/StructTypeNode.js +126 -6
  673. package/src/nodes/core/SubBuildNode.js +89 -0
  674. package/src/nodes/core/TempNode.js +31 -5
  675. package/src/nodes/core/UniformGroupNode.js +85 -7
  676. package/src/nodes/core/UniformNode.js +163 -16
  677. package/src/nodes/core/VarNode.js +317 -10
  678. package/src/nodes/core/VaryingNode.js +115 -13
  679. package/src/nodes/core/constants.js +40 -0
  680. package/src/nodes/display/BlendModes.js +171 -0
  681. package/src/nodes/display/BumpMapNode.js +38 -2
  682. package/src/nodes/display/ColorAdjustment.js +118 -6
  683. package/src/nodes/display/ColorSpaceFunctions.js +22 -6
  684. package/src/nodes/display/ColorSpaceNode.js +97 -47
  685. package/src/nodes/display/FrontFacingNode.js +64 -7
  686. package/src/nodes/display/NormalMapNode.js +101 -54
  687. package/src/nodes/display/PassNode.js +690 -33
  688. package/src/nodes/display/RenderOutputNode.js +94 -4
  689. package/src/nodes/display/ScreenNode.js +138 -27
  690. package/src/nodes/display/ToneMappingFunctions.js +62 -10
  691. package/src/nodes/display/ToneMappingNode.js +88 -8
  692. package/src/nodes/display/ToonOutlinePassNode.js +84 -4
  693. package/src/nodes/display/ViewportDepthNode.js +227 -10
  694. package/src/nodes/display/ViewportDepthTextureNode.js +39 -5
  695. package/src/nodes/display/ViewportSharedTextureNode.js +35 -1
  696. package/src/nodes/display/ViewportTextureNode.js +171 -7
  697. package/src/nodes/fog/Fog.js +97 -0
  698. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  699. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  700. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  701. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  702. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  703. package/src/nodes/functions/BSDF/LTC.js +45 -1
  704. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  705. package/src/nodes/functions/BasicLightingModel.js +28 -6
  706. package/src/nodes/functions/PhongLightingModel.js +36 -6
  707. package/src/nodes/functions/PhysicalLightingModel.js +336 -91
  708. package/src/nodes/functions/ShadowMaskModel.js +30 -3
  709. package/src/nodes/functions/ToonLightingModel.js +21 -2
  710. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  711. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  712. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  713. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  714. package/src/nodes/geometry/RangeNode.js +97 -8
  715. package/src/nodes/gpgpu/AtomicFunctionNode.js +198 -23
  716. package/src/nodes/gpgpu/BarrierNode.js +52 -3
  717. package/src/nodes/gpgpu/ComputeBuiltinNode.js +135 -6
  718. package/src/nodes/gpgpu/ComputeNode.js +212 -16
  719. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  720. package/src/nodes/gpgpu/WorkgroupInfoNode.js +143 -9
  721. package/src/nodes/lighting/AONode.js +18 -0
  722. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  723. package/src/nodes/lighting/AnalyticLightNode.js +186 -399
  724. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  725. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  726. package/src/nodes/lighting/DirectionalLightNode.js +12 -11
  727. package/src/nodes/lighting/EnvironmentNode.js +59 -19
  728. package/src/nodes/lighting/HemisphereLightNode.js +33 -2
  729. package/src/nodes/lighting/IESSpotLightNode.js +13 -1
  730. package/src/nodes/lighting/IrradianceNode.js +17 -0
  731. package/src/nodes/lighting/LightProbeNode.js +20 -0
  732. package/src/nodes/lighting/LightUtils.js +11 -3
  733. package/src/nodes/lighting/LightingContextNode.js +52 -4
  734. package/src/nodes/lighting/LightingNode.js +15 -6
  735. package/src/nodes/lighting/LightsNode.js +238 -35
  736. package/src/nodes/lighting/PointLightNode.js +60 -25
  737. package/src/nodes/lighting/PointShadowNode.js +325 -0
  738. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  739. package/src/nodes/lighting/RectAreaLightNode.js +50 -14
  740. package/src/nodes/lighting/ShadowBaseNode.js +81 -0
  741. package/src/nodes/lighting/ShadowFilterNode.js +264 -0
  742. package/src/nodes/lighting/ShadowNode.js +867 -0
  743. package/src/nodes/lighting/SpotLightNode.js +99 -18
  744. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  745. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  746. package/src/nodes/math/BitcastNode.js +156 -0
  747. package/src/nodes/math/BitcountNode.js +433 -0
  748. package/src/nodes/math/ConditionalNode.js +110 -21
  749. package/src/nodes/math/Hash.js +8 -0
  750. package/src/nodes/math/MathNode.js +820 -97
  751. package/src/nodes/math/MathUtils.js +47 -1
  752. package/src/nodes/math/OperatorNode.js +517 -84
  753. package/src/nodes/math/PackFloatNode.js +98 -0
  754. package/src/nodes/math/TriNoise3D.js +17 -7
  755. package/src/nodes/math/UnpackFloatNode.js +96 -0
  756. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  757. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  758. package/src/nodes/pmrem/PMREMNode.js +180 -23
  759. package/src/nodes/pmrem/PMREMUtils.js +114 -5
  760. package/src/nodes/procedural/Checker.js +8 -0
  761. package/src/nodes/shapes/Shapes.js +33 -0
  762. package/src/nodes/tsl/TSLBase.js +10 -4
  763. package/src/nodes/tsl/TSLCore.js +732 -160
  764. package/src/nodes/utils/ArrayElementNode.js +55 -4
  765. package/src/nodes/utils/ConvertNode.js +31 -0
  766. package/src/nodes/utils/CubeMapNode.js +79 -2
  767. package/src/nodes/utils/DebugNode.js +83 -0
  768. package/src/nodes/utils/Discard.js +18 -2
  769. package/src/nodes/utils/EquirectUV.js +27 -0
  770. package/src/nodes/utils/EventNode.js +118 -0
  771. package/src/nodes/utils/FlipNode.js +38 -0
  772. package/src/nodes/utils/FunctionOverloadingNode.js +91 -22
  773. package/src/nodes/utils/JoinNode.js +57 -4
  774. package/src/nodes/utils/LoopNode.js +193 -55
  775. package/src/nodes/utils/MatcapUV.js +22 -0
  776. package/src/nodes/utils/MaxMipLevelNode.js +49 -1
  777. package/src/nodes/utils/MemberNode.js +120 -0
  778. package/src/nodes/utils/Oscillators.js +41 -0
  779. package/src/nodes/utils/Packing.js +30 -1
  780. package/src/nodes/utils/PostProcessingUtils.js +154 -0
  781. package/src/nodes/utils/RTTNode.js +165 -9
  782. package/src/nodes/utils/ReflectorNode.js +407 -21
  783. package/src/nodes/utils/RemapNode.js +81 -2
  784. package/src/nodes/utils/RotateNode.js +41 -1
  785. package/src/nodes/utils/SampleNode.js +91 -0
  786. package/src/nodes/utils/SetNode.js +44 -1
  787. package/src/nodes/utils/SplitNode.js +66 -3
  788. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  789. package/src/nodes/utils/SpriteUtils.js +16 -0
  790. package/src/nodes/utils/StorageArrayElementNode.js +56 -3
  791. package/src/nodes/utils/Timer.js +26 -0
  792. package/src/nodes/utils/TriplanarTextures.js +65 -0
  793. package/src/nodes/utils/UVUtils.js +48 -0
  794. package/src/nodes/utils/ViewportUtils.js +12 -0
  795. package/src/objects/BatchedMesh.js +798 -309
  796. package/src/objects/Bone.js +24 -0
  797. package/src/objects/ClippingGroup.js +68 -0
  798. package/src/objects/Group.js +24 -0
  799. package/src/objects/InstancedMesh.js +131 -2
  800. package/src/objects/LOD.js +99 -5
  801. package/src/objects/Line.js +90 -7
  802. package/src/objects/LineLoop.js +20 -0
  803. package/src/objects/LineSegments.js +20 -1
  804. package/src/objects/Mesh.js +84 -0
  805. package/src/objects/Points.js +60 -0
  806. package/src/objects/Skeleton.js +120 -5
  807. package/src/objects/SkinnedMesh.js +102 -6
  808. package/src/objects/Sprite.js +65 -1
  809. package/src/renderers/WebGL3DRenderTarget.js +26 -0
  810. package/src/renderers/WebGLArrayRenderTarget.js +26 -0
  811. package/src/renderers/WebGLCubeRenderTarget.js +41 -5
  812. package/src/renderers/WebGLRenderTarget.js +19 -0
  813. package/src/renderers/WebGLRenderer.js +1016 -278
  814. package/src/renderers/common/Animation.js +123 -14
  815. package/src/renderers/common/Attributes.js +41 -1
  816. package/src/renderers/common/Backend.js +623 -44
  817. package/src/renderers/common/Background.js +99 -16
  818. package/src/renderers/common/BindGroup.js +37 -2
  819. package/src/renderers/common/Binding.js +46 -0
  820. package/src/renderers/common/Bindings.js +211 -20
  821. package/src/renderers/common/BlendMode.js +143 -0
  822. package/src/renderers/common/Buffer.js +89 -0
  823. package/src/renderers/common/BufferUtils.js +25 -0
  824. package/src/renderers/common/BundleGroup.js +57 -0
  825. package/src/renderers/common/CanvasTarget.js +341 -0
  826. package/src/renderers/common/ChainMap.js +73 -10
  827. package/src/renderers/common/ClippingContext.js +172 -87
  828. package/src/renderers/common/Color4.js +40 -0
  829. package/src/renderers/common/ComputePipeline.js +24 -0
  830. package/src/renderers/common/Constants.js +2 -1
  831. package/src/renderers/common/CubeRenderTarget.js +77 -7
  832. package/src/renderers/common/DataMap.js +37 -1
  833. package/src/renderers/common/Geometries.js +163 -14
  834. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  835. package/src/renderers/common/Info.js +81 -36
  836. package/src/renderers/common/InspectorBase.js +146 -0
  837. package/src/renderers/common/Lighting.js +57 -0
  838. package/src/renderers/common/Pipeline.js +22 -0
  839. package/src/renderers/common/Pipelines.js +150 -7
  840. package/src/renderers/common/PostProcessing.js +22 -84
  841. package/src/renderers/common/ProgrammableStage.js +60 -2
  842. package/src/renderers/common/QuadMesh.js +63 -6
  843. package/src/renderers/common/RenderBundle.js +14 -8
  844. package/src/renderers/common/RenderBundles.js +40 -10
  845. package/src/renderers/common/RenderContext.js +219 -4
  846. package/src/renderers/common/RenderContexts.js +54 -17
  847. package/src/renderers/common/RenderList.js +233 -24
  848. package/src/renderers/common/RenderLists.js +46 -6
  849. package/src/renderers/common/RenderObject.js +548 -46
  850. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  851. package/src/renderers/common/RenderObjects.js +133 -15
  852. package/src/renderers/common/RenderPipeline.js +216 -6
  853. package/src/renderers/common/Renderer.js +2155 -332
  854. package/src/renderers/common/RendererUtils.js +200 -0
  855. package/src/renderers/common/SampledTexture.js +99 -39
  856. package/src/renderers/common/Sampler.js +148 -1
  857. package/src/renderers/common/Storage3DTexture.js +100 -0
  858. package/src/renderers/common/StorageArrayTexture.js +84 -0
  859. package/src/renderers/common/StorageBuffer.js +38 -2
  860. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  861. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  862. package/src/renderers/common/StorageTexture.js +65 -0
  863. package/src/renderers/common/Textures.js +273 -57
  864. package/src/renderers/common/TimestampQueryPool.js +163 -0
  865. package/src/renderers/common/Uniform.js +233 -3
  866. package/src/renderers/common/UniformBuffer.js +19 -0
  867. package/src/renderers/common/UniformsGroup.js +235 -26
  868. package/src/renderers/common/XRManager.js +1677 -0
  869. package/src/renderers/common/XRRenderTarget.js +91 -0
  870. package/src/renderers/common/extras/PMREMGenerator.js +371 -108
  871. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  872. package/src/renderers/common/nodes/NodeLibrary.js +95 -17
  873. package/src/renderers/common/nodes/NodeManager.js +852 -0
  874. package/src/renderers/common/nodes/NodeSampledTexture.js +84 -8
  875. package/src/renderers/common/nodes/NodeSampler.js +41 -1
  876. package/src/renderers/common/nodes/NodeStorageBuffer.js +48 -3
  877. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  878. package/src/renderers/common/nodes/NodeUniformBuffer.js +81 -0
  879. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  880. package/src/renderers/shaders/DFGLUTData.js +49 -0
  881. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  882. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  883. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  884. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  885. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  886. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  887. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  888. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  889. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  890. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  891. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  892. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  893. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  894. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  895. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  896. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +154 -59
  897. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  898. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  899. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  900. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  901. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  902. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  903. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  904. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +230 -181
  905. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  906. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  907. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  908. package/src/renderers/shaders/ShaderChunk.js +3 -3
  909. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  910. package/src/renderers/shaders/ShaderLib/depth.glsl.js +14 -2
  911. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  912. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  913. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  914. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  915. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  916. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  917. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  918. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  919. package/src/renderers/shaders/ShaderLib.js +7 -5
  920. package/src/renderers/shaders/UniformsLib.js +2 -7
  921. package/src/renderers/shaders/UniformsUtils.js +21 -2
  922. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  923. package/src/renderers/webgl/WebGLBackground.js +30 -5
  924. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  925. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  926. package/src/renderers/webgl/WebGLCapabilities.js +7 -14
  927. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  928. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  929. package/src/renderers/webgl/WebGLGeometries.js +10 -35
  930. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  931. package/src/renderers/webgl/WebGLInfo.js +3 -1
  932. package/src/renderers/webgl/WebGLLights.js +18 -1
  933. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  934. package/src/renderers/webgl/WebGLObjects.js +3 -1
  935. package/src/renderers/webgl/WebGLOutput.js +267 -0
  936. package/src/renderers/webgl/WebGLProgram.js +87 -148
  937. package/src/renderers/webgl/WebGLPrograms.js +53 -51
  938. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  939. package/src/renderers/webgl/WebGLShadowMap.js +204 -28
  940. package/src/renderers/webgl/WebGLState.js +88 -56
  941. package/src/renderers/webgl/WebGLTextures.js +293 -59
  942. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  943. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  944. package/src/renderers/webgl/WebGLUtils.js +7 -5
  945. package/src/renderers/webgl-fallback/WebGLBackend.js +1416 -293
  946. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  947. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +785 -92
  948. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +62 -1
  949. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  950. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +3 -3
  951. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  952. package/src/renderers/webgl-fallback/utils/WebGLState.js +584 -20
  953. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +468 -80
  954. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
  955. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +72 -24
  956. package/src/renderers/webgpu/WebGPUBackend.js +1517 -428
  957. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +31 -4
  958. package/src/renderers/webgpu/WebGPURenderer.js +55 -4
  959. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +23 -16
  960. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +37 -42
  961. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +1335 -241
  962. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +32 -4
  963. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  964. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +144 -20
  965. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +460 -116
  966. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -4
  967. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +283 -69
  968. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +225 -178
  969. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +583 -191
  970. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
  971. package/src/renderers/webgpu/utils/WebGPUUtils.js +150 -28
  972. package/src/renderers/webxr/WebXRController.js +87 -2
  973. package/src/renderers/webxr/WebXRDepthSensing.js +52 -7
  974. package/src/renderers/webxr/WebXRManager.js +275 -15
  975. package/src/scenes/Fog.js +60 -0
  976. package/src/scenes/FogExp2.js +51 -0
  977. package/src/scenes/Scene.js +88 -0
  978. package/src/textures/CanvasTexture.js +28 -0
  979. package/src/textures/CompressedArrayTexture.js +57 -0
  980. package/src/textures/CompressedCubeTexture.js +29 -0
  981. package/src/textures/CompressedTexture.js +64 -6
  982. package/src/textures/CubeDepthTexture.js +76 -0
  983. package/src/textures/CubeTexture.js +52 -4
  984. package/src/textures/Data3DTexture.js +79 -2
  985. package/src/textures/DataArrayTexture.js +93 -0
  986. package/src/textures/DataTexture.js +65 -0
  987. package/src/textures/DepthTexture.js +59 -11
  988. package/src/textures/ExternalTexture.js +56 -0
  989. package/src/textures/FramebufferTexture.js +62 -0
  990. package/src/textures/Source.js +106 -4
  991. package/src/textures/Texture.js +488 -6
  992. package/src/textures/VideoFrameTexture.js +72 -0
  993. package/src/textures/VideoTexture.js +78 -6
  994. package/src/utils.js +322 -3
  995. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  996. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  997. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  998. package/examples/jsm/effects/PeppersGhostEffect.js +0 -153
  999. package/examples/jsm/exporters/MMDExporter.js +0 -217
  1000. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  1001. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
  1002. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  1003. package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +0 -729
  1004. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  1005. package/examples/jsm/loaders/RGBMLoader.js +0 -1081
  1006. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -432
  1007. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -144
  1008. package/examples/jsm/misc/Timer.js +0 -128
  1009. package/examples/jsm/objects/InstancedPoints.js +0 -21
  1010. package/examples/jsm/shaders/GodRaysShader.js +0 -321
  1011. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  1012. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  1013. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  1014. package/src/nodes/accessors/SceneNode.js +0 -55
  1015. package/src/nodes/code/ScriptableNode.js +0 -505
  1016. package/src/nodes/code/ScriptableValueNode.js +0 -170
  1017. package/src/nodes/core/CacheNode.js +0 -50
  1018. package/src/nodes/core/UniformGroup.js +0 -13
  1019. package/src/nodes/display/AfterImageNode.js +0 -158
  1020. package/src/nodes/display/AnaglyphPassNode.js +0 -67
  1021. package/src/nodes/display/AnamorphicNode.js +0 -151
  1022. package/src/nodes/display/BlendMode.js +0 -54
  1023. package/src/nodes/display/BloomNode.js +0 -341
  1024. package/src/nodes/display/DenoiseNode.js +0 -204
  1025. package/src/nodes/display/DepthOfFieldNode.js +0 -124
  1026. package/src/nodes/display/DotScreenNode.js +0 -66
  1027. package/src/nodes/display/FXAANode.js +0 -332
  1028. package/src/nodes/display/FilmNode.js +0 -56
  1029. package/src/nodes/display/GTAONode.js +0 -331
  1030. package/src/nodes/display/GaussianBlurNode.js +0 -213
  1031. package/src/nodes/display/Lut3DNode.js +0 -57
  1032. package/src/nodes/display/MotionBlur.js +0 -25
  1033. package/src/nodes/display/ParallaxBarrierPassNode.js +0 -58
  1034. package/src/nodes/display/PixelationPassNode.js +0 -213
  1035. package/src/nodes/display/PosterizeNode.js +0 -33
  1036. package/src/nodes/display/RGBShiftNode.js +0 -53
  1037. package/src/nodes/display/StereoCompositePassNode.js +0 -110
  1038. package/src/nodes/display/TransitionNode.js +0 -80
  1039. package/src/nodes/fog/FogExp2Node.js +0 -35
  1040. package/src/nodes/fog/FogNode.js +0 -50
  1041. package/src/nodes/fog/FogRangeNode.js +0 -36
  1042. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  1043. package/src/nodes/utils/EquirectUVNode.js +0 -36
  1044. package/src/nodes/utils/MatcapUVNode.js +0 -33
  1045. package/src/nodes/utils/OscNode.js +0 -85
  1046. package/src/nodes/utils/SpriteSheetUVNode.js +0 -45
  1047. package/src/nodes/utils/TimerNode.js +0 -97
  1048. package/src/nodes/utils/TriplanarTexturesNode.js +0 -64
  1049. package/src/renderers/common/nodes/Nodes.js +0 -534
  1050. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  1051. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -136
@@ -1,11 +1,11 @@
1
1
  import NodeMaterial from '../../../materials/nodes/NodeMaterial.js';
2
- import { getDirection, blur } from '../../../nodes/pmrem/PMREMUtils.js';
3
- import { equirectUV } from '../../../nodes/utils/EquirectUVNode.js';
2
+ import { getDirection, blur, ggxConvolution } from '../../../nodes/pmrem/PMREMUtils.js';
3
+ import { equirectUV } from '../../../nodes/utils/EquirectUV.js';
4
4
  import { uniform } from '../../../nodes/core/UniformNode.js';
5
5
  import { uniformArray } from '../../../nodes/accessors/UniformArrayNode.js';
6
6
  import { texture } from '../../../nodes/accessors/TextureNode.js';
7
7
  import { cubeTexture } from '../../../nodes/accessors/CubeTextureNode.js';
8
- import { float, vec3 } from '../../../nodes/tsl/TSLBase.js';
8
+ import { float, uint, vec3 } from '../../../nodes/tsl/TSLBase.js';
9
9
  import { uv } from '../../../nodes/accessors/UV.js';
10
10
  import { attribute } from '../../../nodes/core/AttributeNode.js';
11
11
 
@@ -30,19 +30,22 @@ import {
30
30
  BackSide,
31
31
  LinearSRGBColorSpace
32
32
  } from '../../../constants.js';
33
+ import { warn, error, warnOnce } from '../../../utils.js';
33
34
 
34
35
  const LOD_MIN = 4;
35
36
 
36
- // The standard deviations (radians) associated with the extra mips. These are
37
- // chosen to approximate a Trowbridge-Reitz distribution function times the
38
- // geometric shadowing function. These sigma values squared must match the
39
- // variance #defines in cube_uv_reflection_fragment.glsl.js.
37
+ // The standard deviations (radians) associated with the extra mips.
38
+ // Used for scene blur in fromScene() method.
40
39
  const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];
41
40
 
42
41
  // The maximum length of the blur for loop. Smaller sigmas will use fewer
43
42
  // samples and exit early, but not recompile the shader.
43
+ // Used for scene blur in fromScene() method.
44
44
  const MAX_SAMPLES = 20;
45
45
 
46
+ // GGX VNDF importance sampling configuration
47
+ const GGX_SAMPLES = 512;
48
+
46
49
  const _flatCamera = /*@__PURE__*/ new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
47
50
  const _cubeCamera = /*@__PURE__*/ new PerspectiveCamera( 90, 1 );
48
51
  const _clearColor = /*@__PURE__*/ new Color();
@@ -50,26 +53,11 @@ let _oldTarget = null;
50
53
  let _oldActiveCubeFace = 0;
51
54
  let _oldActiveMipmapLevel = 0;
52
55
 
53
- // Golden Ratio
54
- const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
55
- const INV_PHI = 1 / PHI;
56
-
57
- // Vertices of a dodecahedron (except the opposites, which represent the
58
- // same axis), used as axis directions evenly spread on a sphere.
59
- const _axisDirections = [
60
- /*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),
61
- /*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),
62
- /*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
63
- /*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
64
- /*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
65
- /*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
66
- /*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
67
- /*@__PURE__*/ new Vector3( 1, 1, - 1 ),
68
- /*@__PURE__*/ new Vector3( - 1, 1, 1 ),
69
- /*@__PURE__*/ new Vector3( 1, 1, 1 )
70
- ];
56
+ const _origin = /*@__PURE__*/ new Vector3();
57
+
58
+ // maps blur materials to their uniforms dictionary
71
59
 
72
- //
60
+ const _uniformsMap = new WeakMap();
73
61
 
74
62
  // WebGPU Face indices
75
63
  const _faceLib = [
@@ -77,8 +65,8 @@ const _faceLib = [
77
65
  0, 4, 2
78
66
  ];
79
67
 
80
- const direction = getDirection( uv(), attribute( 'faceIndex' ) ).normalize();
81
- const outputDirection = vec3( direction.x, direction.y.negate(), direction.z );
68
+ const _direction = /*@__PURE__*/ getDirection( uv(), attribute( 'faceIndex' ) ).normalize();
69
+ const _outputDirection = /*@__PURE__*/ vec3( _direction.x, _direction.y, _direction.z );
82
70
 
83
71
  /**
84
72
  * This class generates a Prefiltered, Mipmapped Radiance Environment Map
@@ -91,12 +79,18 @@ const outputDirection = vec3( direction.x, direction.y.negate(), direction.z );
91
79
  * higher roughness levels. In this way we maintain resolution to smoothly
92
80
  * interpolate diffuse lighting while limiting sampling computation.
93
81
  *
94
- * Paper: Fast, Accurate Image-Based Lighting
95
- * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view
96
- */
97
-
82
+ * The prefiltering uses GGX VNDF (Visible Normal Distribution Function)
83
+ * importance sampling based on "Sampling the GGX Distribution of Visible Normals"
84
+ * (Heitz, 2018) to generate environment maps that accurately match the GGX BRDF
85
+ * used in material rendering for physically-based image-based lighting.
86
+ */
98
87
  class PMREMGenerator {
99
88
 
89
+ /**
90
+ * Constructs a new PMREM generator.
91
+ *
92
+ * @param {Renderer} renderer - The renderer.
93
+ */
100
94
  constructor( renderer ) {
101
95
 
102
96
  this._renderer = renderer;
@@ -104,37 +98,76 @@ class PMREMGenerator {
104
98
 
105
99
  this._lodMax = 0;
106
100
  this._cubeSize = 0;
107
- this._lodPlanes = [];
108
101
  this._sizeLods = [];
109
102
  this._sigmas = [];
110
103
  this._lodMeshes = [];
111
104
 
112
105
  this._blurMaterial = null;
106
+ this._ggxMaterial = null;
107
+
113
108
  this._cubemapMaterial = null;
114
109
  this._equirectMaterial = null;
115
110
  this._backgroundBox = null;
116
111
 
117
112
  }
118
113
 
114
+ get _hasInitialized() {
115
+
116
+ return this._renderer.hasInitialized();
117
+
118
+ }
119
+
119
120
  /**
120
121
  * Generates a PMREM from a supplied Scene, which can be faster than using an
121
122
  * image if networking bandwidth is low. Optional sigma specifies a blur radius
122
123
  * in radians to be applied to the scene before PMREM generation. Optional near
123
- * and far planes ensure the scene is rendered in its entirety (the cubeCamera
124
- * is placed at the origin).
124
+ * and far planes ensure the scene is rendered in its entirety.
125
+ *
126
+ * @param {Scene} scene - The scene to be captured.
127
+ * @param {number} [sigma=0] - The blur radius in radians.
128
+ * @param {number} [near=0.1] - The near plane distance.
129
+ * @param {number} [far=100] - The far plane distance.
130
+ * @param {Object} [options={}] - The configuration options.
131
+ * @param {number} [options.size=256] - The texture size of the PMREM.
132
+ * @param {Vector3} [options.renderTarget=origin] - The position of the internal cube camera that renders the scene.
133
+ * @param {?RenderTarget} [options.renderTarget=null] - The render target to use.
134
+ * @return {RenderTarget} The resulting PMREM.
135
+ * @see {@link PMREMGenerator#fromScene}
125
136
  */
126
- fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
137
+ fromScene( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
138
+
139
+ const {
140
+ size = 256,
141
+ position = _origin,
142
+ renderTarget = null,
143
+ } = options;
144
+
145
+ this._setSize( size );
146
+
147
+ if ( this._hasInitialized === false ) {
148
+
149
+ warn( 'PMREMGenerator: ".fromScene()" called before the backend is initialized. Try using "await renderer.init()" instead.' );
150
+
151
+ const cubeUVRenderTarget = renderTarget || this._allocateTarget();
152
+
153
+ options.renderTarget = cubeUVRenderTarget;
154
+
155
+ this.fromSceneAsync( scene, sigma, near, far, options );
156
+
157
+ return cubeUVRenderTarget;
158
+
159
+ }
127
160
 
128
161
  _oldTarget = this._renderer.getRenderTarget();
129
162
  _oldActiveCubeFace = this._renderer.getActiveCubeFace();
130
163
  _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
131
164
 
132
- this._setSize( 256 );
133
-
134
- const cubeUVRenderTarget = this._allocateTargets();
165
+ const cubeUVRenderTarget = renderTarget || this._allocateTarget();
135
166
  cubeUVRenderTarget.depthBuffer = true;
136
167
 
137
- this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );
168
+ this._init( cubeUVRenderTarget );
169
+
170
+ this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position );
138
171
 
139
172
  if ( sigma > 0 ) {
140
173
 
@@ -150,13 +183,82 @@ class PMREMGenerator {
150
183
 
151
184
  }
152
185
 
186
+ /**
187
+ * Generates a PMREM from a supplied Scene, which can be faster than using an
188
+ * image if networking bandwidth is low. Optional sigma specifies a blur radius
189
+ * in radians to be applied to the scene before PMREM generation. Optional near
190
+ * and far planes ensure the scene is rendered in its entirety (the cubeCamera
191
+ * is placed at the origin).
192
+ *
193
+ * @deprecated
194
+ * @param {Scene} scene - The scene to be captured.
195
+ * @param {number} [sigma=0] - The blur radius in radians.
196
+ * @param {number} [near=0.1] - The near plane distance.
197
+ * @param {number} [far=100] - The far plane distance.
198
+ * @param {Object} [options={}] - The configuration options.
199
+ * @param {number} [options.size=256] - The texture size of the PMREM.
200
+ * @param {Vector3} [options.position=origin] - The position of the internal cube camera that renders the scene.
201
+ * @param {?RenderTarget} [options.renderTarget=null] - The render target to use.
202
+ * @return {Promise<RenderTarget>} A Promise that resolve with the PMREM when the generation has been finished.
203
+ * @see {@link PMREMGenerator#fromScene}
204
+ */
205
+ async fromSceneAsync( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
206
+
207
+ warnOnce( 'PMREMGenerator: ".fromSceneAsync()" is deprecated. Use "await renderer.init()" instead.' ); // @deprecated r181
208
+
209
+ await this._renderer.init();
210
+
211
+ return this.fromScene( scene, sigma, near, far, options );
212
+
213
+ }
214
+
153
215
  /**
154
216
  * Generates a PMREM from an equirectangular texture, which can be either LDR
155
217
  * or HDR. The ideal input image size is 1k (1024 x 512),
156
218
  * as this matches best with the 256 x 256 cubemap output.
219
+ *
220
+ * @param {Texture} equirectangular - The equirectangular texture to be converted.
221
+ * @param {?RenderTarget} [renderTarget=null] - The render target to use.
222
+ * @return {RenderTarget} The resulting PMREM.
223
+ * @see {@link PMREMGenerator#fromEquirectangularAsync}
157
224
  */
158
225
  fromEquirectangular( equirectangular, renderTarget = null ) {
159
226
 
227
+ if ( this._hasInitialized === false ) {
228
+
229
+ warn( 'PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using "await renderer.init()" instead.' );
230
+
231
+ this._setSizeFromTexture( equirectangular );
232
+
233
+ const cubeUVRenderTarget = renderTarget || this._allocateTarget();
234
+
235
+ this.fromEquirectangularAsync( equirectangular, cubeUVRenderTarget );
236
+
237
+ return cubeUVRenderTarget;
238
+
239
+ }
240
+
241
+ return this._fromTexture( equirectangular, renderTarget );
242
+
243
+ }
244
+
245
+ /**
246
+ * Generates a PMREM from an equirectangular texture, which can be either LDR
247
+ * or HDR. The ideal input image size is 1k (1024 x 512),
248
+ * as this matches best with the 256 x 256 cubemap output.
249
+ *
250
+ * @deprecated
251
+ * @param {Texture} equirectangular - The equirectangular texture to be converted.
252
+ * @param {?RenderTarget} [renderTarget=null] - The render target to use.
253
+ * @return {Promise<RenderTarget>} The resulting PMREM.
254
+ * @see {@link PMREMGenerator#fromEquirectangular}
255
+ */
256
+ async fromEquirectangularAsync( equirectangular, renderTarget = null ) {
257
+
258
+ warnOnce( 'PMREMGenerator: ".fromEquirectangularAsync()" is deprecated. Use "await renderer.init()" instead.' ); // @deprecated r181
259
+
260
+ await this._renderer.init();
261
+
160
262
  return this._fromTexture( equirectangular, renderTarget );
161
263
 
162
264
  }
@@ -165,9 +267,49 @@ class PMREMGenerator {
165
267
  * Generates a PMREM from an cubemap texture, which can be either LDR
166
268
  * or HDR. The ideal input cube size is 256 x 256,
167
269
  * as this matches best with the 256 x 256 cubemap output.
270
+ *
271
+ * @param {Texture} cubemap - The cubemap texture to be converted.
272
+ * @param {?RenderTarget} [renderTarget=null] - The render target to use.
273
+ * @return {RenderTarget} The resulting PMREM.
274
+ * @see {@link PMREMGenerator#fromCubemapAsync}
168
275
  */
169
276
  fromCubemap( cubemap, renderTarget = null ) {
170
277
 
278
+ if ( this._hasInitialized === false ) {
279
+
280
+ warn( 'PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead.' );
281
+
282
+ this._setSizeFromTexture( cubemap );
283
+
284
+ const cubeUVRenderTarget = renderTarget || this._allocateTarget();
285
+
286
+ this.fromCubemapAsync( cubemap, renderTarget );
287
+
288
+ return cubeUVRenderTarget;
289
+
290
+ }
291
+
292
+ return this._fromTexture( cubemap, renderTarget );
293
+
294
+ }
295
+
296
+ /**
297
+ * Generates a PMREM from an cubemap texture, which can be either LDR
298
+ * or HDR. The ideal input cube size is 256 x 256,
299
+ * with the 256 x 256 cubemap output.
300
+ *
301
+ * @deprecated
302
+ * @param {Texture} cubemap - The cubemap texture to be converted.
303
+ * @param {?RenderTarget} [renderTarget=null] - The render target to use.
304
+ * @return {Promise<RenderTarget>} The resulting PMREM.
305
+ * @see {@link PMREMGenerator#fromCubemap}
306
+ */
307
+ async fromCubemapAsync( cubemap, renderTarget = null ) {
308
+
309
+ warnOnce( 'PMREMGenerator: ".fromCubemapAsync()" is deprecated. Use "await renderer.init()" instead.' ); // @deprecated r181
310
+
311
+ await this._renderer.init();
312
+
171
313
  return this._fromTexture( cubemap, renderTarget );
172
314
 
173
315
  }
@@ -175,6 +317,8 @@ class PMREMGenerator {
175
317
  /**
176
318
  * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
177
319
  * your texture's network fetch for increased concurrency.
320
+ *
321
+ * @returns {Promise}
178
322
  */
179
323
  async compileCubemapShader() {
180
324
 
@@ -190,6 +334,8 @@ class PMREMGenerator {
190
334
  /**
191
335
  * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
192
336
  * your texture's network fetch for increased concurrency.
337
+ *
338
+ * @returns {Promise}
193
339
  */
194
340
  async compileEquirectangularShader() {
195
341
 
@@ -224,6 +370,20 @@ class PMREMGenerator {
224
370
 
225
371
  // private interface
226
372
 
373
+ _setSizeFromTexture( texture ) {
374
+
375
+ if ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {
376
+
377
+ this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );
378
+
379
+ } else { // Equirectangular
380
+
381
+ this._setSize( texture.image.width / 4 );
382
+
383
+ }
384
+
385
+ }
386
+
227
387
  _setSize( cubeSize ) {
228
388
 
229
389
  this._lodMax = Math.floor( Math.log2( cubeSize ) );
@@ -234,12 +394,13 @@ class PMREMGenerator {
234
394
  _dispose() {
235
395
 
236
396
  if ( this._blurMaterial !== null ) this._blurMaterial.dispose();
397
+ if ( this._ggxMaterial !== null ) this._ggxMaterial.dispose();
237
398
 
238
399
  if ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();
239
400
 
240
- for ( let i = 0; i < this._lodPlanes.length; i ++ ) {
401
+ for ( let i = 0; i < this._lodMeshes.length; i ++ ) {
241
402
 
242
- this._lodPlanes[ i ].dispose();
403
+ this._lodMeshes[ i ].geometry.dispose();
243
404
 
244
405
  }
245
406
 
@@ -255,21 +416,14 @@ class PMREMGenerator {
255
416
 
256
417
  _fromTexture( texture, renderTarget ) {
257
418
 
258
- if ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {
259
-
260
- this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );
261
-
262
- } else { // Equirectangular
263
-
264
- this._setSize( texture.image.width / 4 );
265
-
266
- }
419
+ this._setSizeFromTexture( texture );
267
420
 
268
421
  _oldTarget = this._renderer.getRenderTarget();
269
422
  _oldActiveCubeFace = this._renderer.getActiveCubeFace();
270
423
  _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
271
424
 
272
- const cubeUVRenderTarget = renderTarget || this._allocateTargets();
425
+ const cubeUVRenderTarget = renderTarget || this._allocateTarget();
426
+ this._init( cubeUVRenderTarget );
273
427
  this._textureToCubeUV( texture, cubeUVRenderTarget );
274
428
  this._applyPMREM( cubeUVRenderTarget );
275
429
  this._cleanup( cubeUVRenderTarget );
@@ -278,24 +432,20 @@ class PMREMGenerator {
278
432
 
279
433
  }
280
434
 
281
- _allocateTargets() {
435
+ _allocateTarget() {
282
436
 
283
437
  const width = 3 * Math.max( this._cubeSize, 16 * 7 );
284
438
  const height = 4 * this._cubeSize;
285
439
 
286
- const params = {
287
- magFilter: LinearFilter,
288
- minFilter: LinearFilter,
289
- generateMipmaps: false,
290
- type: HalfFloatType,
291
- format: RGBAFormat,
292
- colorSpace: LinearSRGBColorSpace,
293
- //depthBuffer: false
294
- };
440
+ const cubeUVRenderTarget = _createRenderTarget( width, height );
295
441
 
296
- const cubeUVRenderTarget = _createRenderTarget( width, height, params );
442
+ return cubeUVRenderTarget;
443
+
444
+ }
297
445
 
298
- if ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {
446
+ _init( renderTarget ) {
447
+
448
+ if ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== renderTarget.width || this._pingPongRenderTarget.height !== renderTarget.height ) {
299
449
 
300
450
  if ( this._pingPongRenderTarget !== null ) {
301
451
 
@@ -303,35 +453,34 @@ class PMREMGenerator {
303
453
 
304
454
  }
305
455
 
306
- this._pingPongRenderTarget = _createRenderTarget( width, height, params );
456
+ this._pingPongRenderTarget = _createRenderTarget( renderTarget.width, renderTarget.height );
307
457
 
308
458
  const { _lodMax } = this;
309
- ( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas, lodMeshes: this._lodMeshes } = _createPlanes( _lodMax ) );
459
+ ( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
310
460
 
311
- this._blurMaterial = _getBlurShader( _lodMax, width, height );
461
+ this._blurMaterial = _getBlurShader( _lodMax, renderTarget.width, renderTarget.height );
462
+ this._ggxMaterial = _getGGXShader( _lodMax, renderTarget.width, renderTarget.height );
312
463
 
313
464
  }
314
465
 
315
- return cubeUVRenderTarget;
316
-
317
466
  }
318
467
 
319
468
  async _compileMaterial( material ) {
320
469
 
321
- const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );
322
- await this._renderer.compile( tmpMesh, _flatCamera );
470
+ const mesh = new Mesh( new BufferGeometry(), material );
471
+ await this._renderer.compile( mesh, _flatCamera );
323
472
 
324
473
  }
325
474
 
326
- _sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {
475
+ _sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position ) {
327
476
 
328
477
  const cubeCamera = _cubeCamera;
329
478
  cubeCamera.near = near;
330
479
  cubeCamera.far = far;
331
480
 
332
481
  // px, py, pz, nx, ny, nz
333
- const upSign = [ - 1, 1, - 1, - 1, - 1, - 1 ];
334
- const forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];
482
+ const upSign = [ 1, 1, 1, 1, - 1, 1 ];
483
+ const forwardSign = [ 1, - 1, 1, - 1, 1, - 1 ];
335
484
 
336
485
  const renderer = this._renderer;
337
486
 
@@ -341,29 +490,32 @@ class PMREMGenerator {
341
490
 
342
491
  renderer.autoClear = false;
343
492
 
344
- let backgroundBox = this._backgroundBox;
345
-
346
- if ( backgroundBox === null ) {
347
-
348
- const backgroundMaterial = new MeshBasicMaterial( {
349
- name: 'PMREM.Background',
350
- side: BackSide,
351
- depthWrite: false,
352
- depthTest: false
353
- } );
493
+ if ( this._backgroundBox === null ) {
354
494
 
355
- backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );
495
+ this._backgroundBox = new Mesh(
496
+ new BoxGeometry(),
497
+ new MeshBasicMaterial( {
498
+ name: 'PMREM.Background',
499
+ side: BackSide,
500
+ depthWrite: false,
501
+ depthTest: false,
502
+ } )
503
+ );
356
504
 
357
505
  }
358
506
 
507
+ const backgroundBox = this._backgroundBox;
508
+ const backgroundMaterial = backgroundBox.material;
509
+
359
510
  let useSolidColor = false;
511
+
360
512
  const background = scene.background;
361
513
 
362
514
  if ( background ) {
363
515
 
364
516
  if ( background.isColor ) {
365
517
 
366
- backgroundBox.material.color.copy( background );
518
+ backgroundMaterial.color.copy( background );
367
519
  scene.background = null;
368
520
  useSolidColor = true;
369
521
 
@@ -371,7 +523,7 @@ class PMREMGenerator {
371
523
 
372
524
  } else {
373
525
 
374
- backgroundBox.material.color.copy( _clearColor );
526
+ backgroundMaterial.color.copy( _clearColor );
375
527
  useSolidColor = true;
376
528
 
377
529
  }
@@ -393,17 +545,22 @@ class PMREMGenerator {
393
545
  if ( col === 0 ) {
394
546
 
395
547
  cubeCamera.up.set( 0, upSign[ i ], 0 );
396
- cubeCamera.lookAt( forwardSign[ i ], 0, 0 );
548
+ cubeCamera.position.set( position.x, position.y, position.z );
549
+ cubeCamera.lookAt( position.x + forwardSign[ i ], position.y, position.z );
397
550
 
398
551
  } else if ( col === 1 ) {
399
552
 
400
553
  cubeCamera.up.set( 0, 0, upSign[ i ] );
401
- cubeCamera.lookAt( 0, forwardSign[ i ], 0 );
554
+ cubeCamera.position.set( position.x, position.y, position.z );
555
+ cubeCamera.lookAt( position.x, position.y + forwardSign[ i ], position.z );
556
+
402
557
 
403
558
  } else {
404
559
 
405
560
  cubeCamera.up.set( 0, upSign[ i ], 0 );
406
- cubeCamera.lookAt( 0, 0, forwardSign[ i ] );
561
+ cubeCamera.position.set( position.x, position.y, position.z );
562
+ cubeCamera.lookAt( position.x, position.y, position.z + forwardSign[ i ] );
563
+
407
564
 
408
565
  }
409
566
 
@@ -464,15 +621,13 @@ class PMREMGenerator {
464
621
  const renderer = this._renderer;
465
622
  const autoClear = renderer.autoClear;
466
623
  renderer.autoClear = false;
467
- const n = this._lodPlanes.length;
468
624
 
469
- for ( let i = 1; i < n; i ++ ) {
625
+ const n = this._lodMeshes.length;
470
626
 
471
- const sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );
472
-
473
- const poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];
627
+ // Use GGX VNDF importance sampling
628
+ for ( let i = 1; i < n; i ++ ) {
474
629
 
475
- this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );
630
+ this._applyGGXFilter( cubeUVRenderTarget, i - 1, i );
476
631
 
477
632
  }
478
633
 
@@ -480,12 +635,80 @@ class PMREMGenerator {
480
635
 
481
636
  }
482
637
 
638
+ /**
639
+ * Applies GGX VNDF importance sampling filter to generate a prefiltered environment map.
640
+ * Uses Monte Carlo integration with VNDF importance sampling to accurately represent the
641
+ * GGX BRDF for physically-based rendering. Reads from the previous LOD level and
642
+ * applies incremental roughness filtering to avoid over-blurring.
643
+ *
644
+ * @private
645
+ * @param {RenderTarget} cubeUVRenderTarget
646
+ * @param {number} lodIn - Source LOD level to read from
647
+ * @param {number} lodOut - Target LOD level to write to
648
+ */
649
+ _applyGGXFilter( cubeUVRenderTarget, lodIn, lodOut ) {
650
+
651
+ const renderer = this._renderer;
652
+ const pingPongRenderTarget = this._pingPongRenderTarget;
653
+
654
+ const ggxMaterial = this._ggxMaterial;
655
+ const ggxMesh = this._lodMeshes[ lodOut ];
656
+ ggxMesh.material = ggxMaterial;
657
+
658
+ const ggxUniforms = _uniformsMap.get( ggxMaterial );
659
+
660
+ // Calculate incremental roughness between LOD levels
661
+ const targetRoughness = lodOut / ( this._lodMeshes.length - 1 );
662
+ const sourceRoughness = lodIn / ( this._lodMeshes.length - 1 );
663
+ const incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );
664
+
665
+ // Apply blur strength mapping for better quality across the roughness range
666
+ const blurStrength = 0.0 + targetRoughness * 1.25;
667
+ const adjustedRoughness = incrementalRoughness * blurStrength;
668
+
669
+ // Calculate viewport position based on output LOD level
670
+ const { _lodMax } = this;
671
+ const outputSize = this._sizeLods[ lodOut ];
672
+ const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
673
+ const y = 4 * ( this._cubeSize - outputSize );
674
+
675
+ // Read from previous LOD with incremental roughness
676
+ cubeUVRenderTarget.texture.frame = ( cubeUVRenderTarget.texture.frame || 0 ) + 1;
677
+ ggxUniforms.envMap.value = cubeUVRenderTarget.texture;
678
+ ggxUniforms.roughness.value = adjustedRoughness;
679
+ ggxUniforms.mipInt.value = _lodMax - lodIn; // Sample from input LOD
680
+
681
+ _setViewport( pingPongRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
682
+ renderer.setRenderTarget( pingPongRenderTarget );
683
+ renderer.render( ggxMesh, _flatCamera );
684
+
685
+ // Copy from pingPong back to cubeUV (simple direct copy)
686
+ pingPongRenderTarget.texture.frame = ( pingPongRenderTarget.texture.frame || 0 ) + 1;
687
+ ggxUniforms.envMap.value = pingPongRenderTarget.texture;
688
+ ggxUniforms.roughness.value = 0.0; // Direct copy
689
+ ggxUniforms.mipInt.value = _lodMax - lodOut; // Read from the level we just wrote
690
+
691
+ _setViewport( cubeUVRenderTarget, x, y, 3 * outputSize, 2 * outputSize );
692
+ renderer.setRenderTarget( cubeUVRenderTarget );
693
+ renderer.render( ggxMesh, _flatCamera );
694
+
695
+ }
696
+
483
697
  /**
484
698
  * This is a two-pass Gaussian blur for a cubemap. Normally this is done
485
699
  * vertically and horizontally, but this breaks down on a cube. Here we apply
486
700
  * the blur latitudinally (around the poles), and then longitudinally (towards
487
701
  * the poles) to approximate the orthogonally-separable blur. It is least
488
702
  * accurate at the poles, but still does a decent job.
703
+ *
704
+ * Used for initial scene blur in fromScene() method when sigma > 0.
705
+ *
706
+ * @private
707
+ * @param {RenderTarget} cubeUVRenderTarget - The cubemap render target.
708
+ * @param {number} lodIn - The input level-of-detail.
709
+ * @param {number} lodOut - The output level-of-detail.
710
+ * @param {number} sigma - The blur radius in radians.
711
+ * @param {Vector3} [poleAxis] - The pole axis.
489
712
  */
490
713
  _blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {
491
714
 
@@ -518,7 +741,7 @@ class PMREMGenerator {
518
741
 
519
742
  if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {
520
743
 
521
- console.error( 'blur direction must be either latitudinal or longitudinal!' );
744
+ error( 'blur direction must be either latitudinal or longitudinal!' );
522
745
 
523
746
  }
524
747
 
@@ -528,7 +751,7 @@ class PMREMGenerator {
528
751
  const blurMesh = this._lodMeshes[ lodOut ];
529
752
  blurMesh.material = blurMaterial;
530
753
 
531
- const blurUniforms = blurMaterial.uniforms;
754
+ const blurUniforms = _uniformsMap.get( blurMaterial );
532
755
 
533
756
  const pixels = this._sizeLods[ lodIn ] - 1;
534
757
  const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );
@@ -537,7 +760,7 @@ class PMREMGenerator {
537
760
 
538
761
  if ( samples > MAX_SAMPLES ) {
539
762
 
540
- console.warn( `sigmaRadians, ${
763
+ warn( `sigmaRadians, ${
541
764
  sigmaRadians}, is too large and will clip, as it requested ${
542
765
  samples} samples when the maximum is set to ${MAX_SAMPLES}` );
543
766
 
@@ -601,7 +824,6 @@ class PMREMGenerator {
601
824
 
602
825
  function _createPlanes( lodMax ) {
603
826
 
604
- const lodPlanes = [];
605
827
  const sizeLods = [];
606
828
  const sigmas = [];
607
829
  const lodMeshes = [];
@@ -668,7 +890,6 @@ function _createPlanes( lodMax ) {
668
890
  planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );
669
891
  planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
670
892
  planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
671
- lodPlanes.push( planes );
672
893
  lodMeshes.push( new Mesh( planes, null ) );
673
894
 
674
895
  if ( lod > LOD_MIN ) {
@@ -679,11 +900,21 @@ function _createPlanes( lodMax ) {
679
900
 
680
901
  }
681
902
 
682
- return { lodPlanes, sizeLods, sigmas, lodMeshes };
903
+ return { lodMeshes, sizeLods, sigmas };
683
904
 
684
905
  }
685
906
 
686
- function _createRenderTarget( width, height, params ) {
907
+ function _createRenderTarget( width, height ) {
908
+
909
+ const params = {
910
+ magFilter: LinearFilter,
911
+ minFilter: LinearFilter,
912
+ generateMipmaps: false,
913
+ type: HalfFloatType,
914
+ format: RGBAFormat,
915
+ colorSpace: LinearSRGBColorSpace,
916
+ //depthBuffer: false
917
+ };
687
918
 
688
919
  const cubeUVRenderTarget = new RenderTarget( width, height, params );
689
920
  cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;
@@ -721,7 +952,7 @@ function _getBlurShader( lodMax, width, height ) {
721
952
  const n = float( MAX_SAMPLES );
722
953
  const latitudinal = uniform( 0 ); // false, bool
723
954
  const samples = uniform( 1 ); // int
724
- const envMap = texture( null );
955
+ const envMap = texture();
725
956
  const mipInt = uniform( 0 ); // int
726
957
  const CUBEUV_TEXEL_WIDTH = float( 1 / width );
727
958
  const CUBEUV_TEXEL_HEIGHT = float( 1 / height );
@@ -732,7 +963,7 @@ function _getBlurShader( lodMax, width, height ) {
732
963
  latitudinal,
733
964
  weights,
734
965
  poleAxis,
735
- outputDirection,
966
+ outputDirection: _outputDirection,
736
967
  dTheta,
737
968
  samples,
738
969
  envMap,
@@ -743,9 +974,41 @@ function _getBlurShader( lodMax, width, height ) {
743
974
  };
744
975
 
745
976
  const material = _getMaterial( 'blur' );
746
- material.uniforms = materialUniforms; // TODO: Move to outside of the material
747
977
  material.fragmentNode = blur( { ...materialUniforms, latitudinal: latitudinal.equal( 1 ) } );
748
978
 
979
+ _uniformsMap.set( material, materialUniforms );
980
+
981
+ return material;
982
+
983
+ }
984
+
985
+ function _getGGXShader( lodMax, width, height ) {
986
+
987
+ const envMap = texture();
988
+ const roughness = uniform( 0 );
989
+ const mipInt = uniform( 0 );
990
+ const CUBEUV_TEXEL_WIDTH = float( 1 / width );
991
+ const CUBEUV_TEXEL_HEIGHT = float( 1 / height );
992
+ const CUBEUV_MAX_MIP = float( lodMax );
993
+
994
+ const materialUniforms = {
995
+ envMap,
996
+ roughness,
997
+ mipInt,
998
+ CUBEUV_TEXEL_WIDTH,
999
+ CUBEUV_TEXEL_HEIGHT,
1000
+ CUBEUV_MAX_MIP
1001
+ };
1002
+
1003
+ const material = _getMaterial( 'ggx' );
1004
+ material.fragmentNode = ggxConvolution( {
1005
+ ...materialUniforms,
1006
+ N_immutable: _outputDirection,
1007
+ GGX_SAMPLES: uint( GGX_SAMPLES )
1008
+ } );
1009
+
1010
+ _uniformsMap.set( material, materialUniforms );
1011
+
749
1012
  return material;
750
1013
 
751
1014
  }
@@ -753,7 +1016,7 @@ function _getBlurShader( lodMax, width, height ) {
753
1016
  function _getCubemapMaterial( envTexture ) {
754
1017
 
755
1018
  const material = _getMaterial( 'cubemap' );
756
- material.fragmentNode = cubeTexture( envTexture, outputDirection );
1019
+ material.fragmentNode = cubeTexture( envTexture, _outputDirection );
757
1020
 
758
1021
  return material;
759
1022
 
@@ -762,7 +1025,7 @@ function _getCubemapMaterial( envTexture ) {
762
1025
  function _getEquirectMaterial( envTexture ) {
763
1026
 
764
1027
  const material = _getMaterial( 'equirect' );
765
- material.fragmentNode = texture( envTexture, equirectUV( outputDirection ), 0 );
1028
+ material.fragmentNode = texture( envTexture, equirectUV( _outputDirection ), 0 );
766
1029
 
767
1030
  return material;
768
1031