@plastic-software/three 0.167.4 → 0.174.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 (747) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36217 -23964
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46744
  7. package/build/three.module.min.js +2 -3
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50671
  11. package/build/three.webgpu.min.js +2 -3
  12. package/build/three.webgpu.nodes.js +70301 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/jsm/Addons.js +3 -15
  15. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  16. package/examples/jsm/animation/CCDIKSolver.js +61 -11
  17. package/examples/jsm/capabilities/WebGL.js +27 -21
  18. package/examples/jsm/capabilities/WebGPU.js +1 -10
  19. package/examples/jsm/controls/ArcballControls.js +262 -231
  20. package/examples/jsm/controls/DragControls.js +1 -1
  21. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  22. package/examples/jsm/controls/FlyControls.js +194 -188
  23. package/examples/jsm/controls/OrbitControls.js +801 -777
  24. package/examples/jsm/controls/PointerLockControls.js +26 -20
  25. package/examples/jsm/controls/TrackballControls.js +469 -448
  26. package/examples/jsm/controls/TransformControls.js +119 -68
  27. package/examples/jsm/csm/CSM.js +2 -2
  28. package/examples/jsm/csm/CSMFrustum.js +7 -4
  29. package/examples/jsm/csm/CSMHelper.js +2 -0
  30. package/examples/jsm/csm/CSMShadowNode.js +442 -0
  31. package/examples/jsm/curves/NURBSCurve.js +33 -2
  32. package/examples/jsm/curves/NURBSUtils.js +3 -0
  33. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  34. package/examples/jsm/effects/OutlineEffect.js +1 -1
  35. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  36. package/examples/jsm/effects/StereoEffect.js +6 -1
  37. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  38. package/examples/jsm/exporters/EXRExporter.js +19 -11
  39. package/examples/jsm/exporters/GLTFExporter.js +181 -109
  40. package/examples/jsm/exporters/KTX2Exporter.js +54 -23
  41. package/examples/jsm/exporters/OBJExporter.js +5 -1
  42. package/examples/jsm/exporters/PLYExporter.js +11 -9
  43. package/examples/jsm/exporters/USDZExporter.js +50 -11
  44. package/examples/jsm/geometries/DecalGeometry.js +73 -21
  45. package/examples/jsm/geometries/TextGeometry.js +1 -12
  46. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  47. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  48. package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
  49. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  50. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  51. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  52. package/examples/jsm/interactive/SelectionHelper.js +3 -1
  53. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  54. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  55. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  56. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  57. package/examples/jsm/lighting/TiledLighting.js +18 -0
  58. package/examples/jsm/lights/LightProbeGenerator.js +26 -12
  59. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  60. package/examples/jsm/lines/LineGeometry.js +25 -0
  61. package/examples/jsm/lines/LineMaterial.js +0 -1
  62. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  63. package/examples/jsm/lines/webgpu/Line2.js +2 -1
  64. package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
  65. package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
  66. package/examples/jsm/loaders/3DMLoader.js +1 -0
  67. package/examples/jsm/loaders/3MFLoader.js +104 -2
  68. package/examples/jsm/loaders/BVHLoader.js +1 -1
  69. package/examples/jsm/loaders/ColladaLoader.js +15 -12
  70. package/examples/jsm/loaders/DDSLoader.js +42 -0
  71. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  72. package/examples/jsm/loaders/FBXLoader.js +71 -22
  73. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  74. package/examples/jsm/loaders/GLTFLoader.js +29 -14
  75. package/examples/jsm/loaders/KTX2Loader.js +160 -58
  76. package/examples/jsm/loaders/KTXLoader.js +4 -4
  77. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  78. package/examples/jsm/loaders/LottieLoader.js +2 -1
  79. package/examples/jsm/loaders/MTLLoader.js +27 -7
  80. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  81. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  82. package/examples/jsm/loaders/OBJLoader.js +5 -3
  83. package/examples/jsm/loaders/PCDLoader.js +14 -13
  84. package/examples/jsm/loaders/PDBLoader.js +3 -2
  85. package/examples/jsm/loaders/PLYLoader.js +15 -12
  86. package/examples/jsm/loaders/PVRLoader.js +1 -1
  87. package/examples/jsm/loaders/STLLoader.js +3 -2
  88. package/examples/jsm/loaders/SVGLoader.js +2 -2
  89. package/examples/jsm/loaders/TDSLoader.js +17 -18
  90. package/examples/jsm/loaders/VRMLLoader.js +17 -17
  91. package/examples/jsm/loaders/VTKLoader.js +4 -3
  92. package/examples/jsm/loaders/XYZLoader.js +3 -2
  93. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  94. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  95. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  96. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  97. package/examples/jsm/math/ColorSpaces.js +76 -0
  98. package/examples/jsm/math/ConvexHull.js +1 -1
  99. package/examples/jsm/math/OBB.js +17 -0
  100. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  101. package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
  102. package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
  103. package/examples/jsm/misc/Timer.js +27 -12
  104. package/examples/jsm/misc/Volume.js +28 -18
  105. package/examples/jsm/misc/VolumeSlice.js +19 -16
  106. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  107. package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
  108. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  109. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  110. package/examples/jsm/objects/LensflareMesh.js +324 -0
  111. package/examples/jsm/objects/Reflector.js +5 -2
  112. package/examples/jsm/objects/Sky.js +2 -2
  113. package/examples/jsm/objects/SkyMesh.js +14 -14
  114. package/examples/jsm/objects/Water2.js +1 -1
  115. package/examples/jsm/objects/Water2Mesh.js +11 -9
  116. package/examples/jsm/objects/WaterMesh.js +38 -33
  117. package/examples/jsm/physics/JoltPhysics.js +8 -8
  118. package/examples/jsm/physics/RapierPhysics.js +5 -5
  119. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  120. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  121. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  122. package/examples/jsm/postprocessing/OutlinePass.js +37 -51
  123. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  124. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  125. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  126. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  128. package/examples/jsm/postprocessing/SSRPass.js +8 -4
  129. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  130. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  131. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  132. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  133. package/examples/jsm/shaders/BokehShader2.js +1 -1
  134. package/examples/jsm/shaders/FXAAShader.js +225 -224
  135. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  136. package/examples/jsm/shaders/OutputShader.js +6 -2
  137. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  138. package/examples/jsm/transpiler/AST.js +12 -2
  139. package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
  140. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  141. package/examples/jsm/transpiler/TSLEncoder.js +96 -21
  142. package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
  143. package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
  144. package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
  145. package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
  146. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
  147. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  148. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
  149. package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
  150. package/examples/jsm/tsl/display/FXAANode.js +364 -0
  151. package/examples/jsm/tsl/display/FilmNode.js +100 -0
  152. package/examples/jsm/tsl/display/GTAONode.js +521 -0
  153. package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
  154. package/examples/jsm/tsl/display/LensflareNode.js +278 -0
  155. package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
  156. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  157. package/examples/jsm/tsl/display/OutlineNode.js +750 -0
  158. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
  159. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
  160. package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
  161. package/examples/jsm/tsl/display/SMAANode.js +767 -0
  162. package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
  163. package/examples/jsm/tsl/display/SSRNode.js +538 -0
  164. package/examples/jsm/tsl/display/Sepia.js +24 -0
  165. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
  166. package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
  167. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  168. package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
  169. package/examples/jsm/tsl/display/TransitionNode.js +140 -0
  170. package/examples/jsm/tsl/display/hashBlur.js +34 -0
  171. package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
  172. package/examples/jsm/tsl/math/Bayer.js +18 -0
  173. package/examples/jsm/tsl/utils/Raymarching.js +65 -0
  174. package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
  175. package/examples/jsm/utils/CameraUtils.js +4 -1
  176. package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
  177. package/examples/jsm/utils/GeometryUtils.js +22 -19
  178. package/examples/jsm/utils/SceneOptimizer.js +410 -0
  179. package/examples/jsm/utils/SceneUtils.js +2 -2
  180. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  181. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  182. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  183. package/examples/jsm/utils/UVsDebug.js +1 -1
  184. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
  185. package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
  186. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  187. package/examples/jsm/webxr/Text2D.js +6 -6
  188. package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
  189. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  190. package/package.json +14 -9
  191. package/src/Three.Core.js +182 -0
  192. package/src/Three.Legacy.js +0 -21
  193. package/src/Three.TSL.js +543 -0
  194. package/src/Three.WebGPU.Nodes.js +23 -0
  195. package/src/Three.WebGPU.js +13 -184
  196. package/src/Three.js +1 -176
  197. package/src/animation/AnimationClip.js +2 -2
  198. package/src/animation/AnimationObjectGroup.js +2 -2
  199. package/src/animation/AnimationUtils.js +1 -1
  200. package/src/animation/PropertyBinding.js +2 -2
  201. package/src/audio/Audio.js +379 -2
  202. package/src/audio/AudioAnalyser.js +58 -1
  203. package/src/audio/AudioContext.js +15 -0
  204. package/src/audio/AudioListener.js +76 -0
  205. package/src/audio/PositionalAudio.js +107 -0
  206. package/src/cameras/ArrayCamera.js +29 -0
  207. package/src/cameras/Camera.js +47 -0
  208. package/src/cameras/CubeCamera.js +66 -0
  209. package/src/cameras/OrthographicCamera.js +109 -0
  210. package/src/cameras/PerspectiveCamera.js +173 -34
  211. package/src/cameras/StereoCamera.js +48 -2
  212. package/src/constants.js +6 -6
  213. package/src/core/BufferAttribute.js +4 -9
  214. package/src/core/BufferGeometry.js +48 -8
  215. package/src/core/Clock.js +1 -1
  216. package/src/core/EventDispatcher.js +52 -8
  217. package/src/core/InterleavedBuffer.js +4 -13
  218. package/src/core/Object3D.js +573 -3
  219. package/src/core/RenderTarget.js +22 -4
  220. package/src/core/RenderTarget3D.js +22 -0
  221. package/src/core/RenderTargetArray.js +22 -0
  222. package/src/extras/Controls.js +104 -0
  223. package/src/extras/DataUtils.js +48 -8
  224. package/src/extras/Earcut.js +18 -7
  225. package/src/extras/ImageUtils.js +18 -11
  226. package/src/extras/PMREMGenerator.js +40 -9
  227. package/src/extras/ShapeUtils.js +24 -2
  228. package/src/extras/TextureUtils.js +96 -10
  229. package/src/extras/core/Curve.js +153 -53
  230. package/src/extras/core/CurvePath.js +63 -22
  231. package/src/extras/core/Interpolations.js +29 -3
  232. package/src/extras/core/Path.js +134 -1
  233. package/src/extras/core/Shape.js +66 -3
  234. package/src/extras/core/ShapePath.js +76 -0
  235. package/src/extras/curves/ArcCurve.js +22 -0
  236. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  237. package/src/extras/curves/CubicBezierCurve.js +67 -0
  238. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  239. package/src/extras/curves/EllipseCurve.js +102 -0
  240. package/src/extras/curves/LineCurve.js +36 -0
  241. package/src/extras/curves/LineCurve3.js +36 -0
  242. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  243. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  244. package/src/extras/curves/SplineCurve.js +48 -0
  245. package/src/geometries/BoxGeometry.js +38 -0
  246. package/src/geometries/CapsuleGeometry.js +34 -0
  247. package/src/geometries/CircleGeometry.js +40 -0
  248. package/src/geometries/ConeGeometry.js +38 -0
  249. package/src/geometries/CylinderGeometry.js +50 -4
  250. package/src/geometries/DodecahedronGeometry.js +32 -0
  251. package/src/geometries/EdgesGeometry.js +30 -2
  252. package/src/geometries/ExtrudeGeometry.js +52 -0
  253. package/src/geometries/IcosahedronGeometry.js +32 -0
  254. package/src/geometries/LatheGeometry.js +43 -3
  255. package/src/geometries/OctahedronGeometry.js +32 -0
  256. package/src/geometries/PlaneGeometry.js +34 -0
  257. package/src/geometries/PolyhedronGeometry.js +29 -0
  258. package/src/geometries/RingGeometry.js +36 -0
  259. package/src/geometries/ShapeGeometry.js +37 -0
  260. package/src/geometries/SphereGeometry.js +37 -0
  261. package/src/geometries/TetrahedronGeometry.js +32 -0
  262. package/src/geometries/TorusGeometry.js +35 -0
  263. package/src/geometries/TorusKnotGeometry.js +38 -0
  264. package/src/geometries/TubeGeometry.js +49 -0
  265. package/src/geometries/WireframeGeometry.js +32 -0
  266. package/src/helpers/ArrowHelper.js +60 -3
  267. package/src/helpers/AxesHelper.js +28 -0
  268. package/src/helpers/Box3Helper.js +28 -0
  269. package/src/helpers/BoxHelper.js +43 -7
  270. package/src/helpers/CameraHelper.js +61 -18
  271. package/src/helpers/DirectionalLightHelper.js +52 -0
  272. package/src/helpers/GridHelper.js +26 -0
  273. package/src/helpers/HemisphereLightHelper.js +39 -0
  274. package/src/helpers/PlaneHelper.js +33 -0
  275. package/src/helpers/PointLightHelper.js +43 -0
  276. package/src/helpers/PolarGridHelper.js +30 -0
  277. package/src/helpers/SkeletonHelper.js +39 -2
  278. package/src/helpers/SpotLightHelper.js +40 -0
  279. package/src/lights/AmbientLight.js +25 -0
  280. package/src/lights/DirectionalLight.js +57 -0
  281. package/src/lights/DirectionalLightShadow.js +15 -0
  282. package/src/lights/HemisphereLight.js +32 -0
  283. package/src/lights/Light.js +36 -0
  284. package/src/lights/LightProbe.js +43 -0
  285. package/src/lights/LightShadow.js +159 -0
  286. package/src/lights/PointLight.js +59 -0
  287. package/src/lights/PointLightShadow.js +21 -0
  288. package/src/lights/RectAreaLight.js +59 -0
  289. package/src/lights/SpotLight.js +102 -0
  290. package/src/lights/SpotLightShadow.js +24 -2
  291. package/src/lights/webgpu/IESSpotLight.js +21 -0
  292. package/src/loaders/Loader.js +132 -0
  293. package/src/loaders/MaterialLoader.js +7 -1
  294. package/src/loaders/nodes/NodeLoader.js +189 -0
  295. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  296. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  297. package/src/materials/LineDashedMaterial.js +0 -1
  298. package/src/materials/Material.js +469 -7
  299. package/src/materials/MeshPhongMaterial.js +1 -1
  300. package/src/materials/MeshPhysicalMaterial.js +2 -2
  301. package/src/materials/MeshStandardMaterial.js +2 -2
  302. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
  303. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  304. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  305. package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
  306. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  307. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  308. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  309. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  310. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
  311. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  312. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  313. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  314. package/src/materials/nodes/NodeMaterial.js +1180 -0
  315. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
  316. package/src/materials/nodes/PointsNodeMaterial.js +153 -0
  317. package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
  318. package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
  319. package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
  320. package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
  321. package/src/math/Box2.js +177 -0
  322. package/src/math/Box3.js +243 -0
  323. package/src/math/Color.js +343 -0
  324. package/src/math/ColorManagement.js +143 -102
  325. package/src/math/Cylindrical.js +65 -6
  326. package/src/math/Euler.js +137 -4
  327. package/src/math/Frustum.js +83 -0
  328. package/src/math/Interpolant.js +87 -8
  329. package/src/math/Line3.js +96 -2
  330. package/src/math/MathUtils.js +182 -19
  331. package/src/math/Matrix2.js +70 -0
  332. package/src/math/Matrix3.js +229 -4
  333. package/src/math/Matrix4.js +368 -3
  334. package/src/math/Plane.js +164 -2
  335. package/src/math/Quaternion.js +265 -9
  336. package/src/math/Ray.js +160 -0
  337. package/src/math/Sphere.js +147 -0
  338. package/src/math/Spherical.js +73 -11
  339. package/src/math/SphericalHarmonics3.js +112 -14
  340. package/src/math/Triangle.js +230 -2
  341. package/src/math/Vector2.js +396 -10
  342. package/src/math/Vector3.js +550 -13
  343. package/src/math/Vector4.js +415 -9
  344. package/src/math/interpolants/CubicInterpolant.js +10 -1
  345. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  346. package/src/math/interpolants/LinearInterpolant.js +13 -0
  347. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  348. package/src/nodes/Nodes.js +84 -166
  349. package/src/nodes/TSL.js +167 -0
  350. package/src/nodes/accessors/AccessorsUtils.js +39 -10
  351. package/src/nodes/accessors/Arrays.js +68 -0
  352. package/src/nodes/accessors/BatchNode.js +93 -26
  353. package/src/nodes/accessors/Bitangent.js +54 -0
  354. package/src/nodes/accessors/BufferAttributeNode.js +189 -11
  355. package/src/nodes/accessors/BufferNode.js +70 -5
  356. package/src/nodes/accessors/BuiltinNode.js +63 -0
  357. package/src/nodes/accessors/Camera.js +129 -0
  358. package/src/nodes/accessors/ClippingNode.js +152 -43
  359. package/src/nodes/accessors/CubeTextureNode.js +76 -13
  360. package/src/nodes/accessors/InstanceNode.js +118 -35
  361. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  362. package/src/nodes/accessors/Lights.js +129 -0
  363. package/src/nodes/accessors/MaterialNode.js +394 -58
  364. package/src/nodes/accessors/MaterialProperties.js +57 -1
  365. package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
  366. package/src/nodes/accessors/ModelNode.js +159 -12
  367. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
  368. package/src/nodes/accessors/MorphNode.js +60 -13
  369. package/src/nodes/accessors/Normal.js +156 -0
  370. package/src/nodes/accessors/Object3DNode.js +154 -35
  371. package/src/nodes/accessors/PointUVNode.js +35 -6
  372. package/src/nodes/accessors/Position.js +64 -0
  373. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  374. package/src/nodes/accessors/ReferenceNode.js +243 -6
  375. package/src/nodes/accessors/ReflectVector.js +36 -0
  376. package/src/nodes/accessors/RendererReferenceNode.js +57 -7
  377. package/src/nodes/accessors/SceneNode.js +98 -6
  378. package/src/nodes/accessors/SkinningNode.js +214 -21
  379. package/src/nodes/accessors/StorageBufferNode.js +288 -28
  380. package/src/nodes/accessors/StorageTextureNode.js +139 -12
  381. package/src/nodes/accessors/Tangent.js +62 -0
  382. package/src/nodes/accessors/Texture3DNode.js +98 -12
  383. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
  384. package/src/nodes/accessors/TextureNode.js +347 -34
  385. package/src/nodes/accessors/TextureSizeNode.js +51 -9
  386. package/src/nodes/accessors/UV.js +11 -0
  387. package/src/nodes/accessors/UniformArrayNode.js +241 -32
  388. package/src/nodes/accessors/UserDataNode.js +55 -7
  389. package/src/nodes/accessors/VelocityNode.js +223 -0
  390. package/src/nodes/accessors/VertexColorNode.js +45 -6
  391. package/src/nodes/code/CodeNode.js +108 -8
  392. package/src/nodes/code/ExpressionNode.js +38 -7
  393. package/src/nodes/code/FunctionCallNode.js +62 -11
  394. package/src/nodes/code/FunctionNode.js +54 -24
  395. package/src/nodes/code/ScriptableNode.js +241 -17
  396. package/src/nodes/code/ScriptableValueNode.js +93 -8
  397. package/src/nodes/core/ArrayNode.js +142 -0
  398. package/src/nodes/core/AssignNode.js +60 -12
  399. package/src/nodes/core/AttributeNode.js +55 -22
  400. package/src/nodes/core/BypassNode.js +59 -11
  401. package/src/nodes/core/CacheNode.js +64 -10
  402. package/src/nodes/core/ConstNode.js +38 -3
  403. package/src/nodes/core/ContextNode.js +87 -12
  404. package/src/nodes/core/IndexNode.js +102 -10
  405. package/src/nodes/core/InputNode.js +55 -3
  406. package/src/nodes/core/LightingModel.js +65 -5
  407. package/src/nodes/core/MRTNode.js +81 -7
  408. package/src/nodes/core/Node.js +368 -50
  409. package/src/nodes/core/NodeAttribute.js +38 -0
  410. package/src/nodes/core/NodeBuilder.js +1317 -83
  411. package/src/nodes/core/NodeCache.js +41 -2
  412. package/src/nodes/core/NodeCode.js +31 -0
  413. package/src/nodes/core/NodeFrame.js +123 -2
  414. package/src/nodes/core/NodeFunction.js +46 -0
  415. package/src/nodes/core/NodeFunctionInput.js +44 -0
  416. package/src/nodes/core/NodeParser.js +11 -0
  417. package/src/nodes/core/NodeUniform.js +52 -0
  418. package/src/nodes/core/NodeUtils.js +226 -6
  419. package/src/nodes/core/NodeVar.js +47 -1
  420. package/src/nodes/core/NodeVarying.js +28 -0
  421. package/src/nodes/core/OutputStructNode.js +61 -17
  422. package/src/nodes/core/ParameterNode.js +34 -4
  423. package/src/nodes/core/PropertyNode.js +296 -32
  424. package/src/nodes/core/StackNode.js +108 -8
  425. package/src/nodes/core/StructNode.js +120 -0
  426. package/src/nodes/core/StructType.js +13 -0
  427. package/src/nodes/core/StructTypeNode.js +116 -9
  428. package/src/nodes/core/TempNode.js +37 -7
  429. package/src/nodes/core/UniformGroupNode.js +98 -17
  430. package/src/nodes/core/UniformNode.js +72 -4
  431. package/src/nodes/core/VarNode.js +170 -13
  432. package/src/nodes/core/VaryingNode.js +109 -8
  433. package/src/nodes/core/constants.js +40 -0
  434. package/src/nodes/display/BlendModes.js +193 -0
  435. package/src/nodes/display/BumpMapNode.js +47 -10
  436. package/src/nodes/display/ColorAdjustment.js +141 -0
  437. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  438. package/src/nodes/display/ColorSpaceNode.js +147 -68
  439. package/src/nodes/display/FrontFacingNode.js +39 -6
  440. package/src/nodes/display/NormalMapNode.js +55 -13
  441. package/src/nodes/display/PassNode.js +420 -19
  442. package/src/nodes/display/PosterizeNode.js +40 -7
  443. package/src/nodes/display/RenderOutputNode.js +81 -13
  444. package/src/nodes/display/ScreenNode.js +286 -0
  445. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  446. package/src/nodes/display/ToneMappingNode.js +68 -175
  447. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  448. package/src/nodes/display/ViewportDepthNode.js +210 -36
  449. package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
  450. package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
  451. package/src/nodes/display/ViewportTextureNode.js +68 -11
  452. package/src/nodes/fog/Fog.js +113 -0
  453. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  454. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  455. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  456. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  457. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  458. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  459. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  460. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  461. package/src/nodes/functions/BSDF/LTC.js +50 -6
  462. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  463. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  464. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  465. package/src/nodes/functions/BasicLightingModel.js +27 -6
  466. package/src/nodes/functions/PhongLightingModel.js +38 -8
  467. package/src/nodes/functions/PhysicalLightingModel.js +215 -51
  468. package/src/nodes/functions/ShadowMaskModel.js +24 -1
  469. package/src/nodes/functions/ToonLightingModel.js +24 -5
  470. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  471. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  472. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  473. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  474. package/src/nodes/functions/material/getRoughness.js +2 -2
  475. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  476. package/src/nodes/geometry/RangeNode.js +62 -7
  477. package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
  478. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  479. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  480. package/src/nodes/gpgpu/ComputeNode.js +124 -9
  481. package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
  482. package/src/nodes/lighting/AONode.js +24 -3
  483. package/src/nodes/lighting/AmbientLightNode.js +16 -8
  484. package/src/nodes/lighting/AnalyticLightNode.js +151 -231
  485. package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
  486. package/src/nodes/lighting/BasicLightMapNode.js +25 -5
  487. package/src/nodes/lighting/DirectionalLightNode.js +19 -20
  488. package/src/nodes/lighting/EnvironmentNode.js +34 -17
  489. package/src/nodes/lighting/HemisphereLightNode.js +42 -11
  490. package/src/nodes/lighting/IESSpotLightNode.js +18 -9
  491. package/src/nodes/lighting/IrradianceNode.js +23 -3
  492. package/src/nodes/lighting/LightProbeNode.js +29 -36
  493. package/src/nodes/lighting/LightUtils.js +12 -4
  494. package/src/nodes/lighting/LightingContextNode.js +70 -21
  495. package/src/nodes/lighting/LightingNode.js +22 -9
  496. package/src/nodes/lighting/LightsNode.js +309 -86
  497. package/src/nodes/lighting/PointLightNode.js +66 -32
  498. package/src/nodes/lighting/PointShadowNode.js +306 -0
  499. package/src/nodes/lighting/RectAreaLightNode.js +61 -25
  500. package/src/nodes/lighting/ShadowBaseNode.js +92 -0
  501. package/src/nodes/lighting/ShadowNode.js +812 -0
  502. package/src/nodes/lighting/SpotLightNode.js +73 -31
  503. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  504. package/src/nodes/materialx/lib/mx_hsv.js +27 -22
  505. package/src/nodes/materialx/lib/mx_noise.js +70 -70
  506. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  507. package/src/nodes/math/ConditionalNode.js +230 -0
  508. package/src/nodes/math/Hash.js +21 -0
  509. package/src/nodes/math/MathNode.js +812 -131
  510. package/src/nodes/math/MathUtils.js +47 -8
  511. package/src/nodes/math/OperatorNode.js +410 -66
  512. package/src/nodes/math/TriNoise3D.js +32 -32
  513. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  514. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  515. package/src/nodes/pmrem/PMREMNode.js +188 -28
  516. package/src/nodes/pmrem/PMREMUtils.js +24 -24
  517. package/src/nodes/procedural/Checker.js +22 -0
  518. package/src/nodes/shapes/Shapes.js +32 -0
  519. package/src/nodes/tsl/TSLBase.js +31 -0
  520. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
  521. package/src/nodes/utils/ArrayElementNode.js +45 -5
  522. package/src/nodes/utils/ConvertNode.js +39 -4
  523. package/src/nodes/utils/CubeMapNode.js +88 -8
  524. package/src/nodes/utils/Discard.js +24 -0
  525. package/src/nodes/utils/EquirectUVNode.js +39 -7
  526. package/src/nodes/utils/FlipNode.js +106 -0
  527. package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
  528. package/src/nodes/utils/JoinNode.js +31 -3
  529. package/src/nodes/utils/LoopNode.js +95 -9
  530. package/src/nodes/utils/MatcapUVNode.js +27 -8
  531. package/src/nodes/utils/MaxMipLevelNode.js +57 -6
  532. package/src/nodes/utils/MemberNode.js +68 -0
  533. package/src/nodes/utils/Oscillators.js +41 -0
  534. package/src/nodes/utils/Packing.js +21 -0
  535. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  536. package/src/nodes/utils/RTTNode.js +141 -9
  537. package/src/nodes/utils/ReflectorNode.js +295 -21
  538. package/src/nodes/utils/RemapNode.js +93 -10
  539. package/src/nodes/utils/RotateNode.js +48 -13
  540. package/src/nodes/utils/SetNode.js +50 -4
  541. package/src/nodes/utils/SplitNode.js +62 -6
  542. package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
  543. package/src/nodes/utils/SpriteUtils.js +21 -5
  544. package/src/nodes/utils/StorageArrayElementNode.js +64 -12
  545. package/src/nodes/utils/Timer.js +73 -0
  546. package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
  547. package/src/nodes/utils/UVUtils.js +27 -9
  548. package/src/nodes/utils/ViewportUtils.js +16 -4
  549. package/src/objects/BatchedMesh.js +808 -281
  550. package/src/objects/Bone.js +24 -0
  551. package/src/objects/ClippingGroup.js +68 -0
  552. package/src/objects/Group.js +24 -0
  553. package/src/objects/InstancedMesh.js +120 -2
  554. package/src/objects/LOD.js +120 -5
  555. package/src/objects/Line.js +89 -6
  556. package/src/objects/LineLoop.js +20 -0
  557. package/src/objects/LineSegments.js +18 -0
  558. package/src/objects/Mesh.js +82 -23
  559. package/src/objects/Points.js +62 -0
  560. package/src/objects/Skeleton.js +107 -2
  561. package/src/objects/SkinnedMesh.js +99 -5
  562. package/src/objects/Sprite.js +54 -0
  563. package/src/renderers/WebGLRenderer.js +274 -157
  564. package/src/renderers/common/Animation.js +109 -12
  565. package/src/renderers/common/Attributes.js +40 -0
  566. package/src/renderers/common/Backend.js +504 -44
  567. package/src/renderers/common/Background.js +67 -9
  568. package/src/renderers/common/BindGroup.js +45 -1
  569. package/src/renderers/common/Binding.js +35 -0
  570. package/src/renderers/common/Bindings.js +136 -19
  571. package/src/renderers/common/Buffer.js +49 -0
  572. package/src/renderers/common/BufferUtils.js +25 -0
  573. package/src/renderers/common/BundleGroup.js +83 -0
  574. package/src/renderers/common/ChainMap.js +45 -6
  575. package/src/renderers/common/ClippingContext.js +175 -80
  576. package/src/renderers/common/Color4.js +40 -0
  577. package/src/renderers/common/ComputePipeline.js +24 -0
  578. package/src/renderers/common/Constants.js +2 -1
  579. package/src/renderers/common/CubeRenderTarget.js +22 -3
  580. package/src/renderers/common/DataMap.js +37 -1
  581. package/src/renderers/common/Geometries.js +111 -14
  582. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  583. package/src/renderers/common/Info.js +78 -35
  584. package/src/renderers/common/Lighting.js +73 -0
  585. package/src/renderers/common/Pipeline.js +22 -0
  586. package/src/renderers/common/Pipelines.js +148 -5
  587. package/src/renderers/common/PostProcessing.js +112 -11
  588. package/src/renderers/common/ProgrammableStage.js +60 -2
  589. package/src/renderers/common/QuadMesh.js +56 -5
  590. package/src/renderers/common/RenderBundle.js +14 -8
  591. package/src/renderers/common/RenderBundles.js +39 -10
  592. package/src/renderers/common/RenderContext.js +205 -7
  593. package/src/renderers/common/RenderContexts.js +59 -6
  594. package/src/renderers/common/RenderList.js +230 -21
  595. package/src/renderers/common/RenderLists.js +45 -6
  596. package/src/renderers/common/RenderObject.js +552 -41
  597. package/src/renderers/common/RenderObjects.js +118 -9
  598. package/src/renderers/common/RenderPipeline.js +24 -0
  599. package/src/renderers/common/Renderer.js +1537 -239
  600. package/src/renderers/common/RendererUtils.js +191 -0
  601. package/src/renderers/common/SampledTexture.js +132 -3
  602. package/src/renderers/common/Sampler.js +30 -0
  603. package/src/renderers/common/StorageBuffer.js +24 -0
  604. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  605. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  606. package/src/renderers/common/StorageTexture.js +38 -0
  607. package/src/renderers/common/Textures.js +142 -32
  608. package/src/renderers/common/TimestampQueryPool.js +98 -0
  609. package/src/renderers/common/Uniform.js +225 -3
  610. package/src/renderers/common/UniformBuffer.js +19 -0
  611. package/src/renderers/common/UniformsGroup.js +157 -6
  612. package/src/renderers/common/XRManager.js +1185 -0
  613. package/src/renderers/common/XRRenderTarget.js +74 -0
  614. package/src/renderers/common/extras/PMREMGenerator.js +211 -53
  615. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  616. package/src/renderers/common/nodes/NodeLibrary.js +194 -0
  617. package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
  618. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  619. package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
  620. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  621. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  622. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  623. package/src/renderers/common/nodes/Nodes.js +390 -70
  624. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  625. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  626. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  627. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  628. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  629. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  630. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  631. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  632. package/src/renderers/webgl/WebGLBackground.js +24 -1
  633. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  634. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  635. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  637. package/src/renderers/webgl/WebGLProgram.js +27 -29
  638. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  639. package/src/renderers/webgl/WebGLState.js +68 -11
  640. package/src/renderers/webgl/WebGLTextures.js +49 -10
  641. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  642. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  643. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  644. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  645. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  646. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  648. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  649. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  650. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  651. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  652. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  653. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  654. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  655. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  656. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  657. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  658. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  659. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  660. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  661. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  662. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  663. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  664. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  665. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  666. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  667. package/src/renderers/webxr/WebXRManager.js +54 -32
  668. package/src/scenes/Fog.js +60 -0
  669. package/src/scenes/FogExp2.js +51 -0
  670. package/src/scenes/Scene.js +87 -0
  671. package/src/textures/Data3DTexture.js +2 -2
  672. package/src/textures/DepthTexture.js +2 -0
  673. package/src/textures/Source.js +2 -2
  674. package/src/textures/Texture.js +368 -5
  675. package/src/textures/VideoFrameTexture.js +35 -0
  676. package/src/utils.js +33 -1
  677. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  678. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  679. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  680. package/examples/jsm/controls/Controls.js +0 -32
  681. package/examples/jsm/exporters/MMDExporter.js +0 -217
  682. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  683. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  684. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  685. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  686. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  687. package/examples/jsm/loaders/TiltLoader.js +0 -520
  688. package/examples/jsm/objects/InstancedPoints.js +0 -21
  689. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  690. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  691. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  692. package/src/nodes/accessors/BitangentNode.js +0 -13
  693. package/src/nodes/accessors/CameraNode.js +0 -19
  694. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  695. package/src/nodes/accessors/NormalNode.js +0 -14
  696. package/src/nodes/accessors/PositionNode.js +0 -10
  697. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  698. package/src/nodes/accessors/TangentNode.js +0 -23
  699. package/src/nodes/accessors/UVNode.js +0 -3
  700. package/src/nodes/core/NodeKeywords.js +0 -80
  701. package/src/nodes/core/UniformGroup.js +0 -13
  702. package/src/nodes/display/AfterImageNode.js +0 -152
  703. package/src/nodes/display/AnamorphicNode.js +0 -145
  704. package/src/nodes/display/BlendModeNode.js +0 -128
  705. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  706. package/src/nodes/display/DenoiseNode.js +0 -198
  707. package/src/nodes/display/DotScreenNode.js +0 -75
  708. package/src/nodes/display/FXAANode.js +0 -327
  709. package/src/nodes/display/FilmNode.js +0 -52
  710. package/src/nodes/display/GTAONode.js +0 -324
  711. package/src/nodes/display/GaussianBlurNode.js +0 -207
  712. package/src/nodes/display/Lut3DNode.js +0 -53
  713. package/src/nodes/display/RGBShiftNode.js +0 -49
  714. package/src/nodes/display/SepiaNode.js +0 -18
  715. package/src/nodes/display/TransitionNode.js +0 -76
  716. package/src/nodes/display/ViewportNode.js +0 -137
  717. package/src/nodes/fog/FogExp2Node.js +0 -34
  718. package/src/nodes/fog/FogNode.js +0 -48
  719. package/src/nodes/fog/FogRangeNode.js +0 -35
  720. package/src/nodes/lighting/LightNode.js +0 -57
  721. package/src/nodes/loaders/NodeLoader.js +0 -110
  722. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  723. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  724. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  725. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  726. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  727. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  728. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  729. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  730. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  731. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  732. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  733. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  734. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  735. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  736. package/src/nodes/materials/NodeMaterial.js +0 -680
  737. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  738. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  739. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  740. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  741. package/src/nodes/math/CondNode.js +0 -139
  742. package/src/nodes/math/HashNode.js +0 -34
  743. package/src/nodes/procedural/CheckerNode.js +0 -42
  744. package/src/nodes/utils/DiscardNode.js +0 -28
  745. package/src/nodes/utils/OscNode.js +0 -81
  746. package/src/nodes/utils/PackingNode.js +0 -55
  747. package/src/nodes/utils/TimerNode.js +0 -94
@@ -1,18 +1,62 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
2
- import { nodeImmutable, nodeProxy } from '../shadernode/ShaderNode.js';
3
- import { cameraNear, cameraFar } from '../accessors/CameraNode.js';
4
- import { positionView } from '../accessors/PositionNode.js';
1
+ import Node from '../core/Node.js';
2
+ import { float, log, log2, nodeImmutable, nodeProxy } from '../tsl/TSLBase.js';
3
+ import { cameraNear, cameraFar } from '../accessors/Camera.js';
4
+ import { positionView } from '../accessors/Position.js';
5
5
  import { viewportDepthTexture } from './ViewportDepthTextureNode.js';
6
6
 
7
+ /**
8
+ * This node offers a collection of features in context of the depth logic in the fragment shader.
9
+ * Depending on {@link ViewportDepthNode#scope}, it can be used to define a depth value for the current
10
+ * fragment or for depth evaluation purposes.
11
+ *
12
+ * @augments Node
13
+ */
7
14
  class ViewportDepthNode extends Node {
8
15
 
16
+ static get type() {
17
+
18
+ return 'ViewportDepthNode';
19
+
20
+ }
21
+
22
+ /**
23
+ * Constructs a new viewport depth node.
24
+ *
25
+ * @param {('depth'|'depthBase'|'linearDepth')} scope - The node's scope.
26
+ * @param {?Node} [valueNode=null] - The value node.
27
+ */
9
28
  constructor( scope, valueNode = null ) {
10
29
 
11
30
  super( 'float' );
12
31
 
32
+ /**
33
+ * The node behaves differently depending on which scope is selected.
34
+ *
35
+ * - `ViewportDepthNode.DEPTH_BASE`: Allows to define a value for the current fragment's depth.
36
+ * - `ViewportDepthNode.DEPTH`: Represents the depth value for the current fragment (`valueNode` is ignored).
37
+ * - `ViewportDepthNode.LINEAR_DEPTH`: Represents the linear (orthographic) depth value of the current fragment.
38
+ * If a `valueNode` is set, the scope can be used to convert perspective depth data to linear data.
39
+ *
40
+ * @type {('depth'|'depthBase'|'linearDepth')}
41
+ */
13
42
  this.scope = scope;
43
+
44
+ /**
45
+ * Can be used to define a custom depth value.
46
+ * The property is ignored in the `ViewportDepthNode.DEPTH` scope.
47
+ *
48
+ * @type {?Node}
49
+ * @default null
50
+ */
14
51
  this.valueNode = valueNode;
15
52
 
53
+ /**
54
+ * This flag can be used for type testing.
55
+ *
56
+ * @type {boolean}
57
+ * @readonly
58
+ * @default true
59
+ */
16
60
  this.isViewportDepthNode = true;
17
61
 
18
62
  }
@@ -21,7 +65,7 @@ class ViewportDepthNode extends Node {
21
65
 
22
66
  const { scope } = this;
23
67
 
24
- if ( scope === ViewportDepthNode.DEPTH ) {
68
+ if ( scope === ViewportDepthNode.DEPTH_BASE ) {
25
69
 
26
70
  return builder.getFragDepth();
27
71
 
@@ -34,43 +78,43 @@ class ViewportDepthNode extends Node {
34
78
  setup( { camera } ) {
35
79
 
36
80
  const { scope } = this;
37
- const texture = this.valueNode;
81
+ const value = this.valueNode;
38
82
 
39
83
  let node = null;
40
84
 
41
- if ( scope === ViewportDepthNode.DEPTH ) {
85
+ if ( scope === ViewportDepthNode.DEPTH_BASE ) {
42
86
 
43
- if ( texture !== null ) {
87
+ if ( value !== null ) {
44
88
 
45
- node = depthBase().assign( texture );
89
+ node = depthBase().assign( value );
46
90
 
47
- } else {
91
+ }
48
92
 
49
- if ( camera.isPerspectiveCamera ) {
93
+ } else if ( scope === ViewportDepthNode.DEPTH ) {
50
94
 
51
- node = viewZToPerspectiveDepth( positionView.z, cameraNear, cameraFar );
95
+ if ( camera.isPerspectiveCamera ) {
52
96
 
53
- } else {
97
+ node = viewZToPerspectiveDepth( positionView.z, cameraNear, cameraFar );
54
98
 
55
- node = viewZToOrthographicDepth( positionView.z, cameraNear, cameraFar );
99
+ } else {
56
100
 
57
- }
101
+ node = viewZToOrthographicDepth( positionView.z, cameraNear, cameraFar );
58
102
 
59
103
  }
60
104
 
61
105
  } else if ( scope === ViewportDepthNode.LINEAR_DEPTH ) {
62
106
 
63
- if ( texture !== null ) {
107
+ if ( value !== null ) {
64
108
 
65
109
  if ( camera.isPerspectiveCamera ) {
66
110
 
67
- const viewZ = perspectiveDepthToViewZ( texture, cameraNear, cameraFar );
111
+ const viewZ = perspectiveDepthToViewZ( value, cameraNear, cameraFar );
68
112
 
69
113
  node = viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );
70
114
 
71
115
  } else {
72
116
 
73
- node = texture;
117
+ node = value;
74
118
 
75
119
  }
76
120
 
@@ -88,33 +132,163 @@ class ViewportDepthNode extends Node {
88
132
 
89
133
  }
90
134
 
135
+ ViewportDepthNode.DEPTH_BASE = 'depthBase';
136
+ ViewportDepthNode.DEPTH = 'depth';
137
+ ViewportDepthNode.LINEAR_DEPTH = 'linearDepth';
138
+
139
+ export default ViewportDepthNode;
140
+
91
141
  // NOTE: viewZ, the z-coordinate in camera space, is negative for points in front of the camera
92
142
 
93
- // -near maps to 0; -far maps to 1
143
+ /**
144
+ * TSL function for converting a viewZ value to an orthographic depth value.
145
+ *
146
+ * @tsl
147
+ * @function
148
+ * @param {Node<float>} viewZ - The viewZ node.
149
+ * @param {Node<float>} near - The camera's near value.
150
+ * @param {Node<float>} far - The camera's far value.
151
+ * @returns {Node<float>}
152
+ */
94
153
  export const viewZToOrthographicDepth = ( viewZ, near, far ) => viewZ.add( near ).div( near.sub( far ) );
95
154
 
96
- // maps orthographic depth in [ 0, 1 ] to viewZ
155
+ /**
156
+ * TSL function for converting an orthographic depth value to a viewZ value.
157
+ *
158
+ * @tsl
159
+ * @function
160
+ * @param {Node<float>} depth - The orthographic depth.
161
+ * @param {Node<float>} near - The camera's near value.
162
+ * @param {Node<float>} far - The camera's far value.
163
+ * @returns {Node<float>}
164
+ */
97
165
  export const orthographicDepthToViewZ = ( depth, near, far ) => near.sub( far ).mul( depth ).sub( near );
98
166
 
99
- // NOTE: https://twitter.com/gonnavis/status/1377183786949959682
100
-
101
- // -near maps to 0; -far maps to 1
167
+ /**
168
+ * TSL function for converting a viewZ value to a perspective depth value.
169
+ *
170
+ * Note: {link https://twitter.com/gonnavis/status/1377183786949959682}.
171
+ *
172
+ * @tsl
173
+ * @function
174
+ * @param {Node<float>} viewZ - The viewZ node.
175
+ * @param {Node<float>} near - The camera's near value.
176
+ * @param {Node<float>} far - The camera's far value.
177
+ * @returns {Node<float>}
178
+ */
102
179
  export const viewZToPerspectiveDepth = ( viewZ, near, far ) => near.add( viewZ ).mul( far ).div( far.sub( near ).mul( viewZ ) );
103
180
 
104
- // maps perspective depth in [ 0, 1 ] to viewZ
181
+ /**
182
+ * TSL function for converting a perspective depth value to a viewZ value.
183
+ *
184
+ * @tsl
185
+ * @function
186
+ * @param {Node<float>} depth - The perspective depth.
187
+ * @param {Node<float>} near - The camera's near value.
188
+ * @param {Node<float>} far - The camera's far value.
189
+ * @returns {Node<float>}
190
+ */
105
191
  export const perspectiveDepthToViewZ = ( depth, near, far ) => near.mul( far ).div( far.sub( near ).mul( depth ).sub( far ) );
106
192
 
107
- ViewportDepthNode.DEPTH = 'depth';
108
- ViewportDepthNode.LINEAR_DEPTH = 'linearDepth';
109
-
110
- export default ViewportDepthNode;
111
-
112
- const depthBase = nodeProxy( ViewportDepthNode, ViewportDepthNode.DEPTH );
113
-
114
- export const depth = nodeImmutable( ViewportDepthNode, ViewportDepthNode.DEPTH );
115
- export const linearDepth = nodeProxy( ViewportDepthNode, ViewportDepthNode.LINEAR_DEPTH );
116
- export const viewportLinearDepth = linearDepth( viewportDepthTexture() );
193
+ /**
194
+ * TSL function for converting a viewZ value to a logarithmic depth value.
195
+ *
196
+ * @tsl
197
+ * @function
198
+ * @param {Node<float>} viewZ - The viewZ node.
199
+ * @param {Node<float>} near - The camera's near value.
200
+ * @param {Node<float>} far - The camera's far value.
201
+ * @returns {Node<float>}
202
+ */
203
+ export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
204
+
205
+ // NOTE: viewZ must be negative--see explanation at the end of this comment block.
206
+ // The final logarithmic depth formula used here is adapted from one described in an
207
+ // article by Thatcher Ulrich (see http://tulrich.com/geekstuff/log_depth_buffer.txt),
208
+ // which was an improvement upon an earlier formula one described in an
209
+ // Outerra article (https://outerra.blogspot.com/2009/08/logarithmic-z-buffer.html).
210
+ // Ulrich's formula is the following:
211
+ // z = K * log( w / cameraNear ) / log( cameraFar / cameraNear )
212
+ // where K = 2^k - 1, and k is the number of bits in the depth buffer.
213
+ // The Outerra variant ignored the camera near plane (it assumed it was 0) and instead
214
+ // opted for a "C-constant" for resolution adjustment of objects near the camera.
215
+ // Outerra states: "Notice that the 'C' variant doesn’t use a near plane distance, it has it
216
+ // set at 0" (quote from https://outerra.blogspot.com/2012/11/maximizing-depth-buffer-range-and.html).
217
+ // Ulrich's variant has the benefit of constant relative precision over the whole near-far range.
218
+ // It was debated here whether Outerra's "C-constant" or Ulrich's "near plane" variant should
219
+ // be used, and ultimately Ulrich's "near plane" version was chosen.
220
+ // Outerra eventually made another improvement to their original "C-constant" variant,
221
+ // but it still does not incorporate the camera near plane (for this version,
222
+ // see https://outerra.blogspot.com/2013/07/logarithmic-depth-buffer-optimizations.html).
223
+ // Here we make 4 changes to Ulrich's formula:
224
+ // 1. Clamp the camera near plane so we don't divide by 0.
225
+ // 2. Use log2 instead of log to avoid an extra multiply (shaders implement log using log2).
226
+ // 3. Assume K is 1 (K = maximum value in depth buffer; see Ulrich's formula above).
227
+ // 4. To maintain consistency with the functions "viewZToOrthographicDepth" and "viewZToPerspectiveDepth",
228
+ // we modify the formula here to use 'viewZ' instead of 'w'. The other functions expect a negative viewZ,
229
+ // so we do the same here, hence the 'viewZ.negate()' call.
230
+ // For visual representation of this depth curve, see https://www.desmos.com/calculator/uyqk0vex1u
231
+ near = near.max( 1e-6 ).toVar();
232
+ const numerator = log2( viewZ.negate().div( near ) );
233
+ const denominator = log2( far.div( near ) );
234
+ return numerator.div( denominator );
235
+
236
+ };
237
+
238
+ /**
239
+ * TSL function for converting a logarithmic depth value to a viewZ value.
240
+ *
241
+ * @tsl
242
+ * @function
243
+ * @param {Node<float>} depth - The logarithmic depth.
244
+ * @param {Node<float>} near - The camera's near value.
245
+ * @param {Node<float>} far - The camera's far value.
246
+ * @returns {Node<float>}
247
+ */
248
+ export const logarithmicDepthToViewZ = ( depth, near, far ) => {
249
+
250
+ // NOTE: we add a 'negate()' call to the return value here to maintain consistency with
251
+ // the functions "orthographicDepthToViewZ" and "perspectiveDepthToViewZ" (they return
252
+ // a negative viewZ).
253
+ const exponent = depth.mul( log( far.div( near ) ) );
254
+ return float( Math.E ).pow( exponent ).mul( near ).negate();
255
+
256
+ };
257
+
258
+ /**
259
+ * TSL function for defining a value for the current fragment's depth.
260
+ *
261
+ * @tsl
262
+ * @function
263
+ * @param {Node<float>} value - The depth value to set.
264
+ * @returns {ViewportDepthNode<float>}
265
+ */
266
+ const depthBase = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.DEPTH_BASE );
267
+
268
+ /**
269
+ * TSL object that represents the depth value for the current fragment.
270
+ *
271
+ * @tsl
272
+ * @type {ViewportDepthNode}
273
+ */
274
+ export const depth = /*@__PURE__*/ nodeImmutable( ViewportDepthNode, ViewportDepthNode.DEPTH );
275
+
276
+ /**
277
+ * TSL function for converting a perspective depth value to linear depth.
278
+ *
279
+ * @tsl
280
+ * @function
281
+ * @param {Node<float>} value - The perspective depth.
282
+ * @returns {ViewportDepthNode<float>}
283
+ */
284
+ export const linearDepth = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.LINEAR_DEPTH );
285
+
286
+ /**
287
+ * TSL object that represents the linear (orthographic) depth value of the current fragment
288
+ *
289
+ * @tsl
290
+ * @type {ViewportDepthNode}
291
+ */
292
+ export const viewportLinearDepth = /*@__PURE__*/ linearDepth( viewportDepthTexture() );
117
293
 
118
294
  depth.assign = ( value ) => depthBase( value );
119
-
120
- addNodeClass( 'ViewportDepthNode', ViewportDepthNode );
@@ -1,15 +1,33 @@
1
1
  import ViewportTextureNode from './ViewportTextureNode.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
4
- import { viewportTopLeft } from './ViewportNode.js';
2
+ import { nodeProxy } from '../tsl/TSLBase.js';
3
+ import { screenUV } from './ScreenNode.js';
5
4
 
6
5
  import { DepthTexture } from '../../textures/DepthTexture.js';
7
6
 
8
7
  let sharedDepthbuffer = null;
9
8
 
9
+ /**
10
+ * Represents the depth of the current viewport as a texture. This module
11
+ * can be used in combination with viewport texture to achieve effects
12
+ * that require depth evaluation.
13
+ *
14
+ * @augments ViewportTextureNode
15
+ */
10
16
  class ViewportDepthTextureNode extends ViewportTextureNode {
11
17
 
12
- constructor( uvNode = viewportTopLeft, levelNode = null ) {
18
+ static get type() {
19
+
20
+ return 'ViewportDepthTextureNode';
21
+
22
+ }
23
+
24
+ /**
25
+ * Constructs a new viewport depth texture node.
26
+ *
27
+ * @param {Node} [uvNode=screenUV] - The uv node.
28
+ * @param {?Node} [levelNode=null] - The level node.
29
+ */
30
+ constructor( uvNode = screenUV, levelNode = null ) {
13
31
 
14
32
  if ( sharedDepthbuffer === null ) {
15
33
 
@@ -25,8 +43,13 @@ class ViewportDepthTextureNode extends ViewportTextureNode {
25
43
 
26
44
  export default ViewportDepthTextureNode;
27
45
 
28
- export const viewportDepthTexture = nodeProxy( ViewportDepthTextureNode );
29
-
30
- addNodeElement( 'viewportDepthTexture', viewportDepthTexture );
31
-
32
- addNodeClass( 'ViewportDepthTextureNode', ViewportDepthTextureNode );
46
+ /**
47
+ * TSL function for a viewport depth texture node.
48
+ *
49
+ * @tsl
50
+ * @function
51
+ * @param {Node} [uvNode=screenUV] - The uv node.
52
+ * @param {?Node} [levelNode=null] - The level node.
53
+ * @returns {ViewportDepthTextureNode}
54
+ */
55
+ export const viewportDepthTexture = /*@__PURE__*/ nodeProxy( ViewportDepthTextureNode );
@@ -1,15 +1,33 @@
1
1
  import ViewportTextureNode from './ViewportTextureNode.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
4
- import { viewportTopLeft } from './ViewportNode.js';
2
+ import { nodeProxy } from '../tsl/TSLBase.js';
3
+ import { screenUV } from './ScreenNode.js';
5
4
 
6
5
  import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
7
6
 
8
7
  let _sharedFramebuffer = null;
9
8
 
9
+ /**
10
+ * `ViewportTextureNode` creates an internal texture for each node instance. This module
11
+ * shares a texture across all instances of `ViewportSharedTextureNode`. It should
12
+ * be the first choice when using data of the default/screen framebuffer for performance reasons.
13
+ *
14
+ * @augments ViewportTextureNode
15
+ */
10
16
  class ViewportSharedTextureNode extends ViewportTextureNode {
11
17
 
12
- constructor( uvNode = viewportTopLeft, levelNode = null ) {
18
+ static get type() {
19
+
20
+ return 'ViewportSharedTextureNode';
21
+
22
+ }
23
+
24
+ /**
25
+ * Constructs a new viewport shared texture node.
26
+ *
27
+ * @param {Node} [uvNode=screenUV] - The uv node.
28
+ * @param {?Node} [levelNode=null] - The level node.
29
+ */
30
+ constructor( uvNode = screenUV, levelNode = null ) {
13
31
 
14
32
  if ( _sharedFramebuffer === null ) {
15
33
 
@@ -31,8 +49,13 @@ class ViewportSharedTextureNode extends ViewportTextureNode {
31
49
 
32
50
  export default ViewportSharedTextureNode;
33
51
 
34
- export const viewportSharedTexture = nodeProxy( ViewportSharedTextureNode );
35
-
36
- addNodeElement( 'viewportSharedTexture', viewportSharedTexture );
37
-
38
- addNodeClass( 'ViewportSharedTextureNode', ViewportSharedTextureNode );
52
+ /**
53
+ * TSL function for creating a shared viewport texture node.
54
+ *
55
+ * @tsl
56
+ * @function
57
+ * @param {Node} [uvNode=screenUV] - The uv node.
58
+ * @param {?Node} [levelNode=null] - The level node.
59
+ * @returns {ViewportSharedTextureNode}
60
+ */
61
+ export const viewportSharedTexture = /*@__PURE__*/ nodeProxy( ViewportSharedTextureNode );
@@ -1,8 +1,7 @@
1
1
  import TextureNode from '../accessors/TextureNode.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
- import { addNodeClass } from '../core/Node.js';
4
- import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
5
- import { viewportTopLeft } from './ViewportNode.js';
3
+ import { nodeProxy } from '../tsl/TSLBase.js';
4
+ import { screenUV } from './ScreenNode.js';
6
5
 
7
6
  import { Vector2 } from '../../math/Vector2.js';
8
7
  import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
@@ -10,9 +9,31 @@ import { LinearMipmapLinearFilter } from '../../constants.js';
10
9
 
11
10
  const _size = /*@__PURE__*/ new Vector2();
12
11
 
12
+ /**
13
+ * A special type of texture node which represents the data of the current viewport
14
+ * as a texture. The module extracts data from the current bound framebuffer with
15
+ * a copy operation so no extra render pass is required to produce the texture data
16
+ * (which is good for performance). `ViewportTextureNode` can be used as an input for a
17
+ * variety of effects like refractive or transmissive materials.
18
+ *
19
+ * @augments TextureNode
20
+ */
13
21
  class ViewportTextureNode extends TextureNode {
14
22
 
15
- constructor( uvNode = viewportTopLeft, levelNode = null, framebufferTexture = null ) {
23
+ static get type() {
24
+
25
+ return 'ViewportTextureNode';
26
+
27
+ }
28
+
29
+ /**
30
+ * Constructs a new viewport texture node.
31
+ *
32
+ * @param {Node} [uvNode=screenUV] - The uv node.
33
+ * @param {?Node} [levelNode=null] - The level node.
34
+ * @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
35
+ */
36
+ constructor( uvNode = screenUV, levelNode = null, framebufferTexture = null ) {
16
37
 
17
38
  if ( framebufferTexture === null ) {
18
39
 
@@ -23,10 +44,30 @@ class ViewportTextureNode extends TextureNode {
23
44
 
24
45
  super( framebufferTexture, uvNode, levelNode );
25
46
 
47
+ /**
48
+ * Whether to generate mipmaps or not.
49
+ *
50
+ * @type {boolean}
51
+ * @default false
52
+ */
26
53
  this.generateMipmaps = false;
27
54
 
55
+ /**
56
+ * This flag can be used for type testing.
57
+ *
58
+ * @type {boolean}
59
+ * @readonly
60
+ * @default true
61
+ */
28
62
  this.isOutputTextureNode = true;
29
63
 
64
+ /**
65
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders the
66
+ * scene once per frame in its {@link ViewportTextureNode#updateBefore} method.
67
+ *
68
+ * @type {string}
69
+ * @default 'frame'
70
+ */
30
71
  this.updateBeforeType = NodeUpdateType.FRAME;
31
72
 
32
73
  }
@@ -72,10 +113,26 @@ class ViewportTextureNode extends TextureNode {
72
113
 
73
114
  export default ViewportTextureNode;
74
115
 
75
- export const viewportTexture = nodeProxy( ViewportTextureNode );
76
- export const viewportMipTexture = nodeProxy( ViewportTextureNode, null, null, { generateMipmaps: true } );
77
-
78
- addNodeElement( 'viewportTexture', viewportTexture );
79
- addNodeElement( 'viewportMipTexture', viewportMipTexture );
80
-
81
- addNodeClass( 'ViewportTextureNode', ViewportTextureNode );
116
+ /**
117
+ * TSL function for creating a viewport texture node.
118
+ *
119
+ * @tsl
120
+ * @function
121
+ * @param {Node} [uvNode=screenUV] - The uv node.
122
+ * @param {?Node} [levelNode=null] - The level node.
123
+ * @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
124
+ * @returns {ViewportTextureNode}
125
+ */
126
+ export const viewportTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode );
127
+
128
+ /**
129
+ * TSL function for creating a viewport texture node with enabled mipmap generation.
130
+ *
131
+ * @tsl
132
+ * @function
133
+ * @param {Node} [uvNode=screenUV] - The uv node.
134
+ * @param {?Node} [levelNode=null] - The level node.
135
+ * @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
136
+ * @returns {ViewportTextureNode}
137
+ */
138
+ export const viewportMipTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode, null, null, { generateMipmaps: true } );
@@ -0,0 +1,113 @@
1
+ import { positionView } from '../accessors/Position.js';
2
+ import { smoothstep } from '../math/MathNode.js';
3
+ import { Fn, output, vec4 } from '../tsl/TSLBase.js';
4
+
5
+ /**
6
+ * Returns a node that represents the `z` coordinate in view space
7
+ * for the current fragment. It's a different representation of the
8
+ * default depth value.
9
+ *
10
+ * This value can be part of a computation that defines how the fog
11
+ * density increases when moving away from the camera.
12
+ *
13
+ * @param {NodeBuilder} builder - The current node builder.
14
+ * @return {Node} The viewZ node.
15
+ */
16
+ function getViewZNode( builder ) {
17
+
18
+ let viewZ;
19
+
20
+ const getViewZ = builder.context.getViewZ;
21
+
22
+ if ( getViewZ !== undefined ) {
23
+
24
+ viewZ = getViewZ( this );
25
+
26
+ }
27
+
28
+ return ( viewZ || positionView.z ).negate();
29
+
30
+ }
31
+
32
+ /**
33
+ * Constructs a new range factor node.
34
+ *
35
+ * @tsl
36
+ * @function
37
+ * @param {Node} near - Defines the near value.
38
+ * @param {Node} far - Defines the far value.
39
+ */
40
+ export const rangeFogFactor = Fn( ( [ near, far ], builder ) => {
41
+
42
+ const viewZ = getViewZNode( builder );
43
+
44
+ return smoothstep( near, far, viewZ );
45
+
46
+ } );
47
+
48
+ /**
49
+ * Represents an exponential squared fog. This type of fog gives
50
+ * a clear view near the camera and a faster than exponentially
51
+ * densening fog farther from the camera.
52
+ *
53
+ * @tsl
54
+ * @function
55
+ * @param {Node} density - Defines the fog density.
56
+ */
57
+ export const densityFogFactor = Fn( ( [ density ], builder ) => {
58
+
59
+ const viewZ = getViewZNode( builder );
60
+
61
+ return density.mul( density, viewZ, viewZ ).negate().exp().oneMinus();
62
+
63
+ } );
64
+
65
+ /**
66
+ * This class can be used to configure a fog for the scene.
67
+ * Nodes of this type are assigned to `Scene.fogNode`.
68
+ *
69
+ * @tsl
70
+ * @function
71
+ * @param {Node} color - Defines the color of the fog.
72
+ * @param {Node} factor - Defines how the fog is factored in the scene.
73
+ */
74
+ export const fog = Fn( ( [ color, factor ] ) => {
75
+
76
+ return vec4( factor.toFloat().mix( output.rgb, color.toVec3() ), output.a );
77
+
78
+ } );
79
+
80
+ // Deprecated
81
+
82
+ /**
83
+ * @tsl
84
+ * @function
85
+ * @deprecated since r171. Use `fog( color, rangeFogFactor( near, far ) )` instead.
86
+ *
87
+ * @param {Node} color
88
+ * @param {Node} near
89
+ * @param {Node} far
90
+ * @returns {Function}
91
+ */
92
+ export function rangeFog( color, near, far ) { // @deprecated, r171
93
+
94
+ console.warn( 'THREE.TSL: "rangeFog( color, near, far )" is deprecated. Use "fog( color, rangeFogFactor( near, far ) )" instead.' );
95
+ return fog( color, rangeFogFactor( near, far ) );
96
+
97
+ }
98
+
99
+ /**
100
+ * @tsl
101
+ * @function
102
+ * @deprecated since r171. Use `fog( color, densityFogFactor( density ) )` instead.
103
+ *
104
+ * @param {Node} color
105
+ * @param {Node} density
106
+ * @returns {Function}
107
+ */
108
+ export function densityFog( color, density ) { // @deprecated, r171
109
+
110
+ console.warn( 'THREE.TSL: "densityFog( color, density )" is deprecated. Use "fog( color, densityFogFactor( density ) )" instead.' );
111
+ return fog( color, densityFogFactor( density ) );
112
+
113
+ }
@@ -3,13 +3,13 @@ import V_GGX_SmithCorrelated from './V_GGX_SmithCorrelated.js';
3
3
  import V_GGX_SmithCorrelated_Anisotropic from './V_GGX_SmithCorrelated_Anisotropic.js';
4
4
  import D_GGX from './D_GGX.js';
5
5
  import D_GGX_Anisotropic from './D_GGX_Anisotropic.js';
6
- import { transformedNormalView } from '../../accessors/NormalNode.js';
7
- import { positionViewDirection } from '../../accessors/PositionNode.js';
6
+ import { transformedNormalView } from '../../accessors/Normal.js';
7
+ import { positionViewDirection } from '../../accessors/Position.js';
8
8
  import { iridescence, alphaT, anisotropyT, anisotropyB } from '../../core/PropertyNode.js';
9
- import { Fn, defined } from '../../shadernode/ShaderNode.js';
9
+ import { Fn, defined } from '../../tsl/TSLBase.js';
10
10
 
11
11
  // GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility
12
- const BRDF_GGX = Fn( ( inputs ) => {
12
+ const BRDF_GGX = /*@__PURE__*/ Fn( ( inputs ) => {
13
13
 
14
14
  const { lightDirection, f0, f90, roughness, f, USE_IRIDESCENCE, USE_ANISOTROPY } = inputs;
15
15
 
@@ -1,6 +1,6 @@
1
- import { Fn } from '../../shadernode/ShaderNode.js';
1
+ import { Fn } from '../../tsl/TSLBase.js';
2
2
 
3
- const BRDF_Lambert = Fn( ( inputs ) => {
3
+ const BRDF_Lambert = /*@__PURE__*/ Fn( ( inputs ) => {
4
4
 
5
5
  return inputs.diffuseColor.mul( 1 / Math.PI ); // punctual light
6
6