@plastic-software/three 0.175.13 → 0.178.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 (529) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +7747 -6792
  3. package/build/three.core.js +7371 -6576
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +190 -30
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +19 -11
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +4989 -2235
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +5082 -2469
  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 -27
  17. package/examples/jsm/capabilities/WebGPU.js +1 -0
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  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 +62 -14
  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 +2 -1
  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 +6 -5
  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 +25 -23
  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 +139 -12
  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 +4 -2
  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/AST.js +381 -30
  274. package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
  275. package/examples/jsm/transpiler/Linker.js +327 -0
  276. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  277. package/examples/jsm/transpiler/Transpiler.js +19 -1
  278. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  279. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  280. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  281. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  282. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  283. package/examples/jsm/tsl/display/BloomNode.js +1 -0
  284. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  285. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  286. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  287. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  288. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  289. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  290. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  291. package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
  292. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  293. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  294. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  295. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  296. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  297. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  298. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  299. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  300. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  301. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  302. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  303. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  304. package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
  305. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  306. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  307. package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
  308. package/examples/jsm/tsl/math/Bayer.js +4 -1
  309. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  310. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  311. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  312. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  313. package/examples/jsm/utils/CameraUtils.js +4 -1
  314. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  315. package/examples/jsm/utils/GeometryUtils.js +4 -1
  316. package/examples/jsm/utils/LDrawUtils.js +2 -0
  317. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  318. package/examples/jsm/utils/SceneUtils.js +4 -1
  319. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  320. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  321. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  322. package/examples/jsm/utils/SortUtils.js +4 -1
  323. package/examples/jsm/utils/UVsDebug.js +4 -1
  324. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  325. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  326. package/examples/jsm/utils/WorkerPool.js +2 -0
  327. package/examples/jsm/webxr/ARButton.js +1 -0
  328. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  329. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  330. package/examples/jsm/webxr/Text2D.js +4 -1
  331. package/examples/jsm/webxr/VRButton.js +1 -0
  332. package/examples/jsm/webxr/XRButton.js +1 -0
  333. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  334. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  335. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  336. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  338. package/examples/jsm/webxr/XRPlanes.js +1 -0
  339. package/package.json +6 -4
  340. package/src/Three.Core.js +1 -1
  341. package/src/Three.TSL.js +18 -10
  342. package/src/Three.WebGPU.Nodes.js +1 -0
  343. package/src/Three.WebGPU.js +3 -0
  344. package/src/audio/AudioListener.js +13 -10
  345. package/src/cameras/ArrayCamera.js +9 -1
  346. package/src/constants.js +47 -20
  347. package/src/core/BufferAttribute.js +3 -3
  348. package/src/core/BufferGeometry.js +2 -5
  349. package/src/core/Clock.js +2 -8
  350. package/src/core/GLBufferAttribute.js +13 -1
  351. package/src/core/Object3D.js +23 -22
  352. package/src/core/RenderTarget.js +65 -21
  353. package/src/core/RenderTarget3D.js +1 -0
  354. package/src/extras/TextureUtils.js +1 -5
  355. package/src/extras/core/Curve.js +1 -1
  356. package/src/extras/core/Path.js +22 -22
  357. package/src/geometries/CapsuleGeometry.js +167 -17
  358. package/src/geometries/ExtrudeGeometry.js +39 -29
  359. package/src/helpers/ArrowHelper.js +2 -2
  360. package/src/helpers/SkeletonHelper.js +1 -1
  361. package/src/lights/LightShadow.js +14 -0
  362. package/src/lights/SpotLightShadow.js +9 -1
  363. package/src/lights/webgpu/ProjectorLight.js +46 -0
  364. package/src/loaders/BufferGeometryLoader.js +1 -10
  365. package/src/loaders/FileLoader.js +2 -2
  366. package/src/loaders/ImageBitmapLoader.js +25 -9
  367. package/src/loaders/ImageLoader.js +55 -8
  368. package/src/loaders/ObjectLoader.js +44 -16
  369. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  370. package/src/materials/Material.js +1 -7
  371. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  372. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  373. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  374. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  375. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  376. package/src/materials/nodes/NodeMaterial.js +105 -19
  377. package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
  378. package/src/math/Box3.js +28 -0
  379. package/src/math/Color.js +7 -7
  380. package/src/math/ColorManagement.js +22 -3
  381. package/src/math/Frustum.js +6 -1
  382. package/src/math/FrustumArray.js +253 -0
  383. package/src/math/Quaternion.js +1 -1
  384. package/src/math/Ray.js +2 -0
  385. package/src/math/Sphere.js +28 -0
  386. package/src/nodes/Nodes.js +2 -3
  387. package/src/nodes/TSL.js +5 -3
  388. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  389. package/src/nodes/accessors/Bitangent.js +54 -26
  390. package/src/nodes/accessors/Camera.js +31 -4
  391. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  392. package/src/nodes/accessors/InstanceNode.js +5 -4
  393. package/src/nodes/accessors/Lights.js +2 -2
  394. package/src/nodes/accessors/MaterialNode.js +4 -0
  395. package/src/nodes/accessors/ModelNode.js +1 -1
  396. package/src/nodes/accessors/Normal.js +102 -16
  397. package/src/nodes/accessors/Object3DNode.js +7 -8
  398. package/src/nodes/accessors/Position.js +14 -4
  399. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  400. package/src/nodes/accessors/ReferenceNode.js +1 -1
  401. package/src/nodes/accessors/ReflectVector.js +3 -3
  402. package/src/nodes/accessors/SkinningNode.js +3 -2
  403. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  404. package/src/nodes/accessors/StorageTextureNode.js +14 -3
  405. package/src/nodes/accessors/Tangent.js +25 -17
  406. package/src/nodes/accessors/TangentUtils.js +46 -0
  407. package/src/nodes/accessors/TextureBicubic.js +21 -3
  408. package/src/nodes/accessors/TextureNode.js +59 -8
  409. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  410. package/src/nodes/accessors/VelocityNode.js +1 -0
  411. package/src/nodes/accessors/VertexColorNode.js +4 -4
  412. package/src/nodes/code/CodeNode.js +8 -11
  413. package/src/nodes/core/AssignNode.js +27 -5
  414. package/src/nodes/core/AttributeNode.js +2 -2
  415. package/src/nodes/core/ContextNode.js +7 -3
  416. package/src/nodes/core/Node.js +69 -20
  417. package/src/nodes/core/NodeBuilder.js +248 -29
  418. package/src/nodes/core/NodeUtils.js +42 -0
  419. package/src/nodes/core/NodeVarying.js +19 -1
  420. package/src/nodes/core/PropertyNode.js +8 -12
  421. package/src/nodes/core/StackNode.js +129 -26
  422. package/src/nodes/core/StructTypeNode.js +26 -4
  423. package/src/nodes/core/SubBuildNode.js +89 -0
  424. package/src/nodes/core/VarNode.js +11 -2
  425. package/src/nodes/core/VaryingNode.js +45 -24
  426. package/src/nodes/display/BlendModes.js +42 -1
  427. package/src/nodes/display/ColorSpaceNode.js +4 -27
  428. package/src/nodes/display/FrontFacingNode.js +34 -2
  429. package/src/nodes/display/NormalMapNode.js +19 -50
  430. package/src/nodes/display/PassNode.js +18 -19
  431. package/src/nodes/display/ScreenNode.js +0 -26
  432. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  433. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  434. package/src/nodes/functions/PhongLightingModel.js +3 -3
  435. package/src/nodes/functions/PhysicalLightingModel.js +14 -14
  436. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  437. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  438. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  439. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  440. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  441. package/src/nodes/gpgpu/ComputeNode.js +1 -1
  442. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  443. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  444. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  445. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  446. package/src/nodes/lighting/LightsNode.js +29 -11
  447. package/src/nodes/lighting/ProjectorLightNode.js +78 -0
  448. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  449. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  450. package/src/nodes/lighting/ShadowNode.js +174 -242
  451. package/src/nodes/lighting/SpotLightNode.js +44 -7
  452. package/src/nodes/materialx/lib/mx_noise.js +1 -1
  453. package/src/nodes/math/ConditionalNode.js +0 -19
  454. package/src/nodes/math/MathNode.js +68 -21
  455. package/src/nodes/math/OperatorNode.js +108 -98
  456. package/src/nodes/shapes/Shapes.js +5 -4
  457. package/src/nodes/tsl/TSLBase.js +1 -0
  458. package/src/nodes/tsl/TSLCore.js +160 -65
  459. package/src/nodes/utils/DebugNode.js +15 -3
  460. package/src/nodes/utils/Discard.js +2 -2
  461. package/src/nodes/utils/EquirectUV.js +27 -0
  462. package/src/nodes/utils/LoopNode.js +64 -34
  463. package/src/nodes/utils/MatcapUV.js +22 -0
  464. package/src/nodes/utils/RTTNode.js +13 -5
  465. package/src/nodes/utils/ReflectorNode.js +77 -7
  466. package/src/nodes/utils/SampleNode.js +81 -0
  467. package/src/nodes/utils/TriplanarTextures.js +65 -0
  468. package/src/objects/BatchedMesh.js +16 -4
  469. package/src/objects/Mesh.js +9 -0
  470. package/src/objects/Skeleton.js +1 -1
  471. package/src/objects/Sprite.js +9 -0
  472. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  473. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  474. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  475. package/src/renderers/WebGLRenderer.js +25 -11
  476. package/src/renderers/common/Animation.js +2 -2
  477. package/src/renderers/common/Background.js +13 -2
  478. package/src/renderers/common/CubeRenderTarget.js +1 -1
  479. package/src/renderers/common/RenderList.js +0 -4
  480. package/src/renderers/common/RenderObject.js +80 -4
  481. package/src/renderers/common/Renderer.js +116 -8
  482. package/src/renderers/common/Storage3DTexture.js +79 -0
  483. package/src/renderers/common/StorageArrayTexture.js +63 -0
  484. package/src/renderers/common/Textures.js +15 -21
  485. package/src/renderers/common/TimestampQueryPool.js +1 -0
  486. package/src/renderers/common/Uniform.js +1 -1
  487. package/src/renderers/common/UniformsGroup.js +14 -18
  488. package/src/renderers/common/XRManager.js +157 -27
  489. package/src/renderers/common/XRRenderTarget.js +21 -4
  490. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  491. package/src/renderers/common/nodes/Nodes.js +13 -3
  492. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
  493. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  494. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  495. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  496. package/src/renderers/webgl/WebGLPrograms.js +4 -2
  497. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  498. package/src/renderers/webgl/WebGLState.js +4 -4
  499. package/src/renderers/webgl/WebGLTextures.js +144 -4
  500. package/src/renderers/webgl/WebGLUtils.js +1 -3
  501. package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  504. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  507. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  508. package/src/renderers/webgpu/WebGPUBackend.js +451 -128
  509. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  510. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  511. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  512. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
  513. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  514. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  515. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
  516. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  517. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
  519. package/src/renderers/webxr/WebXRController.js +1 -1
  520. package/src/renderers/webxr/WebXRManager.js +2 -1
  521. package/src/textures/DepthTexture.js +6 -10
  522. package/src/textures/Source.js +22 -0
  523. package/src/textures/Texture.js +118 -1
  524. package/src/textures/VideoTexture.js +1 -1
  525. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  526. package/src/core/RenderTargetArray.js +0 -40
  527. package/src/nodes/utils/EquirectUVNode.js +0 -65
  528. package/src/nodes/utils/MatcapUVNode.js +0 -49
  529. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -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
 
@@ -2,6 +2,8 @@ import { attribute } from '../core/AttributeNode.js';
2
2
  import { cameraViewMatrix } from './Camera.js';
3
3
  import { modelViewMatrix } from './ModelNode.js';
4
4
  import { Fn, vec4 } from '../tsl/TSLBase.js';
5
+ import { tangentViewFrame } from './TangentUtils.js';
6
+ import { directionToFaceDirection } from '../display/FrontFacingNode.js';
5
7
 
6
8
  /**
7
9
  * TSL object that represents the tangent attribute of the current rendered object.
@@ -35,28 +37,34 @@ export const tangentLocal = /*@__PURE__*/ tangentGeometry.xyz.toVar( 'tangentLoc
35
37
  * @tsl
36
38
  * @type {Node<vec3>}
37
39
  */
38
- export const tangentView = /*@__PURE__*/ modelViewMatrix.mul( vec4( tangentLocal, 0 ) ).xyz.toVarying( 'v_tangentView' ).normalize().toVar( 'tangentView' );
40
+ export const tangentView = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, material } ) => {
39
41
 
40
- /**
41
- * TSL object that represents the vertex tangent in world space of the current rendered object.
42
- *
43
- * @tsl
44
- * @type {Node<vec3>}
45
- */
46
- export const tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraViewMatrix ).toVarying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' );
42
+ let node;
47
43
 
48
- /**
49
- * TSL object that represents the transformed vertex tangent in view space of the current rendered object.
50
- *
51
- * @tsl
52
- * @type {Node<vec3>}
53
- */
54
- export const transformedTangentView = /*@__PURE__*/ tangentView.toVar( 'transformedTangentView' );
44
+ if ( subBuildFn === 'VERTEX' || geometry.hasAttribute( 'tangent' ) ) {
45
+
46
+ node = modelViewMatrix.mul( vec4( tangentLocal, 0 ) ).xyz.toVarying( 'v_tangentView' ).normalize();
47
+
48
+ } else {
49
+
50
+ node = tangentViewFrame;
51
+
52
+ }
53
+
54
+ if ( material.flatShading !== true ) {
55
+
56
+ node = directionToFaceDirection( node );
57
+
58
+ }
59
+
60
+ return node;
61
+
62
+ }, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'tangentView' );
55
63
 
56
64
  /**
57
- * TSL object that represents the transformed vertex tangent in world space of the current rendered object.
65
+ * TSL object that represents the vertex tangent in world space of the current rendered object.
58
66
  *
59
67
  * @tsl
60
68
  * @type {Node<vec3>}
61
69
  */
62
- export const transformedTangentWorld = /*@__PURE__*/ transformedTangentView.transformDirection( cameraViewMatrix ).normalize().toVar( 'transformedTangentWorld' );
70
+ export const tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraViewMatrix ).toVarying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' );
@@ -0,0 +1,46 @@
1
+ import { uv as getUV } from './UV.js';
2
+ import { positionView } from './Position.js';
3
+ import { normalView } from './Normal.js';
4
+
5
+ // Normal Mapping Without Precomputed Tangents
6
+ // http://www.thetenthplanet.de/archives/1180
7
+
8
+ const uv = getUV();
9
+
10
+ const q0 = positionView.dFdx();
11
+ const q1 = positionView.dFdy();
12
+ const st0 = uv.dFdx();
13
+ const st1 = uv.dFdy();
14
+
15
+ const N = normalView;
16
+
17
+ const q1perp = q1.cross( N );
18
+ const q0perp = N.cross( q0 );
19
+
20
+ const T = q1perp.mul( st0.x ).add( q0perp.mul( st1.x ) );
21
+ const B = q1perp.mul( st0.y ).add( q0perp.mul( st1.y ) );
22
+
23
+ const det = T.dot( T ).max( B.dot( B ) );
24
+ const scale = det.equal( 0.0 ).select( 0.0, det.inverseSqrt() );
25
+
26
+ /**
27
+ * Tangent vector in view space, computed dynamically from geometry and UV derivatives.
28
+ * Useful for normal mapping without precomputed tangents.
29
+ *
30
+ * Reference: http://www.thetenthplanet.de/archives/1180
31
+ *
32
+ * @tsl
33
+ * @type {Node<vec3>}
34
+ */
35
+ export const tangentViewFrame = /*@__PURE__*/ T.mul( scale ).toVar( 'tangentViewFrame' );
36
+
37
+ /**
38
+ * Bitangent vector in view space, computed dynamically from geometry and UV derivatives.
39
+ * Complements the tangentViewFrame for constructing the tangent space basis.
40
+ *
41
+ * Reference: http://www.thetenthplanet.de/archives/1180
42
+ *
43
+ * @tsl
44
+ * @type {Node<vec3>}
45
+ */
46
+ export const bitangentViewFrame = /*@__PURE__*/ B.mul( scale ).toVar( 'bitangentViewFrame' );
@@ -1,6 +1,7 @@
1
1
  import { add, mul, div } from '../math/OperatorNode.js';
2
2
  import { floor, ceil, fract, pow } from '../math/MathNode.js';
3
- import { Fn, float, vec2, vec4, int } from '../tsl/TSLBase.js';
3
+ import { Fn, vec2, vec4, int } from '../tsl/TSLBase.js';
4
+ import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
4
5
 
5
6
  // Mipped Bicubic Texture Filtering by N8
6
7
  // https://www.shadertoy.com/view/Dl2SDW
@@ -57,10 +58,10 @@ const bicubic = ( textureNode, texelSize, lod ) => {
57
58
  * @tsl
58
59
  * @function
59
60
  * @param {TextureNode} textureNode - The texture node that should be filtered.
60
- * @param {Node<float>} [lodNode=float(3)] - Defines the LOD to sample from.
61
+ * @param {Node<float>} lodNode - Defines the LOD to sample from.
61
62
  * @return {Node} The filtered texture sample.
62
63
  */
63
- export const textureBicubic = /*@__PURE__*/ Fn( ( [ textureNode, lodNode = float( 3 ) ] ) => {
64
+ export const textureBicubicLevel = /*@__PURE__*/ Fn( ( [ textureNode, lodNode ] ) => {
64
65
 
65
66
  const fLodSize = vec2( textureNode.size( int( lodNode ) ) );
66
67
  const cLodSize = vec2( textureNode.size( int( lodNode.add( 1.0 ) ) ) );
@@ -72,3 +73,20 @@ export const textureBicubic = /*@__PURE__*/ Fn( ( [ textureNode, lodNode = float
72
73
  return fract( lodNode ).mix( fSample, cSample );
73
74
 
74
75
  } );
76
+
77
+ /**
78
+ * Applies mipped bicubic texture filtering to the given texture node.
79
+ *
80
+ * @tsl
81
+ * @function
82
+ * @param {TextureNode} textureNode - The texture node that should be filtered.
83
+ * @param {Node<float>} [strength] - Defines the strength of the bicubic filtering.
84
+ * @return {Node} The filtered texture sample.
85
+ */
86
+ export const textureBicubic = /*@__PURE__*/ Fn( ( [ textureNode, strength ] ) => {
87
+
88
+ const lod = strength.mul( maxMipLevel( textureNode ) );
89
+
90
+ return textureBicubicLevel( textureNode, lod );
91
+
92
+ } );
@@ -9,6 +9,10 @@ import { NodeUpdateType } from '../core/constants.js';
9
9
 
10
10
  import { IntType, NearestFilter, UnsignedIntType } from '../../constants.js';
11
11
 
12
+ import { Texture } from '../../textures/Texture.js';
13
+
14
+ const EmptyTexture = /*@__PURE__*/ new Texture();
15
+
12
16
  /**
13
17
  * This type of uniform node represents a 2D texture.
14
18
  *
@@ -25,12 +29,12 @@ class TextureNode extends UniformNode {
25
29
  /**
26
30
  * Constructs a new texture node.
27
31
  *
28
- * @param {Texture} value - The texture.
32
+ * @param {Texture} [value=EmptyTexture] - The texture.
29
33
  * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
30
34
  * @param {?Node<int>} [levelNode=null] - The level node.
31
35
  * @param {?Node<float>} [biasNode=null] - The bias node.
32
36
  */
33
- constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
37
+ constructor( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) {
34
38
 
35
39
  super( value );
36
40
 
@@ -266,7 +270,7 @@ class TextureNode extends UniformNode {
266
270
  setUpdateMatrix( value ) {
267
271
 
268
272
  this.updateMatrix = value;
269
- this.updateType = value ? NodeUpdateType.RENDER : NodeUpdateType.NONE;
273
+ this.updateType = value ? NodeUpdateType.OBJECT : NodeUpdateType.NONE;
270
274
 
271
275
  return this;
272
276
 
@@ -328,7 +332,7 @@ class TextureNode extends UniformNode {
328
332
 
329
333
  if ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {
330
334
 
331
- uvNode = builder.context.getUV( this );
335
+ uvNode = builder.context.getUV( this, builder );
332
336
 
333
337
  }
334
338
 
@@ -564,7 +568,7 @@ class TextureNode extends UniformNode {
564
568
 
565
569
  const map = textureNode.value;
566
570
 
567
- if ( map && map.generateMipmaps === false || map.minFilter === NearestFilter || map.magFilter === NearestFilter ) {
571
+ if ( textureNode.generateMipmaps === false && ( map && map.generateMipmaps === false || map.minFilter === NearestFilter || map.magFilter === NearestFilter ) ) {
568
572
 
569
573
  console.warn( 'THREE.TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture.' );
570
574
 
@@ -720,6 +724,9 @@ class TextureNode extends UniformNode {
720
724
 
721
725
  const newNode = new this.constructor( this.value, this.uvNode, this.levelNode, this.biasNode );
722
726
  newNode.sampler = this.sampler;
727
+ newNode.depthNode = this.depthNode;
728
+ newNode.compareNode = this.compareNode;
729
+ newNode.gradNode = this.gradNode;
723
730
 
724
731
  return newNode;
725
732
 
@@ -734,20 +741,64 @@ export default TextureNode;
734
741
  *
735
742
  * @tsl
736
743
  * @function
737
- * @param {Texture} value - The texture.
744
+ * @param {?Texture} value - The texture.
738
745
  * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
739
746
  * @param {?Node<int>} [levelNode=null] - The level node.
740
747
  * @param {?Node<float>} [biasNode=null] - The bias node.
741
748
  * @returns {TextureNode}
742
749
  */
743
- export const texture = /*@__PURE__*/ nodeProxy( TextureNode ).setParameterLength( 1, 4 );
750
+ const textureBase = /*@__PURE__*/ nodeProxy( TextureNode ).setParameterLength( 1, 4 ).setName( 'texture' );
751
+
752
+ /**
753
+ * TSL function for creating a texture node or sample a texture node already existing.
754
+ *
755
+ * @tsl
756
+ * @function
757
+ * @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
758
+ * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
759
+ * @param {?Node<int>} [levelNode=null] - The level node.
760
+ * @param {?Node<float>} [biasNode=null] - The bias node.
761
+ * @returns {TextureNode}
762
+ */
763
+ export const texture = ( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) => {
764
+
765
+ let textureNode;
766
+
767
+ if ( value && value.isTextureNode === true ) {
768
+
769
+ textureNode = nodeObject( value.clone() );
770
+ textureNode.referenceNode = value.getSelf(); // Ensure the reference is set to the original node
771
+
772
+ if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
773
+ if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
774
+ if ( biasNode !== null ) textureNode.biasNode = nodeObject( biasNode );
775
+
776
+ } else {
777
+
778
+ textureNode = textureBase( value, uvNode, levelNode, biasNode );
779
+
780
+ }
781
+
782
+ return textureNode;
783
+
784
+ };
785
+
786
+ /**
787
+ * TSL function for creating a uniform texture node.
788
+ *
789
+ * @tsl
790
+ * @function
791
+ * @param {?Texture} value - The texture.
792
+ * @returns {TextureNode}
793
+ */
794
+ export const uniformTexture = ( value = EmptyTexture ) => texture( value );
744
795
 
745
796
  /**
746
797
  * TSL function for creating a texture node that fetches/loads texels without interpolation.
747
798
  *
748
799
  * @tsl
749
800
  * @function
750
- * @param {Texture} value - The texture.
801
+ * @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
751
802
  * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
752
803
  * @param {?Node<int>} [levelNode=null] - The level node.
753
804
  * @param {?Node<float>} [biasNode=null] - The bias node.
@@ -346,19 +346,3 @@ export default UniformArrayNode;
346
346
  * @returns {UniformArrayNode}
347
347
  */
348
348
  export const uniformArray = ( values, nodeType ) => nodeObject( new UniformArrayNode( values, nodeType ) );
349
-
350
- /**
351
- * @tsl
352
- * @function
353
- * @deprecated since r168. Use {@link uniformArray} instead.
354
- *
355
- * @param {Array<any>} values - Array-like data.
356
- * @param {string} nodeType - The data type of the array elements.
357
- * @returns {UniformArrayNode}
358
- */
359
- export const uniforms = ( values, nodeType ) => { // @deprecated, r168
360
-
361
- console.warn( 'THREE.TSL: uniforms() has been renamed to uniformArray().' );
362
- return nodeObject( new UniformArrayNode( values, nodeType ) );
363
-
364
- };
@@ -205,6 +205,7 @@ function getPreviousMatrix( object, index = 0 ) {
205
205
  if ( matrix === undefined ) {
206
206
 
207
207
  objectData[ index ] = matrix = new Matrix4();
208
+ objectData[ index ].copy( object.matrixWorld );
208
209
 
209
210
  }
210
211
 
@@ -18,9 +18,9 @@ class VertexColorNode extends AttributeNode {
18
18
  /**
19
19
  * Constructs a new vertex color node.
20
20
  *
21
- * @param {number} [index=0] - The attribute index.
21
+ * @param {number} index - The attribute index.
22
22
  */
23
- constructor( index = 0 ) {
23
+ constructor( index ) {
24
24
 
25
25
  super( null, 'vec4' );
26
26
 
@@ -104,7 +104,7 @@ export default VertexColorNode;
104
104
  *
105
105
  * @tsl
106
106
  * @function
107
- * @param {number} index - The attribute index.
107
+ * @param {number} [index=0] - The attribute index.
108
108
  * @returns {VertexColorNode}
109
109
  */
110
- export const vertexColor = ( index ) => nodeObject( new VertexColorNode( index ) );
110
+ export const vertexColor = ( index = 0 ) => nodeObject( new VertexColorNode( index ) );
@@ -36,6 +36,14 @@ class CodeNode extends Node {
36
36
  */
37
37
  this.isCodeNode = true;
38
38
 
39
+ /**
40
+ * This flag is used for global cache.
41
+ *
42
+ * @type {boolean}
43
+ * @default true
44
+ */
45
+ this.global = true;
46
+
39
47
  /**
40
48
  * The native code.
41
49
  *
@@ -62,17 +70,6 @@ class CodeNode extends Node {
62
70
 
63
71
  }
64
72
 
65
- /**
66
- * The method is overwritten so it always returns `true`.
67
- *
68
- * @return {boolean} Whether this node is global or not.
69
- */
70
- isGlobal() {
71
-
72
- return true;
73
-
74
- }
75
-
76
73
  /**
77
74
  * Sets the includes of this code node.
78
75
  *
@@ -40,6 +40,15 @@ class AssignNode extends TempNode {
40
40
  */
41
41
  this.sourceNode = sourceNode;
42
42
 
43
+ /**
44
+ * This flag can be used for type testing.
45
+ *
46
+ * @type {boolean}
47
+ * @readonly
48
+ * @default true
49
+ */
50
+ this.isAssignNode = true;
51
+
43
52
  }
44
53
 
45
54
  /**
@@ -84,15 +93,25 @@ class AssignNode extends TempNode {
84
93
 
85
94
  }
86
95
 
87
- generate( builder, output ) {
96
+ setup( builder ) {
88
97
 
89
98
  const { targetNode, sourceNode } = this;
90
99
 
100
+ const properties = builder.getNodeProperties( this );
101
+ properties.sourceNode = sourceNode;
102
+ properties.targetNode = targetNode.context( { assign: true } );
103
+
104
+ }
105
+
106
+ generate( builder, output ) {
107
+
108
+ const { targetNode, sourceNode } = builder.getNodeProperties( this );
109
+
91
110
  const needsSplitAssign = this.needsSplitAssign( builder );
92
111
 
93
112
  const targetType = targetNode.getNodeType( builder );
94
113
 
95
- const target = targetNode.context( { assign: true } ).build( builder );
114
+ const target = targetNode.build( builder );
96
115
  const source = sourceNode.build( builder, targetType );
97
116
 
98
117
  const sourceType = sourceNode.getNodeType( builder );
@@ -118,11 +137,14 @@ class AssignNode extends TempNode {
118
137
 
119
138
  builder.addLineFlowCode( `${ sourceProperty } = ${ source }`, this );
120
139
 
121
- const targetRoot = targetNode.node.context( { assign: true } ).build( builder );
140
+ const splitNode = targetNode.node;
141
+ const splitTargetNode = splitNode.node.context( { assign: true } );
142
+
143
+ const targetRoot = splitTargetNode.build( builder );
122
144
 
123
- for ( let i = 0; i < targetNode.components.length; i ++ ) {
145
+ for ( let i = 0; i < splitNode.components.length; i ++ ) {
124
146
 
125
- const component = targetNode.components[ i ];
147
+ const component = splitNode.components[ i ];
126
148
 
127
149
  builder.addLineFlowCode( `${ targetRoot }.${ component } = ${ sourceProperty }[ ${ i } ]`, this );
128
150
 
@@ -161,7 +161,7 @@ export default AttributeNode;
161
161
  * @tsl
162
162
  * @function
163
163
  * @param {string} name - The name of the attribute.
164
- * @param {string} [nodeType] - The node type.
164
+ * @param {?string} [nodeType=null] - The node type.
165
165
  * @returns {AttributeNode}
166
166
  */
167
- export const attribute = ( name, nodeType ) => nodeObject( new AttributeNode( name, nodeType ) );
167
+ export const attribute = ( name, nodeType = null ) => nodeObject( new AttributeNode( name, nodeType ) );
@@ -80,8 +80,14 @@ class ContextNode extends Node {
80
80
 
81
81
  analyze( builder ) {
82
82
 
83
+ const previousContext = builder.getContext();
84
+
85
+ builder.setContext( { ...builder.context, ...this.value } );
86
+
83
87
  this.node.build( builder );
84
88
 
89
+ builder.setContext( previousContext );
90
+
85
91
  }
86
92
 
87
93
  setup( builder ) {
@@ -90,12 +96,10 @@ class ContextNode extends Node {
90
96
 
91
97
  builder.setContext( { ...builder.context, ...this.value } );
92
98
 
93
- const node = this.node.build( builder );
99
+ this.node.build( builder );
94
100
 
95
101
  builder.setContext( previousContext );
96
102
 
97
- return node;
98
-
99
103
  }
100
104
 
101
105
  generate( builder, output ) {