@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,370 @@
1
+ import { DoubleSide, FloatType, HalfFloatType, Mesh, MeshBasicMaterial, MeshPhongMaterial, PlaneGeometry, Scene, WebGLRenderTarget } from 'three';
2
+ import { potpack } from '../libs/potpack.module.js';
3
+
4
+ /**
5
+ * Progressive Light Map Accumulator, by [zalo](https://github.com/zalo/).
6
+ *
7
+ * To use, simply construct a `ProgressiveLightMap` object,
8
+ * `plmap.addObjectsToLightMap(object)` an array of semi-static
9
+ * objects and lights to the class once, and then call
10
+ * `plmap.update(camera)` every frame to begin accumulating
11
+ * lighting samples.
12
+ *
13
+ * This should begin accumulating lightmaps which apply to
14
+ * your objects, so you can start jittering lighting to achieve
15
+ * the texture-space effect you're looking for.
16
+ *
17
+ * This class can only be used with {@link WebGLRenderer}.
18
+ * When using {@link WebGPURenderer}, import from `ProgressiveLightMapGPU.js`.
19
+ *
20
+ * @three_import import { ProgressiveLightMap } from 'three/addons/misc/ProgressiveLightMap.js';
21
+ */
22
+ class ProgressiveLightMap {
23
+
24
+ /**
25
+ * Constructs a new progressive light map.
26
+ *
27
+ * @param {WebGLRenderer} renderer - The renderer.
28
+ * @param {number} [res=1024] - The side-long dimension of the total lightmap.
29
+ */
30
+ constructor( renderer, res = 1024 ) {
31
+
32
+ /**
33
+ * The renderer.
34
+ *
35
+ * @type {WebGLRenderer}
36
+ */
37
+ this.renderer = renderer;
38
+
39
+ /**
40
+ * The side-long dimension of the total lightmap.
41
+ *
42
+ * @type {number}
43
+ * @default 1024
44
+ */
45
+ this.res = res;
46
+
47
+ // internals
48
+
49
+ this.lightMapContainers = [];
50
+ this.scene = new Scene();
51
+ this.buffer1Active = false;
52
+ this.firstUpdate = true;
53
+ this.labelMesh = null;
54
+ this.blurringPlane = null;
55
+
56
+ // Create the Progressive LightMap Texture
57
+ const format = /(Android|iPad|iPhone|iPod)/g.test( navigator.userAgent ) ? HalfFloatType : FloatType;
58
+ this.progressiveLightMap1 = new WebGLRenderTarget( this.res, this.res, { type: format } );
59
+ this.progressiveLightMap2 = new WebGLRenderTarget( this.res, this.res, { type: format } );
60
+ this.progressiveLightMap2.texture.channel = 1;
61
+
62
+ // Inject some spicy new logic into a standard phong material
63
+ this.uvMat = new MeshPhongMaterial();
64
+ this.uvMat.uniforms = {};
65
+ this.uvMat.onBeforeCompile = ( shader ) => {
66
+
67
+ // Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions
68
+ shader.vertexShader =
69
+ 'attribute vec2 uv1;\n' +
70
+ '#define USE_LIGHTMAP\n' +
71
+ '#define LIGHTMAP_UV uv1\n' +
72
+ shader.vertexShader.slice( 0, - 1 ) +
73
+ ' gl_Position = vec4((LIGHTMAP_UV - 0.5) * 2.0, 1.0, 1.0); }';
74
+
75
+ // Fragment Shader: Set Pixels to average in the Previous frame's Shadows
76
+ const bodyStart = shader.fragmentShader.indexOf( 'void main() {' );
77
+ shader.fragmentShader =
78
+ '#define USE_LIGHTMAP\n' +
79
+ shader.fragmentShader.slice( 0, bodyStart ) +
80
+ ' uniform sampler2D previousShadowMap;\n uniform float averagingWindow;\n' +
81
+ shader.fragmentShader.slice( bodyStart - 1, - 1 ) +
82
+ `\nvec3 texelOld = texture2D(previousShadowMap, vLightMapUv).rgb;
83
+ gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);
84
+ }`;
85
+
86
+ // Set the Previous Frame's Texture Buffer and Averaging Window
87
+ shader.uniforms.previousShadowMap = { value: this.progressiveLightMap1.texture };
88
+ shader.uniforms.averagingWindow = { value: 100 };
89
+
90
+ this.uvMat.uniforms = shader.uniforms;
91
+
92
+ // Set the new Shader to this
93
+ this.uvMat.userData.shader = shader;
94
+
95
+ };
96
+
97
+ }
98
+
99
+ /**
100
+ * Sets these objects' materials' lightmaps and modifies their uv1's.
101
+ *
102
+ * @param {Array<Object3D>} objects - An array of objects and lights to set up your lightmap.
103
+ */
104
+ addObjectsToLightMap( objects ) {
105
+
106
+ // Prepare list of UV bounding boxes for packing later...
107
+ this.uv_boxes = []; const padding = 3 / this.res;
108
+
109
+ for ( let ob = 0; ob < objects.length; ob ++ ) {
110
+
111
+ const object = objects[ ob ];
112
+
113
+ // If this object is a light, simply add it to the internal scene
114
+ if ( object.isLight ) {
115
+
116
+ this.scene.attach( object ); continue;
117
+
118
+ }
119
+
120
+ if ( object.geometry.hasAttribute( 'uv' ) === false ) {
121
+
122
+ console.warn( 'THREE.ProgressiveLightMap: All lightmap objects need uvs.' ); continue;
123
+
124
+ }
125
+
126
+ if ( object.geometry.hasAttribute( 'normal' ) === false ) {
127
+
128
+ console.warn( 'THREE.ProgressiveLightMap: All lightmap objects need normals.' ); continue;
129
+
130
+ }
131
+
132
+ if ( this.blurringPlane === null ) {
133
+
134
+ this._initializeBlurPlane( this.res, this.progressiveLightMap1 );
135
+
136
+ }
137
+
138
+ // Apply the lightmap to the object
139
+ object.material.lightMap = this.progressiveLightMap2.texture;
140
+ object.material.dithering = true;
141
+ object.castShadow = true;
142
+ object.receiveShadow = true;
143
+ object.renderOrder = 1000 + ob;
144
+
145
+ // Prepare UV boxes for potpack
146
+ // TODO: Size these by object surface area
147
+ this.uv_boxes.push( { w: 1 + ( padding * 2 ),
148
+ h: 1 + ( padding * 2 ), index: ob } );
149
+
150
+ this.lightMapContainers.push( { basicMat: object.material, object: object } );
151
+
152
+ }
153
+
154
+ // Pack the objects' lightmap UVs into the same global space
155
+ const dimensions = potpack( this.uv_boxes );
156
+ this.uv_boxes.forEach( ( box ) => {
157
+
158
+ const uv1 = objects[ box.index ].geometry.getAttribute( 'uv' ).clone();
159
+ for ( let i = 0; i < uv1.array.length; i += uv1.itemSize ) {
160
+
161
+ uv1.array[ i ] = ( uv1.array[ i ] + box.x + padding ) / dimensions.w;
162
+ uv1.array[ i + 1 ] = ( uv1.array[ i + 1 ] + box.y + padding ) / dimensions.h;
163
+
164
+ }
165
+
166
+ objects[ box.index ].geometry.setAttribute( 'uv1', uv1 );
167
+ objects[ box.index ].geometry.getAttribute( 'uv1' ).needsUpdate = true;
168
+
169
+ } );
170
+
171
+ }
172
+
173
+ /**
174
+ * This function renders each mesh one at a time into their respective surface maps.
175
+ *
176
+ * @param {Camera} camera - The camera the scene is rendered with.
177
+ * @param {number} [blendWindow=100] - When >1, samples will accumulate over time.
178
+ * @param {boolean} [blurEdges=true] - Whether to fix UV Edges via blurring.
179
+ */
180
+ update( camera, blendWindow = 100, blurEdges = true ) {
181
+
182
+ if ( this.blurringPlane === null ) {
183
+
184
+ return;
185
+
186
+ }
187
+
188
+ // Store the original Render Target
189
+ const oldTarget = this.renderer.getRenderTarget();
190
+
191
+ // The blurring plane applies blur to the seams of the lightmap
192
+ this.blurringPlane.visible = blurEdges;
193
+
194
+ // Steal the Object3D from the real world to our special dimension
195
+ for ( let l = 0; l < this.lightMapContainers.length; l ++ ) {
196
+
197
+ this.lightMapContainers[ l ].object.oldScene =
198
+ this.lightMapContainers[ l ].object.parent;
199
+ this.scene.attach( this.lightMapContainers[ l ].object );
200
+
201
+ }
202
+
203
+ // Initialize everything
204
+ if ( this.firstUpdate === true ) {
205
+
206
+ this.renderer.compile( this.scene, camera );
207
+ this.firstUpdate = false;
208
+
209
+ }
210
+
211
+ // Set each object's material to the UV Unwrapped Surface Mapping Version
212
+ for ( let l = 0; l < this.lightMapContainers.length; l ++ ) {
213
+
214
+ this.uvMat.uniforms.averagingWindow = { value: blendWindow };
215
+ this.lightMapContainers[ l ].object.material = this.uvMat;
216
+ this.lightMapContainers[ l ].object.oldFrustumCulled =
217
+ this.lightMapContainers[ l ].object.frustumCulled;
218
+ this.lightMapContainers[ l ].object.frustumCulled = false;
219
+
220
+ }
221
+
222
+ // Ping-pong two surface buffers for reading/writing
223
+ const activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;
224
+ const inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1;
225
+
226
+ // Render the object's surface maps
227
+ this.renderer.setRenderTarget( activeMap );
228
+ this.uvMat.uniforms.previousShadowMap = { value: inactiveMap.texture };
229
+ this.blurringPlane.material.uniforms.previousShadowMap = { value: inactiveMap.texture };
230
+ this.buffer1Active = ! this.buffer1Active;
231
+ this.renderer.render( this.scene, camera );
232
+
233
+ // Restore the object's Real-time Material and add it back to the original world
234
+ for ( let l = 0; l < this.lightMapContainers.length; l ++ ) {
235
+
236
+ this.lightMapContainers[ l ].object.frustumCulled =
237
+ this.lightMapContainers[ l ].object.oldFrustumCulled;
238
+ this.lightMapContainers[ l ].object.material = this.lightMapContainers[ l ].basicMat;
239
+ this.lightMapContainers[ l ].object.oldScene.attach( this.lightMapContainers[ l ].object );
240
+
241
+ }
242
+
243
+ // Restore the original Render Target
244
+ this.renderer.setRenderTarget( oldTarget );
245
+
246
+ }
247
+
248
+ /**
249
+ * Draws the lightmap in the main scene. Call this after adding the objects to it.
250
+ *
251
+ * @param {boolean} visible - Whether the debug plane should be visible
252
+ * @param {Vector3} [position] - Where the debug plane should be drawn
253
+ */
254
+ showDebugLightmap( visible, position = undefined ) {
255
+
256
+ if ( this.lightMapContainers.length === 0 ) {
257
+
258
+ console.warn( 'THREE.ProgressiveLightMap: Call .showDebugLightmap() after adding the objects.' );
259
+
260
+ return;
261
+
262
+ }
263
+
264
+ if ( this.labelMesh === null ) {
265
+
266
+ const labelMaterial = new MeshBasicMaterial( { map: this.progressiveLightMap1.texture, side: DoubleSide } );
267
+ const labelGeometry = new PlaneGeometry( 100, 100 );
268
+ this.labelMesh = new Mesh( labelGeometry, labelMaterial );
269
+ this.labelMesh.position.y = 250;
270
+ this.lightMapContainers[ 0 ].object.parent.add( this.labelMesh );
271
+
272
+ }
273
+
274
+ if ( position !== undefined ) {
275
+
276
+ this.labelMesh.position.copy( position );
277
+
278
+ }
279
+
280
+ this.labelMesh.visible = visible;
281
+
282
+ }
283
+
284
+ /**
285
+ * Creates the Blurring Plane.
286
+ *
287
+ * @private
288
+ * @param {number} res - The square resolution of this object's lightMap.
289
+ * @param {WebGLRenderTarget} lightMap - The lightmap to initialize the plane with.
290
+ */
291
+ _initializeBlurPlane( res, lightMap ) {
292
+
293
+ const blurMaterial = new MeshBasicMaterial();
294
+ blurMaterial.uniforms = { previousShadowMap: { value: null },
295
+ pixelOffset: { value: 1.0 / res },
296
+ polygonOffset: true, polygonOffsetFactor: - 1, polygonOffsetUnits: 3.0 };
297
+ blurMaterial.onBeforeCompile = ( shader ) => {
298
+
299
+ // Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions
300
+ shader.vertexShader =
301
+ '#define USE_UV\n' +
302
+ shader.vertexShader.slice( 0, - 1 ) +
303
+ ' gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }';
304
+
305
+ // Fragment Shader: Set Pixels to 9-tap box blur the current frame's Shadows
306
+ const bodyStart = shader.fragmentShader.indexOf( 'void main() {' );
307
+ shader.fragmentShader =
308
+ '#define USE_UV\n' +
309
+ shader.fragmentShader.slice( 0, bodyStart ) +
310
+ ' uniform sampler2D previousShadowMap;\n uniform float pixelOffset;\n' +
311
+ shader.fragmentShader.slice( bodyStart - 1, - 1 ) +
312
+ ` gl_FragColor.rgb = (
313
+ texture2D(previousShadowMap, vUv + vec2( pixelOffset, 0.0 )).rgb +
314
+ texture2D(previousShadowMap, vUv + vec2( 0.0 , pixelOffset)).rgb +
315
+ texture2D(previousShadowMap, vUv + vec2( 0.0 , -pixelOffset)).rgb +
316
+ texture2D(previousShadowMap, vUv + vec2(-pixelOffset, 0.0 )).rgb +
317
+ texture2D(previousShadowMap, vUv + vec2( pixelOffset, pixelOffset)).rgb +
318
+ texture2D(previousShadowMap, vUv + vec2(-pixelOffset, pixelOffset)).rgb +
319
+ texture2D(previousShadowMap, vUv + vec2( pixelOffset, -pixelOffset)).rgb +
320
+ texture2D(previousShadowMap, vUv + vec2(-pixelOffset, -pixelOffset)).rgb)/8.0;
321
+ }`;
322
+
323
+ // Set the LightMap Accumulation Buffer
324
+ shader.uniforms.previousShadowMap = { value: lightMap.texture };
325
+ shader.uniforms.pixelOffset = { value: 0.5 / res };
326
+ blurMaterial.uniforms = shader.uniforms;
327
+
328
+ // Set the new Shader to this
329
+ blurMaterial.userData.shader = shader;
330
+
331
+ };
332
+
333
+ this.blurringPlane = new Mesh( new PlaneGeometry( 1, 1 ), blurMaterial );
334
+ this.blurringPlane.name = 'Blurring Plane';
335
+ this.blurringPlane.frustumCulled = false;
336
+ this.blurringPlane.renderOrder = 0;
337
+ this.blurringPlane.material.depthWrite = false;
338
+ this.scene.add( this.blurringPlane );
339
+
340
+ }
341
+
342
+ /**
343
+ * Frees all internal resources.
344
+ */
345
+ dispose() {
346
+
347
+ this.progressiveLightMap1.dispose();
348
+ this.progressiveLightMap2.dispose();
349
+
350
+ this.uvMat.dispose();
351
+
352
+ if ( this.blurringPlane !== null ) {
353
+
354
+ this.blurringPlane.geometry.dispose();
355
+ this.blurringPlane.material.dispose();
356
+
357
+ }
358
+
359
+ if ( this.labelMesh !== null ) {
360
+
361
+ this.labelMesh.geometry.dispose();
362
+ this.labelMesh.material.dispose();
363
+
364
+ }
365
+
366
+ }
367
+
368
+ }
369
+
370
+ export { ProgressiveLightMap };
@@ -0,0 +1,322 @@
1
+ import { DoubleSide, FloatType, HalfFloatType, PlaneGeometry, Mesh, RenderTarget, Scene, MeshPhongNodeMaterial, NodeMaterial } from 'three/webgpu';
2
+ import { add, float, mix, output, sub, texture, uniform, uv, vec2, vec4 } from 'three/tsl';
3
+
4
+ import { potpack } from '../libs/potpack.module.js';
5
+
6
+ /**
7
+ * Progressive Light Map Accumulator, by [zalo](https://github.com/zalo/).
8
+ *
9
+ * To use, simply construct a `ProgressiveLightMap` object,
10
+ * `plmap.addObjectsToLightMap(object)` an array of semi-static
11
+ * objects and lights to the class once, and then call
12
+ * `plmap.update(camera)` every frame to begin accumulating
13
+ * lighting samples.
14
+ *
15
+ * This should begin accumulating lightmaps which apply to
16
+ * your objects, so you can start jittering lighting to achieve
17
+ * the texture-space effect you're looking for.
18
+ *
19
+ * This class can only be used with {@link WebGPURenderer}.
20
+ * When using {@link WebGLRenderer}, import from `ProgressiveLightMap.js`.
21
+ *
22
+ * @three_import import { ProgressiveLightMap } from 'three/addons/misc/ProgressiveLightMapGPU.js';
23
+ */
24
+ class ProgressiveLightMap {
25
+
26
+ /**
27
+ * @param {WebGPURenderer} renderer - The renderer.
28
+ * @param {number} [resolution=1024] - The side-long dimension of the total lightmap.
29
+ */
30
+ constructor( renderer, resolution = 1024 ) {
31
+
32
+ /**
33
+ * The renderer.
34
+ *
35
+ * @type {WebGPURenderer}
36
+ */
37
+ this.renderer = renderer;
38
+
39
+ /**
40
+ * The side-long dimension of the total lightmap.
41
+ *
42
+ * @type {number}
43
+ * @default 1024
44
+ */
45
+ this.resolution = resolution;
46
+
47
+ this._lightMapContainers = [];
48
+ this._scene = new Scene();
49
+ this._buffer1Active = false;
50
+ this._labelMesh = null;
51
+ this._blurringPlane = null;
52
+
53
+ // Create the Progressive LightMap Texture
54
+
55
+ const type = /(Android|iPad|iPhone|iPod)/g.test( navigator.userAgent ) ? HalfFloatType : FloatType;
56
+ this._progressiveLightMap1 = new RenderTarget( this.resolution, this.resolution, { type: type } );
57
+ this._progressiveLightMap2 = new RenderTarget( this.resolution, this.resolution, { type: type } );
58
+ this._progressiveLightMap2.texture.channel = 1;
59
+
60
+ // uniforms
61
+
62
+ this._averagingWindow = uniform( 100 );
63
+ this._previousShadowMap = texture( this._progressiveLightMap1.texture );
64
+
65
+ // materials
66
+
67
+ const uvNode = uv( 1 ).flipY();
68
+
69
+ this._uvMat = new MeshPhongNodeMaterial();
70
+ this._uvMat.vertexNode = vec4( sub( uvNode, vec2( 0.5 ) ).mul( 2 ), 1, 1 );
71
+ this._uvMat.outputNode = vec4( mix( this._previousShadowMap.sample( uv( 1 ) ), output, float( 1 ).div( this._averagingWindow ) ) );
72
+
73
+ }
74
+
75
+ /**
76
+ * Sets these objects' materials' lightmaps and modifies their uv1's.
77
+ *
78
+ * @param {Array<Object3D>} objects - An array of objects and lights to set up your lightmap.
79
+ */
80
+ addObjectsToLightMap( objects ) {
81
+
82
+ // Prepare list of UV bounding boxes for packing later...
83
+ const uv_boxes = [];
84
+
85
+ const padding = 3 / this.resolution;
86
+
87
+ for ( let ob = 0; ob < objects.length; ob ++ ) {
88
+
89
+ const object = objects[ ob ];
90
+
91
+ // If this object is a light, simply add it to the internal scene
92
+ if ( object.isLight ) {
93
+
94
+ this._scene.attach( object ); continue;
95
+
96
+ }
97
+
98
+ if ( object.geometry.hasAttribute( 'uv' ) === false ) {
99
+
100
+ console.warn( 'THREE.ProgressiveLightMap: All lightmap objects need uvs.' ); continue;
101
+
102
+ }
103
+
104
+ if ( object.geometry.hasAttribute( 'normal' ) === false ) {
105
+
106
+ console.warn( 'THREE.ProgressiveLightMap: All lightmap objects need normals.' ); continue;
107
+
108
+ }
109
+
110
+ if ( this._blurringPlane === null ) {
111
+
112
+ this._initializeBlurPlane();
113
+
114
+ }
115
+
116
+ // Apply the lightmap to the object
117
+ object.material.lightMap = this._progressiveLightMap2.texture;
118
+ object.material.dithering = true;
119
+ object.castShadow = true;
120
+ object.receiveShadow = true;
121
+ object.renderOrder = 1000 + ob;
122
+
123
+ // Prepare UV boxes for potpack (potpack will update x and y)
124
+ // TODO: Size these by object surface area
125
+ uv_boxes.push( { w: 1 + ( padding * 2 ), h: 1 + ( padding * 2 ), index: ob, x: 0, y: 0 } );
126
+
127
+ this._lightMapContainers.push( { basicMat: object.material, object: object } );
128
+
129
+ }
130
+
131
+ // Pack the objects' lightmap UVs into the same global space
132
+ const dimensions = potpack( uv_boxes );
133
+ uv_boxes.forEach( ( box ) => {
134
+
135
+ const uv1 = objects[ box.index ].geometry.getAttribute( 'uv' ).clone();
136
+ for ( let i = 0; i < uv1.array.length; i += uv1.itemSize ) {
137
+
138
+ uv1.array[ i ] = ( uv1.array[ i ] + box.x + padding ) / dimensions.w;
139
+ uv1.array[ i + 1 ] = 1 - ( ( uv1.array[ i + 1 ] + box.y + padding ) / dimensions.h );
140
+
141
+ }
142
+
143
+ objects[ box.index ].geometry.setAttribute( 'uv1', uv1 );
144
+ objects[ box.index ].geometry.getAttribute( 'uv1' ).needsUpdate = true;
145
+
146
+ } );
147
+
148
+ }
149
+
150
+ /**
151
+ * Frees all internal resources.
152
+ */
153
+ dispose() {
154
+
155
+ this._progressiveLightMap1.dispose();
156
+ this._progressiveLightMap2.dispose();
157
+
158
+ this._uvMat.dispose();
159
+
160
+ if ( this._blurringPlane !== null ) {
161
+
162
+ this._blurringPlane.geometry.dispose();
163
+ this._blurringPlane.material.dispose();
164
+
165
+ }
166
+
167
+ if ( this._labelMesh !== null ) {
168
+
169
+ this._labelMesh.geometry.dispose();
170
+ this._labelMesh.material.dispose();
171
+
172
+ }
173
+
174
+ }
175
+
176
+ /**
177
+ * This function renders each mesh one at a time into their respective surface maps.
178
+ *
179
+ * @param {Camera} camera - The camera the scene is rendered with.
180
+ * @param {number} [blendWindow=100] - When >1, samples will accumulate over time.
181
+ * @param {boolean} [blurEdges=true] - Whether to fix UV Edges via blurring.
182
+ */
183
+ update( camera, blendWindow = 100, blurEdges = true ) {
184
+
185
+ if ( this._blurringPlane === null ) {
186
+
187
+ return;
188
+
189
+ }
190
+
191
+ // Store the original Render Target
192
+ const currentRenderTarget = this.renderer.getRenderTarget();
193
+
194
+ // The blurring plane applies blur to the seams of the lightmap
195
+ this._blurringPlane.visible = blurEdges;
196
+
197
+ // Steal the Object3D from the real world to our special dimension
198
+ for ( let l = 0; l < this._lightMapContainers.length; l ++ ) {
199
+
200
+ this._lightMapContainers[ l ].object.oldScene = this._lightMapContainers[ l ].object.parent;
201
+ this._scene.attach( this._lightMapContainers[ l ].object );
202
+
203
+ }
204
+
205
+ // Set each object's material to the UV Unwrapped Surface Mapping Version
206
+ for ( let l = 0; l < this._lightMapContainers.length; l ++ ) {
207
+
208
+ this._averagingWindow.value = blendWindow;
209
+ this._lightMapContainers[ l ].object.material = this._uvMat;
210
+ this._lightMapContainers[ l ].object.oldFrustumCulled = this._lightMapContainers[ l ].object.frustumCulled;
211
+ this._lightMapContainers[ l ].object.frustumCulled = false;
212
+
213
+ }
214
+
215
+ // Ping-pong two surface buffers for reading/writing
216
+ const activeMap = this._buffer1Active ? this._progressiveLightMap1 : this._progressiveLightMap2;
217
+ const inactiveMap = this._buffer1Active ? this._progressiveLightMap2 : this._progressiveLightMap1;
218
+
219
+ // Render the object's surface maps
220
+ this.renderer.setRenderTarget( activeMap );
221
+ this._previousShadowMap.value = inactiveMap.texture;
222
+
223
+ this._buffer1Active = ! this._buffer1Active;
224
+ this.renderer.render( this._scene, camera );
225
+
226
+ // Restore the object's Real-time Material and add it back to the original world
227
+ for ( let l = 0; l < this._lightMapContainers.length; l ++ ) {
228
+
229
+ this._lightMapContainers[ l ].object.frustumCulled = this._lightMapContainers[ l ].object.oldFrustumCulled;
230
+ this._lightMapContainers[ l ].object.material = this._lightMapContainers[ l ].basicMat;
231
+ this._lightMapContainers[ l ].object.oldScene.attach( this._lightMapContainers[ l ].object );
232
+
233
+ }
234
+
235
+ // Restore the original Render Target
236
+ this.renderer.setRenderTarget( currentRenderTarget );
237
+
238
+ }
239
+
240
+ /**
241
+ * Draws the lightmap in the main scene. Call this after adding the objects to it.
242
+ *
243
+ * @param {boolean} visible - Whether the debug plane should be visible
244
+ * @param {Vector3} [position] - Where the debug plane should be drawn
245
+ */
246
+ showDebugLightmap( visible, position = null ) {
247
+
248
+ if ( this._lightMapContainers.length === 0 ) {
249
+
250
+ console.warn( 'THREE.ProgressiveLightMap: Call .showDebugLightmap() after adding the objects.' );
251
+
252
+ return;
253
+
254
+ }
255
+
256
+ if ( this._labelMesh === null ) {
257
+
258
+ const labelMaterial = new NodeMaterial();
259
+ labelMaterial.colorNode = texture( this._progressiveLightMap1.texture ).sample( uv().flipY() );
260
+ labelMaterial.side = DoubleSide;
261
+
262
+ const labelGeometry = new PlaneGeometry( 100, 100 );
263
+
264
+ this._labelMesh = new Mesh( labelGeometry, labelMaterial );
265
+ this._labelMesh.position.y = 250;
266
+
267
+ this._lightMapContainers[ 0 ].object.parent.add( this._labelMesh );
268
+
269
+ }
270
+
271
+ if ( position !== null ) {
272
+
273
+ this._labelMesh.position.copy( position );
274
+
275
+ }
276
+
277
+ this._labelMesh.visible = visible;
278
+
279
+ }
280
+
281
+ /**
282
+ * Creates the Blurring Plane.
283
+ *
284
+ * @private
285
+ */
286
+ _initializeBlurPlane() {
287
+
288
+ const blurMaterial = new NodeMaterial();
289
+ blurMaterial.polygonOffset = true;
290
+ blurMaterial.polygonOffsetFactor = - 1;
291
+ blurMaterial.polygonOffsetUnits = 3;
292
+
293
+ blurMaterial.vertexNode = vec4( sub( uv(), vec2( 0.5 ) ).mul( 2 ), 1, 1 );
294
+
295
+ const uvNode = uv().flipY().toVar();
296
+ const pixelOffset = float( 0.5 ).div( float( this.resolution ) ).toVar();
297
+
298
+ const color = add(
299
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset, 0 ) ) ),
300
+ this._previousShadowMap.sample( uvNode.add( vec2( 0, pixelOffset ) ) ),
301
+ this._previousShadowMap.sample( uvNode.add( vec2( 0, pixelOffset.negate() ) ) ),
302
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset.negate(), 0 ) ) ),
303
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset, pixelOffset ) ) ),
304
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset.negate(), pixelOffset ) ) ),
305
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset, pixelOffset.negate() ) ) ),
306
+ this._previousShadowMap.sample( uvNode.add( vec2( pixelOffset.negate(), pixelOffset.negate() ) ) ),
307
+ ).div( 8 );
308
+
309
+ blurMaterial.fragmentNode = color;
310
+
311
+ this._blurringPlane = new Mesh( new PlaneGeometry( 1, 1 ), blurMaterial );
312
+ this._blurringPlane.name = 'Blurring Plane';
313
+ this._blurringPlane.frustumCulled = false;
314
+ this._blurringPlane.renderOrder = 0;
315
+ this._blurringPlane.material.depthWrite = false;
316
+ this._scene.add( this._blurringPlane );
317
+
318
+ }
319
+
320
+ }
321
+
322
+ export { ProgressiveLightMap };