@plastic-software/three 0.174.0 → 0.175.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 (544) hide show
  1. package/build/three.cjs +10655 -1446
  2. package/build/three.core.js +9626 -1094
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +834 -157
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1429 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +53 -0
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/UniformsLib.js +1 -4
  512. package/src/renderers/shaders/UniformsUtils.js +1 -3
  513. package/src/renderers/webgl/WebGLBackground.js +4 -2
  514. package/src/renderers/webgl/WebGLState.js +9 -9
  515. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  516. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  517. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  518. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  519. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  520. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  521. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  522. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  523. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  524. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  525. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  526. package/src/renderers/webxr/WebXRController.js +87 -2
  527. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  528. package/src/renderers/webxr/WebXRManager.js +173 -1
  529. package/src/scenes/Scene.js +2 -1
  530. package/src/textures/CanvasTexture.js +28 -0
  531. package/src/textures/CompressedArrayTexture.js +57 -0
  532. package/src/textures/CompressedCubeTexture.js +29 -0
  533. package/src/textures/CompressedTexture.js +64 -6
  534. package/src/textures/CubeTexture.js +52 -4
  535. package/src/textures/Data3DTexture.js +77 -0
  536. package/src/textures/DataArrayTexture.js +93 -0
  537. package/src/textures/DataTexture.js +65 -0
  538. package/src/textures/DepthTexture.js +59 -9
  539. package/src/textures/FramebufferTexture.js +62 -0
  540. package/src/textures/Source.js +69 -0
  541. package/src/textures/Texture.js +5 -5
  542. package/src/textures/VideoFrameTexture.js +43 -6
  543. package/src/textures/VideoTexture.js +49 -4
  544. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -6,36 +6,18 @@ import {
6
6
  Vector3,
7
7
  } from 'three';
8
8
 
9
+ /** @module GTAOShader */
10
+
9
11
  /**
10
- * References:
11
- * - implemented algorithm - GTAO
12
- * - https://iryoku.com/downloads/Practical-Realtime-Strategies-for-Accurate-Indirect-Occlusion.pdf
13
- * - https://github.com/Patapom/GodComplex/blob/master/Tests/TestHBIL/2018%20Mayaux%20-%20Horizon-Based%20Indirect%20Lighting%20(HBIL).pdf
12
+ * GTAO shader. Use by {@link GTAOPass}.
14
13
  *
15
- * - other AO algorithms that are not implemented here:
16
- * - Screen Space Ambient Occlusion (SSAO), see also SSAOShader.js
17
- * - http://john-chapman-graphics.blogspot.com/2013/01/ssao-tutorial.html
18
- * - https://learnopengl.com/Advanced-Lighting/SSAO
19
- * - https://creativecoding.soe.ucsc.edu/courses/cmpm164/_schedule/AmbientOcclusion.pdf
20
- * - https://drive.google.com/file/d/1SyagcEVplIm2KkRD3WQYSO9O0Iyi1hfy/edit
21
- * - Scalable Ambient Occlusion (SAO), see also SAOShader.js
22
- * - https://casual-effects.com/research/McGuire2012SAO/index.html
23
- * - https://research.nvidia.com/sites/default/files/pubs/2012-06_Scalable-Ambient-Obscurance/McGuire12SAO.pdf
24
- * - N8HO
25
- * - https://github.com/N8python/n8ao
26
- * - Horizon Based Ambient Occlusion (HBAO)
27
- * - http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.577.2286&rep=rep1&type=pdf
28
- * - https://www.derschmale.com/2013/12/20/an-alternative-implementation-for-hbao-2/
14
+ * References:
15
+ * - [Practical Realtime Strategies for Accurate Indirect Occlusion]{@link https://iryoku.com/downloads/Practical-Realtime-Strategies-for-Accurate-Indirect-Occlusion.pdf}.
16
+ * - [Horizon-Based Indirect Lighting (HBIL)]{@link https://github.com/Patapom/GodComplex/blob/master/Tests/TestHBIL/2018%20Mayaux%20-%20Horizon-Based%20Indirect%20Lighting%20(HBIL).pdf}
29
17
  *
30
- * - further reading
31
- * - https://ceur-ws.org/Vol-3027/paper5.pdf
32
- * - https://www.comp.nus.edu.sg/~lowkl/publications/mssao_visual_computer_2012.pdf
33
- * - https://web.ics.purdue.edu/~tmcgraw/papers/mcgraw-ao-2008.pdf
34
- * - https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf
35
- * - https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.390.2463&rep=rep1&type=pdf
36
- * - https://www.intel.com/content/www/us/en/developer/articles/technical/adaptive-screen-space-ambient-occlusion.html
18
+ * @constant
19
+ * @type {ShaderMaterial~Shader}
37
20
  */
38
-
39
21
  const GTAOShader = {
40
22
 
41
23
  name: 'GTAOShader',
@@ -87,7 +69,7 @@ const GTAOShader = {
87
69
  uniform float cameraNear;
88
70
  uniform float cameraFar;
89
71
  uniform mat4 cameraProjectionMatrix;
90
- uniform mat4 cameraProjectionMatrixInverse;
72
+ uniform mat4 cameraProjectionMatrixInverse;
91
73
  uniform mat4 cameraWorldMatrix;
92
74
  uniform float radius;
93
75
  uniform float distanceExponent;
@@ -98,7 +80,7 @@ const GTAOShader = {
98
80
  uniform vec3 sceneBoxMin;
99
81
  uniform vec3 sceneBoxMax;
100
82
  #endif
101
-
83
+
102
84
  #include <common>
103
85
  #include <packing>
104
86
 
@@ -112,11 +94,11 @@ const GTAOShader = {
112
94
  return viewSpacePosition.xyz / viewSpacePosition.w;
113
95
  }
114
96
 
115
- float getDepth(const vec2 uv) {
97
+ float getDepth(const vec2 uv) {
116
98
  return textureLod(tDepth, uv.xy, 0.0).DEPTH_SWIZZLING;
117
99
  }
118
100
 
119
- float fetchDepth(const ivec2 uv) {
101
+ float fetchDepth(const ivec2 uv) {
120
102
  return texelFetch(tDepth, uv.xy, 0).DEPTH_SWIZZLING;
121
103
  }
122
104
 
@@ -166,7 +148,7 @@ const GTAOShader = {
166
148
  float sampleSceneDepth = getDepth(sampleUv);
167
149
  return vec3(sampleUv, sampleSceneDepth);
168
150
  }
169
-
151
+
170
152
  void main() {
171
153
  float depth = getDepth(vUv.xy);
172
154
  if (depth >= 1.0) {
@@ -192,7 +174,7 @@ const GTAOShader = {
192
174
  return;
193
175
  }
194
176
  #endif
195
-
177
+
196
178
  vec2 noiseResolution = vec2(textureSize(tNoise, 0));
197
179
  vec2 noiseUv = vUv * resolution / noiseResolution;
198
180
  vec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);
@@ -205,21 +187,21 @@ const GTAOShader = {
205
187
  const int STEPS = (SAMPLES + DIRECTIONS - 1) / DIRECTIONS;
206
188
  float ao = 0.0;
207
189
  for (int i = 0; i < DIRECTIONS; ++i) {
208
-
190
+
209
191
  float angle = float(i) / float(DIRECTIONS) * PI;
210
- vec4 sampleDir = vec4(cos(angle), sin(angle), 0., 0.5 + 0.5 * noiseTexel.w);
192
+ vec4 sampleDir = vec4(cos(angle), sin(angle), 0., 0.5 + 0.5 * noiseTexel.w);
211
193
  sampleDir.xyz = normalize(kernelMatrix * sampleDir.xyz);
212
194
 
213
195
  vec3 viewDir = normalize(-viewPos.xyz);
214
196
  vec3 sliceBitangent = normalize(cross(sampleDir.xyz, viewDir));
215
197
  vec3 sliceTangent = cross(sliceBitangent, viewDir);
216
198
  vec3 normalInSlice = normalize(viewNormal - sliceBitangent * dot(viewNormal, sliceBitangent));
217
-
199
+
218
200
  vec3 tangentToNormalInSlice = cross(normalInSlice, sliceBitangent);
219
201
  vec2 cosHorizons = vec2(dot(viewDir, tangentToNormalInSlice), dot(viewDir, -tangentToNormalInSlice));
220
-
202
+
221
203
  for (int j = 0; j < STEPS; ++j) {
222
- vec3 sampleViewOffset = sampleDir.xyz * radiusToUse * sampleDir.w * pow(float(j + 1) / float(STEPS), distanceExponent);
204
+ vec3 sampleViewOffset = sampleDir.xyz * radiusToUse * sampleDir.w * pow(float(j + 1) / float(STEPS), distanceExponent);
223
205
 
224
206
  vec3 sampleSceneUvDepth = getSceneUvAndDepth(viewPos + sampleViewOffset);
225
207
  vec3 sampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);
@@ -227,7 +209,7 @@ const GTAOShader = {
227
209
  if (abs(viewDelta.z) < thickness) {
228
210
  float sampleCosHorizon = dot(viewDir, normalize(viewDelta));
229
211
  cosHorizons.x += max(0., (sampleCosHorizon - cosHorizons.x) * mix(1., 2. / float(j + 2), distanceFallOff));
230
- }
212
+ }
231
213
 
232
214
  sampleSceneUvDepth = getSceneUvAndDepth(viewPos - sampleViewOffset);
233
215
  sampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);
@@ -247,7 +229,7 @@ const GTAOShader = {
247
229
  ao += occlusion;
248
230
  }
249
231
 
250
- ao = clamp(ao / float(DIRECTIONS), 0., 1.);
232
+ ao = clamp(ao / float(DIRECTIONS), 0., 1.);
251
233
  #if SCENE_CLIP_BOX == 1
252
234
  ao = mix(ao, 1., smoothstep(0., radiusToUse, boxDistance));
253
235
  #endif
@@ -258,6 +240,12 @@ const GTAOShader = {
258
240
 
259
241
  };
260
242
 
243
+ /**
244
+ * GTAO depth shader. Use by {@link GTAOPass}.
245
+ *
246
+ * @constant
247
+ * @type {Object}
248
+ */
261
249
  const GTAODepthShader = {
262
250
 
263
251
  name: 'GTAODepthShader',
@@ -306,6 +294,12 @@ const GTAODepthShader = {
306
294
 
307
295
  };
308
296
 
297
+ /**
298
+ * GTAO blend shader. Use by {@link GTAOPass}.
299
+ *
300
+ * @constant
301
+ * @type {Object}
302
+ */
309
303
  const GTAOBlendShader = {
310
304
 
311
305
  name: 'GTAOBlendShader',
@@ -1,8 +1,14 @@
1
+ /** @module GammaCorrectionShader */
2
+
1
3
  /**
2
4
  * Gamma Correction Shader
3
- * http://en.wikipedia.org/wiki/gamma_correction
5
+ *
6
+ * References:
7
+ * - {@link http://en.wikipedia.org/wiki/gamma_correction}.
8
+ *
9
+ * @constant
10
+ * @type {ShaderMaterial~Shader}
4
11
  */
5
-
6
12
  const GammaCorrectionShader = {
7
13
 
8
14
  name: 'GammaCorrectionShader',
@@ -3,6 +3,8 @@ import {
3
3
  Vector3
4
4
  } from 'three';
5
5
 
6
+ /** @module GodRaysShader */
7
+
6
8
  /**
7
9
  * God-rays (crepuscular rays)
8
10
  *
@@ -17,10 +19,11 @@ import {
17
19
  * 6*6*6 = 216 samples.
18
20
  *
19
21
  * References:
22
+ * - [Sousa2008, Crysis Next Gen Effects, GDC2008]{@link http://www.crytek.com/sites/default/files/GDC08_SousaT_CrysisEffects.ppt}.
20
23
  *
21
- * Sousa2008 - Crysis Next Gen Effects, GDC2008, http://www.crytek.com/sites/default/files/GDC08_SousaT_CrysisEffects.ppt
24
+ * @constant
25
+ * @type {ShaderMaterial~Shader}
22
26
  */
23
-
24
27
  const GodRaysDepthMaskShader = {
25
28
 
26
29
  name: 'GodRaysDepthMaskShader',
@@ -72,8 +75,10 @@ const GodRaysDepthMaskShader = {
72
75
  *
73
76
  * The results of the previous pass are re-blurred, each time with a
74
77
  * decreased distance between samples.
78
+ *
79
+ * @constant
80
+ * @type {ShaderMaterial~Shader}
75
81
  */
76
-
77
82
  const GodRaysGenerateShader = {
78
83
 
79
84
  name: 'GodRaysGenerateShader',
@@ -194,8 +199,10 @@ const GodRaysGenerateShader = {
194
199
  /**
195
200
  * Additively applies god rays from texture tGodRays to a background (tColors).
196
201
  * fGodRayIntensity attenuates the god rays.
202
+ *
203
+ * @constant
204
+ * @type {ShaderMaterial~Shader}
197
205
  */
198
-
199
206
  const GodRaysCombineShader = {
200
207
 
201
208
  name: 'GodRaysCombineShader',
@@ -253,8 +260,10 @@ const GodRaysCombineShader = {
253
260
  /**
254
261
  * A dodgy sun/sky shader. Makes a bright spot at the sun location. Would be
255
262
  * cheaper/faster/simpler to implement this as a simple sun sprite.
263
+ *
264
+ * @constant
265
+ * @type {Object}
256
266
  */
257
-
258
267
  const GodRaysFakeSunShader = {
259
268
 
260
269
  name: 'GodRaysFakeSunShader',
@@ -1,10 +1,16 @@
1
+ /** @module HalftoneShader */
2
+
1
3
  /**
2
- * RGB Halftone shader for three.js.
3
- * NOTE:
4
- * Shape (1 = Dot, 2 = Ellipse, 3 = Line, 4 = Square)
5
- * Blending Mode (1 = Linear, 2 = Multiply, 3 = Add, 4 = Lighter, 5 = Darker)
4
+ * RGB Halftone shader.
5
+ *
6
+ * Used by {@link HalftonePass}.
7
+ *
8
+ * Shape (1 = Dot, 2 = Ellipse, 3 = Line, 4 = Square)
9
+ * Blending Mode (1 = Linear, 2 = Multiply, 3 = Add, 4 = Lighter, 5 = Darker)
10
+ *
11
+ * @constant
12
+ * @type {ShaderMaterial~Shader}
6
13
  */
7
-
8
14
  const HalftoneShader = {
9
15
 
10
16
  name: 'HalftoneShader',
@@ -1,12 +1,18 @@
1
+ /** @module HorizontalBlurShader */
2
+
1
3
  /**
2
- * Two pass Gaussian blur filter (horizontal and vertical blur shaders)
3
- * - see http://www.cake23.de/traveling-wavefronts-lit-up.html
4
+ * Two pass Gaussian blur filter (horizontal and vertical blur shaders).
5
+ *
6
+ * References:
7
+ * - {@link http://www.cake23.de/traveling-wavefronts-lit-up.html}.
4
8
  *
5
9
  * - 9 samples per pass
6
10
  * - standard deviation 2.7
7
11
  * - "h" and "v" parameters should be set to "1 / width" and "1 / height"
12
+ *
13
+ * @constant
14
+ * @type {ShaderMaterial~Shader}
8
15
  */
9
-
10
16
  const HorizontalBlurShader = {
11
17
 
12
18
  name: 'HorizontalBlurShader',
@@ -1,12 +1,16 @@
1
+ /** @module HorizontalTiltShiftShader */
2
+
1
3
  /**
2
- * Simple fake tilt-shift effect, modulating two pass Gaussian blur (see above) by vertical position
4
+ * Simple fake tilt-shift effect, modulating two pass Gaussian blur (see above) by vertical position.
3
5
  *
4
6
  * - 9 samples per pass
5
7
  * - standard deviation 2.7
6
8
  * - "h" and "v" parameters should be set to "1 / width" and "1 / height"
7
9
  * - "r" parameter control where "focused" horizontal line lies
10
+ *
11
+ * @constant
12
+ * @type {ShaderMaterial~Shader}
8
13
  */
9
-
10
14
  const HorizontalTiltShiftShader = {
11
15
 
12
16
  name: 'HorizontalTiltShiftShader',
@@ -1,10 +1,14 @@
1
+ /** @module HueSaturationShader */
2
+
1
3
  /**
2
- * Hue and saturation adjustment
3
- * https://github.com/evanw/glfx.js
4
+ * Hue and saturation adjustment, {@link https://github.com/evanw/glfx.js}.
5
+ *
4
6
  * hue: -1 to 1 (-1 is 180 degrees in the negative direction, 0 is no change, etc.
5
7
  * saturation: -1 to 1 (-1 is solid gray, 0 is no change, and 1 is maximum contrast)
8
+ *
9
+ * @constant
10
+ * @type {ShaderMaterial~Shader}
6
11
  */
7
-
8
12
  const HueSaturationShader = {
9
13
 
10
14
  name: 'HueSaturationShader',
@@ -1,13 +1,17 @@
1
+ /** @module KaleidoShader */
2
+
1
3
  /**
2
- * Kaleidoscope Shader
4
+ * Kaleidoscope Shader.
3
5
  * Radial reflection around center point
4
- * Ported from: http://pixelshaders.com/editor/
5
- * by Toby Schachman / http://tobyschachman.com/
6
+ * Ported from: {@link http://pixelshaders.com/editor/}
7
+ * by [Toby Schachman]{@link http://tobyschachman.com/}
6
8
  *
7
9
  * sides: number of reflections
8
10
  * angle: initial angle in radians
11
+ *
12
+ * @constant
13
+ * @type {ShaderMaterial~Shader}
9
14
  */
10
-
11
15
  const KaleidoShader = {
12
16
 
13
17
  name: 'KaleidoShader',
@@ -2,17 +2,18 @@ import {
2
2
  Color
3
3
  } from 'three';
4
4
 
5
+ /** @module LuminosityHighPassShader */
6
+
5
7
  /**
6
- * Luminosity
7
- * http://en.wikipedia.org/wiki/Luminosity
8
+ * Luminosity high pass shader.
9
+ *
10
+ * @constant
11
+ * @type {ShaderMaterial~Shader}
8
12
  */
9
-
10
13
  const LuminosityHighPassShader = {
11
14
 
12
15
  name: 'LuminosityHighPassShader',
13
16
 
14
- shaderID: 'luminosityHighPass',
15
-
16
17
  uniforms: {
17
18
 
18
19
  'tDiffuse': { value: null },
@@ -1,8 +1,11 @@
1
+ /** @module LuminosityShader */
2
+
1
3
  /**
2
- * Luminosity
3
- * http://en.wikipedia.org/wiki/Luminosity
4
+ * Luminosity shader.
5
+ *
6
+ * @constant
7
+ * @type {ShaderMaterial~Shader}
4
8
  */
5
-
6
9
  const LuminosityShader = {
7
10
 
8
11
  name: 'LuminosityShader',
@@ -1,10 +1,13 @@
1
+ /** @module MirrorShader */
2
+
1
3
  /**
2
- * Mirror Shader
3
- * Copies half the input to the other half
4
+ * Copies half the input to the other half.
5
+ *
6
+ * side: side of input to mirror (0 = left, 1 = right, 2 = top, 3 = bottom).
4
7
  *
5
- * side: side of input to mirror (0 = left, 1 = right, 2 = top, 3 = bottom)
8
+ * @constant
9
+ * @type {ShaderMaterial~Shader}
6
10
  */
7
-
8
11
  const MirrorShader = {
9
12
 
10
13
  name: 'MirrorShader',
@@ -2,11 +2,13 @@ import {
2
2
  Vector2
3
3
  } from 'three';
4
4
 
5
+ /** @module NormalMapShader */
6
+
5
7
  /**
6
- * Normal map shader
7
- * - compute normals from heightmap
8
+ * Normal map shader, compute normals from heightmap.
9
+ * @constant
10
+ * @type {ShaderMaterial~Shader}
8
11
  */
9
-
10
12
  const NormalMapShader = {
11
13
 
12
14
  name: 'NormalMapShader',
@@ -1,3 +1,14 @@
1
+ /** @module OutputShader */
2
+
3
+ /**
4
+ * Performs tone mapping and color space conversion for
5
+ * FX workflows.
6
+ *
7
+ * Used by {@link OutputPass}.
8
+ *
9
+ * @constant
10
+ * @type {ShaderMaterial~Shader}
11
+ */
1
12
  const OutputShader = {
2
13
 
3
14
  name: 'OutputShader',
@@ -4,12 +4,18 @@ import {
4
4
  Vector3,
5
5
  } from 'three';
6
6
 
7
+ /** @module PoissonDenoiseShader */
8
+
7
9
  /**
10
+ * Poisson Denoise Shader.
11
+ *
8
12
  * References:
9
- * https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf
10
- * https://arxiv.org/pdf/2206.01856.pdf
13
+ * - [Self-Supervised Poisson-Gaussian Denoising]{@link https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf}.
14
+ * - [Poisson2Sparse: Self-Supervised Poisson Denoising From a Single Image]{@link https://arxiv.org/pdf/2206.01856.pdf}
15
+ *
16
+ * @constant
17
+ * @type {ShaderMaterial~Shader}
11
18
  */
12
-
13
19
  const PoissonDenoiseShader = {
14
20
 
15
21
  name: 'PoissonDenoiseShader',
@@ -59,7 +65,7 @@ const PoissonDenoiseShader = {
59
65
  uniform float normalPhi;
60
66
  uniform float radius;
61
67
  uniform int index;
62
-
68
+
63
69
  #include <common>
64
70
  #include <packing>
65
71
 
@@ -82,9 +88,9 @@ const PoissonDenoiseShader = {
82
88
  vec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;
83
89
  return viewSpacePosition.xyz / viewSpacePosition.w;
84
90
  }
85
-
91
+
86
92
  float getDepth(const vec2 uv) {
87
- #if DEPTH_VALUE_SOURCE == 1
93
+ #if DEPTH_VALUE_SOURCE == 1
88
94
  return textureLod(tDepth, uv.xy, 0.0).a;
89
95
  #else
90
96
  return textureLod(tDepth, uv.xy, 0.0).r;
@@ -92,7 +98,7 @@ const PoissonDenoiseShader = {
92
98
  }
93
99
 
94
100
  float fetchDepth(const ivec2 uv) {
95
- #if DEPTH_VALUE_SOURCE == 1
101
+ #if DEPTH_VALUE_SOURCE == 1
96
102
  return texelFetch(tDepth, uv.xy, 0).a;
97
103
  #else
98
104
  return texelFetch(tDepth, uv.xy, 0).r;
@@ -139,7 +145,7 @@ const PoissonDenoiseShader = {
139
145
  vec3 sampleNormal = getViewNormal(sampleUv);
140
146
  vec3 neighborColor = sampleTexel.rgb;
141
147
  vec3 viewPosSample = getViewPosition(sampleUv, sampleDepth);
142
-
148
+
143
149
  float normalDiff = dot(viewNormal, sampleNormal);
144
150
  float normalSimilarity = pow(max(normalDiff, 0.), normalPhi);
145
151
  float lumaDiff = abs(getLuminance(neighborColor) - getLuminance(center));
@@ -147,14 +153,14 @@ const PoissonDenoiseShader = {
147
153
  float depthDiff = abs(dot(viewPos - viewPosSample, viewNormal));
148
154
  float depthSimilarity = max(1. - depthDiff / depthPhi, 0.);
149
155
  float w = lumaSimilarity * depthSimilarity * normalSimilarity;
150
-
156
+
151
157
  denoised += w * neighborColor;
152
158
  totalWeight += w;
153
159
  }
154
-
160
+
155
161
  void main() {
156
- float depth = getDepth(vUv.xy);
157
- vec3 viewNormal = getViewNormal(vUv);
162
+ float depth = getDepth(vUv.xy);
163
+ vec3 viewNormal = getViewNormal(vUv);
158
164
  if (depth == 1. || dot(viewNormal, viewNormal) == 0.) {
159
165
  discard;
160
166
  return;
@@ -168,7 +174,7 @@ const PoissonDenoiseShader = {
168
174
  vec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);
169
175
  vec2 noiseVec = vec2(sin(noiseTexel[index % 4] * 2. * PI), cos(noiseTexel[index % 4] * 2. * PI));
170
176
  mat2 rotationMatrix = mat2(noiseVec.x, -noiseVec.y, noiseVec.x, noiseVec.y);
171
-
177
+
172
178
  float totalWeight = 1.0;
173
179
  vec3 denoised = texel.rgb;
174
180
  for (int i = 0; i < SAMPLES; i++) {
@@ -177,8 +183,8 @@ const PoissonDenoiseShader = {
177
183
  vec2 sampleUv = vUv + offset;
178
184
  denoiseSample(center, viewNormal, viewPos, sampleUv, denoised, totalWeight);
179
185
  }
180
-
181
- if (totalWeight > 0.) {
186
+
187
+ if (totalWeight > 0.) {
182
188
  denoised /= totalWeight;
183
189
  }
184
190
  gl_FragColor = FRAGMENT_OUTPUT;
@@ -1,3 +1,5 @@
1
+ /** @module RGBShiftShader */
2
+
1
3
  /**
2
4
  * RGB Shift Shader
3
5
  * Shifts red and blue channels from center in opposite directions
@@ -6,8 +8,10 @@
6
8
  *
7
9
  * amount: shift distance (1 is width of input)
8
10
  * angle: shift angle in radians
11
+ *
12
+ * @constant
13
+ * @type {ShaderMaterial~Shader}
9
14
  */
10
-
11
15
  const RGBShiftShader = {
12
16
 
13
17
  name: 'RGBShiftShader',
@@ -3,10 +3,16 @@ import {
3
3
  Vector2
4
4
  } from 'three';
5
5
 
6
+ /** @module SAOShader */
7
+
6
8
  /**
7
- * TODO
9
+ * SAO shader.
10
+ *
11
+ * Used by {@link SAOPass}.
12
+ *
13
+ * @constant
14
+ * @type {ShaderMaterial~Shader}
8
15
  */
9
-
10
16
  const SAOShader = {
11
17
 
12
18
  name: 'SAOShader',
@@ -5,9 +5,19 @@ import {
5
5
  /**
6
6
  * WebGL port of Subpixel Morphological Antialiasing (SMAA) v2.8
7
7
  * Preset: SMAA 1x Medium (with color edge detection)
8
- * https://github.com/iryoku/smaa/releases/tag/v2.8
8
+ *
9
+ * References:
10
+ * - {@link https://github.com/iryoku/smaa/releases/tag/v2.8}
11
+ *
12
+ * @module SMAAShader
9
13
  */
10
14
 
15
+ /**
16
+ * SMAA Edges shader.
17
+ *
18
+ * @constant
19
+ * @type {ShaderMaterial~Shader}
20
+ */
11
21
  const SMAAEdgesShader = {
12
22
 
13
23
  name: 'SMAAEdgesShader',
@@ -115,6 +125,12 @@ const SMAAEdgesShader = {
115
125
 
116
126
  };
117
127
 
128
+ /**
129
+ * SMAA Weights shader.
130
+ *
131
+ * @constant
132
+ * @type {ShaderMaterial~Shader}
133
+ */
118
134
  const SMAAWeightsShader = {
119
135
 
120
136
  name: 'SMAAWeightsShader',
@@ -371,6 +387,12 @@ const SMAAWeightsShader = {
371
387
 
372
388
  };
373
389
 
390
+ /**
391
+ * SMAA Blend shader.
392
+ *
393
+ * @constant
394
+ * @type {ShaderMaterial~Shader}
395
+ */
374
396
  const SMAABlendShader = {
375
397
 
376
398
  name: 'SMAABlendShader',
@@ -3,13 +3,19 @@ import {
3
3
  Vector2
4
4
  } from 'three';
5
5
 
6
+ /** @module SSAOShader */
7
+
6
8
  /**
9
+ * SSAO shader.
10
+ *
7
11
  * References:
8
- * http://john-chapman-graphics.blogspot.com/2013/01/ssao-tutorial.html
9
- * https://learnopengl.com/Advanced-Lighting/SSAO
10
- * https://github.com/McNopper/OpenGL/blob/master/Example28/shader/ssao.frag.glsl
12
+ * - {@link http://john-chapman-graphics.blogspot.com/2013/01/ssao-tutorial.html}
13
+ * - {@link https://learnopengl.com/Advanced-Lighting/SSAO}
14
+ * - {@link https://github.com/McNopper/OpenGL/blob/master/Example28/shader/ssao.frag.glsl}
15
+ *
16
+ * @constant
17
+ * @type {ShaderMaterial~Shader}
11
18
  */
12
-
13
19
  const SSAOShader = {
14
20
 
15
21
  name: 'SSAOShader',
@@ -131,7 +137,7 @@ const SSAOShader = {
131
137
  if ( depth == 1.0 ) {
132
138
 
133
139
  gl_FragColor = vec4( 1.0 ); // don't influence background
134
-
140
+
135
141
  } else {
136
142
 
137
143
  float viewZ = getViewZ( depth );
@@ -182,6 +188,12 @@ const SSAOShader = {
182
188
 
183
189
  };
184
190
 
191
+ /**
192
+ * SSAO depth shader.
193
+ *
194
+ * @constant
195
+ * @type {ShaderMaterial~Shader}
196
+ */
185
197
  const SSAODepthShader = {
186
198
 
187
199
  name: 'SSAODepthShader',
@@ -245,6 +257,12 @@ const SSAODepthShader = {
245
257
 
246
258
  };
247
259
 
260
+ /**
261
+ * SSAO blur shader.
262
+ *
263
+ * @constant
264
+ * @type {Object}
265
+ */
248
266
  const SSAOBlurShader = {
249
267
 
250
268
  name: 'SSAOBlurShader',