@lampdotdev/lamp 0.0.0-stage → 0.36.2-nightly.16
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.
- package/LICENSE +21 -0
- package/README.md +397 -2
- package/Resources/Devices/roku.json +410 -0
- package/Resources/Devices/xbox-one.json +367 -0
- package/Resources/GameKit/NOTICE.md +63 -0
- package/Resources/GameKit/apple/LampPage.swift +1813 -0
- package/Resources/GameKit/apple/LampPlayer.swift +46 -0
- package/Resources/GameKit/apple/LampWebApp.swift +63 -0
- package/Resources/GameKit/apple/LampWebGame.swift +87 -0
- package/Resources/GameKit/apple/Native.swift +12 -0
- package/Resources/GameKit/build.sh +55 -0
- package/Resources/GameKit/lamp_game.h +116 -0
- package/Resources/GameKit/lamp_host.h +19 -0
- package/Resources/GameKit/lamp_kit.cpp +61 -0
- package/Resources/GameKit/lamp_sound.cpp +455 -0
- package/Resources/GameKit/lamp_xbox.cpp +374 -0
- package/Resources/GameKit/libraries/HandmadeMath.h +3940 -0
- package/Resources/GameKit/libraries/cgltf.h +7240 -0
- package/Resources/GameKit/libraries/dr_mp3.h +5430 -0
- package/Resources/GameKit/libraries/dr_wav.h +9209 -0
- package/Resources/GameKit/libraries/sokol_debugtext.h +4754 -0
- package/Resources/GameKit/libraries/sokol_gfx.h +29558 -0
- package/Resources/GameKit/libraries/sokol_gl.h +4538 -0
- package/Resources/GameKit/libraries/sokol_log.h +335 -0
- package/Resources/GameKit/libraries/sokol_shape.h +1531 -0
- package/Resources/GameKit/libraries/stb_image.h +7988 -0
- package/Resources/GameKit/libraries/stb_vorbis.c +5584 -0
- package/Resources/GameKit/page/lamp-live.js +672 -0
- package/Resources/GameKit/scaffold/Game/game.cpp +142 -0
- package/Resources/GameKit/scaffold/Game/scene.glsl +49 -0
- package/Resources/GameKit/scaffold-web/Web/game.js +31 -0
- package/Resources/GameKit/scaffold-web/Web/index.html +13 -0
- package/Resources/GameKit/scaffold-web/Web/making.js +33 -0
- package/Resources/GameKit/scaffold-web/Web/world.js +33 -0
- package/Resources/GameKit/web/lamp-game.js +3042 -0
- package/Resources/GameKit/web/lamp-phaser.js +128 -0
- package/Resources/WebHost/App.exe +0 -0
- package/Resources/WebHost/Microsoft.Web.WebView2.Core.dll +0 -0
- package/Resources/WebHost/WebView2-LICENSE.txt +27 -0
- package/Resources/WebHost/lamp_controllers.h +1506 -0
- package/Resources/WebHost/lamp_web_host.cpp +1173 -0
- package/Resources/WebLibraries/earlier.txt +318 -0
- package/Resources/WebLibraries/phaser/LICENSE.md +20 -0
- package/Resources/WebLibraries/phaser/NOTICE.md +2 -0
- package/Resources/WebLibraries/phaser/phaser.esm.min.js +1 -0
- package/Resources/WebLibraries/qrcode/LICENSE +21 -0
- package/Resources/WebLibraries/qrcode/NOTICE.md +4 -0
- package/Resources/WebLibraries/qrcode/qrcode.js +2297 -0
- package/Resources/WebLibraries/rapier/LICENSE +201 -0
- package/Resources/WebLibraries/rapier/NOTICE.md +3 -0
- package/Resources/WebLibraries/rapier/rapier.js +2 -0
- package/Resources/WebLibraries/three/LICENSE +21 -0
- package/Resources/WebLibraries/three/NOTICE.md +4 -0
- package/Resources/WebLibraries/three/addons/animation/AnimationClipCreator.js +168 -0
- package/Resources/WebLibraries/three/addons/animation/CCDIKSolver.js +607 -0
- package/Resources/WebLibraries/three/addons/controls/ArcballControls.js +3543 -0
- package/Resources/WebLibraries/three/addons/controls/DragControls.js +452 -0
- package/Resources/WebLibraries/three/addons/controls/FirstPersonControls.js +512 -0
- package/Resources/WebLibraries/three/addons/controls/FlyControls.js +384 -0
- package/Resources/WebLibraries/three/addons/controls/MapControls.js +116 -0
- package/Resources/WebLibraries/three/addons/controls/OrbitControls.js +1985 -0
- package/Resources/WebLibraries/three/addons/controls/PointerLockControls.js +264 -0
- package/Resources/WebLibraries/three/addons/controls/TrackballControls.js +1106 -0
- package/Resources/WebLibraries/three/addons/controls/TransformControls.js +2003 -0
- package/Resources/WebLibraries/three/addons/curves/CurveExtras.js +694 -0
- package/Resources/WebLibraries/three/addons/curves/NURBSCurve.js +169 -0
- package/Resources/WebLibraries/three/addons/curves/NURBSSurface.js +98 -0
- package/Resources/WebLibraries/three/addons/curves/NURBSUtils.js +532 -0
- package/Resources/WebLibraries/three/addons/curves/NURBSVolume.js +82 -0
- package/Resources/WebLibraries/three/addons/effects/AnaglyphEffect.js +274 -0
- package/Resources/WebLibraries/three/addons/effects/AsciiEffect.js +323 -0
- package/Resources/WebLibraries/three/addons/effects/OutlineEffect.js +489 -0
- package/Resources/WebLibraries/three/addons/effects/ParallaxBarrierEffect.js +155 -0
- package/Resources/WebLibraries/three/addons/effects/StereoEffect.js +91 -0
- package/Resources/WebLibraries/three/addons/environments/ColorEnvironment.js +59 -0
- package/Resources/WebLibraries/three/addons/environments/DebugEnvironment.js +102 -0
- package/Resources/WebLibraries/three/addons/environments/RoomEnvironment.js +185 -0
- package/Resources/WebLibraries/three/addons/geometries/BoxLineGeometry.js +92 -0
- package/Resources/WebLibraries/three/addons/geometries/ConvexGeometry.js +72 -0
- package/Resources/WebLibraries/three/addons/geometries/DecalGeometry.js +420 -0
- package/Resources/WebLibraries/three/addons/geometries/LoftGeometry.js +355 -0
- package/Resources/WebLibraries/three/addons/geometries/ParametricFunctions.js +100 -0
- package/Resources/WebLibraries/three/addons/geometries/ParametricGeometry.js +172 -0
- package/Resources/WebLibraries/three/addons/geometries/RoundedBoxGeometry.js +216 -0
- package/Resources/WebLibraries/three/addons/geometries/TeapotGeometry.js +689 -0
- package/Resources/WebLibraries/three/addons/geometries/TextGeometry.js +102 -0
- package/Resources/WebLibraries/three/addons/helpers/AnimationPathHelper.js +302 -0
- package/Resources/WebLibraries/three/addons/helpers/LightProbeGridHelper.js +166 -0
- package/Resources/WebLibraries/three/addons/helpers/LightProbeGridHelperWebGL.js +221 -0
- package/Resources/WebLibraries/three/addons/helpers/LightProbeHelper.js +166 -0
- package/Resources/WebLibraries/three/addons/helpers/LightProbeHelperGPU.js +102 -0
- package/Resources/WebLibraries/three/addons/helpers/OctreeHelper.js +109 -0
- package/Resources/WebLibraries/three/addons/helpers/PositionalAudioHelper.js +169 -0
- package/Resources/WebLibraries/three/addons/helpers/RapierHelper.js +59 -0
- package/Resources/WebLibraries/three/addons/helpers/RectAreaLightHelper.js +118 -0
- package/Resources/WebLibraries/three/addons/helpers/TextureHelper.js +265 -0
- package/Resources/WebLibraries/three/addons/helpers/TextureHelperGPU.js +214 -0
- package/Resources/WebLibraries/three/addons/helpers/VertexNormalsHelper.js +155 -0
- package/Resources/WebLibraries/three/addons/helpers/VertexTangentsHelper.js +133 -0
- package/Resources/WebLibraries/three/addons/helpers/ViewHelper.js +529 -0
- package/Resources/WebLibraries/three/addons/interactive/HTMLMesh.js +617 -0
- package/Resources/WebLibraries/three/addons/interactive/InteractiveGroup.js +224 -0
- package/Resources/WebLibraries/three/addons/interactive/SelectionBox.js +324 -0
- package/Resources/WebLibraries/three/addons/interactive/SelectionHelper.js +150 -0
- package/Resources/WebLibraries/three/addons/libs/fflate.module.js +2699 -0
- package/Resources/WebLibraries/three/addons/libs/lil-gui.module.min.js +8 -0
- package/Resources/WebLibraries/three/addons/libs/meshopt_decoder.module.js +196 -0
- package/Resources/WebLibraries/three/addons/libs/potpack.module.js +125 -0
- package/Resources/WebLibraries/three/addons/libs/stats.module.js +167 -0
- package/Resources/WebLibraries/three/addons/libs/tween.module.js +876 -0
- package/Resources/WebLibraries/three/addons/lighting/ClusteredLighting.js +153 -0
- package/Resources/WebLibraries/three/addons/lighting/DynamicLighting.js +82 -0
- package/Resources/WebLibraries/three/addons/lighting/LightMapper.js +295 -0
- package/Resources/WebLibraries/three/addons/lighting/LightProbeGrid.js +923 -0
- package/Resources/WebLibraries/three/addons/lighting/LightProbeGridUtils.js +107 -0
- package/Resources/WebLibraries/three/addons/lighting/LightProbeGridWebGL.js +846 -0
- package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIConeTracer.js +243 -0
- package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIIrradiance.js +43 -0
- package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGINode.js +617 -0
- package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGISceneCollector.js +793 -0
- package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIVolume.js +1440 -0
- package/Resources/WebLibraries/three/addons/lights/LightProbeGenerator.js +337 -0
- package/Resources/WebLibraries/three/addons/lights/RectAreaLightTexturesLib.js +127 -0
- package/Resources/WebLibraries/three/addons/lights/RectAreaLightUniformsLib.js +40 -0
- package/Resources/WebLibraries/three/addons/lights/SunLight.js +100 -0
- package/Resources/WebLibraries/three/addons/lights/SunLightNode.js +56 -0
- package/Resources/WebLibraries/three/addons/lights/SunLightShadow.js +319 -0
- package/Resources/WebLibraries/three/addons/lights/SunShadowNode.js +312 -0
- package/Resources/WebLibraries/three/addons/lines/Line2.js +56 -0
- package/Resources/WebLibraries/three/addons/lines/LineGeometry.js +157 -0
- package/Resources/WebLibraries/three/addons/lines/LineMaterial.js +742 -0
- package/Resources/WebLibraries/three/addons/lines/LineSegments2.js +434 -0
- package/Resources/WebLibraries/three/addons/lines/LineSegmentsGeometry.js +298 -0
- package/Resources/WebLibraries/three/addons/lines/Wireframe.js +108 -0
- package/Resources/WebLibraries/three/addons/lines/WireframeGeometry2.js +49 -0
- package/Resources/WebLibraries/three/addons/lines/webgpu/Line2.js +46 -0
- package/Resources/WebLibraries/three/addons/lines/webgpu/LineSegments2.js +419 -0
- package/Resources/WebLibraries/three/addons/lines/webgpu/Wireframe.js +86 -0
- package/Resources/WebLibraries/three/addons/loaders/EXRLoader.js +3411 -0
- package/Resources/WebLibraries/three/addons/loaders/FBXLoader.js +4660 -0
- package/Resources/WebLibraries/three/addons/loaders/FontLoader.js +262 -0
- package/Resources/WebLibraries/three/addons/loaders/GLTFLoader.js +5006 -0
- package/Resources/WebLibraries/three/addons/loaders/HDRLoader.js +463 -0
- package/Resources/WebLibraries/three/addons/loaders/MTLLoader.js +601 -0
- package/Resources/WebLibraries/three/addons/loaders/OBJLoader.js +961 -0
- package/Resources/WebLibraries/three/addons/loaders/PLYLoader.js +992 -0
- package/Resources/WebLibraries/three/addons/loaders/RGBELoader.js +18 -0
- package/Resources/WebLibraries/three/addons/loaders/STLLoader.js +423 -0
- package/Resources/WebLibraries/three/addons/loaders/SVGLoader.js +3297 -0
- package/Resources/WebLibraries/three/addons/loaders/TGALoader.js +539 -0
- package/Resources/WebLibraries/three/addons/loaders/UltraHDRLoader.js +757 -0
- package/Resources/WebLibraries/three/addons/math/Capsule.js +159 -0
- package/Resources/WebLibraries/three/addons/math/ColorConverter.js +62 -0
- package/Resources/WebLibraries/three/addons/math/ColorSpaces.js +147 -0
- package/Resources/WebLibraries/three/addons/math/ConvexHull.js +1695 -0
- package/Resources/WebLibraries/three/addons/math/ImprovedNoise.js +88 -0
- package/Resources/WebLibraries/three/addons/math/Lut.js +317 -0
- package/Resources/WebLibraries/three/addons/math/MeshSurfaceSampler.js +315 -0
- package/Resources/WebLibraries/three/addons/math/OBB.js +535 -0
- package/Resources/WebLibraries/three/addons/math/Octree.js +825 -0
- package/Resources/WebLibraries/three/addons/math/SimplexNoise.js +470 -0
- package/Resources/WebLibraries/three/addons/misc/ConvexObjectBreaker.js +539 -0
- package/Resources/WebLibraries/three/addons/misc/GPUComputationRenderer.js +508 -0
- package/Resources/WebLibraries/three/addons/misc/Gyroscope.js +78 -0
- package/Resources/WebLibraries/three/addons/misc/MorphAnimMesh.js +119 -0
- package/Resources/WebLibraries/three/addons/misc/MorphBlendMesh.js +425 -0
- package/Resources/WebLibraries/three/addons/misc/ProgressiveLightMap.js +370 -0
- package/Resources/WebLibraries/three/addons/misc/ProgressiveLightMapGPU.js +322 -0
- package/Resources/WebLibraries/three/addons/misc/RollerCoaster.js +661 -0
- package/Resources/WebLibraries/three/addons/misc/Sculptor.js +1679 -0
- package/Resources/WebLibraries/three/addons/misc/SculptorMesh.js +1504 -0
- package/Resources/WebLibraries/three/addons/misc/SculptorTools.js +1180 -0
- package/Resources/WebLibraries/three/addons/misc/SculptorUtils.js +345 -0
- package/Resources/WebLibraries/three/addons/misc/TileCreasedNormalsPlugin.js +270 -0
- package/Resources/WebLibraries/three/addons/misc/TubePainter.js +611 -0
- package/Resources/WebLibraries/three/addons/misc/Volume.js +520 -0
- package/Resources/WebLibraries/three/addons/misc/VolumeSlice.js +275 -0
- package/Resources/WebLibraries/three/addons/modifiers/CurveModifier.js +374 -0
- package/Resources/WebLibraries/three/addons/modifiers/CurveModifierGPU.js +256 -0
- package/Resources/WebLibraries/three/addons/modifiers/EdgeSplitModifier.js +299 -0
- package/Resources/WebLibraries/three/addons/modifiers/TessellateModifier.js +340 -0
- package/Resources/WebLibraries/three/addons/objects/GroundedSkybox.js +69 -0
- package/Resources/WebLibraries/three/addons/objects/Lensflare.js +489 -0
- package/Resources/WebLibraries/three/addons/objects/LensflareMesh.js +376 -0
- package/Resources/WebLibraries/three/addons/objects/MarchingCubes.js +1261 -0
- package/Resources/WebLibraries/three/addons/objects/Reflector.js +390 -0
- package/Resources/WebLibraries/three/addons/objects/ReflectorForSSRPass.js +393 -0
- package/Resources/WebLibraries/three/addons/objects/Refractor.js +389 -0
- package/Resources/WebLibraries/three/addons/objects/ShadowMesh.js +130 -0
- package/Resources/WebLibraries/three/addons/objects/Sky.js +342 -0
- package/Resources/WebLibraries/three/addons/objects/SkyMesh.js +403 -0
- package/Resources/WebLibraries/three/addons/objects/Water.js +374 -0
- package/Resources/WebLibraries/three/addons/objects/Water2.js +403 -0
- package/Resources/WebLibraries/three/addons/objects/Water2Mesh.js +199 -0
- package/Resources/WebLibraries/three/addons/objects/WaterMesh.js +194 -0
- package/Resources/WebLibraries/three/addons/postprocessing/AfterimagePass.js +187 -0
- package/Resources/WebLibraries/three/addons/postprocessing/BloomPass.js +274 -0
- package/Resources/WebLibraries/three/addons/postprocessing/BokehPass.js +218 -0
- package/Resources/WebLibraries/three/addons/postprocessing/ClearPass.js +97 -0
- package/Resources/WebLibraries/three/addons/postprocessing/CubeTexturePass.js +146 -0
- package/Resources/WebLibraries/three/addons/postprocessing/DotScreenPass.js +114 -0
- package/Resources/WebLibraries/three/addons/postprocessing/EffectComposer.js +365 -0
- package/Resources/WebLibraries/three/addons/postprocessing/FXAAPass.js +40 -0
- package/Resources/WebLibraries/three/addons/postprocessing/FilmPass.js +113 -0
- package/Resources/WebLibraries/three/addons/postprocessing/GTAOPass.js +735 -0
- package/Resources/WebLibraries/three/addons/postprocessing/GlitchPass.js +177 -0
- package/Resources/WebLibraries/three/addons/postprocessing/HalftonePass.js +134 -0
- package/Resources/WebLibraries/three/addons/postprocessing/LUTPass.js +138 -0
- package/Resources/WebLibraries/three/addons/postprocessing/MaskPass.js +195 -0
- package/Resources/WebLibraries/three/addons/postprocessing/OutlinePass.js +776 -0
- package/Resources/WebLibraries/three/addons/postprocessing/OutputPass.js +148 -0
- package/Resources/WebLibraries/three/addons/postprocessing/Pass.js +191 -0
- package/Resources/WebLibraries/three/addons/postprocessing/RenderPass.js +193 -0
- package/Resources/WebLibraries/three/addons/postprocessing/RenderPixelatedPass.js +314 -0
- package/Resources/WebLibraries/three/addons/postprocessing/RenderTransitionPass.js +267 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SAOPass.js +407 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SMAAPass.js +230 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SSAARenderPass.js +313 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SSAOPass.js +527 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SSRPass.js +858 -0
- package/Resources/WebLibraries/three/addons/postprocessing/SavePass.js +132 -0
- package/Resources/WebLibraries/three/addons/postprocessing/ShaderPass.js +135 -0
- package/Resources/WebLibraries/three/addons/postprocessing/TAARenderPass.js +243 -0
- package/Resources/WebLibraries/three/addons/postprocessing/TexturePass.js +131 -0
- package/Resources/WebLibraries/three/addons/postprocessing/UnrealBloomPass.js +541 -0
- package/Resources/WebLibraries/three/addons/shaders/ACESFilmicToneMappingShader.js +96 -0
- package/Resources/WebLibraries/three/addons/shaders/AfterimageShader.js +63 -0
- package/Resources/WebLibraries/three/addons/shaders/BasicShader.js +36 -0
- package/Resources/WebLibraries/three/addons/shaders/BleachBypassShader.js +68 -0
- package/Resources/WebLibraries/three/addons/shaders/BlendShader.js +56 -0
- package/Resources/WebLibraries/three/addons/shaders/BokehShader.js +151 -0
- package/Resources/WebLibraries/three/addons/shaders/BokehShader2.js +404 -0
- package/Resources/WebLibraries/three/addons/shaders/BrightnessContrastShader.js +62 -0
- package/Resources/WebLibraries/three/addons/shaders/ColorCorrectionShader.js +59 -0
- package/Resources/WebLibraries/three/addons/shaders/ColorifyShader.js +57 -0
- package/Resources/WebLibraries/three/addons/shaders/ConvolutionShader.js +74 -0
- package/Resources/WebLibraries/three/addons/shaders/CopyShader.js +52 -0
- package/Resources/WebLibraries/three/addons/shaders/DOFMipMapShader.js +63 -0
- package/Resources/WebLibraries/three/addons/shaders/DepthLimitedBlurShader.js +183 -0
- package/Resources/WebLibraries/three/addons/shaders/DigitalGlitch.js +104 -0
- package/Resources/WebLibraries/three/addons/shaders/DotScreenShader.js +75 -0
- package/Resources/WebLibraries/three/addons/shaders/ExposureShader.js +51 -0
- package/Resources/WebLibraries/three/addons/shaders/FXAAShader.js +298 -0
- package/Resources/WebLibraries/three/addons/shaders/FilmShader.js +73 -0
- package/Resources/WebLibraries/three/addons/shaders/FocusShader.js +94 -0
- package/Resources/WebLibraries/three/addons/shaders/FreiChenShader.js +103 -0
- package/Resources/WebLibraries/three/addons/shaders/GTAOShader.js +437 -0
- package/Resources/WebLibraries/three/addons/shaders/GammaCorrectionShader.js +52 -0
- package/Resources/WebLibraries/three/addons/shaders/HalftoneShader.js +332 -0
- package/Resources/WebLibraries/three/addons/shaders/HorizontalBlurShader.js +68 -0
- package/Resources/WebLibraries/three/addons/shaders/HorizontalTiltShiftShader.js +70 -0
- package/Resources/WebLibraries/three/addons/shaders/HueSaturationShader.js +74 -0
- package/Resources/WebLibraries/three/addons/shaders/KaleidoShader.js +65 -0
- package/Resources/WebLibraries/three/addons/shaders/LuminosityHighPassShader.js +68 -0
- package/Resources/WebLibraries/three/addons/shaders/LuminosityShader.js +54 -0
- package/Resources/WebLibraries/three/addons/shaders/MirrorShader.js +62 -0
- package/Resources/WebLibraries/three/addons/shaders/NormalMapShader.js +60 -0
- package/Resources/WebLibraries/three/addons/shaders/OutputShader.js +103 -0
- package/Resources/WebLibraries/three/addons/shaders/PoissonDenoiseShader.js +230 -0
- package/Resources/WebLibraries/three/addons/shaders/RGBShiftShader.js +61 -0
- package/Resources/WebLibraries/three/addons/shaders/SAOShader.js +201 -0
- package/Resources/WebLibraries/three/addons/shaders/SMAAShader.js +489 -0
- package/Resources/WebLibraries/three/addons/shaders/SSAOShader.js +331 -0
- package/Resources/WebLibraries/three/addons/shaders/SSRShader.js +396 -0
- package/Resources/WebLibraries/three/addons/shaders/SepiaShader.js +57 -0
- package/Resources/WebLibraries/three/addons/shaders/SobelOperatorShader.js +98 -0
- package/Resources/WebLibraries/three/addons/shaders/SubsurfaceScatteringShader.js +95 -0
- package/Resources/WebLibraries/three/addons/shaders/TechnicolorShader.js +51 -0
- package/Resources/WebLibraries/three/addons/shaders/ToonShader.js +349 -0
- package/Resources/WebLibraries/three/addons/shaders/TriangleBlurShader.js +79 -0
- package/Resources/WebLibraries/three/addons/shaders/UnpackDepthRGBAShader.js +60 -0
- package/Resources/WebLibraries/three/addons/shaders/VelocityShader.js +137 -0
- package/Resources/WebLibraries/three/addons/shaders/VerticalBlurShader.js +66 -0
- package/Resources/WebLibraries/three/addons/shaders/VerticalTiltShiftShader.js +70 -0
- package/Resources/WebLibraries/three/addons/shaders/VignetteShader.js +56 -0
- package/Resources/WebLibraries/three/addons/shaders/VolumeShader.js +285 -0
- package/Resources/WebLibraries/three/addons/shaders/WaterRefractionShader.js +106 -0
- package/Resources/WebLibraries/three/addons/textures/FlakesTexture.js +54 -0
- package/Resources/WebLibraries/three/addons/tsl/WebGLNodesHandler.js +607 -0
- package/Resources/WebLibraries/three/addons/tsl/display/AfterImageNode.js +256 -0
- package/Resources/WebLibraries/three/addons/tsl/display/AnaglyphPassNode.js +550 -0
- package/Resources/WebLibraries/three/addons/tsl/display/BilateralBlurNode.js +377 -0
- package/Resources/WebLibraries/three/addons/tsl/display/BleachBypass.js +33 -0
- package/Resources/WebLibraries/three/addons/tsl/display/BloomNode.js +599 -0
- package/Resources/WebLibraries/three/addons/tsl/display/CRT.js +150 -0
- package/Resources/WebLibraries/three/addons/tsl/display/ChromaticAberrationNode.js +163 -0
- package/Resources/WebLibraries/three/addons/tsl/display/DenoiseNode.js +354 -0
- package/Resources/WebLibraries/three/addons/tsl/display/DepthOfFieldNode.js +572 -0
- package/Resources/WebLibraries/three/addons/tsl/display/DotScreenNode.js +104 -0
- package/Resources/WebLibraries/three/addons/tsl/display/FSR1Node.js +481 -0
- package/Resources/WebLibraries/three/addons/tsl/display/FXAANode.js +357 -0
- package/Resources/WebLibraries/three/addons/tsl/display/FilmNode.js +101 -0
- package/Resources/WebLibraries/three/addons/tsl/display/GTAONode.js +727 -0
- package/Resources/WebLibraries/three/addons/tsl/display/GaussianBlurNode.js +412 -0
- package/Resources/WebLibraries/three/addons/tsl/display/GodraysNode.js +604 -0
- package/Resources/WebLibraries/three/addons/tsl/display/ImportanceSampledEnvironment.js +564 -0
- package/Resources/WebLibraries/three/addons/tsl/display/LensflareNode.js +282 -0
- package/Resources/WebLibraries/three/addons/tsl/display/Lut3DNode.js +109 -0
- package/Resources/WebLibraries/three/addons/tsl/display/MotionBlur.js +33 -0
- package/Resources/WebLibraries/three/addons/tsl/display/OITPassNode.js +341 -0
- package/Resources/WebLibraries/three/addons/tsl/display/OutlineNode.js +916 -0
- package/Resources/WebLibraries/three/addons/tsl/display/ParallaxBarrierPassNode.js +90 -0
- package/Resources/WebLibraries/three/addons/tsl/display/PixelationPassNode.js +227 -0
- package/Resources/WebLibraries/three/addons/tsl/display/RGBShiftNode.js +96 -0
- package/Resources/WebLibraries/three/addons/tsl/display/RecurrentDenoiseNode.js +812 -0
- package/Resources/WebLibraries/three/addons/tsl/display/RetroPassNode.js +263 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SMAANode.js +729 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SSAAPassNode.js +344 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SSAONode.js +422 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SSGINode.js +698 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SSRNode.js +1430 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SSSNode.js +479 -0
- package/Resources/WebLibraries/three/addons/tsl/display/Sepia.js +24 -0
- package/Resources/WebLibraries/three/addons/tsl/display/Shape.js +29 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SharpenNode.js +284 -0
- package/Resources/WebLibraries/three/addons/tsl/display/SobelOperatorNode.js +168 -0
- package/Resources/WebLibraries/three/addons/tsl/display/StereoCompositePassNode.js +190 -0
- package/Resources/WebLibraries/three/addons/tsl/display/StereoPassNode.js +117 -0
- package/Resources/WebLibraries/three/addons/tsl/display/TAAUNode.js +700 -0
- package/Resources/WebLibraries/three/addons/tsl/display/TRAANode.js +609 -0
- package/Resources/WebLibraries/three/addons/tsl/display/TemporalReprojectNode.js +1024 -0
- package/Resources/WebLibraries/three/addons/tsl/display/TransitionNode.js +141 -0
- package/Resources/WebLibraries/three/addons/tsl/display/boxBlur.js +65 -0
- package/Resources/WebLibraries/three/addons/tsl/display/depthAwareBlend.js +80 -0
- package/Resources/WebLibraries/three/addons/tsl/display/depthAwareBlur.js +63 -0
- package/Resources/WebLibraries/three/addons/tsl/display/hashBlur.js +55 -0
- package/Resources/WebLibraries/three/addons/tsl/display/lensDirt.js +30 -0
- package/Resources/WebLibraries/three/addons/tsl/display/radialBlur.js +68 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/ClusteredLightsNode.js +994 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/DynamicLightsNode.js +201 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/LightProbeGridNode.js +183 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/data/AmbientLightDataNode.js +67 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/data/DirectionalLightDataNode.js +117 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/data/HemisphereLightDataNode.js +105 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/data/PointLightDataNode.js +140 -0
- package/Resources/WebLibraries/three/addons/tsl/lighting/data/SpotLightDataNode.js +167 -0
- package/Resources/WebLibraries/three/addons/tsl/math/Bayer.js +84 -0
- package/Resources/WebLibraries/three/addons/tsl/math/curlNoise.js +107 -0
- package/Resources/WebLibraries/three/addons/tsl/math/voronoiNoise.js +112 -0
- package/Resources/WebLibraries/three/addons/tsl/shadows/TileShadowNode.js +542 -0
- package/Resources/WebLibraries/three/addons/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/GroundedSkybox.js +62 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/RNoise.js +51 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/Raymarching.js +70 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/SoftParticles.js +53 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/SpecularHelpers.js +302 -0
- package/Resources/WebLibraries/three/addons/tsl/utils/TAAUtils.js +184 -0
- package/Resources/WebLibraries/three/addons/utils/BufferGeometryUtils.js +1523 -0
- package/Resources/WebLibraries/three/addons/utils/CameraUtils.js +82 -0
- package/Resources/WebLibraries/three/addons/utils/ColorUtils.js +76 -0
- package/Resources/WebLibraries/three/addons/utils/GaussianSplatUtils.js +229 -0
- package/Resources/WebLibraries/three/addons/utils/GeometryCompressionUtils.js +547 -0
- package/Resources/WebLibraries/three/addons/utils/GeometryUtils.js +226 -0
- package/Resources/WebLibraries/three/addons/utils/LDrawUtils.js +211 -0
- package/Resources/WebLibraries/three/addons/utils/SceneOptimizer.js +459 -0
- package/Resources/WebLibraries/three/addons/utils/SceneUtils.js +363 -0
- package/Resources/WebLibraries/three/addons/utils/ShadowMapViewer.js +244 -0
- package/Resources/WebLibraries/three/addons/utils/ShadowMapViewerGPU.js +233 -0
- package/Resources/WebLibraries/three/addons/utils/SkeletonUtils.js +496 -0
- package/Resources/WebLibraries/three/addons/utils/SortUtils.js +175 -0
- package/Resources/WebLibraries/three/addons/utils/UVsDebug.js +173 -0
- package/Resources/WebLibraries/three/addons/utils/WebGLTextureUtils.js +115 -0
- package/Resources/WebLibraries/three/addons/utils/WebGPUTextureUtils.js +81 -0
- package/Resources/WebLibraries/three/addons/utils/WorkerPool.js +167 -0
- package/Resources/WebLibraries/three/addons/utils/unwrapUVs.js +865 -0
- package/Resources/WebLibraries/three/three.core.js +61162 -0
- package/Resources/WebLibraries/three/three.module.js +19537 -0
- package/Resources/WebLibraries/three/three.tsl.js +41903 -0
- package/Resources/WebLibraries/three/three.webgpu.js +53714 -0
- package/Resources/share-rules.json +64 -0
- package/Resources/skills/2d-game/SKILL.md +305 -0
- package/Resources/skills/3d-game/SKILL.md +274 -0
- package/Resources/skills/accounts/SKILL.md +41 -0
- package/Resources/skills/android-design/SKILL.md +159 -0
- package/Resources/skills/app-ai/SKILL.md +154 -0
- package/Resources/skills/app-intents/SKILL.md +31 -0
- package/Resources/skills/app-kinds/SKILL.md +122 -0
- package/Resources/skills/apple-watch/SKILL.md +43 -0
- package/Resources/skills/assets/SKILL.md +183 -0
- package/Resources/skills/building-blocks/SKILL.md +97 -0
- package/Resources/skills/device-control/SKILL.md +56 -0
- package/Resources/skills/device-integrations/SKILL.md +278 -0
- package/Resources/skills/finder-files/SKILL.md +19 -0
- package/Resources/skills/game/SKILL.md +416 -0
- package/Resources/skills/game-3d/SKILL.md +12 -0
- package/Resources/skills/game-art/SKILL.md +11 -0
- package/Resources/skills/game-feel/SKILL.md +13 -0
- package/Resources/skills/game-levels/SKILL.md +12 -0
- package/Resources/skills/game-live/SKILL.md +12 -0
- package/Resources/skills/game-physics/SKILL.md +13 -0
- package/Resources/skills/game-playtest/SKILL.md +26 -0
- package/Resources/skills/game-ui/SKILL.md +278 -0
- package/Resources/skills/github-projects/SKILL.md +62 -0
- package/Resources/skills/icloud-sync/SKILL.md +30 -0
- package/Resources/skills/iphone-hardware/SKILL.md +57 -0
- package/Resources/skills/iphone-widgets/SKILL.md +53 -0
- package/Resources/skills/lg-developer-mode/SKILL.md +152 -0
- package/Resources/skills/mac-widgets/SKILL.md +60 -0
- package/Resources/skills/maps/SKILL.md +8 -0
- package/Resources/skills/menu-bar/SKILL.md +36 -0
- package/Resources/skills/more-apps/SKILL.md +53 -0
- package/Resources/skills/phone-controllers/SKILL.md +79 -0
- package/Resources/skills/phone-pages/SKILL.md +173 -0
- package/Resources/skills/roku-developer-mode/SKILL.md +106 -0
- package/Resources/skills/scene-3d/SKILL.md +27 -0
- package/Resources/skills/scripting/SKILL.md +17 -0
- package/Resources/skills/share-extension/SKILL.md +22 -0
- package/Resources/skills/tv-design/SKILL.md +72 -0
- package/Resources/skills/web-app/SKILL.md +170 -0
- package/Resources/skills/web-game/SKILL.md +95 -0
- package/Resources/skills/web-or-native/SKILL.md +108 -0
- package/Resources/skills/wish-links/SKILL.md +156 -0
- package/THIRD_PARTY_NOTICES.md +170 -0
- package/cli/ai.mjs +237 -0
- package/cli/android.mjs +941 -0
- package/cli/app-ai.mjs +473 -0
- package/cli/browser.mjs +284 -0
- package/cli/calls.mjs +594 -0
- package/cli/dev.mjs +820 -0
- package/cli/devices.mjs +984 -0
- package/cli/lamp.mjs +1326 -0
- package/cli/lampapp.mjs +332 -0
- package/cli/lamps/android-host/LampPageGateway.kt +345 -0
- package/cli/lamps/android-host/app/build.gradle.kts +40 -0
- package/cli/lamps/android-host/build.gradle.kts +4 -0
- package/cli/lamps/android-host/game/AndroidManifest.xml +33 -0
- package/cli/lamps/android-host/game/MainActivity.kt +173 -0
- package/cli/lamps/android-host/gradle/libs.versions.toml +39 -0
- package/cli/lamps/android-host/gradle.properties +8 -0
- package/cli/lamps/android-host/page/AndroidManifest.xml +35 -0
- package/cli/lamps/android-host/page/MainActivity.kt +193 -0
- package/cli/lamps/android-host/settings.gradle.kts +30 -0
- package/cli/lamps/android-host/tools.json +43 -0
- package/cli/lamps/lamp-controllers.js +2 -0
- package/cli/lamps/lamp-for-games.js +6922 -0
- package/cli/lamps/lamp.js +7082 -0
- package/cli/lamps/mac-starter/.lamp/meta.json +1 -0
- package/cli/lamps/mac-starter/APP.md +12 -0
- package/cli/lamps/mac-starter/Package.swift +8 -0
- package/cli/lamps/mac-starter/Sources/App.swift +11 -0
- package/cli/lamps/mac-starter/Sources/ContentView.swift +17 -0
- package/cli/lamps/mac-starter/Sources/LampSupport.swift +18215 -0
- package/cli/lamps/mac-starter/build.sh +336 -0
- package/cli/lamps/mac-starter/gitignore +3 -0
- package/cli/lamps/mac-starter/lamp-starter.json +6 -0
- package/cli/lamps/web-starter/APP.md +8 -0
- package/cli/lamps/web-starter/app.js +1 -0
- package/cli/lamps/web-starter/index.html +17 -0
- package/cli/lamps/web-starter/lamp-starter.json +5 -0
- package/cli/lamps/web-starter/lamp.js +7082 -0
- package/cli/lamps/web-starter/style.css +25 -0
- package/cli/link.mjs +202 -0
- package/cli/local-ai.mjs +193 -0
- package/cli/mac.mjs +621 -0
- package/cli/mdns.mjs +205 -0
- package/cli/msix.mjs +413 -0
- package/cli/network.mjs +209 -0
- package/cli/openrouter.mjs +133 -0
- package/cli/outside.mjs +203 -0
- package/cli/page.js +317 -0
- package/cli/place.mjs +298 -0
- package/cli/png.mjs +184 -0
- package/cli/share.mjs +270 -0
- package/cli/skill/SKILL.md +280 -0
- package/cli/skills.mjs +71 -0
- package/cli/state.mjs +176 -0
- package/cli/update.mjs +162 -0
- package/package.json +20 -4
- package/site/lib/quota.js +59 -0
- package/site/lib/shared-wishes.js +1727 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Fn, float, vec2, vec3, sin, screenUV, mix, clamp, dot, convertToTexture, time, uv, select } from 'three/tsl';
|
|
2
|
+
import { circle } from './Shape.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Creates barrel-distorted UV coordinates.
|
|
6
|
+
* The center of the screen appears to bulge outward (convex distortion).
|
|
7
|
+
*
|
|
8
|
+
* @tsl
|
|
9
|
+
* @function
|
|
10
|
+
* @param {Node<float>} [curvature=0.1] - The amount of curvature (0 = flat, 0.5 = very curved).
|
|
11
|
+
* @param {Node<vec2>} [coord=uv()] - The input UV coordinates.
|
|
12
|
+
* @return {Node<vec2>} The distorted UV coordinates.
|
|
13
|
+
*/
|
|
14
|
+
export const barrelUV = Fn( ( [ curvature = float( 0.1 ), coord = uv() ] ) => {
|
|
15
|
+
|
|
16
|
+
// Center UV coordinates (-1 to 1)
|
|
17
|
+
const centered = coord.sub( 0.5 ).mul( 2.0 );
|
|
18
|
+
|
|
19
|
+
// Calculate squared distance from center
|
|
20
|
+
const r2 = dot( centered, centered );
|
|
21
|
+
|
|
22
|
+
// Barrel distortion: push center outward (bulge effect)
|
|
23
|
+
const distortion = float( 1.0 ).sub( r2.mul( curvature ) );
|
|
24
|
+
|
|
25
|
+
// Calculate scale to compensate for edge expansion
|
|
26
|
+
// At corners r² = 2, so we scale by the inverse of corner distortion
|
|
27
|
+
const cornerDistortion = float( 1.0 ).sub( curvature.mul( 2.0 ) );
|
|
28
|
+
|
|
29
|
+
// Apply distortion and compensate scale to keep edges aligned
|
|
30
|
+
const distorted = centered.div( distortion ).mul( cornerDistortion ).mul( 0.5 ).add( 0.5 );
|
|
31
|
+
|
|
32
|
+
return distorted;
|
|
33
|
+
|
|
34
|
+
} );
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Checks if UV coordinates are inside the valid 0-1 range.
|
|
38
|
+
* Useful for masking areas inside the distorted screen.
|
|
39
|
+
*
|
|
40
|
+
* @tsl
|
|
41
|
+
* @function
|
|
42
|
+
* @param {Node<vec2>} coord - The UV coordinates to check.
|
|
43
|
+
* @return {Node<float>} 1.0 if inside bounds, 0.0 if outside.
|
|
44
|
+
*/
|
|
45
|
+
export const barrelMask = Fn( ( [ coord ] ) => {
|
|
46
|
+
|
|
47
|
+
const outOfBounds = coord.x.lessThan( 0.0 )
|
|
48
|
+
.or( coord.x.greaterThan( 1.0 ) )
|
|
49
|
+
.or( coord.y.lessThan( 0.0 ) )
|
|
50
|
+
.or( coord.y.greaterThan( 1.0 ) );
|
|
51
|
+
|
|
52
|
+
return select( outOfBounds, float( 0.0 ), float( 1.0 ) );
|
|
53
|
+
|
|
54
|
+
} );
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Applies color bleeding effect to simulate horizontal color smearing.
|
|
58
|
+
* Simulates the analog signal bleeding in CRT displays where colors
|
|
59
|
+
* "leak" into adjacent pixels horizontally.
|
|
60
|
+
*
|
|
61
|
+
* @tsl
|
|
62
|
+
* @function
|
|
63
|
+
* @param {Node} color - The input texture node.
|
|
64
|
+
* @param {Node<float>} [amount=0.002] - The amount of color bleeding (0-0.01).
|
|
65
|
+
* @return {Node<vec3>} The color with bleeding effect applied.
|
|
66
|
+
*/
|
|
67
|
+
export const colorBleeding = Fn( ( [ color, amount = float( 0.002 ) ] ) => {
|
|
68
|
+
|
|
69
|
+
const inputTexture = convertToTexture( color );
|
|
70
|
+
|
|
71
|
+
// Get the original color
|
|
72
|
+
const original = inputTexture.sample( screenUV ).rgb;
|
|
73
|
+
|
|
74
|
+
// Sample colors from the left (simulating signal trailing)
|
|
75
|
+
const left1 = inputTexture.sample( screenUV.sub( vec2( amount, 0.0 ) ) ).rgb;
|
|
76
|
+
const left2 = inputTexture.sample( screenUV.sub( vec2( amount.mul( 2.0 ), 0.0 ) ) ).rgb;
|
|
77
|
+
const left3 = inputTexture.sample( screenUV.sub( vec2( amount.mul( 3.0 ), 0.0 ) ) ).rgb;
|
|
78
|
+
|
|
79
|
+
// Red bleeds more (travels further in analog signal)
|
|
80
|
+
const bleedR = original.r
|
|
81
|
+
.add( left1.r.mul( 0.4 ) )
|
|
82
|
+
.add( left2.r.mul( 0.2 ) )
|
|
83
|
+
.add( left3.r.mul( 0.1 ) );
|
|
84
|
+
|
|
85
|
+
// Green bleeds medium
|
|
86
|
+
const bleedG = original.g
|
|
87
|
+
.add( left1.g.mul( 0.25 ) )
|
|
88
|
+
.add( left2.g.mul( 0.1 ) );
|
|
89
|
+
|
|
90
|
+
// Blue bleeds least
|
|
91
|
+
const bleedB = original.b
|
|
92
|
+
.add( left1.b.mul( 0.15 ) );
|
|
93
|
+
|
|
94
|
+
// Normalize and clamp
|
|
95
|
+
const r = clamp( bleedR.div( 1.7 ), 0.0, 1.0 );
|
|
96
|
+
const g = clamp( bleedG.div( 1.35 ), 0.0, 1.0 );
|
|
97
|
+
const b = clamp( bleedB.div( 1.15 ), 0.0, 1.0 );
|
|
98
|
+
|
|
99
|
+
return vec3( r, g, b );
|
|
100
|
+
|
|
101
|
+
} );
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Applies scanline effect to simulate CRT monitor horizontal lines with animation.
|
|
105
|
+
*
|
|
106
|
+
* @tsl
|
|
107
|
+
* @function
|
|
108
|
+
* @param {Node<vec3>} color - The input color.
|
|
109
|
+
* @param {Node<float>} [intensity=0.3] - The intensity of the scanlines (0-1).
|
|
110
|
+
* @param {Node<float>} [count=240] - The number of scanlines (typically matches vertical resolution).
|
|
111
|
+
* @param {Node<float>} [speed=0.0] - The scroll speed of scanlines (0 = static, 1 = normal CRT roll).
|
|
112
|
+
* @param {Node<vec2>} [coord=uv()] - The UV coordinates to use for scanlines.
|
|
113
|
+
* @return {Node<vec3>} The color with scanlines applied.
|
|
114
|
+
*/
|
|
115
|
+
export const scanlines = Fn( ( [ color, intensity = float( 0.3 ), count = float( 240.0 ), speed = float( 0.0 ), coord = uv() ] ) => {
|
|
116
|
+
|
|
117
|
+
// Animate scanlines scrolling down (like CRT vertical sync roll)
|
|
118
|
+
const animatedY = coord.y.sub( time.mul( speed ) );
|
|
119
|
+
|
|
120
|
+
// Create scanline pattern
|
|
121
|
+
const scanline = sin( animatedY.mul( count ) );
|
|
122
|
+
const scanlineIntensity = scanline.mul( 0.5 ).add( 0.5 ).mul( intensity );
|
|
123
|
+
|
|
124
|
+
// Darken alternate lines
|
|
125
|
+
return color.mul( float( 1.0 ).sub( scanlineIntensity ) );
|
|
126
|
+
|
|
127
|
+
} );
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Applies vignette effect to darken the edges of the screen.
|
|
131
|
+
*
|
|
132
|
+
* @tsl
|
|
133
|
+
* @function
|
|
134
|
+
* @param {Node<vec3>} color - The input color.
|
|
135
|
+
* @param {Node<float>} [intensity=0.4] - The intensity of the vignette (0-1).
|
|
136
|
+
* @param {Node<float>} [smoothness=0.5] - The smoothness of the vignette falloff.
|
|
137
|
+
* @param {Node<vec2>} [coord=uv()] - The UV coordinates to use for vignette calculation.
|
|
138
|
+
* @return {Node<vec3>} The color with vignette applied.
|
|
139
|
+
*/
|
|
140
|
+
export const vignette = Fn( ( [ color, intensity = float( 0.4 ), smoothness = float( 0.5 ), coord = uv() ] ) => {
|
|
141
|
+
|
|
142
|
+
// Use circle for radial gradient (1.42 ≈ √2 covers full diagonal)
|
|
143
|
+
const mask = circle( float( 1.42 ), smoothness, coord );
|
|
144
|
+
|
|
145
|
+
// Apply vignette: center = 1, edges = (1 - intensity)
|
|
146
|
+
const vignetteAmount = mix( float( 1.0 ).sub( intensity ), float( 1.0 ), mask );
|
|
147
|
+
|
|
148
|
+
return color.mul( vignetteAmount );
|
|
149
|
+
|
|
150
|
+
} );
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { Node } from 'three/webgpu';
|
|
2
|
+
import {
|
|
3
|
+
nodeObject,
|
|
4
|
+
Fn,
|
|
5
|
+
convertToTexture,
|
|
6
|
+
float,
|
|
7
|
+
vec4,
|
|
8
|
+
uv,
|
|
9
|
+
} from 'three/tsl';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Post processing node for applying chromatic aberration effect.
|
|
13
|
+
* This effect simulates the color fringing that occurs in real camera lenses
|
|
14
|
+
* by separating and offsetting the red, green, and blue channels.
|
|
15
|
+
*
|
|
16
|
+
* @augments Node
|
|
17
|
+
* @three_import import { chromaticAberration } from 'three/addons/tsl/display/ChromaticAberrationNode.js';
|
|
18
|
+
*/
|
|
19
|
+
class ChromaticAberrationNode extends Node {
|
|
20
|
+
|
|
21
|
+
static get type() {
|
|
22
|
+
|
|
23
|
+
return 'ChromaticAberrationNode';
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new chromatic aberration node.
|
|
29
|
+
*
|
|
30
|
+
* @param {TextureNode} textureNode - The texture node that represents the input of the effect.
|
|
31
|
+
* @param {Node} strengthNode - The strength of the chromatic aberration effect as a node.
|
|
32
|
+
* @param {Node} centerNode - The center point of the effect as a node.
|
|
33
|
+
* @param {Node} scaleNode - The scale factor for stepped scaling from center as a node.
|
|
34
|
+
*/
|
|
35
|
+
constructor( textureNode, strengthNode, centerNode, scaleNode ) {
|
|
36
|
+
|
|
37
|
+
super( 'vec4' );
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The texture node that represents the input of the effect.
|
|
41
|
+
*
|
|
42
|
+
* @type {texture}
|
|
43
|
+
*/
|
|
44
|
+
this.textureNode = textureNode;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* A node holding the strength of the effect.
|
|
48
|
+
*
|
|
49
|
+
* @type {Node}
|
|
50
|
+
*/
|
|
51
|
+
this.strengthNode = strengthNode;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* A node holding the center point of the effect.
|
|
55
|
+
*
|
|
56
|
+
* @type {Node}
|
|
57
|
+
*/
|
|
58
|
+
this.centerNode = centerNode;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* A node holding the scale factor for stepped scaling.
|
|
62
|
+
*
|
|
63
|
+
* @type {Node}
|
|
64
|
+
*/
|
|
65
|
+
this.scaleNode = scaleNode;
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* This method is used to setup the effect's TSL code.
|
|
71
|
+
*
|
|
72
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
73
|
+
* @return {ShaderCallNodeInternal}
|
|
74
|
+
*/
|
|
75
|
+
setup( /* builder */ ) {
|
|
76
|
+
|
|
77
|
+
const textureNode = this.textureNode;
|
|
78
|
+
const uvNode = textureNode.uvNode || uv();
|
|
79
|
+
|
|
80
|
+
const ApplyChromaticAberration = Fn( ( [ uv, strength, center, scale ] ) => {
|
|
81
|
+
|
|
82
|
+
// Calculate distance from center
|
|
83
|
+
const offset = uv.sub( center );
|
|
84
|
+
const distance = offset.length();
|
|
85
|
+
|
|
86
|
+
// Create stepped scaling zones based on distance
|
|
87
|
+
// Each channel gets different scaling steps
|
|
88
|
+
const redScale = float( 1.0 ).add( scale.mul( 0.02 ).mul( strength ) ); // Red channel scaled outward
|
|
89
|
+
const greenScale = float( 1.0 ); // Green stays at original scale
|
|
90
|
+
const blueScale = float( 1.0 ).sub( scale.mul( 0.02 ).mul( strength ) ); // Blue channel scaled inward
|
|
91
|
+
|
|
92
|
+
// Create radial distortion based on distance from center
|
|
93
|
+
const aberrationStrength = strength.mul( distance );
|
|
94
|
+
|
|
95
|
+
// Calculate scaled UV coordinates for each channel
|
|
96
|
+
const redUV = center.add( offset.mul( redScale ) );
|
|
97
|
+
const greenUV = center.add( offset.mul( greenScale ) );
|
|
98
|
+
const blueUV = center.add( offset.mul( blueScale ) );
|
|
99
|
+
|
|
100
|
+
// Apply additional chromatic offset based on aberration strength
|
|
101
|
+
const rOffset = offset.mul( aberrationStrength ).mul( float( 0.01 ) );
|
|
102
|
+
const gOffset = offset.mul( aberrationStrength ).mul( float( 0.0 ) );
|
|
103
|
+
const bOffset = offset.mul( aberrationStrength ).mul( float( - 0.01 ) );
|
|
104
|
+
|
|
105
|
+
// Final UV coordinates combining scale and chromatic aberration
|
|
106
|
+
const finalRedUV = redUV.add( rOffset );
|
|
107
|
+
const finalGreenUV = greenUV.add( gOffset );
|
|
108
|
+
const finalBlueUV = blueUV.add( bOffset );
|
|
109
|
+
|
|
110
|
+
// Sample texture for each channel
|
|
111
|
+
const r = textureNode.sample( finalRedUV ).r;
|
|
112
|
+
const g = textureNode.sample( finalGreenUV ).g;
|
|
113
|
+
const b = textureNode.sample( finalBlueUV ).b;
|
|
114
|
+
|
|
115
|
+
// Get original alpha
|
|
116
|
+
const a = textureNode.sample( uv ).a;
|
|
117
|
+
|
|
118
|
+
return vec4( r, g, b, a );
|
|
119
|
+
|
|
120
|
+
} );
|
|
121
|
+
|
|
122
|
+
const chromaticAberrationFn = Fn( () => {
|
|
123
|
+
|
|
124
|
+
return ApplyChromaticAberration(
|
|
125
|
+
uvNode,
|
|
126
|
+
this.strengthNode,
|
|
127
|
+
this.centerNode,
|
|
128
|
+
this.scaleNode
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
} );
|
|
132
|
+
|
|
133
|
+
const outputNode = chromaticAberrationFn();
|
|
134
|
+
|
|
135
|
+
return outputNode;
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export default ChromaticAberrationNode;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* TSL function for creating a chromatic aberration node for post processing.
|
|
145
|
+
*
|
|
146
|
+
* @tsl
|
|
147
|
+
* @function
|
|
148
|
+
* @param {Node<vec4>} node - The node that represents the input of the effect.
|
|
149
|
+
* @param {Node|number} [strength=1.0] - The strength of the chromatic aberration effect as a node or value.
|
|
150
|
+
* @param {?(Node|Vector2)} [center=null] - The center point of the effect as a node or value. If null, uses screen center (0.5, 0.5).
|
|
151
|
+
* @param {Node|number} [scale=1.1] - The scale factor for stepped scaling from center as a node or value.
|
|
152
|
+
* @returns {ChromaticAberrationNode}
|
|
153
|
+
*/
|
|
154
|
+
export const chromaticAberration = ( node, strength = 1.0, center = null, scale = 1.1 ) => {
|
|
155
|
+
|
|
156
|
+
return new ChromaticAberrationNode(
|
|
157
|
+
convertToTexture( node ),
|
|
158
|
+
nodeObject( strength ),
|
|
159
|
+
nodeObject( center ),
|
|
160
|
+
nodeObject( scale )
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
};
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import { DataTexture, RepeatWrapping, Vector2, Vector3, Node } from 'three/webgpu';
|
|
2
|
+
import { texture, getNormalFromDepth, getViewPosition, convertToTexture, nodeObject, Fn, float, NodeUpdateType, uv, uniform, Loop, luminance, vec2, vec3, vec4, uniformArray, int, dot, max, pow, abs, If, textureSize, sin, cos, mat2, PI, property, isBackgroundDepth } from 'three/tsl';
|
|
3
|
+
import { SimplexNoise } from '../../math/SimplexNoise.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Post processing node for denoising data like raw screen-space ambient occlusion output.
|
|
7
|
+
* Denoise can noticeably improve the quality of ambient occlusion but also add quite some
|
|
8
|
+
* overhead to the post processing setup. It's best to make its usage optional (e.g. via
|
|
9
|
+
* graphic settings).
|
|
10
|
+
*
|
|
11
|
+
* Reference: {@link https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf}.
|
|
12
|
+
*
|
|
13
|
+
* @augments Node
|
|
14
|
+
* @three_import import { denoise } from 'three/addons/tsl/display/DenoiseNode.js';
|
|
15
|
+
*/
|
|
16
|
+
class DenoiseNode extends Node {
|
|
17
|
+
|
|
18
|
+
static get type() {
|
|
19
|
+
|
|
20
|
+
return 'DenoiseNode';
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new denoise node.
|
|
26
|
+
*
|
|
27
|
+
* @param {TextureNode} textureNode - The texture node that represents the input of the effect (e.g. AO).
|
|
28
|
+
* @param {Node<float>} depthNode - A node that represents the scene's depth.
|
|
29
|
+
* @param {?Node<vec3>} normalNode - A node that represents the scene's normals.
|
|
30
|
+
* @param {Camera} camera - The camera the scene is rendered with.
|
|
31
|
+
*/
|
|
32
|
+
constructor( textureNode, depthNode, normalNode, camera ) {
|
|
33
|
+
|
|
34
|
+
super( 'vec4' );
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The texture node that represents the input of the effect (e.g. AO).
|
|
38
|
+
*
|
|
39
|
+
* @type {TextureNode}
|
|
40
|
+
*/
|
|
41
|
+
this.textureNode = textureNode;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* A node that represents the scene's depth.
|
|
45
|
+
*
|
|
46
|
+
* @type {Node<float>}
|
|
47
|
+
*/
|
|
48
|
+
this.depthNode = depthNode;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* A node that represents the scene's normals. If no normals are passed to the
|
|
52
|
+
* constructor (because MRT is not available), normals can be automatically
|
|
53
|
+
* reconstructed from depth values in the shader.
|
|
54
|
+
*
|
|
55
|
+
* @type {?Node<vec3>}
|
|
56
|
+
*/
|
|
57
|
+
this.normalNode = normalNode;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The internal noise texture.
|
|
61
|
+
*
|
|
62
|
+
* @private
|
|
63
|
+
* @type {DataTexture}
|
|
64
|
+
*/
|
|
65
|
+
this._noiseTexture = generateDefaultNoise();
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The node represents the internal noise texture.
|
|
69
|
+
*
|
|
70
|
+
* @type {TextureNode}
|
|
71
|
+
*/
|
|
72
|
+
this.noiseNode = texture( this._noiseTexture );
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The luma Phi value.
|
|
76
|
+
*
|
|
77
|
+
* @type {UniformNode<float>}
|
|
78
|
+
*/
|
|
79
|
+
this.lumaPhi = uniform( 5 );
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* The depth Phi value.
|
|
83
|
+
*
|
|
84
|
+
* @type {UniformNode<float>}
|
|
85
|
+
*/
|
|
86
|
+
this.depthPhi = uniform( 5 );
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The normal Phi value.
|
|
90
|
+
*
|
|
91
|
+
* @type {UniformNode<float>}
|
|
92
|
+
*/
|
|
93
|
+
this.normalPhi = uniform( 5 );
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* The radius.
|
|
97
|
+
*
|
|
98
|
+
* @type {UniformNode<float>}
|
|
99
|
+
*/
|
|
100
|
+
this.radius = uniform( 5 );
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* The index.
|
|
104
|
+
*
|
|
105
|
+
* @type {UniformNode<float>}
|
|
106
|
+
*/
|
|
107
|
+
this.index = uniform( 0 );
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node updates
|
|
111
|
+
* its internal uniforms once per frame in `updateBefore()`.
|
|
112
|
+
*
|
|
113
|
+
* @type {string}
|
|
114
|
+
* @default 'frame'
|
|
115
|
+
*/
|
|
116
|
+
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* The resolution of the effect.
|
|
120
|
+
*
|
|
121
|
+
* @private
|
|
122
|
+
* @type {UniformNode<vec2>}
|
|
123
|
+
*/
|
|
124
|
+
this._resolution = uniform( new Vector2() );
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* An array of sample vectors.
|
|
128
|
+
*
|
|
129
|
+
* @private
|
|
130
|
+
* @type {UniformArrayNode<vec3>}
|
|
131
|
+
*/
|
|
132
|
+
this._sampleVectors = uniformArray( generateDenoiseSamples( 16, 2, 1 ) );
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Represents the inverse projection matrix of the scene's camera.
|
|
136
|
+
*
|
|
137
|
+
* @private
|
|
138
|
+
* @type {UniformNode<mat4>}
|
|
139
|
+
*/
|
|
140
|
+
this._cameraProjectionMatrixInverse = uniform( camera.projectionMatrixInverse );
|
|
141
|
+
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* This method is used to update internal uniforms once per frame.
|
|
146
|
+
*
|
|
147
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
148
|
+
*/
|
|
149
|
+
updateBefore() {
|
|
150
|
+
|
|
151
|
+
const map = this.textureNode.value;
|
|
152
|
+
|
|
153
|
+
this._resolution.value.set( map.image.width, map.image.height );
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* This method is used to setup the effect's TSL code.
|
|
159
|
+
*
|
|
160
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
161
|
+
* @return {ShaderCallNodeInternal}
|
|
162
|
+
*/
|
|
163
|
+
setup( /* builder */ ) {
|
|
164
|
+
|
|
165
|
+
const uvNode = uv();
|
|
166
|
+
|
|
167
|
+
const sampleTexture = ( uv ) => this.textureNode.sample( uv );
|
|
168
|
+
const sampleDepth = ( uv ) => this.depthNode.sample( uv ).x;
|
|
169
|
+
const sampleNormal = ( uv ) => ( this.normalNode !== null ) ? this.normalNode.sample( uv ).rgb.normalize() : getNormalFromDepth( uv, this.depthNode.value, this._cameraProjectionMatrixInverse );
|
|
170
|
+
const sampleNoise = ( uv ) => this.noiseNode.sample( uv );
|
|
171
|
+
|
|
172
|
+
const denoiseSample = Fn( ( [ center, viewNormal, viewPosition, sampleUv ] ) => {
|
|
173
|
+
|
|
174
|
+
const texel = sampleTexture( sampleUv ).toVar();
|
|
175
|
+
const depth = sampleDepth( sampleUv ).toVar();
|
|
176
|
+
const normal = sampleNormal( sampleUv ).toVar();
|
|
177
|
+
const neighborColor = texel.rgb;
|
|
178
|
+
const viewPos = getViewPosition( sampleUv, depth, this._cameraProjectionMatrixInverse ).toVar();
|
|
179
|
+
|
|
180
|
+
const normalDiff = dot( viewNormal, normal ).toVar();
|
|
181
|
+
const normalSimilarity = pow( max( normalDiff, 0 ), this.normalPhi ).toVar();
|
|
182
|
+
const lumaDiff = abs( luminance( neighborColor ).sub( luminance( center ) ) ).toVar();
|
|
183
|
+
const lumaSimilarity = max( float( 1.0 ).sub( lumaDiff.div( this.lumaPhi ) ), 0 ).toVar();
|
|
184
|
+
const depthDiff = abs( dot( viewPosition.sub( viewPos ), viewNormal ) ).toVar();
|
|
185
|
+
const depthSimilarity = max( float( 1.0 ).sub( depthDiff.div( this.depthPhi ) ), 0 );
|
|
186
|
+
const w = lumaSimilarity.mul( depthSimilarity ).mul( normalSimilarity );
|
|
187
|
+
|
|
188
|
+
return vec4( neighborColor.mul( w ), w );
|
|
189
|
+
|
|
190
|
+
} );
|
|
191
|
+
|
|
192
|
+
const denoise = Fn( ( [ uvNode ] ) => {
|
|
193
|
+
|
|
194
|
+
const depth = sampleDepth( uvNode ).toVar();
|
|
195
|
+
const viewNormal = sampleNormal( uvNode ).toVar();
|
|
196
|
+
|
|
197
|
+
const texel = sampleTexture( uvNode ).toVar();
|
|
198
|
+
const result = property( 'vec4' );
|
|
199
|
+
|
|
200
|
+
If( isBackgroundDepth( depth ).or( dot( viewNormal, viewNormal ).equal( 0.0 ) ), () => {
|
|
201
|
+
|
|
202
|
+
result.assign( texel );
|
|
203
|
+
|
|
204
|
+
} ).Else( () => {
|
|
205
|
+
|
|
206
|
+
const center = vec3( texel.rgb );
|
|
207
|
+
|
|
208
|
+
const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toConst();
|
|
209
|
+
|
|
210
|
+
const noiseResolution = textureSize( this.noiseNode, 0 );
|
|
211
|
+
let noiseUv = vec2( uvNode.x, uvNode.y.oneMinus() );
|
|
212
|
+
noiseUv = noiseUv.mul( this._resolution.div( noiseResolution ) );
|
|
213
|
+
const noiseTexel = sampleNoise( noiseUv ).toVar();
|
|
214
|
+
|
|
215
|
+
const x = sin( noiseTexel.element( this.index.mod( 4 ).mul( 2 ).mul( PI ) ) );
|
|
216
|
+
const y = cos( noiseTexel.element( this.index.mod( 4 ).mul( 2 ).mul( PI ) ) );
|
|
217
|
+
|
|
218
|
+
const noiseVec = vec2( x, y );
|
|
219
|
+
const rotationMatrix = mat2( noiseVec.x, noiseVec.y.negate(), noiseVec.x, noiseVec.y );
|
|
220
|
+
|
|
221
|
+
const totalWeight = float( 1.0 ).toVar();
|
|
222
|
+
const denoised = vec3( texel.rgb ).toVar();
|
|
223
|
+
|
|
224
|
+
Loop( { start: int( 0 ), end: int( 16 ), type: 'int', condition: '<' }, ( { i } ) => {
|
|
225
|
+
|
|
226
|
+
const sampleDir = this._sampleVectors.element( i );
|
|
227
|
+
const offset = rotationMatrix.mul( sampleDir.xy.mul( float( 1.0 ).add( sampleDir.z.mul( this.radius.sub( 1 ) ) ) ) ).div( this._resolution );
|
|
228
|
+
const sampleUv = uvNode.add( offset );
|
|
229
|
+
|
|
230
|
+
const sampleResult = denoiseSample( center, viewNormal, viewPosition, sampleUv );
|
|
231
|
+
|
|
232
|
+
denoised.addAssign( sampleResult.xyz );
|
|
233
|
+
totalWeight.addAssign( sampleResult.w );
|
|
234
|
+
|
|
235
|
+
} );
|
|
236
|
+
|
|
237
|
+
If( totalWeight.greaterThan( float( 0 ) ), () => {
|
|
238
|
+
|
|
239
|
+
denoised.divAssign( totalWeight );
|
|
240
|
+
|
|
241
|
+
} );
|
|
242
|
+
|
|
243
|
+
result.assign( vec4( denoised, texel.a ) );
|
|
244
|
+
|
|
245
|
+
} );
|
|
246
|
+
|
|
247
|
+
return result;
|
|
248
|
+
|
|
249
|
+
}/*, { uv: 'vec2', return: 'vec4' }*/ );
|
|
250
|
+
|
|
251
|
+
const output = Fn( () => {
|
|
252
|
+
|
|
253
|
+
return denoise( uvNode );
|
|
254
|
+
|
|
255
|
+
} );
|
|
256
|
+
|
|
257
|
+
const outputNode = output();
|
|
258
|
+
|
|
259
|
+
return outputNode;
|
|
260
|
+
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Frees internal resources. This method should be called
|
|
265
|
+
* when the effect is no longer required.
|
|
266
|
+
*/
|
|
267
|
+
dispose() {
|
|
268
|
+
|
|
269
|
+
super.dispose();
|
|
270
|
+
|
|
271
|
+
this._noiseTexture.dispose();
|
|
272
|
+
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export default DenoiseNode;
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Generates denoise samples based on the given parameters.
|
|
281
|
+
*
|
|
282
|
+
* @private
|
|
283
|
+
* @param {number} numSamples - The number of samples.
|
|
284
|
+
* @param {number} numRings - The number of rings.
|
|
285
|
+
* @param {number} radiusExponent - The radius exponent.
|
|
286
|
+
* @return {Array<Vector3>} The denoise samples.
|
|
287
|
+
*/
|
|
288
|
+
function generateDenoiseSamples( numSamples, numRings, radiusExponent ) {
|
|
289
|
+
|
|
290
|
+
const samples = [];
|
|
291
|
+
|
|
292
|
+
for ( let i = 0; i < numSamples; i ++ ) {
|
|
293
|
+
|
|
294
|
+
const angle = 2 * Math.PI * numRings * i / numSamples;
|
|
295
|
+
const radius = Math.pow( i / ( numSamples - 1 ), radiusExponent );
|
|
296
|
+
samples.push( new Vector3( Math.cos( angle ), Math.sin( angle ), radius ) );
|
|
297
|
+
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
return samples;
|
|
301
|
+
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Generates a default noise texture for the given size.
|
|
306
|
+
*
|
|
307
|
+
* @private
|
|
308
|
+
* @param {number} [size=64] - The texture size.
|
|
309
|
+
* @return {DataTexture} The generated noise texture.
|
|
310
|
+
*/
|
|
311
|
+
function generateDefaultNoise( size = 64 ) {
|
|
312
|
+
|
|
313
|
+
const simplex = new SimplexNoise();
|
|
314
|
+
|
|
315
|
+
const arraySize = size * size * 4;
|
|
316
|
+
const data = new Uint8Array( arraySize );
|
|
317
|
+
|
|
318
|
+
for ( let i = 0; i < size; i ++ ) {
|
|
319
|
+
|
|
320
|
+
for ( let j = 0; j < size; j ++ ) {
|
|
321
|
+
|
|
322
|
+
const x = i;
|
|
323
|
+
const y = j;
|
|
324
|
+
|
|
325
|
+
data[ ( i * size + j ) * 4 ] = ( simplex.noise( x, y ) * 0.5 + 0.5 ) * 255;
|
|
326
|
+
data[ ( i * size + j ) * 4 + 1 ] = ( simplex.noise( x + size, y ) * 0.5 + 0.5 ) * 255;
|
|
327
|
+
data[ ( i * size + j ) * 4 + 2 ] = ( simplex.noise( x, y + size ) * 0.5 + 0.5 ) * 255;
|
|
328
|
+
data[ ( i * size + j ) * 4 + 3 ] = ( simplex.noise( x + size, y + size ) * 0.5 + 0.5 ) * 255;
|
|
329
|
+
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
const noiseTexture = new DataTexture( data, size, size );
|
|
335
|
+
noiseTexture.wrapS = RepeatWrapping;
|
|
336
|
+
noiseTexture.wrapT = RepeatWrapping;
|
|
337
|
+
noiseTexture.needsUpdate = true;
|
|
338
|
+
|
|
339
|
+
return noiseTexture;
|
|
340
|
+
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* TSL function for creating a denoise effect.
|
|
345
|
+
*
|
|
346
|
+
* @tsl
|
|
347
|
+
* @function
|
|
348
|
+
* @param {Node} node - The node that represents the input of the effect (e.g. AO).
|
|
349
|
+
* @param {Node<float>} depthNode - A node that represents the scene's depth.
|
|
350
|
+
* @param {?Node<vec3>} normalNode - A node that represents the scene's normals.
|
|
351
|
+
* @param {Camera} camera - The camera the scene is rendered with.
|
|
352
|
+
* @returns {DenoiseNode}
|
|
353
|
+
*/
|
|
354
|
+
export const denoise = ( node, depthNode, normalNode, camera ) => new DenoiseNode( convertToTexture( node ), nodeObject( depthNode ), nodeObject( normalNode ), camera );
|