super-three 0.179.0 → 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (696) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +14522 -12207
  4. package/build/three.core.js +12005 -10954
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +2270 -1005
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +63 -18
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +16573 -7890
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +16533 -7888
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +12 -4
  17. package/examples/jsm/animation/CCDIKSolver.js +8 -4
  18. package/examples/jsm/controls/ArcballControls.js +15 -12
  19. package/examples/jsm/controls/DragControls.js +9 -59
  20. package/examples/jsm/controls/FirstPersonControls.js +61 -57
  21. package/examples/jsm/controls/FlyControls.js +5 -1
  22. package/examples/jsm/controls/MapControls.js +55 -1
  23. package/examples/jsm/controls/OrbitControls.js +113 -10
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +9 -9
  26. package/examples/jsm/controls/TransformControls.js +35 -3
  27. package/examples/jsm/csm/CSM.js +2 -1
  28. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  29. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  30. package/examples/jsm/effects/AsciiEffect.js +8 -8
  31. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  32. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  33. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  34. package/examples/jsm/exporters/EXRExporter.js +2 -2
  35. package/examples/jsm/exporters/GLTFExporter.js +185 -34
  36. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  37. package/examples/jsm/exporters/PLYExporter.js +1 -1
  38. package/examples/jsm/exporters/USDZExporter.js +31 -5
  39. package/examples/jsm/geometries/DecalGeometry.js +3 -3
  40. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  41. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  42. package/examples/jsm/geometries/TextGeometry.js +21 -2
  43. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  44. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  45. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  46. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  47. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  48. package/examples/jsm/helpers/ViewHelper.js +110 -13
  49. package/examples/jsm/inspector/Extension.js +13 -0
  50. package/examples/jsm/inspector/Inspector.js +542 -0
  51. package/examples/jsm/inspector/RendererInspector.js +425 -0
  52. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  53. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  55. package/examples/jsm/inspector/tabs/Console.js +238 -0
  56. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  57. package/examples/jsm/inspector/tabs/Parameters.js +380 -0
  58. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  59. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  60. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  61. package/examples/jsm/inspector/tabs/Viewer.js +268 -0
  62. package/examples/jsm/inspector/ui/Graph.js +95 -0
  63. package/examples/jsm/inspector/ui/Item.js +170 -0
  64. package/examples/jsm/inspector/ui/List.js +75 -0
  65. package/examples/jsm/inspector/ui/Profiler.js +2072 -0
  66. package/examples/jsm/inspector/ui/Style.js +1667 -0
  67. package/examples/jsm/inspector/ui/Tab.js +265 -0
  68. package/examples/jsm/inspector/ui/Values.js +476 -0
  69. package/examples/jsm/inspector/ui/utils.js +69 -0
  70. package/examples/jsm/interaction/InteractionManager.js +226 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  73. package/examples/jsm/interactive/SelectionBox.js +30 -0
  74. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  75. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  76. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  77. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  79. package/examples/jsm/lines/Line2.js +3 -3
  80. package/examples/jsm/lines/LineGeometry.js +1 -1
  81. package/examples/jsm/lines/LineMaterial.js +7 -1
  82. package/examples/jsm/lines/LineSegments2.js +2 -2
  83. package/examples/jsm/lines/Wireframe.js +2 -2
  84. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  85. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  86. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  87. package/examples/jsm/loaders/3DMLoader.js +5 -4
  88. package/examples/jsm/loaders/3MFLoader.js +3 -3
  89. package/examples/jsm/loaders/AMFLoader.js +2 -2
  90. package/examples/jsm/loaders/ColladaLoader.js +27 -4029
  91. package/examples/jsm/loaders/DDSLoader.js +1 -1
  92. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  93. package/examples/jsm/loaders/EXRLoader.js +692 -53
  94. package/examples/jsm/loaders/FBXLoader.js +237 -39
  95. package/examples/jsm/loaders/FontLoader.js +23 -5
  96. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  97. package/examples/jsm/loaders/GLTFLoader.js +159 -185
  98. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  99. package/examples/jsm/loaders/HDRLoader.js +485 -0
  100. package/examples/jsm/loaders/KMZLoader.js +5 -5
  101. package/examples/jsm/loaders/KTX2Loader.js +162 -53
  102. package/examples/jsm/loaders/KTXLoader.js +2 -2
  103. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  104. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  105. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  106. package/examples/jsm/loaders/LWOLoader.js +9 -41
  107. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  108. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  109. package/examples/jsm/loaders/OBJLoader.js +1 -1
  110. package/examples/jsm/loaders/PCDLoader.js +4 -2
  111. package/examples/jsm/loaders/PDBLoader.js +1 -1
  112. package/examples/jsm/loaders/RGBELoader.js +7 -473
  113. package/examples/jsm/loaders/SVGLoader.js +4 -4
  114. package/examples/jsm/loaders/TDSLoader.js +0 -2
  115. package/examples/jsm/loaders/TGALoader.js +0 -2
  116. package/examples/jsm/loaders/TTFLoader.js +4 -4
  117. package/examples/jsm/loaders/USDLoader.js +100 -40
  118. package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
  119. package/examples/jsm/loaders/VOXLoader.js +660 -117
  120. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  121. package/examples/jsm/loaders/VTKLoader.js +42 -25
  122. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  123. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  124. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  125. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  126. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  127. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  128. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  129. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  130. package/examples/jsm/math/ColorSpaces.js +19 -1
  131. package/examples/jsm/math/ConvexHull.js +3 -3
  132. package/examples/jsm/math/ImprovedNoise.js +1 -1
  133. package/examples/jsm/math/Lut.js +2 -2
  134. package/examples/jsm/math/Octree.js +131 -1
  135. package/examples/jsm/math/SimplexNoise.js +1 -1
  136. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  137. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  138. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  139. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  140. package/examples/jsm/misc/RollerCoaster.js +42 -4
  141. package/examples/jsm/misc/TubePainter.js +383 -40
  142. package/examples/jsm/misc/Volume.js +1 -2
  143. package/examples/jsm/misc/VolumeSlice.js +0 -1
  144. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  145. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  146. package/examples/jsm/objects/LensflareMesh.js +1 -1
  147. package/examples/jsm/objects/Reflector.js +73 -25
  148. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  149. package/examples/jsm/objects/Sky.js +91 -7
  150. package/examples/jsm/objects/SkyMesh.js +151 -17
  151. package/examples/jsm/objects/Water.js +7 -6
  152. package/examples/jsm/objects/Water2.js +5 -3
  153. package/examples/jsm/objects/WaterMesh.js +11 -13
  154. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  155. package/examples/jsm/physics/JoltPhysics.js +10 -6
  156. package/examples/jsm/physics/RapierPhysics.js +9 -5
  157. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  158. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  159. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  160. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  161. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  162. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  163. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  164. package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
  165. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  166. package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
  167. package/examples/jsm/renderers/Projector.js +246 -28
  168. package/examples/jsm/renderers/SVGRenderer.js +175 -61
  169. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  170. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  171. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  172. package/examples/jsm/shaders/BokehShader.js +1 -1
  173. package/examples/jsm/shaders/BokehShader2.js +1 -1
  174. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  175. package/examples/jsm/shaders/FocusShader.js +1 -1
  176. package/examples/jsm/shaders/GTAOShader.js +21 -8
  177. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  178. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  179. package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
  180. package/examples/jsm/shaders/SAOShader.js +17 -4
  181. package/examples/jsm/shaders/SSAOShader.js +11 -1
  182. package/examples/jsm/shaders/SSRShader.js +7 -6
  183. package/examples/jsm/shaders/SepiaShader.js +1 -1
  184. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  185. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  186. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
  187. package/examples/jsm/shaders/VignetteShader.js +1 -1
  188. package/examples/jsm/transpiler/AST.js +44 -0
  189. package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
  190. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  191. package/examples/jsm/transpiler/TSLEncoder.js +52 -10
  192. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  193. package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
  194. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  195. package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
  196. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  197. package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
  198. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  199. package/examples/jsm/tsl/display/BloomNode.js +23 -9
  200. package/examples/jsm/tsl/display/CRT.js +150 -0
  201. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
  202. package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
  203. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  204. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  205. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  206. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  207. package/examples/jsm/tsl/display/GTAONode.js +59 -9
  208. package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
  209. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  210. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  211. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  212. package/examples/jsm/tsl/display/OutlineNode.js +81 -20
  213. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  214. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  215. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  216. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  217. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  218. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  219. package/examples/jsm/tsl/display/SSGINode.js +638 -0
  220. package/examples/jsm/tsl/display/SSRNode.js +186 -69
  221. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  222. package/examples/jsm/tsl/display/Shape.js +29 -0
  223. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  224. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  225. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  226. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  227. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  228. package/examples/jsm/tsl/display/TRAANode.js +381 -75
  229. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  230. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  231. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  232. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  233. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  234. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  235. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  236. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  237. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  238. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  239. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  240. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  241. package/examples/jsm/tsl/math/Bayer.js +53 -3
  242. package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
  243. package/examples/jsm/utils/ColorUtils.js +76 -0
  244. package/examples/jsm/utils/LDrawUtils.js +1 -1
  245. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  246. package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
  247. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  248. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  249. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  250. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  251. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  252. package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
  253. package/package.json +27 -38
  254. package/src/Three.Core.js +7 -3
  255. package/src/Three.TSL.js +61 -16
  256. package/src/Three.WebGPU.Nodes.js +7 -0
  257. package/src/Three.WebGPU.js +11 -0
  258. package/src/Three.js +1 -0
  259. package/src/animation/AnimationAction.js +12 -2
  260. package/src/animation/AnimationClip.js +21 -5
  261. package/src/animation/AnimationMixer.js +9 -3
  262. package/src/animation/AnimationObjectGroup.js +2 -1
  263. package/src/animation/AnimationUtils.js +1 -12
  264. package/src/animation/KeyframeTrack.js +54 -14
  265. package/src/animation/PropertyBinding.js +12 -11
  266. package/src/animation/PropertyMixer.js +4 -4
  267. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  268. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  269. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  270. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  271. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  272. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  273. package/src/audio/Audio.js +11 -10
  274. package/src/audio/AudioContext.js +2 -2
  275. package/src/audio/AudioListener.js +5 -3
  276. package/src/audio/PositionalAudio.js +1 -1
  277. package/src/cameras/Camera.js +32 -2
  278. package/src/cameras/CubeCamera.js +20 -0
  279. package/src/cameras/OrthographicCamera.js +1 -1
  280. package/src/cameras/PerspectiveCamera.js +1 -1
  281. package/src/cameras/StereoCamera.js +2 -2
  282. package/src/constants.js +100 -7
  283. package/src/core/BufferAttribute.js +13 -1
  284. package/src/core/BufferGeometry.js +24 -12
  285. package/src/core/Clock.js +7 -0
  286. package/src/core/EventDispatcher.js +1 -1
  287. package/src/core/InterleavedBuffer.js +1 -1
  288. package/src/core/InterleavedBufferAttribute.js +3 -2
  289. package/src/core/Object3D.js +55 -6
  290. package/src/core/Raycaster.js +4 -3
  291. package/src/core/RenderTarget.js +14 -5
  292. package/src/extras/Controls.js +5 -4
  293. package/src/extras/DataUtils.js +2 -1
  294. package/src/extras/Earcut.js +6 -0
  295. package/src/extras/ImageUtils.js +2 -2
  296. package/src/extras/PMREMGenerator.js +259 -57
  297. package/src/extras/TextureUtils.js +6 -1
  298. package/src/extras/core/Curve.js +2 -1
  299. package/src/extras/core/Interpolations.js +7 -1
  300. package/src/extras/core/ShapePath.js +4 -4
  301. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  302. package/src/extras/lib/earcut.js +8 -8
  303. package/src/geometries/BoxGeometry.js +1 -0
  304. package/src/geometries/CapsuleGeometry.js +1 -0
  305. package/src/geometries/CircleGeometry.js +1 -0
  306. package/src/geometries/ConeGeometry.js +1 -0
  307. package/src/geometries/CylinderGeometry.js +1 -0
  308. package/src/geometries/DodecahedronGeometry.js +1 -0
  309. package/src/geometries/ExtrudeGeometry.js +10 -8
  310. package/src/geometries/IcosahedronGeometry.js +1 -0
  311. package/src/geometries/LatheGeometry.js +1 -0
  312. package/src/geometries/OctahedronGeometry.js +1 -0
  313. package/src/geometries/PlaneGeometry.js +1 -0
  314. package/src/geometries/PolyhedronGeometry.js +1 -1
  315. package/src/geometries/RingGeometry.js +1 -0
  316. package/src/geometries/ShapeGeometry.js +1 -0
  317. package/src/geometries/SphereGeometry.js +1 -0
  318. package/src/geometries/TetrahedronGeometry.js +1 -0
  319. package/src/geometries/TorusGeometry.js +9 -3
  320. package/src/geometries/TorusKnotGeometry.js +1 -0
  321. package/src/geometries/TubeGeometry.js +1 -0
  322. package/src/helpers/CameraHelper.js +4 -1
  323. package/src/helpers/DirectionalLightHelper.js +4 -1
  324. package/src/helpers/HemisphereLightHelper.js +3 -0
  325. package/src/helpers/PointLightHelper.js +1 -25
  326. package/src/helpers/SpotLightHelper.js +3 -0
  327. package/src/lights/DirectionalLight.js +13 -0
  328. package/src/lights/HemisphereLight.js +10 -0
  329. package/src/lights/Light.js +1 -11
  330. package/src/lights/LightProbe.js +0 -15
  331. package/src/lights/LightShadow.js +15 -6
  332. package/src/lights/PointLight.js +15 -0
  333. package/src/lights/PointLightShadow.js +0 -86
  334. package/src/lights/SpotLight.js +22 -1
  335. package/src/lights/webgpu/IESSpotLight.js +2 -1
  336. package/src/lights/webgpu/ProjectorLight.js +1 -1
  337. package/src/loaders/AnimationLoader.js +2 -1
  338. package/src/loaders/AudioLoader.js +13 -2
  339. package/src/loaders/BufferGeometryLoader.js +2 -2
  340. package/src/loaders/Cache.js +30 -2
  341. package/src/loaders/DataTextureLoader.js +6 -4
  342. package/src/loaders/FileLoader.js +4 -4
  343. package/src/loaders/ImageBitmapLoader.js +17 -13
  344. package/src/loaders/ImageLoader.js +1 -1
  345. package/src/loaders/Loader.js +9 -3
  346. package/src/loaders/LoadingManager.js +25 -3
  347. package/src/loaders/MaterialLoader.js +6 -4
  348. package/src/loaders/ObjectLoader.js +57 -17
  349. package/src/loaders/TextureLoader.js +1 -1
  350. package/src/loaders/nodes/NodeLoader.js +5 -4
  351. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  352. package/src/materials/Material.js +18 -3
  353. package/src/materials/MeshBasicMaterial.js +1 -0
  354. package/src/materials/MeshDepthMaterial.js +1 -0
  355. package/src/materials/MeshDistanceMaterial.js +1 -1
  356. package/src/materials/MeshLambertMaterial.js +11 -1
  357. package/src/materials/MeshMatcapMaterial.js +22 -0
  358. package/src/materials/MeshNormalMaterial.js +1 -0
  359. package/src/materials/MeshPhongMaterial.js +11 -1
  360. package/src/materials/MeshPhysicalMaterial.js +2 -1
  361. package/src/materials/MeshStandardMaterial.js +8 -7
  362. package/src/materials/MeshToonMaterial.js +2 -1
  363. package/src/materials/PointsMaterial.js +1 -1
  364. package/src/materials/ShaderMaterial.js +22 -3
  365. package/src/materials/nodes/Line2NodeMaterial.js +36 -9
  366. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  367. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  368. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  369. package/src/materials/nodes/NodeMaterial.js +95 -35
  370. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  371. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  372. package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
  373. package/src/math/Color.js +6 -5
  374. package/src/math/ColorManagement.js +9 -3
  375. package/src/math/Cylindrical.js +1 -1
  376. package/src/math/Euler.js +2 -1
  377. package/src/math/Line3.js +6 -5
  378. package/src/math/MathUtils.js +23 -21
  379. package/src/math/Matrix2.js +14 -10
  380. package/src/math/Matrix3.js +15 -11
  381. package/src/math/Matrix4.js +94 -81
  382. package/src/math/Plane.js +5 -4
  383. package/src/math/Quaternion.js +60 -84
  384. package/src/math/Sphere.js +1 -1
  385. package/src/math/Spherical.js +1 -1
  386. package/src/math/Triangle.js +1 -1
  387. package/src/math/Vector2.js +11 -7
  388. package/src/math/Vector3.js +15 -13
  389. package/src/math/Vector4.js +13 -9
  390. package/src/math/interpolants/BezierInterpolant.js +108 -0
  391. package/src/nodes/Nodes.js +86 -65
  392. package/src/nodes/TSL.js +11 -8
  393. package/src/nodes/accessors/Arrays.js +1 -1
  394. package/src/nodes/accessors/BatchNode.js +10 -10
  395. package/src/nodes/accessors/Bitangent.js +5 -5
  396. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  397. package/src/nodes/accessors/BufferNode.js +30 -3
  398. package/src/nodes/accessors/Camera.js +260 -13
  399. package/src/nodes/accessors/ClippingNode.js +10 -9
  400. package/src/nodes/accessors/CubeTextureNode.js +32 -6
  401. package/src/nodes/accessors/InstanceNode.js +164 -39
  402. package/src/nodes/accessors/Lights.js +10 -0
  403. package/src/nodes/accessors/MaterialNode.js +9 -1
  404. package/src/nodes/accessors/MaterialProperties.js +2 -5
  405. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  406. package/src/nodes/accessors/ModelNode.js +1 -1
  407. package/src/nodes/accessors/Normal.js +16 -15
  408. package/src/nodes/accessors/Object3DNode.js +2 -2
  409. package/src/nodes/accessors/Position.js +51 -3
  410. package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
  411. package/src/nodes/accessors/ReferenceNode.js +11 -10
  412. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  413. package/src/nodes/accessors/SceneProperties.js +47 -0
  414. package/src/nodes/accessors/SkinningNode.js +27 -26
  415. package/src/nodes/accessors/StorageBufferNode.js +14 -24
  416. package/src/nodes/accessors/StorageTextureNode.js +62 -9
  417. package/src/nodes/accessors/Tangent.js +4 -14
  418. package/src/nodes/accessors/Texture3DNode.js +41 -31
  419. package/src/nodes/accessors/TextureNode.js +193 -63
  420. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  421. package/src/nodes/accessors/UserDataNode.js +1 -2
  422. package/src/nodes/accessors/VertexColorNode.js +1 -2
  423. package/src/nodes/code/FunctionCallNode.js +25 -5
  424. package/src/nodes/code/FunctionNode.js +25 -3
  425. package/src/nodes/core/ArrayNode.js +22 -2
  426. package/src/nodes/core/AssignNode.js +6 -5
  427. package/src/nodes/core/AttributeNode.js +5 -4
  428. package/src/nodes/core/BypassNode.js +1 -1
  429. package/src/nodes/core/ContextNode.js +133 -15
  430. package/src/nodes/core/IndexNode.js +4 -3
  431. package/src/nodes/core/InputNode.js +3 -2
  432. package/src/nodes/core/InspectorNode.js +128 -0
  433. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
  434. package/src/nodes/core/MRTNode.js +48 -2
  435. package/src/nodes/core/Node.js +264 -46
  436. package/src/nodes/core/NodeBuilder.js +453 -87
  437. package/src/nodes/core/NodeError.js +28 -0
  438. package/src/nodes/core/NodeFrame.js +31 -23
  439. package/src/nodes/core/NodeFunction.js +2 -1
  440. package/src/nodes/core/NodeParser.js +2 -1
  441. package/src/nodes/core/NodeUniform.js +1 -1
  442. package/src/nodes/core/NodeUtils.js +25 -97
  443. package/src/nodes/core/OutputStructNode.js +12 -10
  444. package/src/nodes/core/ParameterNode.js +34 -3
  445. package/src/nodes/core/PropertyNode.js +26 -3
  446. package/src/nodes/core/StackNode.js +99 -23
  447. package/src/nodes/core/StackTrace.js +139 -0
  448. package/src/nodes/core/StructNode.js +22 -8
  449. package/src/nodes/core/StructTypeNode.js +13 -18
  450. package/src/nodes/core/SubBuildNode.js +4 -4
  451. package/src/nodes/core/UniformGroupNode.js +36 -6
  452. package/src/nodes/core/UniformNode.js +37 -13
  453. package/src/nodes/core/VarNode.js +96 -34
  454. package/src/nodes/core/VaryingNode.js +2 -18
  455. package/src/nodes/display/BlendModes.js +0 -63
  456. package/src/nodes/display/BumpMapNode.js +1 -1
  457. package/src/nodes/display/ColorAdjustment.js +18 -1
  458. package/src/nodes/display/ColorSpaceNode.js +3 -3
  459. package/src/nodes/display/FrontFacingNode.js +4 -8
  460. package/src/nodes/display/NormalMapNode.js +41 -5
  461. package/src/nodes/display/PassNode.js +175 -25
  462. package/src/nodes/display/RenderOutputNode.js +35 -9
  463. package/src/nodes/display/ScreenNode.js +47 -15
  464. package/src/nodes/display/ToneMappingNode.js +32 -5
  465. package/src/nodes/display/ToonOutlinePassNode.js +10 -2
  466. package/src/nodes/display/ViewportDepthNode.js +52 -4
  467. package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
  468. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  469. package/src/nodes/display/ViewportTextureNode.js +72 -14
  470. package/src/nodes/fog/Fog.js +18 -34
  471. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  472. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  473. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  474. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  475. package/src/nodes/functions/BasicLightingModel.js +2 -1
  476. package/src/nodes/functions/PhysicalLightingModel.js +128 -46
  477. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  478. package/src/nodes/geometry/RangeNode.js +44 -6
  479. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  480. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  481. package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
  482. package/src/nodes/gpgpu/ComputeNode.js +76 -38
  483. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  484. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
  485. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  486. package/src/nodes/lighting/EnvironmentNode.js +34 -9
  487. package/src/nodes/lighting/LightsNode.js +10 -32
  488. package/src/nodes/lighting/PointShadowNode.js +167 -148
  489. package/src/nodes/lighting/ShadowFilterNode.js +55 -65
  490. package/src/nodes/lighting/ShadowNode.js +189 -44
  491. package/src/nodes/math/BitcastNode.js +156 -0
  492. package/src/nodes/math/BitcountNode.js +433 -0
  493. package/src/nodes/math/ConditionalNode.js +25 -8
  494. package/src/nodes/math/MathNode.js +98 -57
  495. package/src/nodes/math/OperatorNode.js +8 -5
  496. package/src/nodes/math/PackFloatNode.js +98 -0
  497. package/src/nodes/math/UnpackFloatNode.js +96 -0
  498. package/src/nodes/pmrem/PMREMNode.js +1 -1
  499. package/src/nodes/pmrem/PMREMUtils.js +111 -2
  500. package/src/nodes/shapes/Shapes.js +1 -1
  501. package/src/nodes/tsl/TSLBase.js +6 -3
  502. package/src/nodes/tsl/TSLCore.js +488 -166
  503. package/src/nodes/utils/ArrayElementNode.js +14 -1
  504. package/src/nodes/utils/ConvertNode.js +1 -1
  505. package/src/nodes/utils/DebugNode.js +14 -13
  506. package/src/nodes/utils/EventNode.js +67 -2
  507. package/src/nodes/utils/FlipNode.js +1 -1
  508. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  509. package/src/nodes/utils/JoinNode.js +7 -4
  510. package/src/nodes/utils/LoopNode.js +20 -24
  511. package/src/nodes/utils/MemberNode.js +60 -8
  512. package/src/nodes/utils/Packing.js +13 -1
  513. package/src/nodes/utils/PostProcessingUtils.js +60 -1
  514. package/src/nodes/utils/RTTNode.js +14 -4
  515. package/src/nodes/utils/ReflectorNode.js +61 -11
  516. package/src/nodes/utils/Remap.js +48 -0
  517. package/src/nodes/utils/RotateNode.js +1 -1
  518. package/src/nodes/utils/SampleNode.js +12 -2
  519. package/src/nodes/utils/SetNode.js +1 -1
  520. package/src/nodes/utils/SplitNode.js +12 -1
  521. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  522. package/src/nodes/utils/Timer.js +0 -47
  523. package/src/nodes/utils/UVUtils.js +28 -0
  524. package/src/objects/BatchedMesh.js +46 -18
  525. package/src/objects/InstancedMesh.js +30 -3
  526. package/src/objects/LOD.js +1 -1
  527. package/src/objects/Line.js +3 -2
  528. package/src/objects/LineSegments.js +2 -1
  529. package/src/objects/Mesh.js +1 -1
  530. package/src/objects/Points.js +1 -1
  531. package/src/objects/Skeleton.js +12 -2
  532. package/src/objects/SkinnedMesh.js +29 -10
  533. package/src/objects/Sprite.js +4 -3
  534. package/src/renderers/WebGLRenderer.js +372 -179
  535. package/src/renderers/common/Animation.js +16 -4
  536. package/src/renderers/common/Attributes.js +16 -2
  537. package/src/renderers/common/Backend.js +137 -35
  538. package/src/renderers/common/Background.js +28 -14
  539. package/src/renderers/common/BindGroup.js +1 -16
  540. package/src/renderers/common/Binding.js +11 -0
  541. package/src/renderers/common/Bindings.js +83 -12
  542. package/src/renderers/common/BlendMode.js +143 -0
  543. package/src/renderers/common/Buffer.js +40 -0
  544. package/src/renderers/common/BundleGroup.js +1 -1
  545. package/src/renderers/common/CanvasTarget.js +341 -0
  546. package/src/renderers/common/ChainMap.js +30 -6
  547. package/src/renderers/common/ComputePipeline.js +1 -1
  548. package/src/renderers/common/CubeRenderTarget.js +51 -7
  549. package/src/renderers/common/DataMap.js +1 -1
  550. package/src/renderers/common/Geometries.js +55 -3
  551. package/src/renderers/common/Info.js +337 -6
  552. package/src/renderers/common/InspectorBase.js +151 -0
  553. package/src/renderers/common/Lighting.js +5 -21
  554. package/src/renderers/common/Pipelines.js +41 -8
  555. package/src/renderers/common/PostProcessing.js +9 -226
  556. package/src/renderers/common/QuadMesh.js +7 -1
  557. package/src/renderers/common/ReadbackBuffer.js +78 -0
  558. package/src/renderers/common/RenderBundle.js +3 -1
  559. package/src/renderers/common/RenderBundles.js +7 -3
  560. package/src/renderers/common/RenderContext.js +18 -2
  561. package/src/renderers/common/RenderContexts.js +33 -49
  562. package/src/renderers/common/RenderList.js +7 -3
  563. package/src/renderers/common/RenderLists.js +2 -1
  564. package/src/renderers/common/RenderObject.js +32 -6
  565. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  566. package/src/renderers/common/RenderObjects.js +22 -6
  567. package/src/renderers/common/RenderPipeline.js +232 -17
  568. package/src/renderers/common/Renderer.js +927 -335
  569. package/src/renderers/common/RendererUtils.js +9 -0
  570. package/src/renderers/common/SampledTexture.js +9 -1
  571. package/src/renderers/common/Sampler.js +52 -14
  572. package/src/renderers/common/StorageBuffer.js +13 -1
  573. package/src/renderers/common/StorageTexture.js +9 -1
  574. package/src/renderers/common/Textures.js +208 -47
  575. package/src/renderers/common/TimestampQueryPool.js +70 -6
  576. package/src/renderers/common/Uniform.js +8 -0
  577. package/src/renderers/common/UniformsGroup.js +64 -2
  578. package/src/renderers/common/XRManager.js +79 -51
  579. package/src/renderers/common/extras/PMREMGenerator.js +176 -79
  580. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  581. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  582. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
  583. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  584. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  585. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  586. package/src/renderers/shaders/DFGLUTData.js +49 -0
  587. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  588. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  589. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  590. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  591. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  592. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  593. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
  594. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  595. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  597. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  598. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  599. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  600. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  601. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  602. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
  603. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  604. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  605. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  606. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  607. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  608. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  609. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  610. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
  611. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  612. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  613. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  614. package/src/renderers/shaders/ShaderChunk.js +5 -3
  615. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  616. package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
  617. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  618. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  619. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  620. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  621. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  622. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  623. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  624. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  625. package/src/renderers/shaders/ShaderLib.js +7 -6
  626. package/src/renderers/shaders/UniformsLib.js +8 -5
  627. package/src/renderers/shaders/UniformsUtils.js +52 -9
  628. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  629. package/src/renderers/webgl/WebGLBackground.js +15 -15
  630. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  631. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  632. package/src/renderers/webgl/WebGLCapabilities.js +11 -5
  633. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  634. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  635. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  637. package/src/renderers/webgl/WebGLInfo.js +3 -1
  638. package/src/renderers/webgl/WebGLLights.js +18 -1
  639. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  640. package/src/renderers/webgl/WebGLObjects.js +3 -1
  641. package/src/renderers/webgl/WebGLOutput.js +270 -0
  642. package/src/renderers/webgl/WebGLProgram.js +63 -122
  643. package/src/renderers/webgl/WebGLPrograms.js +65 -52
  644. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  645. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  646. package/src/renderers/webgl/WebGLShadowMap.js +191 -26
  647. package/src/renderers/webgl/WebGLState.js +79 -40
  648. package/src/renderers/webgl/WebGLTextures.js +234 -68
  649. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  650. package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
  651. package/src/renderers/webgl/WebGLUtils.js +8 -3
  652. package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
  653. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  654. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
  655. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  656. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  657. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  658. package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
  659. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
  660. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
  661. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
  662. package/src/renderers/webgpu/WebGPUBackend.js +403 -253
  663. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  664. package/src/renderers/webgpu/WebGPURenderer.js +5 -3
  665. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
  666. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
  667. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
  668. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  669. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
  670. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
  671. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
  672. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
  673. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
  674. package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
  675. package/src/renderers/webxr/WebXRController.js +12 -0
  676. package/src/renderers/webxr/WebXRManager.js +45 -29
  677. package/src/textures/CubeDepthTexture.js +76 -0
  678. package/src/textures/ExternalTexture.js +15 -4
  679. package/src/textures/HTMLTexture.js +74 -0
  680. package/src/textures/Source.js +5 -4
  681. package/src/textures/Texture.js +19 -7
  682. package/src/textures/VideoTexture.js +2 -3
  683. package/src/utils.js +344 -3
  684. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  685. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  686. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  687. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  688. package/src/nodes/accessors/SceneNode.js +0 -144
  689. package/src/nodes/code/ScriptableNode.js +0 -726
  690. package/src/nodes/code/ScriptableValueNode.js +0 -253
  691. package/src/nodes/display/PosterizeNode.js +0 -65
  692. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  693. package/src/nodes/utils/RemapNode.js +0 -125
  694. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  695. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  696. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -8,8 +8,8 @@ import { positionGeometry } from '../../nodes/accessors/Position.js';
8
8
  import { mix, smoothstep } from '../../nodes/math/MathNode.js';
9
9
  import { Fn, float, vec2, vec3, vec4, If } from '../../nodes/tsl/TSLBase.js';
10
10
  import { uv } from '../../nodes/accessors/UV.js';
11
- import { viewport } from '../../nodes/display/ScreenNode.js';
12
- import { viewportSharedTexture } from '../../nodes/display/ViewportSharedTextureNode.js';
11
+ import { screenDPR, viewport } from '../../nodes/display/ScreenNode.js';
12
+ import { viewportOpaqueMipTexture } from '../../nodes/display/ViewportTextureNode.js';
13
13
 
14
14
  import { LineDashedMaterial } from '../LineDashedMaterial.js';
15
15
  import { NoBlending } from '../../constants.js';
@@ -56,7 +56,7 @@ class Line2NodeMaterial extends NodeMaterial {
56
56
  * @type {boolean}
57
57
  * @default false
58
58
  */
59
- this.useColor = parameters.vertexColors;
59
+ this.vertexColors = parameters.vertexColors;
60
60
 
61
61
  /**
62
62
  * The dash offset.
@@ -133,7 +133,7 @@ class Line2NodeMaterial extends NodeMaterial {
133
133
  const { renderer } = builder;
134
134
 
135
135
  const useAlphaToCoverage = this._useAlphaToCoverage;
136
- const useColor = this.useColor;
136
+ const vertexColors = this.vertexColors;
137
137
  const useDash = this._useDash;
138
138
  const useWorldUnits = this._useWorldUnits;
139
139
 
@@ -300,7 +300,7 @@ class Line2NodeMaterial extends NodeMaterial {
300
300
  offset.assign( offset.mul( materialLineWidth ) );
301
301
 
302
302
  // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...
303
- offset.assign( offset.div( viewport.w ) );
303
+ offset.assign( offset.div( viewport.w.div( screenDPR ) ) );
304
304
 
305
305
  // select end
306
306
  clip.assign( positionGeometry.y.lessThan( 0.5 ).select( clipStart, clipEnd ) );
@@ -378,7 +378,7 @@ class Line2NodeMaterial extends NodeMaterial {
378
378
 
379
379
  if ( ! useDash ) {
380
380
 
381
- if ( useAlphaToCoverage && renderer.samples > 1 ) {
381
+ if ( useAlphaToCoverage && renderer.currentSamples > 0 ) {
382
382
 
383
383
  const dnorm = norm.fwidth();
384
384
  alpha.assign( smoothstep( dnorm.negate().add( 0.5 ), dnorm.add( 0.5 ), norm ).oneMinus() );
@@ -395,7 +395,7 @@ class Line2NodeMaterial extends NodeMaterial {
395
395
 
396
396
  // round endcaps
397
397
 
398
- if ( useAlphaToCoverage && renderer.samples > 1 ) {
398
+ if ( useAlphaToCoverage && renderer.currentSamples > 0 ) {
399
399
 
400
400
  const a = vUv.x;
401
401
  const b = vUv.y.greaterThan( 0.0 ).select( vUv.y.sub( 1.0 ), vUv.y.add( 1.0 ) );
@@ -434,7 +434,7 @@ class Line2NodeMaterial extends NodeMaterial {
434
434
 
435
435
  } else {
436
436
 
437
- if ( useColor ) {
437
+ if ( vertexColors ) {
438
438
 
439
439
  const instanceColorStart = attribute( 'instanceColorStart' );
440
440
  const instanceColorEnd = attribute( 'instanceColorEnd' );
@@ -459,7 +459,7 @@ class Line2NodeMaterial extends NodeMaterial {
459
459
 
460
460
  const opacityNode = this.opacityNode ? float( this.opacityNode ) : materialOpacity;
461
461
 
462
- this.outputNode = vec4( this.colorNode.rgb.mul( opacityNode ).add( viewportSharedTexture().rgb.mul( opacityNode.oneMinus() ) ), this.colorNode.a );
462
+ this.outputNode = vec4( this.colorNode.rgb.mul( opacityNode ).add( viewportOpaqueMipTexture().rgb.mul( opacityNode.oneMinus() ) ), this.colorNode.a );
463
463
 
464
464
  }
465
465
 
@@ -537,6 +537,33 @@ class Line2NodeMaterial extends NodeMaterial {
537
537
 
538
538
  }
539
539
 
540
+ /**
541
+ * Copies the properties of the given material to this instance.
542
+ *
543
+ * @param {Line2NodeMaterial} source - The material to copy.
544
+ * @return {Line2NodeMaterial} A reference to this material.
545
+ */
546
+ copy( source ) {
547
+
548
+ super.copy( source );
549
+
550
+ this.vertexColors = source.vertexColors;
551
+ this.dashOffset = source.dashOffset;
552
+
553
+ this.lineColorNode = source.lineColorNode;
554
+ this.offsetNode = source.offsetNode;
555
+ this.dashScaleNode = source.dashScaleNode;
556
+ this.dashSizeNode = source.dashSizeNode;
557
+ this.gapSizeNode = source.gapSizeNode;
558
+
559
+ this._useDash = source._useDash;
560
+ this._useAlphaToCoverage = source._useAlphaToCoverage;
561
+ this._useWorldUnits = source._useWorldUnits;
562
+
563
+ return this;
564
+
565
+ }
566
+
540
567
  }
541
568
 
542
569
  export default Line2NodeMaterial;
@@ -1,4 +1,4 @@
1
- import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
1
+ import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularColorBlended, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
2
2
  import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialSpecularIntensity, materialSpecularColor, materialAnisotropy, materialIOR, materialTransmission, materialThickness, materialAttenuationDistance, materialAttenuationColor, materialDispersion } from '../../nodes/accessors/MaterialNode.js';
3
3
  import { float, vec2, vec3, If } from '../../nodes/tsl/TSLBase.js';
4
4
  import getRoughness from '../../nodes/functions/material/getRoughness.js';
@@ -350,7 +350,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
350
350
  const iorNode = this.iorNode ? float( this.iorNode ) : materialIOR;
351
351
 
352
352
  ior.assign( iorNode );
353
- specularColor.assign( mix( min( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ), diffuseColor.rgb, metalness ) );
353
+ specularColor.assign( min( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ) );
354
+ specularColorBlended.assign( mix( specularColor, diffuseColor.rgb, metalness ) );
354
355
  specularF90.assign( mix( materialSpecularIntensity, 1.0, metalness ) );
355
356
 
356
357
  }
@@ -501,6 +502,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
501
502
  this.specularIntensityNode = source.specularIntensityNode;
502
503
  this.specularColorNode = source.specularColorNode;
503
504
 
505
+ this.iorNode = source.iorNode;
506
+
504
507
  this.transmissionNode = source.transmissionNode;
505
508
  this.thicknessNode = source.thicknessNode;
506
509
  this.attenuationDistanceNode = source.attenuationDistanceNode;
@@ -39,7 +39,7 @@ class SSSLightingModel extends PhysicalLightingModel {
39
39
  /**
40
40
  * Extends the default implementation with a SSS term.
41
41
  *
42
- * Reference: [Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look]{@link https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/}
42
+ * Reference: [Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look](https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/)
43
43
  *
44
44
  * @param {Object} input - The input data.
45
45
  * @param {NodeBuilder} builder - The current node builder.
@@ -1,11 +1,11 @@
1
1
  import NodeMaterial from './NodeMaterial.js';
2
- import { diffuseColor, metalness, roughness, specularColor, specularF90 } from '../../nodes/core/PropertyNode.js';
2
+ import { diffuseColor, diffuseContribution, metalness, roughness, specularColor, specularColorBlended, specularF90 } from '../../nodes/core/PropertyNode.js';
3
3
  import { mix } from '../../nodes/math/MathNode.js';
4
4
  import { materialRoughness, materialMetalness } from '../../nodes/accessors/MaterialNode.js';
5
5
  import getRoughness from '../../nodes/functions/material/getRoughness.js';
6
6
  import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
7
7
  import EnvironmentNode from '../../nodes/lighting/EnvironmentNode.js';
8
- import { float, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
8
+ import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
9
9
 
10
10
  import { MeshStandardMaterial } from '../MeshStandardMaterial.js';
11
11
 
@@ -135,7 +135,8 @@ class MeshStandardNodeMaterial extends NodeMaterial {
135
135
 
136
136
  const specularColorNode = mix( vec3( 0.04 ), diffuseColor.rgb, metalness );
137
137
 
138
- specularColor.assign( specularColorNode );
138
+ specularColor.assign( vec3( 0.04 ) );
139
+ specularColorBlended.assign( specularColorNode );
139
140
  specularF90.assign( 1.0 );
140
141
 
141
142
  }
@@ -166,7 +167,7 @@ class MeshStandardNodeMaterial extends NodeMaterial {
166
167
 
167
168
  // DIFFUSE COLOR
168
169
 
169
- diffuseColor.assign( vec4( diffuseColor.rgb.mul( metalnessNode.oneMinus() ), diffuseColor.a ) );
170
+ diffuseContribution.assign( diffuseColor.rgb.mul( metalnessNode.oneMinus() ) );
170
171
 
171
172
  }
172
173
 
@@ -1,7 +1,6 @@
1
1
  import { Material } from '../Material.js';
2
- import { NormalBlending } from '../../constants.js';
3
2
 
4
- import { getNodeChildren, getCacheKey } from '../../nodes/core/NodeUtils.js';
3
+ import { hashArray, hashString } from '../../nodes/core/NodeUtils.js';
5
4
  import { output, diffuseColor, emissive, varyingProperty } from '../../nodes/core/PropertyNode.js';
6
5
  import { materialAlphaTest, materialColor, materialOpacity, materialEmissive, materialNormal, materialLightMap, materialAO } from '../../nodes/accessors/MaterialNode.js';
7
6
  import { modelViewProjection } from '../../nodes/accessors/ModelViewProjectionNode.js';
@@ -12,7 +11,7 @@ import { materialReference } from '../../nodes/accessors/MaterialReferenceNode.j
12
11
  import { positionLocal, positionView } from '../../nodes/accessors/Position.js';
13
12
  import { skinning } from '../../nodes/accessors/SkinningNode.js';
14
13
  import { morphReference } from '../../nodes/accessors/MorphNode.js';
15
- import { mix } from '../../nodes/math/MathNode.js';
14
+ import { fwidth, mix, smoothstep } from '../../nodes/math/MathNode.js';
16
15
  import { float, vec3, vec4, bool } from '../../nodes/tsl/TSLBase.js';
17
16
  import AONode from '../../nodes/lighting/AONode.js';
18
17
  import { lightingContext } from '../../nodes/lighting/LightingContextNode.js';
@@ -181,7 +180,7 @@ class NodeMaterial extends Material {
181
180
  * and `alphaMap` properties. This node property allows to overwrite the default
182
181
  * and define the opacity with a node instead.
183
182
  *
184
- * If you don't want to overwrite the normals but modify the existing
183
+ * If you don't want to overwrite the opacity but modify the existing
185
184
  * value instead, use {@link materialOpacity}.
186
185
  *
187
186
  * @type {?Node<float>}
@@ -240,6 +239,14 @@ class NodeMaterial extends Material {
240
239
  */
241
240
  this.maskNode = null;
242
241
 
242
+ /**
243
+ * This node can be used to implement a shadow mask for the material.
244
+ *
245
+ * @type {?Node<bool>}
246
+ * @default null
247
+ */
248
+ this.maskShadowNode = null;
249
+
243
250
  /**
244
251
  * The local vertex positions are computed based on multiple factors like the
245
252
  * attribute data, morphing or skinning. This node property allows to overwrite
@@ -382,25 +389,41 @@ class NodeMaterial extends Material {
382
389
  */
383
390
  this.vertexNode = null;
384
391
 
385
- // Deprecated properties
392
+ /**
393
+ * This node can be used as a global context management component for this material.
394
+ *
395
+ * @type {?ContextNode}
396
+ * @default null
397
+ */
398
+ this.contextNode = null;
386
399
 
387
- Object.defineProperty( this, 'shadowPositionNode', { // @deprecated, r176
400
+ }
388
401
 
389
- get: () => {
402
+ /**
403
+ * Returns an array of child nodes for this material.
404
+ *
405
+ * @private
406
+ * @returns {Array<{property: string, childNode: Node}>}
407
+ */
408
+ _getNodeChildren() {
409
+
410
+ const children = [];
390
411
 
391
- return this.receivedShadowPositionNode;
412
+ for ( const property of Object.getOwnPropertyNames( this ) ) {
392
413
 
393
- },
414
+ if ( property.startsWith( '_' ) === true ) continue;
394
415
 
395
- set: ( value ) => {
416
+ const object = this[ property ];
396
417
 
397
- console.warn( 'THREE.NodeMaterial: ".shadowPositionNode" was renamed to ".receivedShadowPositionNode".' );
418
+ if ( object && object.isNode === true ) {
398
419
 
399
- this.receivedShadowPositionNode = value;
420
+ children.push( { property, childNode: object } );
400
421
 
401
422
  }
402
423
 
403
- } );
424
+ }
425
+
426
+ return children;
404
427
 
405
428
  }
406
429
 
@@ -412,7 +435,15 @@ class NodeMaterial extends Material {
412
435
  */
413
436
  customProgramCacheKey() {
414
437
 
415
- return this.type + getCacheKey( this );
438
+ const values = [];
439
+
440
+ for ( const { property, childNode } of this._getNodeChildren() ) {
441
+
442
+ values.push( hashString( property.slice( 0, - 4 ) ), childNode.getCacheKey() );
443
+
444
+ }
445
+
446
+ return this.type + hashArray( values );
416
447
 
417
448
  }
418
449
 
@@ -457,9 +488,11 @@ class NodeMaterial extends Material {
457
488
 
458
489
  builder.addStack();
459
490
 
460
- const mvp = subBuild( this.setupVertex( builder ), 'VERTEX' );
491
+ const mvp = this.setupVertex( builder );
461
492
 
462
- const vertexNode = this.vertexNode || mvp;
493
+ const vertexNode = subBuild( this.vertexNode || mvp, 'VERTEX' );
494
+
495
+ builder.context.clipSpace = vertexNode;
463
496
 
464
497
  builder.stack.outputNode = vertexNode;
465
498
 
@@ -504,7 +537,7 @@ class NodeMaterial extends Material {
504
537
 
505
538
  const outgoingLightNode = this.setupLighting( builder );
506
539
 
507
- if ( clippingNode !== null ) builder.stack.add( clippingNode );
540
+ if ( clippingNode !== null ) builder.stack.addToStack( clippingNode );
508
541
 
509
542
  // force unsigned floats - useful for RenderTargets
510
543
 
@@ -522,6 +555,14 @@ class NodeMaterial extends Material {
522
555
 
523
556
  if ( isCustomOutput ) resultNode = this.outputNode;
524
557
 
558
+ //
559
+
560
+ if ( builder.context.getOutput ) {
561
+
562
+ resultNode = builder.context.getOutput( resultNode, builder );
563
+
564
+ }
565
+
525
566
  // MRT
526
567
 
527
568
  if ( renderTarget !== null ) {
@@ -589,7 +630,7 @@ class NodeMaterial extends Material {
589
630
 
590
631
  if ( unionPlanes.length > 0 || intersectionPlanes.length > 0 ) {
591
632
 
592
- const samples = builder.renderer.samples;
633
+ const samples = builder.renderer.currentSamples;
593
634
 
594
635
  if ( this.alphaToCoverage && samples > 1 ) {
595
636
 
@@ -598,7 +639,7 @@ class NodeMaterial extends Material {
598
639
 
599
640
  } else {
600
641
 
601
- builder.stack.add( clipping() );
642
+ builder.stack.addToStack( clipping() );
602
643
 
603
644
  }
604
645
 
@@ -625,7 +666,7 @@ class NodeMaterial extends Material {
625
666
 
626
667
  if ( candidateCount > 0 && candidateCount <= 8 && builder.isAvailable( 'clipDistance' ) ) {
627
668
 
628
- builder.stack.add( hardwareClipping() );
669
+ builder.stack.addToStack( hardwareClipping() );
629
670
 
630
671
  this.hardwareClipping = true;
631
672
 
@@ -717,7 +758,7 @@ class NodeMaterial extends Material {
717
758
 
718
759
  this.setupPosition( builder );
719
760
 
720
- builder.context.vertex = builder.removeStack();
761
+ builder.context.position = builder.removeStack();
721
762
 
722
763
  return modelViewProjection;
723
764
 
@@ -783,7 +824,9 @@ class NodeMaterial extends Material {
783
824
  * @param {NodeBuilder} builder - The current node builder.
784
825
  * @param {BufferGeometry} geometry - The geometry.
785
826
  */
786
- setupDiffuseColor( { object, geometry } ) {
827
+ setupDiffuseColor( builder ) {
828
+
829
+ const { object, geometry } = builder;
787
830
 
788
831
  // MASK
789
832
 
@@ -842,7 +885,16 @@ class NodeMaterial extends Material {
842
885
 
843
886
  alphaTestNode = this.alphaTestNode !== null ? float( this.alphaTestNode ) : materialAlphaTest;
844
887
 
845
- diffuseColor.a.lessThanEqual( alphaTestNode ).discard();
888
+ if ( this.alphaToCoverage === true ) {
889
+
890
+ diffuseColor.a = smoothstep( alphaTestNode, alphaTestNode.add( fwidth( diffuseColor.a ) ), diffuseColor.a );
891
+ diffuseColor.a.lessThanEqual( 0 ).discard();
892
+
893
+ } else {
894
+
895
+ diffuseColor.a.lessThanEqual( alphaTestNode ).discard();
896
+
897
+ }
846
898
 
847
899
  }
848
900
 
@@ -856,16 +908,10 @@ class NodeMaterial extends Material {
856
908
 
857
909
  // OPAQUE
858
910
 
859
- const isOpaque = this.transparent === false && this.blending === NormalBlending && this.alphaToCoverage === false;
860
-
861
- if ( isOpaque ) {
911
+ if ( builder.isOpaque() ) {
862
912
 
863
913
  diffuseColor.a.assign( 1.0 );
864
914
 
865
- } else if ( alphaTestNode === null ) {
866
-
867
- diffuseColor.a.lessThanEqual( 0 ).discard();
868
-
869
915
  }
870
916
 
871
917
  }
@@ -977,9 +1023,21 @@ class NodeMaterial extends Material {
977
1023
 
978
1024
  }
979
1025
 
980
- if ( this.aoNode !== null || builder.material.aoMap ) {
1026
+ let aoNode = this.aoNode;
1027
+
1028
+ if ( aoNode === null && builder.material.aoMap ) {
1029
+
1030
+ aoNode = materialAO;
1031
+
1032
+ }
1033
+
1034
+ if ( builder.context.getAO ) {
1035
+
1036
+ aoNode = builder.context.getAO( aoNode, builder );
1037
+
1038
+ }
981
1039
 
982
- const aoNode = this.aoNode !== null ? this.aoNode : materialAO;
1040
+ if ( aoNode ) {
983
1041
 
984
1042
  materialLightsNode.push( new AONode( aoNode ) );
985
1043
 
@@ -1183,11 +1241,9 @@ class NodeMaterial extends Material {
1183
1241
  }
1184
1242
 
1185
1243
  const data = Material.prototype.toJSON.call( this, meta );
1186
- const nodeChildren = getNodeChildren( this );
1187
-
1188
1244
  data.inputNodes = {};
1189
1245
 
1190
- for ( const { property, childNode } of nodeChildren ) {
1246
+ for ( const { property, childNode } of this._getNodeChildren() ) {
1191
1247
 
1192
1248
  data.inputNodes[ property ] = childNode.toJSON( meta ).uuid;
1193
1249
 
@@ -1237,6 +1293,7 @@ class NodeMaterial extends Material {
1237
1293
 
1238
1294
  this.lightsNode = source.lightsNode;
1239
1295
  this.envNode = source.envNode;
1296
+ this.aoNode = source.aoNode;
1240
1297
 
1241
1298
  this.colorNode = source.colorNode;
1242
1299
  this.normalNode = source.normalNode;
@@ -1245,6 +1302,7 @@ class NodeMaterial extends Material {
1245
1302
  this.backdropAlphaNode = source.backdropAlphaNode;
1246
1303
  this.alphaTestNode = source.alphaTestNode;
1247
1304
  this.maskNode = source.maskNode;
1305
+ this.maskShadowNode = source.maskShadowNode;
1248
1306
 
1249
1307
  this.positionNode = source.positionNode;
1250
1308
  this.geometryNode = source.geometryNode;
@@ -1261,6 +1319,8 @@ class NodeMaterial extends Material {
1261
1319
  this.fragmentNode = source.fragmentNode;
1262
1320
  this.vertexNode = source.vertexNode;
1263
1321
 
1322
+ this.contextNode = source.contextNode;
1323
+
1264
1324
  return super.copy( source );
1265
1325
 
1266
1326
  }
@@ -1,18 +1,36 @@
1
1
  import SpriteNodeMaterial from './SpriteNodeMaterial.js';
2
- import { viewport } from '../../nodes/display/ScreenNode.js';
2
+ import { viewportSize, screenDPR } from '../../nodes/display/ScreenNode.js';
3
3
  import { positionGeometry, positionLocal, positionView } from '../../nodes/accessors/Position.js';
4
4
  import { modelViewMatrix } from '../../nodes/accessors/ModelNode.js';
5
5
  import { materialPointSize } from '../../nodes/accessors/MaterialNode.js';
6
6
  import { rotate } from '../../nodes/utils/RotateNode.js';
7
- import { float, vec2, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
7
+ import { float, uniform, vec2, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
8
8
 
9
9
  import { PointsMaterial } from '../PointsMaterial.js';
10
+ import { Vector2 } from '../../math/Vector2.js';
10
11
 
11
12
  const _defaultValues = /*@__PURE__*/ new PointsMaterial();
13
+ const _size = /*@__PURE__*/ new Vector2();
12
14
 
13
15
  /**
14
16
  * Node material version of {@link PointsMaterial}.
15
17
  *
18
+ * This material can be used in two ways:
19
+ *
20
+ * - By rendering point primitives with {@link Points}. Since WebGPU only supports point primitives
21
+ * with a pixel size of `1`, it's not possible to define a size.
22
+ *
23
+ * ```js
24
+ * const pointCloud = new THREE.Points( geometry, new THREE.PointsNodeMaterial() );
25
+ * ```
26
+ *
27
+ * - By rendering point primitives with {@link Sprites}. In this case, size is honored,
28
+ * see {@link PointsNodeMaterial#sizeNode}.
29
+ *
30
+ * ```js
31
+ * const instancedPoints = new THREE.Sprite( new THREE.PointsNodeMaterial( { positionNode: instancedBufferAttribute( positionAttribute ) } ) );
32
+ * ```
33
+ *
16
34
  * @augments SpriteNodeMaterial
17
35
  */
18
36
  class PointsNodeMaterial extends SpriteNodeMaterial {
@@ -68,68 +86,95 @@ class PointsNodeMaterial extends SpriteNodeMaterial {
68
86
 
69
87
  }
70
88
 
71
- setupVertex( builder ) {
89
+ setupVertexSprite( builder ) {
72
90
 
73
- const mvp = super.setupVertex( builder );
91
+ const { material, camera } = builder;
92
+
93
+ const { rotationNode, scaleNode, sizeNode, sizeAttenuation } = this;
94
+
95
+ let mvp = super.setupVertex( builder );
74
96
 
75
97
  // skip further processing if the material is not a node material
76
98
 
77
- if ( builder.material.isNodeMaterial !== true ) {
99
+ if ( material.isNodeMaterial !== true ) {
78
100
 
79
101
  return mvp;
80
102
 
81
103
  }
82
104
 
83
- // ndc space
105
+ // point size
84
106
 
85
- const { rotationNode, scaleNode, sizeNode } = this;
107
+ let pointSize = sizeNode !== null ? vec2( sizeNode ) : materialPointSize;
86
108
 
87
- const alignedPosition = positionGeometry.xy.toVar();
88
- const aspect = viewport.z.div( viewport.w );
109
+ pointSize = pointSize.mul( screenDPR );
89
110
 
90
- // rotation
111
+ // size attenuation
91
112
 
92
- if ( rotationNode && rotationNode.isNode ) {
113
+ if ( camera.isPerspectiveCamera && sizeAttenuation === true ) {
93
114
 
94
- const rotation = float( rotationNode );
115
+ // follow WebGLRenderer's implementation, and scale by half the canvas height in logical units
95
116
 
96
- alignedPosition.assign( rotate( alignedPosition, rotation ) );
117
+ pointSize = pointSize.mul( scale.div( positionView.z.negate() ) );
97
118
 
98
119
  }
99
120
 
100
- // point size
101
-
102
- let pointSize = sizeNode !== null ? vec2( sizeNode ) : materialPointSize;
121
+ // scale
103
122
 
104
- if ( this.sizeAttenuation === true ) {
123
+ if ( scaleNode && scaleNode.isNode ) {
105
124
 
106
- pointSize = pointSize.mul( pointSize.div( positionView.z.negate() ) );
125
+ pointSize = pointSize.mul( vec2( scaleNode ) );
107
126
 
108
127
  }
109
128
 
110
- // scale
129
+ // compute offset
111
130
 
112
- if ( scaleNode && scaleNode.isNode ) {
131
+ let offset = positionGeometry.xy;
113
132
 
114
- pointSize = pointSize.mul( vec2( scaleNode ) );
133
+ // apply rotation
134
+
135
+ if ( rotationNode && rotationNode.isNode ) {
136
+
137
+ const rotation = float( rotationNode );
138
+
139
+ offset = rotate( offset, rotation );
115
140
 
116
141
  }
117
142
 
118
- alignedPosition.mulAssign( pointSize.mul( 2 ) );
143
+ // account for point size
144
+
145
+ offset = offset.mul( pointSize );
146
+
147
+ // scale by viewport size
148
+
149
+ offset = offset.div( viewportSize.div( 2 ) );
119
150
 
120
- alignedPosition.assign( alignedPosition.div( viewport.z ) );
121
- alignedPosition.y.assign( alignedPosition.y.mul( aspect ) );
151
+ // compensate for the perspective divide
122
152
 
123
- // back to clip space
124
- alignedPosition.assign( alignedPosition.mul( mvp.w ) );
153
+ offset = offset.mul( mvp.w );
125
154
 
126
- //clipPos.xy += offset;
127
- mvp.addAssign( vec4( alignedPosition, 0, 0 ) );
155
+ // add offset
156
+
157
+ mvp = mvp.add( vec4( offset, 0, 0 ) );
128
158
 
129
159
  return mvp;
130
160
 
131
161
  }
132
162
 
163
+ setupVertex( builder ) {
164
+
165
+ if ( builder.object.isPoints ) {
166
+
167
+ return super.setupVertex( builder );
168
+
169
+
170
+ } else {
171
+
172
+ return this.setupVertexSprite( builder );
173
+
174
+ }
175
+
176
+ }
177
+
133
178
  /**
134
179
  * Whether alpha to coverage should be used or not.
135
180
  *
@@ -155,4 +200,12 @@ class PointsNodeMaterial extends SpriteNodeMaterial {
155
200
 
156
201
  }
157
202
 
203
+ const scale = /*@__PURE__*/ uniform( 1 ).onFrameUpdate( function ( { renderer } ) {
204
+
205
+ const size = renderer.getSize( _size ); // logical units
206
+
207
+ this.value = 0.5 * size.y;
208
+
209
+ } );
210
+
158
211
  export default PointsNodeMaterial;
@@ -1,5 +1,4 @@
1
1
  import NodeMaterial from './NodeMaterial.js';
2
- import { cameraProjectionMatrix } from '../../nodes/accessors/Camera.js';
3
2
  import { materialRotation } from '../../nodes/accessors/MaterialNode.js';
4
3
  import { modelViewMatrix, modelWorldMatrix } from '../../nodes/accessors/ModelNode.js';
5
4
  import { positionGeometry } from '../../nodes/accessors/Position.js';
@@ -111,9 +110,7 @@ class SpriteNodeMaterial extends NodeMaterial {
111
110
 
112
111
  const { object, camera } = builder;
113
112
 
114
- const sizeAttenuation = this.sizeAttenuation;
115
-
116
- const { positionNode, rotationNode, scaleNode } = this;
113
+ const { positionNode, rotationNode, scaleNode, sizeAttenuation } = this;
117
114
 
118
115
  const mvPosition = modelViewMatrix.mul( vec3( positionNode || 0 ) );
119
116
 
@@ -125,18 +122,9 @@ class SpriteNodeMaterial extends NodeMaterial {
125
122
 
126
123
  }
127
124
 
128
- if ( sizeAttenuation === false ) {
129
-
130
- if ( camera.isPerspectiveCamera ) {
131
-
132
- scale = scale.mul( mvPosition.z.negate() );
133
-
134
- } else {
135
-
136
- const orthoScale = float( 2.0 ).div( cameraProjectionMatrix.element( 1 ).element( 1 ) );
137
- scale = scale.mul( orthoScale.mul( 2 ) );
125
+ if ( camera.isPerspectiveCamera && sizeAttenuation === false ) {
138
126
 
139
- }
127
+ scale = scale.mul( mvPosition.z.negate() );
140
128
 
141
129
  }
142
130