@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
@@ -1,9 +1,31 @@
1
- import { varying } from '../core/VaryingNode.js';
2
- import { cameraViewMatrix } from './Camera.js';
3
- import { normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView } from './Normal.js';
4
- import { tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView } from './Tangent.js';
1
+ import { Fn } from '../tsl/TSLCore.js';
2
+ import { normalGeometry, normalLocal, normalView, normalWorld } from './Normal.js';
3
+ import { tangentGeometry, tangentLocal, tangentView, tangentWorld } from './Tangent.js';
4
+ import { bitangentViewFrame } from './TangentUtils.js';
5
+ import { directionToFaceDirection } from '../display/FrontFacingNode.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 ], { subBuildFn, material } ) => {
17
+
18
+ let bitangent = crossNormalTangent.mul( tangentGeometry.w ).xyz;
19
+
20
+ if ( subBuildFn === 'NORMAL' && material.flatShading !== true ) {
21
+
22
+ bitangent = bitangent.toVarying( varyingName );
23
+
24
+ }
25
+
26
+ return bitangent;
27
+
28
+ } ).once( [ 'NORMAL' ] );
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,36 +41,42 @@ 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 = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, material } ) => {
31
53
 
32
- /**
33
- * TSL object that represents the vertex bitangent in world space of the current rendered object.
34
- *
35
- * @tsl
36
- * @type {Node<vec4>}
37
- */
38
- export const bitangentWorld = /*@__PURE__*/ varying( getBitangent( normalWorld.cross( tangentWorld ) ), 'v_bitangentWorld' ).normalize().toVar( 'bitangentWorld' );
54
+ let node;
39
55
 
40
- /**
41
- * TSL object that represents the transformed vertex bitangent in view space of the current rendered object.
42
- *
43
- * @tsl
44
- * @type {Node<vec4>}
45
- */
46
- export const transformedBitangentView = /*@__PURE__*/ getBitangent( transformedNormalView.cross( transformedTangentView ) ).normalize().toVar( 'transformedBitangentView' );
56
+ if ( subBuildFn === 'VERTEX' || geometry.hasAttribute( 'tangent' ) ) {
57
+
58
+ node = getBitangent( normalView.cross( tangentView ), 'v_bitangentView' ).normalize();
59
+
60
+ } else {
61
+
62
+ node = bitangentViewFrame;
63
+
64
+ }
65
+
66
+ if ( material.flatShading !== true ) {
67
+
68
+ node = directionToFaceDirection( node );
69
+
70
+ }
71
+
72
+ return node;
73
+
74
+ }, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'bitangentView' );
47
75
 
48
76
  /**
49
- * TSL object that represents the transformed vertex bitangent in world space of the current rendered object.
77
+ * TSL object that represents the vertex bitangent in world space of the current rendered object.
50
78
  *
51
79
  * @tsl
52
- * @type {Node<vec4>}
80
+ * @type {Node<vec3>}
53
81
  */
54
- export const transformedBitangentWorld = /*@__PURE__*/ transformedBitangentView.transformDirection( cameraViewMatrix ).normalize().toVar( 'transformedBitangentWorld' );
82
+ export const bitangentWorld = /*@__PURE__*/ getBitangent( normalWorld.cross( tangentWorld ), 'v_bitangentWorld' ).normalize().toVar( 'bitangentWorld' );
@@ -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
 
@@ -1,9 +1,9 @@
1
1
  import { attribute } from '../core/AttributeNode.js';
2
2
  import { cameraViewMatrix } from './Camera.js';
3
3
  import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
4
- import { mat3, vec3, Fn, varying } from '../tsl/TSLBase.js';
4
+ import { mat3, vec3, Fn } from '../tsl/TSLBase.js';
5
5
  import { positionView } from './Position.js';
6
- import { faceDirection } from '../display/FrontFacingNode.js';
6
+ import { directionToFaceDirection } from '../display/FrontFacingNode.js';
7
7
 
8
8
  /**
9
9
  * TSL object that represents the normal attribute of the current rendered object.
@@ -47,7 +47,7 @@ export const normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.
47
47
  * @tsl
48
48
  * @type {Node<vec3>}
49
49
  */
50
- export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
50
+ export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
51
51
 
52
52
  let node;
53
53
 
@@ -57,13 +57,13 @@ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
57
57
 
58
58
  } else {
59
59
 
60
- node = varying( transformNormalToView( normalLocal ), 'v_normalView' ).normalize();
60
+ node = transformNormalToView( normalLocal ).toVarying( 'v_normalViewGeometry' ).normalize();
61
61
 
62
62
  }
63
63
 
64
64
  return node;
65
65
 
66
- }, 'vec3' ).once() )().toVar( 'normalView' );
66
+ }, 'vec3' ).once() )().toVar( 'normalViewGeometry' );
67
67
 
68
68
  /**
69
69
  * TSL object that represents the vertex normal in world space of the current rendered object.
@@ -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 normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
75
+
76
+ let normal = normalViewGeometry.transformDirection( cameraViewMatrix );
77
+
78
+ if ( builder.material.flatShading !== true ) {
79
+
80
+ normal = normal.toVarying( 'v_normalWorldGeometry' );
81
+
82
+ }
83
+
84
+ return normal.normalize().toVar( 'normalWorldGeometry' );
85
+
86
+ }, 'vec3' ).once() )();
75
87
 
76
88
  /**
77
89
  * TSL object that represents the transformed vertex normal in view space of the current rendered object.
@@ -79,13 +91,31 @@ export const normalWorld = /*@__PURE__*/ varying( normalView.transformDirection(
79
91
  * @tsl
80
92
  * @type {Node<vec3>}
81
93
  */
82
- export const transformedNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
94
+ export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context } ) => {
83
95
 
84
- // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
96
+ let node;
97
+
98
+ if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
99
+
100
+ node = normalViewGeometry;
101
+
102
+ if ( material.flatShading !== true ) {
103
+
104
+ node = directionToFaceDirection( node );
105
+
106
+ }
107
+
108
+ } else {
85
109
 
86
- return builder.context.setupNormal().context( { getUV: null } );
110
+ // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
87
111
 
88
- }, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedNormalView' );
112
+ node = context.setupNormal().context( { getUV: null } );
113
+
114
+ }
115
+
116
+ return node;
117
+
118
+ }, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'normalView' );
89
119
 
90
120
  /**
91
121
  * TSL object that represents the transformed vertex normal in world space of the current rendered object.
@@ -93,7 +123,7 @@ export const transformedNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
93
123
  * @tsl
94
124
  * @type {Node<vec3>}
95
125
  */
96
- export const transformedNormalWorld = /*@__PURE__*/ transformedNormalView.transformDirection( cameraViewMatrix ).toVar( 'transformedNormalWorld' );
126
+ export const normalWorld = /*@__PURE__*/ normalView.transformDirection( cameraViewMatrix ).toVar( 'normalWorld' );
97
127
 
98
128
  /**
99
129
  * TSL object that represents the transformed clearcoat vertex normal in view space of the current rendered object.
@@ -101,13 +131,25 @@ export const transformedNormalWorld = /*@__PURE__*/ transformedNormalView.transf
101
131
  * @tsl
102
132
  * @type {Node<vec3>}
103
133
  */
104
- export const transformedClearcoatNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
134
+ export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context } ) => {
135
+
136
+ let node;
105
137
 
106
- // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
138
+ if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
139
+
140
+ node = normalView;
141
+
142
+ } else {
143
+
144
+ // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
145
+
146
+ node = context.setupClearcoatNormal().context( { getUV: null } );
147
+
148
+ }
107
149
 
108
- return builder.context.setupClearcoatNormal().context( { getUV: null } );
150
+ return node;
109
151
 
110
- }, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedClearcoatNormalView' );
152
+ }, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'clearcoatNormalView' );
111
153
 
112
154
  /**
113
155
  * Transforms the normal with the given matrix.
@@ -139,7 +181,7 @@ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorld
139
181
  */
140
182
  export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
141
183
 
142
- const modelNormalViewMatrix = builder.renderer.nodes.modelNormalViewMatrix;
184
+ const modelNormalViewMatrix = builder.renderer.overrideNodes.modelNormalViewMatrix;
143
185
 
144
186
  if ( modelNormalViewMatrix !== null ) {
145
187
 
@@ -154,3 +196,47 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
154
196
  return cameraViewMatrix.transformDirection( transformedNormal );
155
197
 
156
198
  } );
199
+
200
+ // Deprecated
201
+
202
+ /**
203
+ * TSL object that represents the transformed vertex normal in view space of the current rendered object.
204
+ *
205
+ * @tsl
206
+ * @type {Node<vec3>}
207
+ * @deprecated since r178. Use `normalView` instead.
208
+ */
209
+ export const transformedNormalView = ( Fn( () => { // @deprecated, r177
210
+
211
+ console.warn( 'THREE.TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
212
+ return normalView;
213
+
214
+ } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
215
+
216
+ /**
217
+ * TSL object that represents the transformed vertex normal in world space of the current rendered object.
218
+ *
219
+ * @tsl
220
+ * @type {Node<vec3>}
221
+ * @deprecated since r178. Use `normalWorld` instead.
222
+ */
223
+ export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
224
+
225
+ console.warn( 'THREE.TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
226
+ return normalWorld;
227
+
228
+ } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
229
+
230
+ /**
231
+ * TSL object that represents the transformed clearcoat vertex normal in view space of the current rendered object.
232
+ *
233
+ * @tsl
234
+ * @type {Node<vec3>}
235
+ * @deprecated since r178. Use `clearcoatNormalView` instead.
236
+ */
237
+ export const transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177
238
+
239
+ console.warn( 'THREE.TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
240
+ return clearcoatNormalView;
241
+
242
+ } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
@@ -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
 
@@ -264,6 +263,6 @@ export const objectViewPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3
264
263
  * @tsl
265
264
  * @function
266
265
  * @param {?Object3D} [object3d] - The 3D object.
267
- * @returns {Object3DNode<vec3>}
266
+ * @returns {Object3DNode<float>}
268
267
  */
269
268
  export const objectRadius = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.RADIUS ).setParameterLength( 1 );
@@ -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.getSubBuildProperty( '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( () => {
49
+
50
+ const vertexPWD = positionLocal.transformDirection( modelWorldMatrix ).toVarying( '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( '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
  */
@@ -1,5 +1,5 @@
1
1
  import { cameraViewMatrix } from './Camera.js';
2
- import { transformedNormalView } from './Normal.js';
2
+ import { normalView } from './Normal.js';
3
3
  import { positionViewDirection } from './Position.js';
4
4
  import { materialRefractionRatio } from './MaterialProperties.js';
5
5
 
@@ -9,7 +9,7 @@ import { materialRefractionRatio } from './MaterialProperties.js';
9
9
  * @tsl
10
10
  * @type {Node<vec3>}
11
11
  */
12
- export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect( transformedNormalView );
12
+ export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect( normalView );
13
13
 
14
14
  /**
15
15
  * The refract vector in view space.
@@ -17,7 +17,7 @@ export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect(
17
17
  * @tsl
18
18
  * @type {Node<vec3>}
19
19
  */
20
- export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract( transformedNormalView, materialRefractionRatio );
20
+ export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract( normalView, materialRefractionRatio );
21
21
 
22
22
  /**
23
23
  * Used for sampling cube maps when using cube reflection mapping.
@@ -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.