@plastic-software/three 0.175.14 → 0.179.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 (572) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8402 -6787
  3. package/build/three.core.js +8007 -6688
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +397 -102
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6831 -2838
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6648 -2838
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  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 +2 -1
  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 +22 -8
  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 +57 -38
  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 +679 -300
  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 +48 -8
  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 +11 -2
  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/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  534. package/src/renderers/webgl/WebGLProgram.js +22 -16
  535. package/src/renderers/webgl/WebGLPrograms.js +8 -6
  536. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  537. package/src/renderers/webgl/WebGLState.js +4 -4
  538. package/src/renderers/webgl/WebGLTextures.js +163 -11
  539. package/src/renderers/webgl/WebGLUtils.js +1 -3
  540. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  541. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  542. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  544. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  545. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  546. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  547. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  548. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  549. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  551. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  552. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  553. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  554. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  555. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  556. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  557. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  558. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  559. package/src/renderers/webxr/WebXRController.js +1 -1
  560. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  561. package/src/renderers/webxr/WebXRManager.js +70 -9
  562. package/src/textures/DepthTexture.js +6 -10
  563. package/src/textures/ExternalTexture.js +45 -0
  564. package/src/textures/FramebufferTexture.js +2 -2
  565. package/src/textures/Source.js +32 -0
  566. package/src/textures/Texture.js +118 -1
  567. package/src/textures/VideoTexture.js +31 -3
  568. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  569. package/src/core/RenderTargetArray.js +0 -40
  570. package/src/nodes/utils/EquirectUVNode.js +0 -65
  571. package/src/nodes/utils/MatcapUVNode.js +0 -49
  572. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,12 +1,12 @@
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
- * TSL object that represents the normal attribute of the current rendered object.
9
+ * TSL object that represents the normal attribute of the current rendered object in local space.
10
10
  *
11
11
  * @tsl
12
12
  * @type {Node<vec3>}
@@ -14,7 +14,7 @@ import { faceDirection } from '../display/FrontFacingNode.js';
14
14
  export const normalGeometry = /*@__PURE__*/ attribute( 'normal', 'vec3' );
15
15
 
16
16
  /**
17
- * TSL object that represents the vertex normal in local space of the current rendered object.
17
+ * TSL object that represents the vertex normal of the current rendered object in local space.
18
18
  *
19
19
  * @tsl
20
20
  * @type {Node<vec3>}
@@ -34,7 +34,7 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
34
34
  }, 'vec3' ).once() )().toVar( 'normalLocal' );
35
35
 
36
36
  /**
37
- * TSL object that represents the flat vertex normal in view space of the current rendered object.
37
+ * TSL object that represents the flat vertex normal of the current rendered object in view space.
38
38
  *
39
39
  * @tsl
40
40
  * @type {Node<vec3>}
@@ -42,12 +42,12 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
42
42
  export const normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.dFdy() ).normalize().toVar( 'normalFlat' );
43
43
 
44
44
  /**
45
- * TSL object that represents the vertex normal in view space of the current rendered object.
45
+ * TSL object that represents the vertex normal of the current rendered object in view space.
46
46
  *
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,57 +57,99 @@ 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
- * TSL object that represents the vertex normal in world space of the current rendered object.
69
+ * TSL object that represents the vertex normal of the current rendered object in world space.
70
70
  *
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
- * TSL object that represents the transformed vertex normal in view space of the current rendered object.
89
+ * TSL object that represents the vertex normal of the current rendered object in view space.
78
90
  *
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 } ) => {
95
+
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
+ }
83
107
 
84
- // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
108
+ } else {
109
+
110
+ // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
85
111
 
86
- return builder.context.setupNormal().context( { getUV: null } );
112
+ node = context.setupNormal().context( { getUV: null } );
87
113
 
88
- }, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedNormalView' );
114
+ }
115
+
116
+ return node;
117
+
118
+ }, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'normalView' );
89
119
 
90
120
  /**
91
- * TSL object that represents the transformed vertex normal in world space of the current rendered object.
121
+ * TSL object that represents the vertex normal of the current rendered object in world space.
92
122
  *
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
- * TSL object that represents the transformed clearcoat vertex normal in view space of the current rendered object.
129
+ * TSL object that represents the clearcoat vertex normal of the current rendered object in view space.
100
130
  *
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;
137
+
138
+ if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
105
139
 
106
- // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
140
+ node = normalView;
141
+
142
+ } else {
107
143
 
108
- return builder.context.setupClearcoatNormal().context( { getUV: null } );
144
+ // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
109
145
 
110
- }, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedClearcoatNormalView' );
146
+ node = context.setupClearcoatNormal().context( { getUV: null } );
147
+
148
+ }
149
+
150
+ return node;
151
+
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 of the current rendered object in view space.
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 of the current rendered object in world space.
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 of the current rendered object in view space.
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
  */
@@ -216,12 +216,12 @@ class ReferenceNode extends Node {
216
216
  }
217
217
 
218
218
  /**
219
- * Sets the label for the internal uniform.
219
+ * Sets the name for the internal uniform.
220
220
  *
221
221
  * @param {string} name - The label to set.
222
222
  * @return {ReferenceNode} A reference to this node.
223
223
  */
224
- label( name ) {
224
+ setName( name ) {
225
225
 
226
226
  this.name = name;
227
227
 
@@ -229,6 +229,21 @@ class ReferenceNode extends Node {
229
229
 
230
230
  }
231
231
 
232
+ /**
233
+ * Sets the label for the internal uniform.
234
+ *
235
+ * @deprecated
236
+ * @param {string} name - The label to set.
237
+ * @return {ReferenceNode} A reference to this node.
238
+ */
239
+ label( name ) {
240
+
241
+ console.warn( 'THREE.TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
242
+
243
+ return this.setName( name );
244
+
245
+ }
246
+
232
247
  /**
233
248
  * Sets the node type which automatically defines the internal
234
249
  * uniform type.
@@ -267,7 +282,7 @@ class ReferenceNode extends Node {
267
282
 
268
283
  }
269
284
 
270
- if ( this.name !== null ) node.label( this.name );
285
+ if ( this.name !== null ) node.setName( this.name );
271
286
 
272
287
  this.node = node.getSelf();
273
288
 
@@ -345,7 +360,7 @@ class ReferenceNode extends Node {
345
360
  }
346
361
 
347
362
  /**
348
- * Overwritten to to update the internal uniform value.
363
+ * Overwritten to update the internal uniform value.
349
364
  *
350
365
  * @param {NodeFrame} frame - A reference to the current node frame.
351
366
  */
@@ -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.
@@ -78,7 +78,7 @@ class SceneNode extends Node {
78
78
 
79
79
  } else if ( scope === SceneNode.BACKGROUND_ROTATION ) {
80
80
 
81
- output = uniform( 'mat4' ).label( 'backgroundRotation' ).setGroup( renderGroup ).onRenderUpdate( () => {
81
+ output = uniform( 'mat4' ).setName( 'backgroundRotation' ).setGroup( renderGroup ).onRenderUpdate( () => {
82
82
 
83
83
  const background = scene.background;
84
84
 
@@ -178,7 +178,7 @@ class SkinningNode extends Node {
178
178
  }
179
179
 
180
180
  /**
181
- * Transforms the given vertex normal via skinning.
181
+ * Computes the transformed/skinned vertex position of the previous frame.
182
182
  *
183
183
  * @param {NodeBuilder} builder - The current node builder.
184
184
  * @return {Node<vec3>} The skinned position from the previous frame.
@@ -200,7 +200,8 @@ class SkinningNode extends Node {
200
200
  }
201
201
 
202
202
  /**
203
- * Returns `true` if bone matrices from the previous frame are required.
203
+ * Returns `true` if bone matrices from the previous frame are required. Relevant
204
+ * when computing motion vectors with {@link VelocityNode}.
204
205
  *
205
206
  * @param {NodeBuilder} builder - The current node builder.
206
207
  * @return {boolean} Whether bone matrices from the previous frame are required or not.
@@ -60,6 +60,12 @@ class StorageBufferNode extends BufferNode {
60
60
  nodeType = 'struct';
61
61
  structTypeNode = bufferType.layout;
62
62
 
63
+ if ( value.isStorageBufferAttribute || value.isStorageInstancedBufferAttribute ) {
64
+
65
+ bufferCount = value.count;
66
+
67
+ }
68
+
63
69
  } else if ( bufferType === null && ( value.isStorageBufferAttribute || value.isStorageInstancedBufferAttribute ) ) {
64
70
 
65
71
  nodeType = getTypeFromLength( value.itemSize );
@@ -329,6 +335,25 @@ class StorageBufferNode extends BufferNode {
329
335
 
330
336
  }
331
337
 
338
+ /**
339
+ * Returns the type of a member of the struct.
340
+ *
341
+ * @param {NodeBuilder} builder - The current node builder.
342
+ * @param {string} name - The name of the member.
343
+ * @return {string} The type of the member.
344
+ */
345
+ getMemberType( builder, name ) {
346
+
347
+ if ( this.structTypeNode !== null ) {
348
+
349
+ return this.structTypeNode.getMemberType( builder, name );
350
+
351
+ }
352
+
353
+ return 'void';
354
+
355
+ }
356
+
332
357
  /**
333
358
  * Generates the code snippet of the storage buffer node.
334
359
  *
@@ -98,6 +98,8 @@ class StorageTextureNode extends TextureNode {
98
98
  const properties = builder.getNodeProperties( this );
99
99
  properties.storeNode = this.storeNode;
100
100
 
101
+ return properties;
102
+
101
103
  }
102
104
 
103
105
  /**
@@ -181,18 +183,27 @@ class StorageTextureNode extends TextureNode {
181
183
 
182
184
  const properties = builder.getNodeProperties( this );
183
185
 
184
- const { uvNode, storeNode } = properties;
186
+ const { uvNode, storeNode, depthNode } = properties;
185
187
 
186
188
  const textureProperty = super.generate( builder, 'property' );
187
- const uvSnippet = uvNode.build( builder, 'uvec2' );
189
+ const uvSnippet = uvNode.build( builder, this.value.is3DTexture === true ? 'uvec3' : '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
+ } );