@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,698 @@
1
+ import { RenderTarget, Vector2, Node, QuadMesh, NodeMaterial, RendererUtils, MathUtils, RGBFormat, RedFormat, UnsignedInt101111Type, UnsignedByteType } from 'three/webgpu';
2
+ import { clamp, normalize, reference, Fn, NodeUpdateType, uniform, vec4, passTexture, uv, getViewPosition, screenCoordinate, float, sub, fract, dot, vec2, rand, vec3, Loop, mul, PI, cos, sin, uint, cross, acos, sign, pow, luminance, If, max, abs, Break, sqrt, HALF_PI, div, ceil, shiftRight, convertToTexture, bool, getNormalFromDepth, countOneBits, interleavedGradientNoise, property, outputStruct, context, isBackgroundDepth, min, 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 Screen Space Global Illumination (SSGI) to a scene.
15
+ *
16
+ * References:
17
+ * - {@link https://github.com/cdrinmatane/SSRT3}.
18
+ * - {@link https://cdrinmatane.github.io/posts/ssaovb-code/}.
19
+ * - {@link https://cdrinmatane.github.io/cgspotlight-slides/ssilvb_slides.pdf}.
20
+ *
21
+ * The quality and performance of the effect mainly depend on `sliceCount` and `stepCount`.
22
+ * The total number of samples taken per pixel is `sliceCount` * `stepCount` * `2`. Here are some
23
+ * recommended presets depending on whether temporal filtering is used or not.
24
+ *
25
+ * With temporal filtering (recommended):
26
+ *
27
+ * - Low: `sliceCount` of `1`, `stepCount` of `12`.
28
+ * - Medium: `sliceCount` of `2`, `stepCount` of `8`.
29
+ * - High: `sliceCount` of `3`, `stepCount` of `16`.
30
+ *
31
+ * Use for a higher slice count if you notice temporal instabilities like flickering. Reduce the sample
32
+ * count then to mitigate the performance lost.
33
+ *
34
+ * Without temporal filtering:
35
+ *
36
+ * - Low: `sliceCount` of `2`, `stepCount` of `6`.
37
+ * - Medium: `sliceCount` of `3`, `stepCount` of `8`.
38
+ * - High: `sliceCount` of `4`, `stepCount` of `12`.
39
+ *
40
+ * @augments Node
41
+ * @three_import import { ssgi } from 'three/addons/tsl/display/SSGINode.js';
42
+ */
43
+ class SSGINode extends Node {
44
+
45
+ static get type() {
46
+
47
+ return 'SSGINode';
48
+
49
+ }
50
+
51
+ /**
52
+ * Constructs a new SSGI node.
53
+ *
54
+ * @param {TextureNode} beautyNode - A texture node that represents the beauty or scene pass.
55
+ * @param {TextureNode} depthNode - A texture node that represents the scene's depth.
56
+ * @param {TextureNode} normalNode - A texture node that represents the scene's normals.
57
+ * @param {PerspectiveCamera} camera - The camera the scene is rendered with.
58
+ */
59
+ constructor( beautyNode, depthNode, normalNode, camera ) {
60
+
61
+ super( 'vec4' );
62
+
63
+ /**
64
+ * A texture node that represents the beauty or scene pass.
65
+ *
66
+ * @type {TextureNode}
67
+ */
68
+ this.beautyNode = beautyNode;
69
+
70
+ /**
71
+ * A node that represents the scene's depth.
72
+ *
73
+ * @type {TextureNode}
74
+ */
75
+ this.depthNode = depthNode;
76
+
77
+ /**
78
+ * A node that represents the scene's normals. If no normals are passed to the
79
+ * constructor (because MRT is not available), normals can be automatically
80
+ * reconstructed from depth values in the shader.
81
+ *
82
+ * @type {TextureNode}
83
+ */
84
+ this.normalNode = normalNode;
85
+
86
+ /**
87
+ * The resolution scale. Values towards `0.5` noticeably increase noise, so it's
88
+ * recommended to lower the renderer's pixel ratio first. Use this property only
89
+ * for fine-tuning performance.
90
+ *
91
+ * @type {number}
92
+ * @default 1
93
+ */
94
+ this.resolutionScale = 1;
95
+
96
+ /**
97
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
98
+ * its effect once per frame in `updateBefore()`.
99
+ *
100
+ * @type {string}
101
+ * @default 'frame'
102
+ */
103
+ this.updateBeforeType = NodeUpdateType.FRAME;
104
+
105
+ /**
106
+ * Number of per-pixel hemisphere slices. This has a big performance cost and should be kept as low as possible.
107
+ * Should be in the range `[1, 4]`.
108
+ *
109
+ * @type {UniformNode<uint>}
110
+ * @default 1
111
+ */
112
+ this.sliceCount = uniform( 1, 'uint' );
113
+
114
+ /**
115
+ * Number of samples taken along one side of a given hemisphere slice. This has a big performance cost and should
116
+ * be kept as low as possible. Should be in the range `[1, 32]`.
117
+ *
118
+ * @type {UniformNode<uint>}
119
+ * @default 12
120
+ */
121
+ this.stepCount = uniform( 12, 'uint' );
122
+
123
+ /**
124
+ * Power function applied to AO to make it appear darker/lighter. Should be in the range `[0, 4]`.
125
+ *
126
+ * @type {UniformNode<float>}
127
+ * @default 1
128
+ */
129
+ this.aoIntensity = uniform( 1, 'float' );
130
+
131
+ /**
132
+ * Intensity of the indirect diffuse light. Should be in the range `[0, 100]`.
133
+ *
134
+ * @type {UniformNode<float>}
135
+ * @default 10
136
+ */
137
+ this.giIntensity = uniform( 10, 'float' );
138
+
139
+ /**
140
+ * Effective sampling radius in world space. AO and GI can only have influence within that radius.
141
+ * Should be in the range `[1, 25]`.
142
+ *
143
+ * @type {UniformNode<float>}
144
+ * @default 12
145
+ */
146
+ this.radius = uniform( 12, 'float' );
147
+
148
+ /**
149
+ * Makes the sample distance in screen space instead of world-space (helps having more detail up close).
150
+ *
151
+ * @type {UniformNode<bool>}
152
+ * @default true
153
+ */
154
+ this.useScreenSpaceSampling = uniform( true, 'bool' );
155
+
156
+ /**
157
+ * Controls samples distribution. It's an exponent applied at each step get increasing step size over the distance.
158
+ * Should be in the range `[1, 3]`.
159
+ *
160
+ * @type {UniformNode<float>}
161
+ * @default 2
162
+ */
163
+ this.expFactor = uniform( 2, 'float' );
164
+
165
+ /**
166
+ * Constant thickness value of objects on the screen in world units. Allows light to pass behind surfaces past that thickness value.
167
+ * Should be in the range `[0.01, 10]`.
168
+ *
169
+ * @type {UniformNode<float>}
170
+ * @default 1
171
+ */
172
+ this.thickness = uniform( 1, 'float' );
173
+
174
+ /**
175
+ * Whether to increase thickness linearly over distance or not (avoid losing detail over the distance).
176
+ *
177
+ * @type {UniformNode<bool>}
178
+ * @default false
179
+ */
180
+ this.useLinearThickness = uniform( false, 'bool' );
181
+
182
+ /**
183
+ * How much light backface surfaces emit.
184
+ * Should be in the range `[0, 1]`.
185
+ *
186
+ * @type {UniformNode<float>}
187
+ * @default 0
188
+ */
189
+ this.backfaceLighting = uniform( 0, 'float' );
190
+
191
+ /**
192
+ * Whether to use temporal filtering or not. Setting this property to
193
+ * `true` requires the usage of `TRAANode`. This will help to reduce noise
194
+ * although it introduces typical TAA artifacts like ghosting and temporal
195
+ * instabilities.
196
+ *
197
+ * If setting this property to `false`, a manual denoise via `DenoiseNode`
198
+ * is required.
199
+ *
200
+ * @type {boolean}
201
+ * @default true
202
+ */
203
+ this.useTemporalFiltering = true;
204
+
205
+ // private uniforms
206
+
207
+ /**
208
+ * The resolution of the effect.
209
+ *
210
+ * @private
211
+ * @type {UniformNode<vec2>}
212
+ */
213
+ this._resolution = uniform( new Vector2() );
214
+
215
+ /**
216
+ * Used to compute the effective step radius when viewSpaceSampling is `false`.
217
+ *
218
+ * @private
219
+ * @type {UniformNode<vec2>}
220
+ */
221
+ this._halfProjScale = uniform( 1 );
222
+
223
+ /**
224
+ * Temporal direction that influences the rotation angle for each slice.
225
+ *
226
+ * @private
227
+ * @type {UniformNode<float>}
228
+ */
229
+ this._temporalDirection = uniform( 0 );
230
+
231
+ /**
232
+ * Temporal offset added to the initial ray step.
233
+ *
234
+ * @private
235
+ * @type {UniformNode<float>}
236
+ */
237
+ this._temporalOffset = uniform( 0 );
238
+
239
+ /**
240
+ * Resolution scale uniform.
241
+ *
242
+ * @private
243
+ * @type {UniformNode<float>}
244
+ */
245
+ this._resolutionScale = uniform( 0 );
246
+
247
+ /**
248
+ * Represents the projection matrix of the scene's camera.
249
+ *
250
+ * @private
251
+ * @type {UniformNode<mat4>}
252
+ */
253
+ this._cameraProjectionMatrix = uniform( camera.projectionMatrix );
254
+
255
+ /**
256
+ * Represents the inverse projection matrix of the scene's camera.
257
+ *
258
+ * @private
259
+ * @type {UniformNode<mat4>}
260
+ */
261
+ this._cameraProjectionMatrixInverse = uniform( camera.projectionMatrixInverse );
262
+
263
+ /**
264
+ * Represents the near value of the scene's camera.
265
+ *
266
+ * @private
267
+ * @type {ReferenceNode<float>}
268
+ */
269
+ this._cameraNear = reference( 'near', 'float', camera );
270
+
271
+ /**
272
+ * Represents the far value of the scene's camera.
273
+ *
274
+ * @private
275
+ * @type {ReferenceNode<float>}
276
+ */
277
+ this._cameraFar = reference( 'far', 'float', camera );
278
+
279
+ /**
280
+ * A reference to the scene's camera.
281
+ *
282
+ * @private
283
+ * @type {PerspectiveCamera}
284
+ */
285
+ this._camera = camera;
286
+
287
+ /**
288
+ * The render target the effect is rendered into. The first texture holds the GI,
289
+ * the second one the AO.
290
+ *
291
+ * @private
292
+ * @type {RenderTarget}
293
+ */
294
+ this._ssgiRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false, count: 2 } );
295
+
296
+ const aoTexture = this._ssgiRenderTarget.textures[ 0 ];
297
+ aoTexture.name = 'SSGI.AO';
298
+ aoTexture.type = UnsignedByteType;
299
+ aoTexture.format = RedFormat;
300
+
301
+ const giTexture = this._ssgiRenderTarget.textures[ 1 ];
302
+ giTexture.name = 'SSGI.GI';
303
+ giTexture.type = UnsignedInt101111Type;
304
+ giTexture.format = RGBFormat;
305
+
306
+ /**
307
+ * The material that is used to render the effect.
308
+ *
309
+ * @private
310
+ * @type {NodeMaterial}
311
+ */
312
+ this._material = new NodeMaterial();
313
+ this._material.name = 'SSGI';
314
+
315
+ /**
316
+ * The AO result of the effect is represented as a separate texture node.
317
+ *
318
+ * @private
319
+ * @type {PassTextureNode}
320
+ */
321
+ this._aoNode = passTexture( this, this._ssgiRenderTarget.textures[ 0 ] );
322
+
323
+ /**
324
+ * The GI result of the effect is represented as a separate texture node.
325
+ *
326
+ * @private
327
+ * @type {PassTextureNode}
328
+ */
329
+ this._giNode = passTexture( this, this._ssgiRenderTarget.textures[ 1 ] );
330
+
331
+ }
332
+
333
+ /**
334
+ * Returns the AO result of the effect as a texture node.
335
+ *
336
+ * @return {PassTextureNode} A texture node that represents the AO result of the effect.
337
+ */
338
+ getAONode() {
339
+
340
+ return this._aoNode;
341
+
342
+ }
343
+
344
+ /**
345
+ * Returns the GI result of the effect as a texture node.
346
+ *
347
+ * @return {PassTextureNode} A texture node that represents the GI result of the effect.
348
+ */
349
+ getGINode() {
350
+
351
+ return this._giNode;
352
+
353
+ }
354
+
355
+ /**
356
+ * Sets the size of the effect.
357
+ *
358
+ * @param {number} width - The width of the effect.
359
+ * @param {number} height - The height of the effect.
360
+ */
361
+ setSize( width, height ) {
362
+
363
+ width = Math.round( this.resolutionScale * width );
364
+ height = Math.round( this.resolutionScale * height );
365
+
366
+ this._resolutionScale.value = this.resolutionScale;
367
+ this._resolution.value.set( width, height );
368
+ this._ssgiRenderTarget.setSize( width, height );
369
+
370
+ this._halfProjScale.value = height / ( Math.tan( this._camera.fov * MathUtils.DEG2RAD * 0.5 ) * 2 ) * 0.5;
371
+
372
+ }
373
+
374
+ /**
375
+ * This method is used to render the effect once per frame.
376
+ *
377
+ * @param {NodeFrame} frame - The current node frame.
378
+ */
379
+ updateBefore( frame ) {
380
+
381
+ const { renderer } = frame;
382
+
383
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
384
+
385
+ //
386
+
387
+ const size = renderer.getDrawingBufferSize( _size );
388
+ this.setSize( size.width, size.height );
389
+
390
+ // update temporal uniforms
391
+
392
+ if ( this.useTemporalFiltering === true ) {
393
+
394
+ const frameId = frame.frameId;
395
+
396
+ this._temporalDirection.value = _temporalRotations[ frameId % 6 ] / 360;
397
+ this._temporalOffset.value = _spatialOffsets[ frameId % 4 ];
398
+
399
+ } else {
400
+
401
+ this._temporalDirection.value = 1;
402
+ this._temporalOffset.value = 1;
403
+
404
+ }
405
+
406
+ //
407
+
408
+ _quadMesh.material = this._material;
409
+ _quadMesh.name = 'SSGI';
410
+
411
+ // clear (white for the AO attachement)
412
+
413
+ renderer.setClearColor( 0xffffff, 1 );
414
+
415
+ // gi
416
+
417
+ renderer.setRenderTarget( this._ssgiRenderTarget );
418
+ _quadMesh.render( renderer );
419
+
420
+ // restore
421
+
422
+ RendererUtils.restoreRendererState( renderer, _rendererState );
423
+
424
+ }
425
+
426
+ /**
427
+ * This method is used to setup the effect's TSL code.
428
+ *
429
+ * @param {NodeBuilder} builder - The current node builder.
430
+ * @return {PassTextureNode}
431
+ */
432
+ setup( builder ) {
433
+
434
+ const renderer = builder.renderer;
435
+
436
+ if ( renderer.backend.isWebGPUBackend === true && renderer.hasFeature( 'rg11b10ufloat-renderable' ) === false ) {
437
+
438
+ console.error( 'THREE.SSGINode: The device does not support the "rg11b10ufloat-renderable" feature which is required for SSGI.' );
439
+
440
+ }
441
+
442
+ const uvNode = uv();
443
+ const MAX_RAY = uint( 32 );
444
+ const globalOccludedBitfield = uint( 0 );
445
+
446
+ const sampleDepth = ( uv ) => projectionDepth( this.depthNode.sample( uv ).r, this._cameraNear, this._cameraFar );
447
+
448
+ const sampleCenterDepth = ( uv ) => {
449
+
450
+ // Sidestep the nearest-rounding during depth access for the unjittered center pixel to avoid banding
451
+
452
+ const g = this.depthNode.gather().sample( uv );
453
+ 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 ) );
454
+
455
+ return projectionDepth( depth, this._cameraNear, this._cameraFar );
456
+
457
+ };
458
+
459
+ const sampleNormal = ( uv ) => ( this.normalNode !== null ) ? this.normalNode.sample( uv ).rgb.normalize() : getNormalFromDepth( uv, this.depthNode.value, this._cameraProjectionMatrixInverse );
460
+ const sampleBeauty = ( uv ) => this.beautyNode.sample( uv );
461
+
462
+ // From Activision GTAO paper: https://www.activision.com/cdn/research/s2016_pbs_activision_occlusion.pptx
463
+
464
+ const spatialOffsets = Fn( ( [ position ] ) => {
465
+
466
+ return float( 0.25 ).mul( sub( position.y, position.x ).bitAnd( 3 ) );
467
+
468
+ }, { position: 'vec2', return: 'float' } );
469
+
470
+ const GTAOFastAcos = Fn( ( [ value ] ) => {
471
+
472
+ const outVal = abs( value ).mul( float( - 0.156583 ) ).add( HALF_PI );
473
+ outVal.mulAssign( sqrt( abs( value ).oneMinus() ) );
474
+
475
+ const x = value.x.greaterThanEqual( 0 ).select( outVal.x, PI.sub( outVal.x ) );
476
+ const y = value.y.greaterThanEqual( 0 ).select( outVal.y, PI.sub( outVal.y ) );
477
+
478
+ return vec2( x, y );
479
+
480
+ }, { value: 'vec2', return: 'vec2' } );
481
+
482
+ const horizonSampling = Fn( ( [ directionIsRight, stepRadius, radiusVS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ] ) => {
483
+
484
+ const STEP_COUNT = this.stepCount.toConst();
485
+ const EXP_FACTOR = this.expFactor.toConst();
486
+ const THICKNESS = this.thickness.toConst();
487
+ const BACKFACE_LIGHTING = this.backfaceLighting.toConst();
488
+
489
+ const uvDirection = directionIsRight.select( vec2( 1, - 1 ), vec2( - 1, 1 ) ); // Port note: Because of different uv conventions, uv-y has a different sign
490
+ const samplingDirection = directionIsRight.select( 1, - 1 );
491
+
492
+ const color = vec3( 0 );
493
+
494
+ Loop( { start: uint( 0 ), end: STEP_COUNT, type: 'uint', condition: '<' }, ( { i } ) => {
495
+
496
+ const offset = pow( abs( mul( stepRadius, float( i ).add( initialRayStep ) ).div( radiusVS ) ), EXP_FACTOR ).mul( radiusVS ).toConst();
497
+ const uvOffset = slideDirTexelSize.mul( max( offset, float( i ).add( 1 ) ) ).toConst();
498
+ const sampleUV = uvNode.add( uvOffset.mul( uvDirection ) ).toConst();
499
+
500
+ If( sampleUV.x.lessThanEqual( 0 ).or( sampleUV.y.lessThanEqual( 0 ) ).or( sampleUV.x.greaterThanEqual( 1 ) ).or( sampleUV.y.greaterThanEqual( 1 ) ), () => {
501
+
502
+ Break();
503
+
504
+ } );
505
+
506
+ const sampleViewPosition = getViewPosition( sampleUV, sampleDepth( sampleUV ), this._cameraProjectionMatrixInverse ).toConst();
507
+ const pixelToSample = sampleViewPosition.sub( viewPosition ).normalize().toConst();
508
+ const linearThicknessMultiplier = this.useLinearThickness.select( sampleViewPosition.z.negate().div( this._cameraFar ).clamp().mul( 100 ), float( 1 ) );
509
+ const pixelToSampleBackface = normalize( sampleViewPosition.sub( linearThicknessMultiplier.mul( viewDir ).mul( THICKNESS ) ).sub( viewPosition ) );
510
+
511
+ let frontBackHorizon = vec2( dot( pixelToSample, viewDir ), dot( pixelToSampleBackface, viewDir ) );
512
+ frontBackHorizon = GTAOFastAcos( clamp( frontBackHorizon, - 1, 1 ) );
513
+ frontBackHorizon = clamp( div( mul( samplingDirection, frontBackHorizon.negate() ).sub( n.sub( HALF_PI ) ), PI ) ); // Port note: subtract half pi instead of adding it
514
+ frontBackHorizon = directionIsRight.select( frontBackHorizon.yx, frontBackHorizon.xy ); // Front/Back get inverted depending on angle
515
+
516
+ // inline ComputeOccludedBitfield() for easier debugging
517
+
518
+ const minHorizon = frontBackHorizon.x.toConst();
519
+ const maxHorizon = frontBackHorizon.y.toConst();
520
+
521
+ const startHorizonInt = uint( frontBackHorizon.mul( float( MAX_RAY ) ) ).toConst();
522
+ const angleHorizonInt = uint( ceil( maxHorizon.sub( minHorizon ).mul( float( MAX_RAY ) ) ) ).toConst();
523
+ const angleHorizonBitfield = angleHorizonInt.greaterThan( uint( 0 ) ).select( uint( shiftRight( uint( 0xFFFFFFFF ), uint( 32 ).sub( MAX_RAY ).add( MAX_RAY.sub( angleHorizonInt ) ) ) ), uint( 0 ) ).toConst();
524
+ let currentOccludedBitfield = angleHorizonBitfield.shiftLeft( startHorizonInt );
525
+ currentOccludedBitfield = currentOccludedBitfield.bitAnd( globalOccludedBitfield.bitNot() );
526
+
527
+ globalOccludedBitfield.assign( globalOccludedBitfield.bitOr( currentOccludedBitfield ) );
528
+ const numOccludedZones = countOneBits( currentOccludedBitfield );
529
+
530
+ //
531
+
532
+ If( numOccludedZones.greaterThan( 0 ), () => { // If a ray hit the sample, that sample is visible from shading point
533
+
534
+ const lightColor = sampleBeauty( sampleUV );
535
+
536
+ If( luminance( lightColor ).greaterThan( 0.001 ), () => { // Continue if there is light at that location (intensity > 0)
537
+
538
+ const lightDirectionVS = normalize( pixelToSample );
539
+ const normalDotLightDirection = clamp( dot( viewNormal, lightDirectionVS ) );
540
+
541
+ If( normalDotLightDirection.greaterThan( 0.001 ), () => { // Continue if light is facing surface normal
542
+
543
+ const lightNormalVS = sampleNormal( sampleUV );
544
+
545
+ // Intensity of outgoing light in the direction of the shading point
546
+
547
+ let lightNormalDotLightDirection = dot( lightNormalVS, lightDirectionVS.negate() );
548
+
549
+ const d = sign( lightNormalDotLightDirection ).lessThan( 0 ).select( abs( lightNormalDotLightDirection ).mul( BACKFACE_LIGHTING ), abs( lightNormalDotLightDirection ) );
550
+ lightNormalDotLightDirection = BACKFACE_LIGHTING.greaterThan( 0 ).and( dot( lightNormalVS, viewDir ).greaterThan( 0 ) ).select( d, clamp( lightNormalDotLightDirection ) );
551
+
552
+ color.rgb.addAssign( float( numOccludedZones ).div( float( MAX_RAY ) ).mul( lightColor ).mul( normalDotLightDirection ).mul( lightNormalDotLightDirection ) );
553
+
554
+ } );
555
+
556
+ } );
557
+
558
+ } );
559
+
560
+ } );
561
+
562
+ return color;
563
+
564
+ } );
565
+
566
+ const aoField = property( 'float' );
567
+ const giField = property( 'vec3' );
568
+
569
+ const outputNode = outputStruct( aoField, giField );
570
+
571
+ const gi = Fn( () => {
572
+
573
+ const depth = this._resolutionScale.lessThan( 1 ).select( sampleCenterDepth( uvNode ), sampleDepth( uvNode ) ).toConst();
574
+
575
+ isBackgroundDepth( depth ).discard();
576
+
577
+ const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toVar();
578
+ const viewNormal = sampleNormal( uvNode ).toVar();
579
+ const viewDir = normalize( viewPosition.xyz.negate() ).toVar();
580
+
581
+ //
582
+
583
+ const noiseOffset = spatialOffsets( screenCoordinate );
584
+ const noiseDirection = interleavedGradientNoise( screenCoordinate );
585
+ const noiseJitterIdx = this._temporalDirection.mul( 0.02 ); // Port: Add noiseJitterIdx here for slightly better noise convergence with TRAA (see #31890 for more details)
586
+ const initialRayStep = fract( noiseOffset.add( this._temporalOffset ) ).add( rand( uvNode.add( noiseJitterIdx ).mul( 2 ).sub( 1 ) ) );
587
+
588
+ const ao = float( 0 );
589
+ const color = vec3( 0 );
590
+
591
+ const ROTATION_COUNT = this.sliceCount.toConst();
592
+ const STEP_COUNT = this.stepCount.toConst();
593
+ const AO_INTENSITY = this.aoIntensity.toConst();
594
+ const GI_INTENSITY = this.giIntensity.toConst();
595
+ const RADIUS = this.radius.toConst();
596
+
597
+ const stepRadius = float( 0 ).toVar();
598
+
599
+ If( this.useScreenSpaceSampling, () => {
600
+
601
+ stepRadius.assign( RADIUS.mul( this._resolution.x.div( 2 ) ).div( float( 16 ) ) ); // SSRT3 has a bug where stepRadius is divided by STEP_COUNT twice; fix here
602
+
603
+ } ).Else( () => {
604
+
605
+ stepRadius.assign( max( RADIUS.mul( this._halfProjScale ).div( viewPosition.z.negate() ), float( STEP_COUNT ) ) ); // Port note: viewZ is negative so a negate is required
606
+
607
+ } );
608
+
609
+ stepRadius.divAssign( float( STEP_COUNT ).add( 1 ) );
610
+ const radiusVS = max( 1, float( STEP_COUNT.sub( 1 ) ) ).mul( stepRadius ).toConst();
611
+
612
+ //
613
+
614
+ Loop( { start: uint( 0 ), end: ROTATION_COUNT, type: 'uint', condition: '<' }, ( { i } ) => {
615
+
616
+ const rotationAngle = mul( float( i ).add( noiseDirection ).add( this._temporalDirection ), PI.div( float( ROTATION_COUNT ) ) ).toConst();
617
+ const sliceDir = vec3( vec2( cos( rotationAngle ), sin( rotationAngle ) ), 0 ).toConst();
618
+ const slideDirTexelSize = sliceDir.xy.mul( float( 1 ).div( this._resolution ) ).toConst();
619
+
620
+ const planeNormal = normalize( cross( sliceDir, viewDir ) ).toConst();
621
+ const tangent = cross( viewDir, planeNormal ).toConst();
622
+ const projectedNormal = viewNormal.sub( planeNormal.mul( dot( viewNormal, planeNormal ) ) ).toConst();
623
+ const projectedNormalNormalized = normalize( projectedNormal ).toConst();
624
+
625
+ const cos_n = clamp( dot( projectedNormalNormalized, viewDir ), - 1, 1 ).toConst();
626
+ const n = sign( dot( projectedNormal, tangent ) ).negate().mul( acos( cos_n ) ).toConst();
627
+
628
+ globalOccludedBitfield.assign( 0 );
629
+
630
+ color.addAssign( horizonSampling( bool( true ), stepRadius, radiusVS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ) );
631
+ color.addAssign( horizonSampling( bool( false ), stepRadius, radiusVS, viewPosition, slideDirTexelSize, initialRayStep, uvNode, viewDir, viewNormal, n ) );
632
+
633
+ ao.addAssign( float( countOneBits( globalOccludedBitfield ) ).div( float( MAX_RAY ) ) );
634
+
635
+ } );
636
+
637
+ ao.divAssign( float( ROTATION_COUNT ) );
638
+ ao.assign( pow( ao.clamp().oneMinus(), AO_INTENSITY ).clamp() );
639
+
640
+ color.divAssign( float( ROTATION_COUNT ) );
641
+ color.mulAssign( GI_INTENSITY );
642
+
643
+ // scale color based on luminance
644
+
645
+ const maxLuminance = float( 7 ).toConst(); // 7 represent a HDR luminance value
646
+ const currentLuminance = luminance( color );
647
+
648
+ const scale = currentLuminance.greaterThan( maxLuminance ).select( maxLuminance.div( currentLuminance ), float( 1 ) );
649
+ color.mulAssign( scale );
650
+
651
+ aoField.assign( ao );
652
+ giField.assign( color );
653
+
654
+ return vec4( 0 );
655
+
656
+ } );
657
+
658
+ this._material.contextNode = context( builder.getSharedContext() );
659
+ this._material.colorNode = gi();
660
+ this._material.outputNode = outputNode;
661
+ this._material.needsUpdate = true;
662
+
663
+ //
664
+
665
+ return this._aoNode;
666
+
667
+ }
668
+
669
+ /**
670
+ * Frees internal resources. This method should be called
671
+ * when the effect is no longer required.
672
+ */
673
+ dispose() {
674
+
675
+ super.dispose();
676
+
677
+ this._ssgiRenderTarget.dispose();
678
+
679
+ this._material.dispose();
680
+
681
+ }
682
+
683
+ }
684
+
685
+ export default SSGINode;
686
+
687
+ /**
688
+ * TSL function for creating a SSGI effect.
689
+ *
690
+ * @tsl
691
+ * @function
692
+ * @param {TextureNode} beautyNode - The texture node that represents the input of the effect.
693
+ * @param {TextureNode} depthNode - A texture node that represents the scene's depth.
694
+ * @param {TextureNode} normalNode - A texture node that represents the scene's normals.
695
+ * @param {Camera} camera - The camera the scene is rendered with.
696
+ * @returns {SSGINode}
697
+ */
698
+ export const ssgi = ( beautyNode, depthNode, normalNode, camera ) => new SSGINode( convertToTexture( beautyNode ), depthNode, normalNode, camera );