super-three 0.177.0 → 0.181.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 (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,452 +0,0 @@
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';
3
-
4
- const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
- const _size = /*@__PURE__*/ new Vector2();
6
-
7
- let _rendererState;
8
-
9
-
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.
14
- *
15
- * References:
16
- * - {@link https://alextardif.com/TAA.html}
17
- * - {@link https://www.elopezr.com/temporal-aa-and-the-quest-for-the-holy-trail/}
18
- *
19
- * @augments PassNode
20
- * @three_import import { traaPass } from 'three/addons/tsl/display/TRAAPassNode.js';
21
- */
22
- class TRAAPassNode extends PassNode {
23
-
24
- static get type() {
25
-
26
- return 'TRAAPassNode';
27
-
28
- }
29
-
30
- /**
31
- * Constructs a new TRAA pass node.
32
- *
33
- * @param {Scene} scene - The scene to render.
34
- * @param {Camera} camera - The camera to render the scene with.
35
- */
36
- constructor( scene, camera ) {
37
-
38
- super( PassNode.COLOR, scene, camera );
39
-
40
- /**
41
- * This flag can be used for type testing.
42
- *
43
- * @type {boolean}
44
- * @readonly
45
- * @default true
46
- */
47
- this.isTRAAPassNode = true;
48
-
49
- /**
50
- * The clear color of the pass.
51
- *
52
- * @type {Color}
53
- * @default 0x000000
54
- */
55
- this.clearColor = new Color( 0x000000 );
56
-
57
- /**
58
- * The clear alpha of the pass.
59
- *
60
- * @type {number}
61
- * @default 0
62
- */
63
- this.clearAlpha = 0;
64
-
65
- /**
66
- * The jitter index selects the current camera offset value.
67
- *
68
- * @private
69
- * @type {number}
70
- * @default 0
71
- */
72
- this._jitterIndex = 0;
73
-
74
- /**
75
- * Used to save the original/unjittered projection matrix.
76
- *
77
- * @private
78
- * @type {Matrix4}
79
- */
80
- this._originalProjectionMatrix = new Matrix4();
81
-
82
- /**
83
- * A uniform node holding the inverse resolution value.
84
- *
85
- * @private
86
- * @type {UniformNode<vec2>}
87
- */
88
- this._invSize = uniform( new Vector2() );
89
-
90
- /**
91
- * The render target that holds the current sample.
92
- *
93
- * @private
94
- * @type {?RenderTarget}
95
- * @default null
96
- */
97
- this._sampleRenderTarget = null;
98
-
99
- /**
100
- * The render target that represents the history of frame data.
101
- *
102
- * @private
103
- * @type {?RenderTarget}
104
- * @default null
105
- */
106
- this._historyRenderTarget = null;
107
-
108
- /**
109
- * Material used for the resolve step.
110
- *
111
- * @private
112
- * @type {NodeMaterial}
113
- */
114
- this._resolveMaterial = new NodeMaterial();
115
- this._resolveMaterial.name = 'TRAA.Resolve';
116
-
117
- }
118
-
119
- /**
120
- * Sets the size of the effect.
121
- *
122
- * @param {number} width - The width of the effect.
123
- * @param {number} height - The height of the effect.
124
- * @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.
125
- */
126
- setSize( width, height ) {
127
-
128
- super.setSize( width, height );
129
-
130
- let needsRestart = false;
131
-
132
- if ( this.renderTarget.width !== this._sampleRenderTarget.width || this.renderTarget.height !== this._sampleRenderTarget.height ) {
133
-
134
- this._sampleRenderTarget.setSize( this.renderTarget.width, this.renderTarget.height );
135
- this._historyRenderTarget.setSize( this.renderTarget.width, this.renderTarget.height );
136
-
137
- this._invSize.value.set( 1 / this.renderTarget.width, 1 / this.renderTarget.height );
138
-
139
- needsRestart = true;
140
-
141
- }
142
-
143
- return needsRestart;
144
-
145
- }
146
-
147
- /**
148
- * This method is used to render the effect once per frame.
149
- *
150
- * @param {NodeFrame} frame - The current node frame.
151
- */
152
- updateBefore( frame ) {
153
-
154
- const { renderer } = frame;
155
- const { scene, camera } = this;
156
-
157
- _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
158
-
159
- //
160
-
161
- this._pixelRatio = renderer.getPixelRatio();
162
- const size = renderer.getSize( _size );
163
-
164
- const needsRestart = this.setSize( size.width, size.height );
165
-
166
- // save original/unjittered projection matrix for velocity pass
167
-
168
- camera.updateProjectionMatrix();
169
- this._originalProjectionMatrix.copy( camera.projectionMatrix );
170
-
171
- // camera configuration
172
-
173
- this._cameraNear.value = camera.near;
174
- this._cameraFar.value = camera.far;
175
-
176
- // configure jitter as view offset
177
-
178
- const viewOffset = {
179
-
180
- fullWidth: this.renderTarget.width,
181
- fullHeight: this.renderTarget.height,
182
- offsetX: 0,
183
- offsetY: 0,
184
- width: this.renderTarget.width,
185
- height: this.renderTarget.height
186
-
187
- };
188
-
189
- const originalViewOffset = Object.assign( {}, camera.view );
190
-
191
- if ( originalViewOffset.enabled ) Object.assign( viewOffset, originalViewOffset );
192
-
193
- const jitterOffset = _JitterVectors[ this._jitterIndex ];
194
-
195
- camera.setViewOffset(
196
-
197
- viewOffset.fullWidth, viewOffset.fullHeight,
198
-
199
- viewOffset.offsetX + jitterOffset[ 0 ] * 0.0625, viewOffset.offsetY + jitterOffset[ 1 ] * 0.0625, // 0.0625 = 1 / 16
200
-
201
- viewOffset.width, viewOffset.height
202
-
203
- );
204
-
205
- // configure velocity
206
-
207
- const mrt = this.getMRT();
208
- const velocityOutput = mrt.get( 'velocity' );
209
-
210
- if ( velocityOutput !== undefined ) {
211
-
212
- velocityOutput.setProjectionMatrix( this._originalProjectionMatrix );
213
-
214
- } else {
215
-
216
- throw new Error( 'THREE:TRAAPassNode: Missing velocity output in MRT configuration.' );
217
-
218
- }
219
-
220
- // render sample
221
-
222
- renderer.setMRT( mrt );
223
-
224
- renderer.setClearColor( this.clearColor, this.clearAlpha );
225
- renderer.setRenderTarget( this._sampleRenderTarget );
226
- renderer.render( scene, camera );
227
-
228
- renderer.setRenderTarget( null );
229
- renderer.setMRT( null );
230
-
231
- // every time when the dimensions change we need fresh history data. Copy the sample
232
- // into the history and final render target (no AA happens at that point).
233
-
234
- if ( needsRestart === true ) {
235
-
236
- // bind and clear render target to make sure they are initialized after the resize which triggers a dispose()
237
-
238
- renderer.setRenderTarget( this._historyRenderTarget );
239
- renderer.clear();
240
-
241
- renderer.setRenderTarget( this.renderTarget );
242
- renderer.clear();
243
-
244
- renderer.setRenderTarget( null );
245
-
246
- renderer.copyTextureToTexture( this._sampleRenderTarget.texture, this._historyRenderTarget.texture );
247
- renderer.copyTextureToTexture( this._sampleRenderTarget.texture, this.renderTarget.texture );
248
-
249
- } else {
250
-
251
- // resolve
252
-
253
- renderer.setRenderTarget( this.renderTarget );
254
- _quadMesh.material = this._resolveMaterial;
255
- _quadMesh.render( renderer );
256
- renderer.setRenderTarget( null );
257
-
258
- // update history
259
-
260
- renderer.copyTextureToTexture( this.renderTarget.texture, this._historyRenderTarget.texture );
261
-
262
- }
263
-
264
- // copy depth
265
-
266
- renderer.copyTextureToTexture( this._sampleRenderTarget.depthTexture, this.renderTarget.depthTexture );
267
-
268
- // update jitter index
269
-
270
- this._jitterIndex ++;
271
- this._jitterIndex = this._jitterIndex % ( _JitterVectors.length - 1 );
272
-
273
- // restore
274
-
275
- if ( originalViewOffset.enabled ) {
276
-
277
- camera.setViewOffset(
278
-
279
- originalViewOffset.fullWidth, originalViewOffset.fullHeight,
280
-
281
- originalViewOffset.offsetX, originalViewOffset.offsetY,
282
-
283
- originalViewOffset.width, originalViewOffset.height
284
-
285
- );
286
-
287
- } else {
288
-
289
- camera.clearViewOffset();
290
-
291
- }
292
-
293
- velocityOutput.setProjectionMatrix( null );
294
-
295
- RendererUtils.restoreRendererState( renderer, _rendererState );
296
-
297
- }
298
-
299
- /**
300
- * This method is used to setup the effect's render targets and TSL code.
301
- *
302
- * @param {NodeBuilder} builder - The current node builder.
303
- * @return {PassTextureNode}
304
- */
305
- setup( builder ) {
306
-
307
- if ( this._sampleRenderTarget === null ) {
308
-
309
- this._sampleRenderTarget = this.renderTarget.clone();
310
- this._historyRenderTarget = this.renderTarget.clone();
311
-
312
- this._sampleRenderTarget.texture.minFiler = NearestFilter;
313
- this._sampleRenderTarget.texture.magFilter = NearestFilter;
314
-
315
- const velocityTarget = this._sampleRenderTarget.texture.clone();
316
- velocityTarget.isRenderTargetTexture = true;
317
- velocityTarget.name = 'velocity';
318
-
319
- this._sampleRenderTarget.textures.push( velocityTarget ); // for MRT
320
-
321
- }
322
-
323
- // textures
324
-
325
- const historyTexture = texture( this._historyRenderTarget.texture );
326
- const sampleTexture = texture( this._sampleRenderTarget.textures[ 0 ] );
327
- const velocityTexture = texture( this._sampleRenderTarget.textures[ 1 ] );
328
- const depthTexture = texture( this._sampleRenderTarget.depthTexture );
329
-
330
- const resolve = Fn( () => {
331
-
332
- const uvNode = uv();
333
-
334
- const minColor = vec4( 10000 ).toVar();
335
- const maxColor = vec4( - 10000 ).toVar();
336
- const closestDepth = float( 1 ).toVar();
337
- const closestDepthPixelPosition = vec2( 0 ).toVar();
338
-
339
- // sample a 3x3 neighborhood to create a box in color space
340
- // clamping the history color with the resulting min/max colors mitigates ghosting
341
-
342
- Loop( { start: int( - 1 ), end: int( 1 ), type: 'int', condition: '<=', name: 'x' }, ( { x } ) => {
343
-
344
- Loop( { start: int( - 1 ), end: int( 1 ), type: 'int', condition: '<=', name: 'y' }, ( { y } ) => {
345
-
346
- const uvNeighbor = uvNode.add( vec2( float( x ), float( y ) ).mul( this._invSize ) ).toVar();
347
- const colorNeighbor = max( vec4( 0 ), sampleTexture.sample( uvNeighbor ) ).toVar(); // use max() to avoid propagate garbage values
348
-
349
- minColor.assign( min( minColor, colorNeighbor ) );
350
- maxColor.assign( max( maxColor, colorNeighbor ) );
351
-
352
- const currentDepth = depthTexture.sample( uvNeighbor ).r.toVar();
353
-
354
- // find the sample position of the closest depth in the neighborhood (used for velocity)
355
-
356
- If( currentDepth.lessThan( closestDepth ), () => {
357
-
358
- closestDepth.assign( currentDepth );
359
- closestDepthPixelPosition.assign( uvNeighbor );
360
-
361
- } );
362
-
363
- } );
364
-
365
- } );
366
-
367
- // sampling/reprojection
368
-
369
- const offset = velocityTexture.sample( closestDepthPixelPosition ).xy.mul( vec2( 0.5, - 0.5 ) ); // NDC to uv offset
370
-
371
- const currentColor = sampleTexture.sample( uvNode );
372
- const historyColor = historyTexture.sample( uvNode.sub( offset ) );
373
-
374
- // clamping
375
-
376
- const clampedHistoryColor = clamp( historyColor, minColor, maxColor );
377
-
378
- // flicker reduction based on luminance weighing
379
-
380
- const currentWeight = float( 0.05 ).toVar();
381
- const historyWeight = currentWeight.oneMinus().toVar();
382
-
383
- const compressedCurrent = currentColor.mul( float( 1 ).div( ( max( currentColor.r, currentColor.g, currentColor.b ).add( 1.0 ) ) ) );
384
- const compressedHistory = clampedHistoryColor.mul( float( 1 ).div( ( max( clampedHistoryColor.r, clampedHistoryColor.g, clampedHistoryColor.b ).add( 1.0 ) ) ) );
385
-
386
- const luminanceCurrent = luminance( compressedCurrent.rgb );
387
- const luminanceHistory = luminance( compressedHistory.rgb );
388
-
389
- currentWeight.mulAssign( float( 1.0 ).div( luminanceCurrent.add( 1 ) ) );
390
- historyWeight.mulAssign( float( 1.0 ).div( luminanceHistory.add( 1 ) ) );
391
-
392
- return add( currentColor.mul( currentWeight ), clampedHistoryColor.mul( historyWeight ) ).div( max( currentWeight.add( historyWeight ), 0.00001 ) );
393
-
394
- } );
395
-
396
- // materials
397
-
398
- this._resolveMaterial.fragmentNode = resolve();
399
-
400
- return super.setup( builder );
401
-
402
- }
403
-
404
- /**
405
- * Frees internal resources. This method should be called
406
- * when the effect is no longer required.
407
- */
408
- dispose() {
409
-
410
- super.dispose();
411
-
412
- if ( this._sampleRenderTarget !== null ) {
413
-
414
- this._sampleRenderTarget.dispose();
415
- this._historyRenderTarget.dispose();
416
-
417
- }
418
-
419
- this._resolveMaterial.dispose();
420
-
421
- }
422
-
423
- }
424
-
425
- export default TRAAPassNode;
426
-
427
- // These jitter vectors are specified in integers because it is easier.
428
- // I am assuming a [-8,8) integer grid, but it needs to be mapped onto [-0.5,0.5)
429
- // before being used, thus these integers need to be scaled by 1/16.
430
- //
431
- // Sample patterns reference: https://msdn.microsoft.com/en-us/library/windows/desktop/ff476218%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
432
- const _JitterVectors = [
433
- [ - 4, - 7 ], [ - 7, - 5 ], [ - 3, - 5 ], [ - 5, - 4 ],
434
- [ - 1, - 4 ], [ - 2, - 2 ], [ - 6, - 1 ], [ - 4, 0 ],
435
- [ - 7, 1 ], [ - 1, 2 ], [ - 6, 3 ], [ - 3, 3 ],
436
- [ - 7, 6 ], [ - 3, 6 ], [ - 5, 7 ], [ - 1, 7 ],
437
- [ 5, - 7 ], [ 1, - 6 ], [ 6, - 5 ], [ 4, - 4 ],
438
- [ 2, - 3 ], [ 7, - 2 ], [ 1, - 1 ], [ 4, - 1 ],
439
- [ 2, 1 ], [ 6, 2 ], [ 0, 4 ], [ 4, 4 ],
440
- [ 2, 5 ], [ 7, 5 ], [ 5, 6 ], [ 3, 7 ]
441
- ];
442
-
443
- /**
444
- * TSL function for creating a TRAA pass node for Temporal Reprojection Anti-Aliasing.
445
- *
446
- * @tsl
447
- * @function
448
- * @param {Scene} scene - The scene to render.
449
- * @param {Camera} camera - The camera to render the scene with.
450
- * @returns {TRAAPassNode}
451
- */
452
- export const traaPass = ( scene, camera ) => nodeObject( new TRAAPassNode( scene, camera ) );
@@ -1,65 +0,0 @@
1
- import TempNode from '../core/TempNode.js';
2
- import { positionWorldDirection } from '../accessors/Position.js';
3
- import { nodeProxy, vec2 } from '../tsl/TSLBase.js';
4
-
5
- /**
6
- * Can be used to compute texture coordinates for projecting an
7
- * equirectangular texture onto a mesh for using it as the scene's
8
- * background.
9
- *
10
- * ```js
11
- * scene.backgroundNode = texture( equirectTexture, equirectUV() );
12
- * ```
13
- *
14
- * @augments TempNode
15
- */
16
- class EquirectUVNode extends TempNode {
17
-
18
- static get type() {
19
-
20
- return 'EquirectUVNode';
21
-
22
- }
23
-
24
- /**
25
- * Constructs a new equirect uv node.
26
- *
27
- * @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
28
- */
29
- constructor( dirNode = positionWorldDirection ) {
30
-
31
- super( 'vec2' );
32
-
33
- /**
34
- * A direction vector for sampling why is by default `positionWorldDirection`.
35
- *
36
- * @type {Node<vec3>}
37
- */
38
- this.dirNode = dirNode;
39
-
40
- }
41
-
42
- setup() {
43
-
44
- const dir = this.dirNode;
45
-
46
- const u = dir.z.atan( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
47
- const v = dir.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
48
-
49
- return vec2( u, v );
50
-
51
- }
52
-
53
- }
54
-
55
- export default EquirectUVNode;
56
-
57
- /**
58
- * TSL function for creating an equirect uv node.
59
- *
60
- * @tsl
61
- * @function
62
- * @param {?Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
63
- * @returns {EquirectUVNode}
64
- */
65
- export const equirectUV = /*@__PURE__*/ nodeProxy( EquirectUVNode ).setParameterLength( 0, 1 );
@@ -1,49 +0,0 @@
1
- import TempNode from '../core/TempNode.js';
2
- import { transformedNormalView } from '../accessors/Normal.js';
3
- import { positionViewDirection } from '../accessors/Position.js';
4
- import { nodeImmutable, vec2, vec3 } from '../tsl/TSLBase.js';
5
-
6
- /**
7
- * Can be used to compute texture coordinates for projecting a
8
- * matcap onto a mesh. Used by {@link MeshMatcapNodeMaterial}.
9
- *
10
- * @augments TempNode
11
- */
12
- class MatcapUVNode extends TempNode {
13
-
14
- static get type() {
15
-
16
- return 'MatcapUVNode';
17
-
18
- }
19
-
20
- /**
21
- * Constructs a new matcap uv node.
22
- */
23
- constructor() {
24
-
25
- super( 'vec2' );
26
-
27
- }
28
-
29
- setup() {
30
-
31
- const x = vec3( positionViewDirection.z, 0, positionViewDirection.x.negate() ).normalize();
32
- const y = positionViewDirection.cross( x );
33
-
34
- return vec2( x.dot( transformedNormalView ), y.dot( transformedNormalView ) ).mul( 0.495 ).add( 0.5 ); // 0.495 to remove artifacts caused by undersized matcap disks
35
-
36
- }
37
-
38
- }
39
-
40
- export default MatcapUVNode;
41
-
42
- /**
43
- * TSL function for creating a matcap uv node.
44
- *
45
- * @tsl
46
- * @function
47
- * @returns {MatcapUVNode}
48
- */
49
- export const matcapUV = /*@__PURE__*/ nodeImmutable( MatcapUVNode );
@@ -1,148 +0,0 @@
1
- import Node from '../core/Node.js';
2
- import { add } from '../math/OperatorNode.js';
3
- import { normalLocal } from '../accessors/Normal.js';
4
- import { positionLocal } from '../accessors/Position.js';
5
- import { texture } from '../accessors/TextureNode.js';
6
- import { nodeProxy, float, vec3 } from '../tsl/TSLBase.js';
7
-
8
- /**
9
- * Can be used for triplanar texture mapping.
10
- *
11
- * ```js
12
- * material.colorNode = triplanarTexture( texture( diffuseMap ) );
13
- * ```
14
- *
15
- * @augments Node
16
- */
17
- class TriplanarTexturesNode extends Node {
18
-
19
- static get type() {
20
-
21
- return 'TriplanarTexturesNode';
22
-
23
- }
24
-
25
- /**
26
- * Constructs a new triplanar textures node.
27
- *
28
- * @param {Node} textureXNode - First texture node.
29
- * @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
30
- * @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
31
- * @param {?Node<float>} [scaleNode=float(1)] - The scale node.
32
- * @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
33
- * @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
34
- */
35
- constructor( textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionLocal, normalNode = normalLocal ) {
36
-
37
- super( 'vec4' );
38
-
39
- /**
40
- * First texture node.
41
- *
42
- * @type {Node}
43
- */
44
- this.textureXNode = textureXNode;
45
-
46
- /**
47
- * Second texture node. When not set, the shader will sample from `textureXNode` instead.
48
- *
49
- * @type {?Node}
50
- * @default null
51
- */
52
- this.textureYNode = textureYNode;
53
-
54
- /**
55
- * Third texture node. When not set, the shader will sample from `textureXNode` instead.
56
- *
57
- * @type {?Node}
58
- * @default null
59
- */
60
- this.textureZNode = textureZNode;
61
-
62
- /**
63
- * The scale node.
64
- *
65
- * @type {Node<float>}
66
- * @default float(1)
67
- */
68
- this.scaleNode = scaleNode;
69
-
70
- /**
71
- * Vertex positions in local space.
72
- *
73
- * @type {Node<vec3>}
74
- * @default positionLocal
75
- */
76
- this.positionNode = positionNode;
77
-
78
- /**
79
- * Normals in local space.
80
- *
81
- * @type {Node<vec3>}
82
- * @default normalLocal
83
- */
84
- this.normalNode = normalNode;
85
-
86
- }
87
-
88
- setup() {
89
-
90
- const { textureXNode, textureYNode, textureZNode, scaleNode, positionNode, normalNode } = this;
91
-
92
- // Ref: https://github.com/keijiro/StandardTriplanar
93
-
94
- // Blending factor of triplanar mapping
95
- let bf = normalNode.abs().normalize();
96
- bf = bf.div( bf.dot( vec3( 1.0 ) ) );
97
-
98
- // Triplanar mapping
99
- const tx = positionNode.yz.mul( scaleNode );
100
- const ty = positionNode.zx.mul( scaleNode );
101
- const tz = positionNode.xy.mul( scaleNode );
102
-
103
- // Base color
104
- const textureX = textureXNode.value;
105
- const textureY = textureYNode !== null ? textureYNode.value : textureX;
106
- const textureZ = textureZNode !== null ? textureZNode.value : textureX;
107
-
108
- const cx = texture( textureX, tx ).mul( bf.x );
109
- const cy = texture( textureY, ty ).mul( bf.y );
110
- const cz = texture( textureZ, tz ).mul( bf.z );
111
-
112
- return add( cx, cy, cz );
113
-
114
- }
115
-
116
- }
117
-
118
- export default TriplanarTexturesNode;
119
-
120
- /**
121
- * TSL function for creating a triplanar textures node.
122
- *
123
- * @tsl
124
- * @function
125
- * @param {Node} textureXNode - First texture node.
126
- * @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
127
- * @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
128
- * @param {?Node<float>} [scaleNode=float(1)] - The scale node.
129
- * @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
130
- * @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
131
- * @returns {TriplanarTexturesNode}
132
- */
133
- export const triplanarTextures = /*@__PURE__*/ nodeProxy( TriplanarTexturesNode ).setParameterLength( 1, 6 );
134
-
135
- /**
136
- * TSL function for creating a triplanar textures node.
137
- *
138
- * @tsl
139
- * @function
140
- * @param {Node} textureXNode - First texture node.
141
- * @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
142
- * @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
143
- * @param {?Node<float>} [scaleNode=float(1)] - The scale node.
144
- * @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
145
- * @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
146
- * @returns {TriplanarTexturesNode}
147
- */
148
- export const triplanarTexture = ( ...params ) => triplanarTextures( ...params );