@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,302 @@
1
+ import { EPSILON, Fn, If, PI, clamp, cos, cross, dot, equirectUV, float, log, max, mix, normalize, pow, reflect, sin, sqrt, struct, vec3 } from 'three/tsl';
2
+
3
+ /**
4
+ * Specular / microfacet BRDF helpers: VNDF sampling, GTR distribution, Smith geometry,
5
+ * Fresnel, reflection importance sampling, parallax-corrected ray-length terms, and
6
+ * equirectangular environment sampling / MIS helpers.
7
+ * Pure TSL functions of their inputs (no scene/camera state).
8
+ */
9
+
10
+ /**
11
+ * Sentinel ray length the SSR pass writes for environment misses (no screen-space hit), set far above
12
+ * any real hit distance so a single magnitude test separates misses from hits and survives `.max( 0 )`.
13
+ *
14
+ * @type {number}
15
+ */
16
+ export const ENV_RAY_LENGTH = 1e4;
17
+
18
+ /**
19
+ * Classification threshold for {@link ENV_RAY_LENGTH}: above this is an env miss, below a real hit.
20
+ * An order of magnitude under the sentinel, robust to fp16 storage and bilinear blending at borders.
21
+ *
22
+ * @type {number}
23
+ */
24
+ export const ENV_RAY_LENGTH_THRESHOLD = 1e3;
25
+
26
+ // Bounded-VNDF sampler (Eto & Tokuyoshi 2023; spherical-cap form, Dupuy & Benyoub 2023)
27
+ const SampleGGXVNDF = Fn( ( [ V, ax, ay, r1, r2 ] ) => {
28
+
29
+ // Warp the view direction to the hemisphere ("standard") configuration.
30
+ const wiStd = normalize( vec3( ax.mul( V.x ), ay.mul( V.y ), V.z ) ).toVar();
31
+
32
+ // Isotropic bound on the spherical cap (Eto & Tokuyoshi eq. 5). alpha ∈ [0,1] here,
33
+ // so the sign term in `s` is always +1 and is dropped.
34
+ const a = ax.min( ay ).toVar();
35
+ const s = float( 1.0 ).add( V.xy.length() ).toVar();
36
+ const a2 = a.mul( a ).toVar();
37
+ const s2 = s.mul( s ).toVar();
38
+ const k = a2.oneMinus().mul( s2 ).div( s2.add( a2.mul( V.z ).mul( V.z ) ) ).toVar();
39
+
40
+ // Tighten the cap with the bound (upper hemisphere; N·V ≥ 0 in our usage).
41
+ const b = wiStd.z.mul( k ).toVar();
42
+
43
+ // Sample the (bounded) spherical cap.
44
+ const phi = float( 6.283185307179586 ).mul( r1 ).toVar(); // 2*pi
45
+ const z = r2.oneMinus().mul( float( 1.0 ).add( b ) ).sub( b ).toVar();
46
+ const sinTheta = sqrt( max( float( 0.0 ), float( 1.0 ).sub( z.mul( z ) ) ) ).toVar();
47
+ const c = vec3( sinTheta.mul( cos( phi ) ), sinTheta.mul( sin( phi ) ), z ).toVar();
48
+
49
+ // Microfacet normal in the standard config, then warp back to the ellipsoid (unstretch).
50
+ const wmStd = c.add( wiStd ).toVar();
51
+ const Ne = normalize( vec3(
52
+ ax.mul( wmStd.x ),
53
+ ay.mul( wmStd.y ),
54
+ max( float( 0.0 ), wmStd.z )
55
+ ) ).toVar();
56
+
57
+ return Ne;
58
+
59
+ }, {
60
+ V: 'vec3',
61
+ ax: 'float',
62
+ ay: 'float',
63
+ r1: 'float',
64
+ r2: 'float',
65
+ return: 'vec3'
66
+ } );
67
+
68
+ // Generalized Trowbridge-Reitz (GTR). For GGX set k=2.
69
+ // D_GTR(roughness, NoH, k) where roughness = α (not α²).
70
+ export const D_GTR = Fn( ( [ roughness, NoH, k ] ) => {
71
+
72
+ // see: Filament - Normal distribution function (specular D) - 4.4.1
73
+ const a2 = roughness.mul( roughness ).toVar(); // α²
74
+ const NoH2 = NoH.mul( NoH ).toVar();
75
+ const base = NoH2.mul( a2.sub( float( 1.0 ) ) ).add( float( 1.0 ) ).toVar();
76
+ // a² / (π * base^k)
77
+ return a2.div( PI.mul( pow( base, k ) ) ).toVar(); // float
78
+
79
+ }, { roughness: 'float', NoH: 'float', k: 'float', return: 'float' } );
80
+
81
+ // Smith G1 (Heitz): expects alpha (not squared); it squares internally
82
+ export const SmithG = Fn( ( [ NDotX, alpha ] ) => {
83
+
84
+ // see: Filament - Geometric shadowing (specular G) - 4.4.2
85
+
86
+ const a2 = alpha.mul( alpha ).toVar(); // α²
87
+ const NDotX2 = NDotX.mul( NDotX ).toVar(); // (N·X)²
88
+ return float( 2.0 ).mul( NDotX ).div(
89
+ NDotX.add( sqrt(
90
+ a2.add( a2.oneMinus().mul( NDotX2 ) )
91
+ ) )
92
+ );
93
+
94
+ }, { NDotX: 'float', alpha: 'float', return: 'float' } );
95
+
96
+ // Geometry term G = G1(N·L, α_G) * G1(N·V, α_G) (α_G is NOT squared here)
97
+ export const GeometryTerm = Fn( ( [ NoL, NoV, alphaG ] ) => {
98
+
99
+ const G1v = SmithG( NoV, alphaG ).toVar();
100
+ const G1l = SmithG( NoL, alphaG ).toVar();
101
+ return G1v.mul( G1l ).toVar();
102
+
103
+ }, { NoL: 'float', NoV: 'float', alphaG: 'float', return: 'float' } );
104
+
105
+ // Bounded VNDF direction PDF (reflection mapping), matching SampleGGXVNDF above.
106
+ // p(L) = D_GTR(roughness, NoH, 2) / ( 2 * (k * N·V + t) ) (Eto & Tokuyoshi eq. 8)
107
+ // with the isotropic cap bound k and t = ‖(α·V.xy, V.z)‖. Here 'roughness' is α, not α².
108
+ const GGXVNDFPdf = Fn( ( [ NoH, NoV, roughness ] ) => {
109
+
110
+ const D = D_GTR( roughness, NoH, float( 2.0 ) ).toVar();
111
+ const a2 = roughness.mul( roughness ).toVar();
112
+ const sinV2 = max( float( 0.0 ), float( 1.0 ).sub( NoV.mul( NoV ) ) ).toVar(); // ‖V.xy‖²
113
+ const s = float( 1.0 ).add( sqrt( sinV2 ) ).toVar();
114
+ const s2 = s.mul( s ).toVar();
115
+ const k = float( 1.0 ).sub( a2 ).mul( s2 ).div( s2.add( a2.mul( NoV ).mul( NoV ) ) ).toVar();
116
+ const t = sqrt( a2.mul( sinV2 ).add( NoV.mul( NoV ) ) ).toVar();
117
+ return D.div( max( float( EPSILON ), float( 2.0 ).mul( k.mul( NoV ).add( t ) ) ) ).toVar();
118
+
119
+ }, { NoH: 'float', NoV: 'float', roughness: 'float', return: 'float' } );
120
+
121
+ /**
122
+ * Fresnel reflectance for the Schlick approximation.
123
+ */
124
+ export const F_Schlick = Fn( ( [ f0, theta, f90 = float( 1 ) ] ) => {
125
+
126
+ const oneMinus = float( 1.0 ).sub( theta ).toVar();
127
+ const oneMinus2 = oneMinus.mul( oneMinus ).toVar();
128
+ const oneMinus5 = oneMinus2.mul( oneMinus2 ).mul( oneMinus ).toVar();
129
+ return f0.add( vec3( f90 ).sub( f0 ).mul( oneMinus5 ) ).toVar(); // vec3
130
+
131
+ }, { f0: 'vec3', theta: 'float', f90: 'float', return: 'vec3' } );
132
+
133
+ /**
134
+ * Specular dominant factor for parallax-corrected ray length.
135
+ * From REBLUR: A Hierarchical Recurrent Denoiser (NRD).
136
+ */
137
+ export const getSpecularDominantFactor = Fn( ( [ NoV, roughness ] ) => {
138
+
139
+ const a = float( 0.298475 ).mul(
140
+ log( float( 39.4115 ).sub( float( 39.0029 ).mul( roughness ) ) )
141
+ );
142
+ const f = float( 1.0 ).sub( NoV ).pow( 10.8649 )
143
+ .mul( float( 1.0 ).sub( a ) )
144
+ .add( a );
145
+ return clamp( f );
146
+
147
+ }, { NoV: 'float', roughness: 'float', return: 'float' } );
148
+
149
+ /**
150
+ * Everything a single GGX reflection sample produces. `reflectDir` and `sampleWeight`
151
+ * drive the SSR ray-march and compositing; `pdf`, `NdotV`, `alpha` and `f0` are the GGX
152
+ * terms the env-miss MIS fallback needs so the caller never re-derives microfacet math.
153
+ */
154
+ const ggxReflectionStruct = struct( {
155
+ reflectDir: 'vec3', // view-space reflected ray direction
156
+ sampleWeight: 'vec3', // chromatic weight (incl. Fresnel tint) to multiply gathered radiance by
157
+ pdf: 'float', // VNDF direction pdf (for MIS against the env CDF)
158
+ NdotV: 'float',
159
+ alpha: 'float', // GGX alpha (roughness²), clamped
160
+ f90: 'float',
161
+ f0: 'vec3' // Fresnel reflectance at normal incidence
162
+ } );
163
+
164
+ // Core of `ggxReflectionSample()` with explicit F0/F90.
165
+ const ggxReflectionSampleWithReflectance = Fn( ( [ N, V, roughness, f0, f90, Xi ] ) => {
166
+
167
+ // GGX alpha (use r^2, clamp to avoid degenerate)
168
+ const a = roughness.mul( roughness ).max( 0.001 ).toVar();
169
+ const ax = a.toVar();
170
+ const ay = a.toVar();
171
+
172
+ // TBN from view-space normal
173
+ const up = N.z.abs().lessThan( 0.999 ).select( vec3( 0, 0, 1 ), vec3( 1, 0, 0 ) );
174
+ const T = cross( up, N ).normalize().toVar();
175
+ const B = cross( N, T ).normalize().toVar();
176
+
177
+ // transform V to LOCAL frame (N = +Z)
178
+ const Vlocal = vec3( dot( T, V ), dot( B, V ), dot( N, V ) ).toVar();
179
+
180
+ // VNDF sample **in local frame**
181
+ const Hlocal = SampleGGXVNDF( Vlocal, ax, ay, Xi.x, Xi.y ).toVar();
182
+ If( Hlocal.z.lessThan( 0 ), () => {
183
+
184
+ Hlocal.assign( Hlocal.negate() );
185
+
186
+ } );
187
+
188
+ // transform H back to VIEW space
189
+ const h = normalize( T.mul( Hlocal.x ).add( B.mul( Hlocal.y ) ).add( N.mul( Hlocal.z ) ) ).toVar();
190
+
191
+ // reflect with V (surface->camera) and H
192
+ const viewReflectDir = reflect( V.negate(), h ).normalize().toVar();
193
+
194
+ // BRDF/PDF evaluation for the sampled direction
195
+ // V: surface -> camera, L: reflected direction, N: normal, H: half-vector
196
+ const L = viewReflectDir.toVar();
197
+ const H = normalize( V.add( L ) ).toVar(); // ~h; recomputed for robustness
198
+
199
+ const NdotV = max( float( 0.0 ), dot( N, V ) ).toVar();
200
+ const NdotL = max( float( 0.0 ), dot( N, L ) ).toVar();
201
+ const NdotH = max( float( 0.0 ), dot( N, H ) ).toVar();
202
+ const VdotH = max( float( 0.0 ), dot( V, H ) ).toVar();
203
+
204
+ // Chromatic Fresnel reflectance: for metals f0 = albedo, so the reflection is tinted and desaturates
205
+ // toward white at grazing angles. Kept as vec3 so colored metals reflect with the correct chroma.
206
+ const fresnelWeight = F_Schlick( f0, VdotH, f90 ).toVar(); // vec3
207
+
208
+ // Bounded-VNDF direction pdf — still needed for the env-miss MIS path.
209
+ const pdf = GGXVNDFPdf( NdotH, NdotV, ax ).toVar();
210
+
211
+ // Numerically stable importance weight: brdf·NdotL/pdf ≡ fresnel·G2·(k·NdotV + t)/(2·NdotV), which
212
+ // cancels the GGX D analytically. Evaluating D explicitly is catastrophic at low roughness
213
+ // (D → 3e5 at α = 0.001 wrecks f32 precision); the cancelled form stays stable down to a mirror.
214
+ // (k·NdotV + t) is the bounded-cap normalization; k shrinks the cap to drop below-horizon samples.
215
+ const a2 = ax.mul( ax ).toVar();
216
+ const sinV2 = NdotV.mul( NdotV ).oneMinus().max( 0.0 ).toVar(); // ‖V.xy‖²
217
+ const sB = float( 1.0 ).add( sqrt( sinV2 ) ).toVar();
218
+ const s2B = sB.mul( sB ).toVar();
219
+ const kB = a2.oneMinus().mul( s2B ).div( s2B.add( a2.mul( NdotV ).mul( NdotV ) ) ).toVar();
220
+ const tB = sqrt( a2.mul( sinV2 ).add( NdotV.mul( NdotV ) ) ).toVar();
221
+ const glossyWeight = fresnelWeight
222
+ .mul( GeometryTerm( NdotL, NdotV, ax ) )
223
+ .mul( kB.mul( NdotV ).add( tB ) )
224
+ .div( float( 2.0 ).mul( NdotV ).max( 1e-4 ) ).toVar();
225
+
226
+ return ggxReflectionStruct( viewReflectDir, glossyWeight, pdf, NdotV, ax, f90, f0 );
227
+
228
+ } );
229
+
230
+ /**
231
+ * Importance-samples the GGX/VNDF specular lobe for one pixel and returns the reflected
232
+ * ray direction plus the Monte-Carlo weight to apply to the gathered radiance, along with
233
+ * the GGX terms the SSR env-miss MIS fallback needs.
234
+ *
235
+ * @tsl
236
+ * @param {Node<vec3>} N - View-space shading normal (normalized).
237
+ * @param {Node<vec3>} V - View-space surface→camera direction (normalized).
238
+ * @param {Node<float>} roughness - Perceptual roughness in `[0,1]`.
239
+ * @param {Node<float>} metalness - Metalness in `[0,1]`; only used when `f0` is omitted.
240
+ * @param {Node<vec3>} albedo - Surface base color; tints the metal F0 when `f0` is omitted.
241
+ * @param {Node<vec4>} Xi - Per-pixel random numbers; only `.xy` are used.
242
+ * @param {?Node<vec3>} [f0=null] - Normal-incidence reflectance. Defaults to `mix( 0.04, albedo, metalness )`.
243
+ * @param {Node<float>|number} [f90=1] - Grazing reflectance.
244
+ * @return {ggxReflectionStruct}
245
+ */
246
+ export const ggxReflectionSample = ( N, V, roughness, metalness, albedo, Xi, f0 = null, f90 = 1 ) =>
247
+
248
+ ggxReflectionSampleWithReflectance( N, V, roughness, f0 ?? mix( vec3( 0.04 ), albedo, metalness ), float( f90 ), Xi );
249
+
250
+ // Equirectangular environment sampling
251
+
252
+ /**
253
+ * Equirectangular direction / UV / PDF helpers and MIS weighting shared by environment sampling code.
254
+ * Env-miss MIS integration lives in {@link ImportanceSampledEnvironment}.
255
+ *
256
+ * Equirectangular parameterization helpers used with CDF importance sampling are adapted from
257
+ * [three-gpu-pathtracer](https://github.com/gkjohnson/three-gpu-pathtracer).
258
+ *
259
+ * @see {@link https://github.com/gkjohnson/three-gpu-pathtracer}
260
+ */
261
+
262
+ // uv -> direction (equirectangular)
263
+ export const equirectUvToDir = Fn( ( [ uvIn ] ) => {
264
+
265
+ const phi = uvIn.x.mul( Math.PI * 2 ).sub( Math.PI );
266
+ const lat = uvIn.y.sub( 0.5 ).mul( Math.PI );
267
+ const cosLat = cos( lat );
268
+ return normalize( vec3(
269
+ cosLat.mul( cos( phi ) ),
270
+ sin( lat ),
271
+ cosLat.mul( sin( phi ) )
272
+ ) );
273
+
274
+ }, { uv: 'vec2', return: 'vec3' } );
275
+
276
+ // Solid-angle PDF of a direction under equirectangular parameterization.
277
+ export const equirectDirPdf = Fn( ( [ direction ] ) => {
278
+
279
+ const uvDir = equirectUV( direction );
280
+ const sinTheta = sin( uvDir.y.mul( Math.PI ) );
281
+ return sinTheta.abs().lessThan( float( EPSILON ) ).select(
282
+ float( 0 ),
283
+ float( 1 ).div( float( 2 * Math.PI * Math.PI ).mul( sinTheta ) )
284
+ );
285
+
286
+ }, { direction: 'vec3', return: 'float' } );
287
+
288
+ /**
289
+ * MIS power heuristic with β = 2: `pdfA² / (pdfA² + pdfB²)`.
290
+ * Weights the contribution of the strategy that produced `pdfA` against the other strategy.
291
+ *
292
+ * @see Eric Veach, *Optimally Combining Sampling Techniques for Monte Carlo Rendering*
293
+ * @tsl
294
+ */
295
+ export const misPowerHeuristic = Fn( ( [ pdfA, pdfB ] ) => {
296
+
297
+ const pdfASq = pdfA.mul( pdfA );
298
+ const pdfBSq = pdfB.mul( pdfB );
299
+ return pdfASq.div( pdfASq.add( pdfBSq ) );
300
+
301
+ }, { pdfA: 'float', pdfB: 'float', return: 'float' } );
302
+
@@ -0,0 +1,184 @@
1
+ import { add, float, Fn, If, luminance, max, struct, vec2, vec4, getViewPosition, logarithmicDepthToViewZ, viewZToOrthographicDepth, viewZToPerspectiveDepth } from 'three/tsl';
2
+
3
+ /**
4
+ * Optimized version of AABB clipping.
5
+ *
6
+ * Reference: {@link https://github.com/playdeadgames/temporal}
7
+ *
8
+ * @tsl
9
+ * @private
10
+ * @function
11
+ * @param {Node<vec4>} currentColor - The current color.
12
+ * @param {Node<vec4>} historyColor - The history color.
13
+ * @param {Node<vec4>} minColor - The minimum color of the AABB.
14
+ * @param {Node<vec4>} maxColor - The maximum color of the AABB.
15
+ * @return {Node<vec4>} The clipped history color.
16
+ */
17
+ export const clipAABB = Fn( ( [ currentColor, historyColor, minColor, maxColor ] ) => {
18
+
19
+ const pClip = maxColor.rgb.add( minColor.rgb ).mul( 0.5 ).toConst();
20
+ const eClip = maxColor.rgb.sub( minColor.rgb ).mul( 0.5 ).add( 1e-7 ).toConst();
21
+ const vClip = historyColor.sub( vec4( pClip, currentColor.a ) ).toConst();
22
+ const vUnit = vClip.xyz.div( eClip ).toConst();
23
+ const absUnit = vUnit.abs().toConst();
24
+ const maxUnit = max( absUnit.x, absUnit.y, absUnit.z ).toConst();
25
+ return maxUnit.greaterThan( 1 ).select(
26
+ vec4( pClip, currentColor.a ).add( vClip.div( maxUnit ) ),
27
+ historyColor
28
+ );
29
+
30
+ }, {
31
+ currentColor: 'vec4',
32
+ historyColor: 'vec4',
33
+ minColor: 'vec4',
34
+ maxColor: 'vec4',
35
+ return: 'vec4'
36
+ } );
37
+
38
+ /**
39
+ * Blends the current and history color with a flicker reduction based on luminance weighing.
40
+ *
41
+ * @tsl
42
+ * @private
43
+ * @function
44
+ * @param {Node<vec4>} currentColor - The current color.
45
+ * @param {Node<vec4>} historyColor - The history color.
46
+ * @param {Node<float>} currentWeight - The weight of the current color.
47
+ * @return {Node<vec4>} The blended color.
48
+ */
49
+ export const flickerReduction = Fn( ( [ currentColor, historyColor, currentWeight ] ) => {
50
+
51
+ const compressedCurrent = currentColor.mul( float( 1 ).div( ( max( currentColor.r, currentColor.g, currentColor.b ).add( 1 ) ) ) ).toConst();
52
+ const compressedHistory = historyColor.mul( float( 1 ).div( ( max( historyColor.r, historyColor.g, historyColor.b ).add( 1 ) ) ) ).toConst();
53
+
54
+ const luminanceCurrent = luminance( compressedCurrent.rgb ).toConst();
55
+ const luminanceHistory = luminance( compressedHistory.rgb ).toConst();
56
+
57
+ const weightCurrent = currentWeight.div( luminanceCurrent.add( 1 ) ).toConst();
58
+ const weightHistory = currentWeight.oneMinus().div( luminanceHistory.add( 1 ) ).toConst();
59
+
60
+ return add( currentColor.mul( weightCurrent ), historyColor.mul( weightHistory ) ).div( max( weightCurrent.add( weightHistory ), 0.00001 ) );
61
+
62
+ } );
63
+
64
+ /**
65
+ * Samples the 3×3 neighborhood of the given texel position in the depth buffer and returns
66
+ * the closest depth, its texel position and the farthest depth. Reversed and logarithmic depth
67
+ * values are converted to perspective depth.
68
+ *
69
+ * @tsl
70
+ * @private
71
+ * @function
72
+ * @param {TextureNode} depthNode - The depth buffer.
73
+ * @param {Node<vec2>} positionTexel - The texel position.
74
+ * @param {Node<vec2>} cameraNearFar - The camera's near and far.
75
+ * @return {Node<struct>} A struct with the members `closestDepth`, `closestPositionTexel` and `farthestDepth`.
76
+ */
77
+ export const sampleCurrentDepth = Fn( ( [ depthNode, positionTexel, cameraNearFar ], builder ) => {
78
+
79
+ const closestDepth = float( 2 ).toVar();
80
+ const closestPositionTexel = vec2( 0 ).toVar();
81
+ const farthestDepth = float( - 1 ).toVar();
82
+
83
+ for ( let x = - 1; x <= 1; ++ x ) {
84
+
85
+ for ( let y = - 1; y <= 1; ++ y ) {
86
+
87
+ const neighbor = positionTexel.add( vec2( x, y ) ).toVar();
88
+ let depth = depthNode.load( neighbor ).r;
89
+ if ( builder.renderer.reversedDepthBuffer ) depth = depth.oneMinus();
90
+ if ( builder.renderer.logarithmicDepthBuffer ) depth = logarithmicToPerspectiveDepth( depth, cameraNearFar );
91
+ depth = depth.toVar();
92
+
93
+ If( depth.lessThan( closestDepth ), () => {
94
+
95
+ closestDepth.assign( depth );
96
+ closestPositionTexel.assign( neighbor );
97
+
98
+ } );
99
+
100
+ If( depth.greaterThan( farthestDepth ), () => {
101
+
102
+ farthestDepth.assign( depth );
103
+
104
+ } );
105
+
106
+ }
107
+
108
+ }
109
+
110
+ return currentDepthStruct( closestDepth, closestPositionTexel, farthestDepth );
111
+
112
+ } );
113
+
114
+ /**
115
+ * Samples the previous depth buffer and reprojects the depth into the current view.
116
+ *
117
+ * @tsl
118
+ * @private
119
+ * @function
120
+ * @param {TextureNode} previousDepthNode - The previous depth buffer.
121
+ * @param {Node<vec2>} uv - The uv coordinates.
122
+ * @param {Node<mat4>} previousCameraProjectionMatrixInverse - The previous camera projection matrix inverse.
123
+ * @param {Node<mat4>} previousCameraWorldMatrix - The previous camera world matrix.
124
+ * @param {Node<mat4>} cameraWorldMatrixInverse - The current camera world matrix inverse.
125
+ * @param {Node<vec2>} cameraNearFar - The camera's near and far.
126
+ * @param {Camera} camera - The camera.
127
+ * @return {Node<float>} The reprojected depth.
128
+ */
129
+ export const samplePreviousDepth = Fn( ( [ previousDepthNode, uv, previousCameraProjectionMatrixInverse, previousCameraWorldMatrix, cameraWorldMatrixInverse, cameraNearFar, camera ], builder ) => {
130
+
131
+ let depth = previousDepthNode.sample( uv ).r;
132
+ if ( builder.renderer.logarithmicDepthBuffer ) depth = logarithmicToPerspectiveDepth( depth, cameraNearFar );
133
+ const positionView = getViewPosition( uv, depth, previousCameraProjectionMatrixInverse );
134
+ const positionWorld = previousCameraWorldMatrix.mul( vec4( positionView, 1 ) ).xyz;
135
+ const viewZ = cameraWorldMatrixInverse.mul( vec4( positionWorld, 1 ) ).z;
136
+ return camera.isOrthographicCamera
137
+ ? viewZToOrthographicDepth( viewZ, cameraNearFar.x, cameraNearFar.y )
138
+ : viewZToPerspectiveDepth( viewZ, cameraNearFar.x, cameraNearFar.y );
139
+
140
+ } );
141
+
142
+ /**
143
+ * Computes a sequence of Halton(2, 3) jitter offsets in the range [0, 1].
144
+ *
145
+ * @private
146
+ * @function
147
+ * @param {number} length - The number of offsets.
148
+ * @return {Array<Array<number>>} The jitter offsets.
149
+ */
150
+ export function computeHaltonOffsets( length ) {
151
+
152
+ return Array.from( { length }, ( _, index ) => [ halton( index + 1, 2 ), halton( index + 1, 3 ) ] );
153
+
154
+ }
155
+
156
+ const currentDepthStruct = struct( {
157
+ closestDepth: 'float',
158
+ closestPositionTexel: 'vec2',
159
+ farthestDepth: 'float'
160
+ } );
161
+
162
+ const logarithmicToPerspectiveDepth = ( depth, cameraNearFar ) => {
163
+
164
+ const { x: near, y: far } = cameraNearFar;
165
+ const viewZ = logarithmicDepthToViewZ( depth, near, far );
166
+ return viewZToPerspectiveDepth( viewZ, near, far );
167
+
168
+ };
169
+
170
+ function halton( index, base ) {
171
+
172
+ let fraction = 1;
173
+ let result = 0;
174
+ while ( index > 0 ) {
175
+
176
+ fraction /= base;
177
+ result += fraction * ( index % base );
178
+ index = Math.floor( index / base );
179
+
180
+ }
181
+
182
+ return result;
183
+
184
+ }