@lampdotdev/lamp 0.0.0-stage → 0.35.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 (464) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +357 -2
  3. package/Resources/Devices/roku.json +410 -0
  4. package/Resources/Devices/xbox-one.json +367 -0
  5. package/Resources/GameKit/NOTICE.md +63 -0
  6. package/Resources/GameKit/apple/LampPage.swift +1646 -0
  7. package/Resources/GameKit/apple/LampPlayer.swift +46 -0
  8. package/Resources/GameKit/apple/LampWebApp.swift +63 -0
  9. package/Resources/GameKit/apple/LampWebGame.swift +87 -0
  10. package/Resources/GameKit/apple/Native.swift +12 -0
  11. package/Resources/GameKit/build.sh +55 -0
  12. package/Resources/GameKit/lamp_game.h +116 -0
  13. package/Resources/GameKit/lamp_host.h +19 -0
  14. package/Resources/GameKit/lamp_kit.cpp +61 -0
  15. package/Resources/GameKit/lamp_sound.cpp +455 -0
  16. package/Resources/GameKit/lamp_xbox.cpp +374 -0
  17. package/Resources/GameKit/libraries/HandmadeMath.h +3940 -0
  18. package/Resources/GameKit/libraries/cgltf.h +7240 -0
  19. package/Resources/GameKit/libraries/dr_mp3.h +5430 -0
  20. package/Resources/GameKit/libraries/dr_wav.h +9209 -0
  21. package/Resources/GameKit/libraries/sokol_debugtext.h +4754 -0
  22. package/Resources/GameKit/libraries/sokol_gfx.h +29558 -0
  23. package/Resources/GameKit/libraries/sokol_gl.h +4538 -0
  24. package/Resources/GameKit/libraries/sokol_log.h +335 -0
  25. package/Resources/GameKit/libraries/sokol_shape.h +1531 -0
  26. package/Resources/GameKit/libraries/stb_image.h +7988 -0
  27. package/Resources/GameKit/libraries/stb_vorbis.c +5584 -0
  28. package/Resources/GameKit/scaffold/Game/game.cpp +142 -0
  29. package/Resources/GameKit/scaffold/Game/scene.glsl +49 -0
  30. package/Resources/GameKit/scaffold-web/Web/game.js +31 -0
  31. package/Resources/GameKit/scaffold-web/Web/index.html +13 -0
  32. package/Resources/GameKit/scaffold-web/Web/making.js +33 -0
  33. package/Resources/GameKit/scaffold-web/Web/world.js +33 -0
  34. package/Resources/GameKit/web/lamp-game.js +3036 -0
  35. package/Resources/GameKit/web/lamp-phaser.js +128 -0
  36. package/Resources/WebHost/App.exe +0 -0
  37. package/Resources/WebHost/Microsoft.Web.WebView2.Core.dll +0 -0
  38. package/Resources/WebHost/WebView2-LICENSE.txt +27 -0
  39. package/Resources/WebHost/lamp_controllers.h +1506 -0
  40. package/Resources/WebHost/lamp_web_host.cpp +1173 -0
  41. package/Resources/WebLibraries/earlier.txt +318 -0
  42. package/Resources/WebLibraries/phaser/LICENSE.md +20 -0
  43. package/Resources/WebLibraries/phaser/NOTICE.md +2 -0
  44. package/Resources/WebLibraries/phaser/phaser.esm.min.js +1 -0
  45. package/Resources/WebLibraries/qrcode/LICENSE +21 -0
  46. package/Resources/WebLibraries/qrcode/NOTICE.md +4 -0
  47. package/Resources/WebLibraries/qrcode/qrcode.js +2297 -0
  48. package/Resources/WebLibraries/rapier/LICENSE +201 -0
  49. package/Resources/WebLibraries/rapier/NOTICE.md +3 -0
  50. package/Resources/WebLibraries/rapier/rapier.js +2 -0
  51. package/Resources/WebLibraries/three/LICENSE +21 -0
  52. package/Resources/WebLibraries/three/NOTICE.md +4 -0
  53. package/Resources/WebLibraries/three/addons/animation/AnimationClipCreator.js +168 -0
  54. package/Resources/WebLibraries/three/addons/animation/CCDIKSolver.js +607 -0
  55. package/Resources/WebLibraries/three/addons/controls/ArcballControls.js +3543 -0
  56. package/Resources/WebLibraries/three/addons/controls/DragControls.js +452 -0
  57. package/Resources/WebLibraries/three/addons/controls/FirstPersonControls.js +512 -0
  58. package/Resources/WebLibraries/three/addons/controls/FlyControls.js +384 -0
  59. package/Resources/WebLibraries/three/addons/controls/MapControls.js +116 -0
  60. package/Resources/WebLibraries/three/addons/controls/OrbitControls.js +1985 -0
  61. package/Resources/WebLibraries/three/addons/controls/PointerLockControls.js +264 -0
  62. package/Resources/WebLibraries/three/addons/controls/TrackballControls.js +1106 -0
  63. package/Resources/WebLibraries/three/addons/controls/TransformControls.js +2003 -0
  64. package/Resources/WebLibraries/three/addons/curves/CurveExtras.js +694 -0
  65. package/Resources/WebLibraries/three/addons/curves/NURBSCurve.js +169 -0
  66. package/Resources/WebLibraries/three/addons/curves/NURBSSurface.js +98 -0
  67. package/Resources/WebLibraries/three/addons/curves/NURBSUtils.js +532 -0
  68. package/Resources/WebLibraries/three/addons/curves/NURBSVolume.js +82 -0
  69. package/Resources/WebLibraries/three/addons/effects/AnaglyphEffect.js +274 -0
  70. package/Resources/WebLibraries/three/addons/effects/AsciiEffect.js +323 -0
  71. package/Resources/WebLibraries/three/addons/effects/OutlineEffect.js +489 -0
  72. package/Resources/WebLibraries/three/addons/effects/ParallaxBarrierEffect.js +155 -0
  73. package/Resources/WebLibraries/three/addons/effects/StereoEffect.js +91 -0
  74. package/Resources/WebLibraries/three/addons/environments/ColorEnvironment.js +59 -0
  75. package/Resources/WebLibraries/three/addons/environments/DebugEnvironment.js +102 -0
  76. package/Resources/WebLibraries/three/addons/environments/RoomEnvironment.js +185 -0
  77. package/Resources/WebLibraries/three/addons/geometries/BoxLineGeometry.js +92 -0
  78. package/Resources/WebLibraries/three/addons/geometries/ConvexGeometry.js +72 -0
  79. package/Resources/WebLibraries/three/addons/geometries/DecalGeometry.js +420 -0
  80. package/Resources/WebLibraries/three/addons/geometries/LoftGeometry.js +355 -0
  81. package/Resources/WebLibraries/three/addons/geometries/ParametricFunctions.js +100 -0
  82. package/Resources/WebLibraries/three/addons/geometries/ParametricGeometry.js +172 -0
  83. package/Resources/WebLibraries/three/addons/geometries/RoundedBoxGeometry.js +216 -0
  84. package/Resources/WebLibraries/three/addons/geometries/TeapotGeometry.js +689 -0
  85. package/Resources/WebLibraries/three/addons/geometries/TextGeometry.js +102 -0
  86. package/Resources/WebLibraries/three/addons/helpers/AnimationPathHelper.js +302 -0
  87. package/Resources/WebLibraries/three/addons/helpers/LightProbeGridHelper.js +166 -0
  88. package/Resources/WebLibraries/three/addons/helpers/LightProbeGridHelperWebGL.js +221 -0
  89. package/Resources/WebLibraries/three/addons/helpers/LightProbeHelper.js +166 -0
  90. package/Resources/WebLibraries/three/addons/helpers/LightProbeHelperGPU.js +102 -0
  91. package/Resources/WebLibraries/three/addons/helpers/OctreeHelper.js +109 -0
  92. package/Resources/WebLibraries/three/addons/helpers/PositionalAudioHelper.js +169 -0
  93. package/Resources/WebLibraries/three/addons/helpers/RapierHelper.js +59 -0
  94. package/Resources/WebLibraries/three/addons/helpers/RectAreaLightHelper.js +118 -0
  95. package/Resources/WebLibraries/three/addons/helpers/TextureHelper.js +265 -0
  96. package/Resources/WebLibraries/three/addons/helpers/TextureHelperGPU.js +214 -0
  97. package/Resources/WebLibraries/three/addons/helpers/VertexNormalsHelper.js +155 -0
  98. package/Resources/WebLibraries/three/addons/helpers/VertexTangentsHelper.js +133 -0
  99. package/Resources/WebLibraries/three/addons/helpers/ViewHelper.js +529 -0
  100. package/Resources/WebLibraries/three/addons/interactive/HTMLMesh.js +617 -0
  101. package/Resources/WebLibraries/three/addons/interactive/InteractiveGroup.js +224 -0
  102. package/Resources/WebLibraries/three/addons/interactive/SelectionBox.js +324 -0
  103. package/Resources/WebLibraries/three/addons/interactive/SelectionHelper.js +150 -0
  104. package/Resources/WebLibraries/three/addons/libs/fflate.module.js +2699 -0
  105. package/Resources/WebLibraries/three/addons/libs/lil-gui.module.min.js +8 -0
  106. package/Resources/WebLibraries/three/addons/libs/meshopt_decoder.module.js +196 -0
  107. package/Resources/WebLibraries/three/addons/libs/potpack.module.js +125 -0
  108. package/Resources/WebLibraries/three/addons/libs/stats.module.js +167 -0
  109. package/Resources/WebLibraries/three/addons/libs/tween.module.js +876 -0
  110. package/Resources/WebLibraries/three/addons/lighting/ClusteredLighting.js +153 -0
  111. package/Resources/WebLibraries/three/addons/lighting/DynamicLighting.js +82 -0
  112. package/Resources/WebLibraries/three/addons/lighting/LightMapper.js +295 -0
  113. package/Resources/WebLibraries/three/addons/lighting/LightProbeGrid.js +923 -0
  114. package/Resources/WebLibraries/three/addons/lighting/LightProbeGridUtils.js +107 -0
  115. package/Resources/WebLibraries/three/addons/lighting/LightProbeGridWebGL.js +846 -0
  116. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIConeTracer.js +243 -0
  117. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIIrradiance.js +43 -0
  118. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGINode.js +617 -0
  119. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGISceneCollector.js +793 -0
  120. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIVolume.js +1440 -0
  121. package/Resources/WebLibraries/three/addons/lights/LightProbeGenerator.js +337 -0
  122. package/Resources/WebLibraries/three/addons/lights/RectAreaLightTexturesLib.js +127 -0
  123. package/Resources/WebLibraries/three/addons/lights/RectAreaLightUniformsLib.js +40 -0
  124. package/Resources/WebLibraries/three/addons/lights/SunLight.js +100 -0
  125. package/Resources/WebLibraries/three/addons/lights/SunLightNode.js +56 -0
  126. package/Resources/WebLibraries/three/addons/lights/SunLightShadow.js +319 -0
  127. package/Resources/WebLibraries/three/addons/lights/SunShadowNode.js +312 -0
  128. package/Resources/WebLibraries/three/addons/lines/Line2.js +56 -0
  129. package/Resources/WebLibraries/three/addons/lines/LineGeometry.js +157 -0
  130. package/Resources/WebLibraries/three/addons/lines/LineMaterial.js +742 -0
  131. package/Resources/WebLibraries/three/addons/lines/LineSegments2.js +434 -0
  132. package/Resources/WebLibraries/three/addons/lines/LineSegmentsGeometry.js +298 -0
  133. package/Resources/WebLibraries/three/addons/lines/Wireframe.js +108 -0
  134. package/Resources/WebLibraries/three/addons/lines/WireframeGeometry2.js +49 -0
  135. package/Resources/WebLibraries/three/addons/lines/webgpu/Line2.js +46 -0
  136. package/Resources/WebLibraries/three/addons/lines/webgpu/LineSegments2.js +419 -0
  137. package/Resources/WebLibraries/three/addons/lines/webgpu/Wireframe.js +86 -0
  138. package/Resources/WebLibraries/three/addons/loaders/EXRLoader.js +3411 -0
  139. package/Resources/WebLibraries/three/addons/loaders/FBXLoader.js +4660 -0
  140. package/Resources/WebLibraries/three/addons/loaders/FontLoader.js +262 -0
  141. package/Resources/WebLibraries/three/addons/loaders/GLTFLoader.js +5006 -0
  142. package/Resources/WebLibraries/three/addons/loaders/HDRLoader.js +463 -0
  143. package/Resources/WebLibraries/three/addons/loaders/MTLLoader.js +601 -0
  144. package/Resources/WebLibraries/three/addons/loaders/OBJLoader.js +961 -0
  145. package/Resources/WebLibraries/three/addons/loaders/PLYLoader.js +992 -0
  146. package/Resources/WebLibraries/three/addons/loaders/RGBELoader.js +18 -0
  147. package/Resources/WebLibraries/three/addons/loaders/STLLoader.js +423 -0
  148. package/Resources/WebLibraries/three/addons/loaders/SVGLoader.js +3297 -0
  149. package/Resources/WebLibraries/three/addons/loaders/TGALoader.js +539 -0
  150. package/Resources/WebLibraries/three/addons/loaders/UltraHDRLoader.js +757 -0
  151. package/Resources/WebLibraries/three/addons/math/Capsule.js +159 -0
  152. package/Resources/WebLibraries/three/addons/math/ColorConverter.js +62 -0
  153. package/Resources/WebLibraries/three/addons/math/ColorSpaces.js +147 -0
  154. package/Resources/WebLibraries/three/addons/math/ConvexHull.js +1695 -0
  155. package/Resources/WebLibraries/three/addons/math/ImprovedNoise.js +88 -0
  156. package/Resources/WebLibraries/three/addons/math/Lut.js +317 -0
  157. package/Resources/WebLibraries/three/addons/math/MeshSurfaceSampler.js +315 -0
  158. package/Resources/WebLibraries/three/addons/math/OBB.js +535 -0
  159. package/Resources/WebLibraries/three/addons/math/Octree.js +825 -0
  160. package/Resources/WebLibraries/three/addons/math/SimplexNoise.js +470 -0
  161. package/Resources/WebLibraries/three/addons/misc/ConvexObjectBreaker.js +539 -0
  162. package/Resources/WebLibraries/three/addons/misc/GPUComputationRenderer.js +508 -0
  163. package/Resources/WebLibraries/three/addons/misc/Gyroscope.js +78 -0
  164. package/Resources/WebLibraries/three/addons/misc/MorphAnimMesh.js +119 -0
  165. package/Resources/WebLibraries/three/addons/misc/MorphBlendMesh.js +425 -0
  166. package/Resources/WebLibraries/three/addons/misc/ProgressiveLightMap.js +370 -0
  167. package/Resources/WebLibraries/three/addons/misc/ProgressiveLightMapGPU.js +322 -0
  168. package/Resources/WebLibraries/three/addons/misc/RollerCoaster.js +661 -0
  169. package/Resources/WebLibraries/three/addons/misc/Sculptor.js +1679 -0
  170. package/Resources/WebLibraries/three/addons/misc/SculptorMesh.js +1504 -0
  171. package/Resources/WebLibraries/three/addons/misc/SculptorTools.js +1180 -0
  172. package/Resources/WebLibraries/three/addons/misc/SculptorUtils.js +345 -0
  173. package/Resources/WebLibraries/three/addons/misc/TileCreasedNormalsPlugin.js +270 -0
  174. package/Resources/WebLibraries/three/addons/misc/TubePainter.js +611 -0
  175. package/Resources/WebLibraries/three/addons/misc/Volume.js +520 -0
  176. package/Resources/WebLibraries/three/addons/misc/VolumeSlice.js +275 -0
  177. package/Resources/WebLibraries/three/addons/modifiers/CurveModifier.js +374 -0
  178. package/Resources/WebLibraries/three/addons/modifiers/CurveModifierGPU.js +256 -0
  179. package/Resources/WebLibraries/three/addons/modifiers/EdgeSplitModifier.js +299 -0
  180. package/Resources/WebLibraries/three/addons/modifiers/TessellateModifier.js +340 -0
  181. package/Resources/WebLibraries/three/addons/objects/GroundedSkybox.js +69 -0
  182. package/Resources/WebLibraries/three/addons/objects/Lensflare.js +489 -0
  183. package/Resources/WebLibraries/three/addons/objects/LensflareMesh.js +376 -0
  184. package/Resources/WebLibraries/three/addons/objects/MarchingCubes.js +1261 -0
  185. package/Resources/WebLibraries/three/addons/objects/Reflector.js +390 -0
  186. package/Resources/WebLibraries/three/addons/objects/ReflectorForSSRPass.js +393 -0
  187. package/Resources/WebLibraries/three/addons/objects/Refractor.js +389 -0
  188. package/Resources/WebLibraries/three/addons/objects/ShadowMesh.js +130 -0
  189. package/Resources/WebLibraries/three/addons/objects/Sky.js +342 -0
  190. package/Resources/WebLibraries/three/addons/objects/SkyMesh.js +403 -0
  191. package/Resources/WebLibraries/three/addons/objects/Water.js +374 -0
  192. package/Resources/WebLibraries/three/addons/objects/Water2.js +403 -0
  193. package/Resources/WebLibraries/three/addons/objects/Water2Mesh.js +199 -0
  194. package/Resources/WebLibraries/three/addons/objects/WaterMesh.js +194 -0
  195. package/Resources/WebLibraries/three/addons/postprocessing/AfterimagePass.js +187 -0
  196. package/Resources/WebLibraries/three/addons/postprocessing/BloomPass.js +274 -0
  197. package/Resources/WebLibraries/three/addons/postprocessing/BokehPass.js +218 -0
  198. package/Resources/WebLibraries/three/addons/postprocessing/ClearPass.js +97 -0
  199. package/Resources/WebLibraries/three/addons/postprocessing/CubeTexturePass.js +146 -0
  200. package/Resources/WebLibraries/three/addons/postprocessing/DotScreenPass.js +114 -0
  201. package/Resources/WebLibraries/three/addons/postprocessing/EffectComposer.js +365 -0
  202. package/Resources/WebLibraries/three/addons/postprocessing/FXAAPass.js +40 -0
  203. package/Resources/WebLibraries/three/addons/postprocessing/FilmPass.js +113 -0
  204. package/Resources/WebLibraries/three/addons/postprocessing/GTAOPass.js +735 -0
  205. package/Resources/WebLibraries/three/addons/postprocessing/GlitchPass.js +177 -0
  206. package/Resources/WebLibraries/three/addons/postprocessing/HalftonePass.js +134 -0
  207. package/Resources/WebLibraries/three/addons/postprocessing/LUTPass.js +138 -0
  208. package/Resources/WebLibraries/three/addons/postprocessing/MaskPass.js +195 -0
  209. package/Resources/WebLibraries/three/addons/postprocessing/OutlinePass.js +776 -0
  210. package/Resources/WebLibraries/three/addons/postprocessing/OutputPass.js +148 -0
  211. package/Resources/WebLibraries/three/addons/postprocessing/Pass.js +191 -0
  212. package/Resources/WebLibraries/three/addons/postprocessing/RenderPass.js +193 -0
  213. package/Resources/WebLibraries/three/addons/postprocessing/RenderPixelatedPass.js +314 -0
  214. package/Resources/WebLibraries/three/addons/postprocessing/RenderTransitionPass.js +267 -0
  215. package/Resources/WebLibraries/three/addons/postprocessing/SAOPass.js +407 -0
  216. package/Resources/WebLibraries/three/addons/postprocessing/SMAAPass.js +230 -0
  217. package/Resources/WebLibraries/three/addons/postprocessing/SSAARenderPass.js +313 -0
  218. package/Resources/WebLibraries/three/addons/postprocessing/SSAOPass.js +527 -0
  219. package/Resources/WebLibraries/three/addons/postprocessing/SSRPass.js +858 -0
  220. package/Resources/WebLibraries/three/addons/postprocessing/SavePass.js +132 -0
  221. package/Resources/WebLibraries/three/addons/postprocessing/ShaderPass.js +135 -0
  222. package/Resources/WebLibraries/three/addons/postprocessing/TAARenderPass.js +243 -0
  223. package/Resources/WebLibraries/three/addons/postprocessing/TexturePass.js +131 -0
  224. package/Resources/WebLibraries/three/addons/postprocessing/UnrealBloomPass.js +541 -0
  225. package/Resources/WebLibraries/three/addons/shaders/ACESFilmicToneMappingShader.js +96 -0
  226. package/Resources/WebLibraries/three/addons/shaders/AfterimageShader.js +63 -0
  227. package/Resources/WebLibraries/three/addons/shaders/BasicShader.js +36 -0
  228. package/Resources/WebLibraries/three/addons/shaders/BleachBypassShader.js +68 -0
  229. package/Resources/WebLibraries/three/addons/shaders/BlendShader.js +56 -0
  230. package/Resources/WebLibraries/three/addons/shaders/BokehShader.js +151 -0
  231. package/Resources/WebLibraries/three/addons/shaders/BokehShader2.js +404 -0
  232. package/Resources/WebLibraries/three/addons/shaders/BrightnessContrastShader.js +62 -0
  233. package/Resources/WebLibraries/three/addons/shaders/ColorCorrectionShader.js +59 -0
  234. package/Resources/WebLibraries/three/addons/shaders/ColorifyShader.js +57 -0
  235. package/Resources/WebLibraries/three/addons/shaders/ConvolutionShader.js +74 -0
  236. package/Resources/WebLibraries/three/addons/shaders/CopyShader.js +52 -0
  237. package/Resources/WebLibraries/three/addons/shaders/DOFMipMapShader.js +63 -0
  238. package/Resources/WebLibraries/three/addons/shaders/DepthLimitedBlurShader.js +183 -0
  239. package/Resources/WebLibraries/three/addons/shaders/DigitalGlitch.js +104 -0
  240. package/Resources/WebLibraries/three/addons/shaders/DotScreenShader.js +75 -0
  241. package/Resources/WebLibraries/three/addons/shaders/ExposureShader.js +51 -0
  242. package/Resources/WebLibraries/three/addons/shaders/FXAAShader.js +298 -0
  243. package/Resources/WebLibraries/three/addons/shaders/FilmShader.js +73 -0
  244. package/Resources/WebLibraries/three/addons/shaders/FocusShader.js +94 -0
  245. package/Resources/WebLibraries/three/addons/shaders/FreiChenShader.js +103 -0
  246. package/Resources/WebLibraries/three/addons/shaders/GTAOShader.js +437 -0
  247. package/Resources/WebLibraries/three/addons/shaders/GammaCorrectionShader.js +52 -0
  248. package/Resources/WebLibraries/three/addons/shaders/HalftoneShader.js +332 -0
  249. package/Resources/WebLibraries/three/addons/shaders/HorizontalBlurShader.js +68 -0
  250. package/Resources/WebLibraries/three/addons/shaders/HorizontalTiltShiftShader.js +70 -0
  251. package/Resources/WebLibraries/three/addons/shaders/HueSaturationShader.js +74 -0
  252. package/Resources/WebLibraries/three/addons/shaders/KaleidoShader.js +65 -0
  253. package/Resources/WebLibraries/three/addons/shaders/LuminosityHighPassShader.js +68 -0
  254. package/Resources/WebLibraries/three/addons/shaders/LuminosityShader.js +54 -0
  255. package/Resources/WebLibraries/three/addons/shaders/MirrorShader.js +62 -0
  256. package/Resources/WebLibraries/three/addons/shaders/NormalMapShader.js +60 -0
  257. package/Resources/WebLibraries/three/addons/shaders/OutputShader.js +103 -0
  258. package/Resources/WebLibraries/three/addons/shaders/PoissonDenoiseShader.js +230 -0
  259. package/Resources/WebLibraries/three/addons/shaders/RGBShiftShader.js +61 -0
  260. package/Resources/WebLibraries/three/addons/shaders/SAOShader.js +201 -0
  261. package/Resources/WebLibraries/three/addons/shaders/SMAAShader.js +489 -0
  262. package/Resources/WebLibraries/three/addons/shaders/SSAOShader.js +331 -0
  263. package/Resources/WebLibraries/three/addons/shaders/SSRShader.js +396 -0
  264. package/Resources/WebLibraries/three/addons/shaders/SepiaShader.js +57 -0
  265. package/Resources/WebLibraries/three/addons/shaders/SobelOperatorShader.js +98 -0
  266. package/Resources/WebLibraries/three/addons/shaders/SubsurfaceScatteringShader.js +95 -0
  267. package/Resources/WebLibraries/three/addons/shaders/TechnicolorShader.js +51 -0
  268. package/Resources/WebLibraries/three/addons/shaders/ToonShader.js +349 -0
  269. package/Resources/WebLibraries/three/addons/shaders/TriangleBlurShader.js +79 -0
  270. package/Resources/WebLibraries/three/addons/shaders/UnpackDepthRGBAShader.js +60 -0
  271. package/Resources/WebLibraries/three/addons/shaders/VelocityShader.js +137 -0
  272. package/Resources/WebLibraries/three/addons/shaders/VerticalBlurShader.js +66 -0
  273. package/Resources/WebLibraries/three/addons/shaders/VerticalTiltShiftShader.js +70 -0
  274. package/Resources/WebLibraries/three/addons/shaders/VignetteShader.js +56 -0
  275. package/Resources/WebLibraries/three/addons/shaders/VolumeShader.js +285 -0
  276. package/Resources/WebLibraries/three/addons/shaders/WaterRefractionShader.js +106 -0
  277. package/Resources/WebLibraries/three/addons/textures/FlakesTexture.js +54 -0
  278. package/Resources/WebLibraries/three/addons/tsl/WebGLNodesHandler.js +607 -0
  279. package/Resources/WebLibraries/three/addons/tsl/display/AfterImageNode.js +256 -0
  280. package/Resources/WebLibraries/three/addons/tsl/display/AnaglyphPassNode.js +550 -0
  281. package/Resources/WebLibraries/three/addons/tsl/display/BilateralBlurNode.js +377 -0
  282. package/Resources/WebLibraries/three/addons/tsl/display/BleachBypass.js +33 -0
  283. package/Resources/WebLibraries/three/addons/tsl/display/BloomNode.js +599 -0
  284. package/Resources/WebLibraries/three/addons/tsl/display/CRT.js +150 -0
  285. package/Resources/WebLibraries/three/addons/tsl/display/ChromaticAberrationNode.js +163 -0
  286. package/Resources/WebLibraries/three/addons/tsl/display/DenoiseNode.js +354 -0
  287. package/Resources/WebLibraries/three/addons/tsl/display/DepthOfFieldNode.js +572 -0
  288. package/Resources/WebLibraries/three/addons/tsl/display/DotScreenNode.js +104 -0
  289. package/Resources/WebLibraries/three/addons/tsl/display/FSR1Node.js +481 -0
  290. package/Resources/WebLibraries/three/addons/tsl/display/FXAANode.js +357 -0
  291. package/Resources/WebLibraries/three/addons/tsl/display/FilmNode.js +101 -0
  292. package/Resources/WebLibraries/three/addons/tsl/display/GTAONode.js +727 -0
  293. package/Resources/WebLibraries/three/addons/tsl/display/GaussianBlurNode.js +412 -0
  294. package/Resources/WebLibraries/three/addons/tsl/display/GodraysNode.js +604 -0
  295. package/Resources/WebLibraries/three/addons/tsl/display/ImportanceSampledEnvironment.js +564 -0
  296. package/Resources/WebLibraries/three/addons/tsl/display/LensflareNode.js +282 -0
  297. package/Resources/WebLibraries/three/addons/tsl/display/Lut3DNode.js +109 -0
  298. package/Resources/WebLibraries/three/addons/tsl/display/MotionBlur.js +33 -0
  299. package/Resources/WebLibraries/three/addons/tsl/display/OITPassNode.js +341 -0
  300. package/Resources/WebLibraries/three/addons/tsl/display/OutlineNode.js +916 -0
  301. package/Resources/WebLibraries/three/addons/tsl/display/ParallaxBarrierPassNode.js +90 -0
  302. package/Resources/WebLibraries/three/addons/tsl/display/PixelationPassNode.js +227 -0
  303. package/Resources/WebLibraries/three/addons/tsl/display/RGBShiftNode.js +96 -0
  304. package/Resources/WebLibraries/three/addons/tsl/display/RecurrentDenoiseNode.js +812 -0
  305. package/Resources/WebLibraries/three/addons/tsl/display/RetroPassNode.js +263 -0
  306. package/Resources/WebLibraries/three/addons/tsl/display/SMAANode.js +729 -0
  307. package/Resources/WebLibraries/three/addons/tsl/display/SSAAPassNode.js +344 -0
  308. package/Resources/WebLibraries/three/addons/tsl/display/SSAONode.js +422 -0
  309. package/Resources/WebLibraries/three/addons/tsl/display/SSGINode.js +698 -0
  310. package/Resources/WebLibraries/three/addons/tsl/display/SSRNode.js +1430 -0
  311. package/Resources/WebLibraries/three/addons/tsl/display/SSSNode.js +479 -0
  312. package/Resources/WebLibraries/three/addons/tsl/display/Sepia.js +24 -0
  313. package/Resources/WebLibraries/three/addons/tsl/display/Shape.js +29 -0
  314. package/Resources/WebLibraries/three/addons/tsl/display/SharpenNode.js +284 -0
  315. package/Resources/WebLibraries/three/addons/tsl/display/SobelOperatorNode.js +168 -0
  316. package/Resources/WebLibraries/three/addons/tsl/display/StereoCompositePassNode.js +190 -0
  317. package/Resources/WebLibraries/three/addons/tsl/display/StereoPassNode.js +117 -0
  318. package/Resources/WebLibraries/three/addons/tsl/display/TAAUNode.js +700 -0
  319. package/Resources/WebLibraries/three/addons/tsl/display/TRAANode.js +609 -0
  320. package/Resources/WebLibraries/three/addons/tsl/display/TemporalReprojectNode.js +1024 -0
  321. package/Resources/WebLibraries/three/addons/tsl/display/TransitionNode.js +141 -0
  322. package/Resources/WebLibraries/three/addons/tsl/display/boxBlur.js +65 -0
  323. package/Resources/WebLibraries/three/addons/tsl/display/depthAwareBlend.js +80 -0
  324. package/Resources/WebLibraries/three/addons/tsl/display/depthAwareBlur.js +63 -0
  325. package/Resources/WebLibraries/three/addons/tsl/display/hashBlur.js +55 -0
  326. package/Resources/WebLibraries/three/addons/tsl/display/lensDirt.js +30 -0
  327. package/Resources/WebLibraries/three/addons/tsl/display/radialBlur.js +68 -0
  328. package/Resources/WebLibraries/three/addons/tsl/lighting/ClusteredLightsNode.js +994 -0
  329. package/Resources/WebLibraries/three/addons/tsl/lighting/DynamicLightsNode.js +201 -0
  330. package/Resources/WebLibraries/three/addons/tsl/lighting/LightProbeGridNode.js +183 -0
  331. package/Resources/WebLibraries/three/addons/tsl/lighting/data/AmbientLightDataNode.js +67 -0
  332. package/Resources/WebLibraries/three/addons/tsl/lighting/data/DirectionalLightDataNode.js +117 -0
  333. package/Resources/WebLibraries/three/addons/tsl/lighting/data/HemisphereLightDataNode.js +105 -0
  334. package/Resources/WebLibraries/three/addons/tsl/lighting/data/PointLightDataNode.js +140 -0
  335. package/Resources/WebLibraries/three/addons/tsl/lighting/data/SpotLightDataNode.js +167 -0
  336. package/Resources/WebLibraries/three/addons/tsl/math/Bayer.js +84 -0
  337. package/Resources/WebLibraries/three/addons/tsl/math/curlNoise.js +107 -0
  338. package/Resources/WebLibraries/three/addons/tsl/math/voronoiNoise.js +112 -0
  339. package/Resources/WebLibraries/three/addons/tsl/shadows/TileShadowNode.js +542 -0
  340. package/Resources/WebLibraries/three/addons/tsl/shadows/TileShadowNodeHelper.js +212 -0
  341. package/Resources/WebLibraries/three/addons/tsl/utils/GroundedSkybox.js +62 -0
  342. package/Resources/WebLibraries/three/addons/tsl/utils/RNoise.js +51 -0
  343. package/Resources/WebLibraries/three/addons/tsl/utils/Raymarching.js +70 -0
  344. package/Resources/WebLibraries/three/addons/tsl/utils/SoftParticles.js +53 -0
  345. package/Resources/WebLibraries/three/addons/tsl/utils/SpecularHelpers.js +302 -0
  346. package/Resources/WebLibraries/three/addons/tsl/utils/TAAUtils.js +184 -0
  347. package/Resources/WebLibraries/three/addons/utils/BufferGeometryUtils.js +1523 -0
  348. package/Resources/WebLibraries/three/addons/utils/CameraUtils.js +82 -0
  349. package/Resources/WebLibraries/three/addons/utils/ColorUtils.js +76 -0
  350. package/Resources/WebLibraries/three/addons/utils/GaussianSplatUtils.js +229 -0
  351. package/Resources/WebLibraries/three/addons/utils/GeometryCompressionUtils.js +547 -0
  352. package/Resources/WebLibraries/three/addons/utils/GeometryUtils.js +226 -0
  353. package/Resources/WebLibraries/three/addons/utils/LDrawUtils.js +211 -0
  354. package/Resources/WebLibraries/three/addons/utils/SceneOptimizer.js +459 -0
  355. package/Resources/WebLibraries/three/addons/utils/SceneUtils.js +363 -0
  356. package/Resources/WebLibraries/three/addons/utils/ShadowMapViewer.js +244 -0
  357. package/Resources/WebLibraries/three/addons/utils/ShadowMapViewerGPU.js +233 -0
  358. package/Resources/WebLibraries/three/addons/utils/SkeletonUtils.js +496 -0
  359. package/Resources/WebLibraries/three/addons/utils/SortUtils.js +175 -0
  360. package/Resources/WebLibraries/three/addons/utils/UVsDebug.js +173 -0
  361. package/Resources/WebLibraries/three/addons/utils/WebGLTextureUtils.js +115 -0
  362. package/Resources/WebLibraries/three/addons/utils/WebGPUTextureUtils.js +81 -0
  363. package/Resources/WebLibraries/three/addons/utils/WorkerPool.js +167 -0
  364. package/Resources/WebLibraries/three/addons/utils/unwrapUVs.js +865 -0
  365. package/Resources/WebLibraries/three/three.core.js +61162 -0
  366. package/Resources/WebLibraries/three/three.module.js +19537 -0
  367. package/Resources/WebLibraries/three/three.tsl.js +41903 -0
  368. package/Resources/WebLibraries/three/three.webgpu.js +53714 -0
  369. package/Resources/skills/2d-game/SKILL.md +305 -0
  370. package/Resources/skills/3d-game/SKILL.md +274 -0
  371. package/Resources/skills/accounts/SKILL.md +41 -0
  372. package/Resources/skills/android-design/SKILL.md +159 -0
  373. package/Resources/skills/app-ai/SKILL.md +154 -0
  374. package/Resources/skills/app-intents/SKILL.md +31 -0
  375. package/Resources/skills/app-kinds/SKILL.md +122 -0
  376. package/Resources/skills/apple-watch/SKILL.md +43 -0
  377. package/Resources/skills/assets/SKILL.md +183 -0
  378. package/Resources/skills/building-blocks/SKILL.md +97 -0
  379. package/Resources/skills/device-control/SKILL.md +56 -0
  380. package/Resources/skills/device-integrations/SKILL.md +278 -0
  381. package/Resources/skills/finder-files/SKILL.md +19 -0
  382. package/Resources/skills/game/SKILL.md +414 -0
  383. package/Resources/skills/game-3d/SKILL.md +12 -0
  384. package/Resources/skills/game-art/SKILL.md +11 -0
  385. package/Resources/skills/game-feel/SKILL.md +13 -0
  386. package/Resources/skills/game-levels/SKILL.md +12 -0
  387. package/Resources/skills/game-live/SKILL.md +12 -0
  388. package/Resources/skills/game-physics/SKILL.md +13 -0
  389. package/Resources/skills/game-playtest/SKILL.md +26 -0
  390. package/Resources/skills/game-ui/SKILL.md +278 -0
  391. package/Resources/skills/github-projects/SKILL.md +59 -0
  392. package/Resources/skills/icloud-sync/SKILL.md +30 -0
  393. package/Resources/skills/iphone-hardware/SKILL.md +57 -0
  394. package/Resources/skills/iphone-widgets/SKILL.md +53 -0
  395. package/Resources/skills/lg-developer-mode/SKILL.md +152 -0
  396. package/Resources/skills/mac-widgets/SKILL.md +60 -0
  397. package/Resources/skills/maps/SKILL.md +8 -0
  398. package/Resources/skills/menu-bar/SKILL.md +36 -0
  399. package/Resources/skills/more-apps/SKILL.md +53 -0
  400. package/Resources/skills/phone-controllers/SKILL.md +79 -0
  401. package/Resources/skills/phone-pages/SKILL.md +173 -0
  402. package/Resources/skills/roku-developer-mode/SKILL.md +106 -0
  403. package/Resources/skills/scene-3d/SKILL.md +27 -0
  404. package/Resources/skills/scripting/SKILL.md +17 -0
  405. package/Resources/skills/share-extension/SKILL.md +22 -0
  406. package/Resources/skills/tv-design/SKILL.md +72 -0
  407. package/Resources/skills/web-app/SKILL.md +136 -0
  408. package/Resources/skills/web-game/SKILL.md +95 -0
  409. package/Resources/skills/web-or-native/SKILL.md +103 -0
  410. package/Resources/skills/wish-links/SKILL.md +156 -0
  411. package/THIRD_PARTY_NOTICES.md +170 -0
  412. package/cli/android.mjs +941 -0
  413. package/cli/browser.mjs +268 -0
  414. package/cli/calls.mjs +390 -0
  415. package/cli/dev.mjs +773 -0
  416. package/cli/devices.mjs +984 -0
  417. package/cli/lamp.mjs +1016 -0
  418. package/cli/lampapp.mjs +332 -0
  419. package/cli/lamps/android-host/LampPageGateway.kt +345 -0
  420. package/cli/lamps/android-host/app/build.gradle.kts +40 -0
  421. package/cli/lamps/android-host/build.gradle.kts +4 -0
  422. package/cli/lamps/android-host/game/AndroidManifest.xml +33 -0
  423. package/cli/lamps/android-host/game/MainActivity.kt +173 -0
  424. package/cli/lamps/android-host/gradle/libs.versions.toml +39 -0
  425. package/cli/lamps/android-host/gradle.properties +8 -0
  426. package/cli/lamps/android-host/page/AndroidManifest.xml +35 -0
  427. package/cli/lamps/android-host/page/MainActivity.kt +193 -0
  428. package/cli/lamps/android-host/settings.gradle.kts +30 -0
  429. package/cli/lamps/android-host/tools.json +43 -0
  430. package/cli/lamps/lamp-controllers.js +2 -0
  431. package/cli/lamps/lamp-for-games.js +6863 -0
  432. package/cli/lamps/lamp.js +7023 -0
  433. package/cli/lamps/mac-starter/.lamp/meta.json +1 -0
  434. package/cli/lamps/mac-starter/APP.md +12 -0
  435. package/cli/lamps/mac-starter/Package.swift +8 -0
  436. package/cli/lamps/mac-starter/Sources/App.swift +11 -0
  437. package/cli/lamps/mac-starter/Sources/ContentView.swift +17 -0
  438. package/cli/lamps/mac-starter/Sources/LampSupport.swift +18097 -0
  439. package/cli/lamps/mac-starter/build.sh +336 -0
  440. package/cli/lamps/mac-starter/gitignore +3 -0
  441. package/cli/lamps/mac-starter/lamp-starter.json +6 -0
  442. package/cli/lamps/web-starter/APP.md +8 -0
  443. package/cli/lamps/web-starter/app.js +1 -0
  444. package/cli/lamps/web-starter/index.html +17 -0
  445. package/cli/lamps/web-starter/lamp-starter.json +5 -0
  446. package/cli/lamps/web-starter/lamp.js +7023 -0
  447. package/cli/lamps/web-starter/style.css +25 -0
  448. package/cli/link.mjs +138 -0
  449. package/cli/mac.mjs +621 -0
  450. package/cli/mdns.mjs +205 -0
  451. package/cli/msix.mjs +413 -0
  452. package/cli/network.mjs +209 -0
  453. package/cli/outside.mjs +140 -0
  454. package/cli/page.js +165 -0
  455. package/cli/place.mjs +298 -0
  456. package/cli/png.mjs +184 -0
  457. package/cli/share.mjs +202 -0
  458. package/cli/skill/SKILL.md +255 -0
  459. package/cli/skills.mjs +71 -0
  460. package/cli/state.mjs +173 -0
  461. package/cli/update.mjs +57 -0
  462. package/package.json +20 -4
  463. package/site/lib/quota.js +59 -0
  464. package/site/lib/shared-wishes.js +996 -0
@@ -0,0 +1,727 @@
1
+ import { DataTexture, RenderTarget, RepeatWrapping, Vector2, Vector3, Node, QuadMesh, NodeMaterial, RendererUtils, RedFormat } from 'three/webgpu';
2
+ import { reference, getNormalFromDepth, getViewPosition, getScreenPositionFromClip, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, vec2, vec3, vec4, int, dot, max, min, pow, abs, If, textureSize, sin, cos, PI, texture, passTexture, mat3, normalize, cross, mix, acos, clamp, interleavedGradientNoise, screenCoordinate, rand, context, isBackgroundDepth, projectionDepth } from 'three/tsl';
3
+
4
+ const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
+ const _size = /*@__PURE__*/ new Vector2();
6
+
7
+ // From Activision GTAO paper: https://www.activision.com/cdn/research/s2016_pbs_activision_occlusion.pptx
8
+ const _temporalRotations = [ 60, 300, 180, 240, 120, 0 ];
9
+ const _spatialOffsets = [ 0, 0.5, 0.25, 0.75 ];
10
+
11
+ let _rendererState;
12
+
13
+ /**
14
+ * Post processing node for applying Ground Truth Ambient Occlusion (GTAO) to a scene.
15
+ * ```js
16
+ * const renderPipeline = new THREE.RenderPipeline( renderer );
17
+ *
18
+ * // pre-pass for normals and depth
19
+ *
20
+ * const prePass = pass( scene, camera );
21
+ * prePass.setMRT( mrt( {
22
+ * output: normalView
23
+ * } ) );
24
+ *
25
+ * const prePassNormal = prePass.getTextureNode();
26
+ * const prePassDepth = prePass.getTextureNode( 'depth' );
27
+ *
28
+ * // scene pass
29
+ *
30
+ * const scenePass = pass( scene, camera );
31
+ *
32
+ * // ao
33
+ *
34
+ * const aoPass = ao( prePassDepth, prePassNormal, camera );
35
+ * const aoPassOutput = aoPass.getTextureNode();
36
+ *
37
+ * // apply the ambient occlusion to the scene
38
+ *
39
+ * scenePass.contextNode = builtinAOContext( aoPassOutput.sample( screenUV ).r );
40
+ *
41
+ * renderPipeline.outputNode = scenePass;
42
+ * ```
43
+ *
44
+ * Reference: [Practical Real-Time Strategies for Accurate Indirect Occlusion](https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf).
45
+ *
46
+ * @augments Node
47
+ * @three_import import { ao } from 'three/addons/tsl/display/GTAONode.js';
48
+ */
49
+ class GTAONode extends Node {
50
+
51
+ static get type() {
52
+
53
+ return 'GTAONode';
54
+
55
+ }
56
+
57
+ /**
58
+ * Constructs a new GTAO node.
59
+ *
60
+ * @param {Node<float>} depthNode - A node that represents the scene's depth.
61
+ * @param {?Node<vec3>} normalNode - A node that represents the scene's normals.
62
+ * @param {Camera} camera - The camera the scene is rendered with.
63
+ */
64
+ constructor( depthNode, normalNode, camera ) {
65
+
66
+ super( 'float' );
67
+
68
+ /**
69
+ * A node that represents the scene's depth.
70
+ *
71
+ * @type {Node<float>}
72
+ */
73
+ this.depthNode = depthNode;
74
+
75
+ /**
76
+ * A node that represents the scene's normals. If no normals are passed to the
77
+ * constructor (because MRT is not available), normals can be automatically
78
+ * reconstructed from depth values in the shader.
79
+ *
80
+ * @type {?Node<vec3>}
81
+ */
82
+ this.normalNode = normalNode;
83
+
84
+ /**
85
+ * The resolution scale. By default the effect is rendered in full resolution
86
+ * for best quality but a value of `0.5` should be sufficient for most scenes.
87
+ *
88
+ * @type {number}
89
+ * @default 1
90
+ */
91
+ this.resolutionScale = 1;
92
+
93
+ /**
94
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
95
+ * its effect once per frame in `updateBefore()`.
96
+ *
97
+ * @type {string}
98
+ * @default 'frame'
99
+ */
100
+ this.updateBeforeType = NodeUpdateType.FRAME;
101
+
102
+ /**
103
+ * The render target the ambient occlusion is rendered into.
104
+ *
105
+ * @private
106
+ * @type {RenderTarget}
107
+ */
108
+ this._aoRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false, format: RedFormat } );
109
+ this._aoRenderTarget.texture.name = 'GTAONode.AO';
110
+
111
+ // uniforms
112
+
113
+ /**
114
+ * The radius of the ambient occlusion.
115
+ *
116
+ * @type {UniformNode<float>}
117
+ */
118
+ this.radius = uniform( 0.25 );
119
+
120
+ /**
121
+ * The thickness of the ambient occlusion.
122
+ *
123
+ * @type {UniformNode<float>}
124
+ */
125
+ this.thickness = uniform( 1 );
126
+
127
+ /**
128
+ * @deprecated since r186. The new distance model "Quadratic Ray Stepping"
129
+ * does not need it anymore.
130
+ *
131
+ * @type {UniformNode<float>}
132
+ */
133
+ this.distanceExponent = uniform( 1 );
134
+
135
+ /**
136
+ * @deprecated since r186. The new distance model "Quadratic Ray Stepping"
137
+ * does not need it anymore.
138
+ *
139
+ * @type {UniformNode<float>}
140
+ */
141
+ this.distanceFallOff = uniform( 1 );
142
+
143
+ /**
144
+ * The scale of the ambient occlusion.
145
+ *
146
+ * @type {UniformNode<float>}
147
+ */
148
+ this.scale = uniform( 1 );
149
+
150
+ /**
151
+ * How many samples are used to compute the AO.
152
+ * A higher value results in better quality but also
153
+ * in a more expensive runtime behavior.
154
+ *
155
+ * Note: Changing this member triggers a shader recompilation.
156
+ *
157
+ * @type {UniformNode<float>}
158
+ */
159
+ this.samples = uniform( 16 );
160
+
161
+ /**
162
+ * Whether to use temporal filtering or not. Setting this property to
163
+ * `true` requires the usage of `TRAANode`. This will help to reduce noise
164
+ * although it introduces typical TAA artifacts like ghosting and temporal
165
+ * instabilities.
166
+ *
167
+ * If setting this property to `false`, a manual denoise via `DenoiseNode`
168
+ * might be required.
169
+ *
170
+ * @type {boolean}
171
+ * @default false
172
+ */
173
+ this.useTemporalFiltering = false;
174
+
175
+ /**
176
+ * The resolution of the effect. Can be scaled via `resolutionScale`.
177
+ *
178
+ * @private
179
+ * @type {UniformNode<vec2>}
180
+ */
181
+ this._resolution = uniform( new Vector2() );
182
+
183
+ /**
184
+ * The internal noise texture used by the AO.
185
+ *
186
+ * @private
187
+ * @type {DataTexture}
188
+ */
189
+ this._noiseTexture = generateMagicSquareNoise();
190
+
191
+ /**
192
+ * The node represents the internal noise texture used by the AO.
193
+ *
194
+ * @private
195
+ * @type {TextureNode}
196
+ */
197
+ this._noiseNode = texture( this._noiseTexture );
198
+
199
+ /**
200
+ * Represents the projection matrix of the scene's camera.
201
+ *
202
+ * @private
203
+ * @type {UniformNode<mat4>}
204
+ */
205
+ this._cameraProjectionMatrix = uniform( camera.projectionMatrix );
206
+
207
+ /**
208
+ * Represents the inverse projection matrix of the scene's camera.
209
+ *
210
+ * @private
211
+ * @type {UniformNode<mat4>}
212
+ */
213
+ this._cameraProjectionMatrixInverse = uniform( camera.projectionMatrixInverse );
214
+
215
+ /**
216
+ * Represents the near value of the scene's camera.
217
+ *
218
+ * @private
219
+ * @type {ReferenceNode<float>}
220
+ */
221
+ this._cameraNear = reference( 'near', 'float', camera );
222
+
223
+ /**
224
+ * Represents the far value of the scene's camera.
225
+ *
226
+ * @private
227
+ * @type {ReferenceNode<float>}
228
+ */
229
+ this._cameraFar = reference( 'far', 'float', camera );
230
+
231
+ /**
232
+ * A reference to the scene's camera.
233
+ *
234
+ * @private
235
+ * @type {Camera}
236
+ */
237
+ this._camera = camera;
238
+
239
+ /**
240
+ * Temporal direction that influences the rotation angle for each slice.
241
+ *
242
+ * @private
243
+ * @type {UniformNode<float>}
244
+ */
245
+ this._temporalDirection = uniform( 0 );
246
+
247
+ /**
248
+ * Temporal offset added to the initial ray step.
249
+ *
250
+ * @private
251
+ * @type {UniformNode<float>}
252
+ */
253
+ this._temporalOffset = uniform( 0 );
254
+
255
+ /**
256
+ * Resolution scale uniform.
257
+ *
258
+ * @private
259
+ * @type {UniformNode<float>}
260
+ */
261
+ this._resolutionScale = uniform( 0 );
262
+
263
+ /**
264
+ * The TSL function that computes the AO. Required for rebuild.
265
+ *
266
+ * @private
267
+ * @type {?Function}
268
+ * @default null
269
+ */
270
+ this._ao = null;
271
+
272
+ /**
273
+ * The sample count currently baked into the shader.
274
+ *
275
+ * @private
276
+ * @type {number}
277
+ */
278
+ this._currentSamples = - 1;
279
+
280
+ /**
281
+ * The shared builder context. Required for rebuild.
282
+ *
283
+ * @private
284
+ * @type {?Object}
285
+ * @default null
286
+ */
287
+ this._sharedContext = null;
288
+
289
+ /**
290
+ * The material that is used to render the effect.
291
+ *
292
+ * @private
293
+ * @type {NodeMaterial}
294
+ */
295
+ this._material = new NodeMaterial();
296
+ this._material.name = 'GTAO';
297
+
298
+ /**
299
+ * The result of the effect is represented as a separate texture node.
300
+ *
301
+ * @private
302
+ * @type {PassTextureNode}
303
+ */
304
+ this._textureNode = passTexture( this, this._aoRenderTarget.texture );
305
+
306
+ }
307
+
308
+ /**
309
+ * Returns the result of the effect as a texture node.
310
+ *
311
+ * @return {PassTextureNode} A texture node that represents the result of the effect.
312
+ */
313
+ getTextureNode() {
314
+
315
+ return this._textureNode;
316
+
317
+ }
318
+
319
+ /**
320
+ * Sets the size of the effect.
321
+ *
322
+ * @param {number} width - The width of the effect.
323
+ * @param {number} height - The height of the effect.
324
+ */
325
+ setSize( width, height ) {
326
+
327
+ width = Math.round( this.resolutionScale * width );
328
+ height = Math.round( this.resolutionScale * height );
329
+
330
+ this._resolutionScale.value = this.resolutionScale;
331
+ this._resolution.value.set( width, height );
332
+ this._aoRenderTarget.setSize( width, height );
333
+
334
+ }
335
+
336
+ /**
337
+ * This method is used to render the effect once per frame.
338
+ *
339
+ * @param {NodeFrame} frame - The current node frame.
340
+ */
341
+ updateBefore( frame ) {
342
+
343
+ const { renderer } = frame;
344
+
345
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
346
+
347
+ // update temporal uniforms
348
+
349
+ if ( this.useTemporalFiltering === true ) {
350
+
351
+ const frameId = frame.frameId;
352
+
353
+ this._temporalDirection.value = _temporalRotations[ frameId % 6 ] / 360;
354
+ this._temporalOffset.value = _spatialOffsets[ frameId % 4 ];
355
+
356
+ } else {
357
+
358
+ this._temporalDirection.value = 0;
359
+ this._temporalOffset.value = 1;
360
+
361
+ }
362
+
363
+ // rebuild the material if the sample count has changed
364
+
365
+ if ( this.samples.value !== this._currentSamples ) {
366
+
367
+ this._currentSamples = this.samples.value;
368
+
369
+ this._material.contextNode = context( this._sharedContext );
370
+ this._material.fragmentNode = this._ao();
371
+ this._material.needsUpdate = true;
372
+
373
+ }
374
+
375
+ //
376
+
377
+ const size = renderer.getDrawingBufferSize( _size );
378
+ this.setSize( size.width, size.height );
379
+
380
+ _quadMesh.material = this._material;
381
+ _quadMesh.name = 'AO';
382
+
383
+ // clear
384
+
385
+ renderer.setClearColor( 0xffffff, 1 );
386
+
387
+ // ao
388
+
389
+ renderer.setRenderTarget( this._aoRenderTarget );
390
+ _quadMesh.render( renderer );
391
+
392
+ // restore
393
+
394
+ RendererUtils.restoreRendererState( renderer, _rendererState );
395
+
396
+ }
397
+
398
+ /**
399
+ * This method is used to setup the effect's TSL code.
400
+ *
401
+ * @param {NodeBuilder} builder - The current node builder.
402
+ * @return {PassTextureNode}
403
+ */
404
+ setup( builder ) {
405
+
406
+ const uvNode = uv();
407
+
408
+ const sampleDepth = ( uv ) => projectionDepth( this.depthNode.sample( uv ).r, this._cameraNear, this._cameraFar );
409
+
410
+ const sampleCenterDepth = ( uv ) => {
411
+
412
+ // Sidestep the nearest-rounding during depth access for the unjittered center pixel to avoid banding
413
+
414
+ const g = this.depthNode.gather().sample( uv );
415
+ const depth = builder.renderer.reversedDepthBuffer === true ? max( max( g.x, g.y ), max( g.z, g.w ) ) : min( min( g.x, g.y ), min( g.z, g.w ) );
416
+
417
+ return projectionDepth( depth, this._cameraNear, this._cameraFar );
418
+
419
+ };
420
+
421
+ const sampleNoise = ( uv ) => this._noiseNode.sample( uv );
422
+ const sampleNormal = ( uv ) => ( this.normalNode !== null ) ? this.normalNode.sample( uv ).rgb.normalize() : getNormalFromDepth( uv, this.depthNode.value, this._cameraProjectionMatrixInverse );
423
+
424
+ const isValidSample = Fn( ( [ uv, centerTexel, size ] ) => {
425
+
426
+ const texel = uv.mul( size ).floor().toConst();
427
+
428
+ // rejects off-screen samples and samples that fall into the center texel
429
+
430
+ return uv.x.greaterThan( 0 ).and( uv.x.lessThan( 1 ) ).and( uv.y.greaterThan( 0 ) ).and( uv.y.lessThan( 1 ) )
431
+ .and( texel.x.notEqual( centerTexel.x ).or( texel.y.notEqual( centerTexel.y ) ) );
432
+
433
+ }, { uv: 'vec2', centerTexel: 'vec2', size: 'vec2', return: 'bool' } );
434
+
435
+ this._ao = Fn( () => {
436
+
437
+ const depth = this._resolutionScale.lessThan( 1 ).select( sampleCenterDepth( uvNode ), sampleDepth( uvNode ) ).toConst();
438
+
439
+ isBackgroundDepth( depth ).discard();
440
+
441
+ const depthSize = vec2( textureSize( this.depthNode, 0 ) ).toConst();
442
+ const centerTexel = uvNode.mul( depthSize ).floor().toConst();
443
+
444
+ const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toConst();
445
+ const viewNormal = sampleNormal( uvNode ).toConst();
446
+
447
+ const radius = this.radius;
448
+ const invRadius = radius.reciprocal().toConst();
449
+ const viewDir = ( this._camera.isPerspectiveCamera === true ) ? normalize( viewPosition.xyz.negate() ).toConst() : vec3( 0, 0, 1 ).toConst();
450
+ const clipPosition = this._cameraProjectionMatrix.mul( vec4( viewPosition, 1.0 ) ).toConst();
451
+
452
+ const noiseResolution = textureSize( this._noiseNode, 0 );
453
+ let noiseUv = vec2( uvNode.x, uvNode.y.oneMinus() );
454
+ noiseUv = noiseUv.mul( this._resolution.div( noiseResolution ) );
455
+
456
+ const noiseTexel = sampleNoise( noiseUv );
457
+ const randomVec = noiseTexel.xyz.mul( 2.0 ).sub( 1.0 );
458
+ const tangent = vec3( randomVec.xy, 0.0 ).normalize();
459
+ const bitangent = vec3( tangent.y.mul( - 1.0 ), tangent.x, 0.0 );
460
+ const kernelMatrix = mat3( tangent, bitangent, vec3( 0.0, 0.0, 1.0 ) );
461
+
462
+ // The sample count is baked into the shader so loop unrolling works
463
+
464
+ const SAMPLES = this.samples.value;
465
+ const DIRECTIONS = SAMPLES < 30 ? 3 : 5;
466
+ const STEPS = Math.ceil( SAMPLES / DIRECTIONS );
467
+ const invSteps = 1 / STEPS;
468
+
469
+ const ao = float( 0 ).toVar();
470
+
471
+ // Each iteration analyzes one vertical "slice" of the 3D space around the fragment.
472
+
473
+ // Per-step phase jitter for spatio-temporal decorrelation.
474
+ const noiseJitterIdx = this._temporalDirection.mul( 0.02 );
475
+ const stepJitter = interleavedGradientNoise( screenCoordinate.add( this._temporalOffset ) ).add( rand( uvNode.add( noiseJitterIdx ).mul( 2 ).sub( 1 ) ) );
476
+
477
+ Loop( { start: int( 0 ), end: int( DIRECTIONS ), type: 'int', condition: '<' }, ( { i } ) => {
478
+
479
+ const angle = float( i ).div( DIRECTIONS ).mul( PI ).add( this._temporalDirection ).toConst();
480
+ const sampleDir = kernelMatrix.mul( vec3( cos( angle ), sin( angle ), 0 ) ).toConst();
481
+ const clipDirRadius = this._cameraProjectionMatrix.mul( vec4( sampleDir, 0.0 ) ).mul( radius ).toConst();
482
+
483
+ const sliceBitangent = normalize( cross( sampleDir, viewDir ) ).toConst();
484
+ const sliceTangent = cross( sliceBitangent, viewDir ).toConst();
485
+
486
+ // Project the view normal onto the slice plane (remove component along sliceBitangent).
487
+ // The unnormalized length is the foreshortening weight applied at slice integration.
488
+ // (Activision GTAO paper, Section 3.2 "Per-pixel sampling".)
489
+ const projNRaw = viewNormal.sub( sliceBitangent.mul( dot( viewNormal, sliceBitangent ) ) ).toConst();
490
+ const projNLen = projNRaw.length().toConst();
491
+ const projN = projNRaw.div( max( projNLen, float( 0.0001 ) ) ).toConst();
492
+
493
+ // γ — angle of projN within the slice plane, signed by the tangent direction.
494
+ const nSin = dot( projN, sliceTangent ).toConst();
495
+ const nCos = clamp( dot( projN, viewDir ), 0, 1 ).toConst();
496
+ const signNSin = nSin.greaterThanEqual( 0 ).select( float( 1 ), float( - 1 ) );
497
+ const angleN = signNSin.mul( acos( nCos ) ).toConst();
498
+
499
+ const tangentToNormalInSlice = cross( projN, sliceBitangent ).toConst();
500
+ const cosHorizon = dot( viewDir, tangentToNormalInSlice ).toConst();
501
+ const cosHorizons = vec2( cosHorizon, cosHorizon.negate() ).toVar();
502
+
503
+ // For each slice, the inner loop performs ray marching to find the horizons.
504
+
505
+ Loop( { end: int( STEPS ), type: 'int', name: 'j', condition: '<' }, ( { j } ) => {
506
+
507
+ // Quadratic step distribution ( sampleDist = t² ) concentrates samples in the
508
+ // near-field. (Blender's Eevee adaptation)
509
+ const t = float( j ).add( 1.0 ).add( stepJitter ).mul( invSteps ).toConst();
510
+ const sampleDist = t.mul( t );
511
+ const clipOffset = clipDirRadius.mul( sampleDist ).toConst();
512
+
513
+ // The loop marches in two opposite directions (x and y) along the slice's line to find the horizon on both sides.
514
+
515
+ // x
516
+
517
+ const sampleScreenPositionX = getScreenPositionFromClip( clipPosition.add( clipOffset ) ).toConst();
518
+ const sampleDepthX = sampleDepth( sampleScreenPositionX ).toConst();
519
+ const sampleSceneViewPositionX = getViewPosition( sampleScreenPositionX, sampleDepthX, this._cameraProjectionMatrixInverse ).toConst();
520
+ const viewDeltaX = sampleSceneViewPositionX.sub( viewPosition ).toConst();
521
+ const lenX = viewDeltaX.length().toConst();
522
+
523
+ // Manual normalize guards against zero-length delta.
524
+ const sHX = dot( viewDir, viewDeltaX ).div( max( lenX, float( 0.0001 ) ) );
525
+
526
+ // Sphere falloff: ( dist / radius )² fades the sample's horizon contribution
527
+ // back toward the prior horizon as it approaches the radius boundary.
528
+ // (squared variant of the paper's near-field attenuation;
529
+ // Activision GTAO paper, Section 4.3 "Bounding the sampling area")
530
+ const distFacX = min( lenX.mul( invRadius ), 1 );
531
+ const distFacSqX = distFacX.mul( distFacX );
532
+
533
+ If( isValidSample( sampleScreenPositionX, centerTexel, depthSize ).and( abs( viewDeltaX.z ).lessThan( this.thickness ) ), () => {
534
+
535
+ cosHorizons.x.assign( mix( max( cosHorizons.x, sHX ), cosHorizons.x, distFacSqX ) );
536
+
537
+ } );
538
+
539
+ // y
540
+
541
+ const sampleScreenPositionY = getScreenPositionFromClip( clipPosition.sub( clipOffset ) ).toConst();
542
+ const sampleDepthY = sampleDepth( sampleScreenPositionY ).toConst();
543
+ const sampleSceneViewPositionY = getViewPosition( sampleScreenPositionY, sampleDepthY, this._cameraProjectionMatrixInverse ).toConst();
544
+ const viewDeltaY = sampleSceneViewPositionY.sub( viewPosition ).toConst();
545
+ const lenY = viewDeltaY.length().toConst();
546
+
547
+ const sHY = dot( viewDir, viewDeltaY ).div( max( lenY, float( 0.0001 ) ) );
548
+
549
+ const distFacY = min( lenY.mul( invRadius ), 1 );
550
+ const distFacSqY = distFacY.mul( distFacY );
551
+
552
+ If( isValidSample( sampleScreenPositionY, centerTexel, depthSize ).and( abs( viewDeltaY.z ).lessThan( this.thickness ) ), () => {
553
+
554
+ cosHorizons.y.assign( mix( max( cosHorizons.y, sHY ), cosHorizons.y, distFacSqY ) );
555
+
556
+ } );
557
+
558
+ } );
559
+
560
+ // Cosine-weighted inner integral, closed-form (Activision GTAO paper, Eq. 7).
561
+ // Per horizon h_i: term_i = −cos( 2 h_i − γ ) + cos( γ ) + 2 h_i sin( γ )
562
+ // The 0.25 factor is ½ (integral normalization) × ½ (averaging the two horizons).
563
+ //
564
+ // In this slice setup `sliceTangent = cross( sliceBitangent, viewDir )` works out
565
+ // opposite to `sampleDir`, so the +sampleDir samples (cosHorizons.x) live on the
566
+ // −T side of the slice and −sampleDir samples (cosHorizons.y) on the +T side.
567
+ // γ is signed by +T (sliceTangent), so hPos must read from cosHorizons.y.
568
+
569
+ const hPos = acos( cosHorizons.y ).toConst();
570
+ const hNeg = acos( cosHorizons.x ).negate().toConst();
571
+
572
+ const termPos = cos( hPos.mul( 2 ).sub( angleN ) ).negate().add( nCos ).add( hPos.mul( 2 ).mul( nSin ) );
573
+ const termNeg = cos( hNeg.mul( 2 ).sub( angleN ) ).negate().add( nCos ).add( hNeg.mul( 2 ).mul( nSin ) );
574
+ const a = termPos.add( termNeg ).mul( 0.25 );
575
+
576
+ // |projN| is the foreshortening weight from the per-slice normal projection.
577
+ ao.addAssign( projNLen.mul( a ) );
578
+
579
+ } );
580
+
581
+ ao.assign( clamp( ao.div( DIRECTIONS ), 0, 1 ) );
582
+ ao.assign( pow( ao, this.scale ) );
583
+
584
+ return ao;
585
+
586
+ } );
587
+
588
+ this._sharedContext = builder.getSharedContext();
589
+ this._currentSamples = this.samples.value;
590
+
591
+ this._material.contextNode = context( builder.getSharedContext() );
592
+ this._material.fragmentNode = this._ao();
593
+ this._material.needsUpdate = true;
594
+
595
+ //
596
+
597
+ return this._textureNode;
598
+
599
+ }
600
+
601
+ /**
602
+ * Frees internal resources. This method should be called
603
+ * when the effect is no longer required.
604
+ */
605
+ dispose() {
606
+
607
+ super.dispose();
608
+
609
+ this._aoRenderTarget.dispose();
610
+
611
+ this._noiseTexture.dispose();
612
+
613
+ this._material.dispose();
614
+
615
+ }
616
+
617
+ }
618
+
619
+ export default GTAONode;
620
+
621
+ /**
622
+ * Generates the AO's noise texture for the given size.
623
+ *
624
+ * @param {number} [size=5] - The noise size.
625
+ * @return {DataTexture} The generated noise texture.
626
+ */
627
+ function generateMagicSquareNoise( size = 5 ) {
628
+
629
+ const noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );
630
+ const magicSquare = generateMagicSquare( noiseSize );
631
+ const noiseSquareSize = magicSquare.length;
632
+ const data = new Uint8Array( noiseSquareSize * 4 );
633
+
634
+ for ( let inx = 0; inx < noiseSquareSize; ++ inx ) {
635
+
636
+ const iAng = magicSquare[ inx ];
637
+ const angle = ( 2 * Math.PI * iAng ) / noiseSquareSize;
638
+ const randomVec = new Vector3(
639
+ Math.cos( angle ),
640
+ Math.sin( angle ),
641
+ 0
642
+ ).normalize();
643
+ data[ inx * 4 ] = ( randomVec.x * 0.5 + 0.5 ) * 255;
644
+ data[ inx * 4 + 1 ] = ( randomVec.y * 0.5 + 0.5 ) * 255;
645
+ data[ inx * 4 + 2 ] = 127;
646
+ data[ inx * 4 + 3 ] = 255;
647
+
648
+ }
649
+
650
+ const noiseTexture = new DataTexture( data, noiseSize, noiseSize );
651
+ noiseTexture.wrapS = RepeatWrapping;
652
+ noiseTexture.wrapT = RepeatWrapping;
653
+ noiseTexture.needsUpdate = true;
654
+
655
+ return noiseTexture;
656
+
657
+ }
658
+
659
+ /**
660
+ * Computes an array of magic square values required to generate the noise texture.
661
+ *
662
+ * @param {number} size - The noise size.
663
+ * @return {Array<number>} The magic square values.
664
+ */
665
+ function generateMagicSquare( size ) {
666
+
667
+ const noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );
668
+ const noiseSquareSize = noiseSize * noiseSize;
669
+ const magicSquare = Array( noiseSquareSize ).fill( 0 );
670
+ let i = Math.floor( noiseSize / 2 );
671
+ let j = noiseSize - 1;
672
+
673
+ for ( let num = 1; num <= noiseSquareSize; ) {
674
+
675
+ if ( i === - 1 && j === noiseSize ) {
676
+
677
+ j = noiseSize - 2;
678
+ i = 0;
679
+
680
+ } else {
681
+
682
+ if ( j === noiseSize ) {
683
+
684
+ j = 0;
685
+
686
+ }
687
+
688
+ if ( i < 0 ) {
689
+
690
+ i = noiseSize - 1;
691
+
692
+ }
693
+
694
+ }
695
+
696
+ if ( magicSquare[ i * noiseSize + j ] !== 0 ) {
697
+
698
+ j -= 2;
699
+ i ++;
700
+ continue;
701
+
702
+ } else {
703
+
704
+ magicSquare[ i * noiseSize + j ] = num ++;
705
+
706
+ }
707
+
708
+ j ++;
709
+ i --;
710
+
711
+ }
712
+
713
+ return magicSquare;
714
+
715
+ }
716
+
717
+ /**
718
+ * TSL function for creating a Ground Truth Ambient Occlusion (GTAO) effect.
719
+ *
720
+ * @tsl
721
+ * @function
722
+ * @param {Node<float>} depthNode - A node that represents the scene's depth.
723
+ * @param {?Node<vec3>} normalNode - A node that represents the scene's normals.
724
+ * @param {Camera} camera - The camera the scene is rendered with.
725
+ * @returns {GTAONode}
726
+ */
727
+ export const ao = ( depthNode, normalNode, camera ) => new GTAONode( nodeObject( depthNode ), nodeObject( normalNode ), camera );