@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,572 @@
1
+ import { Node, NodeMaterial, NodeUpdateType, RenderTarget, Vector2, HalfFloatType, RedFormat, QuadMesh, RendererUtils } from 'three/webgpu';
2
+ import { convertToTexture, nodeObject, Fn, uniform, smoothstep, step, texture, max, uniformArray, outputStruct, property, vec4, vec3, uv, Loop, min, mix, float, context } from 'three/tsl';
3
+ import { gaussianBlur } from './GaussianBlurNode.js';
4
+
5
+ const _quadMesh = /*@__PURE__*/ new QuadMesh();
6
+ let _rendererState;
7
+
8
+ /**
9
+ * Post processing node for creating depth of field (DOF) effect.
10
+ *
11
+ * References:
12
+ * - {@link https://pixelmischiefblog.wordpress.com/2016/11/25/bokeh-depth-of-field/}
13
+ * - {@link https://www.adriancourreges.com/blog/2016/09/09/doom-2016-graphics-study/}
14
+ *
15
+ * @augments Node
16
+ * @three_import import { dof } from 'three/addons/tsl/display/DepthOfFieldNode.js';
17
+ */
18
+ class DepthOfFieldNode extends Node {
19
+
20
+ static get type() {
21
+
22
+ return 'DepthOfFieldNode';
23
+
24
+ }
25
+
26
+ /**
27
+ * Constructs a new DOF node.
28
+ *
29
+ * @param {TextureNode} textureNode - The texture node that represents the input of the effect.
30
+ * @param {Node<float>} viewZNode - Represents the viewZ depth values of the scene.
31
+ * @param {Node<float>} focusDistanceNode - Defines the effect's focus which is the distance along the camera's look direction in world units.
32
+ * @param {Node<float>} focalLengthNode - How far an object can be from the focal plane before it goes completely out-of-focus in world units.
33
+ * @param {Node<float>} bokehScaleNode - A unitless value for artistic purposes to adjust the size of the bokeh.
34
+ */
35
+ constructor( textureNode, viewZNode, focusDistanceNode, focalLengthNode, bokehScaleNode ) {
36
+
37
+ super( 'vec4' );
38
+
39
+ /**
40
+ * The texture node that represents the input of the effect.
41
+ *
42
+ * @type {TextureNode}
43
+ */
44
+ this.textureNode = textureNode;
45
+
46
+ /**
47
+ * Represents the viewZ depth values of the scene.
48
+ *
49
+ * @type {Node<float>}
50
+ */
51
+ this.viewZNode = viewZNode;
52
+
53
+ /**
54
+ * Defines the effect's focus which is the distance along the camera's look direction in world units.
55
+ *
56
+ * @type {Node<float>}
57
+ */
58
+ this.focusDistanceNode = focusDistanceNode;
59
+
60
+ /**
61
+ * How far an object can be from the focal plane before it goes completely out-of-focus in world units.
62
+ *
63
+ * @type {Node<float>}
64
+ */
65
+ this.focalLengthNode = focalLengthNode;
66
+
67
+ /**
68
+ * A unitless value for artistic purposes to adjust the size of the bokeh.
69
+ *
70
+ * @type {Node<float>}
71
+ */
72
+ this.bokehScaleNode = bokehScaleNode;
73
+
74
+ /**
75
+ * The inverse size of the resolution.
76
+ *
77
+ * @private
78
+ * @type {UniformNode<vec2>}
79
+ */
80
+ this._invSize = uniform( new Vector2() );
81
+
82
+ /**
83
+ * The render target used for the near and far field.
84
+ *
85
+ * @private
86
+ * @type {RenderTarget}
87
+ */
88
+ this._CoCRT = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType, format: RedFormat, count: 2 } );
89
+ this._CoCRT.textures[ 0 ].name = 'DepthOfField.NearField';
90
+ this._CoCRT.textures[ 1 ].name = 'DepthOfField.FarField';
91
+
92
+ /**
93
+ * The render target used for blurring the near field.
94
+ *
95
+ * @private
96
+ * @type {RenderTarget}
97
+ */
98
+ this._CoCBlurredRT = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType, format: RedFormat } );
99
+ this._CoCBlurredRT.texture.name = 'DepthOfField.NearFieldBlurred';
100
+
101
+ /**
102
+ * The render target used for the first blur pass.
103
+ *
104
+ * @private
105
+ * @type {RenderTarget}
106
+ */
107
+ this._blur64RT = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType } );
108
+ this._blur64RT.texture.name = 'DepthOfField.Blur64';
109
+
110
+ /**
111
+ * The render target used for the near field's second blur pass.
112
+ *
113
+ * @private
114
+ * @type {RenderTarget}
115
+ */
116
+ this._blur16NearRT = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType } );
117
+ this._blur16NearRT.texture.name = 'DepthOfField.Blur16Near';
118
+
119
+ /**
120
+ * The render target used for the far field's second blur pass.
121
+ *
122
+ * @private
123
+ * @type {RenderTarget}
124
+ */
125
+ this._blur16FarRT = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType } );
126
+ this._blur16FarRT.texture.name = 'DepthOfField.Blur16Far';
127
+
128
+ /**
129
+ * The render target used for the composite
130
+ *
131
+ * @private
132
+ * @type {RenderTarget}
133
+ */
134
+ this._compositeRT = new RenderTarget( 1, 1, { depthBuffer: false, type: HalfFloatType } );
135
+ this._compositeRT.texture.name = 'DepthOfField.Composite';
136
+
137
+ /**
138
+ * The material used for the CoC/near and far fields.
139
+ *
140
+ * @private
141
+ * @type {NodeMaterial}
142
+ */
143
+ this._CoCMaterial = new NodeMaterial();
144
+
145
+ /**
146
+ * The material used for blurring the near field.
147
+ *
148
+ * @private
149
+ * @type {NodeMaterial}
150
+ */
151
+ this._CoCBlurredMaterial = new NodeMaterial();
152
+
153
+ /**
154
+ * The material used for the 64 tap blur.
155
+ *
156
+ * @private
157
+ * @type {NodeMaterial}
158
+ */
159
+ this._blur64Material = new NodeMaterial();
160
+
161
+ /**
162
+ * The material used for the 16 tap blur.
163
+ *
164
+ * @private
165
+ * @type {NodeMaterial}
166
+ */
167
+ this._blur16Material = new NodeMaterial();
168
+
169
+ /**
170
+ * The material used for the final composite.
171
+ *
172
+ * @private
173
+ * @type {NodeMaterial}
174
+ */
175
+ this._compositeMaterial = new NodeMaterial();
176
+
177
+ /**
178
+ * The result of the effect is represented as a separate texture node.
179
+ *
180
+ * @private
181
+ * @type {TextureNode}
182
+ */
183
+ this._textureNode = texture( this._compositeRT.texture );
184
+
185
+ /**
186
+ * The result of the CoC pass as a texture node.
187
+ *
188
+ * @private
189
+ * @type {TextureNode}
190
+ */
191
+ this._CoCTextureNode = texture( this._CoCRT.texture );
192
+
193
+ /**
194
+ * The Gaussian blur node used to blur the near field's circle of confusion.
195
+ *
196
+ * @private
197
+ * @type {GaussianBlurNode}
198
+ */
199
+ this._CoCBlurNode = gaussianBlur( this._CoCTextureNode, 1, 2 );
200
+
201
+ /**
202
+ * The result of the blur64 pass as a texture node.
203
+ *
204
+ * @private
205
+ * @type {TextureNode}
206
+ */
207
+ this._blur64TextureNode = texture( this._blur64RT.texture );
208
+
209
+ /**
210
+ * The result of the near field's blur16 pass as a texture node.
211
+ *
212
+ * @private
213
+ * @type {TextureNode}
214
+ */
215
+ this._blur16NearTextureNode = texture( this._blur16NearRT.texture );
216
+
217
+ /**
218
+ * The result of the far field's blur16 pass as a texture node.
219
+ *
220
+ * @private
221
+ * @type {TextureNode}
222
+ */
223
+ this._blur16FarTextureNode = texture( this._blur16FarRT.texture );
224
+
225
+ /**
226
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
227
+ * its internal uniforms once per frame in `updateBefore()`.
228
+ *
229
+ * @type {string}
230
+ * @default 'frame'
231
+ */
232
+ this.updateBeforeType = NodeUpdateType.FRAME;
233
+
234
+ }
235
+
236
+ /**
237
+ * Sets the size of the effect.
238
+ *
239
+ * @param {number} width - The width of the effect.
240
+ * @param {number} height - The height of the effect.
241
+ */
242
+ setSize( width, height ) {
243
+
244
+ this._invSize.value.set( 1 / width, 1 / height );
245
+
246
+ this._CoCRT.setSize( width, height );
247
+ this._compositeRT.setSize( width, height );
248
+
249
+ // blur runs in half resolution
250
+
251
+ const halfResX = Math.round( width / 2 );
252
+ const halfResY = Math.round( height / 2 );
253
+
254
+ this._CoCBlurredRT.setSize( halfResX, halfResY );
255
+ this._blur64RT.setSize( halfResX, halfResY );
256
+ this._blur16NearRT.setSize( halfResX, halfResY );
257
+ this._blur16FarRT.setSize( halfResX, halfResY );
258
+
259
+ }
260
+
261
+ /**
262
+ * Returns the result of the effect as a texture node.
263
+ *
264
+ * @return {PassTextureNode} A texture node that represents the result of the effect.
265
+ */
266
+ getTextureNode() {
267
+
268
+ return this._textureNode;
269
+
270
+ }
271
+
272
+ /**
273
+ * This method is used to update the effect's uniforms once per frame.
274
+ *
275
+ * @param {NodeFrame} frame - The current node frame.
276
+ */
277
+ updateBefore( frame ) {
278
+
279
+ const { renderer } = frame;
280
+
281
+ // resize
282
+
283
+ const map = this.textureNode.value;
284
+ this.setSize( map.image.width, map.image.height );
285
+
286
+ // save state
287
+
288
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
289
+
290
+ renderer.setClearColor( 0x000000, 0 );
291
+
292
+ // coc
293
+
294
+ _quadMesh.material = this._CoCMaterial;
295
+ renderer.setRenderTarget( this._CoCRT );
296
+ _quadMesh.name = 'DoF [ CoC ]';
297
+ _quadMesh.render( renderer );
298
+
299
+ // blur near field to avoid visible aliased edges when the near field
300
+ // is blended with the background
301
+
302
+ this._CoCTextureNode.value = this._CoCRT.textures[ 0 ];
303
+
304
+ _quadMesh.material = this._CoCBlurredMaterial;
305
+ renderer.setRenderTarget( this._CoCBlurredRT );
306
+ _quadMesh.name = 'DoF [ CoC Blur ]';
307
+ _quadMesh.render( renderer );
308
+
309
+ // blur64 near
310
+
311
+ this._CoCTextureNode.value = this._CoCBlurredRT.texture;
312
+
313
+ _quadMesh.material = this._blur64Material;
314
+ renderer.setRenderTarget( this._blur64RT );
315
+ _quadMesh.name = 'DoF [ Blur64 Near ]';
316
+ _quadMesh.render( renderer );
317
+
318
+ // blur16 near
319
+
320
+ _quadMesh.material = this._blur16Material;
321
+ renderer.setRenderTarget( this._blur16NearRT );
322
+ _quadMesh.name = 'DoF [ Blur16 Near ]';
323
+ _quadMesh.render( renderer );
324
+
325
+ // blur64 far
326
+
327
+ this._CoCTextureNode.value = this._CoCRT.textures[ 1 ];
328
+
329
+ _quadMesh.material = this._blur64Material;
330
+ renderer.setRenderTarget( this._blur64RT );
331
+ _quadMesh.name = 'DoF [ Blur64 Far ]';
332
+ _quadMesh.render( renderer );
333
+
334
+ // blur16 far
335
+
336
+ _quadMesh.material = this._blur16Material;
337
+ renderer.setRenderTarget( this._blur16FarRT );
338
+ _quadMesh.name = 'DoF [ Blur16 Far ]';
339
+ _quadMesh.render( renderer );
340
+
341
+ // composite
342
+
343
+ _quadMesh.material = this._compositeMaterial;
344
+ renderer.setRenderTarget( this._compositeRT );
345
+ _quadMesh.name = 'DoF [ Composite ]';
346
+ _quadMesh.render( renderer );
347
+
348
+ // restore
349
+
350
+ RendererUtils.restoreRendererState( renderer, _rendererState );
351
+
352
+ }
353
+
354
+ /**
355
+ * This method is used to setup the effect's TSL code.
356
+ *
357
+ * @param {NodeBuilder} builder - The current node builder.
358
+ * @return {ShaderCallNodeInternal}
359
+ */
360
+ setup( builder ) {
361
+
362
+ const sharedContext = context( builder.getSharedContext() );
363
+
364
+ const kernels = this._generateKernels();
365
+
366
+ // CoC, near and far fields
367
+
368
+ const nearField = property( 'float' );
369
+ const farField = property( 'float' );
370
+
371
+ const outputNode = outputStruct( nearField, farField );
372
+
373
+ const CoC = Fn( () => {
374
+
375
+ const signedDist = this.viewZNode.negate().sub( this.focusDistanceNode );
376
+ const CoC = smoothstep( 0, this.focalLengthNode, signedDist.abs() );
377
+
378
+ nearField.assign( step( signedDist, 0 ).mul( CoC ) );
379
+ farField.assign( step( 0, signedDist ).mul( CoC ) );
380
+
381
+ return float( 0 );
382
+
383
+ } );
384
+
385
+ this._CoCMaterial.contextNode = sharedContext;
386
+ this._CoCMaterial.colorNode = CoC();
387
+ this._CoCMaterial.outputNode = outputNode;
388
+ this._CoCMaterial.needsUpdate = true;
389
+
390
+ // blurred CoC for near field
391
+
392
+ this._CoCBlurredMaterial.colorNode = this._CoCBlurNode;
393
+ this._CoCBlurredMaterial.needsUpdate = true;
394
+
395
+ // bokeh 64 blur pass
396
+
397
+ const bokeh64 = uniformArray( kernels.points64 );
398
+
399
+ const blur64 = Fn( () => {
400
+
401
+ const acc = vec3();
402
+ const uvNode = uv();
403
+
404
+ const CoC = this._CoCTextureNode.sample( uvNode ).r;
405
+ const sampleStep = this._invSize.mul( this.bokehScaleNode ).mul( CoC );
406
+
407
+ Loop( 64, ( { i } ) => {
408
+
409
+ const sUV = uvNode.add( sampleStep.mul( bokeh64.element( i ) ) );
410
+ const tap = this.textureNode.sample( sUV );
411
+
412
+ acc.addAssign( tap.rgb );
413
+
414
+ } );
415
+
416
+ acc.divAssign( 64 );
417
+
418
+ return vec4( acc, CoC );
419
+
420
+ } );
421
+
422
+ this._blur64Material.contextNode = sharedContext;
423
+ this._blur64Material.fragmentNode = blur64();
424
+ this._blur64Material.needsUpdate = true;
425
+
426
+ // bokeh 16 blur pass
427
+
428
+ const bokeh16 = uniformArray( kernels.points16 );
429
+
430
+ const blur16 = Fn( () => {
431
+
432
+ const uvNode = uv();
433
+
434
+ const col = this._blur64TextureNode.sample( uvNode ).toVar();
435
+ const maxVal = col.rgb;
436
+ const CoC = col.a;
437
+ const sampleStep = this._invSize.mul( this.bokehScaleNode ).mul( CoC );
438
+
439
+ Loop( 16, ( { i } ) => {
440
+
441
+ const sUV = uvNode.add( sampleStep.mul( bokeh16.element( i ) ) );
442
+ const tap = this._blur64TextureNode.sample( sUV );
443
+
444
+ maxVal.assign( max( tap.rgb, maxVal ) );
445
+
446
+ } );
447
+
448
+ return vec4( maxVal, CoC );
449
+
450
+ } );
451
+
452
+ this._blur16Material.contextNode = sharedContext;
453
+ this._blur16Material.fragmentNode = blur16();
454
+ this._blur16Material.needsUpdate = true;
455
+
456
+ // composite
457
+
458
+ const composite = Fn( () => {
459
+
460
+ const uvNode = uv();
461
+
462
+ const near = this._blur16NearTextureNode.sample( uvNode );
463
+ const far = this._blur16FarTextureNode.sample( uvNode );
464
+ const beauty = this.textureNode.sample( uvNode );
465
+
466
+ // TODO: applying the bokeh scale to the near field CoC value introduces blending
467
+ // issues around edges of blurred foreground objects when their are rendered above
468
+ // the background. for now, don't apply the bokeh scale to the blend factors. that
469
+ // will cause less blur for objects which are partly out-of-focus (CoC between 0 and 1).
470
+
471
+ const blendNear = min( near.a, 0.5 ).mul( 2 );
472
+ const blendFar = min( far.a, 0.5 ).mul( 2 );
473
+
474
+ const result = vec4( 0, 0, 0, 1 ).toVar();
475
+ result.rgb = mix( beauty.rgb, far.rgb, blendFar );
476
+ result.rgb = mix( result.rgb, near.rgb, blendNear );
477
+
478
+ return result;
479
+
480
+ } );
481
+
482
+ this._compositeMaterial.contextNode = sharedContext;
483
+ this._compositeMaterial.fragmentNode = composite();
484
+ this._compositeMaterial.needsUpdate = true;
485
+
486
+ return this._textureNode;
487
+
488
+ }
489
+
490
+ _generateKernels() {
491
+
492
+ // Vogel's method, see https://www.shadertoy.com/view/4fBXRG
493
+ // this approach allows to generate uniformly distributed sample
494
+ // points in a disc-shaped pattern. Blurring with these samples
495
+ // produces a typical optical lens blur
496
+
497
+ const GOLDEN_ANGLE = 2.39996323;
498
+ const SAMPLES = 80;
499
+
500
+ const points64 = [];
501
+ const points16 = [];
502
+
503
+ let idx64 = 0;
504
+ let idx16 = 0;
505
+
506
+ for ( let i = 0; i < SAMPLES; i ++ ) {
507
+
508
+ const theta = i * GOLDEN_ANGLE;
509
+ const r = Math.sqrt( i ) / Math.sqrt( SAMPLES );
510
+
511
+ const p = new Vector2( r * Math.cos( theta ), r * Math.sin( theta ) );
512
+
513
+ if ( i % 5 === 0 ) {
514
+
515
+ points16[ idx16 ] = p;
516
+ idx16 ++;
517
+
518
+ } else {
519
+
520
+ points64[ idx64 ] = p;
521
+ idx64 ++;
522
+
523
+ }
524
+
525
+ }
526
+
527
+ return { points16, points64 };
528
+
529
+ }
530
+
531
+ /**
532
+ * Frees internal resources. This method should be called
533
+ * when the effect is no longer required.
534
+ */
535
+ dispose() {
536
+
537
+ super.dispose();
538
+
539
+ this._CoCRT.dispose();
540
+ this._CoCBlurredRT.dispose();
541
+ this._blur64RT.dispose();
542
+ this._blur16NearRT.dispose();
543
+ this._blur16FarRT.dispose();
544
+ this._compositeRT.dispose();
545
+
546
+ this._CoCMaterial.dispose();
547
+ this._CoCBlurredMaterial.dispose();
548
+ this._blur64Material.dispose();
549
+ this._blur16Material.dispose();
550
+ this._compositeMaterial.dispose();
551
+
552
+ this._CoCBlurNode.dispose();
553
+
554
+ }
555
+
556
+ }
557
+
558
+ export default DepthOfFieldNode;
559
+
560
+ /**
561
+ * TSL function for creating a depth-of-field effect (DOF) for post processing.
562
+ *
563
+ * @tsl
564
+ * @function
565
+ * @param {Node<vec4>} node - The node that represents the input of the effect.
566
+ * @param {Node<float>} viewZNode - Represents the viewZ depth values of the scene.
567
+ * @param {Node<float> | number} focusDistance - Defines the effect's focus which is the distance along the camera's look direction in world units.
568
+ * @param {Node<float> | number} focalLength - How far an object can be from the focal plane before it goes completely out-of-focus in world units.
569
+ * @param {Node<float> | number} bokehScale - A unitless value for artistic purposes to adjust the size of the bokeh.
570
+ * @returns {DepthOfFieldNode}
571
+ */
572
+ export const dof = ( node, viewZNode, focusDistance = 1, focalLength = 1, bokehScale = 1 ) => new DepthOfFieldNode( convertToTexture( node ), nodeObject( viewZNode ), nodeObject( focusDistance ), nodeObject( focalLength ), nodeObject( bokehScale ) );
@@ -0,0 +1,104 @@
1
+ import { Node } from 'three/webgpu';
2
+ import { nodeObject, Fn, uv, vec2, vec3, sin, cos, add, vec4, screenSize } from 'three/tsl';
3
+
4
+ /**
5
+ * Post processing node for creating dot-screen effect.
6
+ *
7
+ * @augments Node
8
+ * @three_import import { dotScreen } from 'three/addons/tsl/display/DotScreenNode.js';
9
+ */
10
+ class DotScreenNode extends Node {
11
+
12
+ static get type() {
13
+
14
+ return 'DotScreenNode';
15
+
16
+ }
17
+
18
+ /**
19
+ * Constructs a new dot screen node.
20
+ *
21
+ * @param {Node} inputNode - The node that represents the input of the effect.
22
+ * @param {number|Node<float>} [angle=1.57] - The rotation of the effect in radians.
23
+ * @param {number|Node<float>} [scale=1] - The scale of the effect. A higher value means smaller dots.
24
+ */
25
+ constructor( inputNode, angle = 1.57, scale = 1 ) {
26
+
27
+ super( 'vec4' );
28
+
29
+ /**
30
+ * The node that represents the input of the effect.
31
+ *
32
+ * @type {Node}
33
+ */
34
+ this.inputNode = inputNode;
35
+
36
+ /**
37
+ * The rotation of the effect in radians.
38
+ *
39
+ * @type {Node<float>}
40
+ */
41
+ this.angle = nodeObject( angle );
42
+
43
+ /**
44
+ * The scale of the effect. A higher value means smaller dots.
45
+ *
46
+ * @type {Node<float>}
47
+ */
48
+ this.scale = nodeObject( scale );
49
+
50
+ }
51
+
52
+ /**
53
+ * This method is used to setup the effect's TSL code.
54
+ *
55
+ * @param {NodeBuilder} builder - The current node builder.
56
+ * @return {ShaderCallNodeInternal}
57
+ */
58
+ setup() {
59
+
60
+ const inputNode = this.inputNode;
61
+
62
+ const pattern = Fn( () => {
63
+
64
+ const s = sin( this.angle );
65
+ const c = cos( this.angle );
66
+
67
+ const tex = uv().mul( screenSize );
68
+ const point = vec2( c.mul( tex.x ).sub( s.mul( tex.y ) ), s.mul( tex.x ).add( c.mul( tex.y ) ) ).mul( this.scale );
69
+
70
+ return sin( point.x ).mul( sin( point.y ) ).mul( 4 );
71
+
72
+ } );
73
+
74
+ const dotScreen = Fn( () => {
75
+
76
+ const color = inputNode;
77
+
78
+ const average = add( color.r, color.g, color.b ).div( 3 );
79
+
80
+ return vec4( vec3( average.mul( 10 ).sub( 5 ).add( pattern() ) ), color.a );
81
+
82
+ } );
83
+
84
+ const outputNode = dotScreen();
85
+
86
+ return outputNode;
87
+
88
+ }
89
+
90
+ }
91
+
92
+ export default DotScreenNode;
93
+
94
+ /**
95
+ * TSL function for creating a dot-screen node for post processing.
96
+ *
97
+ * @tsl
98
+ * @function
99
+ * @param {Node<vec4>} node - The node that represents the input of the effect.
100
+ * @param {number|Node<float>} [angle=1.57] - The rotation of the effect in radians.
101
+ * @param {number|Node<float>} [scale=1] - The scale of the effect. A higher value means smaller dots.
102
+ * @returns {DotScreenNode}
103
+ */
104
+ export const dotScreen = ( node, angle, scale ) => new DotScreenNode( nodeObject( node ), angle, scale );