super-three 0.179.0 → 0.184.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 (696) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +14522 -12207
  4. package/build/three.core.js +12005 -10954
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +2270 -1005
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +63 -18
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +16573 -7890
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +16533 -7888
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +12 -4
  17. package/examples/jsm/animation/CCDIKSolver.js +8 -4
  18. package/examples/jsm/controls/ArcballControls.js +15 -12
  19. package/examples/jsm/controls/DragControls.js +9 -59
  20. package/examples/jsm/controls/FirstPersonControls.js +61 -57
  21. package/examples/jsm/controls/FlyControls.js +5 -1
  22. package/examples/jsm/controls/MapControls.js +55 -1
  23. package/examples/jsm/controls/OrbitControls.js +113 -10
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +9 -9
  26. package/examples/jsm/controls/TransformControls.js +35 -3
  27. package/examples/jsm/csm/CSM.js +2 -1
  28. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  29. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  30. package/examples/jsm/effects/AsciiEffect.js +8 -8
  31. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  32. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  33. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  34. package/examples/jsm/exporters/EXRExporter.js +2 -2
  35. package/examples/jsm/exporters/GLTFExporter.js +185 -34
  36. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  37. package/examples/jsm/exporters/PLYExporter.js +1 -1
  38. package/examples/jsm/exporters/USDZExporter.js +31 -5
  39. package/examples/jsm/geometries/DecalGeometry.js +3 -3
  40. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  41. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  42. package/examples/jsm/geometries/TextGeometry.js +21 -2
  43. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  44. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  45. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  46. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  47. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  48. package/examples/jsm/helpers/ViewHelper.js +110 -13
  49. package/examples/jsm/inspector/Extension.js +13 -0
  50. package/examples/jsm/inspector/Inspector.js +542 -0
  51. package/examples/jsm/inspector/RendererInspector.js +425 -0
  52. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  53. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  55. package/examples/jsm/inspector/tabs/Console.js +238 -0
  56. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  57. package/examples/jsm/inspector/tabs/Parameters.js +380 -0
  58. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  59. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  60. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  61. package/examples/jsm/inspector/tabs/Viewer.js +268 -0
  62. package/examples/jsm/inspector/ui/Graph.js +95 -0
  63. package/examples/jsm/inspector/ui/Item.js +170 -0
  64. package/examples/jsm/inspector/ui/List.js +75 -0
  65. package/examples/jsm/inspector/ui/Profiler.js +2072 -0
  66. package/examples/jsm/inspector/ui/Style.js +1667 -0
  67. package/examples/jsm/inspector/ui/Tab.js +265 -0
  68. package/examples/jsm/inspector/ui/Values.js +476 -0
  69. package/examples/jsm/inspector/ui/utils.js +69 -0
  70. package/examples/jsm/interaction/InteractionManager.js +226 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  73. package/examples/jsm/interactive/SelectionBox.js +30 -0
  74. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  75. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  76. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  77. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  79. package/examples/jsm/lines/Line2.js +3 -3
  80. package/examples/jsm/lines/LineGeometry.js +1 -1
  81. package/examples/jsm/lines/LineMaterial.js +7 -1
  82. package/examples/jsm/lines/LineSegments2.js +2 -2
  83. package/examples/jsm/lines/Wireframe.js +2 -2
  84. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  85. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  86. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  87. package/examples/jsm/loaders/3DMLoader.js +5 -4
  88. package/examples/jsm/loaders/3MFLoader.js +3 -3
  89. package/examples/jsm/loaders/AMFLoader.js +2 -2
  90. package/examples/jsm/loaders/ColladaLoader.js +27 -4029
  91. package/examples/jsm/loaders/DDSLoader.js +1 -1
  92. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  93. package/examples/jsm/loaders/EXRLoader.js +692 -53
  94. package/examples/jsm/loaders/FBXLoader.js +237 -39
  95. package/examples/jsm/loaders/FontLoader.js +23 -5
  96. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  97. package/examples/jsm/loaders/GLTFLoader.js +159 -185
  98. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  99. package/examples/jsm/loaders/HDRLoader.js +485 -0
  100. package/examples/jsm/loaders/KMZLoader.js +5 -5
  101. package/examples/jsm/loaders/KTX2Loader.js +162 -53
  102. package/examples/jsm/loaders/KTXLoader.js +2 -2
  103. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  104. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  105. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  106. package/examples/jsm/loaders/LWOLoader.js +9 -41
  107. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  108. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  109. package/examples/jsm/loaders/OBJLoader.js +1 -1
  110. package/examples/jsm/loaders/PCDLoader.js +4 -2
  111. package/examples/jsm/loaders/PDBLoader.js +1 -1
  112. package/examples/jsm/loaders/RGBELoader.js +7 -473
  113. package/examples/jsm/loaders/SVGLoader.js +4 -4
  114. package/examples/jsm/loaders/TDSLoader.js +0 -2
  115. package/examples/jsm/loaders/TGALoader.js +0 -2
  116. package/examples/jsm/loaders/TTFLoader.js +4 -4
  117. package/examples/jsm/loaders/USDLoader.js +100 -40
  118. package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
  119. package/examples/jsm/loaders/VOXLoader.js +660 -117
  120. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  121. package/examples/jsm/loaders/VTKLoader.js +42 -25
  122. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  123. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  124. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  125. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  126. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  127. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  128. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  129. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  130. package/examples/jsm/math/ColorSpaces.js +19 -1
  131. package/examples/jsm/math/ConvexHull.js +3 -3
  132. package/examples/jsm/math/ImprovedNoise.js +1 -1
  133. package/examples/jsm/math/Lut.js +2 -2
  134. package/examples/jsm/math/Octree.js +131 -1
  135. package/examples/jsm/math/SimplexNoise.js +1 -1
  136. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  137. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  138. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  139. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  140. package/examples/jsm/misc/RollerCoaster.js +42 -4
  141. package/examples/jsm/misc/TubePainter.js +383 -40
  142. package/examples/jsm/misc/Volume.js +1 -2
  143. package/examples/jsm/misc/VolumeSlice.js +0 -1
  144. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  145. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  146. package/examples/jsm/objects/LensflareMesh.js +1 -1
  147. package/examples/jsm/objects/Reflector.js +73 -25
  148. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  149. package/examples/jsm/objects/Sky.js +91 -7
  150. package/examples/jsm/objects/SkyMesh.js +151 -17
  151. package/examples/jsm/objects/Water.js +7 -6
  152. package/examples/jsm/objects/Water2.js +5 -3
  153. package/examples/jsm/objects/WaterMesh.js +11 -13
  154. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  155. package/examples/jsm/physics/JoltPhysics.js +10 -6
  156. package/examples/jsm/physics/RapierPhysics.js +9 -5
  157. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  158. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  159. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  160. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  161. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  162. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  163. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  164. package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
  165. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  166. package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
  167. package/examples/jsm/renderers/Projector.js +246 -28
  168. package/examples/jsm/renderers/SVGRenderer.js +175 -61
  169. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  170. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  171. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  172. package/examples/jsm/shaders/BokehShader.js +1 -1
  173. package/examples/jsm/shaders/BokehShader2.js +1 -1
  174. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  175. package/examples/jsm/shaders/FocusShader.js +1 -1
  176. package/examples/jsm/shaders/GTAOShader.js +21 -8
  177. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  178. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  179. package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
  180. package/examples/jsm/shaders/SAOShader.js +17 -4
  181. package/examples/jsm/shaders/SSAOShader.js +11 -1
  182. package/examples/jsm/shaders/SSRShader.js +7 -6
  183. package/examples/jsm/shaders/SepiaShader.js +1 -1
  184. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  185. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  186. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
  187. package/examples/jsm/shaders/VignetteShader.js +1 -1
  188. package/examples/jsm/transpiler/AST.js +44 -0
  189. package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
  190. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  191. package/examples/jsm/transpiler/TSLEncoder.js +52 -10
  192. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  193. package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
  194. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  195. package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
  196. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  197. package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
  198. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  199. package/examples/jsm/tsl/display/BloomNode.js +23 -9
  200. package/examples/jsm/tsl/display/CRT.js +150 -0
  201. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
  202. package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
  203. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  204. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  205. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  206. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  207. package/examples/jsm/tsl/display/GTAONode.js +59 -9
  208. package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
  209. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  210. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  211. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  212. package/examples/jsm/tsl/display/OutlineNode.js +81 -20
  213. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  214. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  215. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  216. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  217. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  218. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  219. package/examples/jsm/tsl/display/SSGINode.js +638 -0
  220. package/examples/jsm/tsl/display/SSRNode.js +186 -69
  221. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  222. package/examples/jsm/tsl/display/Shape.js +29 -0
  223. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  224. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  225. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  226. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  227. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  228. package/examples/jsm/tsl/display/TRAANode.js +381 -75
  229. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  230. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  231. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  232. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  233. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  234. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  235. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  236. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  237. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  238. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  239. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  240. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  241. package/examples/jsm/tsl/math/Bayer.js +53 -3
  242. package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
  243. package/examples/jsm/utils/ColorUtils.js +76 -0
  244. package/examples/jsm/utils/LDrawUtils.js +1 -1
  245. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  246. package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
  247. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  248. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  249. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  250. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  251. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  252. package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
  253. package/package.json +27 -38
  254. package/src/Three.Core.js +7 -3
  255. package/src/Three.TSL.js +61 -16
  256. package/src/Three.WebGPU.Nodes.js +7 -0
  257. package/src/Three.WebGPU.js +11 -0
  258. package/src/Three.js +1 -0
  259. package/src/animation/AnimationAction.js +12 -2
  260. package/src/animation/AnimationClip.js +21 -5
  261. package/src/animation/AnimationMixer.js +9 -3
  262. package/src/animation/AnimationObjectGroup.js +2 -1
  263. package/src/animation/AnimationUtils.js +1 -12
  264. package/src/animation/KeyframeTrack.js +54 -14
  265. package/src/animation/PropertyBinding.js +12 -11
  266. package/src/animation/PropertyMixer.js +4 -4
  267. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  268. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  269. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  270. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  271. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  272. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  273. package/src/audio/Audio.js +11 -10
  274. package/src/audio/AudioContext.js +2 -2
  275. package/src/audio/AudioListener.js +5 -3
  276. package/src/audio/PositionalAudio.js +1 -1
  277. package/src/cameras/Camera.js +32 -2
  278. package/src/cameras/CubeCamera.js +20 -0
  279. package/src/cameras/OrthographicCamera.js +1 -1
  280. package/src/cameras/PerspectiveCamera.js +1 -1
  281. package/src/cameras/StereoCamera.js +2 -2
  282. package/src/constants.js +100 -7
  283. package/src/core/BufferAttribute.js +13 -1
  284. package/src/core/BufferGeometry.js +24 -12
  285. package/src/core/Clock.js +7 -0
  286. package/src/core/EventDispatcher.js +1 -1
  287. package/src/core/InterleavedBuffer.js +1 -1
  288. package/src/core/InterleavedBufferAttribute.js +3 -2
  289. package/src/core/Object3D.js +55 -6
  290. package/src/core/Raycaster.js +4 -3
  291. package/src/core/RenderTarget.js +14 -5
  292. package/src/extras/Controls.js +5 -4
  293. package/src/extras/DataUtils.js +2 -1
  294. package/src/extras/Earcut.js +6 -0
  295. package/src/extras/ImageUtils.js +2 -2
  296. package/src/extras/PMREMGenerator.js +259 -57
  297. package/src/extras/TextureUtils.js +6 -1
  298. package/src/extras/core/Curve.js +2 -1
  299. package/src/extras/core/Interpolations.js +7 -1
  300. package/src/extras/core/ShapePath.js +4 -4
  301. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  302. package/src/extras/lib/earcut.js +8 -8
  303. package/src/geometries/BoxGeometry.js +1 -0
  304. package/src/geometries/CapsuleGeometry.js +1 -0
  305. package/src/geometries/CircleGeometry.js +1 -0
  306. package/src/geometries/ConeGeometry.js +1 -0
  307. package/src/geometries/CylinderGeometry.js +1 -0
  308. package/src/geometries/DodecahedronGeometry.js +1 -0
  309. package/src/geometries/ExtrudeGeometry.js +10 -8
  310. package/src/geometries/IcosahedronGeometry.js +1 -0
  311. package/src/geometries/LatheGeometry.js +1 -0
  312. package/src/geometries/OctahedronGeometry.js +1 -0
  313. package/src/geometries/PlaneGeometry.js +1 -0
  314. package/src/geometries/PolyhedronGeometry.js +1 -1
  315. package/src/geometries/RingGeometry.js +1 -0
  316. package/src/geometries/ShapeGeometry.js +1 -0
  317. package/src/geometries/SphereGeometry.js +1 -0
  318. package/src/geometries/TetrahedronGeometry.js +1 -0
  319. package/src/geometries/TorusGeometry.js +9 -3
  320. package/src/geometries/TorusKnotGeometry.js +1 -0
  321. package/src/geometries/TubeGeometry.js +1 -0
  322. package/src/helpers/CameraHelper.js +4 -1
  323. package/src/helpers/DirectionalLightHelper.js +4 -1
  324. package/src/helpers/HemisphereLightHelper.js +3 -0
  325. package/src/helpers/PointLightHelper.js +1 -25
  326. package/src/helpers/SpotLightHelper.js +3 -0
  327. package/src/lights/DirectionalLight.js +13 -0
  328. package/src/lights/HemisphereLight.js +10 -0
  329. package/src/lights/Light.js +1 -11
  330. package/src/lights/LightProbe.js +0 -15
  331. package/src/lights/LightShadow.js +15 -6
  332. package/src/lights/PointLight.js +15 -0
  333. package/src/lights/PointLightShadow.js +0 -86
  334. package/src/lights/SpotLight.js +22 -1
  335. package/src/lights/webgpu/IESSpotLight.js +2 -1
  336. package/src/lights/webgpu/ProjectorLight.js +1 -1
  337. package/src/loaders/AnimationLoader.js +2 -1
  338. package/src/loaders/AudioLoader.js +13 -2
  339. package/src/loaders/BufferGeometryLoader.js +2 -2
  340. package/src/loaders/Cache.js +30 -2
  341. package/src/loaders/DataTextureLoader.js +6 -4
  342. package/src/loaders/FileLoader.js +4 -4
  343. package/src/loaders/ImageBitmapLoader.js +17 -13
  344. package/src/loaders/ImageLoader.js +1 -1
  345. package/src/loaders/Loader.js +9 -3
  346. package/src/loaders/LoadingManager.js +25 -3
  347. package/src/loaders/MaterialLoader.js +6 -4
  348. package/src/loaders/ObjectLoader.js +57 -17
  349. package/src/loaders/TextureLoader.js +1 -1
  350. package/src/loaders/nodes/NodeLoader.js +5 -4
  351. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  352. package/src/materials/Material.js +18 -3
  353. package/src/materials/MeshBasicMaterial.js +1 -0
  354. package/src/materials/MeshDepthMaterial.js +1 -0
  355. package/src/materials/MeshDistanceMaterial.js +1 -1
  356. package/src/materials/MeshLambertMaterial.js +11 -1
  357. package/src/materials/MeshMatcapMaterial.js +22 -0
  358. package/src/materials/MeshNormalMaterial.js +1 -0
  359. package/src/materials/MeshPhongMaterial.js +11 -1
  360. package/src/materials/MeshPhysicalMaterial.js +2 -1
  361. package/src/materials/MeshStandardMaterial.js +8 -7
  362. package/src/materials/MeshToonMaterial.js +2 -1
  363. package/src/materials/PointsMaterial.js +1 -1
  364. package/src/materials/ShaderMaterial.js +22 -3
  365. package/src/materials/nodes/Line2NodeMaterial.js +36 -9
  366. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  367. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  368. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  369. package/src/materials/nodes/NodeMaterial.js +95 -35
  370. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  371. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  372. package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
  373. package/src/math/Color.js +6 -5
  374. package/src/math/ColorManagement.js +9 -3
  375. package/src/math/Cylindrical.js +1 -1
  376. package/src/math/Euler.js +2 -1
  377. package/src/math/Line3.js +6 -5
  378. package/src/math/MathUtils.js +23 -21
  379. package/src/math/Matrix2.js +14 -10
  380. package/src/math/Matrix3.js +15 -11
  381. package/src/math/Matrix4.js +94 -81
  382. package/src/math/Plane.js +5 -4
  383. package/src/math/Quaternion.js +60 -84
  384. package/src/math/Sphere.js +1 -1
  385. package/src/math/Spherical.js +1 -1
  386. package/src/math/Triangle.js +1 -1
  387. package/src/math/Vector2.js +11 -7
  388. package/src/math/Vector3.js +15 -13
  389. package/src/math/Vector4.js +13 -9
  390. package/src/math/interpolants/BezierInterpolant.js +108 -0
  391. package/src/nodes/Nodes.js +86 -65
  392. package/src/nodes/TSL.js +11 -8
  393. package/src/nodes/accessors/Arrays.js +1 -1
  394. package/src/nodes/accessors/BatchNode.js +10 -10
  395. package/src/nodes/accessors/Bitangent.js +5 -5
  396. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  397. package/src/nodes/accessors/BufferNode.js +30 -3
  398. package/src/nodes/accessors/Camera.js +260 -13
  399. package/src/nodes/accessors/ClippingNode.js +10 -9
  400. package/src/nodes/accessors/CubeTextureNode.js +32 -6
  401. package/src/nodes/accessors/InstanceNode.js +164 -39
  402. package/src/nodes/accessors/Lights.js +10 -0
  403. package/src/nodes/accessors/MaterialNode.js +9 -1
  404. package/src/nodes/accessors/MaterialProperties.js +2 -5
  405. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  406. package/src/nodes/accessors/ModelNode.js +1 -1
  407. package/src/nodes/accessors/Normal.js +16 -15
  408. package/src/nodes/accessors/Object3DNode.js +2 -2
  409. package/src/nodes/accessors/Position.js +51 -3
  410. package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
  411. package/src/nodes/accessors/ReferenceNode.js +11 -10
  412. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  413. package/src/nodes/accessors/SceneProperties.js +47 -0
  414. package/src/nodes/accessors/SkinningNode.js +27 -26
  415. package/src/nodes/accessors/StorageBufferNode.js +14 -24
  416. package/src/nodes/accessors/StorageTextureNode.js +62 -9
  417. package/src/nodes/accessors/Tangent.js +4 -14
  418. package/src/nodes/accessors/Texture3DNode.js +41 -31
  419. package/src/nodes/accessors/TextureNode.js +193 -63
  420. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  421. package/src/nodes/accessors/UserDataNode.js +1 -2
  422. package/src/nodes/accessors/VertexColorNode.js +1 -2
  423. package/src/nodes/code/FunctionCallNode.js +25 -5
  424. package/src/nodes/code/FunctionNode.js +25 -3
  425. package/src/nodes/core/ArrayNode.js +22 -2
  426. package/src/nodes/core/AssignNode.js +6 -5
  427. package/src/nodes/core/AttributeNode.js +5 -4
  428. package/src/nodes/core/BypassNode.js +1 -1
  429. package/src/nodes/core/ContextNode.js +133 -15
  430. package/src/nodes/core/IndexNode.js +4 -3
  431. package/src/nodes/core/InputNode.js +3 -2
  432. package/src/nodes/core/InspectorNode.js +128 -0
  433. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
  434. package/src/nodes/core/MRTNode.js +48 -2
  435. package/src/nodes/core/Node.js +264 -46
  436. package/src/nodes/core/NodeBuilder.js +453 -87
  437. package/src/nodes/core/NodeError.js +28 -0
  438. package/src/nodes/core/NodeFrame.js +31 -23
  439. package/src/nodes/core/NodeFunction.js +2 -1
  440. package/src/nodes/core/NodeParser.js +2 -1
  441. package/src/nodes/core/NodeUniform.js +1 -1
  442. package/src/nodes/core/NodeUtils.js +25 -97
  443. package/src/nodes/core/OutputStructNode.js +12 -10
  444. package/src/nodes/core/ParameterNode.js +34 -3
  445. package/src/nodes/core/PropertyNode.js +26 -3
  446. package/src/nodes/core/StackNode.js +99 -23
  447. package/src/nodes/core/StackTrace.js +139 -0
  448. package/src/nodes/core/StructNode.js +22 -8
  449. package/src/nodes/core/StructTypeNode.js +13 -18
  450. package/src/nodes/core/SubBuildNode.js +4 -4
  451. package/src/nodes/core/UniformGroupNode.js +36 -6
  452. package/src/nodes/core/UniformNode.js +37 -13
  453. package/src/nodes/core/VarNode.js +96 -34
  454. package/src/nodes/core/VaryingNode.js +2 -18
  455. package/src/nodes/display/BlendModes.js +0 -63
  456. package/src/nodes/display/BumpMapNode.js +1 -1
  457. package/src/nodes/display/ColorAdjustment.js +18 -1
  458. package/src/nodes/display/ColorSpaceNode.js +3 -3
  459. package/src/nodes/display/FrontFacingNode.js +4 -8
  460. package/src/nodes/display/NormalMapNode.js +41 -5
  461. package/src/nodes/display/PassNode.js +175 -25
  462. package/src/nodes/display/RenderOutputNode.js +35 -9
  463. package/src/nodes/display/ScreenNode.js +47 -15
  464. package/src/nodes/display/ToneMappingNode.js +32 -5
  465. package/src/nodes/display/ToonOutlinePassNode.js +10 -2
  466. package/src/nodes/display/ViewportDepthNode.js +52 -4
  467. package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
  468. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  469. package/src/nodes/display/ViewportTextureNode.js +72 -14
  470. package/src/nodes/fog/Fog.js +18 -34
  471. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  472. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  473. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  474. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  475. package/src/nodes/functions/BasicLightingModel.js +2 -1
  476. package/src/nodes/functions/PhysicalLightingModel.js +128 -46
  477. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  478. package/src/nodes/geometry/RangeNode.js +44 -6
  479. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  480. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  481. package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
  482. package/src/nodes/gpgpu/ComputeNode.js +76 -38
  483. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  484. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
  485. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  486. package/src/nodes/lighting/EnvironmentNode.js +34 -9
  487. package/src/nodes/lighting/LightsNode.js +10 -32
  488. package/src/nodes/lighting/PointShadowNode.js +167 -148
  489. package/src/nodes/lighting/ShadowFilterNode.js +55 -65
  490. package/src/nodes/lighting/ShadowNode.js +189 -44
  491. package/src/nodes/math/BitcastNode.js +156 -0
  492. package/src/nodes/math/BitcountNode.js +433 -0
  493. package/src/nodes/math/ConditionalNode.js +25 -8
  494. package/src/nodes/math/MathNode.js +98 -57
  495. package/src/nodes/math/OperatorNode.js +8 -5
  496. package/src/nodes/math/PackFloatNode.js +98 -0
  497. package/src/nodes/math/UnpackFloatNode.js +96 -0
  498. package/src/nodes/pmrem/PMREMNode.js +1 -1
  499. package/src/nodes/pmrem/PMREMUtils.js +111 -2
  500. package/src/nodes/shapes/Shapes.js +1 -1
  501. package/src/nodes/tsl/TSLBase.js +6 -3
  502. package/src/nodes/tsl/TSLCore.js +488 -166
  503. package/src/nodes/utils/ArrayElementNode.js +14 -1
  504. package/src/nodes/utils/ConvertNode.js +1 -1
  505. package/src/nodes/utils/DebugNode.js +14 -13
  506. package/src/nodes/utils/EventNode.js +67 -2
  507. package/src/nodes/utils/FlipNode.js +1 -1
  508. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  509. package/src/nodes/utils/JoinNode.js +7 -4
  510. package/src/nodes/utils/LoopNode.js +20 -24
  511. package/src/nodes/utils/MemberNode.js +60 -8
  512. package/src/nodes/utils/Packing.js +13 -1
  513. package/src/nodes/utils/PostProcessingUtils.js +60 -1
  514. package/src/nodes/utils/RTTNode.js +14 -4
  515. package/src/nodes/utils/ReflectorNode.js +61 -11
  516. package/src/nodes/utils/Remap.js +48 -0
  517. package/src/nodes/utils/RotateNode.js +1 -1
  518. package/src/nodes/utils/SampleNode.js +12 -2
  519. package/src/nodes/utils/SetNode.js +1 -1
  520. package/src/nodes/utils/SplitNode.js +12 -1
  521. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  522. package/src/nodes/utils/Timer.js +0 -47
  523. package/src/nodes/utils/UVUtils.js +28 -0
  524. package/src/objects/BatchedMesh.js +46 -18
  525. package/src/objects/InstancedMesh.js +30 -3
  526. package/src/objects/LOD.js +1 -1
  527. package/src/objects/Line.js +3 -2
  528. package/src/objects/LineSegments.js +2 -1
  529. package/src/objects/Mesh.js +1 -1
  530. package/src/objects/Points.js +1 -1
  531. package/src/objects/Skeleton.js +12 -2
  532. package/src/objects/SkinnedMesh.js +29 -10
  533. package/src/objects/Sprite.js +4 -3
  534. package/src/renderers/WebGLRenderer.js +372 -179
  535. package/src/renderers/common/Animation.js +16 -4
  536. package/src/renderers/common/Attributes.js +16 -2
  537. package/src/renderers/common/Backend.js +137 -35
  538. package/src/renderers/common/Background.js +28 -14
  539. package/src/renderers/common/BindGroup.js +1 -16
  540. package/src/renderers/common/Binding.js +11 -0
  541. package/src/renderers/common/Bindings.js +83 -12
  542. package/src/renderers/common/BlendMode.js +143 -0
  543. package/src/renderers/common/Buffer.js +40 -0
  544. package/src/renderers/common/BundleGroup.js +1 -1
  545. package/src/renderers/common/CanvasTarget.js +341 -0
  546. package/src/renderers/common/ChainMap.js +30 -6
  547. package/src/renderers/common/ComputePipeline.js +1 -1
  548. package/src/renderers/common/CubeRenderTarget.js +51 -7
  549. package/src/renderers/common/DataMap.js +1 -1
  550. package/src/renderers/common/Geometries.js +55 -3
  551. package/src/renderers/common/Info.js +337 -6
  552. package/src/renderers/common/InspectorBase.js +151 -0
  553. package/src/renderers/common/Lighting.js +5 -21
  554. package/src/renderers/common/Pipelines.js +41 -8
  555. package/src/renderers/common/PostProcessing.js +9 -226
  556. package/src/renderers/common/QuadMesh.js +7 -1
  557. package/src/renderers/common/ReadbackBuffer.js +78 -0
  558. package/src/renderers/common/RenderBundle.js +3 -1
  559. package/src/renderers/common/RenderBundles.js +7 -3
  560. package/src/renderers/common/RenderContext.js +18 -2
  561. package/src/renderers/common/RenderContexts.js +33 -49
  562. package/src/renderers/common/RenderList.js +7 -3
  563. package/src/renderers/common/RenderLists.js +2 -1
  564. package/src/renderers/common/RenderObject.js +32 -6
  565. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  566. package/src/renderers/common/RenderObjects.js +22 -6
  567. package/src/renderers/common/RenderPipeline.js +232 -17
  568. package/src/renderers/common/Renderer.js +927 -335
  569. package/src/renderers/common/RendererUtils.js +9 -0
  570. package/src/renderers/common/SampledTexture.js +9 -1
  571. package/src/renderers/common/Sampler.js +52 -14
  572. package/src/renderers/common/StorageBuffer.js +13 -1
  573. package/src/renderers/common/StorageTexture.js +9 -1
  574. package/src/renderers/common/Textures.js +208 -47
  575. package/src/renderers/common/TimestampQueryPool.js +70 -6
  576. package/src/renderers/common/Uniform.js +8 -0
  577. package/src/renderers/common/UniformsGroup.js +64 -2
  578. package/src/renderers/common/XRManager.js +79 -51
  579. package/src/renderers/common/extras/PMREMGenerator.js +176 -79
  580. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  581. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  582. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
  583. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  584. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  585. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  586. package/src/renderers/shaders/DFGLUTData.js +49 -0
  587. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  588. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  589. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  590. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  591. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  592. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  593. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
  594. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  595. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  597. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  598. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  599. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  600. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  601. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  602. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
  603. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  604. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  605. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  606. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  607. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  608. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  609. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  610. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
  611. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  612. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  613. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  614. package/src/renderers/shaders/ShaderChunk.js +5 -3
  615. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  616. package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
  617. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  618. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  619. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  620. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  621. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  622. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  623. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  624. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  625. package/src/renderers/shaders/ShaderLib.js +7 -6
  626. package/src/renderers/shaders/UniformsLib.js +8 -5
  627. package/src/renderers/shaders/UniformsUtils.js +52 -9
  628. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  629. package/src/renderers/webgl/WebGLBackground.js +15 -15
  630. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  631. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  632. package/src/renderers/webgl/WebGLCapabilities.js +11 -5
  633. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  634. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  635. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  637. package/src/renderers/webgl/WebGLInfo.js +3 -1
  638. package/src/renderers/webgl/WebGLLights.js +18 -1
  639. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  640. package/src/renderers/webgl/WebGLObjects.js +3 -1
  641. package/src/renderers/webgl/WebGLOutput.js +270 -0
  642. package/src/renderers/webgl/WebGLProgram.js +63 -122
  643. package/src/renderers/webgl/WebGLPrograms.js +65 -52
  644. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  645. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  646. package/src/renderers/webgl/WebGLShadowMap.js +191 -26
  647. package/src/renderers/webgl/WebGLState.js +79 -40
  648. package/src/renderers/webgl/WebGLTextures.js +234 -68
  649. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  650. package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
  651. package/src/renderers/webgl/WebGLUtils.js +8 -3
  652. package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
  653. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  654. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
  655. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  656. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  657. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  658. package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
  659. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
  660. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
  661. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
  662. package/src/renderers/webgpu/WebGPUBackend.js +403 -253
  663. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  664. package/src/renderers/webgpu/WebGPURenderer.js +5 -3
  665. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
  666. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
  667. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
  668. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  669. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
  670. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
  671. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
  672. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
  673. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
  674. package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
  675. package/src/renderers/webxr/WebXRController.js +12 -0
  676. package/src/renderers/webxr/WebXRManager.js +45 -29
  677. package/src/textures/CubeDepthTexture.js +76 -0
  678. package/src/textures/ExternalTexture.js +15 -4
  679. package/src/textures/HTMLTexture.js +74 -0
  680. package/src/textures/Source.js +5 -4
  681. package/src/textures/Texture.js +19 -7
  682. package/src/textures/VideoTexture.js +2 -3
  683. package/src/utils.js +344 -3
  684. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  685. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  686. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  687. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  688. package/src/nodes/accessors/SceneNode.js +0 -144
  689. package/src/nodes/code/ScriptableNode.js +0 -726
  690. package/src/nodes/code/ScriptableValueNode.js +0 -253
  691. package/src/nodes/display/PosterizeNode.js +0 -65
  692. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  693. package/src/nodes/utils/RemapNode.js +0 -125
  694. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  695. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  696. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,8 +1,8 @@
1
1
  import { RenderTarget, Vector2, QuadMesh, NodeMaterial, RendererUtils, TempNode, NodeUpdateType } from 'three/webgpu';
2
- import { nodeObject, Fn, float, uv, texture, passTexture, uniform, sign, max, convertToTexture } from 'three/tsl';
2
+ import { nodeObject, Fn, float, uv, texture, passTexture, sign, max, convertToTexture } from 'three/tsl';
3
3
 
4
4
  const _size = /*@__PURE__*/ new Vector2();
5
- const _quadMeshComp = /*@__PURE__*/ new QuadMesh();
5
+ const _quadMesh = /*@__PURE__*/ new QuadMesh();
6
6
 
7
7
  let _rendererState;
8
8
 
@@ -24,9 +24,9 @@ class AfterImageNode extends TempNode {
24
24
  * Constructs a new after image node.
25
25
  *
26
26
  * @param {TextureNode} textureNode - The texture node that represents the input of the effect.
27
- * @param {number} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
27
+ * @param {Node<float>} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
28
28
  */
29
- constructor( textureNode, damp = 0.96 ) {
29
+ constructor( textureNode, damp = float( 0.96 ) ) {
30
30
 
31
31
  super( 'vec4' );
32
32
 
@@ -37,21 +37,14 @@ class AfterImageNode extends TempNode {
37
37
  */
38
38
  this.textureNode = textureNode;
39
39
 
40
- /**
41
- * The texture represents the pervious frame.
42
- *
43
- * @type {TextureNode}
44
- */
45
- this.textureNodeOld = texture( null );
46
-
47
40
  /**
48
41
  * How quickly the after-image fades. A higher value means the after-image
49
42
  * persists longer, while a lower value means it fades faster. Should be in
50
43
  * the range `[0, 1]`.
51
44
  *
52
- * @type {UniformNode<float>}
45
+ * @type {Node<float>}
53
46
  */
54
- this.damp = uniform( damp );
47
+ this.damp = damp;
55
48
 
56
49
  /**
57
50
  * The render target used for compositing the effect.
@@ -79,6 +72,22 @@ class AfterImageNode extends TempNode {
79
72
  */
80
73
  this._textureNode = passTexture( this, this._compRT.texture );
81
74
 
75
+ /**
76
+ * The texture represents the pervious frame.
77
+ *
78
+ * @private
79
+ * @type {TextureNode}
80
+ */
81
+ this._textureNodeOld = texture( this._oldRT.texture );
82
+
83
+ /**
84
+ * The material for the composite pass.
85
+ *
86
+ * @private
87
+ * @type {?NodeMaterial}
88
+ */
89
+ this._materialComposed = null;
90
+
82
91
  /**
83
92
  * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
84
93
  * its effect once per frame in `updateBefore()`.
@@ -139,17 +148,20 @@ class AfterImageNode extends TempNode {
139
148
 
140
149
  this.setSize( _size.x, _size.y );
141
150
 
142
- const currentTexture = textureNode.value;
151
+ // make sure texture nodes point to correct render targets
152
+
153
+ this._textureNode.value = this._compRT.texture;
154
+ this._textureNodeOld.value = this._oldRT.texture;
143
155
 
144
- this.textureNodeOld.value = this._oldRT.texture;
156
+ // composite
145
157
 
146
- // comp
147
- _quadMeshComp.material = this._materialComposed;
158
+ _quadMesh.material = this._materialComposed;
159
+ _quadMesh.name = 'AfterImage';
148
160
 
149
161
  renderer.setRenderTarget( this._compRT );
150
- _quadMeshComp.render( renderer );
162
+ _quadMesh.render( renderer );
151
163
 
152
- // Swap the textures
164
+ // swap
153
165
 
154
166
  const temp = this._oldRT;
155
167
  this._oldRT = this._compRT;
@@ -157,8 +169,6 @@ class AfterImageNode extends TempNode {
157
169
 
158
170
  //
159
171
 
160
- textureNode.value = currentTexture;
161
-
162
172
  RendererUtils.restoreRendererState( renderer, _rendererState );
163
173
 
164
174
  }
@@ -172,7 +182,7 @@ class AfterImageNode extends TempNode {
172
182
  setup( builder ) {
173
183
 
174
184
  const textureNode = this.textureNode;
175
- const textureNodeOld = this.textureNodeOld;
185
+ const textureNodeOld = this._textureNodeOld;
176
186
 
177
187
  //
178
188
 
@@ -224,6 +234,8 @@ class AfterImageNode extends TempNode {
224
234
  this._compRT.dispose();
225
235
  this._oldRT.dispose();
226
236
 
237
+ if ( this._materialComposed !== null ) this._materialComposed.dispose();
238
+
227
239
  }
228
240
 
229
241
  }
@@ -234,9 +246,9 @@ class AfterImageNode extends TempNode {
234
246
  * @tsl
235
247
  * @function
236
248
  * @param {Node<vec4>} node - The node that represents the input of the effect.
237
- * @param {number} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
249
+ * @param {(Node<float>|number)} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
238
250
  * @returns {AfterImageNode}
239
251
  */
240
- export const afterImage = ( node, damp ) => nodeObject( new AfterImageNode( convertToTexture( node ), damp ) );
252
+ export const afterImage = ( node, damp ) => new AfterImageNode( convertToTexture( node ), nodeObject( damp ) );
241
253
 
242
254
  export default AfterImageNode;
@@ -1,12 +1,284 @@
1
- import { Matrix3, NodeMaterial } from 'three/webgpu';
2
- import { clamp, nodeObject, Fn, vec4, uv, uniform, max } from 'three/tsl';
1
+ import { Matrix3, NodeMaterial, Vector3 } from 'three/webgpu';
2
+ import { clamp, Fn, vec4, uv, uniform, max } from 'three/tsl';
3
3
  import StereoCompositePassNode from './StereoCompositePassNode.js';
4
+ import { frameCorners } from '../../utils/CameraUtils.js';
5
+
6
+ const _eyeL = /*@__PURE__*/ new Vector3();
7
+ const _eyeR = /*@__PURE__*/ new Vector3();
8
+ const _screenBottomLeft = /*@__PURE__*/ new Vector3();
9
+ const _screenBottomRight = /*@__PURE__*/ new Vector3();
10
+ const _screenTopLeft = /*@__PURE__*/ new Vector3();
11
+ const _right = /*@__PURE__*/ new Vector3();
12
+ const _up = /*@__PURE__*/ new Vector3();
13
+ const _forward = /*@__PURE__*/ new Vector3();
14
+ const _screenCenter = /*@__PURE__*/ new Vector3();
15
+
16
+ /**
17
+ * Anaglyph algorithm types.
18
+ * @readonly
19
+ * @enum {string}
20
+ */
21
+ const AnaglyphAlgorithm = {
22
+ TRUE: 'true',
23
+ GREY: 'grey',
24
+ COLOUR: 'colour',
25
+ HALF_COLOUR: 'halfColour',
26
+ DUBOIS: 'dubois',
27
+ OPTIMISED: 'optimised',
28
+ COMPROMISE: 'compromise'
29
+ };
30
+
31
+ /**
32
+ * Anaglyph color modes.
33
+ * @readonly
34
+ * @enum {string}
35
+ */
36
+ const AnaglyphColorMode = {
37
+ RED_CYAN: 'redCyan',
38
+ MAGENTA_CYAN: 'magentaCyan',
39
+ MAGENTA_GREEN: 'magentaGreen'
40
+ };
41
+
42
+ /**
43
+ * Standard luminance coefficients (ITU-R BT.601).
44
+ * @private
45
+ */
46
+ const LUMINANCE = { R: 0.299, G: 0.587, B: 0.114 };
47
+
48
+ /**
49
+ * Creates an anaglyph matrix pair from left and right channel specifications.
50
+ * This provides a more intuitive way to define how source RGB channels map to output RGB channels.
51
+ *
52
+ * Each specification object has keys 'r', 'g', 'b' for output channels.
53
+ * Each output channel value is [rCoef, gCoef, bCoef] defining how much of each input channel contributes.
54
+ *
55
+ * @private
56
+ * @param {Object} leftSpec - Specification for left eye contribution
57
+ * @param {Object} rightSpec - Specification for right eye contribution
58
+ * @returns {{left: number[], right: number[]}} Column-major arrays for Matrix3
59
+ */
60
+ function createMatrixPair( leftSpec, rightSpec ) {
61
+
62
+ // Convert row-major specification to column-major array for Matrix3
63
+ // Matrix3.fromArray expects [col0row0, col0row1, col0row2, col1row0, col1row1, col1row2, col2row0, col2row1, col2row2]
64
+ // Which represents:
65
+ // | col0row0 col1row0 col2row0 | | m[0] m[3] m[6] |
66
+ // | col0row1 col1row1 col2row1 | = | m[1] m[4] m[7] |
67
+ // | col0row2 col1row2 col2row2 | | m[2] m[5] m[8] |
68
+
69
+ function specToColumnMajor( spec ) {
70
+
71
+ const r = spec.r || [ 0, 0, 0 ]; // Output red channel coefficients [fromR, fromG, fromB]
72
+ const g = spec.g || [ 0, 0, 0 ]; // Output green channel coefficients
73
+ const b = spec.b || [ 0, 0, 0 ]; // Output blue channel coefficients
74
+
75
+ // Row-major matrix would be:
76
+ // | r[0] r[1] r[2] | (how input RGB maps to output R)
77
+ // | g[0] g[1] g[2] | (how input RGB maps to output G)
78
+ // | b[0] b[1] b[2] | (how input RGB maps to output B)
79
+
80
+ // Column-major for Matrix3:
81
+ return [
82
+ r[ 0 ], g[ 0 ], b[ 0 ], // Column 0: coefficients for input R
83
+ r[ 1 ], g[ 1 ], b[ 1 ], // Column 1: coefficients for input G
84
+ r[ 2 ], g[ 2 ], b[ 2 ] // Column 2: coefficients for input B
85
+ ];
86
+
87
+ }
88
+
89
+ return {
90
+ left: specToColumnMajor( leftSpec ),
91
+ right: specToColumnMajor( rightSpec )
92
+ };
93
+
94
+ }
4
95
 
5
96
  /**
6
- * A render pass node that creates an anaglyph effect.
97
+ * Shorthand for luminance coefficients.
98
+ * @private
99
+ */
100
+ const LUM = [ LUMINANCE.R, LUMINANCE.G, LUMINANCE.B ];
101
+
102
+ /**
103
+ * Conversion matrices for different anaglyph algorithms.
104
+ * Based on research from "Introducing a New Anaglyph Method: Compromise Anaglyph" by Jure Ahtik
105
+ * and various other sources.
106
+ *
107
+ * Matrices are defined using createMatrixPair for clarity:
108
+ * - Each spec object defines how input RGB maps to output RGB
109
+ * - Keys 'r', 'g', 'b' represent output channels
110
+ * - Values are [rCoef, gCoef, bCoef] for input channel contribution
111
+ *
112
+ * @private
113
+ */
114
+ const ANAGLYPH_MATRICES = {
115
+
116
+ // True Anaglyph - Red channel from left, luminance to cyan channel for right
117
+ // Paper: Left=[R,0,0], Right=[0,0,Lum]
118
+ [ AnaglyphAlgorithm.TRUE ]: {
119
+ [ AnaglyphColorMode.RED_CYAN ]: createMatrixPair(
120
+ { r: [ 1, 0, 0 ] }, // Left: R -> outR
121
+ { g: LUM, b: LUM } // Right: Lum -> outG, Lum -> outB
122
+ ),
123
+ [ AnaglyphColorMode.MAGENTA_CYAN ]: createMatrixPair(
124
+ { r: [ 1, 0, 0 ], b: [ 0, 0, 0.5 ] }, // Left: R -> outR, partial B -> outB
125
+ { g: LUM, b: [ 0, 0, 0.5 ] } // Right: Lum -> outG, partial B
126
+ ),
127
+ [ AnaglyphColorMode.MAGENTA_GREEN ]: createMatrixPair(
128
+ { r: [ 1, 0, 0 ], b: LUM }, // Left: R -> outR, Lum -> outB
129
+ { g: LUM } // Right: Lum -> outG
130
+ )
131
+ },
132
+
133
+ // Grey Anaglyph - Luminance-based, no color, minimal ghosting
134
+ // Paper: Left=[Lum,0,0], Right=[0,0,Lum]
135
+ [ AnaglyphAlgorithm.GREY ]: {
136
+ [ AnaglyphColorMode.RED_CYAN ]: createMatrixPair(
137
+ { r: LUM }, // Left: Lum -> outR
138
+ { g: LUM, b: LUM } // Right: Lum -> outG, Lum -> outB
139
+ ),
140
+ [ AnaglyphColorMode.MAGENTA_CYAN ]: createMatrixPair(
141
+ { r: LUM, b: [ 0.15, 0.29, 0.06 ] }, // Left: Lum -> outR, half-Lum -> outB
142
+ { g: LUM, b: [ 0.15, 0.29, 0.06 ] } // Right: Lum -> outG, half-Lum -> outB
143
+ ),
144
+ [ AnaglyphColorMode.MAGENTA_GREEN ]: createMatrixPair(
145
+ { r: LUM, b: LUM }, // Left: Lum -> outR, Lum -> outB
146
+ { g: LUM } // Right: Lum -> outG
147
+ )
148
+ },
149
+
150
+ // Colour Anaglyph - Full color, high retinal rivalry
151
+ // Paper: Left=[R,0,0], Right=[0,G,B]
152
+ [ AnaglyphAlgorithm.COLOUR ]: {
153
+ [ AnaglyphColorMode.RED_CYAN ]: createMatrixPair(
154
+ { r: [ 1, 0, 0 ] }, // Left: R -> outR
155
+ { g: [ 0, 1, 0 ], b: [ 0, 0, 1 ] } // Right: G -> outG, B -> outB
156
+ ),
157
+ [ AnaglyphColorMode.MAGENTA_CYAN ]: createMatrixPair(
158
+ { r: [ 1, 0, 0 ], b: [ 0, 0, 0.5 ] }, // Left: R -> outR, partial B -> outB
159
+ { g: [ 0, 1, 0 ], b: [ 0, 0, 0.5 ] } // Right: G -> outG, partial B -> outB
160
+ ),
161
+ [ AnaglyphColorMode.MAGENTA_GREEN ]: createMatrixPair(
162
+ { r: [ 1, 0, 0 ], b: [ 0, 0, 1 ] }, // Left: R -> outR, B -> outB
163
+ { g: [ 0, 1, 0 ] } // Right: G -> outG
164
+ )
165
+ },
166
+
167
+ // Half-Colour Anaglyph - Luminance for left red, full color for right cyan
168
+ // Paper: Left=[Lum,0,0], Right=[0,G,B]
169
+ [ AnaglyphAlgorithm.HALF_COLOUR ]: {
170
+ [ AnaglyphColorMode.RED_CYAN ]: createMatrixPair(
171
+ { r: LUM }, // Left: Lum -> outR
172
+ { g: [ 0, 1, 0 ], b: [ 0, 0, 1 ] } // Right: G -> outG, B -> outB
173
+ ),
174
+ [ AnaglyphColorMode.MAGENTA_CYAN ]: createMatrixPair(
175
+ { r: LUM, b: [ 0.15, 0.29, 0.06 ] }, // Left: Lum -> outR, half-Lum -> outB
176
+ { g: [ 0, 1, 0 ], b: [ 0.15, 0.29, 0.06 ] } // Right: G -> outG, half-Lum -> outB
177
+ ),
178
+ [ AnaglyphColorMode.MAGENTA_GREEN ]: createMatrixPair(
179
+ { r: LUM, b: LUM }, // Left: Lum -> outR, Lum -> outB
180
+ { g: [ 0, 1, 0 ] } // Right: G -> outG
181
+ )
182
+ },
183
+
184
+ // Dubois Anaglyph - Least-squares optimized for specific glasses
185
+ // From https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.7.6968&rep=rep1&type=pdf
186
+ [ AnaglyphAlgorithm.DUBOIS ]: {
187
+ [ AnaglyphColorMode.RED_CYAN ]: createMatrixPair(
188
+ {
189
+ r: [ 0.4561, 0.500484, 0.176381 ],
190
+ g: [ - 0.0400822, - 0.0378246, - 0.0157589 ],
191
+ b: [ - 0.0152161, - 0.0205971, - 0.00546856 ]
192
+ },
193
+ {
194
+ r: [ - 0.0434706, - 0.0879388, - 0.00155529 ],
195
+ g: [ 0.378476, 0.73364, - 0.0184503 ],
196
+ b: [ - 0.0721527, - 0.112961, 1.2264 ]
197
+ }
198
+ ),
199
+ [ AnaglyphColorMode.MAGENTA_CYAN ]: createMatrixPair(
200
+ {
201
+ r: [ 0.4561, 0.500484, 0.176381 ],
202
+ g: [ - 0.0400822, - 0.0378246, - 0.0157589 ],
203
+ b: [ 0.088, 0.088, - 0.003 ]
204
+ },
205
+ {
206
+ r: [ - 0.0434706, - 0.0879388, - 0.00155529 ],
207
+ g: [ 0.378476, 0.73364, - 0.0184503 ],
208
+ b: [ 0.088, 0.088, 0.613 ]
209
+ }
210
+ ),
211
+ [ AnaglyphColorMode.MAGENTA_GREEN ]: createMatrixPair(
212
+ {
213
+ r: [ 0.4561, 0.500484, 0.176381 ],
214
+ b: [ - 0.0434706, - 0.0879388, - 0.00155529 ]
215
+ },
216
+ {
217
+ g: [ 0.378476 + 0.4561, 0.73364 + 0.500484, - 0.0184503 + 0.176381 ]
218
+ }
219
+ )
220
+ },
221
+
222
+ // Optimised Anaglyph - Improved color with reduced retinal rivalry
223
+ // Paper: Left=[0,0.7G+0.3B,0,0], Right=[0,G,B]
224
+ [ AnaglyphAlgorithm.OPTIMISED ]: {
225
+ [ AnaglyphColorMode.RED_CYAN ]: createMatrixPair(
226
+ { r: [ 0, 0.7, 0.3 ] }, // Left: 0.7G+0.3B -> outR
227
+ { g: [ 0, 1, 0 ], b: [ 0, 0, 1 ] } // Right: G -> outG, B -> outB
228
+ ),
229
+ [ AnaglyphColorMode.MAGENTA_CYAN ]: createMatrixPair(
230
+ { r: [ 0, 0.7, 0.3 ], b: [ 0, 0, 0.5 ] }, // Left: 0.7G+0.3B -> outR, partial B
231
+ { g: [ 0, 1, 0 ], b: [ 0, 0, 0.5 ] } // Right: G -> outG, partial B
232
+ ),
233
+ [ AnaglyphColorMode.MAGENTA_GREEN ]: createMatrixPair(
234
+ { r: [ 0, 0.7, 0.3 ], b: [ 0, 0, 1 ] }, // Left: 0.7G+0.3B -> outR, B -> outB
235
+ { g: [ 0, 1, 0 ] } // Right: G -> outG
236
+ )
237
+ },
238
+
239
+ // Compromise Anaglyph - Best balance of color and stereo effect
240
+ // From Ahtik, J., "Techniques of Rendering Anaglyphs for Use in Art"
241
+ // Paper matrix [8]: Left=[0.439R+0.447G+0.148B, 0, 0], Right=[0, 0.095R+0.934G+0.005B, 0.018R+0.028G+1.057B]
242
+ [ AnaglyphAlgorithm.COMPROMISE ]: {
243
+ [ AnaglyphColorMode.RED_CYAN ]: createMatrixPair(
244
+ { r: [ 0.439, 0.447, 0.148 ] }, // Left: weighted RGB -> outR
245
+ {
246
+ g: [ 0.095, 0.934, 0.005 ], // Right: weighted RGB -> outG
247
+ b: [ 0.018, 0.028, 1.057 ] // Right: weighted RGB -> outB
248
+ }
249
+ ),
250
+ [ AnaglyphColorMode.MAGENTA_CYAN ]: createMatrixPair(
251
+ {
252
+ r: [ 0.439, 0.447, 0.148 ],
253
+ b: [ 0.009, 0.014, 0.074 ] // Partial blue from left
254
+ },
255
+ {
256
+ g: [ 0.095, 0.934, 0.005 ],
257
+ b: [ 0.009, 0.014, 0.528 ] // Partial blue from right
258
+ }
259
+ ),
260
+ [ AnaglyphColorMode.MAGENTA_GREEN ]: createMatrixPair(
261
+ {
262
+ r: [ 0.439, 0.447, 0.148 ],
263
+ b: [ 0.018, 0.028, 1.057 ]
264
+ },
265
+ {
266
+ g: [ 0.095 + 0.439, 0.934 + 0.447, 0.005 + 0.148 ]
267
+ }
268
+ )
269
+ }
270
+ };
271
+
272
+ /**
273
+ * A render pass node that creates an anaglyph effect using physically-correct
274
+ * off-axis stereo projection.
275
+ *
276
+ * This implementation uses CameraUtils.frameCorners() to align stereo
277
+ * camera frustums to a virtual screen plane, providing accurate depth
278
+ * perception with zero parallax at the plane distance.
7
279
  *
8
280
  * @augments StereoCompositePassNode
9
- * @three_import import { anaglyphPass } from 'three/addons/tsl/display/AnaglyphPassNode.js';
281
+ * @three_import import { anaglyphPass, AnaglyphAlgorithm, AnaglyphColorMode } from 'three/addons/tsl/display/AnaglyphPassNode.js';
10
282
  */
11
283
  class AnaglyphPassNode extends StereoCompositePassNode {
12
284
 
@@ -35,29 +307,197 @@ class AnaglyphPassNode extends StereoCompositePassNode {
35
307
  */
36
308
  this.isAnaglyphPassNode = true;
37
309
 
38
- // Dubois matrices from https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.7.6968&rep=rep1&type=pdf#page=4
310
+ /**
311
+ * The interpupillary distance (eye separation) in world units.
312
+ * Typical human IPD is 0.064 meters (64mm).
313
+ *
314
+ * @type {number}
315
+ * @default 0.064
316
+ */
317
+ this.eyeSep = 0.064;
318
+
319
+ /**
320
+ * The distance in world units from the viewer to the virtual
321
+ * screen plane where zero parallax (screen depth) occurs.
322
+ * Objects at this distance appear at the screen surface.
323
+ * Objects closer appear in front of the screen (negative parallax).
324
+ * Objects further appear behind the screen (positive parallax).
325
+ *
326
+ * The screen dimensions are derived from the camera's FOV and aspect ratio
327
+ * at this distance, ensuring the stereo view matches the camera's field of view.
328
+ *
329
+ * @type {number}
330
+ * @default 0.5
331
+ */
332
+ this.planeDistance = 0.5;
333
+
334
+ /**
335
+ * The current anaglyph algorithm.
336
+ *
337
+ * @private
338
+ * @type {string}
339
+ * @default 'dubois'
340
+ */
341
+ this._algorithm = AnaglyphAlgorithm.DUBOIS;
342
+
343
+ /**
344
+ * The current color mode.
345
+ *
346
+ * @private
347
+ * @type {string}
348
+ * @default 'redCyan'
349
+ */
350
+ this._colorMode = AnaglyphColorMode.RED_CYAN;
39
351
 
40
352
  /**
41
353
  * Color matrix node for the left eye.
42
354
  *
355
+ * @private
43
356
  * @type {UniformNode<mat3>}
44
357
  */
45
- this._colorMatrixLeft = uniform( new Matrix3().fromArray( [
46
- 0.456100, - 0.0400822, - 0.0152161,
47
- 0.500484, - 0.0378246, - 0.0205971,
48
- 0.176381, - 0.0157589, - 0.00546856
49
- ] ) );
358
+ this._colorMatrixLeft = uniform( new Matrix3() );
50
359
 
51
360
  /**
52
361
  * Color matrix node for the right eye.
53
362
  *
363
+ * @private
54
364
  * @type {UniformNode<mat3>}
55
365
  */
56
- this._colorMatrixRight = uniform( new Matrix3().fromArray( [
57
- - 0.0434706, 0.378476, - 0.0721527,
58
- - 0.0879388, 0.73364, - 0.112961,
59
- - 0.00155529, - 0.0184503, 1.2264
60
- ] ) );
366
+ this._colorMatrixRight = uniform( new Matrix3() );
367
+
368
+ // Initialize with default matrices
369
+ this._updateMatrices();
370
+
371
+ }
372
+
373
+ /**
374
+ * Gets the current anaglyph algorithm.
375
+ *
376
+ * @type {string}
377
+ */
378
+ get algorithm() {
379
+
380
+ return this._algorithm;
381
+
382
+ }
383
+
384
+ /**
385
+ * Sets the anaglyph algorithm.
386
+ *
387
+ * @type {string}
388
+ */
389
+ set algorithm( value ) {
390
+
391
+ if ( this._algorithm !== value ) {
392
+
393
+ this._algorithm = value;
394
+ this._updateMatrices();
395
+
396
+ }
397
+
398
+ }
399
+
400
+ /**
401
+ * Gets the current color mode.
402
+ *
403
+ * @type {string}
404
+ */
405
+ get colorMode() {
406
+
407
+ return this._colorMode;
408
+
409
+ }
410
+
411
+ /**
412
+ * Sets the color mode.
413
+ *
414
+ * @type {string}
415
+ */
416
+ set colorMode( value ) {
417
+
418
+ if ( this._colorMode !== value ) {
419
+
420
+ this._colorMode = value;
421
+ this._updateMatrices();
422
+
423
+ }
424
+
425
+ }
426
+
427
+ /**
428
+ * Updates the color matrices based on current algorithm and color mode.
429
+ *
430
+ * @private
431
+ */
432
+ _updateMatrices() {
433
+
434
+ const matrices = ANAGLYPH_MATRICES[ this._algorithm ][ this._colorMode ];
435
+
436
+ this._colorMatrixLeft.value.fromArray( matrices.left );
437
+ this._colorMatrixRight.value.fromArray( matrices.right );
438
+
439
+ }
440
+
441
+ /**
442
+ * Updates the internal stereo camera using frameCorners for
443
+ * physically-correct off-axis projection.
444
+ *
445
+ * @param {number} coordinateSystem - The current coordinate system.
446
+ */
447
+ updateStereoCamera( coordinateSystem ) {
448
+
449
+ const { stereo, camera } = this;
450
+
451
+ stereo.cameraL.coordinateSystem = coordinateSystem;
452
+ stereo.cameraR.coordinateSystem = coordinateSystem;
453
+
454
+ // Get the camera's local coordinate axes from its world matrix
455
+ camera.matrixWorld.extractBasis( _right, _up, _forward );
456
+ _right.normalize();
457
+ _up.normalize();
458
+ _forward.normalize();
459
+
460
+ // Calculate eye positions
461
+ const halfSep = this.eyeSep / 2;
462
+ _eyeL.copy( camera.position ).addScaledVector( _right, - halfSep );
463
+ _eyeR.copy( camera.position ).addScaledVector( _right, halfSep );
464
+
465
+ // Calculate screen center (at planeDistance in front of the camera center)
466
+ _screenCenter.copy( camera.position ).addScaledVector( _forward, - this.planeDistance );
467
+
468
+ // Calculate screen dimensions from camera FOV and aspect ratio
469
+ const DEG2RAD = Math.PI / 180;
470
+ const halfHeight = this.planeDistance * Math.tan( DEG2RAD * camera.fov / 2 );
471
+ const halfWidth = halfHeight * camera.aspect;
472
+
473
+ // Calculate screen corners
474
+ _screenBottomLeft.copy( _screenCenter )
475
+ .addScaledVector( _right, - halfWidth )
476
+ .addScaledVector( _up, - halfHeight );
477
+
478
+ _screenBottomRight.copy( _screenCenter )
479
+ .addScaledVector( _right, halfWidth )
480
+ .addScaledVector( _up, - halfHeight );
481
+
482
+ _screenTopLeft.copy( _screenCenter )
483
+ .addScaledVector( _right, - halfWidth )
484
+ .addScaledVector( _up, halfHeight );
485
+
486
+ // Set up left eye camera
487
+ stereo.cameraL.position.copy( _eyeL );
488
+ stereo.cameraL.near = camera.near;
489
+ stereo.cameraL.far = camera.far;
490
+ frameCorners( stereo.cameraL, _screenBottomLeft, _screenBottomRight, _screenTopLeft, true );
491
+ stereo.cameraL.matrixWorld.compose( stereo.cameraL.position, stereo.cameraL.quaternion, stereo.cameraL.scale );
492
+ stereo.cameraL.matrixWorldInverse.copy( stereo.cameraL.matrixWorld ).invert();
493
+
494
+ // Set up right eye camera
495
+ stereo.cameraR.position.copy( _eyeR );
496
+ stereo.cameraR.near = camera.near;
497
+ stereo.cameraR.far = camera.far;
498
+ frameCorners( stereo.cameraR, _screenBottomLeft, _screenBottomRight, _screenTopLeft, true );
499
+ stereo.cameraR.matrixWorld.compose( stereo.cameraR.position, stereo.cameraR.quaternion, stereo.cameraR.scale );
500
+ stereo.cameraR.matrixWorldInverse.copy( stereo.cameraR.matrixWorld ).invert();
61
501
 
62
502
  }
63
503
 
@@ -95,6 +535,8 @@ class AnaglyphPassNode extends StereoCompositePassNode {
95
535
 
96
536
  export default AnaglyphPassNode;
97
537
 
538
+ export { AnaglyphAlgorithm, AnaglyphColorMode };
539
+
98
540
  /**
99
541
  * TSL function for creating an anaglyph pass node.
100
542
  *
@@ -104,4 +546,4 @@ export default AnaglyphPassNode;
104
546
  * @param {Camera} camera - The camera to render the scene with.
105
547
  * @returns {AnaglyphPassNode}
106
548
  */
107
- export const anaglyphPass = ( scene, camera ) => nodeObject( new AnaglyphPassNode( scene, camera ) );
549
+ export const anaglyphPass = ( scene, camera ) => new AnaglyphPassNode( scene, camera );