super-three 0.176.0 → 0.177.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 (477) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +7631 -6743
  3. package/build/three.core.js +7496 -6758
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +172 -22
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +14 -6
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +3948 -1678
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +3941 -1678
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -1
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -0
  17. package/examples/jsm/capabilities/WebGPU.js +1 -0
  18. package/examples/jsm/controls/ArcballControls.js +14 -3
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +1 -0
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +18 -4
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +49 -35
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +12 -10
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +7 -0
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/lighting/TiledLighting.js +1 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +1 -0
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  79. package/examples/jsm/lines/Line2.js +1 -0
  80. package/examples/jsm/lines/LineGeometry.js +1 -0
  81. package/examples/jsm/lines/LineMaterial.js +4 -4
  82. package/examples/jsm/lines/LineSegments2.js +1 -0
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  84. package/examples/jsm/lines/Wireframe.js +1 -0
  85. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  88. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  89. package/examples/jsm/loaders/3DMLoader.js +1 -0
  90. package/examples/jsm/loaders/3MFLoader.js +1 -0
  91. package/examples/jsm/loaders/AMFLoader.js +1 -0
  92. package/examples/jsm/loaders/BVHLoader.js +1 -0
  93. package/examples/jsm/loaders/ColladaLoader.js +5 -4
  94. package/examples/jsm/loaders/DDSLoader.js +1 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  96. package/examples/jsm/loaders/EXRLoader.js +1 -0
  97. package/examples/jsm/loaders/FBXLoader.js +24 -22
  98. package/examples/jsm/loaders/FontLoader.js +1 -0
  99. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  100. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  102. package/examples/jsm/loaders/IESLoader.js +1 -0
  103. package/examples/jsm/loaders/KMZLoader.js +1 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  105. package/examples/jsm/loaders/KTXLoader.js +1 -0
  106. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  107. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  108. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  110. package/examples/jsm/loaders/LWOLoader.js +1 -13
  111. package/examples/jsm/loaders/LottieLoader.js +15 -0
  112. package/examples/jsm/loaders/MD2Loader.js +1 -0
  113. package/examples/jsm/loaders/MDDLoader.js +1 -0
  114. package/examples/jsm/loaders/MTLLoader.js +4 -3
  115. package/examples/jsm/loaders/MaterialXLoader.js +1 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  117. package/examples/jsm/loaders/OBJLoader.js +1 -0
  118. package/examples/jsm/loaders/PCDLoader.js +122 -19
  119. package/examples/jsm/loaders/PDBLoader.js +1 -0
  120. package/examples/jsm/loaders/PLYLoader.js +1 -0
  121. package/examples/jsm/loaders/PVRLoader.js +1 -0
  122. package/examples/jsm/loaders/RGBELoader.js +1 -0
  123. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  124. package/examples/jsm/loaders/STLLoader.js +1 -0
  125. package/examples/jsm/loaders/SVGLoader.js +1 -0
  126. package/examples/jsm/loaders/TDSLoader.js +1 -0
  127. package/examples/jsm/loaders/TGALoader.js +1 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  129. package/examples/jsm/loaders/TTFLoader.js +1 -0
  130. package/examples/jsm/loaders/USDZLoader.js +1 -0
  131. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  132. package/examples/jsm/loaders/VOXLoader.js +1 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  134. package/examples/jsm/loaders/VTKLoader.js +1 -0
  135. package/examples/jsm/loaders/XYZLoader.js +1 -0
  136. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  137. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  138. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  139. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  140. package/examples/jsm/math/Capsule.js +2 -0
  141. package/examples/jsm/math/ColorConverter.js +1 -0
  142. package/examples/jsm/math/ConvexHull.js +2 -0
  143. package/examples/jsm/math/ImprovedNoise.js +19 -14
  144. package/examples/jsm/math/Lut.js +2 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  146. package/examples/jsm/math/OBB.js +2 -0
  147. package/examples/jsm/math/Octree.js +20 -1
  148. package/examples/jsm/math/SimplexNoise.js +2 -0
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  150. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  151. package/examples/jsm/misc/Gyroscope.js +1 -0
  152. package/examples/jsm/misc/MD2Character.js +2 -0
  153. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  154. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  158. package/examples/jsm/misc/RollerCoaster.js +5 -0
  159. package/examples/jsm/misc/Timer.js +2 -0
  160. package/examples/jsm/misc/TubePainter.js +1 -0
  161. package/examples/jsm/misc/Volume.js +2 -0
  162. package/examples/jsm/misc/VolumeSlice.js +1 -0
  163. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  167. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  168. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  169. package/examples/jsm/objects/Lensflare.js +3 -0
  170. package/examples/jsm/objects/LensflareMesh.js +1 -0
  171. package/examples/jsm/objects/MarchingCubes.js +2 -0
  172. package/examples/jsm/objects/Reflector.js +1 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  174. package/examples/jsm/objects/Refractor.js +1 -0
  175. package/examples/jsm/objects/ShadowMesh.js +1 -0
  176. package/examples/jsm/objects/Sky.js +2 -1
  177. package/examples/jsm/objects/SkyMesh.js +20 -17
  178. package/examples/jsm/objects/Water.js +1 -0
  179. package/examples/jsm/objects/Water2.js +1 -0
  180. package/examples/jsm/objects/Water2Mesh.js +3 -1
  181. package/examples/jsm/objects/WaterMesh.js +2 -1
  182. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  183. package/examples/jsm/physics/JoltPhysics.js +1 -0
  184. package/examples/jsm/physics/RapierPhysics.js +58 -1
  185. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  186. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  187. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  188. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  190. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  191. package/examples/jsm/postprocessing/EffectComposer.js +5 -6
  192. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  193. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  194. package/examples/jsm/postprocessing/GTAOPass.js +4 -3
  195. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  196. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  197. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  198. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  199. package/examples/jsm/postprocessing/OutlinePass.js +5 -2
  200. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  201. package/examples/jsm/postprocessing/Pass.js +3 -1
  202. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  203. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  204. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  205. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  206. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  207. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  208. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  209. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  210. package/examples/jsm/postprocessing/SavePass.js +2 -1
  211. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  212. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  213. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  214. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  215. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  216. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  217. package/examples/jsm/renderers/Projector.js +2 -0
  218. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  219. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  220. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  221. package/examples/jsm/shaders/BasicShader.js +4 -1
  222. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  223. package/examples/jsm/shaders/BlendShader.js +4 -1
  224. package/examples/jsm/shaders/BokehShader.js +4 -1
  225. package/examples/jsm/shaders/BokehShader2.js +4 -1
  226. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  227. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  228. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  229. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  230. package/examples/jsm/shaders/CopyShader.js +4 -1
  231. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  232. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  233. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  234. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  235. package/examples/jsm/shaders/ExposureShader.js +4 -1
  236. package/examples/jsm/shaders/FXAAShader.js +4 -1
  237. package/examples/jsm/shaders/FilmShader.js +4 -1
  238. package/examples/jsm/shaders/FocusShader.js +4 -1
  239. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  240. package/examples/jsm/shaders/GTAOShader.js +4 -1
  241. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  242. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  243. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  244. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  245. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  246. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  247. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  248. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  249. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  250. package/examples/jsm/shaders/MirrorShader.js +4 -1
  251. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  252. package/examples/jsm/shaders/OutputShader.js +4 -1
  253. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  254. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  255. package/examples/jsm/shaders/SAOShader.js +4 -1
  256. package/examples/jsm/shaders/SMAAShader.js +1 -0
  257. package/examples/jsm/shaders/SSAOShader.js +4 -1
  258. package/examples/jsm/shaders/SSRShader.js +1 -0
  259. package/examples/jsm/shaders/SepiaShader.js +4 -1
  260. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  261. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  262. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  263. package/examples/jsm/shaders/ToonShader.js +2 -1
  264. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  265. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
  266. package/examples/jsm/shaders/VelocityShader.js +4 -1
  267. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  268. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  269. package/examples/jsm/shaders/VignetteShader.js +4 -1
  270. package/examples/jsm/shaders/VolumeShader.js +5 -2
  271. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  272. package/examples/jsm/textures/FlakesTexture.js +2 -0
  273. package/examples/jsm/transpiler/GLSLDecoder.js +1 -2
  274. package/examples/jsm/transpiler/TSLEncoder.js +52 -8
  275. package/examples/jsm/transpiler/Transpiler.js +2 -0
  276. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  277. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  278. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  279. package/examples/jsm/tsl/display/BloomNode.js +1 -0
  280. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  281. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  282. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  283. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  284. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  285. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  286. package/examples/jsm/tsl/display/GaussianBlurNode.js +2 -27
  287. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  288. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  289. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  290. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  291. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  292. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  293. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  294. package/examples/jsm/tsl/display/SSAAPassNode.js +3 -2
  295. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  296. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  297. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  298. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
  300. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  301. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  302. package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
  303. package/examples/jsm/tsl/math/Bayer.js +4 -1
  304. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  305. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  306. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  307. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  308. package/examples/jsm/utils/CameraUtils.js +4 -1
  309. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  310. package/examples/jsm/utils/GeometryUtils.js +4 -1
  311. package/examples/jsm/utils/LDrawUtils.js +2 -0
  312. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  313. package/examples/jsm/utils/SceneUtils.js +4 -1
  314. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  315. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  316. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  317. package/examples/jsm/utils/SortUtils.js +4 -1
  318. package/examples/jsm/utils/UVsDebug.js +4 -1
  319. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  320. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  321. package/examples/jsm/utils/WorkerPool.js +2 -0
  322. package/examples/jsm/webxr/ARButton.js +1 -0
  323. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  324. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  325. package/examples/jsm/webxr/Text2D.js +4 -1
  326. package/examples/jsm/webxr/VRButton.js +1 -0
  327. package/examples/jsm/webxr/XRButton.js +1 -0
  328. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  329. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  330. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  331. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  332. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  333. package/examples/jsm/webxr/XRPlanes.js +1 -0
  334. package/package.json +6 -4
  335. package/src/Three.Core.js +1 -1
  336. package/src/Three.TSL.js +13 -5
  337. package/src/Three.WebGPU.Nodes.js +1 -0
  338. package/src/Three.WebGPU.js +1 -0
  339. package/src/audio/AudioListener.js +13 -10
  340. package/src/cameras/ArrayCamera.js +9 -1
  341. package/src/constants.js +47 -20
  342. package/src/core/BufferAttribute.js +1 -1
  343. package/src/core/BufferGeometry.js +2 -5
  344. package/src/core/Object3D.js +22 -21
  345. package/src/core/RenderTarget.js +65 -21
  346. package/src/core/RenderTarget3D.js +1 -0
  347. package/src/extras/TextureUtils.js +1 -5
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/geometries/CapsuleGeometry.js +167 -17
  350. package/src/geometries/ExtrudeGeometry.js +39 -29
  351. package/src/helpers/ArrowHelper.js +2 -2
  352. package/src/helpers/SkeletonHelper.js +1 -1
  353. package/src/lights/LightShadow.js +14 -0
  354. package/src/lights/SpotLightShadow.js +9 -1
  355. package/src/lights/webgpu/ProjectorLight.js +46 -0
  356. package/src/loaders/BufferGeometryLoader.js +1 -10
  357. package/src/loaders/ImageBitmapLoader.js +21 -5
  358. package/src/loaders/ObjectLoader.js +44 -16
  359. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  360. package/src/materials/Material.js +1 -7
  361. package/src/materials/nodes/NodeMaterial.js +81 -18
  362. package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
  363. package/src/math/Box3.js +28 -0
  364. package/src/math/Color.js +7 -7
  365. package/src/math/ColorManagement.js +22 -3
  366. package/src/math/FrustumArray.js +253 -0
  367. package/src/math/Ray.js +2 -0
  368. package/src/math/Sphere.js +28 -0
  369. package/src/nodes/Nodes.js +1 -0
  370. package/src/nodes/TSL.js +1 -0
  371. package/src/nodes/accessors/Bitangent.js +31 -9
  372. package/src/nodes/accessors/Camera.js +31 -4
  373. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  374. package/src/nodes/accessors/InstanceNode.js +5 -4
  375. package/src/nodes/accessors/Lights.js +2 -2
  376. package/src/nodes/accessors/MaterialNode.js +4 -0
  377. package/src/nodes/accessors/ModelNode.js +1 -1
  378. package/src/nodes/accessors/Normal.js +26 -6
  379. package/src/nodes/accessors/Object3DNode.js +6 -7
  380. package/src/nodes/accessors/Position.js +14 -4
  381. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  382. package/src/nodes/accessors/ReferenceNode.js +1 -1
  383. package/src/nodes/accessors/SkinningNode.js +3 -2
  384. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  385. package/src/nodes/accessors/StorageTextureNode.js +14 -3
  386. package/src/nodes/accessors/TextureNode.js +59 -8
  387. package/src/nodes/accessors/VelocityNode.js +1 -0
  388. package/src/nodes/accessors/VertexColorNode.js +4 -4
  389. package/src/nodes/code/CodeNode.js +8 -11
  390. package/src/nodes/core/AssignNode.js +27 -5
  391. package/src/nodes/core/AttributeNode.js +2 -2
  392. package/src/nodes/core/CacheNode.js +14 -0
  393. package/src/nodes/core/ContextNode.js +7 -3
  394. package/src/nodes/core/Node.js +68 -19
  395. package/src/nodes/core/NodeBuilder.js +100 -12
  396. package/src/nodes/core/NodeUtils.js +42 -0
  397. package/src/nodes/core/NodeVarying.js +19 -1
  398. package/src/nodes/core/PropertyNode.js +8 -12
  399. package/src/nodes/core/StackNode.js +127 -2
  400. package/src/nodes/core/StructTypeNode.js +26 -4
  401. package/src/nodes/core/VarNode.js +11 -2
  402. package/src/nodes/core/VaryingNode.js +40 -21
  403. package/src/nodes/display/BlendModes.js +42 -1
  404. package/src/nodes/display/ColorSpaceNode.js +4 -27
  405. package/src/nodes/display/PassNode.js +8 -11
  406. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  407. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  408. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  409. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  410. package/src/nodes/gpgpu/ComputeNode.js +1 -1
  411. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  412. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  413. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  414. package/src/nodes/lighting/LightsNode.js +25 -7
  415. package/src/nodes/lighting/ProjectorLightNode.js +78 -0
  416. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  417. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  418. package/src/nodes/lighting/ShadowNode.js +172 -240
  419. package/src/nodes/lighting/SpotLightNode.js +44 -7
  420. package/src/nodes/materialx/lib/mx_noise.js +1 -1
  421. package/src/nodes/math/MathNode.js +56 -20
  422. package/src/nodes/math/OperatorNode.js +109 -82
  423. package/src/nodes/shapes/Shapes.js +5 -4
  424. package/src/nodes/tsl/TSLCore.js +140 -49
  425. package/src/nodes/utils/DebugNode.js +15 -3
  426. package/src/nodes/utils/Discard.js +2 -2
  427. package/src/nodes/utils/LoopNode.js +64 -17
  428. package/src/nodes/utils/ReflectorNode.js +67 -4
  429. package/src/objects/BatchedMesh.js +16 -4
  430. package/src/objects/Mesh.js +9 -0
  431. package/src/objects/Skeleton.js +1 -1
  432. package/src/objects/Sprite.js +9 -0
  433. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  434. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  435. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  436. package/src/renderers/WebGLRenderer.js +21 -10
  437. package/src/renderers/common/Animation.js +2 -2
  438. package/src/renderers/common/Background.js +11 -0
  439. package/src/renderers/common/RenderList.js +0 -4
  440. package/src/renderers/common/RenderObject.js +12 -1
  441. package/src/renderers/common/Renderer.js +116 -8
  442. package/src/renderers/common/Textures.js +15 -21
  443. package/src/renderers/common/TimestampQueryPool.js +1 -0
  444. package/src/renderers/common/Uniform.js +1 -1
  445. package/src/renderers/common/UniformsGroup.js +14 -18
  446. package/src/renderers/common/XRManager.js +154 -25
  447. package/src/renderers/common/extras/PMREMGenerator.js +29 -22
  448. package/src/renderers/common/nodes/Nodes.js +13 -3
  449. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  451. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  452. package/src/renderers/webgl/WebGLTextures.js +143 -4
  453. package/src/renderers/webgl/WebGLUtils.js +1 -3
  454. package/src/renderers/webgl-fallback/WebGLBackend.js +170 -34
  455. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -7
  456. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  457. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +42 -29
  458. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  459. package/src/renderers/webgpu/WebGPUBackend.js +442 -127
  460. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  461. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  462. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  463. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +75 -27
  464. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  465. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -1
  466. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -5
  467. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  468. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +34 -4
  469. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +44 -49
  470. package/src/renderers/webxr/WebXRController.js +1 -1
  471. package/src/renderers/webxr/WebXRManager.js +2 -1
  472. package/src/textures/DepthTexture.js +6 -10
  473. package/src/textures/Source.js +22 -0
  474. package/src/textures/Texture.js +118 -1
  475. package/src/textures/VideoTexture.js +1 -1
  476. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  477. package/src/core/RenderTargetArray.js +0 -40
package/src/math/Ray.js CHANGED
@@ -346,6 +346,8 @@ class Ray {
346
346
  */
347
347
  intersectsSphere( sphere ) {
348
348
 
349
+ if ( sphere.radius < 0 ) return false; // handle empty spheres, see #31187
350
+
349
351
  return this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );
350
352
 
351
353
  }
@@ -387,6 +387,34 @@ class Sphere {
387
387
 
388
388
  }
389
389
 
390
+ /**
391
+ * Returns a serialized structure of the bounding sphere.
392
+ *
393
+ * @return {Object} Serialized structure with fields representing the object state.
394
+ */
395
+ toJSON() {
396
+
397
+ return {
398
+ radius: this.radius,
399
+ center: this.center.toArray()
400
+ };
401
+
402
+ }
403
+
404
+ /**
405
+ * Returns a serialized structure of the bounding sphere.
406
+ *
407
+ * @param {Object} json - The serialized json to set the sphere from.
408
+ * @return {Box3} A reference to this bounding sphere.
409
+ */
410
+ fromJSON( json ) {
411
+
412
+ this.radius = json.radius;
413
+ this.center.fromArray( json.center );
414
+ return this;
415
+
416
+ }
417
+
390
418
  }
391
419
 
392
420
  export { Sphere };
@@ -120,6 +120,7 @@ export { default as DirectionalLightNode } from './lighting/DirectionalLightNode
120
120
  export { default as RectAreaLightNode } from './lighting/RectAreaLightNode.js';
121
121
  export { default as SpotLightNode } from './lighting/SpotLightNode.js';
122
122
  export { default as IESSpotLightNode } from './lighting/IESSpotLightNode.js';
123
+ export { default as ProjectorLightNode } from './lighting/ProjectorLightNode.js';
123
124
  export { default as AmbientLightNode } from './lighting/AmbientLightNode.js';
124
125
  export { default as LightsNode } from './lighting/LightsNode.js';
125
126
  export { default as LightingNode } from './lighting/LightingNode.js';
package/src/nodes/TSL.js CHANGED
@@ -134,6 +134,7 @@ export * from './lighting/LightsNode.js';
134
134
  export * from './lighting/LightingContextNode.js';
135
135
  export * from './lighting/ShadowBaseNode.js';
136
136
  export * from './lighting/ShadowNode.js';
137
+ export * from './lighting/ShadowFilterNode.js';
137
138
  export * from './lighting/PointShadowNode.js';
138
139
  export * from './lighting/PointLightNode.js';
139
140
 
@@ -1,9 +1,31 @@
1
1
  import { varying } from '../core/VaryingNode.js';
2
+ import { Fn } from '../tsl/TSLCore.js';
2
3
  import { cameraViewMatrix } from './Camera.js';
3
4
  import { normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView } from './Normal.js';
4
5
  import { tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView } from './Tangent.js';
5
6
 
6
- const getBitangent = ( crossNormalTangent ) => crossNormalTangent.mul( tangentGeometry.w ).xyz;
7
+ /**
8
+ * Returns the bitangent node and assigns it to a varying if the material is not flat shaded.
9
+ *
10
+ * @tsl
11
+ * @private
12
+ * @param {Node<vec3>} crossNormalTangent - The cross product of the normal and tangent vectors.
13
+ * @param {string} varyingName - The name of the varying to assign the bitangent to.
14
+ * @returns {Node<vec3>} The bitangent node.
15
+ */
16
+ const getBitangent = /*@__PURE__*/ Fn( ( [ crossNormalTangent, varyingName ], builder ) => {
17
+
18
+ let bitangent = crossNormalTangent.mul( tangentGeometry.w ).xyz;
19
+
20
+ if ( builder.material.flatShading !== true ) {
21
+
22
+ bitangent = varying( bitangent, varyingName );
23
+
24
+ }
25
+
26
+ return bitangent;
27
+
28
+ } ).once();
7
29
 
8
30
  /**
9
31
  * TSL object that represents the bitangent attribute of the current rendered object.
@@ -11,7 +33,7 @@ const getBitangent = ( crossNormalTangent ) => crossNormalTangent.mul( tangentGe
11
33
  * @tsl
12
34
  * @type {Node<vec3>}
13
35
  */
14
- export const bitangentGeometry = /*@__PURE__*/ varying( getBitangent( normalGeometry.cross( tangentGeometry ) ), 'v_bitangentGeometry' ).normalize().toVar( 'bitangentGeometry' );
36
+ export const bitangentGeometry = /*@__PURE__*/ getBitangent( normalGeometry.cross( tangentGeometry ), 'v_bitangentGeometry' ).normalize().toVar( 'bitangentGeometry' );
15
37
 
16
38
  /**
17
39
  * TSL object that represents the vertex bitangent in local space of the current rendered object.
@@ -19,31 +41,31 @@ export const bitangentGeometry = /*@__PURE__*/ varying( getBitangent( normalGeom
19
41
  * @tsl
20
42
  * @type {Node<vec3>}
21
43
  */
22
- export const bitangentLocal = /*@__PURE__*/ varying( getBitangent( normalLocal.cross( tangentLocal ) ), 'v_bitangentLocal' ).normalize().toVar( 'bitangentLocal' );
44
+ export const bitangentLocal = /*@__PURE__*/ getBitangent( normalLocal.cross( tangentLocal ), 'v_bitangentLocal' ).normalize().toVar( 'bitangentLocal' );
23
45
 
24
46
  /**
25
47
  * TSL object that represents the vertex bitangent in view space of the current rendered object.
26
48
  *
27
49
  * @tsl
28
- * @type {Node<vec4>}
50
+ * @type {Node<vec3>}
29
51
  */
30
- export const bitangentView = /*@__PURE__*/ varying( getBitangent( normalView.cross( tangentView ) ), 'v_bitangentView' ).normalize().toVar( 'bitangentView' );
52
+ export const bitangentView = getBitangent( normalView.cross( tangentView ), 'v_bitangentView' ).normalize().toVar( 'bitangentView' );
31
53
 
32
54
  /**
33
55
  * TSL object that represents the vertex bitangent in world space of the current rendered object.
34
56
  *
35
57
  * @tsl
36
- * @type {Node<vec4>}
58
+ * @type {Node<vec3>}
37
59
  */
38
- export const bitangentWorld = /*@__PURE__*/ varying( getBitangent( normalWorld.cross( tangentWorld ) ), 'v_bitangentWorld' ).normalize().toVar( 'bitangentWorld' );
60
+ export const bitangentWorld = /*@__PURE__*/ getBitangent( normalWorld.cross( tangentWorld ), 'v_bitangentWorld' ).normalize().toVar( 'bitangentWorld' );
39
61
 
40
62
  /**
41
63
  * TSL object that represents the transformed vertex bitangent in view space of the current rendered object.
42
64
  *
43
65
  * @tsl
44
- * @type {Node<vec4>}
66
+ * @type {Node<vec3>}
45
67
  */
46
- export const transformedBitangentView = /*@__PURE__*/ getBitangent( transformedNormalView.cross( transformedTangentView ) ).normalize().toVar( 'transformedBitangentView' );
68
+ export const transformedBitangentView = /*@__PURE__*/ getBitangent( transformedNormalView.cross( transformedTangentView ), 'v_transformedBitangentView' ).normalize().toVar( 'transformedBitangentView' );
47
69
 
48
70
  /**
49
71
  * TSL object that represents the transformed vertex bitangent in world space of the current rendered object.
@@ -3,6 +3,7 @@ import { renderGroup, sharedUniformGroup } from '../core/UniformGroupNode.js';
3
3
  import { Vector3 } from '../../math/Vector3.js';
4
4
  import { Fn } from '../tsl/TSLBase.js';
5
5
  import { uniformArray } from './UniformArrayNode.js';
6
+ import { builtin } from './BuiltinNode.js';
6
7
 
7
8
  /**
8
9
  * TSL object that represents the current `index` value of the camera if used ArrayCamera.
@@ -10,7 +11,7 @@ import { uniformArray } from './UniformArrayNode.js';
10
11
  * @tsl
11
12
  * @type {UniformNode<uint>}
12
13
  */
13
- export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).setGroup( sharedUniformGroup( 'cameraIndex' ) ).toVarying( 'v_cameraIndex' );
14
+ export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).label( 'u_cameraIndex' ).setGroup( sharedUniformGroup( 'cameraIndex' ) ).toVarying( 'v_cameraIndex' );
14
15
 
15
16
  /**
16
17
  * TSL object that represents the `near` value of the camera used for the current render.
@@ -50,7 +51,7 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
50
51
 
51
52
  const cameraProjectionMatrices = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraProjectionMatrices' );
52
53
 
53
- cameraProjectionMatrix = cameraProjectionMatrices.element( cameraIndex ).toVar( 'cameraProjectionMatrix' );
54
+ cameraProjectionMatrix = cameraProjectionMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraProjectionMatrix' );
54
55
 
55
56
  } else {
56
57
 
@@ -68,7 +69,33 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
68
69
  * @tsl
69
70
  * @type {UniformNode<mat4>}
70
71
  */
71
- export const cameraProjectionMatrixInverse = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );
72
+ export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } ) => {
73
+
74
+ let cameraProjectionMatrixInverse;
75
+
76
+ if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
77
+
78
+ const matrices = [];
79
+
80
+ for ( const subCamera of camera.cameras ) {
81
+
82
+ matrices.push( subCamera.projectionMatrixInverse );
83
+
84
+ }
85
+
86
+ const cameraProjectionMatricesInverse = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraProjectionMatricesInverse' );
87
+
88
+ cameraProjectionMatrixInverse = cameraProjectionMatricesInverse.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraProjectionMatrixInverse' );
89
+
90
+ } else {
91
+
92
+ cameraProjectionMatrixInverse = uniform( 'mat4' ).label( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );
93
+
94
+ }
95
+
96
+ return cameraProjectionMatrixInverse;
97
+
98
+ } ).once() )();
72
99
 
73
100
  /**
74
101
  * TSL object that represents the view matrix of the camera used for the current render.
@@ -92,7 +119,7 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
92
119
 
93
120
  const cameraViewMatrices = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraViewMatrices' );
94
121
 
95
- cameraViewMatrix = cameraViewMatrices.element( cameraIndex ).toVar( 'cameraViewMatrix' );
122
+ cameraViewMatrix = cameraViewMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraViewMatrix' );
96
123
 
97
124
  } else {
98
125
 
@@ -1,10 +1,14 @@
1
1
  import TextureNode from './TextureNode.js';
2
2
  import { reflectVector, refractVector } from './ReflectVector.js';
3
- import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
3
+ import { nodeObject, nodeProxy, vec3 } from '../tsl/TSLBase.js';
4
4
 
5
5
  import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem } from '../../constants.js';
6
6
  import { materialEnvRotation } from './MaterialProperties.js';
7
7
 
8
+ import { CubeTexture } from '../../textures/CubeTexture.js';
9
+
10
+ const EmptyTexture = /*@__PURE__*/ new CubeTexture();
11
+
8
12
  /**
9
13
  * This type of uniform node represents a cube texture.
10
14
  *
@@ -138,4 +142,48 @@ export default CubeTextureNode;
138
142
  * @param {?Node<float>} [biasNode=null] - The bias node.
139
143
  * @returns {CubeTextureNode}
140
144
  */
141
- export const cubeTexture = /*@__PURE__*/ nodeProxy( CubeTextureNode ).setParameterLength( 1, 4 ).setName( 'cubeTexture' );
145
+ export const cubeTextureBase = /*@__PURE__*/ nodeProxy( CubeTextureNode ).setParameterLength( 1, 4 ).setName( 'cubeTexture' );
146
+
147
+ /**
148
+ * TSL function for creating a cube texture uniform node.
149
+ *
150
+ * @tsl
151
+ * @function
152
+ * @param {?CubeTexture|CubeTextureNode} [value=EmptyTexture] - The cube texture.
153
+ * @param {?Node<vec3>} [uvNode=null] - The uv node.
154
+ * @param {?Node<int>} [levelNode=null] - The level node.
155
+ * @param {?Node<float>} [biasNode=null] - The bias node.
156
+ * @returns {CubeTextureNode}
157
+ */
158
+ export const cubeTexture = ( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) => {
159
+
160
+ let textureNode;
161
+
162
+ if ( value && value.isCubeTextureNode === true ) {
163
+
164
+ textureNode = nodeObject( value.clone() );
165
+ textureNode.referenceNode = value.getSelf(); // Ensure the reference is set to the original node
166
+
167
+ if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
168
+ if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
169
+ if ( biasNode !== null ) textureNode.biasNode = nodeObject( biasNode );
170
+
171
+ } else {
172
+
173
+ textureNode = cubeTextureBase( value, uvNode, levelNode, biasNode );
174
+
175
+ }
176
+
177
+ return textureNode;
178
+
179
+ };
180
+
181
+ /**
182
+ * TSL function for creating a uniform cube texture node.
183
+ *
184
+ * @tsl
185
+ * @function
186
+ * @param {?CubeTexture} [value=EmptyTexture] - The cube texture.
187
+ * @returns {CubeTextureNode}
188
+ */
189
+ export const uniformCubeTexture = ( value = EmptyTexture ) => cubeTextureBase( value );
@@ -33,9 +33,9 @@ class InstanceNode extends Node {
33
33
  *
34
34
  * @param {number} count - The number of instances.
35
35
  * @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
36
- * @param {InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
36
+ * @param {?InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
37
37
  */
38
- constructor( count, instanceMatrix, instanceColor ) {
38
+ constructor( count, instanceMatrix, instanceColor = null ) {
39
39
 
40
40
  super( 'void' );
41
41
 
@@ -71,6 +71,7 @@ class InstanceNode extends Node {
71
71
  * The node that represents the instance color data.
72
72
  *
73
73
  * @type {?Node}
74
+ * @default null
74
75
  */
75
76
  this.instanceColorNode = null;
76
77
 
@@ -217,7 +218,7 @@ export default InstanceNode;
217
218
  * @function
218
219
  * @param {number} count - The number of instances.
219
220
  * @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
220
- * @param {InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
221
+ * @param {?InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
221
222
  * @returns {InstanceNode}
222
223
  */
223
- export const instance = /*@__PURE__*/ nodeProxy( InstanceNode ).setParameterLength( 3 );
224
+ export const instance = /*@__PURE__*/ nodeProxy( InstanceNode ).setParameterLength( 2, 3 );
@@ -30,9 +30,9 @@ export function lightShadowMatrix( light ) {
30
30
 
31
31
  const data = getLightData( light );
32
32
 
33
- return data.shadowMatrix || ( data.shadowMatrix = uniform( 'mat4' ).setGroup( renderGroup ).onRenderUpdate( () => {
33
+ return data.shadowMatrix || ( data.shadowMatrix = uniform( 'mat4' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => {
34
34
 
35
- if ( light.castShadow !== true ) {
35
+ if ( light.castShadow !== true || frame.renderer.shadowMap.enabled === false ) {
36
36
 
37
37
  light.shadow.updateMatrices( light );
38
38
 
@@ -386,6 +386,10 @@ class MaterialNode extends Node {
386
386
 
387
387
  node = this.getTexture( scope ).r.sub( 1.0 ).mul( this.getFloat( 'aoMapIntensity' ) ).add( 1.0 );
388
388
 
389
+ } else if ( scope === MaterialNode.LINE_DASH_OFFSET ) {
390
+
391
+ node = ( material.dashOffset ) ? this.getFloat( scope ) : float( 0 );
392
+
389
393
  } else {
390
394
 
391
395
  const outputType = this.getNodeType( builder );
@@ -123,7 +123,7 @@ export const modelWorldMatrixInverse = /*@__PURE__*/ uniform( new Matrix4() ).on
123
123
  */
124
124
  export const modelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
125
125
 
126
- return builder.renderer.nodes.modelViewMatrix || mediumpModelViewMatrix;
126
+ return builder.renderer.overrideNodes.modelViewMatrix || mediumpModelViewMatrix;
127
127
 
128
128
  } ).once() )().toVar( 'modelViewMatrix' );
129
129
 
@@ -71,7 +71,19 @@ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
71
71
  * @tsl
72
72
  * @type {Node<vec3>}
73
73
  */
74
- export const normalWorld = /*@__PURE__*/ varying( normalView.transformDirection( cameraViewMatrix ), 'v_normalWorld' ).normalize().toVar( 'normalWorld' );
74
+ export const normalWorld = /*@__PURE__*/ ( Fn( ( builder ) => {
75
+
76
+ let normal = normalView.transformDirection( cameraViewMatrix );
77
+
78
+ if ( builder.material.flatShading !== true ) {
79
+
80
+ normal = varying( normal, 'v_normalWorld' );
81
+
82
+ }
83
+
84
+ return normal;
85
+
86
+ }, 'vec3' ).once() )().normalize().toVar( 'normalWorld' );
75
87
 
76
88
  /**
77
89
  * TSL object that represents the transformed vertex normal in view space of the current rendered object.
@@ -83,9 +95,13 @@ export const transformedNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
83
95
 
84
96
  // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
85
97
 
86
- return builder.context.setupNormal().context( { getUV: null } );
98
+ let node = builder.context.setupNormal().context( { getUV: null } );
87
99
 
88
- }, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedNormalView' );
100
+ if ( builder.material.flatShading !== true ) node = node.mul( faceDirection );
101
+
102
+ return node;
103
+
104
+ }, 'vec3' ).once() )().toVar( 'transformedNormalView' );
89
105
 
90
106
  /**
91
107
  * TSL object that represents the transformed vertex normal in world space of the current rendered object.
@@ -105,9 +121,13 @@ export const transformedClearcoatNormalView = /*@__PURE__*/ ( Fn( ( builder ) =>
105
121
 
106
122
  // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
107
123
 
108
- return builder.context.setupClearcoatNormal().context( { getUV: null } );
124
+ let node = builder.context.setupClearcoatNormal().context( { getUV: null } );
125
+
126
+ if ( builder.material.flatShading !== true ) node = node.mul( faceDirection );
127
+
128
+ return node;
109
129
 
110
- }, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedClearcoatNormalView' );
130
+ }, 'vec3' ).once() )().toVar( 'transformedClearcoatNormalView' );
111
131
 
112
132
  /**
113
133
  * Transforms the normal with the given matrix.
@@ -139,7 +159,7 @@ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorld
139
159
  */
140
160
  export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
141
161
 
142
- const modelNormalViewMatrix = builder.renderer.nodes.modelNormalViewMatrix;
162
+ const modelNormalViewMatrix = builder.renderer.overrideNodes.modelNormalViewMatrix;
143
163
 
144
164
  if ( modelNormalViewMatrix !== null ) {
145
165
 
@@ -64,10 +64,9 @@ class Object3DNode extends Node {
64
64
  /**
65
65
  * Holds the value of the node as a uniform.
66
66
  *
67
- * @private
68
67
  * @type {UniformNode}
69
68
  */
70
- this._uniformNode = new UniformNode( null );
69
+ this.uniformNode = new UniformNode( null );
71
70
 
72
71
  }
73
72
 
@@ -104,7 +103,7 @@ class Object3DNode extends Node {
104
103
  update( frame ) {
105
104
 
106
105
  const object = this.object3d;
107
- const uniformNode = this._uniformNode;
106
+ const uniformNode = this.uniformNode;
108
107
  const scope = this.scope;
109
108
 
110
109
  if ( scope === Object3DNode.WORLD_MATRIX ) {
@@ -165,19 +164,19 @@ class Object3DNode extends Node {
165
164
 
166
165
  if ( scope === Object3DNode.WORLD_MATRIX ) {
167
166
 
168
- this._uniformNode.nodeType = 'mat4';
167
+ this.uniformNode.nodeType = 'mat4';
169
168
 
170
169
  } else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {
171
170
 
172
- this._uniformNode.nodeType = 'vec3';
171
+ this.uniformNode.nodeType = 'vec3';
173
172
 
174
173
  } else if ( scope === Object3DNode.RADIUS ) {
175
174
 
176
- this._uniformNode.nodeType = 'float';
175
+ this.uniformNode.nodeType = 'float';
177
176
 
178
177
  }
179
178
 
180
- return this._uniformNode.build( builder );
179
+ return this.uniformNode.build( builder );
181
180
 
182
181
  }
183
182
 
@@ -33,7 +33,11 @@ export const positionPrevious = /*@__PURE__*/ positionGeometry.toVarying( 'posit
33
33
  * @tsl
34
34
  * @type {VaryingNode<vec3>}
35
35
  */
36
- export const positionWorld = /*@__PURE__*/ modelWorldMatrix.mul( positionLocal ).xyz.toVarying( 'v_positionWorld' ).context( { needsPositionReassign: true } );
36
+ export const positionWorld = /*@__PURE__*/ ( Fn( ( builder ) => {
37
+
38
+ return modelWorldMatrix.mul( positionLocal ).xyz.toVarying( builder.getNamespace( 'v_positionWorld' ) );
39
+
40
+ }, 'vec3' ).once( 'POSITION' ) )();
37
41
 
38
42
  /**
39
43
  * TSL object that represents the position world direction of the current rendered object.
@@ -41,7 +45,13 @@ export const positionWorld = /*@__PURE__*/ modelWorldMatrix.mul( positionLocal )
41
45
  * @tsl
42
46
  * @type {Node<vec3>}
43
47
  */
44
- export const positionWorldDirection = /*@__PURE__*/ positionLocal.transformDirection( modelWorldMatrix ).toVarying( 'v_positionWorldDirection' ).normalize().toVar( 'positionWorldDirection' ).context( { needsPositionReassign: true } );
48
+ export const positionWorldDirection = /*@__PURE__*/ ( Fn( ( builder ) => {
49
+
50
+ const vertexPWD = positionLocal.transformDirection( modelWorldMatrix ).toVarying( builder.getNamespace( 'v_positionWorldDirection' ) );
51
+
52
+ return vertexPWD.normalize().toVar( 'positionWorldDirection' );
53
+
54
+ }, 'vec3' ).once( 'POSITION' ) )();
45
55
 
46
56
  /**
47
57
  * TSL object that represents the vertex position in view space of the current rendered object.
@@ -51,9 +61,9 @@ export const positionWorldDirection = /*@__PURE__*/ positionLocal.transformDirec
51
61
  */
52
62
  export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
53
63
 
54
- return builder.context.setupPositionView();
64
+ return builder.context.setupPositionView().toVarying( builder.getNamespace( 'v_positionView' ) );
55
65
 
56
- }, 'vec3' ).once() )().toVarying( 'v_positionView' ).context( { needsPositionReassign: true } );
66
+ }, 'vec3' ).once( 'POSITION' ) )();
57
67
 
58
68
  /**
59
69
  * TSL object that represents the position view direction of the current rendered object.
@@ -294,7 +294,7 @@ class ReferenceBaseNode extends Node {
294
294
  }
295
295
 
296
296
  /**
297
- * Overwritten to to update the internal uniform value.
297
+ * Overwritten to update the internal uniform value.
298
298
  *
299
299
  * @param {NodeFrame} frame - A reference to the current node frame.
300
300
  */
@@ -345,7 +345,7 @@ class ReferenceNode extends Node {
345
345
  }
346
346
 
347
347
  /**
348
- * Overwritten to to update the internal uniform value.
348
+ * Overwritten to update the internal uniform value.
349
349
  *
350
350
  * @param {NodeFrame} frame - A reference to the current node frame.
351
351
  */
@@ -178,7 +178,7 @@ class SkinningNode extends Node {
178
178
  }
179
179
 
180
180
  /**
181
- * Transforms the given vertex normal via skinning.
181
+ * Computes the transformed/skinned vertex position of the previous frame.
182
182
  *
183
183
  * @param {NodeBuilder} builder - The current node builder.
184
184
  * @return {Node<vec3>} The skinned position from the previous frame.
@@ -200,7 +200,8 @@ class SkinningNode extends Node {
200
200
  }
201
201
 
202
202
  /**
203
- * Returns `true` if bone matrices from the previous frame are required.
203
+ * Returns `true` if bone matrices from the previous frame are required. Relevant
204
+ * when computing motion vectors with {@link VelocityNode}.
204
205
  *
205
206
  * @param {NodeBuilder} builder - The current node builder.
206
207
  * @return {boolean} Whether bone matrices from the previous frame are required or not.
@@ -60,6 +60,12 @@ class StorageBufferNode extends BufferNode {
60
60
  nodeType = 'struct';
61
61
  structTypeNode = bufferType.layout;
62
62
 
63
+ if ( value.isStorageBufferAttribute || value.isStorageInstancedBufferAttribute ) {
64
+
65
+ bufferCount = value.count;
66
+
67
+ }
68
+
63
69
  } else if ( bufferType === null && ( value.isStorageBufferAttribute || value.isStorageInstancedBufferAttribute ) ) {
64
70
 
65
71
  nodeType = getTypeFromLength( value.itemSize );
@@ -329,6 +335,25 @@ class StorageBufferNode extends BufferNode {
329
335
 
330
336
  }
331
337
 
338
+ /**
339
+ * Returns the type of a member of the struct.
340
+ *
341
+ * @param {NodeBuilder} builder - The current node builder.
342
+ * @param {string} name - The name of the member.
343
+ * @return {string} The type of the member.
344
+ */
345
+ getMemberType( builder, name ) {
346
+
347
+ if ( this.structTypeNode !== null ) {
348
+
349
+ return this.structTypeNode.getMemberType( builder, name );
350
+
351
+ }
352
+
353
+ return 'void';
354
+
355
+ }
356
+
332
357
  /**
333
358
  * Generates the code snippet of the storage buffer node.
334
359
  *
@@ -98,6 +98,8 @@ class StorageTextureNode extends TextureNode {
98
98
  const properties = builder.getNodeProperties( this );
99
99
  properties.storeNode = this.storeNode;
100
100
 
101
+ return properties;
102
+
101
103
  }
102
104
 
103
105
  /**
@@ -181,18 +183,27 @@ class StorageTextureNode extends TextureNode {
181
183
 
182
184
  const properties = builder.getNodeProperties( this );
183
185
 
184
- const { uvNode, storeNode } = properties;
186
+ const { uvNode, storeNode, depthNode } = properties;
185
187
 
186
188
  const textureProperty = super.generate( builder, 'property' );
187
189
  const uvSnippet = uvNode.build( builder, 'uvec2' );
188
190
  const storeSnippet = storeNode.build( builder, 'vec4' );
191
+ const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
189
192
 
190
- const snippet = builder.generateTextureStore( builder, textureProperty, uvSnippet, storeSnippet );
193
+ const snippet = builder.generateTextureStore( builder, textureProperty, uvSnippet, depthSnippet, storeSnippet );
191
194
 
192
195
  builder.addLineFlowCode( snippet, this );
193
196
 
194
197
  }
195
198
 
199
+ clone() {
200
+
201
+ const newNode = super.clone();
202
+ newNode.storeNode = this.storeNode;
203
+ return newNode;
204
+
205
+ }
206
+
196
207
  }
197
208
 
198
209
  export default StorageTextureNode;
@@ -224,7 +235,7 @@ export const textureStore = ( value, uvNode, storeNode ) => {
224
235
 
225
236
  const node = storageTexture( value, uvNode, storeNode );
226
237
 
227
- if ( storeNode !== null ) node.append();
238
+ if ( storeNode !== null ) node.toStack();
228
239
 
229
240
  return node;
230
241