@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,21 +1,69 @@
1
- import Node, { addNodeClass } from './Node.js';
1
+ import Node from './Node.js';
2
2
  import { NodeShaderStage } from './constants.js';
3
- import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
4
-
3
+ import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
4
+
5
+ /**
6
+ * Class for representing shader varyings as nodes. Varyings are create from
7
+ * existing nodes like the following:
8
+ *
9
+ * ```js
10
+ * const positionLocal = positionGeometry.toVarying( 'vPositionLocal' );
11
+ * ```
12
+ *
13
+ * @augments Node
14
+ */
5
15
  class VaryingNode extends Node {
6
16
 
17
+ static get type() {
18
+
19
+ return 'VaryingNode';
20
+
21
+ }
22
+
23
+ /**
24
+ * Constructs a new varying node.
25
+ *
26
+ * @param {Node} node - The node for which a varying should be created.
27
+ * @param {?string} name - The name of the varying in the shader.
28
+ */
7
29
  constructor( node, name = null ) {
8
30
 
9
31
  super();
10
32
 
33
+ /**
34
+ * The node for which a varying should be created.
35
+ *
36
+ * @type {Node}
37
+ */
11
38
  this.node = node;
39
+
40
+ /**
41
+ * The name of the varying in the shader. If no name is defined,
42
+ * the node system auto-generates one.
43
+ *
44
+ * @type {?string}
45
+ * @default null
46
+ */
12
47
  this.name = name;
13
48
 
49
+ /**
50
+ * This flag can be used for type testing.
51
+ *
52
+ * @type {boolean}
53
+ * @readonly
54
+ * @default true
55
+ */
14
56
  this.isVaryingNode = true;
15
57
 
16
58
  }
17
59
 
18
- isGlobal() {
60
+ /**
61
+ * The method is overwritten so it always returns `true`.
62
+ *
63
+ * @param {NodeBuilder} builder - The current node builder.
64
+ * @return {boolean} Whether this node is global or not.
65
+ */
66
+ isGlobal( /*builder*/ ) {
19
67
 
20
68
  return true;
21
69
 
@@ -35,6 +83,12 @@ class VaryingNode extends Node {
35
83
 
36
84
  }
37
85
 
86
+ /**
87
+ * This method performs the setup of a varying node with the current node builder.
88
+ *
89
+ * @param {NodeBuilder} builder - The current node builder.
90
+ * @return {NodeVarying} The node varying from the node builder.
91
+ */
38
92
  setupVarying( builder ) {
39
93
 
40
94
  const properties = builder.getNodeProperties( this );
@@ -77,7 +131,9 @@ class VaryingNode extends Node {
77
131
  const properties = builder.getNodeProperties( this );
78
132
  const varying = this.setupVarying( builder );
79
133
 
80
- if ( properties.propertyName === undefined ) {
134
+ const needsReassign = builder.shaderStage === 'fragment' && properties.reassignPosition === true && builder.context.needsPositionReassign;
135
+
136
+ if ( properties.propertyName === undefined || needsReassign ) {
81
137
 
82
138
  const type = this.getNodeType( builder );
83
139
  const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
@@ -87,6 +143,17 @@ class VaryingNode extends Node {
87
143
 
88
144
  properties.propertyName = propertyName;
89
145
 
146
+ if ( needsReassign ) {
147
+
148
+ // once reassign varying in fragment stage
149
+ properties.reassignPosition = false;
150
+
151
+ } else if ( properties.reassignPosition === undefined && builder.context.isPositionNodeInput ) {
152
+
153
+ properties.reassignPosition = true;
154
+
155
+ }
156
+
90
157
  }
91
158
 
92
159
  return builder.getPropertyName( varying );
@@ -97,8 +164,42 @@ class VaryingNode extends Node {
97
164
 
98
165
  export default VaryingNode;
99
166
 
100
- export const varying = nodeProxy( VaryingNode );
167
+ /**
168
+ * TSL function for creating a varying node.
169
+ *
170
+ * @tsl
171
+ * @function
172
+ * @param {Node} node - The node for which a varying should be created.
173
+ * @param {?string} name - The name of the varying in the shader.
174
+ * @returns {VaryingNode}
175
+ */
176
+ export const varying = /*@__PURE__*/ nodeProxy( VaryingNode );
177
+
178
+ /**
179
+ * Computes a node in the vertex stage.
180
+ *
181
+ * @tsl
182
+ * @function
183
+ * @param {Node} node - The node which should be executed in the vertex stage.
184
+ * @returns {VaryingNode}
185
+ */
186
+ export const vertexStage = ( node ) => varying( node );
187
+
188
+ addMethodChaining( 'toVarying', varying );
189
+ addMethodChaining( 'toVertexStage', vertexStage );
190
+
191
+ // Deprecated
192
+
193
+ addMethodChaining( 'varying', ( ...params ) => { // @deprecated, r173
194
+
195
+ console.warn( 'TSL.VaryingNode: .varying() has been renamed to .toVarying().' );
196
+ return varying( ...params );
197
+
198
+ } );
199
+
200
+ addMethodChaining( 'vertexStage', ( ...params ) => { // @deprecated, r173
101
201
 
102
- addNodeElement( 'varying', varying );
202
+ console.warn( 'TSL.VaryingNode: .vertexStage() has been renamed to .toVertexStage().' );
203
+ return varying( ...params );
103
204
 
104
- addNodeClass( 'VaryingNode', VaryingNode );
205
+ } );
@@ -1,8 +1,22 @@
1
+ /**
2
+ * Possible shader stages.
3
+ *
4
+ * @property {string} VERTEX The vertex shader stage.
5
+ * @property {string} FRAGMENT The fragment shader stage.
6
+ */
1
7
  export const NodeShaderStage = {
2
8
  VERTEX: 'vertex',
3
9
  FRAGMENT: 'fragment'
4
10
  };
5
11
 
12
+ /**
13
+ * Update types of a node.
14
+ *
15
+ * @property {string} NONE The update method is not executed.
16
+ * @property {string} FRAME The update method is executed per frame.
17
+ * @property {string} RENDER The update method is executed per render. A frame might be produced by multiple render calls so this value allows more detailed updates than FRAME.
18
+ * @property {string} OBJECT The update method is executed per {@link Object3D} that uses the node for rendering.
19
+ */
6
20
  export const NodeUpdateType = {
7
21
  NONE: 'none',
8
22
  FRAME: 'frame',
@@ -10,6 +24,19 @@ export const NodeUpdateType = {
10
24
  OBJECT: 'object'
11
25
  };
12
26
 
27
+ /**
28
+ * Data types of a node.
29
+ *
30
+ * @property {string} BOOLEAN Boolean type.
31
+ * @property {string} INTEGER Integer type.
32
+ * @property {string} FLOAT Float type.
33
+ * @property {string} VECTOR2 Two-dimensional vector type.
34
+ * @property {string} VECTOR3 Three-dimensional vector type.
35
+ * @property {string} VECTOR4 Four-dimensional vector type.
36
+ * @property {string} MATRIX2 2x2 matrix type.
37
+ * @property {string} MATRIX3 3x3 matrix type.
38
+ * @property {string} MATRIX4 4x4 matrix type.
39
+ */
13
40
  export const NodeType = {
14
41
  BOOLEAN: 'bool',
15
42
  INTEGER: 'int',
@@ -22,6 +49,19 @@ export const NodeType = {
22
49
  MATRIX4: 'mat4'
23
50
  };
24
51
 
52
+ /**
53
+ * Access types of a node. These are relevant for compute and storage usage.
54
+ *
55
+ * @property {string} READ_ONLY Read-only access
56
+ * @property {string} WRITE_ONLY Write-only access.
57
+ * @property {string} READ_WRITE Read and write access.
58
+ */
59
+ export const NodeAccess = {
60
+ READ_ONLY: 'readOnly',
61
+ WRITE_ONLY: 'writeOnly',
62
+ READ_WRITE: 'readWrite',
63
+ };
64
+
25
65
  export const defaultShaderStages = [ 'fragment', 'vertex' ];
26
66
  export const defaultBuildStages = [ 'setup', 'analyze', 'generate' ];
27
67
  export const shaderStages = [ ...defaultShaderStages, 'compute' ];
@@ -0,0 +1,193 @@
1
+ import { Fn, vec4 } from '../tsl/TSLBase.js';
2
+ import { mix, min, step } from '../math/MathNode.js';
3
+
4
+ /**
5
+ * Represents a "Color Burn" blend mode.
6
+ *
7
+ * It's designed to darken the base layer's colors based on the color of the blend layer.
8
+ * It significantly increases the contrast of the base layer, making the colors more vibrant and saturated.
9
+ * The darker the color in the blend layer, the stronger the darkening and contrast effect on the base layer.
10
+ *
11
+ * @tsl
12
+ * @function
13
+ * @param {Node<vec3>} base - The base color.
14
+ * @param {Node<vec3>} blend - The blend color. A white (#ffffff) blend color does not alter the base color.
15
+ * @return {Node<vec3>} The result.
16
+ */
17
+ export const blendBurn = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
18
+
19
+ return min( 1.0, base.oneMinus().div( blend ) ).oneMinus();
20
+
21
+ } ).setLayout( {
22
+ name: 'blendBurn',
23
+ type: 'vec3',
24
+ inputs: [
25
+ { name: 'base', type: 'vec3' },
26
+ { name: 'blend', type: 'vec3' }
27
+ ]
28
+ } );
29
+
30
+ /**
31
+ * Represents a "Color Dodge" blend mode.
32
+ *
33
+ * It's designed to lighten the base layer's colors based on the color of the blend layer.
34
+ * It significantly increases the brightness of the base layer, making the colors lighter and more vibrant.
35
+ * The brighter the color in the blend layer, the stronger the lightening and contrast effect on the base layer.
36
+ *
37
+ * @tsl
38
+ * @function
39
+ * @param {Node<vec3>} base - The base color.
40
+ * @param {Node<vec3>} blend - The blend color. A black (#000000) blend color does not alter the base color.
41
+ * @return {Node<vec3>} The result.
42
+ */
43
+ export const blendDodge = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
44
+
45
+ return min( base.div( blend.oneMinus() ), 1.0 );
46
+
47
+ } ).setLayout( {
48
+ name: 'blendDodge',
49
+ type: 'vec3',
50
+ inputs: [
51
+ { name: 'base', type: 'vec3' },
52
+ { name: 'blend', type: 'vec3' }
53
+ ]
54
+ } );
55
+
56
+ /**
57
+ * Represents a "Screen" blend mode.
58
+ *
59
+ * Similar to `blendDodge()`, this mode also lightens the base layer's colors based on the color of the blend layer.
60
+ * The "Screen" blend mode is better for general brightening whereas the "Dodge" results in more subtle and nuanced
61
+ * effects.
62
+ *
63
+ * @tsl
64
+ * @function
65
+ * @param {Node<vec3>} base - The base color.
66
+ * @param {Node<vec3>} blend - The blend color. A black (#000000) blend color does not alter the base color.
67
+ * @return {Node<vec3>} The result.
68
+ */
69
+ export const blendScreen = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
70
+
71
+ return base.oneMinus().mul( blend.oneMinus() ).oneMinus();
72
+
73
+ } ).setLayout( {
74
+ name: 'blendScreen',
75
+ type: 'vec3',
76
+ inputs: [
77
+ { name: 'base', type: 'vec3' },
78
+ { name: 'blend', type: 'vec3' }
79
+ ]
80
+ } );
81
+
82
+ /**
83
+ * Represents a "Overlay" blend mode.
84
+ *
85
+ * It's designed to increase the contrast of the base layer based on the color of the blend layer.
86
+ * It amplifies the existing colors and contrast in the base layer, making lighter areas lighter and darker areas darker.
87
+ * The color of the blend layer significantly influences the resulting contrast and color shift in the base layer.
88
+ *
89
+ * @tsl
90
+ * @function
91
+ * @param {Node<vec3>} base - The base color.
92
+ * @param {Node<vec3>} blend - The blend color
93
+ * @return {Node<vec3>} The result.
94
+ */
95
+ export const blendOverlay = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
96
+
97
+ return mix( base.mul( 2.0 ).mul( blend ), base.oneMinus().mul( 2.0 ).mul( blend.oneMinus() ).oneMinus(), step( 0.5, base ) );
98
+
99
+ } ).setLayout( {
100
+ name: 'blendOverlay',
101
+ type: 'vec3',
102
+ inputs: [
103
+ { name: 'base', type: 'vec3' },
104
+ { name: 'blend', type: 'vec3' }
105
+ ]
106
+ } );
107
+
108
+ /**
109
+ * This function blends two color based on their alpha values by replicating the behavior of `THREE.NormalBlending`.
110
+ * It assumes both input colors have non-premultiplied alpha.
111
+ *
112
+ * @tsl
113
+ * @function
114
+ * @param {Node<vec4>} base - The base color.
115
+ * @param {Node<vec4>} blend - The blend color
116
+ * @return {Node<vec4>} The result.
117
+ */
118
+ export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
119
+
120
+ const outAlpha = blend.a.add( base.a.mul( blend.a.oneMinus() ) );
121
+
122
+ return vec4( blend.rgb.mul( blend.a ).add( base.rgb.mul( base.a ).mul( blend.a.oneMinus() ) ).div( outAlpha ), outAlpha );
123
+
124
+ } ).setLayout( {
125
+ name: 'blendColor',
126
+ type: 'vec4',
127
+ inputs: [
128
+ { name: 'base', type: 'vec4' },
129
+ { name: 'blend', type: 'vec4' }
130
+ ]
131
+ } );
132
+
133
+ // Deprecated
134
+
135
+ /**
136
+ * @tsl
137
+ * @function
138
+ * @deprecated since r171. Use {@link blendBurn} instead.
139
+ *
140
+ * @param {...any} params
141
+ * @returns {Function}
142
+ */
143
+ export const burn = ( ...params ) => { // @deprecated, r171
144
+
145
+ console.warn( 'THREE.TSL: "burn" has been renamed. Use "blendBurn" instead.' );
146
+ return blendBurn( params );
147
+
148
+ };
149
+
150
+ /**
151
+ * @tsl
152
+ * @function
153
+ * @deprecated since r171. Use {@link blendDodge} instead.
154
+ *
155
+ * @param {...any} params
156
+ * @returns {Function}
157
+ */
158
+ export const dodge = ( ...params ) => { // @deprecated, r171
159
+
160
+ console.warn( 'THREE.TSL: "dodge" has been renamed. Use "blendDodge" instead.' );
161
+ return blendDodge( params );
162
+
163
+ };
164
+
165
+ /**
166
+ * @tsl
167
+ * @function
168
+ * @deprecated since r171. Use {@link blendScreen} instead.
169
+ *
170
+ * @param {...any} params
171
+ * @returns {Function}
172
+ */
173
+ export const screen = ( ...params ) => { // @deprecated, r171
174
+
175
+ console.warn( 'THREE.TSL: "screen" has been renamed. Use "blendScreen" instead.' );
176
+ return blendScreen( params );
177
+
178
+ };
179
+
180
+ /**
181
+ * @tsl
182
+ * @function
183
+ * @deprecated since r171. Use {@link blendOverlay} instead.
184
+ *
185
+ * @param {...any} params
186
+ * @returns {Function}
187
+ */
188
+ export const overlay = ( ...params ) => { // @deprecated, r171
189
+
190
+ console.warn( 'THREE.TSL: "overlay" has been renamed. Use "blendOverlay" instead.' );
191
+ return blendOverlay( params );
192
+
193
+ };
@@ -1,10 +1,9 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import { uv } from '../accessors/UVNode.js';
4
- import { normalView } from '../accessors/NormalNode.js';
5
- import { positionView } from '../accessors/PositionNode.js';
2
+ import { uv } from '../accessors/UV.js';
3
+ import { normalView } from '../accessors/Normal.js';
4
+ import { positionView } from '../accessors/Position.js';
6
5
  import { faceDirection } from './FrontFacingNode.js';
7
- import { addNodeElement, Fn, nodeProxy, float, vec2 } from '../shadernode/ShaderNode.js';
6
+ import { Fn, nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
8
7
 
9
8
  // Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen
10
9
  // https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
@@ -45,13 +44,46 @@ const perturbNormalArb = Fn( ( inputs ) => {
45
44
 
46
45
  } );
47
46
 
47
+ /**
48
+ * This class can be used for applying bump maps to materials.
49
+ *
50
+ * ```js
51
+ * material.normalNode = bumpMap( texture( bumpTex ) );
52
+ * ```
53
+ *
54
+ * @augments TempNode
55
+ */
48
56
  class BumpMapNode extends TempNode {
49
57
 
58
+ static get type() {
59
+
60
+ return 'BumpMapNode';
61
+
62
+ }
63
+
64
+ /**
65
+ * Constructs a new bump map node.
66
+ *
67
+ * @param {Node<float>} textureNode - Represents the bump map data.
68
+ * @param {?Node<float>} [scaleNode=null] - Controls the intensity of the bump effect.
69
+ */
50
70
  constructor( textureNode, scaleNode = null ) {
51
71
 
52
72
  super( 'vec3' );
53
73
 
74
+ /**
75
+ * Represents the bump map data.
76
+ *
77
+ * @type {Node<float>}
78
+ */
54
79
  this.textureNode = textureNode;
80
+
81
+ /**
82
+ * Controls the intensity of the bump effect.
83
+ *
84
+ * @type {?Node<float>}
85
+ * @default null
86
+ */
55
87
  this.scaleNode = scaleNode;
56
88
 
57
89
  }
@@ -73,8 +105,13 @@ class BumpMapNode extends TempNode {
73
105
 
74
106
  export default BumpMapNode;
75
107
 
76
- export const bumpMap = nodeProxy( BumpMapNode );
77
-
78
- addNodeElement( 'bumpMap', bumpMap );
79
-
80
- addNodeClass( 'BumpMapNode', BumpMapNode );
108
+ /**
109
+ * TSL function for creating a bump map node.
110
+ *
111
+ * @tsl
112
+ * @function
113
+ * @param {Node<float>} textureNode - Represents the bump map data.
114
+ * @param {?Node<float>} [scaleNode=null] - Controls the intensity of the bump effect.
115
+ * @returns {BumpMapNode}
116
+ */
117
+ export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode );
@@ -0,0 +1,141 @@
1
+ import { dot, max, mix } from '../math/MathNode.js';
2
+ import { add } from '../math/OperatorNode.js';
3
+ import { Fn, If, float, vec3, vec4 } from '../tsl/TSLBase.js';
4
+ import { ColorManagement } from '../../math/ColorManagement.js';
5
+ import { Vector3 } from '../../math/Vector3.js';
6
+ import { LinearSRGBColorSpace } from '../../constants.js';
7
+
8
+ /**
9
+ * Computes a grayscale value for the given RGB color value.
10
+ *
11
+ * @tsl
12
+ * @function
13
+ * @param {Node<vec3>} color - The color value to compute the grayscale for.
14
+ * @return {Node<vec3>} The grayscale color.
15
+ */
16
+ export const grayscale = /*@__PURE__*/ Fn( ( [ color ] ) => {
17
+
18
+ return luminance( color.rgb );
19
+
20
+ } );
21
+
22
+ /**
23
+ * Super-saturates or desaturates the given RGB color.
24
+ *
25
+ * @tsl
26
+ * @function
27
+ * @param {Node<vec3>} color - The input color.
28
+ * @param {Node<float>} [adjustment=1] - Specifies the amount of the conversion. A value under `1` desaturates the color, a value over `1` super-saturates it.
29
+ * @return {Node<vec3>} The saturated color.
30
+ */
31
+ export const saturation = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
32
+
33
+ return adjustment.mix( luminance( color.rgb ), color.rgb );
34
+
35
+ } );
36
+
37
+ /**
38
+ * Selectively enhance the intensity of less saturated RGB colors. Can result
39
+ * in a more natural and visually appealing image with enhanced color depth
40
+ * compared to {@link ColorAdjustment#saturation}.
41
+ *
42
+ * @tsl
43
+ * @function
44
+ * @param {Node<vec3>} color - The input color.
45
+ * @param {Node<float>} [adjustment=1] - Controls the intensity of the vibrance effect.
46
+ * @return {Node<vec3>} The updated color.
47
+ */
48
+ export const vibrance = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
49
+
50
+ const average = add( color.r, color.g, color.b ).div( 3.0 );
51
+
52
+ const mx = color.r.max( color.g.max( color.b ) );
53
+ const amt = mx.sub( average ).mul( adjustment ).mul( - 3.0 );
54
+
55
+ return mix( color.rgb, mx, amt );
56
+
57
+ } );
58
+
59
+ /**
60
+ * Updates the hue component of the given RGB color while preserving its luminance and saturation.
61
+ *
62
+ * @tsl
63
+ * @function
64
+ * @param {Node<vec3>} color - The input color.
65
+ * @param {Node<float>} [adjustment=1] - Defines the degree of hue rotation in radians. A positive value rotates the hue clockwise, while a negative value rotates it counterclockwise.
66
+ * @return {Node<vec3>} The updated color.
67
+ */
68
+ export const hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
69
+
70
+ const k = vec3( 0.57735, 0.57735, 0.57735 );
71
+
72
+ const cosAngle = adjustment.cos();
73
+
74
+ return vec3( color.rgb.mul( cosAngle ).add( k.cross( color.rgb ).mul( adjustment.sin() ).add( k.mul( dot( k, color.rgb ).mul( cosAngle.oneMinus() ) ) ) ) );
75
+
76
+ } );
77
+
78
+ /**
79
+ * Computes the luminance for the given RGB color value.
80
+ *
81
+ * @tsl
82
+ * @function
83
+ * @param {Node<vec3>} color - The color value to compute the luminance for.
84
+ * @param {?Node<vec3>} luminanceCoefficients - The luminance coefficients. By default predefined values of the current working color space are used.
85
+ * @return {Node<vec3>} The luminance.
86
+ */
87
+ export const luminance = (
88
+ color,
89
+ luminanceCoefficients = vec3( ColorManagement.getLuminanceCoefficients( new Vector3() ) )
90
+ ) => dot( color, luminanceCoefficients );
91
+
92
+ /**
93
+ * Color Decision List (CDL) v1.2
94
+ *
95
+ * Compact representation of color grading information, defined by slope, offset, power, and
96
+ * saturation. The CDL should be typically be given input in a log space (such as LogC, ACEScc,
97
+ * or AgX Log), and will return output in the same space. Output may require clamping >=0.
98
+ *
99
+ * @tsl
100
+ * @function
101
+ * @param {Node<vec4>} color Input (-Infinity < input < +Infinity)
102
+ * @param {Node<vec3>} slope Slope (0 ≤ slope < +Infinity)
103
+ * @param {Node<vec3>} offset Offset (-Infinity < offset < +Infinity; typically -1 < offset < 1)
104
+ * @param {Node<vec3>} power Power (0 < power < +Infinity)
105
+ * @param {Node<float>} saturation Saturation (0 ≤ saturation < +Infinity; typically 0 ≤ saturation < 4)
106
+ * @param {Node<vec3>} luminanceCoefficients Luminance coefficients for saturation term, typically Rec. 709
107
+ * @return {Node<vec4>} Output, -Infinity < output < +Infinity
108
+ *
109
+ * References:
110
+ * - ASC CDL v1.2
111
+ * - {@link https://blender.stackexchange.com/a/55239/43930}
112
+ * - {@link https://docs.acescentral.com/specifications/acescc/}
113
+ */
114
+ export const cdl = /*@__PURE__*/ Fn( ( [
115
+ color,
116
+ slope = vec3( 1 ),
117
+ offset = vec3( 0 ),
118
+ power = vec3( 1 ),
119
+ saturation = float( 1 ),
120
+ // ASC CDL v1.2 explicitly requires Rec. 709 luminance coefficients.
121
+ luminanceCoefficients = vec3( ColorManagement.getLuminanceCoefficients( new Vector3(), LinearSRGBColorSpace ) )
122
+ ] ) => {
123
+
124
+ // NOTE: The ASC CDL v1.2 defines a [0, 1] clamp on the slope+offset term, and another on the
125
+ // saturation term. Per the ACEScc specification and Filament, limits may be omitted to support
126
+ // values outside [0, 1], requiring a workaround for negative values in the power expression.
127
+
128
+ const luma = color.rgb.dot( vec3( luminanceCoefficients ) );
129
+
130
+ const v = max( color.rgb.mul( slope ).add( offset ), 0.0 ).toVar();
131
+ const pv = v.pow( power ).toVar();
132
+
133
+ If( v.r.greaterThan( 0.0 ), () => { v.r.assign( pv.r ); } ); // eslint-disable-line
134
+ If( v.g.greaterThan( 0.0 ), () => { v.g.assign( pv.g ); } ); // eslint-disable-line
135
+ If( v.b.greaterThan( 0.0 ), () => { v.b.assign( pv.b ); } ); // eslint-disable-line
136
+
137
+ v.assign( luma.add( v.sub( luma ).mul( saturation ) ) );
138
+
139
+ return vec4( v.rgb, color.a );
140
+
141
+ } );
@@ -0,0 +1,54 @@
1
+ import { mix } from '../math/MathNode.js';
2
+ import { Fn } from '../tsl/TSLCore.js';
3
+
4
+ /**
5
+ * Converts the given color value from sRGB to linear-sRGB color space.
6
+ *
7
+ * @tsl
8
+ * @function
9
+ * @param {Node<vec3>} color - The sRGB color.
10
+ * @return {Node<vec3>} The linear-sRGB color.
11
+ */
12
+ export const sRGBTransferEOTF = /*@__PURE__*/ Fn( ( [ color ] ) => {
13
+
14
+ const a = color.mul( 0.9478672986 ).add( 0.0521327014 ).pow( 2.4 );
15
+ const b = color.mul( 0.0773993808 );
16
+ const factor = color.lessThanEqual( 0.04045 );
17
+
18
+ const rgbResult = mix( a, b, factor );
19
+
20
+ return rgbResult;
21
+
22
+ } ).setLayout( {
23
+ name: 'sRGBTransferEOTF',
24
+ type: 'vec3',
25
+ inputs: [
26
+ { name: 'color', type: 'vec3' }
27
+ ]
28
+ } );
29
+
30
+ /**
31
+ * Converts the given color value from linear-sRGB to sRGB color space.
32
+ *
33
+ * @tsl
34
+ * @function
35
+ * @param {Node<vec3>} color - The linear-sRGB color.
36
+ * @return {Node<vec3>} The sRGB color.
37
+ */
38
+ export const sRGBTransferOETF = /*@__PURE__*/ Fn( ( [ color ] ) => {
39
+
40
+ const a = color.pow( 0.41666 ).mul( 1.055 ).sub( 0.055 );
41
+ const b = color.mul( 12.92 );
42
+ const factor = color.lessThanEqual( 0.0031308 );
43
+
44
+ const rgbResult = mix( a, b, factor );
45
+
46
+ return rgbResult;
47
+
48
+ } ).setLayout( {
49
+ name: 'sRGBTransferOETF',
50
+ type: 'vec3',
51
+ inputs: [
52
+ { name: 'color', type: 'vec3' }
53
+ ]
54
+ } );