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,41 +1,12 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { add } from '../math/OperatorNode.js';
3
2
 
4
3
  import { normalView, transformNormalToView } from '../accessors/Normal.js';
5
- import { positionView } from '../accessors/Position.js';
6
4
  import { TBNViewMatrix } from '../accessors/AccessorsUtils.js';
7
- import { uv } from '../accessors/UV.js';
8
- import { faceDirection } from './FrontFacingNode.js';
9
- import { Fn, nodeProxy, vec3 } from '../tsl/TSLBase.js';
5
+ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
10
6
 
11
7
  import { TangentSpaceNormalMap, ObjectSpaceNormalMap } from '../../constants.js';
12
-
13
- // Normal Mapping Without Precomputed Tangents
14
- // http://www.thetenthplanet.de/archives/1180
15
-
16
- const perturbNormal2Arb = /*@__PURE__*/ Fn( ( inputs ) => {
17
-
18
- const { eye_pos, surf_norm, mapN, uv } = inputs;
19
-
20
- const q0 = eye_pos.dFdx();
21
- const q1 = eye_pos.dFdy();
22
- const st0 = uv.dFdx();
23
- const st1 = uv.dFdy();
24
-
25
- const N = surf_norm; // normalized
26
-
27
- const q1perp = q1.cross( N );
28
- const q0perp = N.cross( q0 );
29
-
30
- const T = q1perp.mul( st0.x ).add( q0perp.mul( st1.x ) );
31
- const B = q1perp.mul( st0.y ).add( q0perp.mul( st1.y ) );
32
-
33
- const det = T.dot( T ).max( B.dot( B ) );
34
- const scale = faceDirection.mul( det.inverseSqrt() );
35
-
36
- return add( T.mul( mapN.x, scale ), B.mul( mapN.y, scale ), N.mul( mapN.z ) ).normalize();
37
-
38
- } );
8
+ import { directionToFaceDirection } from './FrontFacingNode.js';
9
+ import { error } from '../../utils.js';
39
10
 
40
11
  /**
41
12
  * This class can be used for applying normals maps to materials.
@@ -89,7 +60,7 @@ class NormalMapNode extends TempNode {
89
60
 
90
61
  }
91
62
 
92
- setup( builder ) {
63
+ setup( { material } ) {
93
64
 
94
65
  const { normalMapType, scaleNode } = this;
95
66
 
@@ -97,38 +68,37 @@ class NormalMapNode extends TempNode {
97
68
 
98
69
  if ( scaleNode !== null ) {
99
70
 
100
- normalMap = vec3( normalMap.xy.mul( scaleNode ), normalMap.z );
71
+ let scale = scaleNode;
72
+
73
+ if ( material.flatShading === true ) {
74
+
75
+ scale = directionToFaceDirection( scale );
76
+
77
+ }
78
+
79
+ normalMap = vec3( normalMap.xy.mul( scale ), normalMap.z );
101
80
 
102
81
  }
103
82
 
104
- let outputNode = null;
83
+ let output = null;
105
84
 
106
85
  if ( normalMapType === ObjectSpaceNormalMap ) {
107
86
 
108
- outputNode = transformNormalToView( normalMap );
87
+ output = transformNormalToView( normalMap );
109
88
 
110
89
  } else if ( normalMapType === TangentSpaceNormalMap ) {
111
90
 
112
- const tangent = builder.hasGeometryAttribute( 'tangent' );
113
-
114
- if ( tangent === true ) {
91
+ output = TBNViewMatrix.mul( normalMap ).normalize();
115
92
 
116
- outputNode = TBNViewMatrix.mul( normalMap ).normalize();
93
+ } else {
117
94
 
118
- } else {
95
+ error( `NodeMaterial: Unsupported normal map type: ${ normalMapType }` );
119
96
 
120
- outputNode = perturbNormal2Arb( {
121
- eye_pos: positionView,
122
- surf_norm: normalView,
123
- mapN: normalMap,
124
- uv: uv()
125
- } );
126
-
127
- }
97
+ output = normalView; // Fallback to default normal view
128
98
 
129
99
  }
130
100
 
131
- return outputNode;
101
+ return output;
132
102
 
133
103
  }
134
104
 
@@ -7,8 +7,10 @@ import { viewZToOrthographicDepth, perspectiveDepthToViewZ } from './ViewportDep
7
7
 
8
8
  import { HalfFloatType/*, FloatType*/ } from '../../constants.js';
9
9
  import { Vector2 } from '../../math/Vector2.js';
10
+ import { Vector4 } from '../../math/Vector4.js';
10
11
  import { DepthTexture } from '../../textures/DepthTexture.js';
11
12
  import { RenderTarget } from '../../core/RenderTarget.js';
13
+ import { warn } from '../../utils.js';
12
14
 
13
15
  const _size = /*@__PURE__*/ new Vector2();
14
16
 
@@ -48,7 +50,7 @@ class PassTextureNode extends TextureNode {
48
50
 
49
51
  setup( builder ) {
50
52
 
51
- if ( builder.object.isQuadMesh ) this.passNode.build( builder );
53
+ this.passNode.build( builder );
52
54
 
53
55
  return super.setup( builder );
54
56
 
@@ -126,7 +128,17 @@ class PassMultipleTextureNode extends PassTextureNode {
126
128
 
127
129
  clone() {
128
130
 
129
- return new this.constructor( this.passNode, this.textureName, this.previousTexture );
131
+ const newNode = new this.constructor( this.passNode, this.textureName, this.previousTexture );
132
+ newNode.uvNode = this.uvNode;
133
+ newNode.levelNode = this.levelNode;
134
+ newNode.biasNode = this.biasNode;
135
+ newNode.sampler = this.sampler;
136
+ newNode.depthNode = this.depthNode;
137
+ newNode.compareNode = this.compareNode;
138
+ newNode.gradNode = this.gradNode;
139
+ newNode.offsetNode = this.offsetNode;
140
+
141
+ return newNode;
130
142
 
131
143
  }
132
144
 
@@ -314,9 +326,42 @@ class PassNode extends TempNode {
314
326
  */
315
327
  this._mrt = null;
316
328
 
329
+ /**
330
+ * Layer object for configuring the camera that is used
331
+ * to produce the pass.
332
+ *
333
+ * @private
334
+ * @type {?Layers}
335
+ * @default null
336
+ */
317
337
  this._layers = null;
318
338
 
319
- this._resolution = 1;
339
+ /**
340
+ * Scales the resolution of the internal render target.
341
+ *
342
+ * @private
343
+ * @type {number}
344
+ * @default 1
345
+ */
346
+ this._resolutionScale = 1;
347
+
348
+ /**
349
+ * Custom viewport definition.
350
+ *
351
+ * @private
352
+ * @type {?Vector4}
353
+ * @default null
354
+ */
355
+ this._viewport = null;
356
+
357
+ /**
358
+ * Custom scissor definition.
359
+ *
360
+ * @private
361
+ * @type {?Vector4}
362
+ * @default null
363
+ */
364
+ this._scissor = null;
320
365
 
321
366
  /**
322
367
  * This flag can be used for type testing.
@@ -346,18 +391,45 @@ class PassNode extends TempNode {
346
391
 
347
392
  }
348
393
 
394
+ /**
395
+ * Sets the resolution scale for the pass.
396
+ * The resolution scale is a factor that is multiplied with the renderer's width and height.
397
+ *
398
+ * @param {number} resolutionScale - The resolution scale to set. A value of `1` means full resolution.
399
+ * @return {PassNode} A reference to this pass.
400
+ */
401
+ setResolutionScale( resolutionScale ) {
402
+
403
+ this._resolutionScale = resolutionScale;
404
+
405
+ return this;
406
+
407
+ }
408
+
409
+ /**
410
+ * Gets the current resolution scale of the pass.
411
+ *
412
+ * @return {number} The current resolution scale. A value of `1` means full resolution.
413
+ */
414
+ getResolutionScale() {
415
+
416
+ return this._resolutionScale;
417
+
418
+ }
419
+
349
420
  /**
350
421
  * Sets the resolution for the pass.
351
422
  * The resolution is a factor that is multiplied with the renderer's width and height.
352
423
  *
353
424
  * @param {number} resolution - The resolution to set. A value of `1` means full resolution.
354
425
  * @return {PassNode} A reference to this pass.
426
+ * @deprecated since r181. Use {@link PassNode#setResolutionScale `setResolutionScale()`} instead.
355
427
  */
356
- setResolution( resolution ) {
428
+ setResolution( resolution ) { // @deprecated, r181
357
429
 
358
- this._resolution = resolution;
430
+ warn( 'PassNode: .setResolution() is deprecated. Use .setResolutionScale() instead.' );
359
431
 
360
- return this;
432
+ return this.setResolutionScale( resolution );
361
433
 
362
434
  }
363
435
 
@@ -365,14 +437,22 @@ class PassNode extends TempNode {
365
437
  * Gets the current resolution of the pass.
366
438
  *
367
439
  * @return {number} The current resolution. A value of `1` means full resolution.
368
- * @default 1
440
+ * @deprecated since r181. Use {@link PassNode#getResolutionScale `getResolutionScale()`} instead.
369
441
  */
370
- getResolution() {
442
+ getResolution() { // @deprecated, r181
371
443
 
372
- return this._resolution;
444
+ warn( 'PassNode: .getResolution() is deprecated. Use .getResolutionScale() instead.' );
445
+
446
+ return this.getResolutionScale();
373
447
 
374
448
  }
375
449
 
450
+ /**
451
+ * Sets the layer configuration that should be used when rendering the pass.
452
+ *
453
+ * @param {Layers} layers - The layers object to set.
454
+ * @return {PassNode} A reference to this pass.
455
+ */
376
456
  setLayers( layers ) {
377
457
 
378
458
  this._layers = layers;
@@ -381,6 +461,11 @@ class PassNode extends TempNode {
381
461
 
382
462
  }
383
463
 
464
+ /**
465
+ * Gets the current layer configuration of the pass.
466
+ *
467
+ * @return {?Layers} .
468
+ */
384
469
  getLayers() {
385
470
 
386
471
  return this._layers;
@@ -582,16 +667,35 @@ class PassNode extends TempNode {
582
667
 
583
668
  }
584
669
 
585
- setup( { renderer } ) {
670
+ /**
671
+ * Precompiles the pass.
672
+ *
673
+ * Note that this method must be called after the pass configuration is complete.
674
+ * So calls like `setMRT()` and `getTextureNode()` must proceed the precompilation.
675
+ *
676
+ * @async
677
+ * @param {Renderer} renderer - The renderer.
678
+ * @return {Promise} A Promise that resolves when the compile has been finished.
679
+ * @see {@link Renderer#compileAsync}
680
+ */
681
+ async compileAsync( renderer ) {
586
682
 
587
- this.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples;
683
+ const currentRenderTarget = renderer.getRenderTarget();
684
+ const currentMRT = renderer.getMRT();
588
685
 
589
- // TODO: Disable MSAA for WebGL backend for now
590
- if ( renderer.backend.isWebGLBackend === true ) {
686
+ renderer.setRenderTarget( this.renderTarget );
687
+ renderer.setMRT( this._mrt );
591
688
 
592
- this.renderTarget.samples = 0;
689
+ await renderer.compileAsync( this.scene, this.camera );
593
690
 
594
- }
691
+ renderer.setRenderTarget( currentRenderTarget );
692
+ renderer.setMRT( currentMRT );
693
+
694
+ }
695
+
696
+ setup( { renderer } ) {
697
+
698
+ this.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples;
595
699
 
596
700
  this.renderTarget.texture.type = renderer.getColorBufferType();
597
701
 
@@ -633,6 +737,7 @@ class PassNode extends TempNode {
633
737
 
634
738
  const currentRenderTarget = renderer.getRenderTarget();
635
739
  const currentMRT = renderer.getMRT();
740
+ const currentAutoClear = renderer.autoClear;
636
741
  const currentMask = camera.layers.mask;
637
742
 
638
743
  this._cameraNear.value = camera.near;
@@ -652,11 +757,19 @@ class PassNode extends TempNode {
652
757
 
653
758
  renderer.setRenderTarget( this.renderTarget );
654
759
  renderer.setMRT( this._mrt );
760
+ renderer.autoClear = true;
761
+
762
+ const currentSceneName = scene.name;
763
+
764
+ scene.name = this.name ? this.name : scene.name;
655
765
 
656
766
  renderer.render( scene, camera );
657
767
 
768
+ scene.name = currentSceneName;
769
+
658
770
  renderer.setRenderTarget( currentRenderTarget );
659
771
  renderer.setMRT( currentMRT );
772
+ renderer.autoClear = currentAutoClear;
660
773
 
661
774
  camera.layers.mask = currentMask;
662
775
 
@@ -673,11 +786,87 @@ class PassNode extends TempNode {
673
786
  this._width = width;
674
787
  this._height = height;
675
788
 
676
- const effectiveWidth = this._width * this._pixelRatio * this._resolution;
677
- const effectiveHeight = this._height * this._pixelRatio * this._resolution;
789
+ const effectiveWidth = Math.floor( this._width * this._pixelRatio * this._resolutionScale );
790
+ const effectiveHeight = Math.floor( this._height * this._pixelRatio * this._resolutionScale );
678
791
 
679
792
  this.renderTarget.setSize( effectiveWidth, effectiveHeight );
680
793
 
794
+ if ( this._scissor !== null ) this.renderTarget.scissor.copy( this._scissor );
795
+ if ( this._viewport !== null ) this.renderTarget.viewport.copy( this._viewport );
796
+
797
+ }
798
+
799
+ /**
800
+ * This method allows to define the pass's scissor rectangle. By default, the scissor rectangle is kept
801
+ * in sync with the pass's dimensions. To reverse the process and use auto-sizing again, call the method
802
+ * with `null` as the single argument.
803
+ *
804
+ * @param {?(number | Vector4)} x - The horizontal coordinate for the lower left corner of the box in logical pixel unit.
805
+ * Instead of passing four arguments, the method also works with a single four-dimensional vector.
806
+ * @param {number} y - The vertical coordinate for the lower left corner of the box in logical pixel unit.
807
+ * @param {number} width - The width of the scissor box in logical pixel unit.
808
+ * @param {number} height - The height of the scissor box in logical pixel unit.
809
+ */
810
+ setScissor( x, y, width, height ) {
811
+
812
+ if ( x === null ) {
813
+
814
+ this._scissor = null;
815
+
816
+ } else {
817
+
818
+ if ( this._scissor === null ) this._scissor = new Vector4();
819
+
820
+ if ( x.isVector4 ) {
821
+
822
+ this._scissor.copy( x );
823
+
824
+ } else {
825
+
826
+ this._scissor.set( x, y, width, height );
827
+
828
+ }
829
+
830
+ this._scissor.multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
831
+
832
+ }
833
+
834
+ }
835
+
836
+ /**
837
+ * This method allows to define the pass's viewport. By default, the viewport is kept in sync
838
+ * with the pass's dimensions. To reverse the process and use auto-sizing again, call the method
839
+ * with `null` as the single argument.
840
+ *
841
+ * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.
842
+ * @param {number} y - The vertical coordinate for the lower left corner of the viewport origin in logical pixel unit.
843
+ * @param {number} width - The width of the viewport in logical pixel unit.
844
+ * @param {number} height - The height of the viewport in logical pixel unit.
845
+ */
846
+ setViewport( x, y, width, height ) {
847
+
848
+ if ( x === null ) {
849
+
850
+ this._viewport = null;
851
+
852
+ } else {
853
+
854
+ if ( this._viewport === null ) this._viewport = new Vector4();
855
+
856
+ if ( x.isVector4 ) {
857
+
858
+ this._viewport.copy( x );
859
+
860
+ } else {
861
+
862
+ this._viewport.set( x, y, width, height );
863
+
864
+ }
865
+
866
+ this._viewport.multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
867
+
868
+ }
869
+
681
870
  }
682
871
 
683
872
  /**
@@ -56,9 +56,10 @@ class RenderOutputNode extends TempNode {
56
56
  /**
57
57
  * The tone mapping type.
58
58
  *
59
+ * @private
59
60
  * @type {?number}
60
61
  */
61
- this.toneMapping = toneMapping;
62
+ this._toneMapping = toneMapping;
62
63
 
63
64
  /**
64
65
  * The output color space.
@@ -78,13 +79,38 @@ class RenderOutputNode extends TempNode {
78
79
 
79
80
  }
80
81
 
82
+ /**
83
+ * Sets the tone mapping type.
84
+ *
85
+ * @param {number} value - The tone mapping type.
86
+ * @return {ToneMappingNode} A reference to this node.
87
+ */
88
+ setToneMapping( value ) {
89
+
90
+ this._toneMapping = value;
91
+
92
+ return this;
93
+
94
+ }
95
+
96
+ /**
97
+ * Gets the tone mapping type.
98
+ *
99
+ * @returns {number} The tone mapping type.
100
+ */
101
+ getToneMapping() {
102
+
103
+ return this._toneMapping;
104
+
105
+ }
106
+
81
107
  setup( { context } ) {
82
108
 
83
109
  let outputNode = this.colorNode || context.color;
84
110
 
85
111
  // tone mapping
86
112
 
87
- const toneMapping = ( this.toneMapping !== null ? this.toneMapping : context.toneMapping ) || NoToneMapping;
113
+ const toneMapping = ( this._toneMapping !== null ? this._toneMapping : context.toneMapping ) || NoToneMapping;
88
114
  const outputColorSpace = ( this.outputColorSpace !== null ? this.outputColorSpace : context.outputColorSpace ) || NoColorSpace;
89
115
 
90
116
  if ( toneMapping !== NoToneMapping ) {
@@ -5,8 +5,9 @@ import { Fn, nodeImmutable, vec2 } from '../tsl/TSLBase.js';
5
5
 
6
6
  import { Vector2 } from '../../math/Vector2.js';
7
7
  import { Vector4 } from '../../math/Vector4.js';
8
+ import { warn } from '../../utils.js';
8
9
 
9
- let screenSizeVec, viewportVec;
10
+ let _screenSizeVec, _viewportVec;
10
11
 
11
12
  /**
12
13
  * This node provides a collection of screen related metrics.
@@ -26,7 +27,7 @@ class ScreenNode extends Node {
26
27
  /**
27
28
  * Constructs a new screen node.
28
29
  *
29
- * @param {('coordinate'|'viewport'|'size'|'uv')} scope - The node's scope.
30
+ * @param {('coordinate'|'viewport'|'size'|'uv'|'dpr')} scope - The node's scope.
30
31
  */
31
32
  constructor( scope ) {
32
33
 
@@ -39,11 +40,20 @@ class ScreenNode extends Node {
39
40
  * - `ScreenNode.VIEWPORT`: The current viewport defined as a four-dimensional vector.
40
41
  * - `ScreenNode.SIZE`: The dimensions of the current bound framebuffer.
41
42
  * - `ScreenNode.UV`: Normalized coordinates.
43
+ * - `ScreenNode.DPR`: Device pixel ratio.
42
44
  *
43
- * @type {('coordinate'|'viewport'|'size'|'uv')}
45
+ * @type {('coordinate'|'viewport'|'size'|'uv'|'dpr')}
44
46
  */
45
47
  this.scope = scope;
46
48
 
49
+ /**
50
+ * This output node.
51
+ *
52
+ * @type {?Node}
53
+ * @default null
54
+ */
55
+ this._output = null;
56
+
47
57
  /**
48
58
  * This flag can be used for type testing.
49
59
  *
@@ -58,10 +68,11 @@ class ScreenNode extends Node {
58
68
  /**
59
69
  * This method is overwritten since the node type depends on the selected scope.
60
70
  *
61
- * @return {('vec2'|'vec4')} The node type.
71
+ * @return {('float'|'vec2'|'vec4')} The node type.
62
72
  */
63
73
  getNodeType() {
64
74
 
75
+ if ( this.scope === ScreenNode.DPR ) return 'float';
65
76
  if ( this.scope === ScreenNode.VIEWPORT ) return 'vec4';
66
77
  else return 'vec2';
67
78
 
@@ -76,7 +87,7 @@ class ScreenNode extends Node {
76
87
 
77
88
  let updateType = NodeUpdateType.NONE;
78
89
 
79
- if ( this.scope === ScreenNode.SIZE || this.scope === ScreenNode.VIEWPORT ) {
90
+ if ( this.scope === ScreenNode.SIZE || this.scope === ScreenNode.VIEWPORT || this.scope === ScreenNode.DPR ) {
80
91
 
81
92
  updateType = NodeUpdateType.RENDER;
82
93
 
@@ -102,26 +113,30 @@ class ScreenNode extends Node {
102
113
 
103
114
  if ( renderTarget !== null ) {
104
115
 
105
- viewportVec.copy( renderTarget.viewport );
116
+ _viewportVec.copy( renderTarget.viewport );
106
117
 
107
118
  } else {
108
119
 
109
- renderer.getViewport( viewportVec );
120
+ renderer.getViewport( _viewportVec );
110
121
 
111
- viewportVec.multiplyScalar( renderer.getPixelRatio() );
122
+ _viewportVec.multiplyScalar( renderer.getPixelRatio() );
112
123
 
113
124
  }
114
125
 
126
+ } else if ( this.scope === ScreenNode.DPR ) {
127
+
128
+ this._output.value = renderer.getPixelRatio();
129
+
115
130
  } else {
116
131
 
117
132
  if ( renderTarget !== null ) {
118
133
 
119
- screenSizeVec.width = renderTarget.width;
120
- screenSizeVec.height = renderTarget.height;
134
+ _screenSizeVec.width = renderTarget.width;
135
+ _screenSizeVec.height = renderTarget.height;
121
136
 
122
137
  } else {
123
138
 
124
- renderer.getDrawingBufferSize( screenSizeVec );
139
+ renderer.getDrawingBufferSize( _screenSizeVec );
125
140
 
126
141
  }
127
142
 
@@ -137,11 +152,15 @@ class ScreenNode extends Node {
137
152
 
138
153
  if ( scope === ScreenNode.SIZE ) {
139
154
 
140
- output = uniform( screenSizeVec || ( screenSizeVec = new Vector2() ) );
155
+ output = uniform( _screenSizeVec || ( _screenSizeVec = new Vector2() ) );
141
156
 
142
157
  } else if ( scope === ScreenNode.VIEWPORT ) {
143
158
 
144
- output = uniform( viewportVec || ( viewportVec = new Vector4() ) );
159
+ output = uniform( _viewportVec || ( _viewportVec = new Vector4() ) );
160
+
161
+ } else if ( scope === ScreenNode.DPR ) {
162
+
163
+ output = uniform( 1 );
145
164
 
146
165
  } else {
147
166
 
@@ -149,6 +168,8 @@ class ScreenNode extends Node {
149
168
 
150
169
  }
151
170
 
171
+ this._output = output;
172
+
152
173
  return output;
153
174
 
154
175
  }
@@ -183,11 +204,20 @@ ScreenNode.COORDINATE = 'coordinate';
183
204
  ScreenNode.VIEWPORT = 'viewport';
184
205
  ScreenNode.SIZE = 'size';
185
206
  ScreenNode.UV = 'uv';
207
+ ScreenNode.DPR = 'dpr';
186
208
 
187
209
  export default ScreenNode;
188
210
 
189
211
  // Screen
190
212
 
213
+ /**
214
+ * TSL object that represents the current DPR.
215
+ *
216
+ * @tsl
217
+ * @type {ScreenNode<float>}
218
+ */
219
+ export const screenDPR = /*@__PURE__*/ nodeImmutable( ScreenNode, ScreenNode.DPR );
220
+
191
221
  /**
192
222
  * TSL object that represents normalized screen coordinates, unitless in `[0, 1]`.
193
223
  *
@@ -253,34 +283,8 @@ export const viewportUV = /*@__PURE__*/ viewportCoordinate.div( viewportSize );
253
283
  */
254
284
  export const viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r169
255
285
 
256
- console.warn( 'THREE.TSL: "viewportResolution" is deprecated. Use "screenSize" instead.' );
286
+ warn( 'TSL: "viewportResolution" is deprecated. Use "screenSize" instead.' );
257
287
 
258
288
  return screenSize;
259
289
 
260
290
  }, 'vec2' ).once() )();
261
-
262
- /**
263
- * @tsl
264
- * @deprecated since r168. Use {@link screenUV} instead.
265
- * @type {Node<vec2>}
266
- */
267
- export const viewportTopLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
268
-
269
- console.warn( 'THREE.TSL: "viewportTopLeft" is deprecated. Use "screenUV" instead.' );
270
-
271
- return screenUV;
272
-
273
- }, 'vec2' ).once() )();
274
-
275
- /**
276
- * @tsl
277
- * @deprecated since r168. Use `screenUV.flipY()` instead.
278
- * @type {Node<vec2>}
279
- */
280
- export const viewportBottomLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
281
-
282
- console.warn( 'THREE.TSL: "viewportBottomLeft" is deprecated. Use "screenUV.flipY()" instead.' );
283
-
284
- return screenUV.flipY();
285
-
286
- }, 'vec2' ).once() )();