@spawnite/engine 0.1.0-beta.15
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.md +169 -0
- package/README.md +92 -0
- package/dist/-MLBVTaO.js +1 -0
- package/dist/28wIPE7L.js +1 -0
- package/dist/3rj0AvB6.js +1 -0
- package/dist/5L-NcwKR.js +1 -0
- package/dist/B-qLcgSf.js +1 -0
- package/dist/B0WN1jqX.js +41 -0
- package/dist/B1OUgdbN.js +1 -0
- package/dist/BEL83Bb6.js +1 -0
- package/dist/BGDOC3Q-.js +1 -0
- package/dist/BGM1SnEr.js +1 -0
- package/dist/BH6Ftfg9.js +1 -0
- package/dist/BJIJuxaE.js +1 -0
- package/dist/BJclgjKG.js +1 -0
- package/dist/BKc2k2s6.js +1 -0
- package/dist/BLB4-b4b.js +2 -0
- package/dist/BQnBIIt8.js +1 -0
- package/dist/BR3nbYwS.js +7 -0
- package/dist/BV9hGHeu.js +623 -0
- package/dist/BWOKsReG.js +1 -0
- package/dist/BWlq9jqw.js +1 -0
- package/dist/BXmxKBbF.js +3 -0
- package/dist/BYXhtwWy.js +1 -0
- package/dist/B_HFa2lJ.js +1 -0
- package/dist/BciVglt5.js +1 -0
- package/dist/Bfg1Y9_2.js +1 -0
- package/dist/Bh-CVkQx.js +1 -0
- package/dist/BiH9xCBB.js +1 -0
- package/dist/BobsCMiL.js +9 -0
- package/dist/Bp238wbZ.js +1 -0
- package/dist/Bpe0g5hX.js +1 -0
- package/dist/BrfUaL46.js +2 -0
- package/dist/Bw06YsIc.js +1 -0
- package/dist/Bydoy8wO.js +1 -0
- package/dist/BzaiZux2.js +1 -0
- package/dist/C25qqozO.js +1 -0
- package/dist/C6Ja5Z7G.js +1 -0
- package/dist/CCh4CnV9.js +1 -0
- package/dist/CEuuijY1.js +1 -0
- package/dist/CHntUxHl.js +1 -0
- package/dist/CIq9KviM.js +1 -0
- package/dist/CQPA3y5T.js +1 -0
- package/dist/CRfoqBKG.js +1 -0
- package/dist/CSXcU95U.js +1 -0
- package/dist/CU0epHFG.js +3 -0
- package/dist/CVgRrBP4.js +1 -0
- package/dist/CZV99t6a.js +7 -0
- package/dist/Cg33N9Ej.js +1 -0
- package/dist/Chcm92bZ.js +1 -0
- package/dist/CjiCdqiE.js +2 -0
- package/dist/Cp5beIll.js +1 -0
- package/dist/Cq6VqPHb.js +2 -0
- package/dist/CwZDkslT.js +1 -0
- package/dist/D3Y2LHFe.js +1 -0
- package/dist/D3wyrZ2_.js +1 -0
- package/dist/D8jIS84n.js +1 -0
- package/dist/DCIejHqp.js +1 -0
- package/dist/DHsBnfoU.js +1 -0
- package/dist/DJSpRhXB.js +1 -0
- package/dist/DOeUeeKs.js +1 -0
- package/dist/DR9bHgf0.js +1 -0
- package/dist/DRnuSAbu.js +1 -0
- package/dist/DSb1ApLU.js +1 -0
- package/dist/DXtppcZ7.js +1 -0
- package/dist/DZIhHLUn.js +1 -0
- package/dist/DgMhVbMU.js +1 -0
- package/dist/Dh5kh1nX.js +1 -0
- package/dist/DiGFL8kd.js +1 -0
- package/dist/DkKmurqu.js +1 -0
- package/dist/DlkDsMQd.js +1 -0
- package/dist/DnNEzpz-.js +1 -0
- package/dist/Dqx9hHBK.js +1 -0
- package/dist/DsgWLyZo.js +1 -0
- package/dist/DucRBEvN.js +1 -0
- package/dist/Dwcms3jX.js +1 -0
- package/dist/Dwfie-ev.js +1 -0
- package/dist/DyHjwN2H.js +1 -0
- package/dist/SMby3e6M.js +4 -0
- package/dist/THIRD-PARTY-NOTICES +329 -0
- package/dist/UJDr3Nrd.js +1 -0
- package/dist/V70ADx0g.js +2 -0
- package/dist/abilities.d.ts +1 -0
- package/dist/abilities.js +1 -0
- package/dist/core.d.ts +1 -0
- package/dist/core.js +1 -0
- package/dist/devtools.d.ts +1 -0
- package/dist/devtools.js +1 -0
- package/dist/dragAndDrop.d.ts +1 -0
- package/dist/dragAndDrop.js +1 -0
- package/dist/eYC1fQo5.js +1 -0
- package/dist/eslint.js +1 -0
- package/dist/hQBGE7c4.js +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +297 -0
- package/dist/internal/cli.js +1 -0
- package/dist/internal/devServer.js +2 -0
- package/dist/internal/devtools.js +1 -0
- package/dist/internal/room.js +1 -0
- package/dist/inventory.d.ts +1 -0
- package/dist/inventory.js +1 -0
- package/dist/jMKXPXIH.js +33 -0
- package/dist/looks/dusk.d.ts +1 -0
- package/dist/looks/dusk.js +1 -0
- package/dist/looks/morning.d.ts +1 -0
- package/dist/looks/morning.js +1 -0
- package/dist/looks/night.d.ts +1 -0
- package/dist/looks/night.js +1 -0
- package/dist/looks/noon.d.ts +1 -0
- package/dist/looks/noon.js +1 -0
- package/dist/looks/overcast.d.ts +1 -0
- package/dist/looks/overcast.js +1 -0
- package/dist/npcs.d.ts +1 -0
- package/dist/npcs.js +1 -0
- package/dist/public.d.ts +18818 -0
- package/dist/replay.d.ts +1 -0
- package/dist/replay.js +1 -0
- package/dist/testing.d.ts +542 -0
- package/dist/testing.js +1 -0
- package/dist/three.d.ts +1 -0
- package/dist/three.js +1 -0
- package/dist/tracks.d.ts +1 -0
- package/dist/tracks.js +1 -0
- package/dist/vite.d.ts +123 -0
- package/dist/vite.js +1 -0
- package/dist/weapons.d.ts +1 -0
- package/dist/weapons.js +1 -0
- package/dist/wiki/engine/ai/metadata.md +143 -0
- package/dist/wiki/engine/audio/sound.md +72 -0
- package/dist/wiki/engine/audio/voice.md +153 -0
- package/dist/wiki/engine/behaviours/abilities.md +328 -0
- package/dist/wiki/engine/behaviours/bob.md +37 -0
- package/dist/wiki/engine/behaviours/chase.md +158 -0
- package/dist/wiki/engine/behaviours/cooldowns.md +83 -0
- package/dist/wiki/engine/behaviours/dialog.md +172 -0
- package/dist/wiki/engine/behaviours/health.md +330 -0
- package/dist/wiki/engine/behaviours/interact.md +41 -0
- package/dist/wiki/engine/behaviours/inventory.md +266 -0
- package/dist/wiki/engine/behaviours/loot.md +90 -0
- package/dist/wiki/engine/behaviours/pickup.md +149 -0
- package/dist/wiki/engine/behaviours/resources.md +274 -0
- package/dist/wiki/engine/behaviours/routines.md +99 -0
- package/dist/wiki/engine/behaviours/spin.md +36 -0
- package/dist/wiki/engine/behaviours/stats.md +220 -0
- package/dist/wiki/engine/behaviours/targeting.md +155 -0
- package/dist/wiki/engine/behaviours/track-mover.md +121 -0
- package/dist/wiki/engine/behaviours/track-trigger.md +117 -0
- package/dist/wiki/engine/behaviours/trigger.md +158 -0
- package/dist/wiki/engine/behaviours/weapon.md +462 -0
- package/dist/wiki/engine/entities/camera.md +326 -0
- package/dist/wiki/engine/entities/entity.mdx +1063 -0
- package/dist/wiki/engine/entities/npc.md +64 -0
- package/dist/wiki/engine/entities/player.md +435 -0
- package/dist/wiki/engine/errors/SP0001.md +20 -0
- package/dist/wiki/engine/errors/SP0002.md +20 -0
- package/dist/wiki/engine/errors/SP0003.md +20 -0
- package/dist/wiki/engine/errors/SP0008.md +20 -0
- package/dist/wiki/engine/errors/SP0009.md +20 -0
- package/dist/wiki/engine/errors/SP0010.md +20 -0
- package/dist/wiki/engine/errors/SP0011.md +20 -0
- package/dist/wiki/engine/errors/SP0014.md +20 -0
- package/dist/wiki/engine/errors/SP0015.md +20 -0
- package/dist/wiki/engine/errors/SP0016.md +20 -0
- package/dist/wiki/engine/errors/SP0017.md +20 -0
- package/dist/wiki/engine/errors/SP0018.md +20 -0
- package/dist/wiki/engine/errors/SP0019.md +20 -0
- package/dist/wiki/engine/errors/SP0020.md +20 -0
- package/dist/wiki/engine/errors/SP0021.md +20 -0
- package/dist/wiki/engine/errors/SP0022.md +20 -0
- package/dist/wiki/engine/errors/SP0023.md +20 -0
- package/dist/wiki/engine/errors/SP0024.md +20 -0
- package/dist/wiki/engine/errors/SP0025.md +20 -0
- package/dist/wiki/engine/errors/SP0026.md +22 -0
- package/dist/wiki/engine/errors/SP0027.md +20 -0
- package/dist/wiki/engine/errors/SP0028.md +20 -0
- package/dist/wiki/engine/errors/SP0029.md +20 -0
- package/dist/wiki/engine/errors/SP0030.md +20 -0
- package/dist/wiki/engine/errors/SP0031.md +20 -0
- package/dist/wiki/engine/errors/SP0034.md +20 -0
- package/dist/wiki/engine/errors/SP0035.md +20 -0
- package/dist/wiki/engine/errors/SP0036.md +20 -0
- package/dist/wiki/engine/errors/SP0037.md +20 -0
- package/dist/wiki/engine/errors/SP0038.md +20 -0
- package/dist/wiki/engine/errors/SP0039.md +20 -0
- package/dist/wiki/engine/errors/SP0040.md +20 -0
- package/dist/wiki/engine/errors/SP0041.md +20 -0
- package/dist/wiki/engine/errors/SP0042.md +20 -0
- package/dist/wiki/engine/errors/SP0043.md +20 -0
- package/dist/wiki/engine/errors/SP0045.md +20 -0
- package/dist/wiki/engine/errors/SP0046.md +20 -0
- package/dist/wiki/engine/errors/SP0047.md +20 -0
- package/dist/wiki/engine/errors/SP0048.md +20 -0
- package/dist/wiki/engine/errors/SP0049.md +20 -0
- package/dist/wiki/engine/errors/SP0050.md +20 -0
- package/dist/wiki/engine/errors/SP0051.md +20 -0
- package/dist/wiki/engine/errors/SP0052.md +20 -0
- package/dist/wiki/engine/errors/SP0053.md +20 -0
- package/dist/wiki/engine/errors/SP0054.md +20 -0
- package/dist/wiki/engine/errors/SP0055.md +20 -0
- package/dist/wiki/engine/errors/SP0056.md +20 -0
- package/dist/wiki/engine/errors/SP0057.md +20 -0
- package/dist/wiki/engine/errors/SP0058.md +20 -0
- package/dist/wiki/engine/errors/SP0059.md +20 -0
- package/dist/wiki/engine/errors/SP0060.md +20 -0
- package/dist/wiki/engine/errors/SP0061.md +20 -0
- package/dist/wiki/engine/errors/SP0064.md +20 -0
- package/dist/wiki/engine/errors/SP0065.md +20 -0
- package/dist/wiki/engine/errors/SP0066.md +20 -0
- package/dist/wiki/engine/errors/SP0067.md +20 -0
- package/dist/wiki/engine/errors/SP0070.md +20 -0
- package/dist/wiki/engine/errors/SP0071.md +20 -0
- package/dist/wiki/engine/errors/SP0072.md +20 -0
- package/dist/wiki/engine/errors/SP0073.md +20 -0
- package/dist/wiki/engine/errors/SP0074.md +20 -0
- package/dist/wiki/engine/errors/SP0075.md +20 -0
- package/dist/wiki/engine/errors/SP0076.md +20 -0
- package/dist/wiki/engine/errors/SP0077.md +20 -0
- package/dist/wiki/engine/errors/SP0078.md +20 -0
- package/dist/wiki/engine/errors/SP0079.md +20 -0
- package/dist/wiki/engine/errors/SP0080.md +20 -0
- package/dist/wiki/engine/errors/SP0081.md +20 -0
- package/dist/wiki/engine/errors/SP0082.md +20 -0
- package/dist/wiki/engine/errors/SP0083.md +20 -0
- package/dist/wiki/engine/errors/SP0084.md +20 -0
- package/dist/wiki/engine/errors/SP0085.md +20 -0
- package/dist/wiki/engine/errors/SP0086.md +20 -0
- package/dist/wiki/engine/errors/SP0087.md +20 -0
- package/dist/wiki/engine/errors/SP0089.md +20 -0
- package/dist/wiki/engine/errors/SP0090.md +20 -0
- package/dist/wiki/engine/errors/SP0091.md +20 -0
- package/dist/wiki/engine/errors/SP0092.md +20 -0
- package/dist/wiki/engine/errors/SP0093.md +20 -0
- package/dist/wiki/engine/errors/SP0094.md +20 -0
- package/dist/wiki/engine/errors/SP0095.md +20 -0
- package/dist/wiki/engine/errors/SP0096.md +20 -0
- package/dist/wiki/engine/errors/SP0097.md +20 -0
- package/dist/wiki/engine/errors/SP0098.md +20 -0
- package/dist/wiki/engine/errors/SP0099.md +20 -0
- package/dist/wiki/engine/errors/SP0100.md +20 -0
- package/dist/wiki/engine/errors/SP0101.md +20 -0
- package/dist/wiki/engine/errors/SP0102.md +20 -0
- package/dist/wiki/engine/errors/SP0103.md +20 -0
- package/dist/wiki/engine/errors/SP0104.md +20 -0
- package/dist/wiki/engine/errors/SP0105.md +20 -0
- package/dist/wiki/engine/errors/SP0106.md +20 -0
- package/dist/wiki/engine/errors/SP0107.md +20 -0
- package/dist/wiki/engine/errors/SP0108.md +20 -0
- package/dist/wiki/engine/errors/SP0109.md +20 -0
- package/dist/wiki/engine/errors/SP0110.md +20 -0
- package/dist/wiki/engine/errors/SP0111.md +20 -0
- package/dist/wiki/engine/errors/SP0112.md +20 -0
- package/dist/wiki/engine/errors/SP0113.md +20 -0
- package/dist/wiki/engine/errors/SP0114.md +20 -0
- package/dist/wiki/engine/errors/SP0115.md +20 -0
- package/dist/wiki/engine/errors/SP0116.md +20 -0
- package/dist/wiki/engine/errors/SP0117.md +20 -0
- package/dist/wiki/engine/errors/SP0118.md +20 -0
- package/dist/wiki/engine/errors/SP0119.md +20 -0
- package/dist/wiki/engine/errors/SP0120.md +20 -0
- package/dist/wiki/engine/errors/SP0121.md +20 -0
- package/dist/wiki/engine/errors/SP0122.md +20 -0
- package/dist/wiki/engine/errors/SP0125.md +20 -0
- package/dist/wiki/engine/errors/SP0126.md +20 -0
- package/dist/wiki/engine/errors/SP0132.md +20 -0
- package/dist/wiki/engine/errors/SP0133.md +20 -0
- package/dist/wiki/engine/errors/SP0134.md +20 -0
- package/dist/wiki/engine/errors/SP0137.md +20 -0
- package/dist/wiki/engine/errors/SP0138.md +20 -0
- package/dist/wiki/engine/errors/SP0139.md +20 -0
- package/dist/wiki/engine/errors/SP0143.md +20 -0
- package/dist/wiki/engine/errors/SP0145.md +20 -0
- package/dist/wiki/engine/errors/SP0146.md +20 -0
- package/dist/wiki/engine/errors/SP0147.md +20 -0
- package/dist/wiki/engine/errors/SP0148.md +20 -0
- package/dist/wiki/engine/errors/SP0149.md +20 -0
- package/dist/wiki/engine/errors/SP0150.md +20 -0
- package/dist/wiki/engine/errors/SP0151.md +20 -0
- package/dist/wiki/engine/errors/SP0152.md +20 -0
- package/dist/wiki/engine/errors/SP0154.md +20 -0
- package/dist/wiki/engine/errors/SP0157.md +20 -0
- package/dist/wiki/engine/errors/SP0158.md +20 -0
- package/dist/wiki/engine/errors/SP0159.md +20 -0
- package/dist/wiki/engine/errors/SP0160.md +20 -0
- package/dist/wiki/engine/errors/SP0161.md +20 -0
- package/dist/wiki/engine/errors/SP0162.md +20 -0
- package/dist/wiki/engine/errors/SP0163.md +20 -0
- package/dist/wiki/engine/errors/SP0164.md +20 -0
- package/dist/wiki/engine/errors/SP0165.md +20 -0
- package/dist/wiki/engine/errors/SP0166.md +20 -0
- package/dist/wiki/engine/errors/SP0167.md +20 -0
- package/dist/wiki/engine/errors/SP0169.md +20 -0
- package/dist/wiki/engine/errors/SP0175.md +20 -0
- package/dist/wiki/engine/errors/SP0176.md +20 -0
- package/dist/wiki/engine/errors/SP0177.md +20 -0
- package/dist/wiki/engine/errors/SP0178.md +20 -0
- package/dist/wiki/engine/errors/SP0179.md +20 -0
- package/dist/wiki/engine/errors/SP0180.md +20 -0
- package/dist/wiki/engine/errors/SP0181.md +20 -0
- package/dist/wiki/engine/errors/SP0182.md +20 -0
- package/dist/wiki/engine/errors/SP0183.md +20 -0
- package/dist/wiki/engine/errors/SP0184.md +20 -0
- package/dist/wiki/engine/errors/SP0185.md +20 -0
- package/dist/wiki/engine/errors/SP0186.md +20 -0
- package/dist/wiki/engine/errors/SP0187.md +20 -0
- package/dist/wiki/engine/errors/SP0188.md +20 -0
- package/dist/wiki/engine/errors/SP0189.md +20 -0
- package/dist/wiki/engine/errors/SP0190.md +20 -0
- package/dist/wiki/engine/errors/SP0191.md +20 -0
- package/dist/wiki/engine/errors/SP0192.md +20 -0
- package/dist/wiki/engine/errors/SP0193.md +20 -0
- package/dist/wiki/engine/errors/SP0194.md +20 -0
- package/dist/wiki/engine/errors/SP0195.md +20 -0
- package/dist/wiki/engine/errors/SP0196.md +20 -0
- package/dist/wiki/engine/errors/SP0197.md +20 -0
- package/dist/wiki/engine/errors/SP0198.md +20 -0
- package/dist/wiki/engine/errors/SP0199.md +20 -0
- package/dist/wiki/engine/errors/SP0200.md +20 -0
- package/dist/wiki/engine/errors/SP0202.md +20 -0
- package/dist/wiki/engine/errors/SP0203.md +20 -0
- package/dist/wiki/engine/errors/SP0204.md +20 -0
- package/dist/wiki/engine/errors/SP0205.md +20 -0
- package/dist/wiki/engine/errors/SP0206.md +20 -0
- package/dist/wiki/engine/errors/SP0207.md +20 -0
- package/dist/wiki/engine/errors/SP0208.md +20 -0
- package/dist/wiki/engine/errors/SP0210.md +20 -0
- package/dist/wiki/engine/errors/SP0211.md +20 -0
- package/dist/wiki/engine/errors/SP0212.md +20 -0
- package/dist/wiki/engine/errors/SP0213.md +20 -0
- package/dist/wiki/engine/errors/SP0214.md +20 -0
- package/dist/wiki/engine/errors/SP0215.md +20 -0
- package/dist/wiki/engine/errors/SP0216.md +20 -0
- package/dist/wiki/engine/errors/SP0219.md +20 -0
- package/dist/wiki/engine/errors/SP0220.md +20 -0
- package/dist/wiki/engine/errors/SP0221.md +20 -0
- package/dist/wiki/engine/errors/SP0225.md +20 -0
- package/dist/wiki/engine/errors/SP0228.md +20 -0
- package/dist/wiki/engine/errors/SP0229.md +20 -0
- package/dist/wiki/engine/errors/SP0230.md +20 -0
- package/dist/wiki/engine/errors/SP0231.md +20 -0
- package/dist/wiki/engine/errors/SP0232.md +20 -0
- package/dist/wiki/engine/errors/SP0233.md +20 -0
- package/dist/wiki/engine/errors/SP0234.md +20 -0
- package/dist/wiki/engine/errors/SP0235.md +20 -0
- package/dist/wiki/engine/errors/SP0236.md +20 -0
- package/dist/wiki/engine/errors/SP0237.md +20 -0
- package/dist/wiki/engine/errors/SP0238.md +20 -0
- package/dist/wiki/engine/errors/SP0239.md +20 -0
- package/dist/wiki/engine/errors/SP0240.md +20 -0
- package/dist/wiki/engine/errors/SP0241.md +20 -0
- package/dist/wiki/engine/errors/SP0242.md +20 -0
- package/dist/wiki/engine/errors/SP0243.md +20 -0
- package/dist/wiki/engine/errors/SP0244.md +20 -0
- package/dist/wiki/engine/errors/SP0245.md +20 -0
- package/dist/wiki/engine/errors/SP0247.md +20 -0
- package/dist/wiki/engine/errors/SP0249.md +20 -0
- package/dist/wiki/engine/errors/SP0250.md +20 -0
- package/dist/wiki/engine/errors/SP0251.md +20 -0
- package/dist/wiki/engine/errors/SP0252.md +20 -0
- package/dist/wiki/engine/errors/SP0253.md +20 -0
- package/dist/wiki/engine/errors/SP0254.md +20 -0
- package/dist/wiki/engine/errors/SP0255.md +20 -0
- package/dist/wiki/engine/errors/SP0256.md +20 -0
- package/dist/wiki/engine/errors/SP0257.md +20 -0
- package/dist/wiki/engine/errors/SP0258.md +20 -0
- package/dist/wiki/engine/errors/SP0259.md +20 -0
- package/dist/wiki/engine/errors/SP0260.md +20 -0
- package/dist/wiki/engine/errors/SP0270.md +20 -0
- package/dist/wiki/engine/errors/SP0271.md +20 -0
- package/dist/wiki/engine/errors/SP0272.md +20 -0
- package/dist/wiki/engine/errors/SP0273.md +20 -0
- package/dist/wiki/engine/errors/SP0274.md +20 -0
- package/dist/wiki/engine/errors/SP0275.md +20 -0
- package/dist/wiki/engine/errors/SP0276.md +20 -0
- package/dist/wiki/engine/errors/SP0277.md +20 -0
- package/dist/wiki/engine/errors/SP0278.md +20 -0
- package/dist/wiki/engine/errors/SP0279.md +20 -0
- package/dist/wiki/engine/errors/SP0280.md +20 -0
- package/dist/wiki/engine/errors/SP0281.md +20 -0
- package/dist/wiki/engine/errors/SP0282.md +20 -0
- package/dist/wiki/engine/errors/SP0283.md +20 -0
- package/dist/wiki/engine/errors/SP0284.md +20 -0
- package/dist/wiki/engine/errors/SP0285.md +20 -0
- package/dist/wiki/engine/errors/SP0286.md +20 -0
- package/dist/wiki/engine/errors/SP0287.md +20 -0
- package/dist/wiki/engine/errors/SP0288.md +20 -0
- package/dist/wiki/engine/errors/SP0289.md +20 -0
- package/dist/wiki/engine/errors/SP0290.md +20 -0
- package/dist/wiki/engine/errors/SP0291.md +20 -0
- package/dist/wiki/engine/errors/SP0292.md +20 -0
- package/dist/wiki/engine/errors/SP0293.md +20 -0
- package/dist/wiki/engine/errors/SP0294.md +20 -0
- package/dist/wiki/engine/errors/SP0295.md +20 -0
- package/dist/wiki/engine/errors/SP0296.md +20 -0
- package/dist/wiki/engine/errors/SP0297.md +20 -0
- package/dist/wiki/engine/errors/SP0298.md +20 -0
- package/dist/wiki/engine/errors/SP0299.md +20 -0
- package/dist/wiki/engine/errors/SP0300.md +20 -0
- package/dist/wiki/engine/errors/SP0301.md +20 -0
- package/dist/wiki/engine/errors/SP0302.md +20 -0
- package/dist/wiki/engine/errors/SP0303.md +20 -0
- package/dist/wiki/engine/errors/SP0304.md +20 -0
- package/dist/wiki/engine/errors/SP0305.md +20 -0
- package/dist/wiki/engine/errors/SP0306.md +20 -0
- package/dist/wiki/engine/errors/SP0307.md +20 -0
- package/dist/wiki/engine/errors/SP0308.md +20 -0
- package/dist/wiki/engine/errors/SP0309.md +20 -0
- package/dist/wiki/engine/errors/SP0310.md +20 -0
- package/dist/wiki/engine/errors/SP0311.md +20 -0
- package/dist/wiki/engine/errors/SP0312.md +20 -0
- package/dist/wiki/engine/errors/SP0313.md +20 -0
- package/dist/wiki/engine/errors/SP0314.md +20 -0
- package/dist/wiki/engine/errors/SP0315.md +20 -0
- package/dist/wiki/engine/errors/SP0316.md +20 -0
- package/dist/wiki/engine/errors/SP0317.md +20 -0
- package/dist/wiki/engine/errors/SP0318.md +20 -0
- package/dist/wiki/engine/errors/SP0319.md +20 -0
- package/dist/wiki/engine/errors/SP0320.md +20 -0
- package/dist/wiki/engine/errors/SP0321.md +20 -0
- package/dist/wiki/engine/errors/SP0322.md +20 -0
- package/dist/wiki/engine/errors/SP0323.md +20 -0
- package/dist/wiki/engine/errors/SP0324.md +20 -0
- package/dist/wiki/engine/errors/SP0325.md +20 -0
- package/dist/wiki/engine/errors/SP0326.md +20 -0
- package/dist/wiki/engine/errors/SP0327.md +20 -0
- package/dist/wiki/engine/errors/SP0328.md +20 -0
- package/dist/wiki/engine/errors/SP0329.md +20 -0
- package/dist/wiki/engine/errors/SP0330.md +20 -0
- package/dist/wiki/engine/errors/SP0331.md +20 -0
- package/dist/wiki/engine/errors/SP0332.md +20 -0
- package/dist/wiki/engine/errors/SP0333.md +20 -0
- package/dist/wiki/engine/errors/SP0334.md +20 -0
- package/dist/wiki/engine/errors/SP0335.md +20 -0
- package/dist/wiki/engine/errors/SP0336.md +20 -0
- package/dist/wiki/engine/errors/SP0337.md +20 -0
- package/dist/wiki/engine/errors/SP0338.md +20 -0
- package/dist/wiki/engine/errors/SP0339.md +20 -0
- package/dist/wiki/engine/errors/SP0340.md +20 -0
- package/dist/wiki/engine/errors/SP0341.md +20 -0
- package/dist/wiki/engine/errors/SP0342.md +20 -0
- package/dist/wiki/engine/errors/SP0343.md +20 -0
- package/dist/wiki/engine/errors/SP0344.md +20 -0
- package/dist/wiki/engine/errors/SP0346.md +20 -0
- package/dist/wiki/engine/errors/SP0347.md +20 -0
- package/dist/wiki/engine/errors/SP0348.md +20 -0
- package/dist/wiki/engine/errors/SP0349.md +20 -0
- package/dist/wiki/engine/errors/SP0350.md +20 -0
- package/dist/wiki/engine/errors/SP0351.md +20 -0
- package/dist/wiki/engine/errors/SP0352.md +20 -0
- package/dist/wiki/engine/errors/SP0353.md +20 -0
- package/dist/wiki/engine/errors/SP0354.md +20 -0
- package/dist/wiki/engine/errors/SP0355.md +20 -0
- package/dist/wiki/engine/errors/SP0356.md +20 -0
- package/dist/wiki/engine/errors/SP0357.md +20 -0
- package/dist/wiki/engine/errors/SP0358.md +20 -0
- package/dist/wiki/engine/errors/SP0359.md +20 -0
- package/dist/wiki/engine/errors/SP0360.md +20 -0
- package/dist/wiki/engine/errors/SP0361.md +20 -0
- package/dist/wiki/engine/errors/SP0362.md +20 -0
- package/dist/wiki/engine/errors/SP0363.md +20 -0
- package/dist/wiki/engine/errors/SP0364.md +20 -0
- package/dist/wiki/engine/errors/SP0365.md +20 -0
- package/dist/wiki/engine/errors/SP0366.md +20 -0
- package/dist/wiki/engine/errors/SP0367.md +20 -0
- package/dist/wiki/engine/errors/SP0368.md +20 -0
- package/dist/wiki/engine/errors/SP0369.md +20 -0
- package/dist/wiki/engine/errors/SP0370.md +20 -0
- package/dist/wiki/engine/errors/SP0371.md +20 -0
- package/dist/wiki/engine/errors/SP0372.md +20 -0
- package/dist/wiki/engine/errors/SP0373.md +20 -0
- package/dist/wiki/engine/errors/SP0374.md +20 -0
- package/dist/wiki/engine/errors/SP0375.md +20 -0
- package/dist/wiki/engine/errors/SP0376.md +20 -0
- package/dist/wiki/engine/errors/SP0377.md +20 -0
- package/dist/wiki/engine/errors/SP0378.md +20 -0
- package/dist/wiki/engine/errors/SP0379.md +20 -0
- package/dist/wiki/engine/errors/SP0380.md +20 -0
- package/dist/wiki/engine/errors/SP0381.md +20 -0
- package/dist/wiki/engine/errors/SP0382.md +20 -0
- package/dist/wiki/engine/errors/SP0383.md +20 -0
- package/dist/wiki/engine/errors/SP0384.md +20 -0
- package/dist/wiki/engine/errors/SP0385.md +20 -0
- package/dist/wiki/engine/errors/SP0386.md +20 -0
- package/dist/wiki/engine/errors/SP0387.md +21 -0
- package/dist/wiki/engine/errors/SP0388.md +20 -0
- package/dist/wiki/engine/errors/SP0389.md +20 -0
- package/dist/wiki/engine/errors/SP0390.md +20 -0
- package/dist/wiki/engine/errors/SP0391.md +20 -0
- package/dist/wiki/engine/errors/SP0392.md +20 -0
- package/dist/wiki/engine/errors/SP0393.md +20 -0
- package/dist/wiki/engine/errors/SP0394.md +20 -0
- package/dist/wiki/engine/errors/SP0395.md +20 -0
- package/dist/wiki/engine/errors/SP0396.md +20 -0
- package/dist/wiki/engine/errors/SP0397.md +20 -0
- package/dist/wiki/engine/errors/SP0398.md +20 -0
- package/dist/wiki/engine/errors/SP0399.md +20 -0
- package/dist/wiki/engine/errors/SP0400.md +20 -0
- package/dist/wiki/engine/errors/SP0401.md +20 -0
- package/dist/wiki/engine/errors/SP0402.md +20 -0
- package/dist/wiki/engine/errors/SP0403.md +20 -0
- package/dist/wiki/engine/errors/SP0404.md +20 -0
- package/dist/wiki/engine/errors/SP0405.md +20 -0
- package/dist/wiki/engine/errors/SP0406.md +20 -0
- package/dist/wiki/engine/errors/SP0407.md +20 -0
- package/dist/wiki/engine/errors/SP0408.md +20 -0
- package/dist/wiki/engine/errors/SP0409.md +20 -0
- package/dist/wiki/engine/errors/SP0410.md +20 -0
- package/dist/wiki/engine/errors/SP0411.md +20 -0
- package/dist/wiki/engine/errors/SP0412.md +20 -0
- package/dist/wiki/engine/errors/SP0413.md +20 -0
- package/dist/wiki/engine/errors/SP0414.md +20 -0
- package/dist/wiki/engine/errors/SP0415.md +20 -0
- package/dist/wiki/engine/errors/SP0416.md +20 -0
- package/dist/wiki/engine/errors/SP0417.md +20 -0
- package/dist/wiki/engine/errors/SP0418.md +20 -0
- package/dist/wiki/engine/errors/SP0419.md +20 -0
- package/dist/wiki/engine/errors/SP0420.md +20 -0
- package/dist/wiki/engine/errors/SP0421.md +20 -0
- package/dist/wiki/engine/errors/SP0422.md +20 -0
- package/dist/wiki/engine/errors/SP0423.md +20 -0
- package/dist/wiki/engine/errors/SP0427.md +20 -0
- package/dist/wiki/engine/errors/SP0428.md +20 -0
- package/dist/wiki/engine/errors/SP0429.md +20 -0
- package/dist/wiki/engine/errors/SP0430.md +20 -0
- package/dist/wiki/engine/errors/SP0431.md +20 -0
- package/dist/wiki/engine/errors/SP0432.md +20 -0
- package/dist/wiki/engine/errors/SP0433.md +20 -0
- package/dist/wiki/engine/errors/SP0434.md +20 -0
- package/dist/wiki/engine/errors/SP0435.md +20 -0
- package/dist/wiki/engine/errors/SP0436.md +20 -0
- package/dist/wiki/engine/errors/SP0437.md +20 -0
- package/dist/wiki/engine/errors/SP0438.md +20 -0
- package/dist/wiki/engine/errors/SP0439.md +20 -0
- package/dist/wiki/engine/errors/SP0440.md +20 -0
- package/dist/wiki/engine/errors/SP0442.md +20 -0
- package/dist/wiki/engine/errors/SP0443.md +20 -0
- package/dist/wiki/engine/errors/SP0444.md +20 -0
- package/dist/wiki/engine/errors/SP0445.md +20 -0
- package/dist/wiki/engine/errors/SP0446.md +20 -0
- package/dist/wiki/engine/errors/SP0447.md +20 -0
- package/dist/wiki/engine/errors/SP0448.md +20 -0
- package/dist/wiki/engine/errors/SP0449.md +20 -0
- package/dist/wiki/engine/errors/SP0450.md +20 -0
- package/dist/wiki/engine/errors/SP0451.md +20 -0
- package/dist/wiki/engine/errors/SP0452.md +20 -0
- package/dist/wiki/engine/errors/SP0453.md +20 -0
- package/dist/wiki/engine/errors/SP0454.md +20 -0
- package/dist/wiki/engine/errors/SP0455.md +20 -0
- package/dist/wiki/engine/errors/SP0456.md +20 -0
- package/dist/wiki/engine/errors/SP0457.md +20 -0
- package/dist/wiki/engine/errors/SP0458.md +20 -0
- package/dist/wiki/engine/errors/SP0459.md +20 -0
- package/dist/wiki/engine/errors/SP0460.md +20 -0
- package/dist/wiki/engine/errors/SP0461.md +20 -0
- package/dist/wiki/engine/errors/SP0462.md +20 -0
- package/dist/wiki/engine/errors/SP0463.md +20 -0
- package/dist/wiki/engine/errors/SP0464.md +20 -0
- package/dist/wiki/engine/errors/SP0465.md +20 -0
- package/dist/wiki/engine/errors/SP0466.md +20 -0
- package/dist/wiki/engine/errors/SP0467.md +20 -0
- package/dist/wiki/engine/errors/SP0468.md +20 -0
- package/dist/wiki/engine/errors/SP0469.md +20 -0
- package/dist/wiki/engine/errors/SP0470.md +20 -0
- package/dist/wiki/engine/errors/SP0471.md +20 -0
- package/dist/wiki/engine/errors/SP0472.md +20 -0
- package/dist/wiki/engine/errors/SP0473.md +20 -0
- package/dist/wiki/engine/errors/SP0474.md +20 -0
- package/dist/wiki/engine/errors/SP0475.md +20 -0
- package/dist/wiki/engine/errors/SP0476.md +20 -0
- package/dist/wiki/engine/errors/SP0477.md +20 -0
- package/dist/wiki/engine/errors/SP0478.md +20 -0
- package/dist/wiki/engine/errors/SP0479.md +20 -0
- package/dist/wiki/engine/errors/SP0480.md +20 -0
- package/dist/wiki/engine/errors/SP0481.md +20 -0
- package/dist/wiki/engine/errors/SP0482.md +20 -0
- package/dist/wiki/engine/errors/SP0483.md +20 -0
- package/dist/wiki/engine/errors/SP0484.md +20 -0
- package/dist/wiki/engine/errors/SP0497.md +20 -0
- package/dist/wiki/engine/errors/SP0498.md +20 -0
- package/dist/wiki/engine/errors/SP0500.md +20 -0
- package/dist/wiki/engine/errors/SP0501.md +20 -0
- package/dist/wiki/engine/errors/SP0502.md +20 -0
- package/dist/wiki/engine/errors/SP0503.md +20 -0
- package/dist/wiki/engine/errors/SP0504.md +20 -0
- package/dist/wiki/engine/errors/SP0505.md +20 -0
- package/dist/wiki/engine/errors/SP0506.md +20 -0
- package/dist/wiki/engine/errors/SP0507.md +20 -0
- package/dist/wiki/engine/errors/SP0508.md +20 -0
- package/dist/wiki/engine/errors/SP0509.md +20 -0
- package/dist/wiki/engine/errors/SP0510.md +20 -0
- package/dist/wiki/engine/errors/SP0511.md +20 -0
- package/dist/wiki/engine/errors/SP0512.md +20 -0
- package/dist/wiki/engine/errors/SP0513.md +20 -0
- package/dist/wiki/engine/errors/SP0514.md +20 -0
- package/dist/wiki/engine/errors/SP0515.md +20 -0
- package/dist/wiki/engine/errors/SP0516.md +20 -0
- package/dist/wiki/engine/errors/SP0517.md +20 -0
- package/dist/wiki/engine/errors/SP0518.md +20 -0
- package/dist/wiki/engine/errors/SP0519.md +20 -0
- package/dist/wiki/engine/errors/SP0520.md +20 -0
- package/dist/wiki/engine/errors/SP0521.md +20 -0
- package/dist/wiki/engine/errors/SP0522.md +20 -0
- package/dist/wiki/engine/errors/SP0523.md +20 -0
- package/dist/wiki/engine/errors/SP0524.md +20 -0
- package/dist/wiki/engine/errors/SP0525.md +20 -0
- package/dist/wiki/engine/errors/SP0526.md +20 -0
- package/dist/wiki/engine/errors/SP0527.md +20 -0
- package/dist/wiki/engine/errors/SP0528.md +20 -0
- package/dist/wiki/engine/errors/SP0529.md +20 -0
- package/dist/wiki/engine/errors/SP0530.md +20 -0
- package/dist/wiki/engine/errors/SP0531.md +20 -0
- package/dist/wiki/engine/errors/SP0532.md +20 -0
- package/dist/wiki/engine/errors/SP0533.md +20 -0
- package/dist/wiki/engine/errors/SP0534.md +20 -0
- package/dist/wiki/engine/errors/SP0535.md +20 -0
- package/dist/wiki/engine/errors/SP0536.md +20 -0
- package/dist/wiki/engine/errors/SP0537.md +20 -0
- package/dist/wiki/engine/errors/SP0538.md +20 -0
- package/dist/wiki/engine/errors/SP0539.md +20 -0
- package/dist/wiki/engine/errors/SP0540.md +20 -0
- package/dist/wiki/engine/errors/SP0541.md +20 -0
- package/dist/wiki/engine/errors/SP0542.md +20 -0
- package/dist/wiki/engine/errors/SP0543.md +20 -0
- package/dist/wiki/engine/errors/SP0545.md +20 -0
- package/dist/wiki/engine/errors/SP0546.md +20 -0
- package/dist/wiki/engine/errors/SP0547.md +20 -0
- package/dist/wiki/engine/errors/SP0548.md +20 -0
- package/dist/wiki/engine/errors/SP0549.md +20 -0
- package/dist/wiki/engine/errors/SP0550.md +20 -0
- package/dist/wiki/engine/errors/SP0551.md +20 -0
- package/dist/wiki/engine/errors/SP0552.md +20 -0
- package/dist/wiki/engine/errors/SP0553.md +20 -0
- package/dist/wiki/engine/errors/SP0554.md +20 -0
- package/dist/wiki/engine/errors/SP0555.md +20 -0
- package/dist/wiki/engine/errors/SP0556.md +20 -0
- package/dist/wiki/engine/errors/SP0557.md +20 -0
- package/dist/wiki/engine/errors/SP0558.md +20 -0
- package/dist/wiki/engine/errors/SP0559.md +20 -0
- package/dist/wiki/engine/errors/SP0560.md +20 -0
- package/dist/wiki/engine/errors/SP0561.md +20 -0
- package/dist/wiki/engine/errors/SP0562.md +20 -0
- package/dist/wiki/engine/errors/SP0563.md +20 -0
- package/dist/wiki/engine/errors/SP0564.md +20 -0
- package/dist/wiki/engine/errors/SP0565.md +20 -0
- package/dist/wiki/engine/errors/SP0566.md +20 -0
- package/dist/wiki/engine/errors/SP0567.md +20 -0
- package/dist/wiki/engine/errors/SP0568.md +20 -0
- package/dist/wiki/engine/errors/SP0569.md +20 -0
- package/dist/wiki/engine/errors/SP0570.md +20 -0
- package/dist/wiki/engine/errors/index.md +504 -0
- package/dist/wiki/engine/graphics/crt-material.md +64 -0
- package/dist/wiki/engine/graphics/energy-orb-material.md +52 -0
- package/dist/wiki/engine/graphics/instanced-model.md +89 -0
- package/dist/wiki/engine/graphics/looks.md +196 -0
- package/dist/wiki/engine/graphics/particles.md +185 -0
- package/dist/wiki/engine/graphics/portal-material.md +49 -0
- package/dist/wiki/engine/graphics/post-processing.md +130 -0
- package/dist/wiki/engine/graphics/renderer.md +103 -0
- package/dist/wiki/engine/graphics/shader.md +331 -0
- package/dist/wiki/engine/graphics/skinned-batch.md +115 -0
- package/dist/wiki/engine/graphics/track-scatter.md +124 -0
- package/dist/wiki/engine/graphics/track-surface.md +107 -0
- package/dist/wiki/engine/graphics/water-material.md +60 -0
- package/dist/wiki/engine/graphics/webgpu.md +87 -0
- package/dist/wiki/engine/structure/game.md +301 -0
- package/dist/wiki/engine/structure/levels.md +239 -0
- package/dist/wiki/engine/structure/plugins.md +423 -0
- package/dist/wiki/engine/structure/round.md +229 -0
- package/dist/wiki/engine/structure/saves.md +251 -0
- package/dist/wiki/engine/structure/scene.md +69 -0
- package/dist/wiki/engine/structure/states.md +202 -0
- package/dist/wiki/engine/structure/systems.md +242 -0
- package/dist/wiki/engine/structure/track-level.md +73 -0
- package/dist/wiki/engine/structure/world.md +371 -0
- package/dist/wiki/engine/testing/agent-state.md +131 -0
- package/dist/wiki/engine/testing/dev-server.md +101 -0
- package/dist/wiki/engine/testing/devtools-wiki.md +80 -0
- package/dist/wiki/engine/testing/devtools.md +143 -0
- package/dist/wiki/engine/testing/directing.md +125 -0
- package/dist/wiki/engine/testing/director.md +285 -0
- package/dist/wiki/engine/testing/editing.md +71 -0
- package/dist/wiki/engine/testing/errors.md +146 -0
- package/dist/wiki/engine/testing/frame.md +175 -0
- package/dist/wiki/engine/testing/headless.md +133 -0
- package/dist/wiki/engine/testing/hitches.md +140 -0
- package/dist/wiki/engine/testing/joins.md +129 -0
- package/dist/wiki/engine/testing/measuring.md +97 -0
- package/dist/wiki/engine/testing/performance.md +48 -0
- package/dist/wiki/engine/testing/processes.md +87 -0
- package/dist/wiki/engine/testing/replay-storage.md +156 -0
- package/dist/wiki/engine/testing/replay.md +230 -0
- package/dist/wiki/engine/testing/runs.md +162 -0
- package/dist/wiki/engine/testing/which-tool.md +155 -0
- package/dist/wiki/engine/ui/action-bar.md +121 -0
- package/dist/wiki/engine/ui/bar.md +54 -0
- package/dist/wiki/engine/ui/billboard.md +64 -0
- package/dist/wiki/engine/ui/button.md +69 -0
- package/dist/wiki/engine/ui/controls.md +131 -0
- package/dist/wiki/engine/ui/counter.md +40 -0
- package/dist/wiki/engine/ui/devtools-panel.md +69 -0
- package/dist/wiki/engine/ui/drag-and-drop.md +134 -0
- package/dist/wiki/engine/ui/floating-text.md +129 -0
- package/dist/wiki/engine/ui/graphics-quality.md +254 -0
- package/dist/wiki/engine/ui/heading.md +43 -0
- package/dist/wiki/engine/ui/hud.md +100 -0
- package/dist/wiki/engine/ui/icon.md +34 -0
- package/dist/wiki/engine/ui/image.md +38 -0
- package/dist/wiki/engine/ui/index.md +59 -0
- package/dist/wiki/engine/ui/joystick.md +32 -0
- package/dist/wiki/engine/ui/modal.md +95 -0
- package/dist/wiki/engine/ui/panel.md +100 -0
- package/dist/wiki/engine/ui/settings.md +303 -0
- package/dist/wiki/engine/ui/tap.md +33 -0
- package/dist/wiki/engine/ui/text.md +56 -0
- package/dist/wiki/engine/ui/theme.md +119 -0
- package/dist/wiki/engine/ui/window.md +68 -0
- package/dist/wmIDrLkF.js +1 -0
- package/dist/yhuZzG90.js +1 -0
- package/dist/z3YXvfLT.js +1 -0
- package/dist-browser/@pixiv/three-vrm/nodes.js +1 -0
- package/dist-browser/@pixiv/three-vrm.js +1 -0
- package/dist-browser/@react-three/drei/exports/-accumulative-shadows.js +1 -0
- package/dist-browser/@react-three/drei/exports/-adaptive-dpr.js +1 -0
- package/dist-browser/@react-three/drei/exports/-adaptive-events.js +1 -0
- package/dist-browser/@react-three/drei/exports/-arcball-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-ascii-renderer.js +1 -0
- package/dist-browser/@react-three/drei/exports/-b-b-anchor.js +1 -0
- package/dist-browser/@react-three/drei/exports/-backdrop.js +1 -0
- package/dist-browser/@react-three/drei/exports/-bake-shadows.js +1 -0
- package/dist-browser/@react-three/drei/exports/-billboard.js +1 -0
- package/dist-browser/@react-three/drei/exports/-bounds.js +1 -0
- package/dist-browser/@react-three/drei/exports/-box.js +1 -0
- package/dist-browser/@react-three/drei/exports/-bvh.js +1 -0
- package/dist-browser/@react-three/drei/exports/-camera-controls-impl.js +1 -0
- package/dist-browser/@react-three/drei/exports/-camera-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-camera-shake.js +1 -0
- package/dist-browser/@react-three/drei/exports/-capsule.js +1 -0
- package/dist-browser/@react-three/drei/exports/-catmull-rom-line.js +1 -0
- package/dist-browser/@react-three/drei/exports/-caustics.js +1 -0
- package/dist-browser/@react-three/drei/exports/-center.js +1 -0
- package/dist-browser/@react-three/drei/exports/-circle.js +1 -0
- package/dist-browser/@react-three/drei/exports/-clone.js +1 -0
- package/dist-browser/@react-three/drei/exports/-cloud-instance.js +1 -0
- package/dist-browser/@react-three/drei/exports/-cloud.js +1 -0
- package/dist-browser/@react-three/drei/exports/-clouds.js +1 -0
- package/dist-browser/@react-three/drei/exports/-computed-attribute.js +1 -0
- package/dist-browser/@react-three/drei/exports/-cone.js +1 -0
- package/dist-browser/@react-three/drei/exports/-contact-shadows.js +1 -0
- package/dist-browser/@react-three/drei/exports/-cube-camera.js +1 -0
- package/dist-browser/@react-three/drei/exports/-cube-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/-cubic-bezier-line.js +1 -0
- package/dist-browser/@react-three/drei/exports/-curve-modifier.js +1 -0
- package/dist-browser/@react-three/drei/exports/-cycle-raycast.js +1 -0
- package/dist-browser/@react-three/drei/exports/-cylinder.js +1 -0
- package/dist-browser/@react-three/drei/exports/-decal.js +1 -0
- package/dist-browser/@react-three/drei/exports/-detailed.js +1 -0
- package/dist-browser/@react-three/drei/exports/-detect-g-p-u.js +1 -0
- package/dist-browser/@react-three/drei/exports/-device-orientation-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-dodecahedron.js +1 -0
- package/dist-browser/@react-three/drei/exports/-drag-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-edges.js +1 -0
- package/dist-browser/@react-three/drei/exports/-effects.js +1 -0
- package/dist-browser/@react-three/drei/exports/-environment-cube.js +1 -0
- package/dist-browser/@react-three/drei/exports/-environment-map.js +1 -0
- package/dist-browser/@react-three/drei/exports/-environment-portal.js +1 -0
- package/dist-browser/@react-three/drei/exports/-environment.js +1 -0
- package/dist-browser/@react-three/drei/exports/-example.js +1 -0
- package/dist-browser/@react-three/drei/exports/-extrude.js +1 -0
- package/dist-browser/@react-three/drei/exports/-face-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-face-landmarker-defaults.js +1 -0
- package/dist-browser/@react-three/drei/exports/-face-landmarker.js +1 -0
- package/dist-browser/@react-three/drei/exports/-facemesh-datas.js +1 -0
- package/dist-browser/@react-three/drei/exports/-facemesh-eye-defaults.js +1 -0
- package/dist-browser/@react-three/drei/exports/-facemesh-eye.js +1 -0
- package/dist-browser/@react-three/drei/exports/-facemesh.js +1 -0
- package/dist-browser/@react-three/drei/exports/-fbo.js +1 -0
- package/dist-browser/@react-three/drei/exports/-fbx.js +1 -0
- package/dist-browser/@react-three/drei/exports/-first-person-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-fisheye.js +1 -0
- package/dist-browser/@react-three/drei/exports/-float.js +1 -0
- package/dist-browser/@react-three/drei/exports/-fly-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-gizmo-helper.js +1 -0
- package/dist-browser/@react-three/drei/exports/-gizmo-viewcube.js +1 -0
- package/dist-browser/@react-three/drei/exports/-gizmo-viewport.js +1 -0
- package/dist-browser/@react-three/drei/exports/-gltf.js +1 -0
- package/dist-browser/@react-three/drei/exports/-gradient-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/-gradient-type.js +1 -0
- package/dist-browser/@react-three/drei/exports/-grid.js +1 -0
- package/dist-browser/@react-three/drei/exports/-helper.js +1 -0
- package/dist-browser/@react-three/drei/exports/-html.js +1 -0
- package/dist-browser/@react-three/drei/exports/-hud.js +1 -0
- package/dist-browser/@react-three/drei/exports/-icosahedron.js +1 -0
- package/dist-browser/@react-three/drei/exports/-image.js +1 -0
- package/dist-browser/@react-three/drei/exports/-instance.js +1 -0
- package/dist-browser/@react-three/drei/exports/-instanced-attribute.js +1 -0
- package/dist-browser/@react-three/drei/exports/-instances.js +1 -0
- package/dist-browser/@react-three/drei/exports/-is-object.js +1 -0
- package/dist-browser/@react-three/drei/exports/-keyboard-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-ktx2.js +1 -0
- package/dist-browser/@react-three/drei/exports/-lathe.js +1 -0
- package/dist-browser/@react-three/drei/exports/-lightformer.js +1 -0
- package/dist-browser/@react-three/drei/exports/-line.js +1 -0
- package/dist-browser/@react-three/drei/exports/-loader.js +1 -0
- package/dist-browser/@react-three/drei/exports/-map-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-marching-cube.js +1 -0
- package/dist-browser/@react-three/drei/exports/-marching-cubes.js +1 -0
- package/dist-browser/@react-three/drei/exports/-marching-plane.js +1 -0
- package/dist-browser/@react-three/drei/exports/-mask.js +1 -0
- package/dist-browser/@react-three/drei/exports/-matcap-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/-merged.js +1 -0
- package/dist-browser/@react-three/drei/exports/-mesh-discard-material.js +1 -0
- package/dist-browser/@react-three/drei/exports/-mesh-distort-material.js +1 -0
- package/dist-browser/@react-three/drei/exports/-mesh-portal-material.js +1 -0
- package/dist-browser/@react-three/drei/exports/-mesh-reflector-material.js +1 -0
- package/dist-browser/@react-three/drei/exports/-mesh-refraction-material.js +1 -0
- package/dist-browser/@react-three/drei/exports/-mesh-transmission-material.js +1 -0
- package/dist-browser/@react-three/drei/exports/-mesh-wobble-material.js +1 -0
- package/dist-browser/@react-three/drei/exports/-motion-path-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-multi-material.js +1 -0
- package/dist-browser/@react-three/drei/exports/-normal-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/-octahedron.js +1 -0
- package/dist-browser/@react-three/drei/exports/-orbit-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-orthographic-camera.js +1 -0
- package/dist-browser/@react-three/drei/exports/-outlines.js +1 -0
- package/dist-browser/@react-three/drei/exports/-performance-monitor.js +1 -0
- package/dist-browser/@react-three/drei/exports/-perspective-camera.js +1 -0
- package/dist-browser/@react-three/drei/exports/-pivot-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-plane.js +1 -0
- package/dist-browser/@react-three/drei/exports/-point-material-impl.js +1 -0
- package/dist-browser/@react-three/drei/exports/-point-material.js +1 -0
- package/dist-browser/@react-three/drei/exports/-point.js +1 -0
- package/dist-browser/@react-three/drei/exports/-pointer-lock-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-points-buffer.js +1 -0
- package/dist-browser/@react-three/drei/exports/-points.js +1 -0
- package/dist-browser/@react-three/drei/exports/-polyhedron.js +1 -0
- package/dist-browser/@react-three/drei/exports/-position-mesh.js +1 -0
- package/dist-browser/@react-three/drei/exports/-position-point.js +1 -0
- package/dist-browser/@react-three/drei/exports/-positional-audio.js +1 -0
- package/dist-browser/@react-three/drei/exports/-preload.js +1 -0
- package/dist-browser/@react-three/drei/exports/-presentation-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-progress.js +1 -0
- package/dist-browser/@react-three/drei/exports/-quadratic-bezier-line.js +1 -0
- package/dist-browser/@react-three/drei/exports/-randomized-light.js +1 -0
- package/dist-browser/@react-three/drei/exports/-render-cube-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/-render-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/-resize.js +1 -0
- package/dist-browser/@react-three/drei/exports/-ring.js +1 -0
- package/dist-browser/@react-three/drei/exports/-rounded-box-geometry.js +1 -0
- package/dist-browser/@react-three/drei/exports/-rounded-box.js +1 -0
- package/dist-browser/@react-three/drei/exports/-sampler.js +1 -0
- package/dist-browser/@react-three/drei/exports/-screen-quad.js +1 -0
- package/dist-browser/@react-three/drei/exports/-screen-sizer.js +1 -0
- package/dist-browser/@react-three/drei/exports/-screen-space.js +1 -0
- package/dist-browser/@react-three/drei/exports/-screen-video-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/-scroll-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-scroll.js +1 -0
- package/dist-browser/@react-three/drei/exports/-segment-object.js +1 -0
- package/dist-browser/@react-three/drei/exports/-segment.js +1 -0
- package/dist-browser/@react-three/drei/exports/-segments.js +1 -0
- package/dist-browser/@react-three/drei/exports/-select.js +1 -0
- package/dist-browser/@react-three/drei/exports/-shadow-alpha.js +1 -0
- package/dist-browser/@react-three/drei/exports/-shadow.js +1 -0
- package/dist-browser/@react-three/drei/exports/-shape.js +1 -0
- package/dist-browser/@react-three/drei/exports/-sky.js +1 -0
- package/dist-browser/@react-three/drei/exports/-soft-shadows.js +1 -0
- package/dist-browser/@react-three/drei/exports/-sparkles.js +1 -0
- package/dist-browser/@react-three/drei/exports/-sphere.js +1 -0
- package/dist-browser/@react-three/drei/exports/-splat.js +1 -0
- package/dist-browser/@react-three/drei/exports/-spot-light-shadow.js +1 -0
- package/dist-browser/@react-three/drei/exports/-spot-light.js +1 -0
- package/dist-browser/@react-three/drei/exports/-sprite-animator.js +1 -0
- package/dist-browser/@react-three/drei/exports/-stage.js +1 -0
- package/dist-browser/@react-three/drei/exports/-stars.js +1 -0
- package/dist-browser/@react-three/drei/exports/-stats-gl.js +1 -0
- package/dist-browser/@react-three/drei/exports/-stats.js +1 -0
- package/dist-browser/@react-three/drei/exports/-svg.js +1 -0
- package/dist-browser/@react-three/drei/exports/-tetrahedron.js +1 -0
- package/dist-browser/@react-three/drei/exports/-text.js +1 -0
- package/dist-browser/@react-three/drei/exports/-text3-d.js +1 -0
- package/dist-browser/@react-three/drei/exports/-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/-torus-knot.js +1 -0
- package/dist-browser/@react-three/drei/exports/-torus.js +1 -0
- package/dist-browser/@react-three/drei/exports/-trackball-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-trail-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/-trail.js +1 -0
- package/dist-browser/@react-three/drei/exports/-transform-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/-tube.js +1 -0
- package/dist-browser/@react-three/drei/exports/-video-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/-view.js +1 -0
- package/dist-browser/@react-three/drei/exports/-webcam-video-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/-wireframe.js +1 -0
- package/dist-browser/@react-three/drei/exports/accumulative-context.js +1 -0
- package/dist-browser/@react-three/drei/exports/calc-pos-from-angles.js +1 -0
- package/dist-browser/@react-three/drei/exports/calculate-scale-factor.js +1 -0
- package/dist-browser/@react-three/drei/exports/check-if-frame-is-empty.js +1 -0
- package/dist-browser/@react-three/drei/exports/create-instances.js +1 -0
- package/dist-browser/@react-three/drei/exports/get-first-frame.js +1 -0
- package/dist-browser/@react-three/drei/exports/is-web-g-l2-available.js +1 -0
- package/dist-browser/@react-three/drei/exports/mesh-bounds.js +1 -0
- package/dist-browser/@react-three/drei/exports/shader-material.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-animations.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-aspect.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-b-v-h.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-bounds.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-box-projected-env.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-camera.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-context-bridge.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-cube-camera.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-cube-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-cursor.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-depth-buffer.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-detect-g-p-u.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-environment.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-f-b-o.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-f-b-x.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-face-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-face-landmarker.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-font.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-g-l-t-f.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-gizmo-context.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-helper.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-intersect.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-k-t-x2.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-keyboard-controls.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-mask.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-matcap-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-motion.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-normal-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-performance-monitor.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-progress.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-scroll.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-select.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-sprite-animator.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-sprite-loader.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-surface-sampler.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-trail-texture.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-trail.js +1 -0
- package/dist-browser/@react-three/drei/exports/use-video-texture.js +1 -0
- package/dist-browser/@react-three/drei.js +1 -0
- package/dist-browser/@react-three/fiber.js +1 -0
- package/dist-browser/@react-three/postprocessing.js +1 -0
- package/dist-browser/@spawnite/engine/abilities.js +1 -0
- package/dist-browser/@spawnite/engine/core.js +1 -0
- package/dist-browser/@spawnite/engine/dragAndDrop.js +1 -0
- package/dist-browser/@spawnite/engine/inventory.js +1 -0
- package/dist-browser/@spawnite/engine/looks/dusk.js +1 -0
- package/dist-browser/@spawnite/engine/looks/morning.js +1 -0
- package/dist-browser/@spawnite/engine/looks/night.js +1 -0
- package/dist-browser/@spawnite/engine/looks/noon.js +1 -0
- package/dist-browser/@spawnite/engine/looks/overcast.js +1 -0
- package/dist-browser/@spawnite/engine/npcs.js +1 -0
- package/dist-browser/@spawnite/engine/rounds.js +1 -0
- package/dist-browser/@spawnite/engine/three.js +1 -0
- package/dist-browser/@spawnite/engine/tracks.js +1 -0
- package/dist-browser/@spawnite/engine/weapons.js +1 -0
- package/dist-browser/@spawnite/engine.js +376 -0
- package/dist-browser/@spawnite/schema/exports/-agent-state.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-app-message-type.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-channel-handshake.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-clip-clock.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-clip-record-action.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-clip-shape.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-collision-shape.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-cover-kind.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-credential-kind.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-device-class.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-engine-save-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-favorite-kind.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-model-style.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-page-connection-status.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-page-message-type.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-performance-stats-mode.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-prop-shape.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-quality-group.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-quality-level.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-room-mode.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-save-owner-change.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-save-section.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-scatter-family.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-scatter-kind.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-shot-angle.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-voice-mode.js +1 -0
- package/dist-browser/@spawnite/schema/exports/-wiki-scope.js +1 -0
- package/dist-browser/@spawnite/schema/exports/add-asset-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/add-behaviour-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/add-dialog-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/add-entity-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/add-hud-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/add-item-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/add-map-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/add-npc-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/add-panel-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/add-scene-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/add-shader-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/agent-activity-event.js +1 -0
- package/dist-browser/@spawnite/schema/exports/agent-heartbeat-milliseconds.js +1 -0
- package/dist-browser/@spawnite/schema/exports/app-channel-version.js +1 -0
- package/dist-browser/@spawnite/schema/exports/app-credential.js +1 -0
- package/dist-browser/@spawnite/schema/exports/app-inset-edges.js +1 -0
- package/dist-browser/@spawnite/schema/exports/app-insets.js +1 -0
- package/dist-browser/@spawnite/schema/exports/app-message-versions.js +1 -0
- package/dist-browser/@spawnite/schema/exports/app-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/app-player.js +1 -0
- package/dist-browser/@spawnite/schema/exports/app-settings-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-catalog.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-category.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-declaration.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-entry.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-filters.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-key.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-kind.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-licence.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-manifest.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-source.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-style.js +1 -0
- package/dist-browser/@spawnite/schema/exports/asset-url.js +1 -0
- package/dist-browser/@spawnite/schema/exports/assets-site.js +1 -0
- package/dist-browser/@spawnite/schema/exports/brush-shapes.js +1 -0
- package/dist-browser/@spawnite/schema/exports/build-save-manifest-entry.js +1 -0
- package/dist-browser/@spawnite/schema/exports/bundle-file.js +1 -0
- package/dist-browser/@spawnite/schema/exports/bundle-limits.js +1 -0
- package/dist-browser/@spawnite/schema/exports/bundle-manifest-file.js +1 -0
- package/dist-browser/@spawnite/schema/exports/bundle-manifest.js +1 -0
- package/dist-browser/@spawnite/schema/exports/bundle-page-folder.js +1 -0
- package/dist-browser/@spawnite/schema/exports/bundle-server-folder.js +1 -0
- package/dist-browser/@spawnite/schema/exports/carried-setting-key-list.js +1 -0
- package/dist-browser/@spawnite/schema/exports/carried-setting-keys.js +1 -0
- package/dist-browser/@spawnite/schema/exports/carried-settings.js +1 -0
- package/dist-browser/@spawnite/schema/exports/catalog-row.js +1 -0
- package/dist-browser/@spawnite/schema/exports/cell-paint.js +1 -0
- package/dist-browser/@spawnite/schema/exports/channel-connect.js +1 -0
- package/dist-browser/@spawnite/schema/exports/channel-hello.js +1 -0
- package/dist-browser/@spawnite/schema/exports/chat-folder-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/chat-path.js +1 -0
- package/dist-browser/@spawnite/schema/exports/chat-post.js +1 -0
- package/dist-browser/@spawnite/schema/exports/chat-read-folder-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/check-game-slug.js +1 -0
- package/dist-browser/@spawnite/schema/exports/check-model-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/check-save-migrations.js +1 -0
- package/dist-browser/@spawnite/schema/exports/check-save-publish.js +1 -0
- package/dist-browser/@spawnite/schema/exports/check-sound-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/clip-finish.js +1 -0
- package/dist-browser/@spawnite/schema/exports/clip-meta.js +1 -0
- package/dist-browser/@spawnite/schema/exports/clip-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/clips-folder-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/clips-path.js +1 -0
- package/dist-browser/@spawnite/schema/exports/compare-save-manifest-entries.js +1 -0
- package/dist-browser/@spawnite/schema/exports/compare-shots-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/component-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/condition-seconds.js +1 -0
- package/dist-browser/@spawnite/schema/exports/connection-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/create-quality-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/create-site.js +1 -0
- package/dist-browser/@spawnite/schema/exports/create-tagged-save-value-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/credential-versions.js +1 -0
- package/dist-browser/@spawnite/schema/exports/day-hour.js +1 -0
- package/dist-browser/@spawnite/schema/exports/day-length.js +1 -0
- package/dist-browser/@spawnite/schema/exports/default-player-settings.js +1 -0
- package/dist-browser/@spawnite/schema/exports/default-room-players.js +1 -0
- package/dist-browser/@spawnite/schema/exports/default-room-send-rate.js +1 -0
- package/dist-browser/@spawnite/schema/exports/describe-entity-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/describe-map-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/describe-save-publish-refusal.js +1 -0
- package/dist-browser/@spawnite/schema/exports/dev-saves-cleared-file.js +1 -0
- package/dist-browser/@spawnite/schema/exports/dev-saves-cleared-meta-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/dev-saves-folder.js +1 -0
- package/dist-browser/@spawnite/schema/exports/dev-server-file.js +1 -0
- package/dist-browser/@spawnite/schema/exports/dev-server-prefix.js +1 -0
- package/dist-browser/@spawnite/schema/exports/devtools-favorites.js +1 -0
- package/dist-browser/@spawnite/schema/exports/devtools-presets.js +1 -0
- package/dist-browser/@spawnite/schema/exports/direct-link.js +1 -0
- package/dist-browser/@spawnite/schema/exports/edit-material-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/edit-terrain-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/engine-build-meta-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/engine-build-path.js +1 -0
- package/dist-browser/@spawnite/schema/exports/engine-label.js +1 -0
- package/dist-browser/@spawnite/schema/exports/engine-origin.js +1 -0
- package/dist-browser/@spawnite/schema/exports/engine-save-readers.js +1 -0
- package/dist-browser/@spawnite/schema/exports/engine-save-schemas.js +1 -0
- package/dist-browser/@spawnite/schema/exports/error-reports-config.js +1 -0
- package/dist-browser/@spawnite/schema/exports/error-reports-meta-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/error-reports-path.js +1 -0
- package/dist-browser/@spawnite/schema/exports/favorite-field.js +1 -0
- package/dist-browser/@spawnite/schema/exports/filter-assets.js +1 -0
- package/dist-browser/@spawnite/schema/exports/find-particle-effect-excess.js +1 -0
- package/dist-browser/@spawnite/schema/exports/find-room-settings-problems.js +1 -0
- package/dist-browser/@spawnite/schema/exports/find-terrain-cell.js +1 -0
- package/dist-browser/@spawnite/schema/exports/fingerprint-save-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/format-clip-length.js +1 -0
- package/dist-browser/@spawnite/schema/exports/format-clip-size.js +1 -0
- package/dist-browser/@spawnite/schema/exports/format-link-conditions.js +1 -0
- package/dist-browser/@spawnite/schema/exports/framed-shot-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/fullscreen-answer-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/fullscreen-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/game-materials-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/game-materials-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/game-origin.js +1 -0
- package/dist-browser/@spawnite/schema/exports/game-page-path.js +1 -0
- package/dist-browser/@spawnite/schema/exports/game-save-key.js +1 -0
- package/dist-browser/@spawnite/schema/exports/grid-map.js +1 -0
- package/dist-browser/@spawnite/schema/exports/ground-rule-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/ground-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/hud-slot.js +1 -0
- package/dist-browser/@spawnite/schema/exports/init-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/init-save.js +1 -0
- package/dist-browser/@spawnite/schema/exports/insets-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/is-additive-schema-change.js +1 -0
- package/dist-browser/@spawnite/schema/exports/is-game-id.js +1 -0
- package/dist-browser/@spawnite/schema/exports/is-game-slug.js +1 -0
- package/dist-browser/@spawnite/schema/exports/is-kept-label.js +1 -0
- package/dist-browser/@spawnite/schema/exports/is-link-direct.js +1 -0
- package/dist-browser/@spawnite/schema/exports/is-older-reader.js +1 -0
- package/dist-browser/@spawnite/schema/exports/is-particle-effect-looping.js +1 -0
- package/dist-browser/@spawnite/schema/exports/is-room-players.js +1 -0
- package/dist-browser/@spawnite/schema/exports/is-room-send-rate.js +1 -0
- package/dist-browser/@spawnite/schema/exports/item-definition.js +1 -0
- package/dist-browser/@spawnite/schema/exports/join-room-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/leave-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/left-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/list-assets-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/list-clips-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/list-templates-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/list-wiki-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/long-call-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/longest-timeout-seconds.js +1 -0
- package/dist-browser/@spawnite/schema/exports/make-model-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/map-base-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/map-path.js +1 -0
- package/dist-browser/@spawnite/schema/exports/map-point.js +1 -0
- package/dist-browser/@spawnite/schema/exports/map-post.js +1 -0
- package/dist-browser/@spawnite/schema/exports/map-prop-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/map-props-patch.js +1 -0
- package/dist-browser/@spawnite/schema/exports/map-props-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/map-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/map-sea-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/map-terrain-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/material-cover-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/material-look-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/material-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/material-sets.js +1 -0
- package/dist-browser/@spawnite/schema/exports/materials-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/max-error-report-bytes.js +1 -0
- package/dist-browser/@spawnite/schema/exports/max-save-body-bytes.js +1 -0
- package/dist-browser/@spawnite/schema/exports/max-save-body-ceiling-bytes.js +1 -0
- package/dist-browser/@spawnite/schema/exports/max-save-unpacked-bytes.js +1 -0
- package/dist-browser/@spawnite/schema/exports/max-save-unpacked-ceiling-bytes.js +1 -0
- package/dist-browser/@spawnite/schema/exports/menu-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/merge-carried-settings.js +1 -0
- package/dist-browser/@spawnite/schema/exports/merge-save-highest.js +1 -0
- package/dist-browser/@spawnite/schema/exports/model-reference-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/model-triangle-budget.js +1 -0
- package/dist-browser/@spawnite/schema/exports/most-rejoin-hold-seconds.js +1 -0
- package/dist-browser/@spawnite/schema/exports/most-room-players.js +1 -0
- package/dist-browser/@spawnite/schema/exports/name-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/new-game-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/package-room-hint.js +1 -0
- package/dist-browser/@spawnite/schema/exports/package-room.js +1 -0
- package/dist-browser/@spawnite/schema/exports/page-message-versions.js +1 -0
- package/dist-browser/@spawnite/schema/exports/page-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/page-settings-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/parse-link-conditions.js +1 -0
- package/dist-browser/@spawnite/schema/exports/particle-effect-limits.js +1 -0
- package/dist-browser/@spawnite/schema/exports/particle-sprite-max-side.js +1 -0
- package/dist-browser/@spawnite/schema/exports/place-loot-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/place-props-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/play-domain.js +1 -0
- package/dist-browser/@spawnite/schema/exports/profile-game-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/project-folder.js +1 -0
- package/dist-browser/@spawnite/schema/exports/publish-assets-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/publish-version-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/query-map-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-ai-tree-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-chat-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-clip-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-clip-start-time.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-game-id.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-game-wiki-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-package-room.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-paint-grid.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-particle-effect.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-room-mode.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-run-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-save-mark.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-save-record.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-terrain-grid.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-track-level.js +1 -0
- package/dist-browser/@spawnite/schema/exports/read-wiki-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/ready-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/record-clip-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/registry-entry.js +1 -0
- package/dist-browser/@spawnite/schema/exports/registry-file.js +1 -0
- package/dist-browser/@spawnite/schema/exports/registry-item-schema-url.js +1 -0
- package/dist-browser/@spawnite/schema/exports/registry-item.js +1 -0
- package/dist-browser/@spawnite/schema/exports/registry-schema-url.js +1 -0
- package/dist-browser/@spawnite/schema/exports/registry.js +1 -0
- package/dist-browser/@spawnite/schema/exports/resolve-room-settings.js +1 -0
- package/dist-browser/@spawnite/schema/exports/reverse-wiki-relation.js +1 -0
- package/dist-browser/@spawnite/schema/exports/room-send-rates.js +1 -0
- package/dist-browser/@spawnite/schema/exports/save-codec-mark.js +1 -0
- package/dist-browser/@spawnite/schema/exports/save-failed-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/save-fingerprint-format.js +1 -0
- package/dist-browser/@spawnite/schema/exports/save-limit-warning-share.js +1 -0
- package/dist-browser/@spawnite/schema/exports/save-load-failed-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/save-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/save-now-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/save-record-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/saved-health-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/saved-level-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/saved-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/saved-stack-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/saved-stat-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/saved-vector-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/scatter-kinds.js +1 -0
- package/dist-browser/@spawnite/schema/exports/scene-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/screenshot-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/search-wiki-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/seat-credential.js +1 -0
- package/dist-browser/@spawnite/schema/exports/seat-message.js +1 -0
- package/dist-browser/@spawnite/schema/exports/send-input-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/servers-folder-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/set-nickname-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/set-trait-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/set-visibility-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/settings-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/shot-angle-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/shot-camera-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/shot-post.js +1 -0
- package/dist-browser/@spawnite/schema/exports/shots-folder-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/shots-path.js +1 -0
- package/dist-browser/@spawnite/schema/exports/simulate-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/slug-limits.js +1 -0
- package/dist-browser/@spawnite/schema/exports/slugify-game-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/snapshot-save-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/space-point-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/spawnite-folder-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/start-playtest-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/start-save-key.js +1 -0
- package/dist-browser/@spawnite/schema/exports/steps-per-second.js +1 -0
- package/dist-browser/@spawnite/schema/exports/store-age-bands.js +1 -0
- package/dist-browser/@spawnite/schema/exports/store-page-limits.js +1 -0
- package/dist-browser/@spawnite/schema/exports/store-page.js +1 -0
- package/dist-browser/@spawnite/schema/exports/store-picture-rules.js +1 -0
- package/dist-browser/@spawnite/schema/exports/store-picture.js +1 -0
- package/dist-browser/@spawnite/schema/exports/tab-info.js +1 -0
- package/dist-browser/@spawnite/schema/exports/tab-path.js +1 -0
- package/dist-browser/@spawnite/schema/exports/tab-post.js +1 -0
- package/dist-browser/@spawnite/schema/exports/tab-token-header.js +1 -0
- package/dist-browser/@spawnite/schema/exports/tagged-save-value-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/terrain-brush.js +1 -0
- package/dist-browser/@spawnite/schema/exports/terrain-fill.js +1 -0
- package/dist-browser/@spawnite/schema/exports/terrain-map.js +1 -0
- package/dist-browser/@spawnite/schema/exports/terrain-restore.js +1 -0
- package/dist-browser/@spawnite/schema/exports/terrain-settlings.js +1 -0
- package/dist-browser/@spawnite/schema/exports/terrain-stroke-shape.js +1 -0
- package/dist-browser/@spawnite/schema/exports/terrain-stroke.js +1 -0
- package/dist-browser/@spawnite/schema/exports/terrain-tools.js +1 -0
- package/dist-browser/@spawnite/schema/exports/timeline-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/to-display-name.js +1 -0
- package/dist-browser/@spawnite/schema/exports/to-wiki-anchor.js +1 -0
- package/dist-browser/@spawnite/schema/exports/track-level-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/untouched.js +1 -0
- package/dist-browser/@spawnite/schema/exports/upload-store-page-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/upload-version-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/versions-of-save-manifest-entry.js +1 -0
- package/dist-browser/@spawnite/schema/exports/versions-of.js +1 -0
- package/dist-browser/@spawnite/schema/exports/view-schema.js +1 -0
- package/dist-browser/@spawnite/schema/exports/voice-settings.js +1 -0
- package/dist-browser/@spawnite/schema/exports/whoami-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/wiki-overview-path.js +1 -0
- package/dist-browser/@spawnite/schema/exports/wiki-page-path.js +1 -0
- package/dist-browser/@spawnite/schema/exports/wiki-page-ref.js +1 -0
- package/dist-browser/@spawnite/schema/exports/wiki-path-part.js +1 -0
- package/dist-browser/@spawnite/schema/exports/wiki-site.js +1 -0
- package/dist-browser/@spawnite/schema/exports/write-link-settings.js +1 -0
- package/dist-browser/@spawnite/schema/exports/write-paint-grid.js +1 -0
- package/dist-browser/@spawnite/schema/exports/write-save-record.js +1 -0
- package/dist-browser/@spawnite/schema/exports/write-terrain-grid.js +1 -0
- package/dist-browser/@spawnite/schema/exports/write-wiki-page-input.js +1 -0
- package/dist-browser/@spawnite/schema/exports/z.js +1 -0
- package/dist-browser/@spawnite/schema.js +1 -0
- package/dist-browser/@spawnite/ui/motion.js +1 -0
- package/dist-browser/@spawnite/ui.js +1 -0
- package/dist-browser/THIRD-PARTY-NOTICES +2949 -0
- package/dist-browser/assets/basis_transcoder-VXdx5NbI.wasm +0 -0
- package/dist-browser/assets/basis_transcoder-o4Hde_L7.js +19 -0
- package/dist-browser/assets/draco_decoder-C32yEggz.wasm +0 -0
- package/dist-browser/assets/draco_decoder-Z1_iN-Ht.wasm +0 -0
- package/dist-browser/assets/draco_decoder-fzg4nYZr.js +34 -0
- package/dist-browser/assets/draco_wasm_wrapper-DxJM36Ib.js +117 -0
- package/dist-browser/assets/draco_wasm_wrapper-fZCQGLGb.js +116 -0
- package/dist-browser/assets/rapier_wasm3d_bg-CcJdV3OS.wasm +0 -0
- package/dist-browser/chunks/-8xKUVc-.js +1 -0
- package/dist-browser/chunks/0Bppyo06.js +1 -0
- package/dist-browser/chunks/0XBYBf4e.js +1 -0
- package/dist-browser/chunks/1Pk4GW-o.js +1 -0
- package/dist-browser/chunks/1TfeBVY_.js +1 -0
- package/dist-browser/chunks/2GzBwp8F.js +1 -0
- package/dist-browser/chunks/37dBpPRN.js +1 -0
- package/dist-browser/chunks/3GDQ_l39.js +1 -0
- package/dist-browser/chunks/4r3wlCT-.js +56 -0
- package/dist-browser/chunks/51muForc.js +2 -0
- package/dist-browser/chunks/5l3Kj8OA.js +25 -0
- package/dist-browser/chunks/5v0sm-la.js +1 -0
- package/dist-browser/chunks/6RSie8Zr.js +1 -0
- package/dist-browser/chunks/6VxScSBj.js +1 -0
- package/dist-browser/chunks/6r1L_s87.js +1 -0
- package/dist-browser/chunks/703AF8IC.js +2 -0
- package/dist-browser/chunks/7kk1UrXM.js +54 -0
- package/dist-browser/chunks/7v-xFmSc.js +1 -0
- package/dist-browser/chunks/8CwB1oG9.js +1 -0
- package/dist-browser/chunks/8GjxAP3h.js +1 -0
- package/dist-browser/chunks/8Pep1QKH.js +1 -0
- package/dist-browser/chunks/8eSx71cM.js +1 -0
- package/dist-browser/chunks/8qLBuj0B.js +1 -0
- package/dist-browser/chunks/8uMFNz4F.js +48 -0
- package/dist-browser/chunks/9BUmmiDi.js +64 -0
- package/dist-browser/chunks/AEQH3xKs.js +1 -0
- package/dist-browser/chunks/B04SdTxo.js +1 -0
- package/dist-browser/chunks/B0d1OhsT.js +1 -0
- package/dist-browser/chunks/B0d94ulh.js +1 -0
- package/dist-browser/chunks/B0dIJJnS.js +104 -0
- package/dist-browser/chunks/B0sEcOA4.js +1 -0
- package/dist-browser/chunks/B17MsfBW.js +2 -0
- package/dist-browser/chunks/B1Q2EYQa.js +409 -0
- package/dist-browser/chunks/B1VGbFnq.js +1 -0
- package/dist-browser/chunks/B1ZLDwkb.js +1 -0
- package/dist-browser/chunks/B1gZ4XNT.js +1 -0
- package/dist-browser/chunks/B2P8OKx4.js +114 -0
- package/dist-browser/chunks/B2lwHY_A.js +1 -0
- package/dist-browser/chunks/B2rfjAu3.js +1 -0
- package/dist-browser/chunks/B3cpZ7qW.js +1 -0
- package/dist-browser/chunks/B3zyuqQe.js +1 -0
- package/dist-browser/chunks/B4HH7vxm.js +1 -0
- package/dist-browser/chunks/B4L72GuI.js +1 -0
- package/dist-browser/chunks/B4PXM93E.js +1 -0
- package/dist-browser/chunks/B4dyXOK4.js +2 -0
- package/dist-browser/chunks/B4f83JmW.js +1 -0
- package/dist-browser/chunks/B4rtOA11.js +1 -0
- package/dist-browser/chunks/B53Q2-Fw.js +42 -0
- package/dist-browser/chunks/B5YG9Ima.js +35 -0
- package/dist-browser/chunks/B5npwEiE.js +1 -0
- package/dist-browser/chunks/B6TyyPfn.js +2280 -0
- package/dist-browser/chunks/B6YPgX9B.js +1 -0
- package/dist-browser/chunks/B7K2KMcP.js +289 -0
- package/dist-browser/chunks/B8GCRzu-.js +1 -0
- package/dist-browser/chunks/B8f3enUO.js +42 -0
- package/dist-browser/chunks/B9dPPcmc.js +239 -0
- package/dist-browser/chunks/B9n7U8x8.js +24 -0
- package/dist-browser/chunks/BAcEoh4A.js +1 -0
- package/dist-browser/chunks/BBTy17gV.js +23 -0
- package/dist-browser/chunks/BBoWq_28.js +1 -0
- package/dist-browser/chunks/BCEkROxA.js +1 -0
- package/dist-browser/chunks/BCSDojKA.js +2 -0
- package/dist-browser/chunks/BCnGjanZ.js +1 -0
- package/dist-browser/chunks/BCy2Imwl.js +1 -0
- package/dist-browser/chunks/BD93nK4k.js +1 -0
- package/dist-browser/chunks/BDYWv4Pt.js +1 -0
- package/dist-browser/chunks/BDntRBeD.js +1 -0
- package/dist-browser/chunks/BE0sHH_C.js +1 -0
- package/dist-browser/chunks/BE7yKwOS.js +1 -0
- package/dist-browser/chunks/BFDqfrDx.js +61 -0
- package/dist-browser/chunks/BFnCgym5.js +1 -0
- package/dist-browser/chunks/BFpenkAR.js +1 -0
- package/dist-browser/chunks/BFvqTjM2.js +1 -0
- package/dist-browser/chunks/BG8QaCAl.js +1 -0
- package/dist-browser/chunks/BGsrJU1n.js +219 -0
- package/dist-browser/chunks/BGze3w87.js +1 -0
- package/dist-browser/chunks/BHYG5big.js +1 -0
- package/dist-browser/chunks/BHZuFsZC.js +26 -0
- package/dist-browser/chunks/BHePouWp.js +1 -0
- package/dist-browser/chunks/BIGc2B5x.js +106 -0
- package/dist-browser/chunks/BIgbJOA7.js +1 -0
- package/dist-browser/chunks/BIlEJ_uM.js +1 -0
- package/dist-browser/chunks/BIrJsLCp.js +1 -0
- package/dist-browser/chunks/BJCTIWwI.js +97 -0
- package/dist-browser/chunks/BJWwGEft.js +22 -0
- package/dist-browser/chunks/BJbnvkQD.js +33 -0
- package/dist-browser/chunks/BJj_P5qy.js +40 -0
- package/dist-browser/chunks/BKMmwIjP.js +1 -0
- package/dist-browser/chunks/BL2b-bga.js +1 -0
- package/dist-browser/chunks/BL3GFPpX.js +1 -0
- package/dist-browser/chunks/BL3JqalM.js +1 -0
- package/dist-browser/chunks/BLQoPgRQ.js +17 -0
- package/dist-browser/chunks/BLdTHuK5.js +38 -0
- package/dist-browser/chunks/BLxVM0Bx.js +1 -0
- package/dist-browser/chunks/BMOXLfbG.js +1 -0
- package/dist-browser/chunks/BMyF16Pb.js +1 -0
- package/dist-browser/chunks/BN0JituG.js +1 -0
- package/dist-browser/chunks/BNiTh9Zb.js +1 -0
- package/dist-browser/chunks/BNm7BDEl.js +1 -0
- package/dist-browser/chunks/BNucCtAC.js +1 -0
- package/dist-browser/chunks/BOAa4bZ5.js +80 -0
- package/dist-browser/chunks/BOIXSUZ_.js +1 -0
- package/dist-browser/chunks/BOY2osHs.js +1 -0
- package/dist-browser/chunks/BP9HooTj.js +1 -0
- package/dist-browser/chunks/BPsQn259.js +1 -0
- package/dist-browser/chunks/BPyPftW0.js +1 -0
- package/dist-browser/chunks/BQl3ddsW.js +1 -0
- package/dist-browser/chunks/BSaFdJJr.js +1 -0
- package/dist-browser/chunks/BSb5Y-Am.js +1 -0
- package/dist-browser/chunks/BSoHyLeW.js +1 -0
- package/dist-browser/chunks/BUJHJVUo.js +1 -0
- package/dist-browser/chunks/BV45MfzJ.js +206 -0
- package/dist-browser/chunks/BWLobtMG.js +1 -0
- package/dist-browser/chunks/BWX2omqC.js +1 -0
- package/dist-browser/chunks/BX-IJ6Jw.js +1 -0
- package/dist-browser/chunks/BZ67u85L.js +1 -0
- package/dist-browser/chunks/BZL3DkMo.js +1 -0
- package/dist-browser/chunks/BZkTFuN8.js +32 -0
- package/dist-browser/chunks/B_olo1g0.js +1 -0
- package/dist-browser/chunks/B_xcv6lP.js +1 -0
- package/dist-browser/chunks/BadDFgpu.js +3 -0
- package/dist-browser/chunks/BbIllpJG.js +1 -0
- package/dist-browser/chunks/Bc7uTOHd.js +1 -0
- package/dist-browser/chunks/BcH7_nnK.js +1 -0
- package/dist-browser/chunks/Bdd_iq-Z.js +1 -0
- package/dist-browser/chunks/BdkaRoRG.js +3 -0
- package/dist-browser/chunks/BeUM0nnI.js +1 -0
- package/dist-browser/chunks/BfkxY7do.js +13 -0
- package/dist-browser/chunks/BfzfmpKY.js +1 -0
- package/dist-browser/chunks/BgNGXLZH.js +1 -0
- package/dist-browser/chunks/Bgmtnmc9.js +1 -0
- package/dist-browser/chunks/BgtS-68o.js +1 -0
- package/dist-browser/chunks/BhE7ED0P.js +1 -0
- package/dist-browser/chunks/BhG-aLlJ.js +17 -0
- package/dist-browser/chunks/BhtgOF9y.js +1 -0
- package/dist-browser/chunks/BhvPhm_f.js +12 -0
- package/dist-browser/chunks/Bhvb25xz.js +1 -0
- package/dist-browser/chunks/Bi2imP0-.js +1 -0
- package/dist-browser/chunks/Bi4f74NJ.js +1 -0
- package/dist-browser/chunks/BiCMFIxo.js +1 -0
- package/dist-browser/chunks/BiSn0Dtc.js +1 -0
- package/dist-browser/chunks/BiU0PYSX.js +1 -0
- package/dist-browser/chunks/BipZQXT8.js +1 -0
- package/dist-browser/chunks/BiqCT0be.js +1 -0
- package/dist-browser/chunks/BjVVweLJ.js +1 -0
- package/dist-browser/chunks/BjeL5CV8.js +1 -0
- package/dist-browser/chunks/BjikXbkr.js +1 -0
- package/dist-browser/chunks/BkNRpWJF.js +1 -0
- package/dist-browser/chunks/BkWdvCr2.js +1 -0
- package/dist-browser/chunks/BkfYP8sS.js +1 -0
- package/dist-browser/chunks/BkoAp3nt.js +17 -0
- package/dist-browser/chunks/BkuNzUds.js +5 -0
- package/dist-browser/chunks/BlDBqfnQ.js +1 -0
- package/dist-browser/chunks/Blob4piG.js +1 -0
- package/dist-browser/chunks/Bm-NgCJv.js +290 -0
- package/dist-browser/chunks/BmwnZMHR.js +1 -0
- package/dist-browser/chunks/Bn-oguIM.js +1 -0
- package/dist-browser/chunks/Bn8JxKQd.js +947 -0
- package/dist-browser/chunks/Bn8l74kN.js +1 -0
- package/dist-browser/chunks/Bo2vvsC6.js +1 -0
- package/dist-browser/chunks/BoJD7UsQ.js +5 -0
- package/dist-browser/chunks/BoRPdfTd.js +1 -0
- package/dist-browser/chunks/BoTmVVAp.js +1 -0
- package/dist-browser/chunks/BoiOnH_p.js +1 -0
- package/dist-browser/chunks/Bpe2I0GB.js +1 -0
- package/dist-browser/chunks/BqD0o821.js +25 -0
- package/dist-browser/chunks/BqXaJXLb.js +1 -0
- package/dist-browser/chunks/BqsB_Ag5.js +1 -0
- package/dist-browser/chunks/Br-JA8rZ.js +1 -0
- package/dist-browser/chunks/Br2nhNMH.js +1 -0
- package/dist-browser/chunks/BrezGx31.js +3 -0
- package/dist-browser/chunks/BsZMTFvx.js +1 -0
- package/dist-browser/chunks/Bt2nCTua.js +51 -0
- package/dist-browser/chunks/BtM7kQaS.js +1 -0
- package/dist-browser/chunks/BtZNIAhj.js +1 -0
- package/dist-browser/chunks/Btgu8kW9.js +3 -0
- package/dist-browser/chunks/Btjboa9G.js +248 -0
- package/dist-browser/chunks/Btn1Hp7-.js +1 -0
- package/dist-browser/chunks/Bu1cOMsK.js +1 -0
- package/dist-browser/chunks/Bv2bGJo9.js +1 -0
- package/dist-browser/chunks/BvK95JoS.js +1 -0
- package/dist-browser/chunks/BvrPFs0h.js +1 -0
- package/dist-browser/chunks/BvsNGgEj.js +1 -0
- package/dist-browser/chunks/ByyEEkYz.js +1 -0
- package/dist-browser/chunks/BzAJiB5u.js +1 -0
- package/dist-browser/chunks/BzCmY2x1.js +68 -0
- package/dist-browser/chunks/BzKtjbg2.js +1 -0
- package/dist-browser/chunks/BzZ2lwsC.js +134 -0
- package/dist-browser/chunks/BzcZWs3f.js +1 -0
- package/dist-browser/chunks/BzuN4nW7.js +33 -0
- package/dist-browser/chunks/BzwHJPea.js +1 -0
- package/dist-browser/chunks/Bzy44bV2.js +4216 -0
- package/dist-browser/chunks/C-O8NhHK.js +1 -0
- package/dist-browser/chunks/C-_LmeNn.js +934 -0
- package/dist-browser/chunks/C-ztiLpW.js +1 -0
- package/dist-browser/chunks/C0Iji4Qk.js +1 -0
- package/dist-browser/chunks/C12xlM79.js +1 -0
- package/dist-browser/chunks/C1BDCorD.js +99 -0
- package/dist-browser/chunks/C2Dm6eUt.js +1 -0
- package/dist-browser/chunks/C2RePWen.js +1 -0
- package/dist-browser/chunks/C2suuPFw.js +1 -0
- package/dist-browser/chunks/C33aG9gN.js +1 -0
- package/dist-browser/chunks/C3Y15gp1.js +1 -0
- package/dist-browser/chunks/C3gvA1lh.js +1 -0
- package/dist-browser/chunks/C3pLayiC.js +143 -0
- package/dist-browser/chunks/C3wBsE11.js +1 -0
- package/dist-browser/chunks/C4E_bIDB.js +1 -0
- package/dist-browser/chunks/C4OFzvAP.js +1 -0
- package/dist-browser/chunks/C4fzyzUE.js +1 -0
- package/dist-browser/chunks/C5P0RHNI.js +1 -0
- package/dist-browser/chunks/C6XZSTSj.js +39 -0
- package/dist-browser/chunks/C784v2VA.js +1 -0
- package/dist-browser/chunks/C7CUzsYJ.js +1 -0
- package/dist-browser/chunks/C7FykdRJ.js +1 -0
- package/dist-browser/chunks/C7RSxM0z.js +1 -0
- package/dist-browser/chunks/C9J2i9In.js +2 -0
- package/dist-browser/chunks/C9Kd-Lrf.js +1 -0
- package/dist-browser/chunks/C9OKiK4z.js +15 -0
- package/dist-browser/chunks/C9bAX0wX.js +1 -0
- package/dist-browser/chunks/C9duFT9_.js +9 -0
- package/dist-browser/chunks/CA52Vkpa.js +3 -0
- package/dist-browser/chunks/CAB0sdkM.js +8 -0
- package/dist-browser/chunks/CBcRTsvX.js +1 -0
- package/dist-browser/chunks/CC8kNj4O.js +1 -0
- package/dist-browser/chunks/CC_taxfs.js +1 -0
- package/dist-browser/chunks/CCnjeop3.js +1 -0
- package/dist-browser/chunks/CD1Phcj7.js +1 -0
- package/dist-browser/chunks/CDBmfTua.js +1 -0
- package/dist-browser/chunks/CDFKagMr.js +1 -0
- package/dist-browser/chunks/CDZegpP1.js +1 -0
- package/dist-browser/chunks/CD_-ZdOx.js +1 -0
- package/dist-browser/chunks/CDmSfsbx.js +1 -0
- package/dist-browser/chunks/CDy5CkBb.js +1 -0
- package/dist-browser/chunks/CDyybrEA.js +1 -0
- package/dist-browser/chunks/CENY_jwA.js +5 -0
- package/dist-browser/chunks/CEfq3wMj.js +1 -0
- package/dist-browser/chunks/CEtY4HlI.js +1 -0
- package/dist-browser/chunks/CEtbZ-Ou.js +51 -0
- package/dist-browser/chunks/CFVbNh1J.js +1 -0
- package/dist-browser/chunks/CG5A_mHR.js +1 -0
- package/dist-browser/chunks/CGFRQ0IS.js +3 -0
- package/dist-browser/chunks/CGPPrudP.js +1 -0
- package/dist-browser/chunks/CGZdRHCz.js +1 -0
- package/dist-browser/chunks/CG_ggIC3.js +230 -0
- package/dist-browser/chunks/CHD7Siks.js +61 -0
- package/dist-browser/chunks/CHGAmNbz.js +24 -0
- package/dist-browser/chunks/CH_3weAk.js +136 -0
- package/dist-browser/chunks/CHnMaz0U.js +1 -0
- package/dist-browser/chunks/CHx28aAq.js +1 -0
- package/dist-browser/chunks/CIPEdQZg.js +1 -0
- package/dist-browser/chunks/CIU50MA1.js +1 -0
- package/dist-browser/chunks/CIXqygz5.js +42 -0
- package/dist-browser/chunks/CIz-HH07.js +1585 -0
- package/dist-browser/chunks/CJ4zQQhO.js +1 -0
- package/dist-browser/chunks/CJD9mRmQ.js +1 -0
- package/dist-browser/chunks/CJgknJ-O.js +12 -0
- package/dist-browser/chunks/CL1lltpM.js +1 -0
- package/dist-browser/chunks/CLxcu-z_.js +73 -0
- package/dist-browser/chunks/CM3pB59z.js +1 -0
- package/dist-browser/chunks/CM7fr6V2.js +1 -0
- package/dist-browser/chunks/CMCldyjy.js +1 -0
- package/dist-browser/chunks/CMhbdUh_.js +1 -0
- package/dist-browser/chunks/CMj-G0tG.js +1 -0
- package/dist-browser/chunks/CMy5JYMZ.js +1 -0
- package/dist-browser/chunks/CNS048lI.js +1 -0
- package/dist-browser/chunks/CO0SZ1hy.js +1 -0
- package/dist-browser/chunks/COnv2PBF.js +2 -0
- package/dist-browser/chunks/CP27PMpS.js +1 -0
- package/dist-browser/chunks/CQRcPihd.js +6 -0
- package/dist-browser/chunks/CRDIjF8C.js +2 -0
- package/dist-browser/chunks/CRFCYrrv.js +1 -0
- package/dist-browser/chunks/CRL527zA.js +1 -0
- package/dist-browser/chunks/CRuuK4qI.js +1 -0
- package/dist-browser/chunks/CSrliGR5.js +1 -0
- package/dist-browser/chunks/CT24MROG.js +36 -0
- package/dist-browser/chunks/CTKsfpS6.js +1 -0
- package/dist-browser/chunks/CTovL-9G.js +1 -0
- package/dist-browser/chunks/CU2_4WYp.js +1 -0
- package/dist-browser/chunks/CVn3AkL4.js +3 -0
- package/dist-browser/chunks/CW47wlpJ.js +1 -0
- package/dist-browser/chunks/CWtE2FH4.js +6 -0
- package/dist-browser/chunks/CWtqwiJb.js +1 -0
- package/dist-browser/chunks/CX2yvOMR.js +32 -0
- package/dist-browser/chunks/CXYvZiC5.js +1 -0
- package/dist-browser/chunks/CY2_o-A_.js +1 -0
- package/dist-browser/chunks/CYD5IpHG.js +1 -0
- package/dist-browser/chunks/CYFmo-2d.js +1 -0
- package/dist-browser/chunks/CYzJaZmG.js +1 -0
- package/dist-browser/chunks/CZng9q4s.js +1 -0
- package/dist-browser/chunks/C_3LSlp_.js +1 -0
- package/dist-browser/chunks/C_popvm5.js +1 -0
- package/dist-browser/chunks/Ca2qCbBO.js +227 -0
- package/dist-browser/chunks/CaayFmFc.js +68 -0
- package/dist-browser/chunks/CagC9ufD.js +6 -0
- package/dist-browser/chunks/CamHr2sm.js +9 -0
- package/dist-browser/chunks/Caw9wDgF.js +1 -0
- package/dist-browser/chunks/CbRyzWz3.js +1 -0
- package/dist-browser/chunks/CcQz6dxG.js +68 -0
- package/dist-browser/chunks/CcUHIKVc.js +1 -0
- package/dist-browser/chunks/Cd20lYkt.js +23 -0
- package/dist-browser/chunks/Cdj8C4sv.js +1 -0
- package/dist-browser/chunks/CeWzMWwP.js +1 -0
- package/dist-browser/chunks/Ceeo2sCz.js +1 -0
- package/dist-browser/chunks/CerF2aP5.js +1 -0
- package/dist-browser/chunks/Cew-kv76.js +1 -0
- package/dist-browser/chunks/Cf1F89pD.js +1 -0
- package/dist-browser/chunks/Cff8_5zr.js +1 -0
- package/dist-browser/chunks/Cgy6G_V-.js +1 -0
- package/dist-browser/chunks/ChAqhjhd.js +243 -0
- package/dist-browser/chunks/Chg_Q8x6.js +1 -0
- package/dist-browser/chunks/Chx9z6ee.js +3 -0
- package/dist-browser/chunks/Ci0DiZOM.js +1 -0
- package/dist-browser/chunks/CiD_XHlg.js +1 -0
- package/dist-browser/chunks/CjL-uP84.js +1 -0
- package/dist-browser/chunks/CjPBNVRF.js +2 -0
- package/dist-browser/chunks/CjTILWD4.js +3 -0
- package/dist-browser/chunks/CkmGh-87.js +1 -0
- package/dist-browser/chunks/ClZqxSEX.js +1 -0
- package/dist-browser/chunks/CluBrQDl.js +1 -0
- package/dist-browser/chunks/Clzbw8hC.js +104 -0
- package/dist-browser/chunks/CmEJbuVc.js +1 -0
- package/dist-browser/chunks/CmlWyQpr.js +1 -0
- package/dist-browser/chunks/Cnh5-qw-.js +10 -0
- package/dist-browser/chunks/CnwbVRym.js +1 -0
- package/dist-browser/chunks/Co55Z6b-.js +34 -0
- package/dist-browser/chunks/CoqDcyee.js +1 -0
- package/dist-browser/chunks/CorZBnkZ.js +71 -0
- package/dist-browser/chunks/CpKf07f9.js +72 -0
- package/dist-browser/chunks/CqXobSJH.js +82 -0
- package/dist-browser/chunks/CqwcKTEN.js +1 -0
- package/dist-browser/chunks/Cs23D-lk.js +18 -0
- package/dist-browser/chunks/CsT20qOq.js +1 -0
- package/dist-browser/chunks/CsTuUPUb.js +1 -0
- package/dist-browser/chunks/CtCvKs-8.js +1 -0
- package/dist-browser/chunks/CtpF73Mi.js +1 -0
- package/dist-browser/chunks/CuHid4qh.js +1 -0
- package/dist-browser/chunks/CuhwmTWw.js +2 -0
- package/dist-browser/chunks/Cv31r4NA.js +1 -0
- package/dist-browser/chunks/CvVTau-c.js +1 -0
- package/dist-browser/chunks/Cvdyeg_0.js +1 -0
- package/dist-browser/chunks/CvgsNxMb.js +1 -0
- package/dist-browser/chunks/Cvk3fWJd.js +31 -0
- package/dist-browser/chunks/Cvq_OonK.js +1 -0
- package/dist-browser/chunks/Cvzg7xRz.js +1039 -0
- package/dist-browser/chunks/CwPUhsCN.js +111 -0
- package/dist-browser/chunks/CwTYnDSQ.js +1 -0
- package/dist-browser/chunks/CwVb7sDh.js +1 -0
- package/dist-browser/chunks/CwkwVzf9.js +1 -0
- package/dist-browser/chunks/Cwsm87qt.js +1 -0
- package/dist-browser/chunks/CwtYJaZ0.js +1 -0
- package/dist-browser/chunks/CxBgnQIE.js +1 -0
- package/dist-browser/chunks/CxRCGV_D.js +1 -0
- package/dist-browser/chunks/CxW3h7EP.js +1 -0
- package/dist-browser/chunks/CxdFFqFC.js +1 -0
- package/dist-browser/chunks/Cxl6U4QM.js +1 -0
- package/dist-browser/chunks/CxqqJceE.js +262 -0
- package/dist-browser/chunks/CyUjhzls.js +1 -0
- package/dist-browser/chunks/CzHZycAX.js +1 -0
- package/dist-browser/chunks/CzVBHx3T.js +1 -0
- package/dist-browser/chunks/D-J5r5vm.js +502 -0
- package/dist-browser/chunks/D-ZRVGDk.js +1 -0
- package/dist-browser/chunks/D10MTZ8f.js +1 -0
- package/dist-browser/chunks/D1dFmEHc.js +82 -0
- package/dist-browser/chunks/D2SJBO5U.js +1 -0
- package/dist-browser/chunks/D2bDAUlP.js +1 -0
- package/dist-browser/chunks/D2qpNyTi.js +1 -0
- package/dist-browser/chunks/D3Fr6yvq.js +1 -0
- package/dist-browser/chunks/D3_eaTYS.js +1 -0
- package/dist-browser/chunks/D3lBoMMr.js +29 -0
- package/dist-browser/chunks/D5CFWMVX.js +1 -0
- package/dist-browser/chunks/D5Cj4ub7.js +1 -0
- package/dist-browser/chunks/D5EJDMZ-.js +2 -0
- package/dist-browser/chunks/D6E_gImS.js +1 -0
- package/dist-browser/chunks/D6XXX9Ue.js +1 -0
- package/dist-browser/chunks/D6fd1dZA.js +1 -0
- package/dist-browser/chunks/D852BHwA.js +40 -0
- package/dist-browser/chunks/D8inQ_yL.js +1 -0
- package/dist-browser/chunks/D9XZ_4Ga.js +145 -0
- package/dist-browser/chunks/D9dlo-Ln.js +1 -0
- package/dist-browser/chunks/DAB0WqX0.js +1 -0
- package/dist-browser/chunks/DAH2JXIW.js +1 -0
- package/dist-browser/chunks/DAPFhXVb.js +22 -0
- package/dist-browser/chunks/DAxE8pMD.js +45 -0
- package/dist-browser/chunks/DBj6QGQs.js +1 -0
- package/dist-browser/chunks/DC3L5U86.js +1 -0
- package/dist-browser/chunks/DC9vc-0L.js +1 -0
- package/dist-browser/chunks/DCJlJ3lv.js +1 -0
- package/dist-browser/chunks/DCaQLeIq.js +1 -0
- package/dist-browser/chunks/DCc-gTDg.js +1 -0
- package/dist-browser/chunks/DD2V7Wxl.js +1 -0
- package/dist-browser/chunks/DD6onItE.js +1 -0
- package/dist-browser/chunks/DDLmvpjg.js +1 -0
- package/dist-browser/chunks/DDRCiC_a.js +1 -0
- package/dist-browser/chunks/DEW70SgN.js +1 -0
- package/dist-browser/chunks/DEucxoKb.js +1 -0
- package/dist-browser/chunks/DF6Qh6eu.js +1 -0
- package/dist-browser/chunks/DFtj_qQf.js +63 -0
- package/dist-browser/chunks/DG4h2xXm.js +45 -0
- package/dist-browser/chunks/DGYxR7PN.js +26 -0
- package/dist-browser/chunks/DGlba0EV.js +1 -0
- package/dist-browser/chunks/DHOehIg0.js +30 -0
- package/dist-browser/chunks/DHiTLWtz.js +1 -0
- package/dist-browser/chunks/DIHxCXEJ.js +1 -0
- package/dist-browser/chunks/DII2y8tL.js +546 -0
- package/dist-browser/chunks/DIcTMzLD.js +31 -0
- package/dist-browser/chunks/DImXrYb5.js +1 -0
- package/dist-browser/chunks/DIvOsQJS.js +393 -0
- package/dist-browser/chunks/DJCfJlBy.js +1 -0
- package/dist-browser/chunks/DKnN7RH0.js +1 -0
- package/dist-browser/chunks/DKrOx_1M.js +1 -0
- package/dist-browser/chunks/DMcWzziy.js +1 -0
- package/dist-browser/chunks/DMk6G0lv.js +1 -0
- package/dist-browser/chunks/DMyNEYzI.js +1 -0
- package/dist-browser/chunks/DN0xP1fa.js +1 -0
- package/dist-browser/chunks/DNef-bWt.js +1 -0
- package/dist-browser/chunks/DNhTxxCh.js +1 -0
- package/dist-browser/chunks/DNoIqPE7.js +1 -0
- package/dist-browser/chunks/DNsR67l1.js +3 -0
- package/dist-browser/chunks/DOEmZHjx.js +1 -0
- package/dist-browser/chunks/DOFYt5cj.js +1 -0
- package/dist-browser/chunks/DOWMFTFl.js +38 -0
- package/dist-browser/chunks/DOYycP3M.js +1 -0
- package/dist-browser/chunks/DOidSPk5.js +1 -0
- package/dist-browser/chunks/DOvE9vCY.js +97 -0
- package/dist-browser/chunks/DOyIRes1.js +1 -0
- package/dist-browser/chunks/DPIksCnG.js +41 -0
- package/dist-browser/chunks/DPNgRv8u.js +1 -0
- package/dist-browser/chunks/DPXctdFS.js +27 -0
- package/dist-browser/chunks/DPnn0uIO.js +1 -0
- package/dist-browser/chunks/DQ0A9BJI.js +1 -0
- package/dist-browser/chunks/DQbqNpgw.js +1 -0
- package/dist-browser/chunks/DQea7zxR.js +1 -0
- package/dist-browser/chunks/DSMSQCrr.js +36 -0
- package/dist-browser/chunks/DSp9shD_.js +1 -0
- package/dist-browser/chunks/DT0rWxA4.js +1176 -0
- package/dist-browser/chunks/DTtjHrtM.js +1 -0
- package/dist-browser/chunks/DV53iZve.js +64 -0
- package/dist-browser/chunks/DVAMQgZs.js +1 -0
- package/dist-browser/chunks/DVcRBsZ0.js +69 -0
- package/dist-browser/chunks/DVrViq4W.js +1 -0
- package/dist-browser/chunks/DWe0PJKb.js +1 -0
- package/dist-browser/chunks/DWgUahRJ.js +1 -0
- package/dist-browser/chunks/DXJRs_pC.js +1 -0
- package/dist-browser/chunks/DXq97sWO.js +1 -0
- package/dist-browser/chunks/DXzwsPHQ.js +8 -0
- package/dist-browser/chunks/DYoIHzIt.js +2 -0
- package/dist-browser/chunks/DZJGj1NY.js +1 -0
- package/dist-browser/chunks/DZYUBtK-.js +10 -0
- package/dist-browser/chunks/DZmRZ_iP.js +1 -0
- package/dist-browser/chunks/D_MQ9Xc9.js +1 -0
- package/dist-browser/chunks/D_V_oqfi.js +1 -0
- package/dist-browser/chunks/D_fJrOcA.js +1 -0
- package/dist-browser/chunks/DaE8j1Mj.js +1 -0
- package/dist-browser/chunks/DaNJDW05.js +120 -0
- package/dist-browser/chunks/DaqOKjgV.js +2 -0
- package/dist-browser/chunks/DbM1VGG0.js +1 -0
- package/dist-browser/chunks/DbVolxbX.js +1 -0
- package/dist-browser/chunks/Dd3Azzh1.js +102 -0
- package/dist-browser/chunks/Dd_HZKyk.js +1 -0
- package/dist-browser/chunks/DePrIwoT.js +1 -0
- package/dist-browser/chunks/Df-3V4RI.js +1 -0
- package/dist-browser/chunks/DfPCBWZC.js +35 -0
- package/dist-browser/chunks/DfTjtDZE.js +1 -0
- package/dist-browser/chunks/Dfdpy3ar.js +1 -0
- package/dist-browser/chunks/DhQi6uM8.js +1 -0
- package/dist-browser/chunks/Dhq0zrZC.js +131 -0
- package/dist-browser/chunks/DhrQ_H4H.js +1 -0
- package/dist-browser/chunks/Di27GzYt.js +1 -0
- package/dist-browser/chunks/Di8-zyqt.js +1 -0
- package/dist-browser/chunks/DifZdnzu.js +1 -0
- package/dist-browser/chunks/DikvOXI-.js +1 -0
- package/dist-browser/chunks/Dj3lr7h3.js +33 -0
- package/dist-browser/chunks/Dj8ovMlo.js +1 -0
- package/dist-browser/chunks/DjcMDPrm.js +67 -0
- package/dist-browser/chunks/DkVVho_1.js +1 -0
- package/dist-browser/chunks/Dkh1AfX5.js +1 -0
- package/dist-browser/chunks/DkwGHqUD.js +1 -0
- package/dist-browser/chunks/Dl96d5U7.js +1 -0
- package/dist-browser/chunks/DlW29B4u.js +3 -0
- package/dist-browser/chunks/DmSNe3jl.js +387 -0
- package/dist-browser/chunks/DmxSxKXn.js +1 -0
- package/dist-browser/chunks/DnFdLC2j.js +1 -0
- package/dist-browser/chunks/DnUyDgmE.js +1 -0
- package/dist-browser/chunks/DnvK0nWc.js +1 -0
- package/dist-browser/chunks/DoEd4p-l.js +1 -0
- package/dist-browser/chunks/DoX7pGYd.js +140 -0
- package/dist-browser/chunks/Dp6fzsZG.js +1 -0
- package/dist-browser/chunks/DpM23pTz.js +33 -0
- package/dist-browser/chunks/DpZZtTTL.js +2 -0
- package/dist-browser/chunks/DqAbaJTn.js +1 -0
- package/dist-browser/chunks/DqMSA0q-.js +1 -0
- package/dist-browser/chunks/DqNrCZSo.js +1 -0
- package/dist-browser/chunks/DqP3aSvp.js +43 -0
- package/dist-browser/chunks/Dqi6K18W.js +1 -0
- package/dist-browser/chunks/DqqKpYoS.js +2 -0
- package/dist-browser/chunks/Dqqmos-r.js +1 -0
- package/dist-browser/chunks/Dr26QZ_C.js +1 -0
- package/dist-browser/chunks/DrRp_OBG.js +1 -0
- package/dist-browser/chunks/Ds0gQyON.js +1 -0
- package/dist-browser/chunks/DsNI9SjT.js +1 -0
- package/dist-browser/chunks/DskxWO57.js +1 -0
- package/dist-browser/chunks/DspI2fym.js +33 -0
- package/dist-browser/chunks/DtbRpC-a.js +2 -0
- package/dist-browser/chunks/Dtc9u0hV.js +1 -0
- package/dist-browser/chunks/DtdxxwYW.js +1 -0
- package/dist-browser/chunks/Du2r_IDC.js +1 -0
- package/dist-browser/chunks/DuiL5B5s.js +1 -0
- package/dist-browser/chunks/DvMRww-v.js +1 -0
- package/dist-browser/chunks/Dvzw_jou.js +1 -0
- package/dist-browser/chunks/DwsXVYGF.js +1 -0
- package/dist-browser/chunks/DxVZve2V.js +89 -0
- package/dist-browser/chunks/Dy4Ev-pT.js +1 -0
- package/dist-browser/chunks/DyGuOmo0.js +1 -0
- package/dist-browser/chunks/DyXA-iwx.js +1 -0
- package/dist-browser/chunks/Dypqlsev.js +1 -0
- package/dist-browser/chunks/Dyqt3CuN.js +1 -0
- package/dist-browser/chunks/DyxvzuFy.js +284 -0
- package/dist-browser/chunks/DzMSiy_7.js +1 -0
- package/dist-browser/chunks/DzaY1F1G.js +1 -0
- package/dist-browser/chunks/EtRHumNJ.js +1 -0
- package/dist-browser/chunks/FASUCRk-.js +3 -0
- package/dist-browser/chunks/FeUl7sn8.js +1 -0
- package/dist-browser/chunks/FjuaFAN8.js +25 -0
- package/dist-browser/chunks/FsV9kMlK.js +1 -0
- package/dist-browser/chunks/GB4zXBMC.js +1 -0
- package/dist-browser/chunks/Guirowam.js +8 -0
- package/dist-browser/chunks/HJHNBZzR.js +1 -0
- package/dist-browser/chunks/HOXwa5Zi.js +1 -0
- package/dist-browser/chunks/HhGGA2q1.js +1 -0
- package/dist-browser/chunks/HjLsj9Wb.js +1 -0
- package/dist-browser/chunks/ILniMPMQ.js +1 -0
- package/dist-browser/chunks/IPgW5q-o.js +1 -0
- package/dist-browser/chunks/IRJFdyYz.js +1 -0
- package/dist-browser/chunks/J1EyHJSp.js +1 -0
- package/dist-browser/chunks/JtVcQQeX.js +5 -0
- package/dist-browser/chunks/KYZpoAyE.js +1 -0
- package/dist-browser/chunks/KjHCb3-W.js +2 -0
- package/dist-browser/chunks/Kp8JypHd.js +441 -0
- package/dist-browser/chunks/Ku6I7UKh.js +1 -0
- package/dist-browser/chunks/KzprlngN.js +1 -0
- package/dist-browser/chunks/L5CwTQJI.js +4 -0
- package/dist-browser/chunks/L9tCceA2.js +150 -0
- package/dist-browser/chunks/L_tB79W_.js +1 -0
- package/dist-browser/chunks/MDiJyUbk.js +1 -0
- package/dist-browser/chunks/MaXgxQlM.js +1 -0
- package/dist-browser/chunks/N5x7ZUws.js +1 -0
- package/dist-browser/chunks/NZYk81nU.js +1 -0
- package/dist-browser/chunks/Np7O_rbA.js +1 -0
- package/dist-browser/chunks/Oo8Rc01u.js +1 -0
- package/dist-browser/chunks/OtECxeEN.js +9 -0
- package/dist-browser/chunks/OtOkABqS.js +158 -0
- package/dist-browser/chunks/Oyc0qEPK.js +1 -0
- package/dist-browser/chunks/PDPf8POY.js +1 -0
- package/dist-browser/chunks/QRJE7tia.js +1 -0
- package/dist-browser/chunks/Q_sagimg.js +1 -0
- package/dist-browser/chunks/QgFqrot_.js +1 -0
- package/dist-browser/chunks/QpPH2K9r.js +1 -0
- package/dist-browser/chunks/R8vFmq4f.js +1 -0
- package/dist-browser/chunks/RxUw8kPH.js +1 -0
- package/dist-browser/chunks/SO6iJj34.js +1 -0
- package/dist-browser/chunks/SWr9_u-k.js +13 -0
- package/dist-browser/chunks/TQJJL2UK.js +27 -0
- package/dist-browser/chunks/UE6Xi3ol.js +1 -0
- package/dist-browser/chunks/VGXLiJ0S.js +1 -0
- package/dist-browser/chunks/VMH7wDAk.js +1 -0
- package/dist-browser/chunks/VwXcqbG4.js +23 -0
- package/dist-browser/chunks/Wmd1pmNu.js +1 -0
- package/dist-browser/chunks/XTdr3vkK.js +1 -0
- package/dist-browser/chunks/XaLSS-X1.js +23 -0
- package/dist-browser/chunks/XhPbWY7N.js +1 -0
- package/dist-browser/chunks/Y4nknrnT.js +1 -0
- package/dist-browser/chunks/Y9xF8jFn.js +23 -0
- package/dist-browser/chunks/_-SUJuni.js +1 -0
- package/dist-browser/chunks/_M7-qabf.js +101 -0
- package/dist-browser/chunks/_qsNVwXW.js +1 -0
- package/dist-browser/chunks/_vvwCLWQ.js +1 -0
- package/dist-browser/chunks/b6V8XMYY.js +1 -0
- package/dist-browser/chunks/bA3FB4mi.js +3 -0
- package/dist-browser/chunks/bAf7cF9y.js +1 -0
- package/dist-browser/chunks/bhrkTdEx.js +538 -0
- package/dist-browser/chunks/dFGbvMHe.js +1 -0
- package/dist-browser/chunks/dOIX3hJ7.js +1 -0
- package/dist-browser/chunks/eUYPiZ2p.js +1 -0
- package/dist-browser/chunks/eUiHGfWU.js +1 -0
- package/dist-browser/chunks/f6_vnw-E.js +1 -0
- package/dist-browser/chunks/fE2ZfJiX.js +1 -0
- package/dist-browser/chunks/gZQtAM7h.js +2 -0
- package/dist-browser/chunks/h8XD1xl-.js +1 -0
- package/dist-browser/chunks/hEdm-zUW.js +1 -0
- package/dist-browser/chunks/hWCYme74.js +1 -0
- package/dist-browser/chunks/hfB064S0.js +1 -0
- package/dist-browser/chunks/hlEBxUea.js +1 -0
- package/dist-browser/chunks/j5sGo2Pt.js +1 -0
- package/dist-browser/chunks/kG0ku-oF.js +1 -0
- package/dist-browser/chunks/kLNROLfT.js +1 -0
- package/dist-browser/chunks/kggDnku6.js +1 -0
- package/dist-browser/chunks/klRtNUrN.js +1 -0
- package/dist-browser/chunks/lOD1Gn8c.js +1 -0
- package/dist-browser/chunks/lrh33Ko2.js +1 -0
- package/dist-browser/chunks/mB6FoGFb.js +1 -0
- package/dist-browser/chunks/msmucz6Z.js +1 -0
- package/dist-browser/chunks/nEtJtbDE.js +1 -0
- package/dist-browser/chunks/nvwS1LmH.js +1 -0
- package/dist-browser/chunks/oqmnhzmi.js +2 -0
- package/dist-browser/chunks/pICTBHHN.js +1 -0
- package/dist-browser/chunks/pU4H1b3r.js +43 -0
- package/dist-browser/chunks/qBpAlJSP.js +1 -0
- package/dist-browser/chunks/qCjqID6v.js +1 -0
- package/dist-browser/chunks/r-cfH8A5.js +1 -0
- package/dist-browser/chunks/rgDalb_G.js +1 -0
- package/dist-browser/chunks/rolldown-runtime-hePW80VL.js +1 -0
- package/dist-browser/chunks/sdmDudQj.js +1 -0
- package/dist-browser/chunks/shRf5cdU.js +1 -0
- package/dist-browser/chunks/tvcsfh86.js +1 -0
- package/dist-browser/chunks/tz7IArSg.js +1 -0
- package/dist-browser/chunks/u--BrnjZ.js +1 -0
- package/dist-browser/chunks/uBIymjUX.js +1 -0
- package/dist-browser/chunks/uHO_HSNA.js +1 -0
- package/dist-browser/chunks/uZz_bF7-.js +1 -0
- package/dist-browser/chunks/uc0Y9KUA.js +1 -0
- package/dist-browser/chunks/ud6upqGO.js +2 -0
- package/dist-browser/chunks/udTuD3NU.js +1 -0
- package/dist-browser/chunks/ul0Kb67V.js +38 -0
- package/dist-browser/chunks/uq1wJ3hU.js +322 -0
- package/dist-browser/chunks/vA_owFWw.js +1 -0
- package/dist-browser/chunks/vgYSnL0k.js +1 -0
- package/dist-browser/chunks/vjQO9b4G.js +1 -0
- package/dist-browser/chunks/vm1kntVK.js +18 -0
- package/dist-browser/chunks/vnMr9U1p.js +1 -0
- package/dist-browser/chunks/vyik5ymL.js +1 -0
- package/dist-browser/chunks/w2RB3fs9.js +1 -0
- package/dist-browser/chunks/wmdxOiEL.js +1 -0
- package/dist-browser/chunks/xtpWQ17d.js +27 -0
- package/dist-browser/chunks/yRMgu4ay.js +3 -0
- package/dist-browser/chunks/yYrq3lUc.js +42 -0
- package/dist-browser/chunks/yieoIIce.js +1 -0
- package/dist-browser/chunks/yzr1keSX.js +38 -0
- package/dist-browser/chunks/z94mqM9o.js +1 -0
- package/dist-browser/chunks/zSWKwMId.js +1 -0
- package/dist-browser/importmap.json +1761 -0
- package/dist-browser/koota/react.js +1 -0
- package/dist-browser/koota.js +1 -0
- package/dist-browser/postprocessing.js +1 -0
- package/dist-browser/react/jsx-runtime.js +1 -0
- package/dist-browser/react-dom/client.js +1 -0
- package/dist-browser/react-dom.js +1 -0
- package/dist-browser/react.js +1 -0
- package/dist-browser/release.json +11655 -0
- package/dist-browser/three/addons/Addons.js +1 -0
- package/dist-browser/three/addons/animation/AnimationClipCreator.js +1 -0
- package/dist-browser/three/addons/animation/CCDIKSolver.js +1 -0
- package/dist-browser/three/addons/capabilities/WebGL.js +1 -0
- package/dist-browser/three/addons/capabilities/WebGPU.js +1 -0
- package/dist-browser/three/addons/controls/ArcballControls.js +1 -0
- package/dist-browser/three/addons/controls/DragControls.js +1 -0
- package/dist-browser/three/addons/controls/FirstPersonControls.js +1 -0
- package/dist-browser/three/addons/controls/FlyControls.js +1 -0
- package/dist-browser/three/addons/controls/MapControls.js +1 -0
- package/dist-browser/three/addons/controls/OrbitControls.js +1 -0
- package/dist-browser/three/addons/controls/PointerLockControls.js +1 -0
- package/dist-browser/three/addons/controls/TrackballControls.js +1 -0
- package/dist-browser/three/addons/controls/TransformControls.js +1 -0
- package/dist-browser/three/addons/csm/CSM.js +1 -0
- package/dist-browser/three/addons/csm/CSMFrustum.js +1 -0
- package/dist-browser/three/addons/csm/CSMHelper.js +1 -0
- package/dist-browser/three/addons/csm/CSMShader.js +1 -0
- package/dist-browser/three/addons/csm/CSMShadowNode.js +1 -0
- package/dist-browser/three/addons/curves/CurveExtras.js +1 -0
- package/dist-browser/three/addons/curves/NURBSCurve.js +1 -0
- package/dist-browser/three/addons/curves/NURBSSurface.js +1 -0
- package/dist-browser/three/addons/curves/NURBSUtils.js +1 -0
- package/dist-browser/three/addons/curves/NURBSVolume.js +1 -0
- package/dist-browser/three/addons/effects/AnaglyphEffect.js +1 -0
- package/dist-browser/three/addons/effects/AsciiEffect.js +1 -0
- package/dist-browser/three/addons/effects/OutlineEffect.js +1 -0
- package/dist-browser/three/addons/effects/ParallaxBarrierEffect.js +1 -0
- package/dist-browser/three/addons/effects/StereoEffect.js +1 -0
- package/dist-browser/three/addons/environments/ColorEnvironment.js +1 -0
- package/dist-browser/three/addons/environments/DebugEnvironment.js +1 -0
- package/dist-browser/three/addons/environments/RoomEnvironment.js +1 -0
- package/dist-browser/three/addons/exporters/DRACOExporter.js +1 -0
- package/dist-browser/three/addons/exporters/EXRExporter.js +1 -0
- package/dist-browser/three/addons/exporters/GLTFExporter.js +1 -0
- package/dist-browser/three/addons/exporters/KTX2Exporter.js +1 -0
- package/dist-browser/three/addons/exporters/OBJExporter.js +1 -0
- package/dist-browser/three/addons/exporters/PLYExporter.js +1 -0
- package/dist-browser/three/addons/exporters/STLExporter.js +1 -0
- package/dist-browser/three/addons/exporters/USDZExporter.js +1 -0
- package/dist-browser/three/addons/generators/CityGenerator.js +1 -0
- package/dist-browser/three/addons/generators/ForestGenerator.js +1 -0
- package/dist-browser/three/addons/generators/TerrainGenerator.js +1 -0
- package/dist-browser/three/addons/generators/TreeGenerator.js +1 -0
- package/dist-browser/three/addons/generators/city/BenchGenerator.js +1 -0
- package/dist-browser/three/addons/generators/city/CarGenerator.js +1 -0
- package/dist-browser/three/addons/generators/city/CityGeneratorUtils.js +1 -0
- package/dist-browser/three/addons/generators/city/HydrantGenerator.js +1 -0
- package/dist-browser/three/addons/generators/city/InstancedMeshGenerator.js +1 -0
- package/dist-browser/three/addons/generators/city/PersonGenerator.js +1 -0
- package/dist-browser/three/addons/generators/city/SidewalkGenerator.js +1 -0
- package/dist-browser/three/addons/generators/city/SkyscraperGenerator.js +1 -0
- package/dist-browser/three/addons/generators/city/StreetTreeGenerator.js +1 -0
- package/dist-browser/three/addons/generators/city/StreetlightGenerator.js +1 -0
- package/dist-browser/three/addons/generators/city/TrafficlightGenerator.js +1 -0
- package/dist-browser/three/addons/generators/city/TrashcanGenerator.js +1 -0
- package/dist-browser/three/addons/geometries/BoxLineGeometry.js +1 -0
- package/dist-browser/three/addons/geometries/ConvexGeometry.js +1 -0
- package/dist-browser/three/addons/geometries/DecalGeometry.js +1 -0
- package/dist-browser/three/addons/geometries/LoftGeometry.js +1 -0
- package/dist-browser/three/addons/geometries/ParametricFunctions.js +1 -0
- package/dist-browser/three/addons/geometries/ParametricGeometry.js +1 -0
- package/dist-browser/three/addons/geometries/RoundedBoxGeometry.js +1 -0
- package/dist-browser/three/addons/geometries/TeapotGeometry.js +1 -0
- package/dist-browser/three/addons/geometries/TextGeometry.js +1 -0
- package/dist-browser/three/addons/gpgpu/BitonicSort.js +1 -0
- package/dist-browser/three/addons/gpgpu/CountingSort.js +1 -0
- package/dist-browser/three/addons/helpers/AnimationPathHelper.js +1 -0
- package/dist-browser/three/addons/helpers/LightProbeGridHelper.js +1 -0
- package/dist-browser/three/addons/helpers/LightProbeGridHelperWebGL.js +80 -0
- package/dist-browser/three/addons/helpers/LightProbeHelper.js +1 -0
- package/dist-browser/three/addons/helpers/LightProbeHelperGPU.js +1 -0
- package/dist-browser/three/addons/helpers/OctreeHelper.js +1 -0
- package/dist-browser/three/addons/helpers/PositionalAudioHelper.js +1 -0
- package/dist-browser/three/addons/helpers/RapierHelper.js +1 -0
- package/dist-browser/three/addons/helpers/RectAreaLightHelper.js +1 -0
- package/dist-browser/three/addons/helpers/TextureHelper.js +1 -0
- package/dist-browser/three/addons/helpers/TextureHelperGPU.js +1 -0
- package/dist-browser/three/addons/helpers/VertexNormalsHelper.js +1 -0
- package/dist-browser/three/addons/helpers/VertexTangentsHelper.js +1 -0
- package/dist-browser/three/addons/helpers/ViewHelper.js +1 -0
- package/dist-browser/three/addons/inspector/Extension.js +1 -0
- package/dist-browser/three/addons/inspector/Inspector.js +1 -0
- package/dist-browser/three/addons/inspector/RendererInspector.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/ColorGrading.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/ColorWheel.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/CurveEditor.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/LUT3DStyle.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/LUTMath.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/BrightnessModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/ColorWheelModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/ContrastModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/CurvesModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/ExposureHueModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/ExposureModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/HueModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/ImportedCubeModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/Module.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/OutputModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/RendererModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/SatVibranceModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/SaturationModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/VibranceModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/tsl-graph/TSLGraphEditor.js +1 -0
- package/dist-browser/three/addons/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
- package/dist-browser/three/addons/inspector/tabs/Console.js +1 -0
- package/dist-browser/three/addons/inspector/tabs/Memory.js +1 -0
- package/dist-browser/three/addons/inspector/tabs/Parameters.js +1 -0
- package/dist-browser/three/addons/inspector/tabs/Performance.js +1 -0
- package/dist-browser/three/addons/inspector/tabs/Settings.js +1 -0
- package/dist-browser/three/addons/inspector/tabs/Timeline.js +1 -0
- package/dist-browser/three/addons/inspector/tabs/Viewer.js +1 -0
- package/dist-browser/three/addons/inspector/ui/Graph.js +1 -0
- package/dist-browser/three/addons/inspector/ui/Item.js +1 -0
- package/dist-browser/three/addons/inspector/ui/List.js +1 -0
- package/dist-browser/three/addons/inspector/ui/Profiler.js +1 -0
- package/dist-browser/three/addons/inspector/ui/Style.js +1 -0
- package/dist-browser/three/addons/inspector/ui/Tab.js +1 -0
- package/dist-browser/three/addons/inspector/ui/Values.js +1 -0
- package/dist-browser/three/addons/inspector/ui/utils.js +1 -0
- package/dist-browser/three/addons/interaction/InteractionManager.js +1 -0
- package/dist-browser/three/addons/interactive/HTMLMesh.js +1 -0
- package/dist-browser/three/addons/interactive/InteractiveGroup.js +1 -0
- package/dist-browser/three/addons/interactive/SelectionBox.js +1 -0
- package/dist-browser/three/addons/interactive/SelectionHelper.js +1 -0
- package/dist-browser/three/addons/libs/chevrotain.module.min.js +1 -0
- package/dist-browser/three/addons/libs/demuxer_mp4.js +1 -0
- package/dist-browser/three/addons/libs/fflate.module.js +1 -0
- package/dist-browser/three/addons/libs/ktx-parse.module.js +1 -0
- package/dist-browser/three/addons/libs/lil-gui.module.min.js +4 -0
- package/dist-browser/three/addons/libs/meshopt_clusterizer.module.js +1 -0
- package/dist-browser/three/addons/libs/meshopt_decoder.module.js +1 -0
- package/dist-browser/three/addons/libs/meshopt_simplifier.module.js +1 -0
- package/dist-browser/three/addons/libs/mikktspace.module.js +1 -0
- package/dist-browser/three/addons/libs/motion-controllers.module.js +1 -0
- package/dist-browser/three/addons/libs/potpack.module.js +1 -0
- package/dist-browser/three/addons/libs/stats.module.js +1 -0
- package/dist-browser/three/addons/libs/surfaceNet.js +1 -0
- package/dist-browser/three/addons/libs/tween.module.js +1 -0
- package/dist-browser/three/addons/libs/utif.module.js +1 -0
- package/dist-browser/three/addons/libs/zstddec.module.js +1 -0
- package/dist-browser/three/addons/lighting/ClusteredLighting.js +1 -0
- package/dist-browser/three/addons/lighting/DynamicLighting.js +1 -0
- package/dist-browser/three/addons/lighting/LightProbeGrid.js +1 -0
- package/dist-browser/three/addons/lighting/LightProbeGridUtils.js +1 -0
- package/dist-browser/three/addons/lighting/LightProbeGridWebGL.js +135 -0
- package/dist-browser/three/addons/lighting/vxgi/VXGIConeTracer.js +1 -0
- package/dist-browser/three/addons/lighting/vxgi/VXGINode.js +1 -0
- package/dist-browser/three/addons/lighting/vxgi/VXGISceneCollector.js +1 -0
- package/dist-browser/three/addons/lighting/vxgi/VXGIVolume.js +1 -0
- package/dist-browser/three/addons/lights/LightProbeGenerator.js +1 -0
- package/dist-browser/three/addons/lights/RectAreaLightTexturesLib.js +1 -0
- package/dist-browser/three/addons/lights/RectAreaLightUniformsLib.js +1 -0
- package/dist-browser/three/addons/lights/SunLight.js +1 -0
- package/dist-browser/three/addons/lights/SunLightNode.js +1 -0
- package/dist-browser/three/addons/lights/SunLightShadow.js +1 -0
- package/dist-browser/three/addons/lights/SunShadowNode.js +1 -0
- package/dist-browser/three/addons/lines/Line2.js +1 -0
- package/dist-browser/three/addons/lines/LineGeometry.js +1 -0
- package/dist-browser/three/addons/lines/LineMaterial.js +1 -0
- package/dist-browser/three/addons/lines/LineSegments2.js +1 -0
- package/dist-browser/three/addons/lines/LineSegmentsGeometry.js +1 -0
- package/dist-browser/three/addons/lines/Wireframe.js +1 -0
- package/dist-browser/three/addons/lines/WireframeGeometry2.js +1 -0
- package/dist-browser/three/addons/lines/webgpu/Line2.js +1 -0
- package/dist-browser/three/addons/lines/webgpu/LineSegments2.js +1 -0
- package/dist-browser/three/addons/lines/webgpu/Wireframe.js +1 -0
- package/dist-browser/three/addons/loaders/3DMLoader.js +1 -0
- package/dist-browser/three/addons/loaders/3MFLoader.js +1 -0
- package/dist-browser/three/addons/loaders/AMFLoader.js +1 -0
- package/dist-browser/three/addons/loaders/BVHLoader.js +1 -0
- package/dist-browser/three/addons/loaders/ColladaLoader.js +1 -0
- package/dist-browser/three/addons/loaders/DDSLoader.js +1 -0
- package/dist-browser/three/addons/loaders/DRACOLoader.js +1 -0
- package/dist-browser/three/addons/loaders/EXRLoader.js +1 -0
- package/dist-browser/three/addons/loaders/FBXLoader.js +1 -0
- package/dist-browser/three/addons/loaders/FontLoader.js +1 -0
- package/dist-browser/three/addons/loaders/GCodeLoader.js +1 -0
- package/dist-browser/three/addons/loaders/GLTFGaussianSplatLoaderExtension.js +1 -0
- package/dist-browser/three/addons/loaders/GLTFLoader.js +1 -0
- package/dist-browser/three/addons/loaders/GaussianSplatPLYLoader.js +1 -0
- package/dist-browser/three/addons/loaders/HDRCubeTextureLoader.js +1 -0
- package/dist-browser/three/addons/loaders/HDRLoader.js +1 -0
- package/dist-browser/three/addons/loaders/IESLoader.js +1 -0
- package/dist-browser/three/addons/loaders/KMZLoader.js +1 -0
- package/dist-browser/three/addons/loaders/KSPLATLoader.js +1 -0
- package/dist-browser/three/addons/loaders/KTX2Loader.js +1 -0
- package/dist-browser/three/addons/loaders/KTXLoader.js +1 -0
- package/dist-browser/three/addons/loaders/LDrawLoader.js +1 -0
- package/dist-browser/three/addons/loaders/LUT3dlLoader.js +1 -0
- package/dist-browser/three/addons/loaders/LUTCubeLoader.js +1 -0
- package/dist-browser/three/addons/loaders/LUTImageLoader.js +1 -0
- package/dist-browser/three/addons/loaders/LWOLoader.js +1 -0
- package/dist-browser/three/addons/loaders/MD2Loader.js +1 -0
- package/dist-browser/three/addons/loaders/MDDLoader.js +1 -0
- package/dist-browser/three/addons/loaders/MTLLoader.js +1 -0
- package/dist-browser/three/addons/loaders/MaterialXLoader.js +1 -0
- package/dist-browser/three/addons/loaders/NRRDLoader.js +1 -0
- package/dist-browser/three/addons/loaders/OBJLoader.js +1 -0
- package/dist-browser/three/addons/loaders/PCDLoader.js +1 -0
- package/dist-browser/three/addons/loaders/PDBLoader.js +1 -0
- package/dist-browser/three/addons/loaders/PLYLoader.js +1 -0
- package/dist-browser/three/addons/loaders/PVRLoader.js +1 -0
- package/dist-browser/three/addons/loaders/RGBELoader.js +1 -0
- package/dist-browser/three/addons/loaders/SPLATLoader.js +1 -0
- package/dist-browser/three/addons/loaders/SPZLoader.js +1 -0
- package/dist-browser/three/addons/loaders/STLLoader.js +1 -0
- package/dist-browser/three/addons/loaders/SVGLoader.js +1 -0
- package/dist-browser/three/addons/loaders/TDSLoader.js +1 -0
- package/dist-browser/three/addons/loaders/TGALoader.js +1 -0
- package/dist-browser/three/addons/loaders/TIFFLoader.js +1 -0
- package/dist-browser/three/addons/loaders/TTFLoader.js +1 -0
- package/dist-browser/three/addons/loaders/USDLoader.js +1 -0
- package/dist-browser/three/addons/loaders/USDZLoader.js +1 -0
- package/dist-browser/three/addons/loaders/UltraHDRLoader.js +1 -0
- package/dist-browser/three/addons/loaders/VOXLoader.js +1 -0
- package/dist-browser/three/addons/loaders/VRMLLoader.js +1 -0
- package/dist-browser/three/addons/loaders/VTKLoader.js +1 -0
- package/dist-browser/three/addons/loaders/XYZLoader.js +1 -0
- package/dist-browser/three/addons/loaders/collada/ColladaComposer.js +1 -0
- package/dist-browser/three/addons/loaders/collada/ColladaParser.js +1 -0
- package/dist-browser/three/addons/loaders/lwo/IFFParser.js +1 -0
- package/dist-browser/three/addons/loaders/lwo/LWO2Parser.js +1 -0
- package/dist-browser/three/addons/loaders/lwo/LWO3Parser.js +1 -0
- package/dist-browser/three/addons/loaders/materialx/MaterialXArchive.js +1 -0
- package/dist-browser/three/addons/loaders/materialx/MaterialXDocument.js +1 -0
- package/dist-browser/three/addons/loaders/materialx/MaterialXHextile.js +1 -0
- package/dist-browser/three/addons/loaders/materialx/MaterialXInterfaceValidation.js +1 -0
- package/dist-browser/three/addons/loaders/materialx/MaterialXLog.js +1 -0
- package/dist-browser/three/addons/loaders/materialx/MaterialXNodeInterfaceRegistry.js +1 -0
- package/dist-browser/three/addons/loaders/materialx/MaterialXNodeLibrary.js +1 -0
- package/dist-browser/three/addons/loaders/materialx/MaterialXSurfaceMappings.js +1 -0
- package/dist-browser/three/addons/loaders/materialx/MaterialXUtils.js +1 -0
- package/dist-browser/three/addons/loaders/materialx/compile/MaterialXCompileRegistry.js +1 -0
- package/dist-browser/three/addons/loaders/materialx/parse/MaterialXParser.js +1 -0
- package/dist-browser/three/addons/loaders/usd/USDAParser.js +1 -0
- package/dist-browser/three/addons/loaders/usd/USDCParser.js +1 -0
- package/dist-browser/three/addons/loaders/usd/USDComposer.js +1 -0
- package/dist-browser/three/addons/materials/LDrawConditionalLineMaterial.js +1 -0
- package/dist-browser/three/addons/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/dist-browser/three/addons/materials/WoodNodeMaterial.js +42 -0
- package/dist-browser/three/addons/math/Capsule.js +1 -0
- package/dist-browser/three/addons/math/ColorConverter.js +1 -0
- package/dist-browser/three/addons/math/ColorSpaces.js +1 -0
- package/dist-browser/three/addons/math/ConvexHull.js +1 -0
- package/dist-browser/three/addons/math/ImprovedNoise.js +1 -0
- package/dist-browser/three/addons/math/Lut.js +1 -0
- package/dist-browser/three/addons/math/MeshSurfaceSampler.js +1 -0
- package/dist-browser/three/addons/math/OBB.js +1 -0
- package/dist-browser/three/addons/math/Octree.js +1 -0
- package/dist-browser/three/addons/math/SimplexNoise.js +1 -0
- package/dist-browser/three/addons/misc/ConvexObjectBreaker.js +1 -0
- package/dist-browser/three/addons/misc/GPUComputationRenderer.js +1 -0
- package/dist-browser/three/addons/misc/Gyroscope.js +1 -0
- package/dist-browser/three/addons/misc/MD2Character.js +1 -0
- package/dist-browser/three/addons/misc/MD2CharacterComplex.js +1 -0
- package/dist-browser/three/addons/misc/MorphAnimMesh.js +1 -0
- package/dist-browser/three/addons/misc/MorphBlendMesh.js +1 -0
- package/dist-browser/three/addons/misc/ProgressiveLightMap.js +1 -0
- package/dist-browser/three/addons/misc/ProgressiveLightMapGPU.js +1 -0
- package/dist-browser/three/addons/misc/RollerCoaster.js +1 -0
- package/dist-browser/three/addons/misc/Sculptor.js +1 -0
- package/dist-browser/three/addons/misc/SculptorMesh.js +1 -0
- package/dist-browser/three/addons/misc/SculptorTools.js +1 -0
- package/dist-browser/three/addons/misc/SculptorUtils.js +1 -0
- package/dist-browser/three/addons/misc/TileCreasedNormalsPlugin.js +1 -0
- package/dist-browser/three/addons/misc/TubePainter.js +1 -0
- package/dist-browser/three/addons/misc/Volume.js +1 -0
- package/dist-browser/three/addons/misc/VolumeSlice.js +1 -0
- package/dist-browser/three/addons/modifiers/CurveModifier.js +1 -0
- package/dist-browser/three/addons/modifiers/CurveModifierGPU.js +1 -0
- package/dist-browser/three/addons/modifiers/EdgeSplitModifier.js +1 -0
- package/dist-browser/three/addons/modifiers/SimplifyModifier.js +1 -0
- package/dist-browser/three/addons/modifiers/TessellateModifier.js +1 -0
- package/dist-browser/three/addons/objects/GaussianSplat.js +1 -0
- package/dist-browser/three/addons/objects/GroundedSkybox.js +1 -0
- package/dist-browser/three/addons/objects/Lensflare.js +1 -0
- package/dist-browser/three/addons/objects/LensflareMesh.js +1 -0
- package/dist-browser/three/addons/objects/MarchingCubes.js +1 -0
- package/dist-browser/three/addons/objects/Reflector.js +1 -0
- package/dist-browser/three/addons/objects/ReflectorForSSRPass.js +1 -0
- package/dist-browser/three/addons/objects/Refractor.js +1 -0
- package/dist-browser/three/addons/objects/ShadowMesh.js +1 -0
- package/dist-browser/three/addons/objects/Sky.js +1 -0
- package/dist-browser/three/addons/objects/SkyMesh.js +1 -0
- package/dist-browser/three/addons/objects/Water.js +1 -0
- package/dist-browser/three/addons/objects/Water2.js +1 -0
- package/dist-browser/three/addons/objects/Water2Mesh.js +1 -0
- package/dist-browser/three/addons/objects/WaterMesh.js +1 -0
- package/dist-browser/three/addons/offscreen/jank.js +1 -0
- package/dist-browser/three/addons/offscreen/offscreen.js +0 -0
- package/dist-browser/three/addons/offscreen/scene.js +1 -0
- package/dist-browser/three/addons/physics/AmmoPhysics.js +1 -0
- package/dist-browser/three/addons/physics/JoltPhysics.js +1 -0
- package/dist-browser/three/addons/physics/RapierPhysics.js +1 -0
- package/dist-browser/three/addons/postprocessing/AfterimagePass.js +1 -0
- package/dist-browser/three/addons/postprocessing/BloomPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/BokehPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/ClearPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/CubeTexturePass.js +1 -0
- package/dist-browser/three/addons/postprocessing/DotScreenPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/EffectComposer.js +1 -0
- package/dist-browser/three/addons/postprocessing/FXAAPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/FilmPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/GTAOPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/GlitchPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/HalftonePass.js +1 -0
- package/dist-browser/three/addons/postprocessing/LUTPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/MaskPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/OutlinePass.js +1 -0
- package/dist-browser/three/addons/postprocessing/OutputPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/Pass.js +1 -0
- package/dist-browser/three/addons/postprocessing/RenderPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/RenderPixelatedPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/RenderTransitionPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/SAOPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/SMAAPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/SSAARenderPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/SSAOPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/SSRPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/SavePass.js +1 -0
- package/dist-browser/three/addons/postprocessing/ShaderPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/TAARenderPass.js +1 -0
- package/dist-browser/three/addons/postprocessing/TexturePass.js +1 -0
- package/dist-browser/three/addons/postprocessing/UnrealBloomPass.js +1 -0
- package/dist-browser/three/addons/renderers/CSS2DRenderer.js +1 -0
- package/dist-browser/three/addons/renderers/CSS3DRenderer.js +1 -0
- package/dist-browser/three/addons/renderers/Projector.js +1 -0
- package/dist-browser/three/addons/renderers/SVGRenderer.js +1 -0
- package/dist-browser/three/addons/shaders/ACESFilmicToneMappingShader.js +1 -0
- package/dist-browser/three/addons/shaders/AfterimageShader.js +1 -0
- package/dist-browser/three/addons/shaders/BasicShader.js +1 -0
- package/dist-browser/three/addons/shaders/BleachBypassShader.js +1 -0
- package/dist-browser/three/addons/shaders/BlendShader.js +1 -0
- package/dist-browser/three/addons/shaders/BokehShader.js +1 -0
- package/dist-browser/three/addons/shaders/BokehShader2.js +1 -0
- package/dist-browser/three/addons/shaders/BrightnessContrastShader.js +1 -0
- package/dist-browser/three/addons/shaders/ColorCorrectionShader.js +1 -0
- package/dist-browser/three/addons/shaders/ColorifyShader.js +1 -0
- package/dist-browser/three/addons/shaders/ConvolutionShader.js +1 -0
- package/dist-browser/three/addons/shaders/CopyShader.js +1 -0
- package/dist-browser/three/addons/shaders/DOFMipMapShader.js +1 -0
- package/dist-browser/three/addons/shaders/DepthLimitedBlurShader.js +1 -0
- package/dist-browser/three/addons/shaders/DigitalGlitch.js +1 -0
- package/dist-browser/three/addons/shaders/DotScreenShader.js +1 -0
- package/dist-browser/three/addons/shaders/ExposureShader.js +1 -0
- package/dist-browser/three/addons/shaders/FXAAShader.js +1 -0
- package/dist-browser/three/addons/shaders/FilmShader.js +1 -0
- package/dist-browser/three/addons/shaders/FocusShader.js +1 -0
- package/dist-browser/three/addons/shaders/FreiChenShader.js +1 -0
- package/dist-browser/three/addons/shaders/GTAOShader.js +1 -0
- package/dist-browser/three/addons/shaders/GammaCorrectionShader.js +1 -0
- package/dist-browser/three/addons/shaders/HalftoneShader.js +1 -0
- package/dist-browser/three/addons/shaders/HorizontalBlurShader.js +1 -0
- package/dist-browser/three/addons/shaders/HorizontalTiltShiftShader.js +1 -0
- package/dist-browser/three/addons/shaders/HueSaturationShader.js +1 -0
- package/dist-browser/three/addons/shaders/KaleidoShader.js +1 -0
- package/dist-browser/three/addons/shaders/LuminosityHighPassShader.js +1 -0
- package/dist-browser/three/addons/shaders/LuminosityShader.js +1 -0
- package/dist-browser/three/addons/shaders/MirrorShader.js +1 -0
- package/dist-browser/three/addons/shaders/NormalMapShader.js +1 -0
- package/dist-browser/three/addons/shaders/OutputShader.js +1 -0
- package/dist-browser/three/addons/shaders/PoissonDenoiseShader.js +1 -0
- package/dist-browser/three/addons/shaders/RGBShiftShader.js +1 -0
- package/dist-browser/three/addons/shaders/SAOShader.js +1 -0
- package/dist-browser/three/addons/shaders/SMAAShader.js +1 -0
- package/dist-browser/three/addons/shaders/SSAOShader.js +1 -0
- package/dist-browser/three/addons/shaders/SSRShader.js +1 -0
- package/dist-browser/three/addons/shaders/SepiaShader.js +1 -0
- package/dist-browser/three/addons/shaders/SobelOperatorShader.js +1 -0
- package/dist-browser/three/addons/shaders/SubsurfaceScatteringShader.js +1 -0
- package/dist-browser/three/addons/shaders/TechnicolorShader.js +1 -0
- package/dist-browser/three/addons/shaders/ToonShader.js +1 -0
- package/dist-browser/three/addons/shaders/TriangleBlurShader.js +1 -0
- package/dist-browser/three/addons/shaders/UnpackDepthRGBAShader.js +1 -0
- package/dist-browser/three/addons/shaders/VelocityShader.js +1 -0
- package/dist-browser/three/addons/shaders/VerticalBlurShader.js +1 -0
- package/dist-browser/three/addons/shaders/VerticalTiltShiftShader.js +1 -0
- package/dist-browser/three/addons/shaders/VignetteShader.js +1 -0
- package/dist-browser/three/addons/shaders/VolumeShader.js +1 -0
- package/dist-browser/three/addons/shaders/WaterRefractionShader.js +1 -0
- package/dist-browser/three/addons/textures/FlakesTexture.js +1 -0
- package/dist-browser/three/addons/transpiler/AST.js +1 -0
- package/dist-browser/three/addons/transpiler/GLSLDecoder.js +1 -0
- package/dist-browser/three/addons/transpiler/Linker.js +1 -0
- package/dist-browser/three/addons/transpiler/ShaderToyDecoder.js +1 -0
- package/dist-browser/three/addons/transpiler/TSLEncoder.js +55 -0
- package/dist-browser/three/addons/transpiler/Transpiler.js +1 -0
- package/dist-browser/three/addons/transpiler/TranspilerUtils.js +1 -0
- package/dist-browser/three/addons/transpiler/WGSLEncoder.js +30 -0
- package/dist-browser/three/addons/tsl/WebGLNodesHandler.js +1 -0
- package/dist-browser/three/addons/tsl/display/AfterImageNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/AnaglyphPassNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/BilateralBlurNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/BleachBypass.js +1 -0
- package/dist-browser/three/addons/tsl/display/BloomNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/CRT.js +1 -0
- package/dist-browser/three/addons/tsl/display/ChromaticAberrationNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/DenoiseNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/DepthOfFieldNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/DotScreenNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/FSR1Node.js +1 -0
- package/dist-browser/three/addons/tsl/display/FXAANode.js +1 -0
- package/dist-browser/three/addons/tsl/display/FilmNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/GTAONode.js +1 -0
- package/dist-browser/three/addons/tsl/display/GaussianBlurNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/GodraysNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/ImportanceSampledEnvironment.js +1 -0
- package/dist-browser/three/addons/tsl/display/LensflareNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/Lut3DNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/MotionBlur.js +1 -0
- package/dist-browser/three/addons/tsl/display/OITPassNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/OutlineNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/PixelationPassNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/RGBShiftNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/RecurrentDenoiseNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/RetroPassNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/SMAANode.js +1 -0
- package/dist-browser/three/addons/tsl/display/SSAAPassNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/SSAONode.js +1 -0
- package/dist-browser/three/addons/tsl/display/SSGINode.js +1 -0
- package/dist-browser/three/addons/tsl/display/SSRNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/SSSNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/Sepia.js +1 -0
- package/dist-browser/three/addons/tsl/display/Shape.js +1 -0
- package/dist-browser/three/addons/tsl/display/SharpenNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/SobelOperatorNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/StereoCompositePassNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/StereoPassNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/TAAUNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/TRAANode.js +1 -0
- package/dist-browser/three/addons/tsl/display/TemporalReprojectNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/TransitionNode.js +1 -0
- package/dist-browser/three/addons/tsl/display/boxBlur.js +1 -0
- package/dist-browser/three/addons/tsl/display/depthAwareBlend.js +1 -0
- package/dist-browser/three/addons/tsl/display/depthAwareBlur.js +1 -0
- package/dist-browser/three/addons/tsl/display/hashBlur.js +1 -0
- package/dist-browser/three/addons/tsl/display/radialBlur.js +1 -0
- package/dist-browser/three/addons/tsl/lighting/ClusteredLightsNode.js +1 -0
- package/dist-browser/three/addons/tsl/lighting/DynamicLightsNode.js +1 -0
- package/dist-browser/three/addons/tsl/lighting/LightProbeGridNode.js +1 -0
- package/dist-browser/three/addons/tsl/lighting/data/AmbientLightDataNode.js +1 -0
- package/dist-browser/three/addons/tsl/lighting/data/DirectionalLightDataNode.js +1 -0
- package/dist-browser/three/addons/tsl/lighting/data/HemisphereLightDataNode.js +1 -0
- package/dist-browser/three/addons/tsl/lighting/data/PointLightDataNode.js +1 -0
- package/dist-browser/three/addons/tsl/lighting/data/SpotLightDataNode.js +1 -0
- package/dist-browser/three/addons/tsl/math/Bayer.js +1 -0
- package/dist-browser/three/addons/tsl/math/curlNoise.js +1 -0
- package/dist-browser/three/addons/tsl/math/voronoiNoise.js +1 -0
- package/dist-browser/three/addons/tsl/shadows/TileShadowNode.js +1 -0
- package/dist-browser/three/addons/tsl/shadows/TileShadowNodeHelper.js +1 -0
- package/dist-browser/three/addons/tsl/utils/GroundedSkybox.js +1 -0
- package/dist-browser/three/addons/tsl/utils/RNoise.js +1 -0
- package/dist-browser/three/addons/tsl/utils/Raymarching.js +1 -0
- package/dist-browser/three/addons/tsl/utils/SoftParticles.js +1 -0
- package/dist-browser/three/addons/tsl/utils/SpecularHelpers.js +1 -0
- package/dist-browser/three/addons/tsl/utils/TAAUtils.js +1 -0
- package/dist-browser/three/addons/utils/BufferGeometryUtils.js +1 -0
- package/dist-browser/three/addons/utils/CameraUtils.js +1 -0
- package/dist-browser/three/addons/utils/ColorUtils.js +1 -0
- package/dist-browser/three/addons/utils/GaussianSplatUtils.js +1 -0
- package/dist-browser/three/addons/utils/GeometryCompressionUtils.js +1 -0
- package/dist-browser/three/addons/utils/GeometryUtils.js +1 -0
- package/dist-browser/three/addons/utils/LDrawUtils.js +1 -0
- package/dist-browser/three/addons/utils/SceneOptimizer.js +1 -0
- package/dist-browser/three/addons/utils/SceneUtils.js +1 -0
- package/dist-browser/three/addons/utils/ShadowMapViewer.js +1 -0
- package/dist-browser/three/addons/utils/ShadowMapViewerGPU.js +1 -0
- package/dist-browser/three/addons/utils/SkeletonUtils.js +1 -0
- package/dist-browser/three/addons/utils/SortUtils.js +1 -0
- package/dist-browser/three/addons/utils/UVsDebug.js +1 -0
- package/dist-browser/three/addons/utils/WebGLTextureUtils.js +1 -0
- package/dist-browser/three/addons/utils/WebGPUTextureUtils.js +1 -0
- package/dist-browser/three/addons/utils/WorkerPool.js +1 -0
- package/dist-browser/three/addons/webxr/ARButton.js +1 -0
- package/dist-browser/three/addons/webxr/OculusHandModel.js +1 -0
- package/dist-browser/three/addons/webxr/OculusHandPointerModel.js +1 -0
- package/dist-browser/three/addons/webxr/Text2D.js +1 -0
- package/dist-browser/three/addons/webxr/VRButton.js +1 -0
- package/dist-browser/three/addons/webxr/WebGLXRFallback.js +1 -0
- package/dist-browser/three/addons/webxr/XRButton.js +1 -0
- package/dist-browser/three/addons/webxr/XRControllerModelFactory.js +1 -0
- package/dist-browser/three/addons/webxr/XREstimatedLight.js +1 -0
- package/dist-browser/three/addons/webxr/XRHandMeshModel.js +1 -0
- package/dist-browser/three/addons/webxr/XRHandModelFactory.js +1 -0
- package/dist-browser/three/addons/webxr/XRHandPrimitiveModel.js +1 -0
- package/dist-browser/three/addons/webxr/XRPlanes.js +1 -0
- package/dist-browser/three/addons.js +1 -0
- package/dist-browser/three/tsl.js +1 -0
- package/dist-browser/three/webgpu.js +1 -0
- package/dist-browser/three.js +1 -0
- package/dist-browser/three.quarks.js +1 -0
- package/dist-browser/zustand/middleware.js +1 -0
- package/dist-browser/zustand/shallow.js +1 -0
- package/dist-browser/zustand/vanilla.js +1 -0
- package/dist-browser/zustand.js +1 -0
- package/package.json +194 -0
- package/rapier/LICENSE +201 -0
- package/rapier/NOTICE +23 -0
- package/rapier/simd/coarena.js +1 -0
- package/rapier/simd/control/character_controller.js +1 -0
- package/rapier/simd/control/index.js +1 -0
- package/rapier/simd/control/pid_controller.js +1 -0
- package/rapier/simd/control/ray_cast_vehicle_controller.js +1 -0
- package/rapier/simd/dynamics/ccd_solver.js +1 -0
- package/rapier/simd/dynamics/coefficient_combine_rule.js +1 -0
- package/rapier/simd/dynamics/impulse_joint.js +1 -0
- package/rapier/simd/dynamics/impulse_joint_set.js +1 -0
- package/rapier/simd/dynamics/index.js +1 -0
- package/rapier/simd/dynamics/integration_parameters.js +1 -0
- package/rapier/simd/dynamics/island_manager.js +1 -0
- package/rapier/simd/dynamics/multibody_joint.js +1 -0
- package/rapier/simd/dynamics/multibody_joint_set.js +1 -0
- package/rapier/simd/dynamics/rigid_body.js +1 -0
- package/rapier/simd/dynamics/rigid_body_set.js +1 -0
- package/rapier/simd/exports.js +1 -0
- package/rapier/simd/geometry/broad_phase.js +1 -0
- package/rapier/simd/geometry/collider.js +1 -0
- package/rapier/simd/geometry/collider_set.js +1 -0
- package/rapier/simd/geometry/contact.js +1 -0
- package/rapier/simd/geometry/feature.js +1 -0
- package/rapier/simd/geometry/index.js +1 -0
- package/rapier/simd/geometry/interaction_groups.js +0 -0
- package/rapier/simd/geometry/narrow_phase.js +1 -0
- package/rapier/simd/geometry/point.js +1 -0
- package/rapier/simd/geometry/ray.js +1 -0
- package/rapier/simd/geometry/shape.js +1 -0
- package/rapier/simd/geometry/toi.js +1 -0
- package/rapier/simd/init.js +0 -0
- package/rapier/simd/math.js +1 -0
- package/rapier/simd/pipeline/debug_render_pipeline.js +1 -0
- package/rapier/simd/pipeline/event_queue.js +1 -0
- package/rapier/simd/pipeline/index.js +1 -0
- package/rapier/simd/pipeline/physics_hooks.js +1 -0
- package/rapier/simd/pipeline/physics_pipeline.js +1 -0
- package/rapier/simd/pipeline/query_pipeline.js +1 -0
- package/rapier/simd/pipeline/serialization_pipeline.js +1 -0
- package/rapier/simd/pipeline/world.js +1 -0
- package/rapier/simd/rapier.js +1 -0
- package/rapier/simd/rapier_wasm3d.js +1 -0
- package/rapier/simd/rapier_wasm3d_bg.js +1 -0
- package/rapier/simd/rapier_wasm3d_bg.wasm +0 -0
- package/rapier/simd/raw.js +1 -0
- package/rapier/simd-compat/rapier.mjs +1 -0
- package/rapier/types/coarena.d.ts +15 -0
- package/rapier/types/control/character_controller.d.ts +191 -0
- package/rapier/types/control/index.d.ts +3 -0
- package/rapier/types/control/pid_controller.d.ts +50 -0
- package/rapier/types/control/ray_cast_vehicle_controller.d.ts +277 -0
- package/rapier/types/dynamics/ccd_solver.d.ts +15 -0
- package/rapier/types/dynamics/coefficient_combine_rule.d.ts +13 -0
- package/rapier/types/dynamics/impulse_joint.d.ts +375 -0
- package/rapier/types/dynamics/impulse_joint_set.d.ts +79 -0
- package/rapier/types/dynamics/index.d.ts +10 -0
- package/rapier/types/dynamics/integration_parameters.d.ts +57 -0
- package/rapier/types/dynamics/island_manager.d.ts +24 -0
- package/rapier/types/dynamics/multibody_joint.d.ts +42 -0
- package/rapier/types/dynamics/multibody_joint_set.d.ts +76 -0
- package/rapier/types/dynamics/rigid_body.d.ts +803 -0
- package/rapier/types/dynamics/rigid_body_set.d.ts +78 -0
- package/rapier/types/exports.d.ts +8 -0
- package/rapier/types/geometry/broad_phase.d.ts +164 -0
- package/rapier/types/geometry/collider.d.ts +996 -0
- package/rapier/types/geometry/collider_set.d.ts +72 -0
- package/rapier/types/geometry/contact.d.ts +36 -0
- package/rapier/types/geometry/feature.d.ts +6 -0
- package/rapier/types/geometry/index.d.ts +11 -0
- package/rapier/types/geometry/interaction_groups.d.ts +18 -0
- package/rapier/types/geometry/narrow_phase.d.ts +130 -0
- package/rapier/types/geometry/point.d.ts +58 -0
- package/rapier/types/geometry/ray.d.ts +108 -0
- package/rapier/types/geometry/shape.d.ts +632 -0
- package/rapier/types/geometry/toi.d.ts +44 -0
- package/rapier/types/init.d.ts +5 -0
- package/rapier/types/math.d.ts +98 -0
- package/rapier/types/pipeline/debug_render_pipeline.d.ts +40 -0
- package/rapier/types/pipeline/event_queue.d.ts +101 -0
- package/rapier/types/pipeline/index.d.ts +7 -0
- package/rapier/types/pipeline/physics_hooks.d.ts +39 -0
- package/rapier/types/pipeline/physics_pipeline.d.ts +12 -0
- package/rapier/types/pipeline/query_pipeline.d.ts +38 -0
- package/rapier/types/pipeline/serialization_pipeline.d.ts +37 -0
- package/rapier/types/pipeline/world.d.ts +602 -0
- package/rapier/types/rapier.d.ts +3 -0
- package/rapier/types/rapier_wasm3d.d.ts +2204 -0
- package/rapier/types/rapier_wasm3d_bg.wasm.d.ts +582 -0
- package/rapier/types/raw.d.ts +1 -0
- package/readable/rounds/LevelBanner.tsx +44 -0
- package/readable/rounds/Round.tsx +228 -0
- package/readable/rounds/RoundScreen.tsx +89 -0
- package/readable/rounds/dist/LevelBanner.d.ts +13 -0
- package/readable/rounds/dist/LevelBanner.d.ts.map +1 -0
- package/readable/rounds/dist/LevelBanner.js +20 -0
- package/readable/rounds/dist/LevelBanner.js.map +1 -0
- package/readable/rounds/dist/Round.d.ts +74 -0
- package/readable/rounds/dist/Round.d.ts.map +1 -0
- package/readable/rounds/dist/Round.js +137 -0
- package/readable/rounds/dist/Round.js.map +1 -0
- package/readable/rounds/dist/RoundScreen.d.ts +39 -0
- package/readable/rounds/dist/RoundScreen.d.ts.map +1 -0
- package/readable/rounds/dist/RoundScreen.js +23 -0
- package/readable/rounds/dist/RoundScreen.js.map +1 -0
- package/readable/rounds/dist/index.d.ts +7 -0
- package/readable/rounds/dist/index.d.ts.map +1 -0
- package/readable/rounds/dist/index.js +11 -0
- package/readable/rounds/dist/index.js.map +1 -0
- package/readable/rounds/dist/rounds.d.ts +16 -0
- package/readable/rounds/dist/rounds.d.ts.map +1 -0
- package/readable/rounds/dist/rounds.js +82 -0
- package/readable/rounds/dist/rounds.js.map +1 -0
- package/readable/rounds/dist/rules.d.ts +65 -0
- package/readable/rounds/dist/rules.d.ts.map +1 -0
- package/readable/rounds/dist/rules.js +150 -0
- package/readable/rounds/dist/rules.js.map +1 -0
- package/readable/rounds/dist/traits.d.ts +103 -0
- package/readable/rounds/dist/traits.d.ts.map +1 -0
- package/readable/rounds/dist/traits.js +79 -0
- package/readable/rounds/dist/traits.js.map +1 -0
- package/readable/rounds/index.ts +11 -0
- package/readable/rounds/rounds.ts +117 -0
- package/readable/rounds/rules.ts +182 -0
- package/readable/rounds/traits.ts +82 -0
|
@@ -0,0 +1,1585 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./Cvdyeg_0.js";import{B as n,Cn as r,Ht as i,Io as a,Ki as o,Ks as s,Ls as c,Ms as l,Nn as u,Or as d,Pt as f,Qr as p,Rs as m,So as h,To as g,Ts as _,V as v,Xr as y,cs as b,et as x,mi as S,mn as C,po as w,q as T,so as E,ss as D,xa as O}from"./BoJD7UsQ.js";import{D as k,F as A,M as ee,_ as j,l as M,m as N}from"./CJgknJ-O.js";import{t as te}from"./NZYk81nU.js";import{t as ne}from"./CVn3AkL4.js";import{$ as re,A as ie,D as ae,F as oe,Gt as se,Jt as ce,K as le,Lt as ue,M as de,Nt as fe,O as pe,Ot as me,Q as he,Qt as ge,St as _e,Tt as ve,U as ye,Ut as be,V as xe,Xt as Se,Z as Ce,_ as we,f as Te,kt as Ee,lt as De,nt as Oe,on as ke,p as Ae,qt as je,rn as Me,s as Ne,tn as Pe,tt as Fe,vt as Ie,wt as Le,x as Re,y as ze,z as P}from"./Bn8JxKQd.js";var F=e(t(),1),I=e(te(),1);function L(e){return e&&e.__esModule?e.default:e}var Be=new class extends v{boundingSphere=new a;constructor(){super(),this.setAttribute(`position`,new n(new Float32Array([-1,-1,3,-1,-1,3]),2)),this.setAttribute(`uv`,new n(new Float32Array([0,0,2,0,0,2]),2))}computeBoundingSphere(){}},Ve=new o,R=class{constructor(e){this._mesh=new p(Be,e),this._mesh.frustumCulled=!1}render(e){e.render(this._mesh,Ve)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}dispose(){this._mesh.material.dispose(),this._mesh.geometry.dispose()}},He={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},sceneNormal:{value:null},projMat:{value:new y},viewMat:{value:new y},projViewMat:{value:new y},projectionMatrixInv:{value:new y},viewMatrixInv:{value:new y},cameraPos:{value:new m},resolution:{value:new c},biasAdjustment:{value:new c},time:{value:0},samples:{value:[]},bluenoise:{value:null},distanceFalloff:{value:1},radius:{value:5},near:{value:.1},far:{value:1e3},ortho:{value:!1},screenSpaceRadius:{value:!1},frame:{value:0}},depthWrite:!1,depthTest:!1,vertexShader:`
|
|
2
|
+
varying vec2 vUv;
|
|
3
|
+
void main() {
|
|
4
|
+
vUv = uv;
|
|
5
|
+
gl_Position = vec4(position, 1);
|
|
6
|
+
}`,fragmentShader:`
|
|
7
|
+
#define SAMPLES 16
|
|
8
|
+
#define FSAMPLES 16.0
|
|
9
|
+
uniform sampler2D sceneDiffuse;
|
|
10
|
+
uniform highp sampler2D sceneNormal;
|
|
11
|
+
uniform highp sampler2D sceneDepth;
|
|
12
|
+
uniform mat4 projectionMatrixInv;
|
|
13
|
+
uniform mat4 viewMatrixInv;
|
|
14
|
+
uniform mat4 projMat;
|
|
15
|
+
uniform mat4 viewMat;
|
|
16
|
+
uniform mat4 projViewMat;
|
|
17
|
+
uniform vec3 cameraPos;
|
|
18
|
+
uniform vec2 resolution;
|
|
19
|
+
uniform vec2 biasAdjustment;
|
|
20
|
+
uniform float time;
|
|
21
|
+
uniform vec3[SAMPLES] samples;
|
|
22
|
+
uniform float radius;
|
|
23
|
+
uniform float distanceFalloff;
|
|
24
|
+
uniform float near;
|
|
25
|
+
uniform float far;
|
|
26
|
+
uniform float frame;
|
|
27
|
+
uniform bool ortho;
|
|
28
|
+
uniform bool screenSpaceRadius;
|
|
29
|
+
uniform sampler2D bluenoise;
|
|
30
|
+
varying vec2 vUv;
|
|
31
|
+
highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
|
|
32
|
+
{
|
|
33
|
+
return (zFar * zNear) / (zFar - d * (zFar - zNear));
|
|
34
|
+
}
|
|
35
|
+
highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
|
|
36
|
+
return nearZ + (farZ - nearZ) * d;
|
|
37
|
+
}
|
|
38
|
+
highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
|
|
39
|
+
float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0;
|
|
40
|
+
float a = farZ / (farZ - nearZ);
|
|
41
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
42
|
+
float linDepth = a + b / depth;
|
|
43
|
+
/*return ortho ? linearize_depth_ortho(
|
|
44
|
+
linDepth,
|
|
45
|
+
nearZ,
|
|
46
|
+
farZ
|
|
47
|
+
) :linearize_depth(linDepth, nearZ, farZ);*/
|
|
48
|
+
#ifdef ORTHO
|
|
49
|
+
|
|
50
|
+
return linearize_depth_ortho(d, nearZ, farZ);
|
|
51
|
+
|
|
52
|
+
#else
|
|
53
|
+
return linearize_depth(linDepth, nearZ, farZ);
|
|
54
|
+
#endif
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
vec3 getWorldPosLog(vec3 posS) {
|
|
58
|
+
vec2 uv = posS.xy;
|
|
59
|
+
float z = posS.z;
|
|
60
|
+
float nearZ =near;
|
|
61
|
+
float farZ = far;
|
|
62
|
+
float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;
|
|
63
|
+
float a = farZ / (farZ - nearZ);
|
|
64
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
65
|
+
float linDepth = a + b / depth;
|
|
66
|
+
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;
|
|
67
|
+
vec4 wpos = projectionMatrixInv * clipVec;
|
|
68
|
+
return wpos.xyz / wpos.w;
|
|
69
|
+
}
|
|
70
|
+
float depthToClipZ(float depth) {
|
|
71
|
+
#ifdef REVERSEDEPTH
|
|
72
|
+
return depth;
|
|
73
|
+
#else
|
|
74
|
+
return depth * 2.0 - 1.0;
|
|
75
|
+
#endif
|
|
76
|
+
}
|
|
77
|
+
bool isBackgroundDepth(float depth) {
|
|
78
|
+
#ifdef REVERSEDEPTH
|
|
79
|
+
return depth == 0.0;
|
|
80
|
+
#else
|
|
81
|
+
return depth == 1.0;
|
|
82
|
+
#endif
|
|
83
|
+
}
|
|
84
|
+
vec3 getWorldPos(float depth, vec2 coord) {
|
|
85
|
+
#ifdef LOGDEPTH
|
|
86
|
+
#ifndef ORTHO
|
|
87
|
+
return getWorldPosLog(vec3(coord, depth));
|
|
88
|
+
#endif
|
|
89
|
+
#endif
|
|
90
|
+
#ifdef ORTHO
|
|
91
|
+
float z = depthToClipZ(depth);
|
|
92
|
+
vec4 clipSpacePosition = vec4(coord * 2. - 1., z, 1.);
|
|
93
|
+
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
|
|
94
|
+
viewSpacePosition.xyz /= viewSpacePosition.w;
|
|
95
|
+
return viewSpacePosition.xyz;
|
|
96
|
+
#else
|
|
97
|
+
vec2 ndc = coord * 2. - 1.;
|
|
98
|
+
float ndcZ = depthToClipZ(depth);
|
|
99
|
+
mat4 Q = projectionMatrixInv;
|
|
100
|
+
vec3 view = vec3(Q[0][0] * ndc.x + Q[3][0], Q[1][1] * ndc.y + Q[3][1], Q[3][2]);
|
|
101
|
+
float invW = 1. / (Q[2][3] * ndcZ + Q[3][3]);
|
|
102
|
+
return view * invW;
|
|
103
|
+
#endif
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
vec3 computeNormal(vec3 worldPos, vec2 vUv) {
|
|
107
|
+
ivec2 p = ivec2(vUv * resolution);
|
|
108
|
+
float c0 = texelFetch(sceneDepth, p, 0).x;
|
|
109
|
+
float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x;
|
|
110
|
+
float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x;
|
|
111
|
+
float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
|
|
112
|
+
float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
|
|
113
|
+
float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x;
|
|
114
|
+
float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x;
|
|
115
|
+
float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
|
|
116
|
+
float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
|
|
117
|
+
|
|
118
|
+
float dl = abs((2.0 * l1 - l2) - c0);
|
|
119
|
+
float dr = abs((2.0 * r1 - r2) - c0);
|
|
120
|
+
float db = abs((2.0 * b1 - b2) - c0);
|
|
121
|
+
float dt = abs((2.0 * t1 - t2) - c0);
|
|
122
|
+
|
|
123
|
+
vec3 ce = getWorldPos(c0, vUv).xyz;
|
|
124
|
+
|
|
125
|
+
vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz
|
|
126
|
+
: -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz;
|
|
127
|
+
vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz
|
|
128
|
+
: -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz;
|
|
129
|
+
|
|
130
|
+
return normalize(cross(dpdx, dpdy));
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
mat3 makeRotationZ(float theta) {
|
|
134
|
+
float c = cos(theta);
|
|
135
|
+
float s = sin(theta);
|
|
136
|
+
return mat3(c, - s, 0,
|
|
137
|
+
s, c, 0,
|
|
138
|
+
0, 0, 1);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
void main() {
|
|
142
|
+
vec4 diffuse = texture2D(sceneDiffuse, vUv);
|
|
143
|
+
float depth = texture2D(sceneDepth, vUv).x;
|
|
144
|
+
if (isBackgroundDepth(depth)) {
|
|
145
|
+
gl_FragColor = vec4(vec3(1.0), 1.0);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
vec3 worldPos = getWorldPos(depth, vUv);
|
|
149
|
+
#ifdef HALFRES
|
|
150
|
+
vec3 normal = texture2D(sceneNormal, vUv).rgb;
|
|
151
|
+
#else
|
|
152
|
+
vec3 normal = computeNormal(worldPos, vUv);
|
|
153
|
+
#endif
|
|
154
|
+
vec4 noise = texture2D(bluenoise, gl_FragCoord.xy / 128.0);
|
|
155
|
+
vec2 harmoniousNumbers = vec2(
|
|
156
|
+
1.618033988749895,
|
|
157
|
+
1.324717957244746
|
|
158
|
+
);
|
|
159
|
+
noise.rg += harmoniousNumbers * frame;
|
|
160
|
+
noise.rg = fract(noise.rg);
|
|
161
|
+
vec3 helperVec = vec3(0.0, 1.0, 0.0);
|
|
162
|
+
if (dot(helperVec, normal) > 0.99) {
|
|
163
|
+
helperVec = vec3(1.0, 0.0, 0.0);
|
|
164
|
+
}
|
|
165
|
+
vec3 tangent = normalize(cross(helperVec, normal));
|
|
166
|
+
vec3 bitangent = cross(normal, tangent);
|
|
167
|
+
mediump mat3 tbn = mat3(tangent, bitangent, normal) * makeRotationZ( noise.r * 3.1415962 * 2.0) ;
|
|
168
|
+
|
|
169
|
+
mediump float occluded = 0.0;
|
|
170
|
+
mediump float totalWeight = 0.0;
|
|
171
|
+
float radiusToUse = screenSpaceRadius ? distance(
|
|
172
|
+
worldPos,
|
|
173
|
+
getWorldPos(depth, vUv +
|
|
174
|
+
vec2(radius, 0.0) / resolution)
|
|
175
|
+
) : radius;
|
|
176
|
+
float distanceFalloffToUse =screenSpaceRadius ?
|
|
177
|
+
radiusToUse * distanceFalloff
|
|
178
|
+
: radiusToUse * distanceFalloff * 0.2;
|
|
179
|
+
float bias = (min(
|
|
180
|
+
0.1,
|
|
181
|
+
distanceFalloffToUse * 0.1
|
|
182
|
+
) / near) * fwidth(distance(worldPos, cameraPos)) / radiusToUse;
|
|
183
|
+
bias = biasAdjustment.x + biasAdjustment.y * bias;
|
|
184
|
+
mediump float offsetMove = noise.g;
|
|
185
|
+
mediump float offsetMoveInv = 1.0 / FSAMPLES;
|
|
186
|
+
float farTimesNear = far * near;
|
|
187
|
+
float farMinusNear = far - near;
|
|
188
|
+
|
|
189
|
+
for(int i = 0; i < SAMPLES; i++) {
|
|
190
|
+
mediump vec3 sampleDirection = tbn * samples[i];
|
|
191
|
+
|
|
192
|
+
float moveAmt = fract(offsetMove);
|
|
193
|
+
offsetMove += offsetMoveInv;
|
|
194
|
+
vec3 samplePos = worldPos + radiusToUse * moveAmt * sampleDirection;
|
|
195
|
+
vec4 offset = projMat * vec4(samplePos, 1.0);
|
|
196
|
+
offset.xyz /= offset.w;
|
|
197
|
+
offset.xy = offset.xy * 0.5 + 0.5;
|
|
198
|
+
#ifndef REVERSEDEPTH
|
|
199
|
+
offset.z = offset.z * 0.5 + 0.5;
|
|
200
|
+
#endif
|
|
201
|
+
|
|
202
|
+
if (all(greaterThan(offset.xyz * (1.0 - offset.xyz), vec3(0.0)))) {
|
|
203
|
+
float sampleDepth = textureLod(sceneDepth, offset.xy, 0.0).x;
|
|
204
|
+
|
|
205
|
+
/*#ifdef LOGDEPTH
|
|
206
|
+
float distSample = linearize_depth_log(sampleDepth, near, far);
|
|
207
|
+
#else
|
|
208
|
+
#ifdef ORTHO
|
|
209
|
+
float distSample = near + farMinusNear * sampleDepth;
|
|
210
|
+
#else
|
|
211
|
+
float distSample = (farTimesNear) / (far - sampleDepth * farMinusNear);
|
|
212
|
+
#endif
|
|
213
|
+
#endif*/
|
|
214
|
+
#ifdef REVERSEDEPTH
|
|
215
|
+
float distSample = -getWorldPos(sampleDepth, offset.xy).z;
|
|
216
|
+
#else
|
|
217
|
+
#ifdef ORTHO
|
|
218
|
+
float distSample = near + sampleDepth * farMinusNear;
|
|
219
|
+
#else
|
|
220
|
+
#ifdef LOGDEPTH
|
|
221
|
+
float distSample = linearize_depth_log(sampleDepth, near, far);
|
|
222
|
+
#else
|
|
223
|
+
float distSample = (farTimesNear) / (far - sampleDepth * farMinusNear);
|
|
224
|
+
#endif
|
|
225
|
+
#endif
|
|
226
|
+
#endif
|
|
227
|
+
|
|
228
|
+
#ifdef REVERSEDEPTH
|
|
229
|
+
float distWorld = -samplePos.z;
|
|
230
|
+
#else
|
|
231
|
+
#ifdef ORTHO
|
|
232
|
+
float distWorld = near + offset.z * farMinusNear;
|
|
233
|
+
#else
|
|
234
|
+
float distWorld = (farTimesNear) / (far - offset.z * farMinusNear);
|
|
235
|
+
#endif
|
|
236
|
+
#endif
|
|
237
|
+
|
|
238
|
+
mediump float rangeCheck = smoothstep(0.0, 1.0, distanceFalloffToUse / (abs(distSample - distWorld)));
|
|
239
|
+
vec2 diff = gl_FragCoord.xy - floor(offset.xy * resolution);
|
|
240
|
+
occluded += rangeCheck * float(distSample != distWorld) * float(sampleDepth != depth) * step(distSample + bias, distWorld) * step(
|
|
241
|
+
1.0,
|
|
242
|
+
dot(diff, diff)
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
totalWeight ++;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
float occ = clamp(1.0 - occluded / (totalWeight == 0.0 ? 1.0 : totalWeight), 0.0, 1.0);
|
|
249
|
+
gl_FragColor = vec4(occ, 0.5 + 0.5 * normal);
|
|
250
|
+
}`},Ue={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},tDiffuse:{value:null},transparencyDWFalse:{value:null},transparencyDWTrue:{value:null},transparencyDWTrueDepth:{value:null},transparencyAware:{value:!1},projMat:{value:new y},viewMat:{value:new y},projectionMatrixInv:{value:new y},resolution:{value:new c},color:{value:new m(0,0,0)},blueNoise:{value:null},downsampledDepth:{value:null},time:{value:0},intensity:{value:10},renderMode:{value:0},gammaCorrection:{value:!1},ortho:{value:!1},near:{value:.1},far:{value:1e3},screenSpaceRadius:{value:!1},radius:{value:0},distanceFalloff:{value:1},fog:{value:!1},fogExp:{value:!1},fogDensity:{value:0},fogNear:{value:1/0},fogFar:{value:1/0},colorMultiply:{value:!0},aoTones:{value:0}},depthWrite:!1,depthTest:!1,vertexShader:`
|
|
251
|
+
varying vec2 vUv;
|
|
252
|
+
void main() {
|
|
253
|
+
vUv = uv;
|
|
254
|
+
gl_Position = vec4(position, 1);
|
|
255
|
+
}`,fragmentShader:`
|
|
256
|
+
uniform sampler2D sceneDiffuse;
|
|
257
|
+
uniform highp sampler2D sceneDepth;
|
|
258
|
+
uniform highp sampler2D downsampledDepth;
|
|
259
|
+
uniform highp sampler2D transparencyDWFalse;
|
|
260
|
+
uniform highp sampler2D transparencyDWTrue;
|
|
261
|
+
uniform highp sampler2D transparencyDWTrueDepth;
|
|
262
|
+
uniform sampler2D tDiffuse;
|
|
263
|
+
uniform sampler2D blueNoise;
|
|
264
|
+
uniform vec2 resolution;
|
|
265
|
+
uniform vec3 color;
|
|
266
|
+
uniform mat4 projectionMatrixInv;
|
|
267
|
+
uniform float intensity;
|
|
268
|
+
uniform float renderMode;
|
|
269
|
+
uniform float near;
|
|
270
|
+
uniform float far;
|
|
271
|
+
uniform float aoTones;
|
|
272
|
+
uniform bool gammaCorrection;
|
|
273
|
+
uniform bool ortho;
|
|
274
|
+
uniform bool screenSpaceRadius;
|
|
275
|
+
uniform bool fog;
|
|
276
|
+
uniform bool fogExp;
|
|
277
|
+
uniform bool colorMultiply;
|
|
278
|
+
uniform bool transparencyAware;
|
|
279
|
+
uniform float fogDensity;
|
|
280
|
+
uniform float fogNear;
|
|
281
|
+
uniform float fogFar;
|
|
282
|
+
uniform float radius;
|
|
283
|
+
uniform float distanceFalloff;
|
|
284
|
+
varying vec2 vUv;
|
|
285
|
+
highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
|
|
286
|
+
{
|
|
287
|
+
return (zFar * zNear) / (zFar - d * (zFar - zNear));
|
|
288
|
+
}
|
|
289
|
+
highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
|
|
290
|
+
return nearZ + (farZ - nearZ) * d;
|
|
291
|
+
}
|
|
292
|
+
highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
|
|
293
|
+
float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0;
|
|
294
|
+
float a = farZ / (farZ - nearZ);
|
|
295
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
296
|
+
float linDepth = a + b / depth;
|
|
297
|
+
return ortho ? linearize_depth_ortho(
|
|
298
|
+
linDepth,
|
|
299
|
+
nearZ,
|
|
300
|
+
farZ
|
|
301
|
+
) :linearize_depth(linDepth, nearZ, farZ);
|
|
302
|
+
}
|
|
303
|
+
vec3 getWorldPosLog(vec3 posS) {
|
|
304
|
+
vec2 uv = posS.xy;
|
|
305
|
+
float z = posS.z;
|
|
306
|
+
float nearZ =near;
|
|
307
|
+
float farZ = far;
|
|
308
|
+
float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;
|
|
309
|
+
float a = farZ / (farZ - nearZ);
|
|
310
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
311
|
+
float linDepth = a + b / depth;
|
|
312
|
+
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;
|
|
313
|
+
vec4 wpos = projectionMatrixInv * clipVec;
|
|
314
|
+
return wpos.xyz / wpos.w;
|
|
315
|
+
}
|
|
316
|
+
float depthToClipZ(float depth) {
|
|
317
|
+
#ifdef REVERSEDEPTH
|
|
318
|
+
return depth;
|
|
319
|
+
#else
|
|
320
|
+
return depth * 2.0 - 1.0;
|
|
321
|
+
#endif
|
|
322
|
+
}
|
|
323
|
+
bool isBackgroundDepth(float depth) {
|
|
324
|
+
#ifdef REVERSEDEPTH
|
|
325
|
+
return depth == 0.0;
|
|
326
|
+
#else
|
|
327
|
+
return depth == 1.0;
|
|
328
|
+
#endif
|
|
329
|
+
}
|
|
330
|
+
vec3 getWorldPos(float depth, vec2 coord) {
|
|
331
|
+
#ifdef LOGDEPTH
|
|
332
|
+
#ifndef ORTHO
|
|
333
|
+
return getWorldPosLog(vec3(coord, depth));
|
|
334
|
+
#endif
|
|
335
|
+
#endif
|
|
336
|
+
// }
|
|
337
|
+
#ifdef ORTHO
|
|
338
|
+
float z = depthToClipZ(depth);
|
|
339
|
+
vec4 clipSpacePosition = vec4(coord * 2. - 1., z, 1.);
|
|
340
|
+
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
|
|
341
|
+
viewSpacePosition.xyz /= viewSpacePosition.w;
|
|
342
|
+
return viewSpacePosition.xyz;
|
|
343
|
+
#else
|
|
344
|
+
vec2 ndc = coord * 2. - 1.;
|
|
345
|
+
float ndcZ = depthToClipZ(depth);
|
|
346
|
+
mat4 Q = projectionMatrixInv;
|
|
347
|
+
vec3 view = vec3(Q[0][0] * ndc.x + Q[3][0], Q[1][1] * ndc.y + Q[3][1], Q[3][2]);
|
|
348
|
+
float invW = 1. / (Q[2][3] * ndcZ + Q[3][3]);
|
|
349
|
+
return view * invW;
|
|
350
|
+
#endif
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
vec3 computeNormal(vec3 worldPos, vec2 vUv) {
|
|
354
|
+
ivec2 p = ivec2(vUv * resolution);
|
|
355
|
+
float c0 = texelFetch(sceneDepth, p, 0).x;
|
|
356
|
+
float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x;
|
|
357
|
+
float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x;
|
|
358
|
+
float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
|
|
359
|
+
float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
|
|
360
|
+
float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x;
|
|
361
|
+
float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x;
|
|
362
|
+
float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
|
|
363
|
+
float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
|
|
364
|
+
|
|
365
|
+
float dl = abs((2.0 * l1 - l2) - c0);
|
|
366
|
+
float dr = abs((2.0 * r1 - r2) - c0);
|
|
367
|
+
float db = abs((2.0 * b1 - b2) - c0);
|
|
368
|
+
float dt = abs((2.0 * t1 - t2) - c0);
|
|
369
|
+
|
|
370
|
+
vec3 ce = getWorldPos(c0, vUv).xyz;
|
|
371
|
+
|
|
372
|
+
vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz
|
|
373
|
+
: -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz;
|
|
374
|
+
vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz
|
|
375
|
+
: -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz;
|
|
376
|
+
|
|
377
|
+
return normalize(cross(dpdx, dpdy));
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
#include <common>
|
|
381
|
+
#include <dithering_pars_fragment>
|
|
382
|
+
void main() {
|
|
383
|
+
//vec4 texel = texture2D(tDiffuse, vUv);//vec3(0.0);
|
|
384
|
+
vec4 sceneTexel = texture2D(sceneDiffuse, vUv);
|
|
385
|
+
float depth = texture2D(sceneDepth, vUv).x;
|
|
386
|
+
#ifdef HALFRES
|
|
387
|
+
vec4 texel = vec4(0.0);
|
|
388
|
+
if (isBackgroundDepth(depth)) {
|
|
389
|
+
texel = vec4(1.0, 0.0, 0.0, 1.0);
|
|
390
|
+
} else {
|
|
391
|
+
vec3 worldPos = getWorldPos(depth, vUv);
|
|
392
|
+
vec3 normal = computeNormal(getWorldPos(depth, vUv), vUv);
|
|
393
|
+
// vec4 texel = texture2D(tDiffuse, vUv);
|
|
394
|
+
// Find closest depth;
|
|
395
|
+
float totalWeight = 0.0;
|
|
396
|
+
float radiusToUse = screenSpaceRadius ? distance(
|
|
397
|
+
worldPos,
|
|
398
|
+
getWorldPos(depth, vUv +
|
|
399
|
+
vec2(radius, 0.0) / resolution)
|
|
400
|
+
) : radius;
|
|
401
|
+
float distanceFalloffToUse =screenSpaceRadius ?
|
|
402
|
+
radiusToUse * distanceFalloff
|
|
403
|
+
: distanceFalloff;
|
|
404
|
+
for(float x = -1.0; x <= 1.0; x++) {
|
|
405
|
+
for(float y = -1.0; y <= 1.0; y++) {
|
|
406
|
+
vec2 offset = vec2(x, y);
|
|
407
|
+
ivec2 p = ivec2(
|
|
408
|
+
(vUv * resolution * 0.5) + offset
|
|
409
|
+
);
|
|
410
|
+
vec2 pUv = vec2(p) / (resolution * 0.5);
|
|
411
|
+
float sampleDepth = texelFetch(downsampledDepth,p, 0).x;
|
|
412
|
+
vec4 sampleInfo = texelFetch(tDiffuse, p, 0);
|
|
413
|
+
vec3 normalSample = sampleInfo.gba * 2.0 - 1.0;
|
|
414
|
+
vec3 worldPosSample = getWorldPos(sampleDepth, pUv);
|
|
415
|
+
float tangentPlaneDist = abs(dot(worldPosSample - worldPos, normal));
|
|
416
|
+
float rangeCheck = exp(-1.0 * tangentPlaneDist * (1.0 / distanceFalloffToUse)) * max(dot(normal, normalSample), 0.0);
|
|
417
|
+
float weight = rangeCheck;
|
|
418
|
+
totalWeight += weight;
|
|
419
|
+
texel += sampleInfo * weight;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
if (totalWeight == 0.0) {
|
|
423
|
+
texel = texture2D(tDiffuse, vUv);
|
|
424
|
+
} else {
|
|
425
|
+
texel /= totalWeight;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
#else
|
|
429
|
+
vec4 texel = texture2D(tDiffuse, vUv);
|
|
430
|
+
#endif
|
|
431
|
+
|
|
432
|
+
#ifdef LOGDEPTH
|
|
433
|
+
texel.r = clamp(texel.r, 0.0, 1.0);
|
|
434
|
+
if (texel.r == 0.0) {
|
|
435
|
+
texel.r = 1.0;
|
|
436
|
+
}
|
|
437
|
+
#endif
|
|
438
|
+
|
|
439
|
+
float finalAo = pow(texel.r, intensity);
|
|
440
|
+
if (aoTones > 0.0) {
|
|
441
|
+
finalAo = ceil(finalAo * aoTones) / aoTones;
|
|
442
|
+
}
|
|
443
|
+
float fogFactor = 0.0;
|
|
444
|
+
if (fog) {
|
|
445
|
+
float fogDepth = -getWorldPos(depth, vUv).z;
|
|
446
|
+
if (fogExp) {
|
|
447
|
+
fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );
|
|
448
|
+
} else {
|
|
449
|
+
fogFactor = smoothstep( fogNear, fogFar, fogDepth );
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
if (transparencyAware) {
|
|
453
|
+
float transparencyDWOff = texture2D(transparencyDWFalse, vUv).a;
|
|
454
|
+
float transparencyDWOn = texture2D(transparencyDWTrue, vUv).a;
|
|
455
|
+
float adjustmentFactorOff = transparencyDWOff;
|
|
456
|
+
float depthSample = texture2D(sceneDepth, vUv).r;
|
|
457
|
+
float trueDepthSample = texture2D(transparencyDWTrueDepth, vUv).r;
|
|
458
|
+
float adjustmentFactorOn = (1.0 - transparencyDWOn) * (
|
|
459
|
+
trueDepthSample == depthSample ? 1.0 : 0.0
|
|
460
|
+
);
|
|
461
|
+
float adjustmentFactor = max(adjustmentFactorOff, adjustmentFactorOn);
|
|
462
|
+
finalAo = mix(finalAo, 1.0, adjustmentFactor);
|
|
463
|
+
}
|
|
464
|
+
finalAo = mix(finalAo, 1.0, fogFactor);
|
|
465
|
+
vec3 aoApplied = color * mix(vec3(1.0), sceneTexel.rgb, float(colorMultiply));
|
|
466
|
+
if (renderMode == 0.0) {
|
|
467
|
+
gl_FragColor = vec4( mix(sceneTexel.rgb, aoApplied, 1.0 - finalAo), sceneTexel.a);
|
|
468
|
+
} else if (renderMode == 1.0) {
|
|
469
|
+
gl_FragColor = vec4( mix(vec3(1.0), aoApplied, 1.0 - finalAo), sceneTexel.a);
|
|
470
|
+
} else if (renderMode == 2.0) {
|
|
471
|
+
gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a);
|
|
472
|
+
} else if (renderMode == 3.0) {
|
|
473
|
+
if (vUv.x < 0.5) {
|
|
474
|
+
gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a);
|
|
475
|
+
} else if (abs(vUv.x - 0.5) < 1.0 / resolution.x) {
|
|
476
|
+
gl_FragColor = vec4(1.0);
|
|
477
|
+
} else {
|
|
478
|
+
gl_FragColor = vec4( mix(sceneTexel.rgb, aoApplied, 1.0 - finalAo), sceneTexel.a);
|
|
479
|
+
}
|
|
480
|
+
} else if (renderMode == 4.0) {
|
|
481
|
+
if (vUv.x < 0.5) {
|
|
482
|
+
gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a);
|
|
483
|
+
} else if (abs(vUv.x - 0.5) < 1.0 / resolution.x) {
|
|
484
|
+
gl_FragColor = vec4(1.0);
|
|
485
|
+
} else {
|
|
486
|
+
gl_FragColor = vec4( mix(vec3(1.0), aoApplied, 1.0 - finalAo), sceneTexel.a);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
#include <dithering_fragment>
|
|
490
|
+
if (gammaCorrection) {
|
|
491
|
+
gl_FragColor = sRGBTransferOETF(gl_FragColor);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
`},z={};z=JSON.parse(`{"architecture":"attention-v3-int8","formatVersion":3,"globalBias":[-0.32877659797668457,0.4370867609977722,-0.05251404270529747,1.3072023391723633,0.0477047860622406,0.24477416276931763,0.009111796505749226,-0.17459993064403534],"globalFeatureInverseStandardDeviation":[10.771836280822754,1.9548665285110474,1.612365484237671],"globalFeatureMean":[0.9198138117790222,-0.49808526039123535,0.03374629095196724],"globalWeights":[101,-4,7,-127,6,-11,3,1,0,-16,-7,8,-8,-1,7,-4,0,0,-12,-3,-13,1,0,2],"headBias":[-0.15895532071590424,0.007501596584916115,-0.47742825746536255,0.01632097363471985,-0.48355796933174133,-0.1052703931927681,-0.8414919376373291,-0.21046382188796997],"headWeights":[-45,-7,-45,-20,7,-13,120,-24,-15,-26,-19,1,27,-48,-4,-10,1,-5,-24,64,91,-1,-68,39,54,39,101,-40,-127,64,-41,-17,-23,-19,3,35,-2,33,3,9,-64,-32,30,42,-112,12,28,-11,15,2,-4,-7,7,-3,-5,1,76,48,-34,-67,103,-40,-26,1,58,-11,46,-41,5,-6,-17,-8,13,17,-35,45,27,-17,-28,7,-53,12,-51,6,-32,-5,58,-9,-28,-21,37,-12,1,20,2,2,11,7,-4,-9,2,-15,-1,-8,16,12,-27,-1,61,-5,-1,4,-7,-2,7,4,1,4,-2,4,-18,-16,28,6,-65,16,3,-3,-5,-2,0,-40,-21,-22,14,30,-21,49,15,-64,43,19,23,18,5,-15,21,21,30,17,-11,-6,22,-38,-20,97,-46,-5,-13,-59,26,-13,11,-2,-10,-8,2,-15,-17,-27,-9,26,7,-7,6,9,-32,5,-9,12,49,17,-1,24,20,35,14,-33,-50,-1,-4,-26,11,11,9,-80,30,9,36,6,-12,-4,-7,39,-10,-30,-49,1,-43,-20,-34,76,-36,-10,15,-8,43,31,38,-42,39,37,-7,7,8,16,28,-83,32,9,23,-13,39,119,23,-127,-24,8,-48,-29,-7,-33,-12,58,-24,-29,-19,12,-55,-90,0,126,26,42,54,22],"keyProjectionWeights":[0,-1,-1,1,1,1,1,1,-64,32,49,23,-25,4,27,-22,0,1,-1,-1,-1,1,1,0,-34,38,64,88,13,-53,-41,58,-7,-4,79,-41,27,26,14,2,-2,1,1,1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,4,-3,126,42,-40,-116,35,20],"name":"residual-attention-v3-50m-qat-int8-epoch-25-zo-278w","outputBias":-0.0005526235327124596,"outputWeights":[11,11,14,-27,9,-22,127,6],"quantization":{"scales":{"globalWeight":0.021090541950849095,"headWeight":0.04935851140909355,"keyWeight":0.1733924937791441,"outputWeight":0.0030087142047955295,"tapInputWeight":0.1096231754049479,"tapOutputWeight":0.017949438644286102,"valueWeight":0.013986751242596301},"scheme":"symmetric-int8-per-tensor","zeroPoint":0},"summaryQueries":[0.0038647791370749474,0.09565000981092453,0.002756686182692647,-0.08183622360229492,-0.15209506452083588,-0.0006105066277086735,0.0010439646430313587,-0.03020688332617283,0.005065929610282183,0.14488759636878967,0.003160916268825531,-0.0855727270245552,-0.3123375475406647,0.00039022407145239413,0.0037786494940519333,0.1451321840286255,-0.002009483054280281,0.0597594790160656,0.0045239729806780815,-0.08765853196382523,-0.13884992897510529,-0.0021647117100656033,0.003985927440226078,0.09727758169174194,0.007170629221946001,0.0786278173327446,0.004103775601834059,-0.1198369711637497,-0.2925199568271637,-0.002055276418104768,0.0030450925696641207,0.14401987195014954],"supportedDenoiseSamples":[4,8,16],"tapFeatureInverseStandardDeviation":[2.283243417739868,0.8810898065567017,0.8210930228233337,3.752316474914551,3.6375720500946045,2.670454978942871,10.249449729919434,0.12639354169368744,100],"tapFeatureMean":[0.010318092070519924,0.01364430133253336,0.13411010801792145,-0.004725644364953041,0.10053129494190216,0.8384788632392883,0.9203217625617981,1.7139031887054443,1],"tapInputBias":[0.4780646860599518,-0.45214661955833435,0.289407879114151,0.34804567694664,-0.1320028454065323,0.17722633481025696,0.011480014771223068,-0.26692497730255127],"tapInputWeights":[0,1,7,0,-1,-7,0,31,-2,-1,14,-126,0,0,-1,2,26,-2,0,66,-73,0,0,0,-12,22,-3,0,-76,-90,0,-1,-7,-3,58,-1,0,2,6,0,0,3,4,-40,0,0,3,-13,0,0,1,-7,-13,0,0,-7,10,0,-2,-7,0,-39,-2,0,-13,-19,0,-2,20,-1,3,-1],"tapOutputBias":[-0.3867710530757904,0.1349504142999649,0.35706064105033875,-0.5938405394554138,-0.031154220923781395,1.4079623222351074,-1.9221038818359375,0.6029739379882812],"tapOutputWeights":[18,-4,47,19,74,-94,-21,-9,73,-59,88,-10,-3,71,-7,24,20,74,24,-31,-12,-10,-15,-45,-126,2,-4,27,-5,24,35,-11,-4,9,-8,26,-10,27,26,-20,17,-50,5,-35,0,-5,12,-71,89,-58,22,-83,-115,7,-16,-89,89,22,1,-20,-22,-25,-26,44],"valueProjectionWeights":[-16,-6,40,-17,84,-76,59,51,-10,-2,-10,-1,-23,74,-70,23,-5,4,4,-7,-77,127,20,-48,-36,4,-17,-12,-4,10,29,-27,-2,11,-47,-50,-54,-3,14,11,-23,-1,109,31,4,-100,-33,-36,-19,0,-8,20,-35,-24,79,2,44,2,5,7,22,-70,-67,-35]}`);var We=[[`tapInputWeight`,`tapInputWeights`,8,9],[`tapOutputWeight`,`tapOutputWeights`,8,8],[`globalWeight`,`globalWeights`,8,3],[`keyWeight`,`keyProjectionWeights`,8,8],[`valueWeight`,`valueProjectionWeights`,8,8],[`headWeight`,`headWeights`,8,32],[`outputWeight`,`outputWeights`,1,8]],B=e=>{let t=L(z).quantization?.scales?.[e];if(!(t>0)||!Number.isFinite(t))throw Error(`The bundled N8AO neural model has no valid ${e} scale.`);return t};if(L(z).architecture!==`attention-v3-int8`||L(z).formatVersion!==3||L(z).quantization?.scheme!==`symmetric-int8-per-tensor`||L(z).quantization?.zeroPoint!==0||L(z).supportedDenoiseSamples?.join(`,`)!==`4,8,16`||We.some(([,e,t,n])=>L(z)[e]?.length!==t*n||L(z)[e].some(e=>!Number.isInteger(e)||e<-127||e>127)))throw Error(`The bundled N8AO neural denoise model has an unsupported layout.`);var V=e=>{if(!Number.isFinite(e))throw Error(`The bundled N8AO neural model contains a non-finite value.`);if(Object.is(e,-0))return`0.0`;let t=Number(e).toString();return/[.eE]/.test(t)?t:`${t}.0`},H=[`x`,`y`,`z`,`w`],Ge=e=>[...H.map(t=>`${e}.lo.${t}`),...H.map(t=>`${e}.hi.${t}`)],Ke=(e,t)=>e===0?null:e===1?t:e===-1?`(-${t})`:e<0?`(-${V(-e)} * ${t})`:`${V(e)} * ${t}`,qe=(e,t)=>e===0?null:`${V(e)} * ${t}`,Je=e=>e.filter(Boolean).join(` + `)||`0.0`,U=(e,t,n,r,i,a)=>{let o=r.map((r,i)=>Ke(e[t*n+i],r));return`${V(i)} * (${Je(o)}) + ${V(a[t])}`},W=(e,t=` `)=>`vec4(\n${e.map(e=>`${t} ${e}`).join(`,
|
|
495
|
+
`)}\n${t})`,Ye=({functionName:e,scaleName:t,weights:n,bias:r,width:i=8,relu:a=!1})=>{let o=Ge(`inputToken`),s=B(t),c=Array.from({length:8},(e,t)=>U(n,t,i,o,s,r)),l=W(c.slice(0,4)),u=W(c.slice(4)),d=e=>a?`max(${e}, vec4(0.0))`:e;return`
|
|
496
|
+
NeuralToken neural${e[0].toUpperCase()}${e.slice(1)}(NeuralToken inputToken) {
|
|
497
|
+
return NeuralToken(
|
|
498
|
+
${d(l)},
|
|
499
|
+
${d(u)}
|
|
500
|
+
);
|
|
501
|
+
}
|
|
502
|
+
`},Xe=(e,t,n,r,i,a,o,s={})=>Array.from({length:i},(i,c)=>{let l=t[c];for(let t=0;t<a;t++){let i=e[c*a+t]*o;l-=i*r[t]*n[t],Object.hasOwn(s,t)&&(l+=i*r[t]*s[t])}return l}),Ze=B(`tapInputWeight`),Qe=Xe(L(z).tapInputWeights,L(z).tapInputBias,L(z).tapFeatureMean,L(z).tapFeatureInverseStandardDeviation,8,9,Ze,{8:1}),$e=Ge(`scaledInput`),et=Array.from({length:8},(e,t)=>U(L(z).tapInputWeights,t,9,$e,Ze,Qe)),tt=`
|
|
503
|
+
NeuralToken neuralTapInput(NeuralToken raw) {
|
|
504
|
+
NeuralToken scaledInput = NeuralToken(
|
|
505
|
+
raw.lo * ${W(L(z).tapFeatureInverseStandardDeviation.slice(0,4),` `)},
|
|
506
|
+
raw.hi * ${W(L(z).tapFeatureInverseStandardDeviation.slice(4,8),` `)}
|
|
507
|
+
);
|
|
508
|
+
return NeuralToken(
|
|
509
|
+
max(${W(et.slice(0,4))}, vec4(0.0)),
|
|
510
|
+
max(${W(et.slice(4))}, vec4(0.0))
|
|
511
|
+
);
|
|
512
|
+
}
|
|
513
|
+
`,nt=B(`globalWeight`),rt=Xe(L(z).globalWeights,L(z).globalBias,L(z).globalFeatureMean,L(z).globalFeatureInverseStandardDeviation,8,3,nt),it=H.slice(0,3).map(e=>`scaledInput.${e}`),at=Array.from({length:8},(e,t)=>U(L(z).globalWeights,t,3,it,nt,rt)),ot=`
|
|
514
|
+
NeuralToken neuralEncodeGlobal(vec4 raw) {
|
|
515
|
+
vec3 scaledInput = raw.xyz * vec3(
|
|
516
|
+
${L(z).globalFeatureInverseStandardDeviation.map(V).join(`, `)}
|
|
517
|
+
);
|
|
518
|
+
return NeuralToken(
|
|
519
|
+
max(${W(at.slice(0,4))}, vec4(0.0)),
|
|
520
|
+
max(${W(at.slice(4))}, vec4(0.0))
|
|
521
|
+
);
|
|
522
|
+
}
|
|
523
|
+
`,st=Ge(`key`),ct=`
|
|
524
|
+
vec4 neuralQueryScores(NeuralToken key) {
|
|
525
|
+
return ${W(Array.from({length:4},(e,t)=>Je(st.map((e,n)=>qe(L(z).summaryQueries[t*8+n],e)))))};
|
|
526
|
+
}
|
|
527
|
+
`,lt=[];for(let e=0;e<4;e++)lt.push(...H.map(t=>`runningSummaryLo[${e}].${t}`),...H.map(t=>`runningSummaryHi[${e}].${t}`));var ut=B(`headWeight`),dt=Array.from({length:8},(e,t)=>U(L(z).headWeights,t,32,lt,ut,L(z).headBias)),ft=`
|
|
528
|
+
NeuralToken neuralHead(
|
|
529
|
+
vec4 runningSummaryLo[4],
|
|
530
|
+
vec4 runningSummaryHi[4]
|
|
531
|
+
) {
|
|
532
|
+
return NeuralToken(
|
|
533
|
+
max(${W(dt.slice(0,4))}, vec4(0.0)),
|
|
534
|
+
max(${W(dt.slice(4))}, vec4(0.0))
|
|
535
|
+
);
|
|
536
|
+
}
|
|
537
|
+
`,pt=`
|
|
538
|
+
float neuralOutput(NeuralToken head) {
|
|
539
|
+
return ${U(L(z).outputWeights,0,8,Ge(`head`),B(`outputWeight`),[L(z).outputBias])};
|
|
540
|
+
}
|
|
541
|
+
`,mt=[tt,Ye({functionName:`tapOutput`,scaleName:`tapOutputWeight`,weights:L(z).tapOutputWeights,bias:L(z).tapOutputBias,relu:!0}),ot,Ye({functionName:`keyProject`,scaleName:`keyWeight`,weights:L(z).keyProjectionWeights,bias:Array(8).fill(0)}),Ye({functionName:`valueProject`,scaleName:`valueWeight`,weights:L(z).valueProjectionWeights,bias:Array(8).fill(0)}),ct,ft,pt].join(`
|
|
542
|
+
`);We.reduce((e,[,t])=>e+L(z)[t].length,0),We.reduce((e,[,t])=>e+L(z)[t].filter(e=>e!==0).length,0);var ht={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},tDiffuse:{value:null},projMat:{value:new y},viewMat:{value:new y},projectionMatrixInv:{value:new y},viewMatrixInv:{value:new y},cameraPos:{value:new m},resolution:{value:new c},time:{value:0},r:{value:5},blueNoise:{value:null},radius:{value:12},worldRadius:{value:5},index:{value:0},poissonDisk:{value:[]},distanceFalloff:{value:1},near:{value:.1},far:{value:1e3},screenSpaceRadius:{value:!1}},depthWrite:!1,depthTest:!1,vertexShader:`
|
|
543
|
+
varying vec2 vUv;
|
|
544
|
+
void main() {
|
|
545
|
+
vUv = uv;
|
|
546
|
+
gl_Position = vec4(position, 1.0);
|
|
547
|
+
}`,fragmentShader:`
|
|
548
|
+
uniform sampler2D sceneDiffuse;
|
|
549
|
+
uniform highp sampler2D sceneDepth;
|
|
550
|
+
uniform sampler2D tDiffuse;
|
|
551
|
+
uniform sampler2D blueNoise;
|
|
552
|
+
uniform mat4 projectionMatrixInv;
|
|
553
|
+
uniform mat4 viewMatrixInv;
|
|
554
|
+
uniform vec2 resolution;
|
|
555
|
+
uniform float r;
|
|
556
|
+
uniform float radius;
|
|
557
|
+
uniform float worldRadius;
|
|
558
|
+
uniform float index;
|
|
559
|
+
uniform float near;
|
|
560
|
+
uniform float far;
|
|
561
|
+
uniform float distanceFalloff;
|
|
562
|
+
uniform bool screenSpaceRadius;
|
|
563
|
+
varying vec2 vUv;
|
|
564
|
+
|
|
565
|
+
highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
|
|
566
|
+
{
|
|
567
|
+
highp float z_n = 2.0 * d - 1.0;
|
|
568
|
+
return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear));
|
|
569
|
+
}
|
|
570
|
+
highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
|
|
571
|
+
float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0;
|
|
572
|
+
float a = farZ / (farZ - nearZ);
|
|
573
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
574
|
+
float linDepth = a + b / depth;
|
|
575
|
+
return linearize_depth(linDepth, nearZ, farZ);
|
|
576
|
+
}
|
|
577
|
+
highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
|
|
578
|
+
return nearZ + (farZ - nearZ) * d;
|
|
579
|
+
}
|
|
580
|
+
float depthToClipZ(float depth) {
|
|
581
|
+
#ifdef REVERSEDEPTH
|
|
582
|
+
return depth;
|
|
583
|
+
#else
|
|
584
|
+
return depth * 2.0 - 1.0;
|
|
585
|
+
#endif
|
|
586
|
+
}
|
|
587
|
+
bool isBackgroundDepth(float depth) {
|
|
588
|
+
#ifdef REVERSEDEPTH
|
|
589
|
+
return depth == 0.0;
|
|
590
|
+
#else
|
|
591
|
+
return depth == 1.0;
|
|
592
|
+
#endif
|
|
593
|
+
}
|
|
594
|
+
vec3 getWorldPosLog(vec3 posS) {
|
|
595
|
+
vec2 uv = posS.xy;
|
|
596
|
+
float z = posS.z;
|
|
597
|
+
float nearZ =near;
|
|
598
|
+
float farZ = far;
|
|
599
|
+
float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;
|
|
600
|
+
float a = farZ / (farZ - nearZ);
|
|
601
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
602
|
+
float linDepth = a + b / depth;
|
|
603
|
+
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;
|
|
604
|
+
vec4 wpos = projectionMatrixInv * clipVec;
|
|
605
|
+
return wpos.xyz / wpos.w;
|
|
606
|
+
}
|
|
607
|
+
vec3 getWorldPos(float depth, vec2 coord) {
|
|
608
|
+
#ifdef LOGDEPTH
|
|
609
|
+
#ifndef ORTHO
|
|
610
|
+
return getWorldPosLog(vec3(coord, depth));
|
|
611
|
+
#endif
|
|
612
|
+
#endif
|
|
613
|
+
|
|
614
|
+
#ifdef ORTHO
|
|
615
|
+
float z = depthToClipZ(depth);
|
|
616
|
+
vec4 clipSpacePosition = vec4(coord * 2. - 1., z, 1.);
|
|
617
|
+
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
|
|
618
|
+
viewSpacePosition.xyz /= viewSpacePosition.w;
|
|
619
|
+
return viewSpacePosition.xyz;
|
|
620
|
+
#else
|
|
621
|
+
vec2 ndc = coord * 2. - 1.;
|
|
622
|
+
float ndcZ = depthToClipZ(depth);
|
|
623
|
+
mat4 Q = projectionMatrixInv;
|
|
624
|
+
vec3 view = vec3(Q[0][0] * ndc.x + Q[3][0], Q[1][1] * ndc.y + Q[3][1], Q[3][2]);
|
|
625
|
+
float invW = 1.0 / (Q[2][3] * ndcZ + Q[3][3]);
|
|
626
|
+
return view * invW;
|
|
627
|
+
#endif
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
#ifdef NEURAL_DENOISE
|
|
631
|
+
struct NeuralToken {
|
|
632
|
+
highp vec4 lo;
|
|
633
|
+
highp vec4 hi;
|
|
634
|
+
};
|
|
635
|
+
|
|
636
|
+
${mt}
|
|
637
|
+
|
|
638
|
+
vec3 neuralSafeNormalize(vec3 value, vec3 fallback) {
|
|
639
|
+
float lengthSquared = dot(value, value);
|
|
640
|
+
return lengthSquared > 1e-12 ? value * inversesqrt(lengthSquared) : fallback;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
mat3 neuralLocalFrame(vec3 inputNormal) {
|
|
644
|
+
vec3 frameNormal = neuralSafeNormalize(inputNormal, vec3(0.0, 0.0, 1.0));
|
|
645
|
+
vec3 helper = abs(frameNormal.z) < 0.999
|
|
646
|
+
? vec3(0.0, 0.0, 1.0)
|
|
647
|
+
: vec3(0.0, 1.0, 0.0);
|
|
648
|
+
vec3 tangent = neuralSafeNormalize(
|
|
649
|
+
cross(helper, frameNormal),
|
|
650
|
+
vec3(1.0, 0.0, 0.0)
|
|
651
|
+
);
|
|
652
|
+
vec3 bitangent = cross(frameNormal, tangent);
|
|
653
|
+
return transpose(mat3(tangent, bitangent, frameNormal));
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
void neuralConsumeToken(
|
|
657
|
+
NeuralToken token,
|
|
658
|
+
inout vec4 runningMaximum,
|
|
659
|
+
inout vec4 runningDenominator,
|
|
660
|
+
inout vec4 runningSummaryLo[4],
|
|
661
|
+
inout vec4 runningSummaryHi[4]
|
|
662
|
+
) {
|
|
663
|
+
NeuralToken key = neuralKeyProject(token);
|
|
664
|
+
NeuralToken value = neuralValueProject(token);
|
|
665
|
+
vec4 score = neuralQueryScores(key) * 0.3535533905932738;
|
|
666
|
+
vec4 newMaximum = max(runningMaximum, score);
|
|
667
|
+
vec4 oldScale = exp(runningMaximum - newMaximum);
|
|
668
|
+
vec4 newScale = exp(score - newMaximum);
|
|
669
|
+
|
|
670
|
+
runningSummaryLo[0] = runningSummaryLo[0] * oldScale.x + value.lo * newScale.x;
|
|
671
|
+
runningSummaryHi[0] = runningSummaryHi[0] * oldScale.x + value.hi * newScale.x;
|
|
672
|
+
runningSummaryLo[1] = runningSummaryLo[1] * oldScale.y + value.lo * newScale.y;
|
|
673
|
+
runningSummaryHi[1] = runningSummaryHi[1] * oldScale.y + value.hi * newScale.y;
|
|
674
|
+
runningSummaryLo[2] = runningSummaryLo[2] * oldScale.z + value.lo * newScale.z;
|
|
675
|
+
runningSummaryHi[2] = runningSummaryHi[2] * oldScale.z + value.hi * newScale.z;
|
|
676
|
+
runningSummaryLo[3] = runningSummaryLo[3] * oldScale.w + value.lo * newScale.w;
|
|
677
|
+
runningSummaryHi[3] = runningSummaryHi[3] * oldScale.w + value.hi * newScale.w;
|
|
678
|
+
runningDenominator = runningDenominator * oldScale + newScale;
|
|
679
|
+
runningMaximum = newMaximum;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
void neuralEncodeTap(
|
|
683
|
+
NeuralToken raw,
|
|
684
|
+
inout vec4 runningMaximum,
|
|
685
|
+
inout vec4 runningDenominator,
|
|
686
|
+
inout vec4 runningSummaryLo[4],
|
|
687
|
+
inout vec4 runningSummaryHi[4]
|
|
688
|
+
) {
|
|
689
|
+
NeuralToken first = neuralTapInput(raw);
|
|
690
|
+
NeuralToken token = neuralTapOutput(first);
|
|
691
|
+
neuralConsumeToken(
|
|
692
|
+
token,
|
|
693
|
+
runningMaximum,
|
|
694
|
+
runningDenominator,
|
|
695
|
+
runningSummaryLo,
|
|
696
|
+
runningSummaryHi
|
|
697
|
+
);
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
float neuralFinish(
|
|
701
|
+
float baselineAO,
|
|
702
|
+
inout vec4 runningMaximum,
|
|
703
|
+
inout vec4 runningDenominator,
|
|
704
|
+
inout vec4 runningSummaryLo[4],
|
|
705
|
+
inout vec4 runningSummaryHi[4]
|
|
706
|
+
) {
|
|
707
|
+
vec4 raw = vec4(
|
|
708
|
+
baselineAO,
|
|
709
|
+
log(max(worldRadius, 1e-6)),
|
|
710
|
+
log(max(distanceFalloff, 1e-6)),
|
|
711
|
+
0.0
|
|
712
|
+
);
|
|
713
|
+
NeuralToken token = neuralEncodeGlobal(raw);
|
|
714
|
+
neuralConsumeToken(
|
|
715
|
+
token,
|
|
716
|
+
runningMaximum,
|
|
717
|
+
runningDenominator,
|
|
718
|
+
runningSummaryLo,
|
|
719
|
+
runningSummaryHi
|
|
720
|
+
);
|
|
721
|
+
|
|
722
|
+
vec4 inverseDenominator = 1.0 / max(runningDenominator, vec4(1e-12));
|
|
723
|
+
runningSummaryLo[0] *= inverseDenominator.x;
|
|
724
|
+
runningSummaryHi[0] *= inverseDenominator.x;
|
|
725
|
+
runningSummaryLo[1] *= inverseDenominator.y;
|
|
726
|
+
runningSummaryHi[1] *= inverseDenominator.y;
|
|
727
|
+
runningSummaryLo[2] *= inverseDenominator.z;
|
|
728
|
+
runningSummaryHi[2] *= inverseDenominator.z;
|
|
729
|
+
runningSummaryLo[3] *= inverseDenominator.w;
|
|
730
|
+
runningSummaryHi[3] *= inverseDenominator.w;
|
|
731
|
+
|
|
732
|
+
NeuralToken head = neuralHead(runningSummaryLo, runningSummaryHi);
|
|
733
|
+
return neuralOutput(head);
|
|
734
|
+
}
|
|
735
|
+
#endif
|
|
736
|
+
|
|
737
|
+
#include <common>
|
|
738
|
+
#define NUM_SAMPLES __N8AO_DENOISE_SAMPLES__
|
|
739
|
+
uniform vec2 poissonDisk[NUM_SAMPLES];
|
|
740
|
+
void main() {
|
|
741
|
+
const float pi = 3.14159;
|
|
742
|
+
vec2 texelSize = vec2(1.0 / resolution.x, 1.0 / resolution.y);
|
|
743
|
+
vec2 uv = vUv;
|
|
744
|
+
vec4 data = texture2D(tDiffuse, vUv);
|
|
745
|
+
float occlusion = data.r;
|
|
746
|
+
float baseOcc = data.r;
|
|
747
|
+
vec3 normal = data.gba * 2.0 - 1.0;
|
|
748
|
+
float count = 1.0;
|
|
749
|
+
float d = texture2D(sceneDepth, vUv).x;
|
|
750
|
+
if (isBackgroundDepth(d)) {
|
|
751
|
+
gl_FragColor = data;
|
|
752
|
+
return;
|
|
753
|
+
}
|
|
754
|
+
vec3 worldPos = getWorldPos(d, vUv);
|
|
755
|
+
float size = radius;
|
|
756
|
+
float angle;
|
|
757
|
+
#ifdef NEURAL_DENOISE
|
|
758
|
+
// The neural material is only bound for denoise iteration two.
|
|
759
|
+
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).z * PI2;
|
|
760
|
+
#else
|
|
761
|
+
if (index == 0.0) {
|
|
762
|
+
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).w * PI2;
|
|
763
|
+
} else if (index == 1.0) {
|
|
764
|
+
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).z * PI2;
|
|
765
|
+
} else if (index == 2.0) {
|
|
766
|
+
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).y * PI2;
|
|
767
|
+
} else {
|
|
768
|
+
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).x * PI2;
|
|
769
|
+
}
|
|
770
|
+
#endif
|
|
771
|
+
|
|
772
|
+
mat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));
|
|
773
|
+
float radiusToUse = screenSpaceRadius ? distance(
|
|
774
|
+
worldPos,
|
|
775
|
+
getWorldPos(d, vUv +
|
|
776
|
+
vec2(worldRadius, 0.0) / resolution)
|
|
777
|
+
) : worldRadius;
|
|
778
|
+
float distanceFalloffToUse =screenSpaceRadius ?
|
|
779
|
+
radiusToUse * distanceFalloff
|
|
780
|
+
: radiusToUse * distanceFalloff * 0.2;
|
|
781
|
+
|
|
782
|
+
float invDistance = (1.0 / distanceFalloffToUse);
|
|
783
|
+
#ifdef NEURAL_DENOISE
|
|
784
|
+
mat3 neuralWorldToLocal = neuralLocalFrame(normal);
|
|
785
|
+
float neuralInverseRadius = 1.0 / max(radiusToUse, 1e-6);
|
|
786
|
+
float neuralInverseDistance = 1.0 / max(distanceFalloffToUse, 1e-6);
|
|
787
|
+
vec4 neuralMaximum = vec4(-1e30);
|
|
788
|
+
vec4 neuralDenominator = vec4(0.0);
|
|
789
|
+
vec4 neuralSummaryLo[4];
|
|
790
|
+
vec4 neuralSummaryHi[4];
|
|
791
|
+
for (int query = 0; query < 4; query++) {
|
|
792
|
+
neuralSummaryLo[query] = vec4(0.0);
|
|
793
|
+
neuralSummaryHi[query] = vec4(0.0);
|
|
794
|
+
}
|
|
795
|
+
#endif
|
|
796
|
+
for(int i = 0; i < NUM_SAMPLES; i++) {
|
|
797
|
+
vec2 offset = (rotationMatrix * poissonDisk[i]) * texelSize * size;
|
|
798
|
+
vec4 dataSample = texture2D(tDiffuse, uv + offset);
|
|
799
|
+
float occSample = dataSample.r;
|
|
800
|
+
vec3 normalSample = dataSample.gba * 2.0 - 1.0;
|
|
801
|
+
float dSample = texture2D(sceneDepth, uv + offset).x;
|
|
802
|
+
vec3 worldPosSample = getWorldPos(dSample, uv + offset);
|
|
803
|
+
float tangentPlaneDist = abs(dot(worldPosSample - worldPos, normal));
|
|
804
|
+
float rangeCheck = float(!isBackgroundDepth(dSample)) * exp(-1.0 * tangentPlaneDist * invDistance ) * max(dot(normal, normalSample), 0.0);
|
|
805
|
+
occlusion += occSample * rangeCheck;
|
|
806
|
+
count += rangeCheck;
|
|
807
|
+
#ifdef NEURAL_DENOISE
|
|
808
|
+
if (!isBackgroundDepth(dSample)) {
|
|
809
|
+
vec3 localDelta = (neuralWorldToLocal * (worldPosSample - worldPos))
|
|
810
|
+
* neuralInverseRadius;
|
|
811
|
+
vec3 localNormal = neuralWorldToLocal
|
|
812
|
+
* neuralSafeNormalize(normalSample, vec3(0.0, 0.0, 1.0));
|
|
813
|
+
NeuralToken rawTap = NeuralToken(
|
|
814
|
+
vec4(localDelta, localNormal.x),
|
|
815
|
+
vec4(
|
|
816
|
+
localNormal.y,
|
|
817
|
+
localNormal.z,
|
|
818
|
+
occSample,
|
|
819
|
+
tangentPlaneDist * neuralInverseDistance
|
|
820
|
+
)
|
|
821
|
+
);
|
|
822
|
+
neuralEncodeTap(
|
|
823
|
+
rawTap,
|
|
824
|
+
neuralMaximum,
|
|
825
|
+
neuralDenominator,
|
|
826
|
+
neuralSummaryLo,
|
|
827
|
+
neuralSummaryHi
|
|
828
|
+
);
|
|
829
|
+
}
|
|
830
|
+
#endif
|
|
831
|
+
}
|
|
832
|
+
if (count > 0.0) {
|
|
833
|
+
occlusion /= count;
|
|
834
|
+
}
|
|
835
|
+
occlusion = clamp(occlusion, 0.0, 1.0);
|
|
836
|
+
if (occlusion == 0.0) {
|
|
837
|
+
occlusion = 1.0;
|
|
838
|
+
}
|
|
839
|
+
#ifdef NEURAL_DENOISE
|
|
840
|
+
occlusion = clamp(
|
|
841
|
+
occlusion + neuralFinish(
|
|
842
|
+
occlusion,
|
|
843
|
+
neuralMaximum,
|
|
844
|
+
neuralDenominator,
|
|
845
|
+
neuralSummaryLo,
|
|
846
|
+
neuralSummaryHi
|
|
847
|
+
),
|
|
848
|
+
0.0,
|
|
849
|
+
1.0
|
|
850
|
+
);
|
|
851
|
+
#endif
|
|
852
|
+
gl_FragColor = vec4(occlusion, 0.5 + 0.5 * normal);
|
|
853
|
+
}
|
|
854
|
+
`},gt={uniforms:{sceneDepth:{value:null},resolution:{value:new c},near:{value:.1},far:{value:1e3},viewMatrixInv:{value:new y},projectionMatrixInv:{value:new y},logDepth:{value:!1},ortho:{value:!1}},depthWrite:!1,depthTest:!1,vertexShader:`
|
|
855
|
+
varying vec2 vUv;
|
|
856
|
+
void main() {
|
|
857
|
+
vUv = uv;
|
|
858
|
+
gl_Position = vec4(position, 1);
|
|
859
|
+
}`,fragmentShader:`
|
|
860
|
+
uniform highp sampler2D sceneDepth;
|
|
861
|
+
uniform vec2 resolution;
|
|
862
|
+
uniform float near;
|
|
863
|
+
uniform float far;
|
|
864
|
+
uniform bool logDepth;
|
|
865
|
+
uniform bool ortho;
|
|
866
|
+
uniform mat4 viewMatrixInv;
|
|
867
|
+
uniform mat4 projectionMatrixInv;
|
|
868
|
+
varying vec2 vUv;
|
|
869
|
+
layout(location = 1) out vec4 gNormal;
|
|
870
|
+
vec3 getWorldPosLog(vec3 posS) {
|
|
871
|
+
vec2 uv = posS.xy;
|
|
872
|
+
float z = posS.z;
|
|
873
|
+
float nearZ =near;
|
|
874
|
+
float farZ = far;
|
|
875
|
+
float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0;
|
|
876
|
+
float a = farZ / (farZ - nearZ);
|
|
877
|
+
float b = farZ * nearZ / (nearZ - farZ);
|
|
878
|
+
float linDepth = a + b / depth;
|
|
879
|
+
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0;
|
|
880
|
+
vec4 wpos = projectionMatrixInv * clipVec;
|
|
881
|
+
return wpos.xyz / wpos.w;
|
|
882
|
+
}
|
|
883
|
+
vec3 getWorldPos(float depth, vec2 coord) {
|
|
884
|
+
if (logDepth && !ortho) {
|
|
885
|
+
return getWorldPosLog(vec3(coord, depth));
|
|
886
|
+
}
|
|
887
|
+
if (ortho) {
|
|
888
|
+
#ifdef REVERSEDEPTH
|
|
889
|
+
float z = depth;
|
|
890
|
+
#else
|
|
891
|
+
float z = depth * 2. - 1.;
|
|
892
|
+
#endif
|
|
893
|
+
vec4 clipSpacePosition = vec4(coord * 2. - 1., z, 1.);
|
|
894
|
+
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
|
|
895
|
+
viewSpacePosition.xyz /= viewSpacePosition.w;
|
|
896
|
+
return viewSpacePosition.xyz;
|
|
897
|
+
}
|
|
898
|
+
vec2 ndc = coord * 2. - 1.;
|
|
899
|
+
#ifdef REVERSEDEPTH
|
|
900
|
+
float ndcZ = depth;
|
|
901
|
+
#else
|
|
902
|
+
float ndcZ = depth * 2. - 1.;
|
|
903
|
+
#endif
|
|
904
|
+
mat4 Q = projectionMatrixInv;
|
|
905
|
+
vec3 view = vec3(Q[0][0] * ndc.x + Q[3][0], Q[1][1] * ndc.y + Q[3][1], Q[3][2]);
|
|
906
|
+
float invW = 1. / (Q[2][3] * ndcZ + Q[3][3]);
|
|
907
|
+
return view * invW;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
vec3 computeNormal(vec3 worldPos, vec2 vUv) {
|
|
911
|
+
ivec2 p = ivec2(vUv * resolution);
|
|
912
|
+
float c0 = texelFetch(sceneDepth, p, 0).x;
|
|
913
|
+
float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x;
|
|
914
|
+
float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x;
|
|
915
|
+
float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
|
|
916
|
+
float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
|
|
917
|
+
float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x;
|
|
918
|
+
float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x;
|
|
919
|
+
float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
|
|
920
|
+
float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
|
|
921
|
+
|
|
922
|
+
float dl = abs((2.0 * l1 - l2) - c0);
|
|
923
|
+
float dr = abs((2.0 * r1 - r2) - c0);
|
|
924
|
+
float db = abs((2.0 * b1 - b2) - c0);
|
|
925
|
+
float dt = abs((2.0 * t1 - t2) - c0);
|
|
926
|
+
|
|
927
|
+
vec3 ce = getWorldPos(c0, vUv).xyz;
|
|
928
|
+
|
|
929
|
+
vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz
|
|
930
|
+
: -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz;
|
|
931
|
+
vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz
|
|
932
|
+
: -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz;
|
|
933
|
+
|
|
934
|
+
return normalize(cross(dpdx, dpdy));
|
|
935
|
+
}
|
|
936
|
+
void main() {
|
|
937
|
+
vec2 uv = vUv - vec2(0.5) / resolution;
|
|
938
|
+
vec2 pixelSize = vec2(1.0) / resolution;
|
|
939
|
+
highp vec2[4] uvSamples;
|
|
940
|
+
uvSamples[0] = uv;
|
|
941
|
+
uvSamples[1] = uv + vec2(pixelSize.x, 0.0);
|
|
942
|
+
uvSamples[2] = uv + vec2(0.0, pixelSize.y);
|
|
943
|
+
uvSamples[3] = uv + pixelSize;
|
|
944
|
+
float depth00 = texture2D(sceneDepth, uvSamples[0]).r;
|
|
945
|
+
float depth10 = texture2D(sceneDepth, uvSamples[1]).r;
|
|
946
|
+
float depth01 = texture2D(sceneDepth, uvSamples[2]).r;
|
|
947
|
+
float depth11 = texture2D(sceneDepth, uvSamples[3]).r;
|
|
948
|
+
float minDepth = min(min(depth00, depth10), min(depth01, depth11));
|
|
949
|
+
float maxDepth = max(max(depth00, depth10), max(depth01, depth11));
|
|
950
|
+
float targetDepth = minDepth;
|
|
951
|
+
// Checkerboard pattern to avoid artifacts
|
|
952
|
+
if (mod(gl_FragCoord.x + gl_FragCoord.y, 2.0) > 0.5) {
|
|
953
|
+
targetDepth = maxDepth;
|
|
954
|
+
}
|
|
955
|
+
int chosenIndex = 0;
|
|
956
|
+
float[4] samples;
|
|
957
|
+
samples[0] = depth00;
|
|
958
|
+
samples[1] = depth10;
|
|
959
|
+
samples[2] = depth01;
|
|
960
|
+
samples[3] = depth11;
|
|
961
|
+
for(int i = 0; i < 4; ++i) {
|
|
962
|
+
if (samples[i] == targetDepth) {
|
|
963
|
+
chosenIndex = i;
|
|
964
|
+
break;
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
gl_FragColor = vec4(samples[chosenIndex], 0.0, 0.0, 1.0);
|
|
968
|
+
gNormal = vec4(computeNormal(
|
|
969
|
+
getWorldPos(samples[chosenIndex], uvSamples[chosenIndex]), uvSamples[chosenIndex]
|
|
970
|
+
), 0.0);
|
|
971
|
+
}`},_t=Uint8Array.from(atob(`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`),e=>e.charCodeAt(0)),vt=parseInt(`186`.replace(/\D+/g,``))>=162?class extends s{constructor(e=1,t=1,n=1,r={}){super(e,t,{...r,count:n}),this.isWebGLMultipleRenderTargets=!0}get texture(){return this.textures}}:class extends s{constructor(e=1,t=1,n=1,r={}){super(e,t,r),this.isWebGLMultipleRenderTargets=!0;let i=this.texture;this.texture=[];for(let e=0;e<n;e++)this.texture[e]=i.clone(),this.texture[e].isRenderTargetTexture=!0}setSize(e,t,n=1){if(this.width!==e||this.height!==t||this.depth!==n){this.width=e,this.height=t,this.depth=n;for(let r=0,i=this.texture.length;r<i;r++)this.texture[r].image.width=e,this.texture[r].image.height=t,this.texture[r].image.depth=n;this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}copy(e){this.dispose(),this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,e.depthTexture!==null&&(this.depthTexture=e.depthTexture.clone()),this.texture.length=0;for(let t=0,n=e.texture.length;t<n;t++)this.texture[t]=e.texture[t].clone(),this.texture[t].isRenderTargetTexture=!0;return this}};function yt(e,t,n){if(t.getQueryParameter(e,t.QUERY_RESULT_AVAILABLE)){let r=t.getQueryParameter(e,t.QUERY_RESULT)/1e6;n.lastTime=n.lastTime===0?r:n.timeRollingAverage*n.lastTime+(1-n.timeRollingAverage)*r}else setTimeout(()=>{yt(e,t,n)},1)}var bt=class extends me{constructor(e,t,n=512,r=512){super(),this.width=Math.floor(n),this.height=Math.floor(r),this.clear=!0,this._neuralDenoiseWarningKey=null,this.camera=t,this.scene=e,this.autosetGamma=!0,this.configuration=new Proxy({aoSamples:16,aoRadius:5,aoTones:0,denoiseSamples:8,denoiseRadius:12,distanceFalloff:1,intensity:5,denoiseIterations:2,renderMode:0,biasOffset:0,biasMultiplier:0,color:new x(0,0,0),gammaCorrection:!0,depthBufferType:G.Default,screenSpaceRadius:!1,halfRes:!1,depthAwareUpsampling:!0,colorMultiply:!0,transparencyAware:!1,accumulate:!1,neuralDenoise:!1},{set:(e,t,n)=>{let r=e[t];if(e[t]=n,n.equals?n.equals(r)||this.firstFrame():r!==n&&this.firstFrame(),t===`aoSamples`&&r!==n&&this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),t===`denoiseSamples`&&r!==n&&this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),t===`neuralDenoise`&&r!==n){let t=n&&(e.aoSamples!==16||e.halfRes),r=n&&e.halfRes;n&&(e.aoSamples=16,[4,8,16].includes(e.denoiseSamples)||(e.denoiseSamples=8),e.denoiseRadius=12,e.denoiseIterations=2,e.halfRes=!1),t&&this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),r&&(this.configureHalfResTargets(),this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.setSize(this.width,this.height)),this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera)}return t===`halfRes`&&r!==n&&(this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureHalfResTargets(),this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.setSize(this.width,this.height)),t===`depthAwareUpsampling`&&r!==n&&this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),t===`gammaCorrection`&&(this.autosetGamma=!1),t===`transparencyAware`&&r!==n&&(this.autoDetectTransparency=!1,this.configureTransparencyTarget()),!0}}),this.samples=[],this.samplesDenoise=[],this.autoDetectTransparency=!0,this.frames=0,this.lastViewMatrix=new y,this.lastProjectionMatrix=new y,this.configureEffectCompositer(this.configuration.depthBufferType),this.configureSampleDependentPasses(),this.configureHalfResTargets(),this.detectTransparency(),this.configureTransparencyTarget(),this.copyQuad=new R(new g({uniforms:{tDiffuse:{value:null}},depthWrite:!1,vertexShader:`
|
|
972
|
+
varying vec2 vUv;
|
|
973
|
+
void main() {
|
|
974
|
+
vUv = uv;
|
|
975
|
+
gl_Position = vec4(position, 1);
|
|
976
|
+
}
|
|
977
|
+
`,fragmentShader:`
|
|
978
|
+
uniform sampler2D tDiffuse;
|
|
979
|
+
varying vec2 vUv;
|
|
980
|
+
void main() {
|
|
981
|
+
gl_FragColor = texture2D(tDiffuse, vUv);
|
|
982
|
+
}
|
|
983
|
+
`})),this.writeTargetInternal=new s(this.width,this.height,{minFilter:d,magFilter:d,depthBuffer:!1,format:O}),this.readTargetInternal=new s(this.width,this.height,{minFilter:d,magFilter:d,depthBuffer:!1,format:O}),this.outputTargetInternal=new s(this.width,this.height,{minFilter:d,magFilter:d,depthBuffer:!1}),this.accumulationRenderTarget=new s(this.width,this.height,{minFilter:d,magFilter:d,depthBuffer:!1,format:O,type:u,stencilBuffer:!1,depthBuffer:!1,alpha:!0}),this.accumulationQuad=new R(new g({uniforms:{frame:{value:0},tDiffuse:{value:null}},transparent:!0,opacity:1,vertexShader:`
|
|
984
|
+
varying vec2 vUv;
|
|
985
|
+
void main() {
|
|
986
|
+
vUv = uv;
|
|
987
|
+
gl_Position = vec4(position, 1);
|
|
988
|
+
}`,fragmentShader:`
|
|
989
|
+
uniform sampler2D tDiffuse;
|
|
990
|
+
uniform float frame;
|
|
991
|
+
varying vec2 vUv;
|
|
992
|
+
void main() {
|
|
993
|
+
vec4 color = texture2D(tDiffuse, vUv);
|
|
994
|
+
gl_FragColor = vec4(color.rgb, 1.0 / (frame + 1.0));
|
|
995
|
+
}
|
|
996
|
+
`})),this.bluenoise=new f(_t,128,128),this.bluenoise.colorSpace=``,this.bluenoise.wrapS=w,this.bluenoise.wrapT=w,this.bluenoise.minFilter=S,this.bluenoise.magFilter=S,this.bluenoise.needsUpdate=!0,this.lastTime=0,this.timeRollingAverage=.99,this.needsDepthTexture=!0,this.needsSwap=!0,this._r=new c,this._c=new x}configureHalfResTargets(){this.firstFrame(),this.configuration.halfRes?(this.depthDownsampleTarget=new vt(Math.floor(this.width/2),Math.floor(this.height/2),2),this.depthDownsampleTarget.textures[0].format=E,this.depthDownsampleTarget.textures[0].type=C,this.depthDownsampleTarget.textures[0].minFilter=S,this.depthDownsampleTarget.textures[0].magFilter=S,this.depthDownsampleTarget.textures[0].depthBuffer=!1,this.depthDownsampleTarget.textures[1].format=O,this.depthDownsampleTarget.textures[1].type=u,this.depthDownsampleTarget.textures[1].minFilter=S,this.depthDownsampleTarget.textures[1].magFilter=S,this.depthDownsampleTarget.textures[1].depthBuffer=!1,this.depthDownsampleQuad=new R(new g(gt))):(this.depthDownsampleTarget&&=(this.depthDownsampleTarget.dispose(),null),this.depthDownsampleQuad&&=(this.depthDownsampleQuad.dispose(),null))}detectTransparency(){if(this.autoDetectTransparency){let e=!1;this.scene.traverse(t=>{t.material&&t.material.transparent&&(e=!0)}),e&&(this.configuration.transparencyAware=!0)}}configureTransparencyTarget(){this.configuration.transparencyAware?(this.transparencyRenderTargetDWFalse=new s(this.width,this.height,{minFilter:d,magFilter:S,type:u,format:O}),this.transparencyRenderTargetDWTrue=new s(this.width,this.height,{minFilter:d,magFilter:S,type:u,format:O}),this.transparencyRenderTargetDWTrue.depthTexture=new i(this.width,this.height,l),this.depthCopyPass=new R(new g({uniforms:{depthTexture:{value:this.depthTexture},reverseDepthBuffer:{value:this.configuration.depthBufferType===G.Reverse}},vertexShader:`
|
|
997
|
+
varying vec2 vUv;
|
|
998
|
+
void main() {
|
|
999
|
+
vUv = uv;
|
|
1000
|
+
gl_Position = vec4(position, 1);
|
|
1001
|
+
}`,fragmentShader:`
|
|
1002
|
+
uniform sampler2D depthTexture;
|
|
1003
|
+
uniform bool reverseDepthBuffer;
|
|
1004
|
+
varying vec2 vUv;
|
|
1005
|
+
void main() {
|
|
1006
|
+
if (reverseDepthBuffer) {
|
|
1007
|
+
float d = 1.0 - texture2D(depthTexture, vUv).r;
|
|
1008
|
+
|
|
1009
|
+
d += 0.00001;
|
|
1010
|
+
gl_FragDepth = 1.0 - d;
|
|
1011
|
+
} else {
|
|
1012
|
+
float d = texture2D(depthTexture, vUv).r;
|
|
1013
|
+
d += 0.00001;
|
|
1014
|
+
gl_FragDepth = d;
|
|
1015
|
+
}
|
|
1016
|
+
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
|
|
1017
|
+
}
|
|
1018
|
+
`}))):(this.transparencyRenderTargetDWFalse&&=(this.transparencyRenderTargetDWFalse.dispose(),null),this.transparencyRenderTargetDWTrue&&=(this.transparencyRenderTargetDWTrue.dispose(),null),this.depthCopyPass&&=(this.depthCopyPass.dispose(),null))}renderTransparency(e){let t=this.scene.background,n=e.getClearColor(new x),r=e.getClearAlpha(),i=new Map,a=e.autoClearDepth;this.scene.traverse(e=>{i.set(e,e.visible)}),this.scene.background=null,e.autoClearDepth=!1,e.setClearColor(new x(0,0,0),0),this.depthCopyPass.material.uniforms.depthTexture.value=this.depthTexture,this.depthCopyPass.material.uniforms.reverseDepthBuffer.value=this.configuration.depthBufferType===G.Reverse,e.setRenderTarget(this.transparencyRenderTargetDWFalse),this.scene.traverse(e=>{e.material&&(e.visible=i.get(e)&&(e.material.transparent&&!e.material.depthWrite&&!e.userData.treatAsOpaque||!!e.userData.cannotReceiveAO))}),e.clear(!0,!0,!0),this.depthCopyPass.render(e),e.render(this.scene,this.camera),e.setRenderTarget(this.transparencyRenderTargetDWTrue),this.scene.traverse(e=>{e.material&&(e.visible=i.get(e)&&e.material.transparent&&e.material.depthWrite&&!e.userData.treatAsOpaque)}),e.clear(!0,!0,!0),this.depthCopyPass.render(e),e.render(this.scene,this.camera),this.scene.traverse(e=>{e.visible=i.get(e)}),e.setClearColor(n,r),this.scene.background=t,e.autoClearDepth=a}configureSampleDependentPasses(){this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera)}configureAOPass(e=G.Default,t=!1){this.firstFrame(),this.samples=this.generateHemisphereSamples(this.configuration.aoSamples);let n={...He};n.fragmentShader=n.fragmentShader.replace(`16`,this.configuration.aoSamples).replace(`16.0`,this.configuration.aoSamples+`.0`),e===G.Log?n.fragmentShader=`#define LOGDEPTH
|
|
1019
|
+
`+n.fragmentShader:e===G.Reverse&&(n.fragmentShader=`#define REVERSEDEPTH
|
|
1020
|
+
`+n.fragmentShader),t&&(n.fragmentShader=`#define ORTHO
|
|
1021
|
+
`+n.fragmentShader),this.configuration.halfRes&&(n.fragmentShader=`#define HALFRES
|
|
1022
|
+
`+n.fragmentShader),this.effectShaderQuad?(this.effectShaderQuad.material.dispose(),this.effectShaderQuad.material=new g(n)):this.effectShaderQuad=new R(new g(n))}configureDenoisePass(e=G.Default,t=!1){this.firstFrame(),this.samplesDenoise=this.generateDenoiseSamples(this.configuration.denoiseSamples,11);let n={...ht};n.fragmentShader=n.fragmentShader.replace(`__N8AO_DENOISE_SAMPLES__`,this.configuration.denoiseSamples),e===G.Log?n.fragmentShader=`#define LOGDEPTH
|
|
1023
|
+
`+n.fragmentShader:e===G.Reverse&&(n.fragmentShader=`#define REVERSEDEPTH
|
|
1024
|
+
`+n.fragmentShader),t&&(n.fragmentShader=`#define ORTHO
|
|
1025
|
+
`+n.fragmentShader),this.standardDenoiseMaterial&&this.standardDenoiseMaterial.dispose(),this.neuralDenoiseMaterial&&this.neuralDenoiseMaterial.dispose(),this.standardDenoiseMaterial=new g(n),this.neuralDenoiseMaterial=this.configuration.neuralDenoise&&[4,8,16].includes(this.configuration.denoiseSamples)?new g({...n,glslVersion:r,fragmentShader:`#define NEURAL_DENOISE
|
|
1026
|
+
layout(location = 0) out highp vec4 neuralFragColor;
|
|
1027
|
+
#define gl_FragColor neuralFragColor
|
|
1028
|
+
`+n.fragmentShader}):null,this.poissonBlurQuad?this.poissonBlurQuad.material=this.standardDenoiseMaterial:this.poissonBlurQuad=new R(this.standardDenoiseMaterial)}shouldUseNeuralDenoise(){if(!this.configuration.neuralDenoise)return this._neuralDenoiseWarningKey=null,!1;let e=[];if(this.configuration.aoSamples!==16&&e.push(`aoSamples is ${this.configuration.aoSamples} (expected 16)`),[4,8,16].includes(this.configuration.denoiseSamples)||e.push(`denoiseSamples is ${this.configuration.denoiseSamples} (expected 4, 8, or 16)`),this.configuration.denoiseRadius!==12&&e.push(`denoiseRadius is ${this.configuration.denoiseRadius} (expected 12)`),this.configuration.denoiseIterations!==2&&e.push(`denoiseIterations is ${this.configuration.denoiseIterations} (expected 2)`),this.configuration.halfRes&&e.push(`halfRes is enabled (expected full resolution)`),e.length>0){let t=e.join(`; `);return t!==this._neuralDenoiseWarningKey&&(console.warn(`[N8AO] neuralDenoise is enabled but cannot run: ${t}. Neural denoising has been disabled; standard denoising will be used.`),this._neuralDenoiseWarningKey=t),!1}return this._neuralDenoiseWarningKey=null,this.neuralDenoiseMaterial!==null}configureEffectCompositer(e=G.Default,t=!1){this.firstFrame();let n={...Ue};e===G.Log?n.fragmentShader=`#define LOGDEPTH
|
|
1029
|
+
`+n.fragmentShader:e===G.Reverse&&(n.fragmentShader=`#define REVERSEDEPTH
|
|
1030
|
+
`+n.fragmentShader),t&&(n.fragmentShader=`#define ORTHO
|
|
1031
|
+
`+n.fragmentShader),this.configuration.halfRes&&this.configuration.depthAwareUpsampling&&(n.fragmentShader=`#define HALFRES
|
|
1032
|
+
`+n.fragmentShader),this.effectCompositerQuad?(this.effectCompositerQuad.material.dispose(),this.effectCompositerQuad.material=new g(n)):this.effectCompositerQuad=new R(new g(n))}generateHemisphereSamples(e){let t=[];for(let n=0;n<e;n++){let r=2.399963*n,i=Math.sqrt(n+.5)/Math.sqrt(e),a=i*Math.cos(r),o=i*Math.sin(r),s=Math.sqrt(1-(a*a+o*o));t.push(new m(a,o,s))}return t}generateDenoiseSamples(e,t){let n=2*Math.PI*t/e,r=1/e,i=r,a=[],o=r,s=0;for(let t=0;t<e;t++)a.push(new c(Math.cos(s),Math.sin(s)).multiplyScalar(o**.75)),o+=i,s+=n;return a}setSize(e,t){this.firstFrame(),this.width=Math.floor(e),this.height=Math.floor(t);let n=this.configuration.halfRes?Math.floor(this.width/2):this.width,r=this.configuration.halfRes?Math.floor(this.height/2):this.height;this.writeTargetInternal.setSize(n,r),this.readTargetInternal.setSize(n,r),this.accumulationRenderTarget.setSize(n,r),this.configuration.halfRes&&this.depthDownsampleTarget.setSize(n,r),this.configuration.transparencyAware&&(this.transparencyRenderTargetDWFalse.setSize(this.width,this.height),this.transparencyRenderTargetDWTrue.setSize(this.width,this.height)),this.outputTargetInternal.setSize(this.width,this.height)}setDepthTexture(e){this.depthTexture=e}firstFrame(){this.needsFrame=!0}render(e,t,n){let r=e.xr.enabled;e.xr.enabled=!1;let i=e.capabilities.reversedDepthBuffer===!0||e.capabilities.reverseDepthBuffer===!0?G.Reverse:e.capabilities.logarithmicDepthBuffer?G.Log:G.Default;this.configuration.depthBufferType!==i&&(this.configuration.depthBufferType=i,this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera)),this.detectTransparency(),(t.texture.type!==this.outputTargetInternal.texture.type||t.texture.format!==this.outputTargetInternal.texture.format)&&(this.outputTargetInternal.texture.type=t.texture.type,this.outputTargetInternal.texture.format=t.texture.format,this.outputTargetInternal.texture.needsUpdate=!0),this.camera.updateMatrixWorld(),this.lastViewMatrix.equals(this.camera.matrixWorldInverse)&&this.lastProjectionMatrix.equals(this.camera.projectionMatrix)&&this.configuration.accumulate&&!this.needsFrame?this.frame++:(this.configuration.accumulate&&(e.setRenderTarget(this.accumulationRenderTarget),e.clear(!0,!0,!0)),this.frame=0,this.needsFrame=!1),this.lastViewMatrix.copy(this.camera.matrixWorldInverse),this.lastProjectionMatrix.copy(this.camera.projectionMatrix);let a,o,s;this.debugMode&&(a=e.getContext(),o=a.getExtension(`EXT_disjoint_timer_query_webgl2`),o===null&&(console.error(`EXT_disjoint_timer_query_webgl2 not available, disabling debug mode.`),this.debugMode=!1)),this.debugMode&&(s=a.createQuery(),a.beginQuery(o.TIME_ELAPSED_EXT,s)),this.configuration.transparencyAware&&this.renderTransparency(e),this._r.set(this.width,this.height);let l=this.configuration.aoRadius;if(this.configuration.halfRes&&this.configuration.screenSpaceRadius&&(l*=.5),this.frame<1024/this.configuration.aoSamples){this.configuration.halfRes&&(e.setRenderTarget(this.depthDownsampleTarget),this.depthDownsampleQuad.material.uniforms.sceneDepth.value=this.depthTexture,this.depthDownsampleQuad.material.uniforms.resolution.value=this._r,this.depthDownsampleQuad.material.uniforms.near.value=this.camera.near,this.depthDownsampleQuad.material.uniforms.far.value=this.camera.far,this.depthDownsampleQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.depthDownsampleQuad.material.uniforms.viewMatrixInv.value=this.camera.matrixWorld,this.depthDownsampleQuad.material.uniforms.logDepth.value=this.configuration.depthBufferType===G.Log,this.depthDownsampleQuad.material.uniforms.ortho.value=this.camera.isOrthographicCamera,this.depthDownsampleQuad.render(e)),this.effectShaderQuad.material.uniforms.sceneDiffuse.value=t.texture,this.effectShaderQuad.material.uniforms.sceneDepth.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[0]:this.depthTexture,this.effectShaderQuad.material.uniforms.sceneNormal.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[1]:null,this.effectShaderQuad.material.uniforms.projMat.value=this.camera.projectionMatrix,this.effectShaderQuad.material.uniforms.viewMat.value=this.camera.matrixWorldInverse,this.effectShaderQuad.material.uniforms.projViewMat.value=this.camera.projectionMatrix.clone().multiply(this.camera.matrixWorldInverse.clone()),this.effectShaderQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.effectShaderQuad.material.uniforms.viewMatrixInv.value=this.camera.matrixWorld,this.effectShaderQuad.material.uniforms.cameraPos.value=this.camera.getWorldPosition(new m),this.effectShaderQuad.material.uniforms.biasAdjustment.value=new c(this.configuration.biasOffset,this.configuration.biasMultiplier),this.effectShaderQuad.material.uniforms.resolution.value=this.configuration.halfRes?this._r.clone().multiplyScalar(.5).floor():this._r,this.effectShaderQuad.material.uniforms.time.value=performance.now()/1e3,this.effectShaderQuad.material.uniforms.samples.value=this.samples,this.effectShaderQuad.material.uniforms.bluenoise.value=this.bluenoise,this.effectShaderQuad.material.uniforms.radius.value=l,this.effectShaderQuad.material.uniforms.distanceFalloff.value=this.configuration.distanceFalloff,this.effectShaderQuad.material.uniforms.near.value=this.camera.near,this.effectShaderQuad.material.uniforms.far.value=this.camera.far,this.effectShaderQuad.material.uniforms.ortho.value=this.camera.isOrthographicCamera,this.effectShaderQuad.material.uniforms.screenSpaceRadius.value=this.configuration.screenSpaceRadius,this.effectShaderQuad.material.uniforms.frame.value=this.frame,e.setRenderTarget(this.writeTargetInternal),this.effectShaderQuad.render(e);let n=this.shouldUseNeuralDenoise();for(let t=0;t<this.configuration.denoiseIterations;t++)[this.writeTargetInternal,this.readTargetInternal]=[this.readTargetInternal,this.writeTargetInternal],this.poissonBlurQuad.material=n&&t===1?this.neuralDenoiseMaterial:this.standardDenoiseMaterial,this.poissonBlurQuad.material.uniforms.tDiffuse.value=this.readTargetInternal.texture,this.poissonBlurQuad.material.uniforms.sceneDepth.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[0]:this.depthTexture,this.poissonBlurQuad.material.uniforms.projMat.value=this.camera.projectionMatrix,this.poissonBlurQuad.material.uniforms.viewMat.value=this.camera.matrixWorldInverse,this.poissonBlurQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.poissonBlurQuad.material.uniforms.viewMatrixInv.value=this.camera.matrixWorld,this.poissonBlurQuad.material.uniforms.cameraPos.value=this.camera.getWorldPosition(new m),this.poissonBlurQuad.material.uniforms.resolution.value=this.configuration.halfRes?this._r.clone().multiplyScalar(.5).floor():this._r,this.poissonBlurQuad.material.uniforms.time.value=performance.now()/1e3,this.poissonBlurQuad.material.uniforms.blueNoise.value=this.bluenoise,this.poissonBlurQuad.material.uniforms.radius.value=this.configuration.denoiseRadius*(this.configuration.halfRes?.5:1),this.poissonBlurQuad.material.uniforms.worldRadius.value=l,this.poissonBlurQuad.material.uniforms.distanceFalloff.value=this.configuration.distanceFalloff,this.poissonBlurQuad.material.uniforms.index.value=t,this.poissonBlurQuad.material.uniforms.poissonDisk.value=this.samplesDenoise,this.poissonBlurQuad.material.uniforms.near.value=this.camera.near,this.poissonBlurQuad.material.uniforms.far.value=this.camera.far,this.poissonBlurQuad.material.uniforms.screenSpaceRadius.value=this.configuration.screenSpaceRadius,e.setRenderTarget(this.writeTargetInternal),this.poissonBlurQuad.render(e);e.setRenderTarget(this.accumulationRenderTarget);let r=e.autoClear;e.autoClear=!1,this.accumulationQuad.material.uniforms.tDiffuse.value=this.writeTargetInternal.texture,this.accumulationQuad.material.uniforms.frame.value=this.frame,this.accumulationQuad.render(e),e.autoClear=r}this.configuration.transparencyAware&&(this.effectCompositerQuad.material.uniforms.transparencyDWFalse.value=this.transparencyRenderTargetDWFalse.texture,this.effectCompositerQuad.material.uniforms.transparencyDWTrue.value=this.transparencyRenderTargetDWTrue.texture,this.effectCompositerQuad.material.uniforms.transparencyDWTrueDepth.value=this.transparencyRenderTargetDWTrue.depthTexture,this.effectCompositerQuad.material.uniforms.transparencyAware.value=!0),this.effectCompositerQuad.material.uniforms.sceneDiffuse.value=t.texture,this.effectCompositerQuad.material.uniforms.sceneDepth.value=this.depthTexture,this.effectCompositerQuad.material.uniforms.aoTones.value=this.configuration.aoTones,this.effectCompositerQuad.material.uniforms.near.value=this.camera.near,this.effectCompositerQuad.material.uniforms.far.value=this.camera.far,this.effectCompositerQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.effectCompositerQuad.material.uniforms.ortho.value=this.camera.isOrthographicCamera,this.effectCompositerQuad.material.uniforms.downsampledDepth.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[0]:this.depthTexture,this.effectCompositerQuad.material.uniforms.resolution.value=this._r,this.effectCompositerQuad.material.uniforms.blueNoise.value=this.bluenoise,this.effectCompositerQuad.material.uniforms.intensity.value=this.configuration.intensity,this.effectCompositerQuad.material.uniforms.renderMode.value=this.configuration.renderMode,this.effectCompositerQuad.material.uniforms.screenSpaceRadius.value=this.configuration.screenSpaceRadius,this.effectCompositerQuad.material.uniforms.radius.value=l,this.effectCompositerQuad.material.uniforms.distanceFalloff.value=this.configuration.distanceFalloff,this.effectCompositerQuad.material.uniforms.gammaCorrection.value=this.autosetGamma?this.renderToScreen:this.configuration.gammaCorrection,this.effectCompositerQuad.material.uniforms.tDiffuse.value=this.accumulationRenderTarget.texture,this.effectCompositerQuad.material.uniforms.color.value=this._c.copy(this.configuration.color).convertSRGBToLinear(),this.effectCompositerQuad.material.uniforms.colorMultiply.value=this.configuration.colorMultiply,this.effectCompositerQuad.material.uniforms.fog.value=!!this.scene.fog,this.scene.fog&&(this.scene.fog.isFog?(this.effectCompositerQuad.material.uniforms.fogExp.value=!1,this.effectCompositerQuad.material.uniforms.fogNear.value=this.scene.fog.near,this.effectCompositerQuad.material.uniforms.fogFar.value=this.scene.fog.far):this.scene.fog.isFogExp2?(this.effectCompositerQuad.material.uniforms.fogExp.value=!0,this.effectCompositerQuad.material.uniforms.fogDensity.value=this.scene.fog.density):console.error(`Unsupported fog type ${this.scene.fog.constructor.name} in SSAOPass.`)),e.setRenderTarget(this.renderToScreen?null:n),this.effectCompositerQuad.render(e),this.debugMode&&(a.endQuery(o.TIME_ELAPSED_EXT),yt(s,a,this)),e.xr.enabled=r}enableDebugMode(){this.debugMode=!0}disableDebugMode(){this.debugMode=!1}setDisplayMode(e){this.configuration.renderMode=[`Combined`,`AO`,`No AO`,`Split`,`Split AO`].indexOf(e)}setQualityMode(e){e===`Performance`?(this.configuration.neuralDenoise=!1,this.configuration.aoSamples=8,this.configuration.denoiseSamples=4,this.configuration.denoiseRadius=12):e===`Low`?(this.configuration.neuralDenoise=!1,this.configuration.aoSamples=16,this.configuration.denoiseSamples=4,this.configuration.denoiseRadius=12):e===`Medium`?(this.configuration.neuralDenoise=!1,this.configuration.aoSamples=16,this.configuration.denoiseSamples=8,this.configuration.denoiseRadius=12):e===`High`?(this.configuration.neuralDenoise=!1,this.configuration.aoSamples=64,this.configuration.denoiseSamples=8,this.configuration.denoiseRadius=6):e===`Ultra`?(this.configuration.neuralDenoise=!1,this.configuration.aoSamples=64,this.configuration.denoiseSamples=16,this.configuration.denoiseRadius=6):[`Neural-Low`,`Neural-Medium`,`Neural-High`].includes(e)&&(this.configuration.aoSamples=16,this.configuration.denoiseSamples={"Neural-Low":4,"Neural-Medium":8,"Neural-High":16}[e],this.configuration.denoiseRadius=12,this.configuration.denoiseIterations=2,this.configuration.halfRes=!1,this.configuration.neuralDenoise=!0)}},G={Default:1,Log:2,Reverse:3},xt=(0,F.createContext)(null);function St({children:e,enabled:t=!0}){let[n,r]=(0,F.useState)([]),i=(0,F.useMemo)(()=>({selected:n,select:r,enabled:t}),[n,r,t]);return(0,I.jsx)(xt.Provider,{value:i,children:e})}function Ct(e){let t=e;return!!(t.isMesh||t.isLine||t.isPoints)}function wt({enabled:e=!1,children:t,...n}){let r=(0,F.useRef)(null),i=(0,F.use)(xt)?.select,a=(0,F.useRef)([]);return(0,F.useEffect)(()=>{if(!i)return;let t=[];e&&r.current.traverse(e=>{Ct(e)&&t.push(e)});let n=a.current;a.current=t,i(e=>{let r=new Set(e),i=new Set(t),a=t.filter(e=>!r.has(e)),o=n.filter(e=>!i.has(e)&&r.has(e));if(!a.length&&!o.length)return e;let s=o.length?new Set(o):null,c=s?e.filter(e=>!s.has(e)):e;return a.length?[...c,...a]:c})},[e,t,i]),(0,F.useEffect)(()=>()=>{if(!i||!a.current.length)return;let e=new Set(a.current);i(t=>{let n=t.filter(t=>!e.has(t));return n.length===t.length?t:n})},[i]),(0,I.jsx)(`group`,{ref:r,...n,children:t})}var Tt=[],K=e=>typeof e==`object`&&e&&`current`in e?e.current:e;function Et(e,t){return(0,F.useCallback)(n=>{if(e.current=n,typeof t!=`function`){t&&(t.current=n);return}let r=t(n);if(typeof r==`function`)return()=>{e.current=null,r()}},[e,t])}function Dt(e,t){let n=e.__r3f;return n?n.children.map(e=>e.object).filter(t):[]}function Ot(e,t){let n=e.current;return t.length===n.length&&t.every((e,t)=>e===n[t])?!1:(e.current=t,!0)}function kt(e,t,n){let r=A(e=>e.invalidate),i=(0,F.use)(xt);(0,F.useEffect)(()=>{e.selection.layer=n,r()},[e,r,n]),(0,F.useEffect)(()=>{if(i)return;let n=(Array.isArray(t)?t.map(e=>K(e)):[K(t)]).filter(e=>e!=null);if(n.length)return e.selection.set(n),r(),()=>{e.selection.clear(),r()}},[e,t,i,r]),(0,F.useEffect)(()=>{if(i&&i.enabled&&i.selected?.length)return e.selection.set(i.selected),r(),()=>{e.selection.clear(),r()}},[i,e.selection,r])}var q=e=>{(0,F.useEffect)(()=>()=>{e?.dispose?.()},[e])};function J(e,t){let n=e;for(let e of t.split(`-`)){if(n==null)return;n=n[e]}return n}function Y(e,t,n){let r=t.split(`-`),i=e;for(let e=0;e<r.length-1;e++){if(i==null)return;i=i[r[e]]}i!=null&&(i[r[r.length-1]]=n)}function X(e,t,n,r=J,i=Y){let a=(0,F.useRef)(null),o=A(e=>e.invalidate);(0,F.useLayoutEffect)(()=>{let s=K(e);if(!s)return;a.current?.instance!==s&&(a.current={instance:s,defaults:new Map,applied:new Map});let{defaults:c,applied:l}=a.current,u=!1;for(let e of n){if(!c.has(e)){let t=r(s,e);c.set(e,t),l.set(e,t)}let n=t[e]===void 0?c.get(e):t[e];Object.is(l.get(e),n)||(i(s,e,n),l.set(e,n),u=!0)}u&&o()})}var At=(e,t)=>{let n=e[t];return(0,F.useMemo)(()=>typeof n==`number`?new c(n,n):n instanceof c?n:n?new c(...n):new c,[n])},jt=(e,t)=>{let n=e[t];return(0,F.useMemo)(()=>typeof n==`number`?new m(n,n,n):n instanceof m?n:n?new m(...n):new m,[n])},Mt=new WeakMap,Nt=0,Pt=[`blendMode-blendFunction`,`blendMode-opacity-value`];function Z(e){return function({blendFunction:t,opacity:n,ref:r,...i}){let a=Mt.get(e);if(!a){let t=`@react-three/postprocessing/${e.name}-${Nt++}`;j({[t]:e}),Mt.set(e,a=t)}let o=A(e=>e.camera),s=(0,F.useRef)(null),c=Et(s,r);return X(s,{"blendMode-blendFunction":t,"blendMode-opacity-value":n},Pt),(0,I.jsx)(a,{ref:c,camera:o,...i})}}var Q=(0,F.createContext)(null),Ft=e=>(e.getAttributes()&2)==2,It=e=>/mainUv/.test(e.getFragmentShader()??``);function Lt(e){let t=new WeakMap;return{acquire(n,r){let i=t.get(n);i?(i.count++,i.forcedValue=r):t.set(n,{count:1,original:n[e],forcedValue:r})},release(n){let r=t.get(n);r&&--r.count<=0&&(n[e]===r.forcedValue&&(n[e]=r.original),t.delete(n))}}}var Rt=Lt(`autoClear`),zt=Lt(`toneMapping`),$=new c,Bt=(e,t)=>new fe(e,t),Vt=new WeakSet,Ht=new WeakSet;function Ut(e){e instanceof ye&&e.setEffects([]),me.prototype.dispose.call(e)}function Wt(e){Vt.has(e)&&Ut(e)}function Gt(e,t,n){let r=[];for(let i=0;i<e.length;i++){let a=e[i];if(a instanceof P){let o=[a],s=Ft(a),c=It(a);if(n!==`none`){let t;for(;(t=e[i+1])instanceof P;){let e=Ft(t),r=It(t);if(n===`auto`&&(s&&e||s&&r||c&&e))break;o.push(t),s||=e,c||=r,i++}}let l=new ye(t,...o);Vt.add(l),r.push(l)}else a instanceof me&&r.push(a)}return r}var Kt=(0,F.memo)(function({children:e,camera:t,scene:n,resolutionScale:r,enabled:i=!0,renderPriority:a=1,autoClear:o=!0,autoRenderToScreen:s=!0,depthBuffer:c,enableNormalPass:l,stencilBuffer:d,multisampling:f=8,frameBufferType:p=u,renderPass:m=Bt,mergeMode:h=`auto`,ref:g}){let{gl:_,scene:v,camera:y}=A(),b=n||v,x=t||y;_.getSize($);let[S,C]=(0,F.useState)(null),[,w]=(0,F.useReducer)(e=>e+1,0);(0,F.useEffect)(()=>{Rt.acquire(_,!1);let e=new xe(_,{depthBuffer:c,stencilBuffer:d,multisampling:f,frameBufferType:p});e.autoRenderToScreen=s,e.addPass(m(b,x));let t=null,n=null;return l&&(t=new Le(b,x),t.enabled=!1,e.addPass(t),r!==void 0&&(n=new ae({normalBuffer:t.texture,resolutionScale:r}),n.enabled=!1,e.addPass(n))),e.setSize($.width,$.height),C({composer:e,normalPass:t,downSamplingPass:n}),()=>{for(let t of e.passes)Wt(t);e.dispose(),Rt.release(_)}},[x,_,c,d,f,p,s,m,b,l,r]);let T=(0,F.useRef)({width:-1,height:-1});k((e,t)=>{if(!i||!S)return;let{composer:n}=S;_.getSize($),($.width!==T.current.width||$.height!==T.current.height)&&(n.setSize($.width,$.height),T.current.width=$.width,T.current.height=$.height);let r=_.autoClear;_.autoClear=o,d&&!o&&_.clearStencil(),n.render(t),_.autoClear=r},i?a:0);let E=(0,F.useRef)(null),D=(0,F.useRef)([]),[O,ee]=(0,F.useState)(0);(0,F.useLayoutEffect)(()=>{if(!S)return;let e=Dt(E.current,e=>e instanceof P||e instanceof me);Ot(D,e)&&ee(e=>e+1)}),(0,F.useLayoutEffect)(()=>{if(!S)return;let{composer:e,normalPass:t,downSamplingPass:n}=S,r=Gt(D.current,x,h);if(r.some(e=>Ht.has(e))){let e=new Re;Vt.add(e),r.push(e)}for(let t of r)e.addPass(t);return r.length&&(t&&(t.enabled=!0),n&&(n.enabled=!0)),()=>{for(let t of r)e.removePass(t),Wt(t);t&&(t.enabled=!1),n&&(n.enabled=!1)}},[S,O,x,h]),(0,F.useEffect)(()=>(zt.acquire(_,0),_.toneMapping=0,()=>{zt.release(_)}),[_]);let j=(0,F.useMemo)(()=>S?{composer:S.composer,normalPass:S.normalPass,downSamplingPass:S.downSamplingPass,resolutionScale:r,camera:x,scene:b,requestRebuild:w,autoClear:o}:null,[S,r,x,b,w,o]);return(0,F.useImperativeHandle)(g,()=>S?.composer,[S]),j?(0,I.jsx)(Q.Provider,{value:j,children:(0,I.jsx)(`group`,{ref:E,children:e})}):null});function qt({enabled:e=!0,children:t,ref:n}){let{camera:r,requestRebuild:i}=(0,F.use)(Q),a=(0,F.useRef)(null),o=(0,F.useRef)([]),[s,c]=(0,F.useState)(null);return(0,F.useLayoutEffect)(()=>{let e=Dt(a.current,e=>e instanceof P);if(!Ot(o,e))return;if(!e.length){c(null);return}let t=new ye(r,...e);Ht.add(t),c(t)}),(0,F.useLayoutEffect)(()=>{s&&(s.enabled=e)},[s,e]),(0,F.useLayoutEffect)(()=>{i()},[s,i]),(0,F.useLayoutEffect)(()=>()=>{s&&Ut(s)},[s]),(0,F.useImperativeHandle)(n,()=>s,[s]),(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`group`,{ref:a,children:t}),s&&(0,I.jsx)(`primitive`,{object:s})]})}var Jt=0,Yt=new WeakMap,Xt=new WeakMap,Zt=0;function Qt(e){let t=Xt.get(e);return t===void 0&&(t=Zt++,Xt.set(e,t)),t}function $t(e,t){if(typeof e!=`object`||!e)return e;if(t.has(e))return`[Circular]`;if(ArrayBuffer.isView(e)||e instanceof ArrayBuffer)return Qt(e);if(t.add(e),Array.isArray(e))return e.map(e=>$t(e,t));let n={};for(let r of Object.keys(e).sort())n[r]=$t(e[r],t);return n}function en(e){return JSON.stringify($t(e,new WeakSet))}function tn(e,t){return function({ref:n,blendFunction:r=t?.blendFunction,opacity:i=t?.opacity,...a}){let o=Yt.get(e);if(!o){let t=`@react-three/postprocessing/${e.name}-${Jt++}`;j({[t]:e}),Yt.set(e,o=t)}let s=A(e=>e.camera),c=(0,F.useMemo)(()=>[...t?.args??[],...a.args??[{...t,...a}]],[en(a)]);return(0,I.jsx)(o,{camera:s,"blendMode-blendFunction":r,"blendMode-opacity-value":i,...a,args:c,ref:n})}}var nn=`
|
|
1033
|
+
uniform sampler2D uCharacters;
|
|
1034
|
+
uniform float uCharactersCount;
|
|
1035
|
+
uniform float uCellSize;
|
|
1036
|
+
uniform bool uInvert;
|
|
1037
|
+
uniform vec3 uColor;
|
|
1038
|
+
|
|
1039
|
+
const vec2 SIZE = vec2(16.);
|
|
1040
|
+
|
|
1041
|
+
vec3 greyscale(vec3 color, float strength) {
|
|
1042
|
+
float g = dot(color, vec3(0.299, 0.587, 0.114));
|
|
1043
|
+
return mix(color, vec3(g), strength);
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
vec3 greyscale(vec3 color) {
|
|
1047
|
+
return greyscale(color, 1.0);
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
1051
|
+
vec2 cell = resolution / uCellSize;
|
|
1052
|
+
vec2 grid = 1.0 / cell;
|
|
1053
|
+
vec2 pixelizedUV = grid * (0.5 + floor(uv / grid));
|
|
1054
|
+
vec4 pixelized = texture2D(inputBuffer, pixelizedUV);
|
|
1055
|
+
float greyscaled = greyscale(pixelized.rgb).r;
|
|
1056
|
+
|
|
1057
|
+
if (uInvert) {
|
|
1058
|
+
greyscaled = 1.0 - greyscaled;
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
float characterIndex = floor((uCharactersCount - 1.0) * greyscaled);
|
|
1062
|
+
vec2 characterPosition = vec2(mod(characterIndex, SIZE.x), floor(characterIndex / SIZE.y));
|
|
1063
|
+
vec2 offset = vec2(characterPosition.x, -characterPosition.y) / SIZE;
|
|
1064
|
+
vec2 charUV = mod(uv * (cell / SIZE), 1.0 / SIZE) - vec2(0., 1.0 / SIZE) + offset;
|
|
1065
|
+
vec4 asciiCharacter = texture2D(uCharacters, charUV);
|
|
1066
|
+
|
|
1067
|
+
asciiCharacter.rgb = uColor * asciiCharacter.r;
|
|
1068
|
+
asciiCharacter.a = pixelized.a;
|
|
1069
|
+
outputColor = asciiCharacter;
|
|
1070
|
+
}
|
|
1071
|
+
`,rn=Z(class extends P{constructor({font:e=`arial`,characters:t=` .:,'-^=*+?!|0#X%WM@`,fontSize:n=54,cellSize:r=16,color:i=`#ffffff`,invert:a=!1}={}){let o=new Map([[`uCharacters`,new _(new D)],[`uCellSize`,new _(r)],[`uCharactersCount`,new _(t.length)],[`uColor`,new _(new x(i))],[`uInvert`,new _(a)]]);super(`ASCIIEffect`,nn,{uniforms:o}),this._font=e,this._characters=t,this._fontSize=n,this.updateCharactersTexture()}get cellSize(){return this.uniforms.get(`uCellSize`).value}set cellSize(e){this.uniforms.get(`uCellSize`).value=e}get invert(){return this.uniforms.get(`uInvert`).value}set invert(e){this.uniforms.get(`uInvert`).value=e}get color(){return this.uniforms.get(`uColor`).value}set color(e){this.uniforms.get(`uColor`).value.set(e)}get font(){return this._font}set font(e){this._font=e,this.updateCharactersTexture()}get characters(){return this._characters}set characters(e){this._characters=e,this.uniforms.get(`uCharactersCount`).value=e.length,this.updateCharactersTexture()}get fontSize(){return this._fontSize}set fontSize(e){this._fontSize=e,this.updateCharactersTexture()}updateCharactersTexture(){let e=this.uniforms.get(`uCharacters`),t=e.value;e.value=this.createCharactersTexture(this._characters,this._font,this._fontSize),t.dispose()}createCharactersTexture(e,t,n){let r=document.createElement(`canvas`),i=1024;r.width=r.height=i;let a=new T(r,void 0,w,w,S,S),o=r.getContext(`2d`);if(!o)throw Error(`Context not available`);o.clearRect(0,0,i,i),o.font=`${n}px ${t}`,o.textAlign=`center`,o.textBaseline=`middle`,o.fillStyle=`#fff`;for(let t=0;t<e.length;t++){let n=e[t],r=t%16,i=Math.floor(t/16);o.fillText(n,r*64+32,i*64+32)}return a.needsUpdate=!0,a}});function an({ref:e}){let{composer:t}=(0,F.use)(Q),[n]=(0,F.useState)(()=>new de),[r]=(0,F.useState)(()=>new Re);return(0,F.useEffect)(()=>(t.addPass(n),t.addPass(r),()=>{t.removePass(n),t.removePass(r)}),[t,n,r]),q(n),q(r),(0,F.useImperativeHandle)(e,()=>({readDepth:e=>n.readDepth(e)}),[n]),null}function on(e,t){let n=(0,F.use)(Q)?.camera,r=A(e=>e.camera),i=t??n??r,[a]=(0,F.useState)(()=>new m);return(0,F.useCallback)(async(t,n)=>e.current?(a.x=t,a.y=n,a.z=await e.current.readDepth(a),a.z=a.z*2-1,1-a.z>1e-7&&a.clone().unproject(i)):!1,[e,i,a])}var sn=[`blendMode-blendFunction`,`bokehScale`,`cocMaterial-focusDistance`,`cocMaterial-focusRange`,`depthTexture`];function cn(e,t){if(t!==`depthTexture`)return J(e,t);let n=e.cocMaterial.uniforms.depthBuffer.value;return n?{texture:n}:void 0}function ln(e,t,n){if(t===`depthTexture`){let t=n;e.setDepthTexture(t?.texture,t?.packing)}else Y(e,t,n)}function un({ref:e,blendFunction:t,worldFocusDistance:n,worldFocusRange:r,focusDistance:i,focusRange:a,focalLength:o,bokehScale:s,resolutionScale:c,resolutionX:l,resolutionY:u,width:d,height:f,target:p,depthTexture:h,...g}){let{camera:_}=(0,F.use)(Q),v=p!=null,y=(0,F.useMemo)(()=>{let e=new ie(_,{worldFocusDistance:n,worldFocusRange:r,focalLength:o,resolutionScale:c,resolutionX:l,resolutionY:u,width:d,height:f});return v&&(e.target=new m),e.maskFunction=Ie.MULTIPLY_RGB_SET_ALPHA,e},[_,n,r,o,c,l,u,d,f,v]);return X(y,{"blendMode-blendFunction":t,bokehScale:s,"cocMaterial-focusDistance":i,"cocMaterial-focusRange":a,depthTexture:h},sn,cn,ln),q(y),(0,I.jsx)(`primitive`,{...g,object:y,ref:e,target:p})}function dn({target:e=void 0,mouse:t=!1,debug:n=void 0,manual:r=!1,smoothTime:i=.25,ref:a,...o}){let s=(0,F.useRef)(null),c=(0,F.useRef)(null),l=on(c),u=(0,F.useRef)(null),d=(0,F.useRef)(null),f=A(({scene:e})=>e),p=A(({pointer:e})=>e),[h]=(0,F.useState)(()=>new m),[g]=(0,F.useState)(()=>new m),_=(0,F.useCallback)(async(n,r=!0)=>{if(e)g.set(...e);else{let{x:e,y:n}=t?p:{x:0,y:0},r=await l(e,n);r&&g.copy(r)}r&&s.current?.target&&(i>0&&n>0?ne.damp3(s.current.target,g,i,n):s.current.target.copy(g))},[e,g,t,p,l,i]);k((e,t)=>{r||_(t),u.current&&u.current.position.copy(g),d.current&&s.current?.target&&d.current.position.copy(s.current.target)});let v=(0,F.useMemo)(()=>({dofRef:s,hitpoint:g,update:_}),[g,_]);return(0,F.useImperativeHandle)(a,()=>v,[v]),(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(an,{ref:c}),n?N((0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`mesh`,{ref:u,children:[(0,I.jsx)(`sphereGeometry`,{args:[n,16,16]}),(0,I.jsx)(`meshBasicMaterial`,{color:`#00ff00`,opacity:1,transparent:!0,depthWrite:!1})]}),(0,I.jsxs)(`mesh`,{ref:d,children:[(0,I.jsx)(`sphereGeometry`,{args:[n/2,16,16]}),(0,I.jsx)(`meshBasicMaterial`,{color:`#00ff00`,opacity:.5,transparent:!0,depthWrite:!1})]})]}),f):null,(0,I.jsx)(un,{ref:s,...o,target:h})]})}var fn=Z(Ne);function pn({blendFunction:e=0,luminanceThreshold:t,luminanceSmoothing:n,mipmapBlur:r,radius:i,levels:a,resolutionScale:o,resolutionX:s,resolutionY:c,...l}){let u=(0,F.useMemo)(()=>[{luminanceThreshold:t,luminanceSmoothing:n,mipmapBlur:r,radius:i,levels:a,resolutionScale:o,resolutionX:s,resolutionY:c}],[t,n,r,i,a,o,s,c]);return(0,I.jsx)(fn,{blendFunction:e,args:u,...l})}var mn=Z(Te),hn=Z(Ae),gn=Z(we),_n=Z(ze);function vn({bits:e,...t}){return e!==void 0&&(t.bitDepth=e),(0,I.jsx)(_n,{...t})}var yn=Z(pe),bn=Z(oe),xn=Z(le),Sn=Z(Ce);function Cn({active:e=!0,mode:t=he.SPORADIC,dtSize:n,...r}){let i=(0,F.useMemo)(()=>[{dtSize:n}],[n]);return(0,I.jsx)(Sn,{args:i,mode:e?t:he.DISABLED,...r})}var wn=[`blendMode-blendFunction`,`godRaysMaterial-density`,`godRaysMaterial-decay`,`godRaysMaterial-weight`,`godRaysMaterial-exposure`,`clampMax`,`blur`,`kernelSize`,`samples`,`width`,`height`];function Tn(e,t){return t===`clampMax`?e.godRaysMaterial.maxIntensity:J(e,t)}function En(e,t,n){t===`clampMax`?e.godRaysMaterial.maxIntensity=n:Y(e,t,n)}function Dn({sun:e,blendFunction:t,density:n,decay:r,weight:i,exposure:a,clampMax:o,blur:s,kernelSize:c,samples:l,width:u,height:d,resolutionScale:f,resolutionX:p,resolutionY:m,ref:h}){let{camera:g,autoClear:_}=(0,F.use)(Q),v=A(e=>e.invalidate),y=(0,F.useMemo)(()=>new re(g,K(e),{resolutionScale:f,resolutionX:p,resolutionY:m}),[g,f,p,m]);return(0,F.useEffect)(()=>{_!==!1&&console.warn(`GodRays renders an internal extra pass that needs <EffectComposer autoClear={false}> - without it, occlusion by other objects will look wrong.`)},[_]),(0,F.useLayoutEffect)(()=>{y.lightSource=K(e),v()},[y,e,v]),X(y,{"blendMode-blendFunction":t,"godRaysMaterial-density":n,"godRaysMaterial-decay":r,"godRaysMaterial-weight":i,"godRaysMaterial-exposure":a,clampMax:o,blur:s,kernelSize:c,samples:l,width:u,height:d},wn,Tn,En),q(y),(0,I.jsx)(`primitive`,{ref:h,object:y})}var On=Z(Fe);function kn({size:e,ref:t,...n}){let r=A(e=>e.invalidate),i=(0,F.useRef)(null);return(0,F.useImperativeHandle)(t,()=>i.current,[]),(0,F.useLayoutEffect)(()=>{e&&(i.current?.setSize(e.width,e.height),r())},[e,r]),(0,I.jsx)(On,{ref:i,...n})}var An=Z(Oe),jn={fragmentShader:`
|
|
1072
|
+
uniform float time;
|
|
1073
|
+
uniform vec2 lensPosition;
|
|
1074
|
+
uniform vec2 screenRes;
|
|
1075
|
+
uniform vec3 colorGain;
|
|
1076
|
+
uniform float starPoints;
|
|
1077
|
+
uniform float glareSize;
|
|
1078
|
+
uniform float flareSize;
|
|
1079
|
+
uniform float flareSpeed;
|
|
1080
|
+
uniform float flareShape;
|
|
1081
|
+
uniform float haloScale;
|
|
1082
|
+
uniform float opacity;
|
|
1083
|
+
uniform bool animated;
|
|
1084
|
+
uniform bool anamorphic;
|
|
1085
|
+
uniform bool enabled;
|
|
1086
|
+
uniform bool secondaryGhosts;
|
|
1087
|
+
uniform bool starBurst;
|
|
1088
|
+
uniform float ghostScale;
|
|
1089
|
+
uniform bool aditionalStreaks;
|
|
1090
|
+
uniform sampler2D lensDirtTexture;
|
|
1091
|
+
vec2 vTexCoord;
|
|
1092
|
+
|
|
1093
|
+
float rand(float n){return fract(sin(n) * 43758.5453123);}
|
|
1094
|
+
|
|
1095
|
+
float noise(float p){
|
|
1096
|
+
float fl = floor(p);
|
|
1097
|
+
float fc = fract(p);
|
|
1098
|
+
return mix(rand(fl),rand(fl + 1.0), fc);
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
vec3 hsv2rgb(vec3 c)
|
|
1102
|
+
{
|
|
1103
|
+
vec4 k = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
|
1104
|
+
vec3 p = abs(fract(c.xxx + k.xyz) * 6.0 - k.www);
|
|
1105
|
+
return c.z * mix(k.xxx, clamp(p - k.xxx, 0.0, 1.0), c.y);
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
float saturate(float x)
|
|
1109
|
+
{
|
|
1110
|
+
return clamp(x, 0.,1.);
|
|
1111
|
+
}
|
|
1112
|
+
|
|
1113
|
+
vec2 rotateUV(vec2 uv, float rotation)
|
|
1114
|
+
{
|
|
1115
|
+
return vec2(
|
|
1116
|
+
cos(rotation) * uv.x + sin(rotation) * uv.y,
|
|
1117
|
+
cos(rotation) * uv.y - sin(rotation) * uv.x
|
|
1118
|
+
);
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
// Based on https://www.shadertoy.com/view/XtKfRV
|
|
1122
|
+
vec3 drawflare(vec2 p, float intensity, float rnd, float speed, int id)
|
|
1123
|
+
{
|
|
1124
|
+
float flarehueoffset = (1. / 32.) * float(id) * 0.1;
|
|
1125
|
+
float lingrad = distance(vec2(0.), p);
|
|
1126
|
+
float expgrad = 1. / exp(lingrad * (fract(rnd) * 0.66 + 0.33));
|
|
1127
|
+
vec3 colgrad = hsv2rgb(vec3( fract( (expgrad * 8.) + speed * flareSpeed + flarehueoffset), pow(1.-abs(expgrad*2.-1.), 0.45), 20.0 * expgrad * intensity)); //rainbow spectrum effect
|
|
1128
|
+
|
|
1129
|
+
float internalStarPoints;
|
|
1130
|
+
|
|
1131
|
+
if(anamorphic){
|
|
1132
|
+
internalStarPoints = 1.0;
|
|
1133
|
+
} else{
|
|
1134
|
+
internalStarPoints = starPoints;
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
float blades = length(p * flareShape * sin(internalStarPoints * atan(p.x, p.y)));
|
|
1138
|
+
|
|
1139
|
+
float comp = pow(1.-saturate(blades), ( anamorphic ? 100. : 12.));
|
|
1140
|
+
comp += saturate(expgrad-0.9) * 3.;
|
|
1141
|
+
comp = pow(comp * expgrad, 8. + (1.-intensity) * 5.);
|
|
1142
|
+
|
|
1143
|
+
if(flareSpeed > 0.0){
|
|
1144
|
+
return vec3(comp) * colgrad;
|
|
1145
|
+
} else{
|
|
1146
|
+
return vec3(comp) * flareSize * 15.;
|
|
1147
|
+
}
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
float dist(vec3 a, vec3 b) { return abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z); }
|
|
1151
|
+
|
|
1152
|
+
vec3 saturate(vec3 x)
|
|
1153
|
+
{
|
|
1154
|
+
return clamp(x, vec3(0.0), vec3(1.0));
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
// Based on https://www.shadertoy.com/view/XtKfRV
|
|
1158
|
+
float glare(vec2 uv, vec2 pos, float size)
|
|
1159
|
+
{
|
|
1160
|
+
vec2 main;
|
|
1161
|
+
|
|
1162
|
+
if(animated){
|
|
1163
|
+
main = rotateUV(uv-pos, time * 0.1);
|
|
1164
|
+
} else{
|
|
1165
|
+
main = uv-pos;
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
float ang = atan(main.y, main.x) * (anamorphic ? 1.0 : starPoints);
|
|
1169
|
+
float dist = length(main);
|
|
1170
|
+
dist = pow(dist, .9);
|
|
1171
|
+
|
|
1172
|
+
float f0 = 1.0/(length(uv-pos)*(1.0/size*16.0)+.2);
|
|
1173
|
+
|
|
1174
|
+
return f0+f0*(sin((ang))*.2 +.3);
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1177
|
+
float sdHex(vec2 p){
|
|
1178
|
+
p = abs(p);
|
|
1179
|
+
vec2 q = vec2(p.x*2.0*0.5773503, p.y + p.x*0.5773503);
|
|
1180
|
+
return dot(step(q.xy,q.yx), 1.0-q.yx);
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
//Based on https://www.shadertoy.com/view/dllSRX
|
|
1184
|
+
float fpow(float x, float k){
|
|
1185
|
+
return x > k ? pow((x-k)/(1.0-k),2.0) : 0.0;
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
vec3 renderhex(vec2 uv, vec2 p, float s, vec3 col){
|
|
1189
|
+
uv -= p;
|
|
1190
|
+
if (abs(uv.x) < 0.2*s && abs(uv.y) < 0.2*s){
|
|
1191
|
+
return mix(vec3(0),mix(vec3(0),col,0.1 + fpow(length(uv/s),0.1)*10.0),smoothstep(0.0,0.1,sdHex(uv*20.0/s)));
|
|
1192
|
+
}
|
|
1193
|
+
return vec3(0);
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
// Based on https://www.shadertoy.com/view/4sX3Rs
|
|
1197
|
+
vec3 LensFlare(vec2 uv, vec2 pos)
|
|
1198
|
+
{
|
|
1199
|
+
vec2 main = uv-pos;
|
|
1200
|
+
vec2 uvd = uv*(length(uv));
|
|
1201
|
+
|
|
1202
|
+
float ang = atan(main.x,main.y);
|
|
1203
|
+
|
|
1204
|
+
float f0 = .3/(length(uv-pos)*16.0+1.0);
|
|
1205
|
+
|
|
1206
|
+
f0 = f0*(sin(noise(sin(ang*3.9-(animated ? time : 0.0) * 0.3) * starPoints))*.2 );
|
|
1207
|
+
|
|
1208
|
+
float f1 = max(0.01-pow(length(uv+1.2*pos),1.9),.0)*7.0;
|
|
1209
|
+
|
|
1210
|
+
float f2 = max(.9/(10.0+32.0*pow(length(uvd+0.99*pos),2.0)),.0)*0.35;
|
|
1211
|
+
float f22 = max(.9/(11.0+32.0*pow(length(uvd+0.85*pos),2.0)),.0)*0.23;
|
|
1212
|
+
float f23 = max(.9/(12.0+32.0*pow(length(uvd+0.95*pos),2.0)),.0)*0.6;
|
|
1213
|
+
|
|
1214
|
+
vec2 uvx = mix(uv,uvd, 0.1);
|
|
1215
|
+
|
|
1216
|
+
float f4 = max(0.01-pow(length(uvx+0.4*pos),2.9),.0)*4.02;
|
|
1217
|
+
float f42 = max(0.0-pow(length(uvx+0.45*pos),2.9),.0)*4.1;
|
|
1218
|
+
float f43 = max(0.01-pow(length(uvx+0.5*pos),2.9),.0)*4.6;
|
|
1219
|
+
|
|
1220
|
+
uvx = mix(uv,uvd,-.4);
|
|
1221
|
+
|
|
1222
|
+
float f5 = max(0.01-pow(length(uvx+0.1*pos),5.5),.0)*2.0;
|
|
1223
|
+
float f52 = max(0.01-pow(length(uvx+0.2*pos),5.5),.0)*2.0;
|
|
1224
|
+
float f53 = max(0.01-pow(length(uvx+0.1*pos),5.5),.0)*2.0;
|
|
1225
|
+
|
|
1226
|
+
uvx = mix(uv,uvd, 2.1);
|
|
1227
|
+
|
|
1228
|
+
float f6 = max(0.01-pow(length(uvx-0.3*pos),1.61),.0)*3.159;
|
|
1229
|
+
float f62 = max(0.01-pow(length(uvx-0.325*pos),1.614),.0)*3.14;
|
|
1230
|
+
float f63 = max(0.01-pow(length(uvx-0.389*pos),1.623),.0)*3.12;
|
|
1231
|
+
|
|
1232
|
+
vec3 c = vec3(glare(uv,pos, glareSize));
|
|
1233
|
+
|
|
1234
|
+
vec2 prot;
|
|
1235
|
+
|
|
1236
|
+
if(animated){
|
|
1237
|
+
prot = rotateUV(uv - pos, (time * 0.1));
|
|
1238
|
+
} else if(anamorphic){
|
|
1239
|
+
prot = rotateUV(uv - pos, 1.570796);
|
|
1240
|
+
} else {
|
|
1241
|
+
prot = uv - pos;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
c += drawflare(prot, (anamorphic ? flareSize * 10. : flareSize), 0.1, time, 1);
|
|
1245
|
+
|
|
1246
|
+
c.r+=f1+f2+f4+f5+f6; c.g+=f1+f22+f42+f52+f62; c.b+=f1+f23+f43+f53+f63;
|
|
1247
|
+
c = c*1.3 * vec3(length(uvd)+.09);
|
|
1248
|
+
c+=vec3(f0);
|
|
1249
|
+
|
|
1250
|
+
return c;
|
|
1251
|
+
}
|
|
1252
|
+
|
|
1253
|
+
vec3 cc(vec3 color, float factor,float factor2)
|
|
1254
|
+
{
|
|
1255
|
+
float w = color.x+color.y+color.z;
|
|
1256
|
+
return mix(color,vec3(w)*factor,w*factor2);
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
float rnd(vec2 p)
|
|
1260
|
+
{
|
|
1261
|
+
float f = fract(sin(dot(p, vec2(12.1234, 72.8392) )*45123.2));
|
|
1262
|
+
return f;
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
float rnd(float w)
|
|
1266
|
+
{
|
|
1267
|
+
float f = fract(sin(w)*1000.);
|
|
1268
|
+
return f;
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
float regShape(vec2 p, int N)
|
|
1272
|
+
{
|
|
1273
|
+
float f;
|
|
1274
|
+
|
|
1275
|
+
float a=atan(p.x,p.y)+.2;
|
|
1276
|
+
float b=6.28319/float(N);
|
|
1277
|
+
f=smoothstep(.5,.51, cos(floor(.5+a/b)*b-a)*length(p.xy)* 2.0 -ghostScale);
|
|
1278
|
+
|
|
1279
|
+
return f;
|
|
1280
|
+
}
|
|
1281
|
+
|
|
1282
|
+
// Based on https://www.shadertoy.com/view/Xlc3D2
|
|
1283
|
+
vec3 circle(vec2 p, float size, float decay, vec3 color, vec3 color2, float dist, vec2 position)
|
|
1284
|
+
{
|
|
1285
|
+
float l = length(p + position*(dist*2.))+size/2.;
|
|
1286
|
+
float l2 = length(p + position*(dist*4.))+size/3.;
|
|
1287
|
+
|
|
1288
|
+
float c = max(0.01-pow(length(p + position*dist), size*ghostScale), 0.0)*10.;
|
|
1289
|
+
float c1 = max(0.001-pow(l-0.3, 1./40.)+sin(l*20.), 0.0)*3.;
|
|
1290
|
+
float c2 = max(0.09/pow(length(p-position*dist/.5)*1., .95), 0.0)/20.;
|
|
1291
|
+
float s = max(0.02-pow(regShape(p*5. + position*dist*5. + decay, 6) , 1.), 0.0)*1.5;
|
|
1292
|
+
|
|
1293
|
+
color = cos(vec3(0.44, .24, .2)*16. + dist/8.)*0.5+.5;
|
|
1294
|
+
vec3 f = c*color;
|
|
1295
|
+
f += c1*color;
|
|
1296
|
+
f += c2*color;
|
|
1297
|
+
f += s*color;
|
|
1298
|
+
return f;
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
vec4 getLensColor(float x){
|
|
1302
|
+
return vec4(vec3(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(mix(vec3(0., 0., 0.),
|
|
1303
|
+
vec3(0., 0., 0.), smoothstep(0.0, 0.063, x)),
|
|
1304
|
+
vec3(0., 0., 0.), smoothstep(0.063, 0.125, x)),
|
|
1305
|
+
vec3(0.0, 0., 0.), smoothstep(0.125, 0.188, x)),
|
|
1306
|
+
vec3(0.188, 0.131, 0.116), smoothstep(0.188, 0.227, x)),
|
|
1307
|
+
vec3(0.31, 0.204, 0.537), smoothstep(0.227, 0.251, x)),
|
|
1308
|
+
vec3(0.192, 0.106, 0.286), smoothstep(0.251, 0.314, x)),
|
|
1309
|
+
vec3(0.102, 0.008, 0.341), smoothstep(0.314, 0.392, x)),
|
|
1310
|
+
vec3(0.086, 0.0, 0.141), smoothstep(0.392, 0.502, x)),
|
|
1311
|
+
vec3(1.0, 0.31, 0.0), smoothstep(0.502, 0.604, x)),
|
|
1312
|
+
vec3(.1, 0.1, 0.1), smoothstep(0.604, 0.643, x)),
|
|
1313
|
+
vec3(1.0, 0.929, 0.0), smoothstep(0.643, 0.761, x)),
|
|
1314
|
+
vec3(1.0, 0.086, 0.424), smoothstep(0.761, 0.847, x)),
|
|
1315
|
+
vec3(1.0, 0.49, 0.0), smoothstep(0.847, 0.89, x)),
|
|
1316
|
+
vec3(0.945, 0.275, 0.475), smoothstep(0.89, 0.941, x)),
|
|
1317
|
+
vec3(0.251, 0.275, 0.796), smoothstep(0.941, 1.0, x))),
|
|
1318
|
+
1.0);
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
float dirtNoise(vec2 p){
|
|
1322
|
+
vec2 f = fract(p);
|
|
1323
|
+
f = (f * f) * (3.0 - (2.0 * f));
|
|
1324
|
+
float n = dot(floor(p), vec2(1.0, 157.0));
|
|
1325
|
+
vec4 a = fract(sin(vec4(n + 0.0, n + 1.0, n + 157.0, n + 158.0)) * 43758.5453123);
|
|
1326
|
+
return mix(mix(a.x, a.y, f.x), mix(a.z, a.w, f.x), f.y);
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
float fbm(vec2 p){
|
|
1330
|
+
const mat2 m = mat2(0.80, -0.60, 0.60, 0.80);
|
|
1331
|
+
float f = 0.0;
|
|
1332
|
+
f += 0.5000*dirtNoise(p); p = m*p*2.02;
|
|
1333
|
+
f += 0.2500*dirtNoise(p); p = m*p*2.03;
|
|
1334
|
+
f += 0.1250*dirtNoise(p); p = m*p*2.01;
|
|
1335
|
+
f += 0.0625*dirtNoise(p);
|
|
1336
|
+
return f/0.9375;
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
vec4 getLensStar(vec2 p){
|
|
1340
|
+
vec2 pp = (p - vec2(0.5)) * 2.0;
|
|
1341
|
+
float a = atan(pp.y, pp.x);
|
|
1342
|
+
vec4 cp = vec4(sin(a * 1.0), length(pp), sin(a * 13.0), sin(a * 53.0));
|
|
1343
|
+
float d = sin(clamp(pow(length(vec2(0.5) - p) * 0.5 + haloScale /2., 5.0), 0.0, 1.0) * 3.14159);
|
|
1344
|
+
vec3 c = vec3(d) * vec3(fbm(cp.xy * 16.0) * fbm(cp.zw * 9.0) * max(max(max(max(0.5, sin(a * 1.0)), sin(a * 3.0) * 0.8), sin(a * 7.0) * 0.8), sin(a * 9.0) * 10.6));
|
|
1345
|
+
c *= vec3(mix(2.0, (sin(length(pp.xy) * 256.0) * 0.5) + 0.5, sin((clamp((length(pp.xy) - 0.875) / 0.1, 0.0, 1.0) + 0.0) * 2.0 * 3.14159) * 1.5) + 0.5) * 0.3275;
|
|
1346
|
+
return vec4(vec3(c * 1.0), d);
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
vec4 getLensDirt(vec2 p){
|
|
1350
|
+
p.xy += vec2(fbm(p.yx * 3.0), fbm(p.yx * 2.0)) * 0.0825;
|
|
1351
|
+
vec3 o = vec3(mix(0.125, 0.25, max(max(smoothstep(0.1, 0.0, length(p - vec2(0.25))),
|
|
1352
|
+
smoothstep(0.4, 0.0, length(p - vec2(0.75)))),
|
|
1353
|
+
smoothstep(0.8, 0.0, length(p - vec2(0.875, 0.125))))));
|
|
1354
|
+
o += vec3(max(fbm(p * 1.0) - 0.5, 0.0)) * 0.5;
|
|
1355
|
+
o += vec3(max(fbm(p * 2.0) - 0.5, 0.0)) * 0.5;
|
|
1356
|
+
o += vec3(max(fbm(p * 4.0) - 0.5, 0.0)) * 0.25;
|
|
1357
|
+
o += vec3(max(fbm(p * 8.0) - 0.75, 0.0)) * 1.0;
|
|
1358
|
+
o += vec3(max(fbm(p * 16.0) - 0.75, 0.0)) * 0.75;
|
|
1359
|
+
o += vec3(max(fbm(p * 64.0) - 0.75, 0.0)) * 0.5;
|
|
1360
|
+
return vec4(clamp(o, vec3(0.15), vec3(1.0)), 1.0);
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
vec4 textureLimited(sampler2D tex, vec2 texCoord){
|
|
1364
|
+
if(((texCoord.x < 0.) || (texCoord.y < 0.)) || ((texCoord.x > 1.) || (texCoord.y > 1.))){
|
|
1365
|
+
return vec4(0.0);
|
|
1366
|
+
}else{
|
|
1367
|
+
return texture(tex, texCoord);
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
vec4 textureDistorted(sampler2D tex, vec2 texCoord, vec2 direction, vec3 distortion) {
|
|
1372
|
+
return vec4(textureLimited(tex, (texCoord + (direction * distortion.r))).r,
|
|
1373
|
+
textureLimited(tex, (texCoord + (direction * distortion.g))).g,
|
|
1374
|
+
textureLimited(tex, (texCoord + (direction * distortion.b))).b,
|
|
1375
|
+
1.0);
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
// Based on https://www.shadertoy.com/view/4sK3W3
|
|
1379
|
+
vec4 getStartBurst(){
|
|
1380
|
+
vec2 aspectTexCoord = vec2(1.0) - (((vTexCoord - vec2(0.5)) * vec2(1.0)) + vec2(0.5));
|
|
1381
|
+
vec2 texCoord = vec2(1.0) - vTexCoord;
|
|
1382
|
+
vec2 ghostVec = (vec2(0.5) - texCoord) * 0.3 - lensPosition;
|
|
1383
|
+
vec2 ghostVecAspectNormalized = normalize(ghostVec * vec2(1.0)) * vec2(1.0);
|
|
1384
|
+
vec2 haloVec = normalize(ghostVec) * 0.6;
|
|
1385
|
+
vec2 haloVecAspectNormalized = ghostVecAspectNormalized * 0.6;
|
|
1386
|
+
vec2 texelSize = vec2(1.0) / vec2(screenRes.xy);
|
|
1387
|
+
vec3 distortion = vec3(-(texelSize.x * 1.5), 0.2, texelSize.x * 1.5);
|
|
1388
|
+
vec4 c = vec4(0.0);
|
|
1389
|
+
for (int i = 0; i < 8; i++) {
|
|
1390
|
+
vec2 offset = texCoord + (ghostVec * float(i));
|
|
1391
|
+
c += textureDistorted(lensDirtTexture, offset, ghostVecAspectNormalized, distortion) * pow(max(0.0, 1.0 - (length(vec2(0.5) - offset) / length(vec2(0.5)))), 10.0);
|
|
1392
|
+
}
|
|
1393
|
+
vec2 haloOffset = texCoord + haloVecAspectNormalized;
|
|
1394
|
+
return (c * getLensColor((length(vec2(0.5) - aspectTexCoord) / length(vec2(haloScale))))) +
|
|
1395
|
+
(textureDistorted(lensDirtTexture, haloOffset, ghostVecAspectNormalized, distortion) * pow(max(0.0, 1.0 - (length(vec2(0.5) - haloOffset) / length(vec2(0.5)))), 10.0));
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1398
|
+
void mainImage(vec4 inputColor, vec2 uv, out vec4 outputColor)
|
|
1399
|
+
{
|
|
1400
|
+
vec2 myUV = uv -0.5;
|
|
1401
|
+
myUV.y *= screenRes.y/screenRes.x;
|
|
1402
|
+
vec2 finalLensPosition = lensPosition * 0.5;
|
|
1403
|
+
finalLensPosition.y *= screenRes.y/screenRes.x;
|
|
1404
|
+
|
|
1405
|
+
//First Lens flare pass
|
|
1406
|
+
vec3 finalColor = LensFlare(myUV, finalLensPosition) * 20.0 * colorGain / 256.;
|
|
1407
|
+
|
|
1408
|
+
//Aditional streaks
|
|
1409
|
+
if(aditionalStreaks){
|
|
1410
|
+
vec3 circColor = vec3(0.9, 0.2, 0.1);
|
|
1411
|
+
vec3 circColor2 = vec3(0.3, 0.1, 0.9);
|
|
1412
|
+
|
|
1413
|
+
for(float i=0.;i<10.;i++){
|
|
1414
|
+
finalColor += circle(myUV, pow(rnd(i*2000.)*2.8, .1)+1.41, 0.0, circColor+i , circColor2+i, rnd(i*20.)*3.+0.2-.5, lensPosition);
|
|
1415
|
+
}
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
//Alternative ghosts
|
|
1419
|
+
if(secondaryGhosts){
|
|
1420
|
+
vec3 altGhosts = vec3(0);
|
|
1421
|
+
altGhosts += renderhex(myUV, -lensPosition*0.25, ghostScale * 1.4, vec3(0.25,0.35,0));
|
|
1422
|
+
altGhosts += renderhex(myUV, lensPosition*0.25, ghostScale * 0.5, vec3(1,0.5,0.5));
|
|
1423
|
+
altGhosts += renderhex(myUV, lensPosition*0.1, ghostScale * 1.6, vec3(1,1,1));
|
|
1424
|
+
altGhosts += renderhex(myUV, lensPosition*1.8, ghostScale * 2.0, vec3(0,0.5,0.75));
|
|
1425
|
+
altGhosts += renderhex(myUV, lensPosition*1.25, ghostScale * 0.8, vec3(1,1,0.5));
|
|
1426
|
+
altGhosts += renderhex(myUV, -lensPosition*1.25, ghostScale * 5.0, vec3(0.5,0.5,0.25));
|
|
1427
|
+
|
|
1428
|
+
//Circular ghosts
|
|
1429
|
+
altGhosts += fpow(1.0 - abs(distance(lensPosition*0.8,myUV) - 0.7),0.985)*colorGain / 2100.;
|
|
1430
|
+
finalColor += altGhosts;
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
|
|
1434
|
+
//Starburst
|
|
1435
|
+
if(starBurst){
|
|
1436
|
+
vTexCoord = myUV + 0.5;
|
|
1437
|
+
vec4 lensMod = getLensDirt(myUV);
|
|
1438
|
+
float tooBright = 1.0 - (clamp(0.5, 0.0, 0.5) * 2.0);
|
|
1439
|
+
float tooDark = clamp(0.5 - 0.5, 0.0, 0.5) * 2.0;
|
|
1440
|
+
lensMod += mix(lensMod, pow(lensMod * 2.0, vec4(2.0)) * 0.5, tooBright);
|
|
1441
|
+
float lensStarRotationAngle = ((myUV.x + myUV.y)) * (1.0 / 6.0);
|
|
1442
|
+
vec2 lensStarTexCoord = (mat2(cos(lensStarRotationAngle), -sin(lensStarRotationAngle), sin(lensStarRotationAngle), cos(lensStarRotationAngle)) * vTexCoord);
|
|
1443
|
+
lensMod += getLensStar(lensStarTexCoord) * 2.;
|
|
1444
|
+
|
|
1445
|
+
finalColor += clamp((lensMod.rgb * getStartBurst().rgb ), 0.01, 1.0);
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
//Final composed output
|
|
1449
|
+
if(enabled){
|
|
1450
|
+
outputColor = vec4(mix(finalColor, vec3(.0), opacity) + inputColor.rgb, inputColor.a);
|
|
1451
|
+
} else {
|
|
1452
|
+
outputColor = vec4(inputColor);
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
`},Mn=class extends P{constructor({blendFunction:e=23,enabled:t=!0,glareSize:n=.2,lensPosition:r=new m(-25,6,-60),screenRes:i=new c(0,0),starPoints:a=6,flareSize:o=.01,flareSpeed:s=.01,flareShape:l=.01,animated:u=!0,anamorphic:d=!1,colorGain:f=new x(20,20,20),lensDirtTexture:p=null,haloScale:h=.5,secondaryGhosts:g=!0,aditionalStreaks:v=!0,ghostScale:y=0,opacity:b=1,starBurst:S=!1}={}){super(`LensFlareEffect`,jn.fragmentShader,{blendFunction:e,uniforms:new Map([[`enabled`,new _(t)],[`glareSize`,new _(n)],[`lensPosition`,new _(r)],[`time`,new _(0)],[`screenRes`,new _(i)],[`starPoints`,new _(a)],[`flareSize`,new _(o)],[`flareSpeed`,new _(s)],[`flareShape`,new _(l)],[`animated`,new _(u)],[`anamorphic`,new _(d)],[`colorGain`,new _(f)],[`lensDirtTexture`,new _(p)],[`haloScale`,new _(h)],[`secondaryGhosts`,new _(g)],[`aditionalStreaks`,new _(v)],[`ghostScale`,new _(y)],[`starBurst`,new _(S)],[`opacity`,new _(b)]])})}update(e,t,n){let r=this.uniforms.get(`time`);r&&(r.value+=n)}u(e){return this.uniforms.get(e).value}setU(e,t){this.uniforms.get(e).value=t}get enabled(){return this.u(`enabled`)}set enabled(e){this.setU(`enabled`,e)}get glareSize(){return this.u(`glareSize`)}set glareSize(e){this.setU(`glareSize`,e)}get lensPosition(){return this.u(`lensPosition`)}set lensPosition(e){this.setU(`lensPosition`,e)}get screenRes(){return this.u(`screenRes`)}set screenRes(e){this.setU(`screenRes`,e)}get starPoints(){return this.u(`starPoints`)}set starPoints(e){this.setU(`starPoints`,e)}get flareSize(){return this.u(`flareSize`)}set flareSize(e){this.setU(`flareSize`,e)}get flareSpeed(){return this.u(`flareSpeed`)}set flareSpeed(e){this.setU(`flareSpeed`,e)}get flareShape(){return this.u(`flareShape`)}set flareShape(e){this.setU(`flareShape`,e)}get animated(){return this.u(`animated`)}set animated(e){this.setU(`animated`,e)}get anamorphic(){return this.u(`anamorphic`)}set anamorphic(e){this.setU(`anamorphic`,e)}get colorGain(){return this.u(`colorGain`)}set colorGain(e){this.setU(`colorGain`,e)}get lensDirtTexture(){return this.u(`lensDirtTexture`)}set lensDirtTexture(e){this.setU(`lensDirtTexture`,e)}get haloScale(){return this.u(`haloScale`)}set haloScale(e){this.setU(`haloScale`,e)}get secondaryGhosts(){return this.u(`secondaryGhosts`)}set secondaryGhosts(e){this.setU(`secondaryGhosts`,e)}get aditionalStreaks(){return this.u(`aditionalStreaks`)}set aditionalStreaks(e){this.setU(`aditionalStreaks`,e)}get ghostScale(){return this.u(`ghostScale`)}set ghostScale(e){this.setU(`ghostScale`,e)}get starBurst(){return this.u(`starBurst`)}set starBurst(e){this.setU(`starBurst`,e)}get opacity(){return this.u(`opacity`)}set opacity(e){this.setU(`opacity`,e)}},Nn=Z(Mn),Pn=new c(0,0),Fn=new m(-25,6,-60),In=e=>{let{ref:t,smoothTime:n=.07,blendFunction:r=23,enabled:i=!0,glareSize:a=.2,screenRes:o,starPoints:s=6,flareSize:l=.01,flareSpeed:u=.01,flareShape:d=.01,animated:f=!0,anamorphic:h=!1,colorGain:g=new x(20,20,20),lensDirtTexture:_=null,haloScale:v=.5,secondaryGhosts:y=!0,aditionalStreaks:b=!0,ghostScale:S=0,opacity:C=1,starBurst:w=!1}=e,T=jt({lensPosition:e.lensPosition??Fn},`lensPosition`),E=A(({viewport:e})=>e),D=A(({raycaster:e})=>e),{scene:O,camera:ee}=(0,F.useContext)(Q),[j]=(0,F.useState)(()=>new c),[M]=(0,F.useState)(()=>new m),N=(0,F.useRef)(null),te=Et(N,t);return k((e,t)=>{if(!N?.current)return;let r=N.current.uniforms.get(`lensPosition`),i=N.current.uniforms.get(`opacity`);if(!r||!i)return;let a=0;if(M.copy(T).project(ee),M.z>1)return;r.value.x=M.x,r.value.y=M.y,j.x=M.x,j.y=M.y,D.setFromCamera(j,ee);let{object:o}=D.intersectObjects(O.children,!0)[0]||{};o&&(a=1,o.userData?.lensflare===`no-occlusion`?a=0:o instanceof p&&(o.material.uniforms?._transmission?.value>.2||o.material._transmission&&o.material._transmission>.2?a=.2:o.material.transparent&&(a=o.material.opacity))),ne.damp(i,`value`,a,n,t)}),(0,F.useEffect)(()=>{if(!N?.current)return;let e=N.current.uniforms.get(`screenRes`);e&&(e.value.x=E.width,e.value.y=E.height)},[E]),(0,I.jsx)(Nn,{ref:te,blendFunction:r,enabled:i,glareSize:a,lensPosition:T,screenRes:o??Pn,starPoints:s,flareSize:l,flareSpeed:u,flareShape:d,animated:f,anamorphic:h,colorGain:g,lensDirtTexture:_,haloScale:v,secondaryGhosts:y,aditionalStreaks:b,ghostScale:S,opacity:C,starBurst:w})},Ln=[`blendMode-blendFunction`,`lut`,`tetrahedralInterpolation`];function Rn({lut:e,blendFunction:t,tetrahedralInterpolation:n,ref:r}){let i=(0,F.useMemo)(()=>new De(e),[]);return X(i,{"blendMode-blendFunction":t,lut:e,tetrahedralInterpolation:n},Ln),q(i),(0,I.jsx)(`primitive`,{ref:r,object:i})}var zn=Z(_e);function Bn({blendFunction:e=5,...t}){return(0,I.jsx)(zn,{blendFunction:e,...t})}var Vn=[`patternTexture`,`patternScale`,`edgeStrength`,`pulseSpeed`,`visibleEdgeColor`,`hiddenEdgeColor`,`multisampling`,`width`,`height`,`kernelSize`,`blur`,`xRay`,`dithering`,`blendMode-blendFunction`];function Hn(e,t,n){t===`visibleEdgeColor`||t===`hiddenEdgeColor`?Y(e,t,new x(n)):Y(e,t,n)}function Un({selection:e=Tt,selectionLayer:t=10,blendFunction:n,resolutionScale:r,resolutionX:i,resolutionY:a,ref:o,...s}){let{scene:c,camera:l,autoClear:u}=(0,F.use)(Q),d=(0,F.useMemo)(()=>new ve(c,l,{resolutionScale:r,resolutionX:i,resolutionY:a}),[c,l,r,i,a]);return(0,F.useEffect)(()=>{u!==!1&&console.warn(`Outline requires <EffectComposer autoClear={false}> to render correctly.`)},[u]),X(d,{...s,"blendMode-blendFunction":n},Vn,J,Hn),kt(d,e,t),q(d),(0,I.jsx)(`primitive`,{ref:o,object:d})}var Wn=Z(Ee);function Gn({granularity:e=5,ref:t}){return(0,I.jsx)(Wn,{granularity:e,ref:t})}var Kn={fragmentShader:`
|
|
1456
|
+
uniform int rampType;
|
|
1457
|
+
|
|
1458
|
+
uniform vec2 rampStart;
|
|
1459
|
+
uniform vec2 rampEnd;
|
|
1460
|
+
|
|
1461
|
+
uniform vec4 startColor;
|
|
1462
|
+
uniform vec4 endColor;
|
|
1463
|
+
|
|
1464
|
+
uniform float rampBias;
|
|
1465
|
+
uniform float rampGain;
|
|
1466
|
+
|
|
1467
|
+
uniform bool rampMask;
|
|
1468
|
+
uniform bool rampInvert;
|
|
1469
|
+
|
|
1470
|
+
float getBias(float time, float bias) {
|
|
1471
|
+
return time / (((1.0 / bias) - 2.0) * (1.0 - time) + 1.0);
|
|
1472
|
+
}
|
|
1473
|
+
|
|
1474
|
+
float getGain(float time, float gain) {
|
|
1475
|
+
if (time < 0.5)
|
|
1476
|
+
return getBias(time * 2.0, gain) / 2.0;
|
|
1477
|
+
else
|
|
1478
|
+
return getBias(time * 2.0 - 1.0, 1.0 - gain) / 2.0 + 0.5;
|
|
1479
|
+
}
|
|
1480
|
+
|
|
1481
|
+
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
1482
|
+
vec2 centerPixel = uv * resolution;
|
|
1483
|
+
vec2 startPixel = rampStart * resolution;
|
|
1484
|
+
vec2 endPixel = rampEnd * resolution;
|
|
1485
|
+
|
|
1486
|
+
float rampAlpha;
|
|
1487
|
+
|
|
1488
|
+
if (rampType == 1) {
|
|
1489
|
+
vec2 fuv = centerPixel / resolution.y;
|
|
1490
|
+
vec2 suv = startPixel / resolution.y;
|
|
1491
|
+
vec2 euv = endPixel / resolution.y;
|
|
1492
|
+
|
|
1493
|
+
float radius = length(suv - euv);
|
|
1494
|
+
float falloff = length(fuv - suv);
|
|
1495
|
+
rampAlpha = smoothstep(0.0, radius, falloff);
|
|
1496
|
+
} else {
|
|
1497
|
+
float radius = length(startPixel - endPixel);
|
|
1498
|
+
vec2 direction = normalize(vec2(endPixel.x - startPixel.x, -(startPixel.y - endPixel.y)));
|
|
1499
|
+
|
|
1500
|
+
float fade = dot(centerPixel - startPixel, direction);
|
|
1501
|
+
if (rampType == 2) fade = abs(fade);
|
|
1502
|
+
|
|
1503
|
+
rampAlpha = smoothstep(0.0, 1.0, fade / radius);
|
|
1504
|
+
}
|
|
1505
|
+
|
|
1506
|
+
rampAlpha = abs((rampInvert ? 1.0 : 0.0) - getBias(rampAlpha, rampBias) * getGain(rampAlpha, rampGain));
|
|
1507
|
+
|
|
1508
|
+
if (rampMask) {
|
|
1509
|
+
vec4 inputBuff = texture2D(inputBuffer, uv);
|
|
1510
|
+
outputColor = mix(inputBuff, inputColor, rampAlpha);
|
|
1511
|
+
} else {
|
|
1512
|
+
outputColor = mix(startColor, endColor, rampAlpha);
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
`},qn=function(e){return e[e.Linear=0]=`Linear`,e[e.Radial=1]=`Radial`,e[e.MirroredLinear=2]=`MirroredLinear`,e}({}),Jn=class extends P{constructor({rampType:e=0,rampStart:t=[.5,.5],rampEnd:n=[1,1],startColor:r=[0,0,0,1],endColor:i=[1,1,1,1],rampBias:a=.5,rampGain:o=.5,rampMask:s=!1,rampInvert:c=!1,...l}={}){super(`RampEffect`,Kn.fragmentShader,{...l,uniforms:new Map([[`rampType`,new _(e)],[`rampStart`,new _(t)],[`rampEnd`,new _(n)],[`startColor`,new _(r)],[`endColor`,new _(i)],[`rampBias`,new _(a)],[`rampGain`,new _(o)],[`rampMask`,new _(s)],[`rampInvert`,new _(c)]])})}u(e){return this.uniforms.get(e).value}setU(e,t){this.uniforms.get(e).value=t}get rampType(){return this.u(`rampType`)}set rampType(e){this.setU(`rampType`,e)}get rampStart(){return this.u(`rampStart`)}set rampStart(e){this.setU(`rampStart`,e)}get rampEnd(){return this.u(`rampEnd`)}set rampEnd(e){this.setU(`rampEnd`,e)}get startColor(){return this.u(`startColor`)}set startColor(e){this.setU(`startColor`,e)}get endColor(){return this.u(`endColor`)}set endColor(e){this.setU(`endColor`,e)}get rampBias(){return this.u(`rampBias`)}set rampBias(e){this.setU(`rampBias`,e)}get rampGain(){return this.u(`rampGain`)}set rampGain(e){this.setU(`rampGain`,e)}get rampMask(){return this.u(`rampMask`)}set rampMask(e){this.setU(`rampMask`,e)}get rampInvert(){return this.u(`rampInvert`)}set rampInvert(e){this.setU(`rampInvert`,e)}},Yn=Z(Jn),Xn=Z(se),Zn=(e,t)=>e.layers.enable(t.selection.layer),Qn=(e,t)=>e.layers.disable(t.selection.layer),$n=[`width`,`height`,`kernelSize`,`intensity`,`inverted`,`ignoreBackground`];function er({selection:e=Tt,selectionLayer:t=10,lights:n=Tt,luminanceThreshold:r,luminanceSmoothing:i,mipmapBlur:a,radius:o,levels:s,resolutionScale:c,resolutionX:l,resolutionY:u,ref:d,...f}){let{scene:p,camera:m}=(0,F.use)(Q),h=A(e=>e.invalidate),g=(0,F.useMemo)(()=>new je(p,m,{blendFunction:0,luminanceThreshold:r,luminanceSmoothing:i,mipmapBlur:a,radius:o,levels:s,resolutionScale:c,resolutionX:l,resolutionY:u}),[p,m,r,i,a,o,s,c,l,u]);return X(g,f,$n),kt(g,e,t),(0,F.useEffect)(()=>{if(n.length===0){console.warn(`SelectiveBloom requires lights to work.`);return}let e=n.map(e=>K(e)).filter(e=>e!=null);if(e.length!==0)return e.forEach(e=>Zn(e,g)),h(),()=>{e.forEach(e=>Qn(e,g)),h()}},[g,h,n,t]),q(g),(0,I.jsx)(`primitive`,{ref:d,object:g})}var tr=Z(ce),nr=[`position`,`speed`,`maxRadius`,`waveSize`,`amplitude`];function rr(e){let{speed:t,maxRadius:n,waveSize:r,amplitude:i,ref:a}=e,{camera:o}=(0,F.use)(Q),s=(0,F.useMemo)(()=>new Se(o),[o]);return X(s,{position:jt(e,`position`),speed:t,maxRadius:n,waveSize:r,amplitude:i},nr),q(s),(0,I.jsx)(`primitive`,{ref:a,object:s})}var ir=Z(ue);function ar({preset:e,edgeDetectionMode:t,predicationMode:n,...r}){let i=(0,F.useMemo)(()=>[{preset:e,edgeDetectionMode:t,predicationMode:n}],[e,t,n]);return(0,I.jsx)(ir,{args:i,...r})}var or=[`blendMode-blendFunction`,`normalBuffer`,`samples`,`rings`,`radius`,`depthAwareUpsampling`,`color`,`luminanceInfluence`,`intensity`,`ssaoMaterial-bias`,`ssaoMaterial-fade`,`ssaoMaterial-minRadiusScale`,`ssaoMaterial-distanceThreshold`,`ssaoMaterial-distanceFalloff`,`ssaoMaterial-worldDistanceThreshold`,`ssaoMaterial-worldDistanceFalloff`,`rangeThreshold`,`rangeFalloff`,`ssaoMaterial-worldProximityThreshold`,`ssaoMaterial-worldProximityFalloff`];function sr(e,t){return t===`rangeThreshold`?e.ssaoMaterial.proximityThreshold:t===`rangeFalloff`?e.ssaoMaterial.proximityFalloff:J(e,t)}function cr(e,t,n){t===`rangeThreshold`?e.ssaoMaterial.proximityThreshold=n:t===`rangeFalloff`?e.ssaoMaterial.proximityFalloff=n:Y(e,t,n)}function lr({blendFunction:e=21,samples:t=30,rings:n=4,distanceThreshold:r=1,distanceFalloff:i=0,rangeThreshold:a=.5,rangeFalloff:o=.1,luminanceInfluence:s=.9,radius:c=20,bias:l=.5,intensity:u=1,color:d,worldDistanceThreshold:f,worldDistanceFalloff:p,worldProximityThreshold:m,worldProximityFalloff:h,minRadiusScale:g,fade:_,depthAwareUpsampling:v=!0,resolutionScale:y,resolutionX:b,resolutionY:x,width:S,height:C,ref:w}){let{camera:T,normalPass:E,downSamplingPass:D,resolutionScale:O}=(0,F.use)(Q),k=(0,F.useMemo)(()=>E===null&&D===null?(console.error(`Please enable the NormalPass in the EffectComposer in order to use SSAO.`),{}):new be(T,E&&!D?E.texture:null,{blendFunction:e,samples:t,rings:n,distanceThreshold:r,distanceFalloff:i,rangeThreshold:a,rangeFalloff:o,luminanceInfluence:s,radius:c,bias:l,intensity:u,normalDepthBuffer:D?D.texture:null,resolutionScale:y??O??1,resolutionX:b,resolutionY:x,width:S,height:C,depthAwareUpsampling:v}),[T,D,E,y,O,b,x,S,C]);return X(k instanceof be?k:null,{"blendMode-blendFunction":e,samples:t,rings:n,radius:c,depthAwareUpsampling:v,color:d,luminanceInfluence:s,intensity:u,"ssaoMaterial-bias":l,"ssaoMaterial-fade":_,"ssaoMaterial-minRadiusScale":g,"ssaoMaterial-distanceThreshold":r,"ssaoMaterial-distanceFalloff":i,"ssaoMaterial-worldDistanceThreshold":f,"ssaoMaterial-worldDistanceFalloff":p,rangeThreshold:a,rangeFalloff:o,"ssaoMaterial-worldProximityThreshold":m,"ssaoMaterial-worldProximityFalloff":h},or,sr,cr),q(k),(0,I.jsx)(`primitive`,{ref:w,object:k})}var ur=Z(ge);function dr({textureSrc:e,texture:t,opacity:n=1,...r}){let i=ee(b,e);return(0,F.useLayoutEffect)(()=>{i.colorSpace=h,i.wrapS=i.wrapT=w},[i]),(0,I.jsx)(ur,{...r,texture:t??i,opacity:n})}var fr=Z(Pe);function pr({blendFunction:e=0,kernelSize:t,resolutionScale:n,resolutionX:r,resolutionY:i,...a}){let o=(0,F.useMemo)(()=>[{kernelSize:t,resolutionScale:n,resolutionX:r,resolutionY:i}],[t,n,r,i]);return(0,I.jsx)(fr,{blendFunction:e,args:o,...a})}var mr={fragmentShader:`
|
|
1516
|
+
|
|
1517
|
+
// original shader by Evan Wallace
|
|
1518
|
+
|
|
1519
|
+
#define MAX_ITERATIONS 100
|
|
1520
|
+
|
|
1521
|
+
uniform float blur;
|
|
1522
|
+
uniform float taper;
|
|
1523
|
+
uniform vec2 start;
|
|
1524
|
+
uniform vec2 end;
|
|
1525
|
+
uniform vec2 direction;
|
|
1526
|
+
uniform int samples;
|
|
1527
|
+
|
|
1528
|
+
float random(vec3 scale, float seed) {
|
|
1529
|
+
/* use the fragment position for a different seed per-pixel */
|
|
1530
|
+
return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);
|
|
1531
|
+
}
|
|
1532
|
+
|
|
1533
|
+
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
1534
|
+
vec4 color = vec4(0.0);
|
|
1535
|
+
float total = 0.0;
|
|
1536
|
+
vec2 startPixel = vec2(start.x * resolution.x, start.y * resolution.y);
|
|
1537
|
+
vec2 endPixel = vec2(end.x * resolution.x, end.y * resolution.y);
|
|
1538
|
+
float f_samples = float(samples);
|
|
1539
|
+
float half_samples = f_samples / 2.0;
|
|
1540
|
+
|
|
1541
|
+
// use screen diagonal to normalize blur radii
|
|
1542
|
+
float maxScreenDistance = distance(vec2(0.0), resolution); // diagonal distance
|
|
1543
|
+
float gradientRadius = taper * (maxScreenDistance);
|
|
1544
|
+
float blurRadius = blur * (maxScreenDistance / 16.0);
|
|
1545
|
+
|
|
1546
|
+
/* randomize the lookup values to hide the fixed number of samples */
|
|
1547
|
+
float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);
|
|
1548
|
+
vec2 normal = normalize(vec2(startPixel.y - endPixel.y, endPixel.x - startPixel.x));
|
|
1549
|
+
float radius = smoothstep(0.0, 1.0, abs(dot(uv * resolution - startPixel, normal)) / gradientRadius) * blurRadius;
|
|
1550
|
+
|
|
1551
|
+
#pragma unroll_loop_start
|
|
1552
|
+
for (int i = 0; i <= MAX_ITERATIONS; i++) {
|
|
1553
|
+
if (i >= samples) { break; } // return early if over sample count
|
|
1554
|
+
float f_i = float(i);
|
|
1555
|
+
float s_i = -half_samples + f_i;
|
|
1556
|
+
float percent = (s_i + offset - 0.5) / half_samples;
|
|
1557
|
+
float weight = 1.0 - abs(percent);
|
|
1558
|
+
vec4 sample_i = texture2D(inputBuffer, uv + normalize(direction) / resolution * percent * radius);
|
|
1559
|
+
/* switch to pre-multiplied alpha to correctly blur transparent images */
|
|
1560
|
+
sample_i.rgb *= sample_i.a;
|
|
1561
|
+
color += sample_i * weight;
|
|
1562
|
+
total += weight;
|
|
1563
|
+
}
|
|
1564
|
+
#pragma unroll_loop_end
|
|
1565
|
+
|
|
1566
|
+
outputColor = color / total;
|
|
1567
|
+
|
|
1568
|
+
/* switch back from pre-multiplied alpha */
|
|
1569
|
+
outputColor.rgb /= outputColor.a + 0.00001;
|
|
1570
|
+
}
|
|
1571
|
+
`},hr=class extends P{constructor({blendFunction:e=23,blur:t=.15,taper:n=.5,start:r=[.5,0],end:i=[.5,1],samples:a=10,direction:o=[1,1]}={}){super(`TiltShiftEffect`,mr.fragmentShader,{blendFunction:e,attributes:2,uniforms:new Map([[`blur`,new _(t)],[`taper`,new _(n)],[`start`,new _(r)],[`end`,new _(i)],[`samples`,new _(a)],[`direction`,new _(o)]])})}u(e){return this.uniforms.get(e).value}setU(e,t){this.uniforms.get(e).value=t}get blur(){return this.u(`blur`)}set blur(e){this.setU(`blur`,e)}get taper(){return this.u(`taper`)}set taper(e){this.setU(`taper`,e)}get start(){return this.u(`start`)}set start(e){this.setU(`start`,e)}get end(){return this.u(`end`)}set end(e){this.setU(`end`,e)}get samples(){return this.u(`samples`)}set samples(e){this.setU(`samples`,e)}get direction(){return this.u(`direction`)}set direction(e){this.setU(`direction`,e)}},gr=Z(hr),_r=Z(Me);function vr({minLuminance:e,maxLuminance:t,...n}){let r=(0,F.useMemo)(()=>[{minLuminance:e,maxLuminance:t}],[e,t]);return(0,I.jsx)(_r,{args:r,...n})}var yr=Z(ke),br={fragmentShader:`
|
|
1572
|
+
uniform float factor;
|
|
1573
|
+
|
|
1574
|
+
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
1575
|
+
vec2 vUv = uv;
|
|
1576
|
+
float frequency = 6.0 * factor;
|
|
1577
|
+
float amplitude = 0.015 * factor;
|
|
1578
|
+
float x = vUv.y * frequency + time * 0.7;
|
|
1579
|
+
float y = vUv.x * frequency + time * 0.3;
|
|
1580
|
+
vUv.x += cos(x + y) * amplitude * cos(y);
|
|
1581
|
+
vUv.y += sin(x - y) * amplitude * cos(y);
|
|
1582
|
+
vec4 rgba = texture(inputBuffer, vUv);
|
|
1583
|
+
outputColor = rgba;
|
|
1584
|
+
}
|
|
1585
|
+
`},xr=class extends P{constructor({blendFunction:e=23,factor:t=0}={}){super(`WaterEffect`,br.fragmentShader,{blendFunction:e,attributes:2,uniforms:new Map([[`factor`,new _(t)]])})}get factor(){return this.uniforms.get(`factor`).value}set factor(e){this.uniforms.get(`factor`).value=e}},Sr=Z(xr);function Cr({enabled:e=!0,halfRes:t,screenSpaceRadius:n,quality:r,depthAwareUpsampling:i=!0,aoRadius:a=5,aoSamples:o=16,denoiseSamples:s=4,denoiseRadius:c=12,distanceFalloff:l=1,intensity:u=1,color:d,renderMode:f=0,ref:p}){let{camera:m,scene:h,invalidate:g}=A(),_=(0,F.useMemo)(()=>{let e=new bt(h,m);return Ht.add(e),e},[m,h]);return q(_),(0,F.useLayoutEffect)(()=>{_.enabled=e,g()},[_,e,g]),(0,F.useLayoutEffect)(()=>{M(_.configuration,{color:d,aoRadius:a,distanceFalloff:l,intensity:u,aoSamples:o,denoiseSamples:s,denoiseRadius:c,screenSpaceRadius:n,renderMode:f,halfRes:t,depthAwareUpsampling:i}),g()},[n,d,a,l,u,o,s,c,f,t,i,_,g]),(0,F.useLayoutEffect)(()=>{r&&(_.setQualityMode(r.charAt(0).toUpperCase()+r.slice(1)),g())},[_,r,g]),(0,I.jsx)(`primitive`,{ref:p,object:_})}export{K as $,qn as A,pr as B,Mn as C,Gn as D,Un as E,St as F,Sr as G,hr as H,er as I,Z as J,xr as K,tr as L,lr as M,Xn as N,Yn as O,wt as P,J as Q,rr as R,In as S,Bn as T,vr as U,gr as V,yr as W,Ht as X,Ut as Y,Dt as Z,Cn as _,hn as a,Et as at,An as b,yn as c,jt as ct,bn as d,xt as et,Tt as f,xn as g,qt as h,mn as i,X as it,ar as j,Jn as k,un as l,tn as lt,Q as m,dn as n,on as nt,gn as o,kt as ot,Kt as p,Y as q,pn as r,q as rt,vn as s,At as st,rn as t,Ot as tt,an as u,Dn as v,Cr as w,Rn as x,kn as y,dr as z};
|