@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,5 +1,5 @@
1
- import { Color, Vector2, NearestFilter, Matrix4, RendererUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
2
- import { add, float, If, Loop, int, Fn, min, max, clamp, nodeObject, texture, uniform, uv, vec2, vec4, luminance } from 'three/tsl';
1
+ import { HalfFloatType, Vector2, RenderTarget, RendererUtils, QuadMesh, NodeMaterial, TempNode, NodeUpdateType, Matrix4 } from 'three/webgpu';
2
+ import { add, float, If, Loop, int, Fn, min, max, clamp, nodeObject, texture, uniform, uv, vec2, vec4, luminance, convertToTexture, passTexture, velocity } from 'three/tsl';
3
3
 
4
4
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
5
  const _size = /*@__PURE__*/ new Vector2();
@@ -8,33 +8,34 @@ let _rendererState;
8
8
 
9
9
 
10
10
  /**
11
- * A special render pass node that renders the scene with TRAA (Temporal Reprojection Anti-Aliasing).
12
- *
13
- * Note: The current implementation does not yet support MRT setups.
11
+ * A special node that applies TRAA (Temporal Reprojection Anti-Aliasing).
14
12
  *
15
13
  * References:
16
14
  * - {@link https://alextardif.com/TAA.html}
17
15
  * - {@link https://www.elopezr.com/temporal-aa-and-the-quest-for-the-holy-trail/}
18
16
  *
19
- * @augments PassNode
17
+ * @augments TempNode
18
+ * @three_import import { traa } from 'three/addons/tsl/display/TRAANode.js';
20
19
  */
21
- class TRAAPassNode extends PassNode {
20
+ class TRAANode extends TempNode {
22
21
 
23
22
  static get type() {
24
23
 
25
- return 'TRAAPassNode';
24
+ return 'TRAANode';
26
25
 
27
26
  }
28
27
 
29
28
  /**
30
- * Constructs a new TRAA pass node.
29
+ * Constructs a new TRAA node.
31
30
  *
32
- * @param {Scene} scene - The scene to render.
33
- * @param {Camera} camera - The camera to render the scene with.
31
+ * @param {TextureNode} beautyNode - The texture node that represents the input of the effect.
32
+ * @param {TextureNode} depthNode - A node that represents the scene's depth.
33
+ * @param {TextureNode} velocityNode - A node that represents the scene's velocity.
34
+ * @param {Camera} camera - The camera the scene is rendered with.
34
35
  */
35
- constructor( scene, camera ) {
36
+ constructor( beautyNode, depthNode, velocityNode, camera ) {
36
37
 
37
- super( PassNode.COLOR, scene, camera );
38
+ super( 'vec4' );
38
39
 
39
40
  /**
40
41
  * This flag can be used for type testing.
@@ -43,40 +44,53 @@ class TRAAPassNode extends PassNode {
43
44
  * @readonly
44
45
  * @default true
45
46
  */
46
- this.isTRAAPassNode = true;
47
+ this.isTRAANode = true;
47
48
 
48
49
  /**
49
- * The clear color of the pass.
50
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
51
+ * its effect once per frame in `updateBefore()`.
50
52
  *
51
- * @type {Color}
52
- * @default 0x000000
53
+ * @type {string}
54
+ * @default 'frame'
53
55
  */
54
- this.clearColor = new Color( 0x000000 );
56
+ this.updateBeforeType = NodeUpdateType.FRAME;
55
57
 
56
58
  /**
57
- * The clear alpha of the pass.
59
+ * The texture node that represents the input of the effect.
58
60
  *
59
- * @type {number}
60
- * @default 0
61
+ * @type {TextureNode}
61
62
  */
62
- this.clearAlpha = 0;
63
+ this.beautyNode = beautyNode;
63
64
 
64
65
  /**
65
- * The jitter index selects the current camera offset value.
66
+ * A node that represents the scene's velocity.
66
67
  *
67
- * @private
68
- * @type {number}
69
- * @default 0
68
+ * @type {TextureNode}
70
69
  */
71
- this._jitterIndex = 0;
70
+ this.depthNode = depthNode;
72
71
 
73
72
  /**
74
- * Used to save the original/unjittered projection matrix.
73
+ * A node that represents the scene's velocity.
74
+ *
75
+ * @type {TextureNode}
76
+ */
77
+ this.velocityNode = velocityNode;
78
+
79
+ /**
80
+ * The camera the scene is rendered with.
81
+ *
82
+ * @type {TextureNode}
83
+ */
84
+ this.camera = camera;
85
+
86
+ /**
87
+ * The jitter index selects the current camera offset value.
75
88
  *
76
89
  * @private
77
- * @type {Matrix4}
90
+ * @type {number}
91
+ * @default 0
78
92
  */
79
- this._originalProjectionMatrix = new Matrix4();
93
+ this._jitterIndex = 0;
80
94
 
81
95
  /**
82
96
  * A uniform node holding the inverse resolution value.
@@ -87,22 +101,22 @@ class TRAAPassNode extends PassNode {
87
101
  this._invSize = uniform( new Vector2() );
88
102
 
89
103
  /**
90
- * The render target that holds the current sample.
104
+ * The render target that represents the history of frame data.
91
105
  *
92
106
  * @private
93
107
  * @type {?RenderTarget}
94
- * @default null
95
108
  */
96
- this._sampleRenderTarget = null;
109
+ this._historyRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType } );
110
+ this._historyRenderTarget.texture.name = 'TRAANode.history';
97
111
 
98
112
  /**
99
- * The render target that represents the history of frame data.
113
+ * The render target for the resolve.
100
114
  *
101
115
  * @private
102
116
  * @type {?RenderTarget}
103
- * @default null
104
117
  */
105
- this._historyRenderTarget = null;
118
+ this._resolveRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType } );
119
+ this._resolveRenderTarget.texture.name = 'TRAANode.resolve';
106
120
 
107
121
  /**
108
122
  * Material used for the resolve step.
@@ -111,7 +125,41 @@ class TRAAPassNode extends PassNode {
111
125
  * @type {NodeMaterial}
112
126
  */
113
127
  this._resolveMaterial = new NodeMaterial();
114
- this._resolveMaterial.name = 'TRAA.Resolve';
128
+ this._resolveMaterial.name = 'TRAA.resolve';
129
+
130
+ /**
131
+ * The result of the effect is represented as a separate texture node.
132
+ *
133
+ * @private
134
+ * @type {PassTextureNode}
135
+ */
136
+ this._textureNode = passTexture( this, this._resolveRenderTarget.texture );
137
+
138
+ /**
139
+ * Used to save the original/unjittered projection matrix.
140
+ *
141
+ * @private
142
+ * @type {Matrix4}
143
+ */
144
+ this._originalProjectionMatrix = new Matrix4();
145
+
146
+ /**
147
+ * Sync the post processing stack with the TRAA node.
148
+ * @private
149
+ * @type {boolean}
150
+ */
151
+ this._needsPostProcessingSync = false;
152
+
153
+ }
154
+
155
+ /**
156
+ * Returns the result of the effect as a texture node.
157
+ *
158
+ * @return {PassTextureNode} A texture node that represents the result of the effect.
159
+ */
160
+ getTextureNode() {
161
+
162
+ return this._textureNode;
115
163
 
116
164
  }
117
165
 
@@ -120,78 +168,48 @@ class TRAAPassNode extends PassNode {
120
168
  *
121
169
  * @param {number} width - The width of the effect.
122
170
  * @param {number} height - The height of the effect.
123
- * @return {boolean} Whether the TRAA needs a restart or not. That is required after a resize since buffer data with different sizes can't be resolved.
124
171
  */
125
172
  setSize( width, height ) {
126
173
 
127
- super.setSize( width, height );
128
-
129
- let needsRestart = false;
130
-
131
- if ( this.renderTarget.width !== this._sampleRenderTarget.width || this.renderTarget.height !== this._sampleRenderTarget.height ) {
174
+ this._historyRenderTarget.setSize( width, height );
175
+ this._resolveRenderTarget.setSize( width, height );
132
176
 
133
- this._sampleRenderTarget.setSize( this.renderTarget.width, this.renderTarget.height );
134
- this._historyRenderTarget.setSize( this.renderTarget.width, this.renderTarget.height );
135
-
136
- this._invSize.value.set( 1 / this.renderTarget.width, 1 / this.renderTarget.height );
137
-
138
- needsRestart = true;
139
-
140
- }
141
-
142
- return needsRestart;
177
+ this._invSize.value.set( 1 / width, 1 / height );
143
178
 
144
179
  }
145
180
 
146
181
  /**
147
- * This method is used to render the effect once per frame.
182
+ * Defines the TRAA's current jitter as a view offset
183
+ * to the scene's camera.
148
184
  *
149
- * @param {NodeFrame} frame - The current node frame.
185
+ * @param {number} width - The width of the effect.
186
+ * @param {number} height - The height of the effect.
150
187
  */
151
- updateBefore( frame ) {
152
-
153
- const { renderer } = frame;
154
- const { scene, camera } = this;
155
-
156
- _rendererState = RendererUtils.resetRendererAndSceneState( renderer, scene, _rendererState );
157
-
158
- //
159
-
160
- this._pixelRatio = renderer.getPixelRatio();
161
- const size = renderer.getSize( _size );
162
-
163
- const needsRestart = this.setSize( size.width, size.height );
188
+ setViewOffset( width, height ) {
164
189
 
165
190
  // save original/unjittered projection matrix for velocity pass
166
191
 
167
- camera.updateProjectionMatrix();
168
- this._originalProjectionMatrix.copy( camera.projectionMatrix );
192
+ this.camera.updateProjectionMatrix();
193
+ this._originalProjectionMatrix.copy( this.camera.projectionMatrix );
169
194
 
170
- // camera configuration
195
+ velocity.setProjectionMatrix( this._originalProjectionMatrix );
171
196
 
172
- this._cameraNear.value = camera.near;
173
- this._cameraFar.value = camera.far;
174
-
175
- // configure jitter as view offset
197
+ //
176
198
 
177
199
  const viewOffset = {
178
200
 
179
- fullWidth: this.renderTarget.width,
180
- fullHeight: this.renderTarget.height,
201
+ fullWidth: width,
202
+ fullHeight: height,
181
203
  offsetX: 0,
182
204
  offsetY: 0,
183
- width: this.renderTarget.width,
184
- height: this.renderTarget.height
205
+ width: width,
206
+ height: height
185
207
 
186
208
  };
187
209
 
188
- const originalViewOffset = Object.assign( {}, camera.view );
189
-
190
- if ( originalViewOffset.enabled ) Object.assign( viewOffset, originalViewOffset );
191
-
192
210
  const jitterOffset = _JitterVectors[ this._jitterIndex ];
193
211
 
194
- camera.setViewOffset(
212
+ this.camera.setViewOffset(
195
213
 
196
214
  viewOffset.fullWidth, viewOffset.fullHeight,
197
215
 
@@ -201,97 +219,90 @@ class TRAAPassNode extends PassNode {
201
219
 
202
220
  );
203
221
 
204
- // configure velocity
205
-
206
- const mrt = this.getMRT();
207
- const velocityOutput = mrt.get( 'velocity' );
208
-
209
- if ( velocityOutput !== undefined ) {
210
-
211
- velocityOutput.setProjectionMatrix( this._originalProjectionMatrix );
212
-
213
- } else {
214
-
215
- throw new Error( 'THREE:TRAAPassNode: Missing velocity output in MRT configuration.' );
216
-
217
- }
218
-
219
- // render sample
222
+ }
220
223
 
221
- renderer.setMRT( mrt );
224
+ /**
225
+ * Clears the view offset from the scene's camera.
226
+ */
227
+ clearViewOffset() {
222
228
 
223
- renderer.setClearColor( this.clearColor, this.clearAlpha );
224
- renderer.setRenderTarget( this._sampleRenderTarget );
225
- renderer.render( scene, camera );
229
+ this.camera.clearViewOffset();
226
230
 
227
- renderer.setRenderTarget( null );
228
- renderer.setMRT( null );
231
+ velocity.setProjectionMatrix( null );
229
232
 
230
- // every time when the dimensions change we need fresh history data. Copy the sample
231
- // into the history and final render target (no AA happens at that point).
233
+ // update jitter index
232
234
 
233
- if ( needsRestart === true ) {
235
+ this._jitterIndex ++;
236
+ this._jitterIndex = this._jitterIndex % ( _JitterVectors.length - 1 );
234
237
 
235
- // bind and clear render target to make sure they are initialized after the resize which triggers a dispose()
238
+ }
236
239
 
237
- renderer.setRenderTarget( this._historyRenderTarget );
238
- renderer.clear();
240
+ /**
241
+ * This method is used to render the effect once per frame.
242
+ *
243
+ * @param {NodeFrame} frame - The current node frame.
244
+ */
245
+ updateBefore( frame ) {
239
246
 
240
- renderer.setRenderTarget( this.renderTarget );
241
- renderer.clear();
247
+ const { renderer } = frame;
242
248
 
243
- renderer.setRenderTarget( null );
249
+ // keep the TRAA in sync with the dimensions of the beauty node
244
250
 
245
- renderer.copyTextureToTexture( this._sampleRenderTarget.texture, this._historyRenderTarget.texture );
246
- renderer.copyTextureToTexture( this._sampleRenderTarget.texture, this.renderTarget.texture );
251
+ const beautyRenderTarget = ( this.beautyNode.isRTTNode ) ? this.beautyNode.renderTarget : this.beautyNode.passNode.renderTarget;
247
252
 
248
- } else {
253
+ const width = beautyRenderTarget.texture.width;
254
+ const height = beautyRenderTarget.texture.height;
249
255
 
250
- // resolve
256
+ //
251
257
 
252
- renderer.setRenderTarget( this.renderTarget );
253
- _quadMesh.material = this._resolveMaterial;
254
- _quadMesh.render( renderer );
255
- renderer.setRenderTarget( null );
258
+ if ( this._needsPostProcessingSync === true ) {
256
259
 
257
- // update history
260
+ this.setViewOffset( width, height );
258
261
 
259
- renderer.copyTextureToTexture( this.renderTarget.texture, this._historyRenderTarget.texture );
262
+ this._needsPostProcessingSync = false;
260
263
 
261
264
  }
262
265
 
263
- // copy depth
266
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
264
267
 
265
- renderer.copyTextureToTexture( this._sampleRenderTarget.depthTexture, this.renderTarget.depthTexture );
268
+ //
266
269
 
267
- // update jitter index
270
+ const needsRestart = this._historyRenderTarget.width !== width || this._historyRenderTarget.height !== height;
271
+ this.setSize( width, height );
268
272
 
269
- this._jitterIndex ++;
270
- this._jitterIndex = this._jitterIndex % ( _JitterVectors.length - 1 );
273
+ // every time when the dimensions change we need fresh history data
271
274
 
272
- // restore
275
+ if ( needsRestart === true ) {
273
276
 
274
- if ( originalViewOffset.enabled ) {
277
+ // bind and clear render target to make sure they are initialized after the resize which triggers a dispose()
275
278
 
276
- camera.setViewOffset(
279
+ renderer.setRenderTarget( this._historyRenderTarget );
280
+ renderer.clear();
277
281
 
278
- originalViewOffset.fullWidth, originalViewOffset.fullHeight,
282
+ renderer.setRenderTarget( this._resolveRenderTarget );
283
+ renderer.clear();
279
284
 
280
- originalViewOffset.offsetX, originalViewOffset.offsetY,
285
+ // make sure to reset the history with the contents of the beauty buffer otherwise subsequent frames after the
286
+ // resize will fade from a darker color to the correct one because the history was cleared with black.
281
287
 
282
- originalViewOffset.width, originalViewOffset.height
288
+ renderer.copyTextureToTexture( beautyRenderTarget.texture, this._historyRenderTarget.texture );
283
289
 
284
- );
290
+ }
285
291
 
286
- } else {
292
+ // resolve
287
293
 
288
- camera.clearViewOffset();
294
+ renderer.setRenderTarget( this._resolveRenderTarget );
295
+ _quadMesh.material = this._resolveMaterial;
296
+ _quadMesh.render( renderer );
297
+ renderer.setRenderTarget( null );
289
298
 
290
- }
299
+ // update history
291
300
 
292
- velocityOutput.setProjectionMatrix( null );
301
+ renderer.copyTextureToTexture( this._resolveRenderTarget.texture, this._historyRenderTarget.texture );
293
302
 
294
- RendererUtils.restoreRendererAndSceneState( renderer, scene, _rendererState );
303
+ // restore
304
+
305
+ RendererUtils.restoreRendererState( renderer, _rendererState );
295
306
 
296
307
  }
297
308
 
@@ -303,28 +314,31 @@ class TRAAPassNode extends PassNode {
303
314
  */
304
315
  setup( builder ) {
305
316
 
306
- if ( this._sampleRenderTarget === null ) {
317
+ const postProcessing = builder.context.postProcessing;
307
318
 
308
- this._sampleRenderTarget = this.renderTarget.clone();
309
- this._historyRenderTarget = this.renderTarget.clone();
319
+ if ( postProcessing ) {
310
320
 
311
- this._sampleRenderTarget.texture.minFiler = NearestFilter;
312
- this._sampleRenderTarget.texture.magFilter = NearestFilter;
321
+ this._needsPostProcessingSync = true;
313
322
 
314
- const velocityTarget = this._sampleRenderTarget.texture.clone();
315
- velocityTarget.isRenderTargetTexture = true;
316
- velocityTarget.name = 'velocity';
323
+ postProcessing.context.onBeforePostProcessing = () => {
317
324
 
318
- this._sampleRenderTarget.textures.push( velocityTarget ); // for MRT
325
+ const size = builder.renderer.getDrawingBufferSize( _size );
326
+ this.setViewOffset( size.width, size.height );
319
327
 
320
- }
328
+ };
329
+
330
+ postProcessing.context.onAfterPostProcessing = () => {
321
331
 
322
- // textures
332
+ this.clearViewOffset();
333
+
334
+ };
335
+
336
+ }
323
337
 
324
338
  const historyTexture = texture( this._historyRenderTarget.texture );
325
- const sampleTexture = texture( this._sampleRenderTarget.textures[ 0 ] );
326
- const velocityTexture = texture( this._sampleRenderTarget.textures[ 1 ] );
327
- const depthTexture = texture( this._sampleRenderTarget.depthTexture );
339
+ const sampleTexture = this.beautyNode;
340
+ const depthTexture = this.depthNode;
341
+ const velocityTexture = this.velocityNode;
328
342
 
329
343
  const resolve = Fn( () => {
330
344
 
@@ -379,8 +393,8 @@ class TRAAPassNode extends PassNode {
379
393
  const currentWeight = float( 0.05 ).toVar();
380
394
  const historyWeight = currentWeight.oneMinus().toVar();
381
395
 
382
- const compressedCurrent = currentColor.mul( float( 1 ).div( ( max( max( currentColor.r, currentColor.g ), currentColor.b ).add( 1.0 ) ) ) );
383
- const compressedHistory = clampedHistoryColor.mul( float( 1 ).div( ( max( max( clampedHistoryColor.r, clampedHistoryColor.g ), clampedHistoryColor.b ).add( 1.0 ) ) ) );
396
+ const compressedCurrent = currentColor.mul( float( 1 ).div( ( max( currentColor.r, currentColor.g, currentColor.b ).add( 1.0 ) ) ) );
397
+ const compressedHistory = clampedHistoryColor.mul( float( 1 ).div( ( max( clampedHistoryColor.r, clampedHistoryColor.g, clampedHistoryColor.b ).add( 1.0 ) ) ) );
384
398
 
385
399
  const luminanceCurrent = luminance( compressedCurrent.rgb );
386
400
  const luminanceHistory = luminance( compressedHistory.rgb );
@@ -394,9 +408,9 @@ class TRAAPassNode extends PassNode {
394
408
 
395
409
  // materials
396
410
 
397
- this._resolveMaterial.fragmentNode = resolve();
411
+ this._resolveMaterial.colorNode = resolve();
398
412
 
399
- return super.setup( builder );
413
+ return this._textureNode;
400
414
 
401
415
  }
402
416
 
@@ -406,14 +420,8 @@ class TRAAPassNode extends PassNode {
406
420
  */
407
421
  dispose() {
408
422
 
409
- super.dispose();
410
-
411
- if ( this._sampleRenderTarget !== null ) {
412
-
413
- this._sampleRenderTarget.dispose();
414
- this._historyRenderTarget.dispose();
415
-
416
- }
423
+ this._historyRenderTarget.dispose();
424
+ this._resolveRenderTarget.dispose();
417
425
 
418
426
  this._resolveMaterial.dispose();
419
427
 
@@ -421,7 +429,7 @@ class TRAAPassNode extends PassNode {
421
429
 
422
430
  }
423
431
 
424
- export default TRAAPassNode;
432
+ export default TRAANode;
425
433
 
426
434
  // These jitter vectors are specified in integers because it is easier.
427
435
  // I am assuming a [-8,8) integer grid, but it needs to be mapped onto [-0.5,0.5)
@@ -440,12 +448,14 @@ const _JitterVectors = [
440
448
  ];
441
449
 
442
450
  /**
443
- * TSL function for creating a TRAA pass node for Temporal Reprojection Anti-Aliasing.
451
+ * TSL function for creating a TRAA node for Temporal Reprojection Anti-Aliasing.
444
452
  *
445
453
  * @tsl
446
454
  * @function
447
- * @param {Scene} scene - The scene to render.
448
- * @param {Camera} camera - The camera to render the scene with.
449
- * @returns {TRAAPassNode}
455
+ * @param {TextureNode} beautyNode - The texture node that represents the input of the effect.
456
+ * @param {TextureNode} depthNode - A node that represents the scene's depth.
457
+ * @param {TextureNode} velocityNode - A node that represents the scene's velocity.
458
+ * @param {Camera} camera - The camera the scene is rendered with.
459
+ * @returns {TRAANode}
450
460
  */
451
- export const traaPass = ( scene, camera ) => nodeObject( new TRAAPassNode( scene, camera ) );
461
+ export const traa = ( beautyNode, depthNode, velocityNode, camera ) => nodeObject( new TRAANode( convertToTexture( beautyNode ), depthNode, velocityNode, camera ) );
@@ -5,6 +5,7 @@ import { nodeObject, Fn, float, uv, convertToTexture, vec4, If, int, clamp, sub,
5
5
  * Post processing node for creating a transition effect between scenes.
6
6
  *
7
7
  * @augments TempNode
8
+ * @three_import import { transition } from 'three/addons/tsl/display/TransitionNode.js';
8
9
  */
9
10
  class TransitionNode extends TempNode {
10
11
 
@@ -1,20 +1,42 @@
1
- import { float, Fn, vec2, uv, sin, rand, degrees, cos, Loop, vec4 } from 'three/tsl';
1
+ import { float, Fn, vec2, uv, sin, rand, degrees, cos, Loop, vec4, premultiplyAlpha, unpremultiplyAlpha } from 'three/tsl';
2
2
 
3
3
  /**
4
4
  * Applies a hash blur effect to the given texture node.
5
5
  *
6
6
  * Reference: {@link https://www.shadertoy.com/view/4lXXWn}.
7
7
  *
8
- * @tsl
9
8
  * @function
10
9
  * @param {Node<vec4>} textureNode - The texture node that should be blurred.
11
10
  * @param {Node<float>} [bluramount=float(0.1)] - This node determines the amount of blur.
12
- * @param {Node<float>} [repeats=float(45)] - This node determines the quality of the blur. A higher value produces a less grainy result but is also more expensive.
11
+ * @param {Object} [options={}] - Additional options for the hash blur effect.
12
+ * @param {Node<float>} [options.repeats=float(45)] - The number of iterations for the blur effect.
13
+ * @param {Node<vec4>} [options.mask=null] - A mask node to control the alpha blending of the blur.
14
+ * @param {boolean} [options.premultipliedAlpha=false] - Whether to use premultiplied alpha for the blur effect.
13
15
  * @return {Node<vec4>} The blurred texture node.
14
16
  */
15
- export const hashBlur = /*#__PURE__*/ Fn( ( [ textureNode, bluramount = float( 0.1 ), repeats = float( 45 ) ] ) => {
17
+ export const hashBlur = /*#__PURE__*/ Fn( ( [ textureNode, bluramount = float( 0.1 ), options = {} ] ) => {
16
18
 
17
- const draw = ( uv ) => textureNode.sample( uv );
19
+ const {
20
+ repeats = float( 45 ),
21
+ mask = null,
22
+ premultipliedAlpha = false
23
+ } = options;
24
+
25
+ const draw = ( uv ) => {
26
+
27
+ let sample = textureNode.sample( uv );
28
+
29
+ if ( mask !== null ) {
30
+
31
+ const alpha = mask.sample( uv ).x;
32
+
33
+ sample = vec4( sample.rgb, sample.a.mul( alpha ) );
34
+
35
+ }
36
+
37
+ return premultipliedAlpha ? premultiplyAlpha( sample ) : sample;
38
+
39
+ };
18
40
 
19
41
  const targetUV = textureNode.uvNode || uv();
20
42
  const blurred_image = vec4( 0. ).toVar();
@@ -29,6 +51,6 @@ export const hashBlur = /*#__PURE__*/ Fn( ( [ textureNode, bluramount = float( 0
29
51
 
30
52
  blurred_image.divAssign( repeats );
31
53
 
32
- return blurred_image;
54
+ return premultipliedAlpha ? unpremultiplyAlpha( blurred_image ) : blurred_image;
33
55
 
34
56
  } );
@@ -40,6 +40,7 @@ const _size = /*@__PURE__*/ new Vector2();
40
40
  * a custom implementation.
41
41
  *
42
42
  * @augments LightsNode
43
+ * @three_import import { tiledLights } from 'three/addons/tsl/lighting/TiledLightsNode.js';
43
44
  */
44
45
  class TiledLightsNode extends LightsNode {
45
46
 
@@ -233,8 +234,8 @@ class TiledLightsNode extends LightsNode {
233
234
  const lightingModel = builder.context.reflectedLight;
234
235
 
235
236
  // force declaration order, before of the loop
236
- lightingModel.directDiffuse.append();
237
- lightingModel.directSpecular.append();
237
+ lightingModel.directDiffuse.toStack();
238
+ lightingModel.directSpecular.toStack();
238
239
 
239
240
  super.setupLights( builder, lightNodes );
240
241
 
@@ -261,7 +262,7 @@ class TiledLightsNode extends LightsNode {
261
262
 
262
263
  } );
263
264
 
264
- } )().append();
265
+ }, 'void' )();
265
266
 
266
267
  }
267
268
 
@@ -321,7 +322,7 @@ class TiledLightsNode extends LightsNode {
321
322
  const lightsTexture = new DataTexture( lightsData, lightsData.length / 8, 2, RGBAFormat, FloatType );
322
323
 
323
324
  const lightIndexesArray = new Int32Array( count * 4 * 2 );
324
- const lightIndexes = attributeArray( lightIndexesArray, 'ivec4' ).label( 'lightIndexes' );
325
+ const lightIndexes = attributeArray( lightIndexesArray, 'ivec4' ).setName( 'lightIndexes' );
325
326
 
326
327
  // compute
327
328
 
@@ -1,7 +1,10 @@
1
1
  import { TextureLoader } from 'three';
2
2
  import { Fn, int, ivec2, textureLoad } from 'three/tsl';
3
3
 
4
- /** @module Bayer */
4
+ /**
5
+ * @module Bayer
6
+ * @three_import import { bayer16 } from 'three/addons/tsl/math/Bayer.js';
7
+ */
5
8
 
6
9
  let bayer16Texture = null;
7
10