{"version":3,"sources":["components/ui/Logger.tsx","components/Loading.tsx","components/AssetLoader.tsx","constants.ts","utils.tsx","components/Glb.tsx","components/Voxo.tsx","components/LightRig.tsx","components/Environment/index.js","components/ui/MenuToggle.tsx","components/Stars/index.js","Shader.js","effects/glowmaskPass.ts","effects/fxaaEffect.ts","effects/bloomEffect.ts","effects/sceneRenderPass.js","effects/compositePass.js","effects/postEffects.js","components/EffectManager.tsx","components/ErrorBoundary.js","components/ThreeCanvas.tsx","components/ui/Toggle.tsx","assets/img/view_in_AR_icon.svg","components/ui/ViewInAR.tsx","assets/img/checkbox_on.svg","assets/img/checkbox_off.svg","assets/img/config.png","assets/img/vol_on_tooltip.svg","assets/img/vol_off_tooltip.svg","components/Viewer.tsx","assets/img/vol_on.png","assets/img/vol_off.png","App.tsx","index.js"],"names":["LogButton","styled","button","useLoggerStore","create","set","camloc","camlookat","fov","setCameraDataLog","Logger","state","onClick","console","log","Wrapper","div","Track","Bar","LoadingLabel","span","useLoaderStore","pct","setProgress","asset","clearProgress","Loading","cameraControl","useViewerStore","percentages","Object","values","percentage","length","reduce","a","b","displayPercentage","useEffect","Html","center","position","target","style","width","transition","id","buildGraph","object","data","nodes","materials","traverse","obj","name","material","loadingFn","extensions","onProgress","Proto","loader","input","Promise","all","map","res","reject","load","scene","assign","error","RARITY","GLB_TYPE","ASSET","mode","staging","process","production","bucket","defaultCameraLoc","defaultCameraLookat","cameraLocForPet","cameraLookatForPet","envNameMap","factionEnv","extraEnv","anomalousEnv","specialNaming","test","replace","keys","EXT","ASSET_TYPE","MP3","EffectAttribute","bustAssets","METAKEY_BUST_1","METAKEY_BUST_2","METAKEY_BUST_3","METAKEY_BUST_4","METAKEY_BUST_5","BUST_0","BUST_1","BUST_2","BUST_3","BUST_4","BUST_5","BUST_6","KONG_0","KONG_1","WHALE_DOLPHIN","WHALE_SHARK","WHALE_WHALE","VOGU_BUST_0","VOGU_BUST_1","VOGU_BUST_2","VOGU_BUST_3","VOGU_BUST_4","VOGU_BUST_5","VOGU_BUST_6","VOGU_BUST_7","VOGU_BUST_8","VOGU_BUST_9","VOGU_BUST_10","VOGU_BUST_11","VOGU_BUST_12","VOGU_BUST_13","VOGU_BUST_14","VOGU_BUST_15","VOGU_BUST_16","standaloneAssets","CUBE","OMEGA","ROBOT_BUST","MECHA_CHAOTIC","ASC05_SPOOKY","GOODBOI","GOODBOI_FAB","urlParamAlias","voxoTree","getPath","type","subcategory","filename","ext","toUpperCase","getArchetypes","acc","species","entries","forEach","a_name","rarities","parseVoxoName","split","archetype","faction","rarity","archetypes","archetypeCode","rarityCode","isHero","PRESALE","_faction","base","some","f","r","filter","_r","n","i","pad","rarityMatch","HERO","SR","UR","includes","SPECIAL","UQ","toTitle","text","word","charAt","slice","toLowerCase","capLeadingLetter","join","number","str","Diamond","geometry","materialProps","thickness","roughness","clearcoat","clearcoatRoughness","transmission","ior","envMapIntensity","color","Color","rotation","Math","PI","Glb","env","initPos","initScl","offset","visible","settings","assetName","glb","Array","isArray","results","useAsset","AssetLoader","GLTFLoader","GLB","undefined","xhr","loaded","total","envNames","group","oldEnvName","userData","children","coords","vec3","swapAxis","gear","gearGlbs","gearSlots","child","option","push","GEAR","applyGearSettings","gearActive","meshes","Mesh","mixer","useRef","animations","current","AnimationMixer","clip","clipAction","play","useFrame","_","delta","update","DIAMOND","applyMaterialSettings","scale","Vector3","onPointerUp","onclick","metalness","editMaterial","needsUpdate","dithering","opacity","transparent","uuid","mat","castShadow","DirectionalLight","shadow","camera","top","bottom","left","right","Flipbook","useState","frame","setFrame","urlReq","voxoName","company","interval","heroes","hero","idx","bases","from","Set","baseName","BASE","props","elapsed","Number","Party","party","Hero","useVoxoStore","cubeActive","gildedActive","hasBase","MEDUSA","yOffset","GILDED","autoRotate","BasePad","Environment","envActive","ENV","ExtraEnvironment","extra_scene","extraEnvActive","EXTRA_ENV","AnomalousEnvironment","extra_scene_anomalous","anomalousEnvActive","ANOM_ENV","Addon","extra_420","addon","addonActive","ADDON","BONG","Pet","extra_pet","pet","petActive","PET","PetRobit","extra_pet_robit","petRobit","petRobitActive","PET_ROBIT","PetCollab","extra_pet_collab","petCollab","petCollabActive","PET_COLLAB","ExtraBonsai","bonsai","extra_bonsai","bonsaiActive","BONSAI","OmegaKey","omegaKey","omegakey","omegaKeyActive","VoxoCube","ShadowCatcher","receiveShadow","args","HeroCard","useFBO","useThree","portal","heroName","card","getObjectByName","CARD","cel","MeshStandardMaterial","bg","background","cam","clone","multiplyScalar","clampLength","lookAt","gl","setRenderTarget","render","texture","matrixAutoUpdate","Vector2","repeat","window","innerHeight","innerWidth","warn","createPortal","audio","audioActive","turntable","setAudio","track","setGear","toggleAudio","toggleEnv","toggleExtraEnv","toggleAnomalousEnv","toggleGear","slot","toggleAddon","togglePet","togglePetRobit","togglePetCollab","toggleBonsai","toggleOmegaKey","toggleGilded","toggleCube","toggleTurntable","Voxo","convertSRGBToLinear","startsWith","LightRig","light","lightRig","cubeRig","LIGHT_RIG","extension","files","path","preset","active","extendedPreset","bridge","BRIDGE","HDR","winter","WINTER","whirlwind","WHIRLWIND","snow","SNOW","presetsObj","Error","CUBEMAP_ROOT","defaultScene","isCubeMap","CubeTextureLoader","RGBELoader","loaderResult","useLoader","setPath","gen","PMREMGenerator","compileEquirectangularShader","fromCubemap","fromEquirectangular","getTexture","dispose","React","useLayoutEffect","oldbg","oldenv","environment","clear","LABEL","StarfieldMaterial","uniforms","time","value","fade","vertexShader","fragmentShader","ShaderMaterial","genStar","setFromSpherical","Spherical","acos","random","Stars","ref","radius","depth","count","saturation","factor","positions","colors","sizes","increment","toArray","setHSL","g","Float32Array","size","clock","getElapsedTime","starfieldMaterial","attach","attachObject","blending","AdditiveBlending","vertexColors","Shaders","kernelRadius","defines","KERNEL_RADIUS","SIGMA","colorTexture","texSize","direction","glowmaskPass","renderer","groundlight","glowTarget","lightShader","matdictionary","sceneColor","shaders","this","WebGLRenderTarget","depthBuffer","depthTexture","DepthTexture","lightUniforms","pos","strength","alpha","x","z","w","h","setSize","doSwap","emissive","ch","node","fxaaEffect","quad","postScene","postCamera","FXAA","FXAAuniforms","tDiffuse","resolution","renderTexture","pixelRatio","getPixelRatio","y","bloomEffectPass","renderTargetsHorizontal","renderTargetsVertical","nMips","separableBlurMaterials","compositeMaterial","pars","minFilter","LinearFilter","magFilter","format","RGBAFormat","resx","round","resy","renderTargetHorizonal","generateMipmaps","renderTargetVertical","kernelSizeArray","getSeperableBlurMaterial","getCompositeMaterial","res_x","res_y","bloomRadius","bloomStrength","inputRenderTarget","NUM_MIPS","blurTexture1","blurTexture2","blurTexture3","blurTexture4","blurTexture5","dirtTexture","bloomFactors","sceneRenderPass","capacity","capabilities","isWebGL2","renderTarget","WebGLMultisampleRenderTarget","samples","offlinePass","compositePass","compositeTarget","compositeMat","em","bloomMix","dofTexture","bloomTexture","postEffectPass","vig","gNoise","vigOpacity","vigExtent","extent","vigIntensity","intensity","grain","posttarget","finalMat","postShader","timer","noiseGrain","EffectManager","fx","setFx","postEffect","glowpass","resize","bloom","composite","Scene","OrthographicCamera","plane","PlaneBufferGeometry","add","scenePass","fxaa","bloomEffect","ErrorBoundary","hasError","errorInfo","Component","EnvironmentLight","extra_mint_cycle","cube","showWhirlwind","DomeLight","dome_color","dome_intensity","ThreeCanvas","control","cameraData","setCameraControl","shadows","dpr","polyfill","ResizeObserver","PerspectiveCamera","makeDefault","loc","_camera","OrbitControls","autoRotateSpeed","lookat","minDistance","maxDistance","maxPolarAngle","mouseButtons","LEFT","MOUSE","RIGHT","MIDDLE","onChange","onUpdate","self","fallback","Stats","Trigger","Icon","img","Rows","Description","Toggle","label","description","init","toggleOnHover","on","off","onToggle","testId","hover","toggleHover","src","Label","ToggleText","item","onMouseOver","onMouseLeave","alt","QRCodeSectionDetailsPage","ViewInARContainer","ViewInARIcon","QRHeader","QRCodeWrapper","QRSubHeader","ViewInAR","href","voxoId","rel","view_in_AR_icon","fgColor","EnvToggle","SCENE","checkbox_on","checkbox_off","ExtraEnvToggle","AnomalousEnvToggle","SCENE_ANOMALOUS","AddonToggle","toggle","PetToggle","setCamera","PetRobitToggle","PetCollabToggle","BonsaiToggle","OmegaKeyToggle","replaceAll","GildedToggle","CubeToggle","useMenuStore","showConfig","showEnvToggle","showExtraEnvToggle","showAnomalousEnvToggle","showAddonToggle","showPetToggle","showPetRobitToggle","showPetCollabToggle","showBonsaiToggle","showOmegaKeyToggle","showGildedToggle","toggleConfig","addEnvToggle","addExtraEnvToggle","addAnomalousEnvToggle","addAddonToggle","addPetToggle","addPetRobitToggle","addPetCollabToggle","addBonsaiToggle","addOmegaKeyToggle","addGildedToggle","MenuWrapper","MenuHeader","h4","MenuToggle","Date","now","prevToggle","setPrevToggle","pointerEvents","ControlPanel","token_id","ControlWrapper","showMenu","onTooltip","vol_on_tooltip","offTooltip","vol_off_tooltip","BGA","loop","muted","onVolumeChanged","el","paused","pause","getRandomVoxo","archetypeList","randomArchtype","floor","randomFaction","randomRarityIdx","rn","max","randomRarity","poolSize","randomNth","toString","padStart","setTokenId","setName","setUrlReq","reqData","Viewer","useParams","augSearch","location","search","param","paramName","paramValue","cfg","URLSearchParams","voxo","cfgFallback","prefix","trim","cfgToBoolean","colorFallback","test1","test2","substr","vec3Fallback","numbers","v","config","get","sqrt","pow","gilded","SPLIFF","val","extras","grp","slotItems","stateKey","shift","parseRequest","trackName","NO_THEME","requestHeader","cb","fetch","method","then","ok","catch","PENTAFORM","App","exact","to","ReactDOM","document","getElementById"],"mappings":"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FACA,GACA,uFACA,kEACA,wBACA,uCACA,+CACA,KACA,uEACA,KACA,wEACA,wEACA,cACA,uEACA,sEACA,0EACA,4EACA,6EACA,oEACA,wEACA,sEACA,KACA,0EACA,uEACA,wEACA,uEACA,2EACA,yEACA,wEACA,yEACA,kEACA,2EACA,0EACA,KACA,uFACA,GACA,oBACA,0BACA,iCACA,GACA,+BACA,GACA,iFACA,0BACA,SACA,kDACA,4DACA,yEACA,SACA,gCACA,SACA,iFACA,wBACA,8BACA,SACA,iFACA,wBACA,8BACA,SACA,iFACA,sBACA,4BACA,SACA,iFACA,sBACA,4BACA,SACA,iFACA,sBACA,4BACA,SACA,iFACA,6BACA,SACA,2CACA,sEACA,mEACA,8DACA,SACA,6EACA,2EACA,SACA,oDACA,wCACA,wCACA,iEACA,gDACA,SACA,iBACA,kBACA,SACA,mCACA,SACA,iFACA,0BACA,SACA,+CACA,6DACA,4EACA,yEACA,iCACA,SACA,iBACA,kBACA,SACA,gCACA,SACA,iFACA,uBACA,SACA,6CACA,6DACA,SACA,wDACA,yEACA,mEACA,SACA,6BACA,SACA,iFACA,iCACA,SACA,iCACA,SACA,gDACA,2CACA,SACA,gCACA,2CACA,aACA,+BACA,2CACA,aACA,gCACA,2CACA,aACA,qCACA,2CACA,aACA,SACA,iFACA,6BACA,SACA,oDACA,4DACA,SACA,6BACA,uCACA,aACA,gCACA,uCACA,aACA,+BACA,uCACA,aACA,iCACA,uCACA,aACA,SACA,GACA,GACA,iFACA,sDACA,iFACA,qEACA,iFACA,8BACA,SACA,oCACA,uEACA,uDACA,mEACA,SACA,iBACA,iFACA,2EACA,iFACA,8CACA,SACA,eACA,iFACA,8EACA,8DACA,gEACA,kEACA,6DACA,SACA,qCACA,SACA,GACA,GACA,iFACA,GACA,oDACA,GACA,iFACA,GACA,iFACA,4DACA,iFACA,kCACA,gCACA,kCACA,kCACA,mCACA,SACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,mCACA,SACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,kCACA,mCACA,SACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,kCACA,kCACA,mCACA,SACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,mCACA,SACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,mCACA,SACA,GACA,iFACA,yDACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,SACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,kCACA,SACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,kCACA,kCACA,SACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,SACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,SACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,SACA,iFACA,kCACA,gCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,SACA,iFACA,kCACA,iCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,SACA,iFACA,kCACA,iCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,mCACA,SACA,iFACA,kCACA,iCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,mCACA,mCACA,SACA,GACA,iFACA,sDACA,iFACA,kCACA,iCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,mCACA,mCACA,SACA,GACA,GACA,GACA,iFACA,GACA,8CACA,GACA,iFACA,2EACA,4BACA,kCACA,8BACA,8BACA,8BACA,8BACA,6BACA,6BACA,6BACA,6BACA,6BACA,4CACA,gCACA,QACA,4BACA,mCACA,8BACA,gCACA,gCACA,gCACA,4BACA,8BACA,8BACA,8BACA,qCACA,SACA,iFACA,2BACA,kDACA,kEACA,SACA,iFACA,2BACA,mBACA,uBACA,uBACA,iDACA,6DACA,uDACA,wCACA,0EACA,YACA,2EACA,aACA,oCACA,wDACA,6DACA,4EACA,6DACA,4EACA,aACA,SACA,iFACA,2BACA,2CACA,qDACA,oEACA,oCACA,wDACA,6DACA,4EACA,6DACA,4EACA,aACA,SACA,iFACA,yBACA,8BACA,gCACA,gEACA,4EACA,SACA,iFACA,yBACA,4BACA,4DACA,iEACA,0EACA,SACA,iFACA,yBACA,4BACA,4DACA,iEACA,0EACA,+DACA,wEACA,+DACA,wEACA,SACA,GACA,GACA,iFACA,2DACA,iFACA,gCACA,6DACA,QACA,6DACA,SACA,GACA,GACA,GACA,GACA,iFACA,GACA,kDACA,GACA,iFACA,qBACA,iFACA,8BACA,SACA,oFACA,gCACA,sBACA,SACA,sEACA,oFACA,qCACA,sCACA,oCACA,SACA,8BACA,4DACA,sCACA,iEACA,mBACA,SACA,iEACA,4EACA,+DACA,4DACA,8CACA,SACA,iEACA,4EACA,+DACA,4DACA,8CACA,SACA,oCACA,+CACA,wCACA,yCACA,sCACA,SACA,oCACA,+CACA,oEACA,mCACA,gCACA,gCACA,wCACA,yCACA,wCACA,yCACA,yCACA,SACA,oCACA,kDACA,+CACA,0CACA,2CACA,0CACA,2CACA,0CACA,SACA,oCACA,+DACA,+CACA,0CACA,2CACA,0CACA,2CACA,6CACA,SACA,oCACA,yDACA,gDACA,0DACA,oCACA,uCACA,8CACA,yEACA,6BACA,iCACA,mCACA,SACA,oCACA,iEACA,gDACA,2EACA,uCACA,+BACA,2BACA,gCACA,qCACA,0CACA,SACA,oCACA,qEACA,gDACA,oDACA,iFACA,0CACA,2CACA,sDACA,4CACA,+CACA,uDACA,wDACA,wEACA,6CACA,SACA,oCACA,iEACA,gDACA,oEACA,wDACA,2CACA,iEACA,yEACA,4DACA,uCACA,yBACA,qEACA,0CACA,SACA,oCACA,iEACA,gDACA,oEACA,wDACA,2CACA,6DACA,yEACA,+EACA,+CACA,kEACA,qDACA,0CACA,SACA,oCACA,qEACA,gDACA,oDACA,+EACA,sDACA,qCACA,+DACA,oDACA,0BACA,oDACA,sDACA,4CACA,+CACA,uDACA,wDACA,wEACA,6CACA,SACA,oDACA,yDACA,0EACA,2DACA,iDACA,wCACA,MACA,iFACA,uBACA,sBACA,sBACA,oCACA,kCACA,wDACA,4CACA,wCACA,oBACA,wCACA,qBACA,iBACA,wCACA,4DACA,iFACA,gBACA,4DACA,iFACA,iBACA,kCACA,qCACA,iBACA,iCACA,iCACA,kCACA,kCACA,iCACA,iCACA,YACA,oDACA,wCACA,oCACA,gBACA,oCACA,iBACA,mCACA,8GACA,8GACA,8GACA,8GACA,gBACA,wGACA,wGACA,wGACA,wGACA,iBACA,aACA,iFACA,2CACA,2CACA,4CACA,4CACA,2CACA,2CACA,+CACA,+CACA,sEACA,6CACA,oFACA,oDACA,iFACA,oBACA,kCACA,2BACA,gBACA,4BACA,iBACA,iFACA,oCACA,mCACA,+GACA,+GACA,+GACA,+GACA,gBACA,yGACA,yGACA,yGACA,yGACA,iBACA,YACA,uGACA,uGACA,aACA,iFACA,wCACA,wCACA,4CACA,8CACA,qDACA,qDACA,iFACA,4CACA,4CACA,uDACA,uDACA,iFACA,4CACA,4CACA,qEACA,qEACA,uDACA,uDACA,uDACA,uDACA,iFACA,sDACA,oDACA,gDACA,6DACA,iFACA,mCACA,mCACA,uDACA,0DACA,iFACA,2CACA,2CACA,wCACA,wCACA,yDACA,gEACA,0CACA,kEACA,iFACA,uBACA,uBACA,uBACA,wBACA,2DACA,2DACA,gDACA,gDACA,iFACA,uBACA,mDACA,mDACA,uBACA,mDACA,mDACA,kDACA,4DACA,6CACA,4DACA,iFACA,kCACA,qDACA,+CACA,6CACA,2CACA,iFACA,gCACA,gCACA,wDACA,wDACA,sDACA,sDACA,8CACA,sDACA,sDACA,iFACA,mBACA,oEACA,oEACA,yDACA,yDACA,mDACA,mDACA,0DACA,0DACA,yCACA,0DACA,0DACA,iFACA,oCACA,uBACA,wEACA,wEACA,6DACA,6DACA,uDACA,uDACA,8DACA,8DACA,6CACA,8DACA,8DACA,iFACA,wCACA,2BACA,4EACA,4EACA,iEACA,iEACA,2DACA,2DACA,kEACA,kEACA,iDACA,kEACA,kEACA,iFACA,4CACA,+BACA,gFACA,gFACA,qEACA,qEACA,+DACA,+DACA,sEACA,sEACA,qDACA,sEACA,sEACA,iFACA,gDACA,mCACA,oFACA,oFACA,yEACA,yEACA,mEACA,mEACA,0EACA,0EACA,yDACA,0EACA,0EACA,iFACA,oDACA,uCACA,wFACA,wFACA,6EACA,6EACA,uEACA,uEACA,8EACA,8EACA,6DACA,8EACA,8EACA,iFACA,gCACA,mBACA,oEACA,oEACA,yDACA,yDACA,mDACA,mDACA,0DACA,0DACA,yCACA,0DACA,0DACA,iFACA,oCACA,uBACA,wEACA,wEACA,6DACA,6DACA,uDACA,uDACA,8DACA,8DACA,6CACA,8DACA,8DACA,iFACA,yCACA,2BACA,4EACA,4EACA,iEACA,iEACA,2DACA,2DACA,mEACA,mEACA,iDACA,mEACA,mEACA,iFACA,6CACA,+BACA,gFACA,gFACA,qEACA,qEACA,+DACA,+DACA,uEACA,uEACA,qDACA,uEACA,uEACA,iFACA,iDACA,mCACA,oFACA,oFACA,yEACA,yEACA,mEACA,mEACA,2EACA,2EACA,yDACA,2EACA,2EACA,iFACA,wBACA,6BACA,iFACA,oBACA,yBACA,iFACA,gBACA,qBACA,iFACA,YACA,iBACA,iFACA,QACA,aACA,iFACA,4BACA,iCACA,iFACA,wBACA,6BACA,iFACA,oBACA,yBACA,iFACA,gBACA,qBACA,iFACA,YACA,iBACA,iFACA,QACA,iFACA,wCACA,wCACA,4CACA,4CACA,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","file":"static/js/main.88335f25.chunk.js","sourcesContent":["import create from 'zustand'\nimport styled from 'styled-components'\nimport React from 'react'\n\nimport { VEC3 } from '../../utils'\n\ntype LoggerProps = {\n\n}\n\nconst Logger: React.FC = () => {\n const [camloc, camlookat, fov] = useLoggerStore(state => [state.camloc, state.camlookat, state.fov])\n return {\n console.log('Camera', { camloc, camlookat, fov })\n }}>Log Viewer States\n}\n\nconst LogButton = styled.button`\n position: absolute;\n top: 60px;\n border-radius: 3px;\n padding: 6px 10px;\n font-family: monospace;\n font-weight: bold;\n color: ghostwhite;\n background-color: #6d35d4;\n cursor: pointer;\n outline: none;\n border: none;\n`\n\ntype CameraDataLog = {\n camloc: VEC3\n camlookat: VEC3\n fov: number\n}\n\ntype LoggerStore = CameraDataLog & {\n setCameraDataLog: (cameraData: CameraDataLog) => void\n}\n\nexport const useLoggerStore = create(set => ({\n camloc: [0, 0, 0],\n camlookat: [0, 0, 0],\n fov: 0,\n setCameraDataLog: ({ camloc, camlookat, fov }) => set({ camloc: camloc, camlookat: camlookat, fov: fov })\n}))\n\nexport default Logger","import React, { useEffect } from 'react';\nimport styled from 'styled-components';\nimport { Html } from '@react-three/drei';\n\nimport { useViewerStore } from './Viewer';\nimport create from 'zustand';\n\ntype LoaderProps = { y?: number }\ntype ContentSize = { [asset: string]: number }\ntype LoaderStore = {\n pct: ContentSize\n setProgress: (asset: string, size: number) => void\n clearProgress: () => void\n}\n\nconst Wrapper = styled.div`\n width: 100vw;\n height: 100vh;\n display: grid;\n place-items: center;\n background-color: #0E1C34;\n`;\nconst Track = styled.div`\n width: 200px;\n height: 6px;\n align-self: end;\n margin-bottom: 10px;\n border-radius: 3px;\n z-index: 99;\n background-color: #42427C;\n /* opacity: 0.5; */\n`;\nconst Bar = styled.div`\n width: 0%;\n height: 100%;\n border-radius: 3px;\n background-color: #DEDCED;\n box-shadow: 1px 2px 30px 5px rgba(215, 89, 123, 0.5);\n transition: width 0.2s ease-in-out;\n`;\nconst LoadingLabel = styled.span`\n align-self: start;\n margin-top: 10px;\n font-family: 'IBM Plex Sans';\n font-size: 13px;\n line-height: 120%;\n letter-spacing: 0.01em;\n color: #BDB9DD;\n opacity: 0.5;\n`;\nconst Loading: React.FC = () => {\n const cameraControl = useViewerStore(state => state.cameraControl);\n const pct = useLoaderStore(state => state.pct);\n const clearProgress = useLoaderStore(state => state.clearProgress);\n const percentages = Object.values(pct);\n const percentage = percentages.length ?\n (percentages.reduce((a, b) => a + b) / percentages.length) : 0;\n const displayPercentage = (percentage > 0.95 ? 1 : percentage) * 100;\n\n useEffect(clearProgress, [clearProgress]);\n\n return \n \n \n \n Loading model\n ;\n};\n\nexport const useLoaderStore = create(set => ({\n pct: {},\n setProgress: (asset, pct) => set(state => ({ pct: { ...state.pct, [asset]: pct } })),\n clearProgress: () => set(({ pct: {} }))\n}));\n\nexport default Loading;","// import { Loader } from '@react-three/fiber';\nimport { useAsset } from 'use-asset'\nimport { GLTF } from \"three/examples/jsm/loaders/GLTFLoader\"\n\n// type LoaderResult = T extends any[] ? Loader : Loader;\ntype ObjectMap = {\n nodes: { [name: string]: THREE.Object3D }\n materials: { [name: string]: THREE.Material }\n}\n\nexport default function AssetLoader(\n Proto: any,\n input: any,\n extensions?: (loader: any) => any,\n onProgress?: (loader: any) => any\n): GLTF & ObjectMap {\n // Use suspense to load async assets\n const keys = Array.isArray(input) ? input : [input]\n const results: any = useAsset(loadingFn(extensions, onProgress), Proto, ...keys) // Return the object/s\n\n return Array.isArray(input) ? results : results[0]\n}\n\nfunction buildGraph(object: any) {\n const data: any = {\n nodes: {},\n materials: {}\n }\n\n if (object) {\n object.traverse((obj: any) => {\n if (obj.name)\n data.nodes[obj.name] = obj\n\n if (obj.material && !data.materials[obj.material.name])\n data.materials[obj.material.name] = obj.material\n })\n }\n\n return data\n}\n\nfunction loadingFn(extensions: any, onProgress: any) {\n return function (Proto: any, ...input: any) {\n // Construct new loader and run extensions\n const loader = new Proto()\n if (extensions) extensions(loader) // Go through the urls and load them\n\n return Promise.all(input.map((input: any) => new Promise((res, reject) => loader.load(input, (data: any) => {\n if (data.scene) Object.assign(data, buildGraph(data.scene))\n res(data)\n }, onProgress, (error: any) => {\n res(null)\n // reject(`Could not load ${input}: ${error.message}`)\n }))))\n }\n}\n","/**\n * testnet link\n * @see https://testnets.opensea.io/assets/0x48984d97bd06540c9e79845a6a63902155f86049/1\n */\n\nimport { VEC3 } from './utils'\n\n// const updatePetFiles = `\n// gsutil -m cp APE.glb gs://voxodeus_metadata/src/glb/pet\n// gsutil -m cp BABY-APE.glb gs://voxodeus_metadata/src/glb/pet\n// gsutil -m cp CAT-A.glb gs://voxodeus_metadata/src/glb/pet\n// gsutil -m cp CHIBA.glb gs://voxodeus_metadata/src/glb/pet\n// gsutil -m cp DOG-A.glb gs://voxodeus_metadata/src/glb/pet\n// gsutil -m cp DOG-B.glb gs://voxodeus_metadata/src/glb/pet\n// gsutil -m cp DRAGON.glb gs://voxodeus_metadata/src/glb/pet \n// gsutil -m cp LAMA.glb gs://voxodeus_metadata/src/glb/pet\n// gsutil -m cp ROBO-CUBE-A.glb gs://voxodeus_metadata/src/glb/pet\n// gsutil -m cp ROBO-CUBE-B.glb gs://voxodeus_metadata/src/glb/pet\n\n// gsutil -m cp APE.glb gs://voxodeus_metadata/cleanup/glb/extra_pet/APEMIND-APE.glb\n// gsutil -m cp BABY-APE.glb gs://voxodeus_metadata/cleanup/glb/extra_pet/NANO-APE.glb\n// gsutil -m cp CAT-A.glb gs://voxodeus_metadata/cleanup/glb/extra_pet/NEUTRON-CAT.glb\n// gsutil -m cp CHIBA.glb gs://voxodeus_metadata/cleanup/glb/extra_pet/BOOST-SHIBA-DOG.glb\n// gsutil -m cp DOG-A.glb gs://voxodeus_metadata/cleanup/glb/extra_pet/SABRE-DOG.glb\n// gsutil -m cp DOG-B.glb gs://voxodeus_metadata/cleanup/glb/extra_pet/FLASH-DOG.glb\n// gsutil -m cp DRAGON.glb gs://voxodeus_metadata/cleanup/glb/extra_pet/STARSCALES-DRAGON.glb\n// gsutil -m cp LAMA.glb gs://voxodeus_metadata/cleanup/glb/extra_pet/LLASER-LLAMA.glb\n// gsutil -m cp ROBO-CUBE-A.glb gs://voxodeus_metadata/cleanup/glb/extra_pet_collab/VOGUPET-ELDER.glb\n// gsutil -m cp ROBO-CUBE-B.glb gs://voxodeus_metadata/cleanup/glb/extra_pet_collab/VOGUPET.glb\n\n// gsutil mv gs://voxodeus_metadata/cleanup/glb/extra_bonsai/BONSAI-1-0.glb gs://voxodeus_metadata/cleanup/glb/extra_bonsai/CHERRY-CALM.glb\n// gsutil mv gs://voxodeus_metadata/cleanup/glb/extra_bonsai/BONSAI-1-13.glb gs://voxodeus_metadata/cleanup/glb/extra_bonsai/EMERALD-EASE.glb\n// gsutil mv gs://voxodeus_metadata/cleanup/glb/extra_bonsai/BONSAI-1-14.glb gs://voxodeus_metadata/cleanup/glb/extra_bonsai/SUMMER-BLUSH.glb\n// gsutil mv gs://voxodeus_metadata/cleanup/glb/extra_bonsai/BONSAI-1-15.glb gs://voxodeus_metadata/cleanup/glb/extra_bonsai/THE-PLATEAU.glb\n// gsutil mv gs://voxodeus_metadata/cleanup/glb/extra_bonsai/BONSAI-2-0.glb gs://voxodeus_metadata/cleanup/glb/extra_bonsai/SYSTEMICA-SAPLING.glb\n// gsutil mv gs://voxodeus_metadata/cleanup/glb/extra_bonsai/BONSAI-2-13.glb gs://voxodeus_metadata/cleanup/glb/extra_bonsai/BRIGHTVINE.glb\n// gsutil mv gs://voxodeus_metadata/cleanup/glb/extra_bonsai/BONSAI-2-14.glb gs://voxodeus_metadata/cleanup/glb/extra_bonsai/STUDY-THE-STARS.glb\n// gsutil mv gs://voxodeus_metadata/cleanup/glb/extra_bonsai/BONSAI-2-15.glb gs://voxodeus_metadata/cleanup/glb/extra_bonsai/INNER-LIGHT.glb\n// gsutil mv gs://voxodeus_metadata/cleanup/glb/extra_bonsai/EVENING-REFLECTIONS.glb gs://voxodeus_metadata/cleanup/glb/extra_bonsai/MIRROR-POOLS.glb\n// `\n\nexport const mode = {\n staging: process.env.REACT_APP_mode === 'staging',\n production: process.env.REACT_APP_mode === 'production'\n};\n\nexport type DevProps = {\n testId?: string\n}\n\nexport const gcs = {\n staging: 'https://storage.googleapis.com/voxodeus/cleanup',\n production: 'https://storage.googleapis.com/voxodeus/cleanup'\n}\nexport const bucket = //gcs.production ||\n (mode.production && gcs.production) ||\n (mode.staging && gcs.staging) ||\n '';\n\nexport const hdriPreloadPath = 'https://storage.googleapis.com/voxodeus/voxo_assets/img/hdri/'\nexport const factionSceneNames = {\n A: 'STREET-LEVEL-9B',\n B: 'THE-FRONTIER',\n C: 'HEADQUARTERS',\n D: 'NIGHTSCHOOL',\n SRUR: 'NRG-MEADOW'\n}\n\nexport const defaultCameraLoc: VEC3 = [5, 5, 8]\nexport const defaultCameraLookat: VEC3 = [0, 3.5, 0]\nexport const cameraLocForPet: VEC3 = [6, 5, 18]\nexport const cameraLookatForPet: VEC3 = [0, 5.5, 0]\nexport const defaultFov = 50\n\n// only used to correctly query pre-v3 file names\n// v3 metadata should respond with correct file names therefore\n// this map will be redundant\nexport const envNameMap = {\n factionEnv: {\n 'STREET-LEVEL-9B': 'ANGOS',\n 'THE-FRONTIER': 'ASTRAS',\n 'HEADQUARTERS': 'CORPO',\n 'NIGHTSCHOOL': 'VERITA',\n 'NRG-MEADOW': 'SRUR'\n },\n extraEnv: {\n 'NEONICA-SPA': 'PINK-NEON',\n 'THE-FIRST-GARDEN': 'JUNGLE',\n 'THE-FROSTFALL': 'ICE',\n 'VAPORCITY': 'NEON-EDO',\n 'SMOULDER-STACKS': 'PHOENIX'\n },\n anomalousEnv: {\n 'PLANET-PHAELOS': 'ANCIENT-RUIN-ALT'\n }\n}\nexport const specialNaming = [{\n test: /^apemind/i,\n replace: 'ApeMind'\n}, {\n test: /^nrg/i,\n replace: 'NRG'\n}, {\n test: /^voxocube$/i,\n replace: 'VoxoCube'\n}, {\n test: /^roboape$/i,\n replace: 'RoboApe'\n}, {\n test: /^robodog$/i,\n replace: 'RoboDog'\n}, {\n test: /^robocat$/i,\n replace: 'RoboCat'\n}, {\n test: /^vogupet/i,\n replace: 'VoguPet'\n}]\n// only used for generating test links\n// no impact on viewer behaviour\nexport const possibleUrlParam = {\n scene: Object.keys(envNameMap.factionEnv),\n extra_scene: Object.keys(envNameMap.extraEnv),\n extra_scene_anomalous: Object.keys(envNameMap.anomalousEnv),\n extra_420: ['BONG', 'JOINT', 'SPLIFF', 'BLUNT'],\n extra_bonsai: [\n 'AUTUMN-BREEZE',\n 'BRIGHTVINE',\n 'CHERRY-CALM',\n 'CARDINAL-GLIMMERFALL',\n 'CARDINAL-STREAM',\n 'CARMINE-DRIFT',\n 'DAWN-BLOOM',\n 'DUSK-BLOSSOM',\n 'EMERALD-EASE',\n 'GLOWROOT',\n 'GLOWSAP',\n 'INNER-LIGHT',\n 'JUNIPER-HILLS',\n 'LARCH-ASCENDING',\n 'MIRROR-POOLS',\n 'NIGHT-ORCHARD',\n 'OUTER-OAK',\n 'PLUM-SUNSET',\n 'SERENE-SEEDING',\n 'SEVEN-STARS-FALL',\n 'SHADE-VEIL',\n 'STARFALL-FRUIT',\n 'STUDY-THE-STARS',\n 'SUMMER-BLUSH',\n 'SUNDOWN-NEBULA',\n 'SYSTEMICA-GRAND',\n 'SYSTEMICA-SAPLING',\n 'THE-PLATEAU',\n 'THE-VERMILLION',\n 'TIDAL-GROWTH',\n 'TWILIGHT-PERCH',\n 'VERDANT-VALE'\n ],\n extra_pet: [\n 'APEMIND-APE',\n 'BIRD-B',\n 'BLASTWING-BIRD',\n 'BOOST-SHIBA-DOG',\n 'FLASH-DOG',\n 'LLASER-LLAMA',\n 'NANO-APE',\n 'NEUTRON-CAT',\n 'PHOENIX-ELDER',\n 'PHOENIX',\n 'SABRE-DOG',\n 'SLITHE-SNAKE',\n 'STARSCALES-DRAGON',\n ],\n extra_pet_collab: ['VOGUPET', 'VOGUPET-ELDER'],\n extra_pet_robit: ['ROBOAPE', 'ROBODOG', 'ROBOCAT'],\n cube: ['False', 'True'],\n}\n\nexport enum RARITY {\n R = 'R',\n SR = 'SR',\n UR = 'UR',\n UQ = 'UQ'\n}\n\n/**\n * Represents the directory structure of root/glb\n * @example\n * console.log(`${bucket}/${ASSET_TYPE.GLB}/${GLB_TYPE.BONSAI}`)\n * // 'https://storage.googleapis.com/voxodeus/voxo_assets/glb/extra_bonsai'\n */\nexport enum GLB_TYPE {\n BASE = 'base',\n ENV = 'scene',\n EXTRA_ENV = 'extra_scene',\n ANOM_ENV = 'extra_scene_anomalous',\n GEAR = 'gear',\n ADDON = 'extra_420',\n BONSAI = 'extra_bonsai',\n PET = 'extra_pet',\n PET_COLLAB = 'extra_pet_collab',\n PET_ROBIT = 'extra_pet_robit',\n HERO = 'hero',\n SPECIAL = 'special',\n PRESALE = 'presale',\n LIGHT_RIG = 'light_rigs',\n CARD = 'cards',\n GILDED = 'gilded',\n DIAMOND = 'diamond'\n}\n\nexport enum ASSET {\n OMEGA = 'OXO-01',\n MEDUSA = 'ASC-07',\n ROBOT_BUST = 'ROBOT-BUST',\n MECHA_CHAOTIC = 'MECHA-CHAOTIC',\n METAKEY_BUST_1 = 'METAKEY-BUST-1',\n METAKEY_BUST_2 = 'METAKEY-BUST-2',\n METAKEY_BUST_3 = 'METAKEY-BUST-3',\n METAKEY_BUST_4 = 'METAKEY-BUST-4',\n METAKEY_BUST_5 = 'METAKEY-BUST-5',\n BUST_0 = 'BUST-0',\n BUST_1 = 'BUST-1',\n BUST_2 = 'BUST-2',\n BUST_3 = 'BUST-3',\n BUST_4 = 'BUST-4',\n BUST_5 = 'BUST-5',\n BUST_6 = 'BUST-6',\n KONG_0 = 'KONG-0',\n KONG_1 = 'KONG-1',\n WHALE_DOLPHIN = 'WHALE-DOLPHIN',\n WHALE_SHARK = 'WHALE-SHARK',\n WHALE_WHALE = 'WHALE-WHALE',\n VOGU_BUST_0 = 'VOGU-BUST-0',\n VOGU_BUST_1 = 'VOGU-BUST-1',\n VOGU_BUST_2 = 'VOGU-BUST-2',\n VOGU_BUST_3 = 'VOGU-BUST-3',\n VOGU_BUST_4 = 'VOGU-BUST-4',\n VOGU_BUST_5 = 'VOGU-BUST-5',\n VOGU_BUST_6 = 'VOGU-BUST-6',\n VOGU_BUST_7 = 'VOGU-BUST-7',\n VOGU_BUST_8 = 'VOGU-BUST-8',\n VOGU_BUST_9 = 'VOGU-BUST-9',\n VOGU_BUST_10 = 'VOGU-BUST-10',\n VOGU_BUST_11 = 'VOGU-BUST-11',\n VOGU_BUST_12 = 'VOGU-BUST-12',\n VOGU_BUST_13 = 'VOGU-BUST-13',\n VOGU_BUST_14 = 'VOGU-BUST-14',\n VOGU_BUST_15 = 'VOGU-BUST-15',\n VOGU_BUST_16 = 'VOGU-BUST-16',\n ASC05_SPOOKY = 'ASC-05-SPOOKY',\n GOODBOI = 'GOODBOI',\n GOODBOI_FAB = 'GOODBOI-FAB',\n CUBE = 'CUBE',\n PENTAFORM = 'PENTAFORM',\n BONG = 'BONG',\n SPLIFF = 'SPLIFF',\n WHIRLWIND = 'cubic_whirlwind_1k',\n WINTER = 'winter_evening_1k',\n BRIDGE = 'adams_place_bridge_1k',\n SNOW = 'snowy_park_01_1k'\n}\n\nexport const bustAssets: string[] = [\n ASSET.METAKEY_BUST_1, ASSET.METAKEY_BUST_2, ASSET.METAKEY_BUST_3, ASSET.METAKEY_BUST_4, ASSET.METAKEY_BUST_5,\n ASSET.BUST_0, ASSET.BUST_1, ASSET.BUST_2, ASSET.BUST_3, ASSET.BUST_4, ASSET.BUST_5, ASSET.BUST_6, ASSET.KONG_0, ASSET.KONG_1,\n ASSET.WHALE_DOLPHIN, ASSET.WHALE_SHARK, ASSET.WHALE_WHALE,\n ASSET.VOGU_BUST_0, ASSET.VOGU_BUST_1, ASSET.VOGU_BUST_2, ASSET.VOGU_BUST_3, ASSET.VOGU_BUST_4, ASSET.VOGU_BUST_5, ASSET.VOGU_BUST_6, ASSET.VOGU_BUST_7, ASSET.VOGU_BUST_8,\n ASSET.VOGU_BUST_9, ASSET.VOGU_BUST_10, ASSET.VOGU_BUST_11, ASSET.VOGU_BUST_12, ASSET.VOGU_BUST_13, ASSET.VOGU_BUST_14, ASSET.VOGU_BUST_15, ASSET.VOGU_BUST_16\n]\n\nexport const standaloneAssets: string[] = [\n ASSET.CUBE,\n ASSET.OMEGA,\n ASSET.ROBOT_BUST,\n ASSET.MECHA_CHAOTIC,\n ASSET.ASC05_SPOOKY,\n ASSET.GOODBOI,\n ASSET.GOODBOI_FAB,\n]\n\nexport enum EXT {\n BGA = 'mp3',\n GLB = 'glb',\n HDR = 'hdr'\n}\n\n/**\n * Represents the directory structure of bucket root\n * @example\n * console.log(`${bucket}/${ASSET_TYPE.GLB}`)\n * // 'https://storage.googleapis.com/voxodeus/voxo_assets/glb'\n */\nexport enum ASSET_TYPE {\n BGA = 'bga',\n GLB = 'glb',\n HDRI = 'hdri'\n}\n\nexport enum MP3 {\n A = 'Audio_Angos',\n B = 'Audio_Astras',\n C = 'Audio_Corpo',\n D = 'Audio_Verita',\n UR = 'Audio_Ultrarare',\n NO_THEME = 'No_Theme'\n}\n\n/**\n * An enumeration of effect attributes.\n * Attributes can be concatenated using the bitwise OR operator.\n *\n * @example\n * const attributes = EffectAttribute.CONVOLUTION | EffectAttribute.DEPTH;\n * @property CONVOLUTION - Describes effects that fetch additional samples from the input buffer. There cannot be more than one effect with this attribute per {@link EffectPass}.\n * @property DEPTH - Describes effects that require a depth texture.\n * @property NONE - No attributes. Most effects don't need to specify any attributes.\n */\nexport enum EffectAttribute {\n CONVOLUTION,\n DEPTH,\n NONE\n}\n\nexport const urlParamAlias: { [key: string]: string } = {\n 'JOINT': 'SPLIFF',\n}\n\nexport const voxoTree = {\n \"ROBITS\": {\n \"RH-01\": {\n \"A\": {\"R\": 37, \"SR\": 9, \"UR\": 1},\n \"B\": {\"R\": 73, \"SR\": 18, \"UR\": 0},\n \"C\": {\"R\": 183, \"SR\": 44, \"UR\": 3},\n \"D\": {\"R\": 73, \"SR\": 18, \"UR\": 0}\n },\n \"RH-02\": {\n \"A\": {\"R\": 37, \"SR\": 9, \"UR\": 1},\n \"B\": {\"R\": 73, \"SR\": 18, \"UR\": 1},\n \"C\": {\"R\": 182, \"SR\": 44, \"UR\": 3},\n \"D\": {\"R\": 73, \"SR\": 18, \"UR\": 1}\n },\n \"RH-03\": {\n \"A\": {\"R\": 37, \"SR\": 9, \"UR\": 1},\n \"B\": {\"R\": 73, \"SR\": 18, \"UR\": 1},\n \"C\": {\"R\": 182, \"SR\": 44, \"UR\": 3},\n \"D\": {\"R\": 73, \"SR\": 18, \"UR\": 1}\n },\n \"RS-01\": {\n \"A\": {\"R\": 36, \"SR\": 9, \"UR\": 0},\n \"B\": {\"R\": 73, \"SR\": 17, \"UR\": 1},\n \"C\": {\"R\": 182, \"SR\": 43, \"UR\": 2},\n \"D\": {\"R\": 73, \"SR\": 17, \"UR\": 1}\n },\n \"RS-02\": {\n \"A\": {\"R\": 36, \"SR\": 9, \"UR\": 0},\n \"B\": {\"R\": 73, \"SR\": 17, \"UR\": 1},\n \"C\": {\"R\": 182, \"SR\": 43, \"UR\": 2},\n \"D\": {\"R\": 73, \"SR\": 17, \"UR\": 1}\n },\n \"RS-03\": {\n \"A\": {\"R\": 36, \"SR\": 9, \"UR\": 0},\n \"B\": {\"R\": 73, \"SR\": 17, \"UR\": 1},\n \"C\": {\"R\": 182, \"SR\": 43, \"UR\": 2},\n \"D\": {\"R\": 73, \"SR\": 17, \"UR\": 1}\n },\n \"RL-01\": {\n \"A\": {\"R\": 36, \"SR\": 8, \"UR\": 1},\n \"B\": {\"R\": 73, \"SR\": 17, \"UR\": 1},\n \"C\": {\"R\": 182, \"SR\": 43, \"UR\": 2},\n \"D\": {\"R\": 73, \"SR\": 17, \"UR\": 1}\n },\n \"RL-02\": {\n \"A\": {\"R\": 36, \"SR\": 8, \"UR\": 0},\n \"B\": {\"R\": 72, \"SR\": 17, \"UR\": 1},\n \"C\": {\"R\": 182, \"SR\": 43, \"UR\": 2},\n \"D\": {\"R\": 72, \"SR\": 17, \"UR\": 1}\n },\n \"RL-03\": {\n \"A\": {\"R\": 36, \"SR\": 8, \"UR\": 0},\n \"B\": {\"R\": 72, \"SR\": 17, \"UR\": 1},\n \"C\": {\"R\": 182, \"SR\": 42, \"UR\": 2},\n \"D\": {\"R\": 72, \"SR\": 17, \"UR\": 1}\n }\n },\n \"SAPIENS\": {\n \"SM-01\": {\n \"A\": {\"R\": 27, \"SR\": 7, \"UR\": 1},\n \"B\": {\"R\": 54, \"SR\": 13, \"UR\": 1},\n \"C\": {\"R\": 137, \"SR\": 32, \"UR\": 1},\n \"D\": {\"R\": 55, \"SR\": 13, \"UR\": 1}\n },\n \"SM-02\": {\n \"A\": {\"R\": 27, \"SR\": 7, \"UR\": 1},\n \"B\": {\"R\": 54, \"SR\": 13, \"UR\": 1},\n \"C\": {\"R\": 137, \"SR\": 32, \"UR\": 1},\n \"D\": {\"R\": 55, \"SR\": 13, \"UR\": 1}\n },\n \"SM-03\": {\n \"A\": {\"R\": 27, \"SR\": 7, \"UR\": 1},\n \"B\": {\"R\": 54, \"SR\": 13, \"UR\": 1},\n \"C\": {\"R\": 136, \"SR\": 32, \"UR\": 1},\n \"D\": {\"R\": 55, \"SR\": 13, \"UR\": 1}\n },\n \"SS-01\": {\n \"A\": {\"R\": 27, \"SR\": 7, \"UR\": 1},\n \"B\": {\"R\": 54, \"SR\": 13, \"UR\": 1},\n \"C\": {\"R\": 136, \"SR\": 32, \"UR\": 1},\n \"D\": {\"R\": 55, \"SR\": 13, \"UR\": 1}\n },\n \"SS-03\": {\n \"A\": {\"R\": 27, \"SR\": 7, \"UR\": 1},\n \"B\": {\"R\": 54, \"SR\": 13, \"UR\": 1},\n \"C\": {\"R\": 136, \"SR\": 32, \"UR\": 1},\n \"D\": {\"R\": 55, \"SR\": 13, \"UR\": 1}\n },\n \"SS-04\": {\n \"A\": {\"R\": 27, \"SR\": 7, \"UR\": 1},\n \"B\": {\"R\": 54, \"SR\": 13, \"UR\": 1},\n \"C\": {\"R\": 136, \"SR\": 32, \"UR\": 1},\n \"D\": {\"R\": 55, \"SR\": 13, \"UR\": 1}\n }\n },\n \"AUGS\": {\n \"AL-01\": {\n \"A\": {\"R\": 3, \"SR\": 1, \"UR\": 0},\n \"B\": {\"R\": 5, \"SR\": 1, \"UR\": 0},\n \"C\": {\"R\": 12, \"SR\": 3, \"UR\": 1},\n \"D\": {\"R\": 5, \"SR\": 1, \"UR\": 0}\n },\n \"AL-02\": {\n \"A\": {\"R\": 3, \"SR\": 1, \"UR\": 0},\n \"B\": {\"R\": 5, \"SR\": 1, \"UR\": 1},\n \"C\": {\"R\": 12, \"SR\": 3, \"UR\": 0},\n \"D\": {\"R\": 5, \"SR\": 1, \"UR\": 0}\n },\n \"AL-04\": {\n \"A\": {\"R\": 3, \"SR\": 1, \"UR\": 0},\n \"B\": {\"R\": 5, \"SR\": 1, \"UR\": 0},\n \"C\": {\"R\": 12, \"SR\": 3, \"UR\": 0},\n \"D\": {\"R\": 5, \"SR\": 1, \"UR\": 1}\n },\n \"AXS-03\": {\n \"A\": {\"R\": 3, \"SR\": 1, \"UR\": 1},\n \"B\": {\"R\": 5, \"SR\": 1, \"UR\": 0},\n \"C\": {\"R\": 12, \"SR\": 3, \"UR\": 0},\n \"D\": {\"R\": 5, \"SR\": 1, \"UR\": 0}\n },\n },\n \"EXOS\": {\n \"EXL-01\": {\n \"A\": {\"R\": 1, \"SR\": 1, \"UR\": 0},\n \"B\": {\"R\": 2, \"SR\": 0, \"UR\": 0},\n \"C\": {\"R\": 3, \"SR\": 0, \"UR\": 0},\n \"D\": {\"R\": 1, \"SR\": 0, \"UR\": 0}\n },\n \"EXL-02\": {\n \"A\": {\"R\": 1, \"SR\": 0, \"UR\": 0},\n \"B\": {\"R\": 2, \"SR\": 0, \"UR\": 0},\n \"C\": {\"R\": 3, \"SR\": 0, \"UR\": 0},\n \"D\": {\"R\": 1, \"SR\": 1, \"UR\": 0}\n },\n \"EXL-03\": {\n \"A\": {\"R\": 1, \"SR\": 0, \"UR\": 1},\n \"B\": {\"R\": 1, \"SR\": 1, \"UR\": 0},\n \"C\": {\"R\": 3, \"SR\": 0, \"UR\": 0},\n \"D\": {\"R\": 1, \"SR\": 0, \"UR\": 0}\n },\n \"EXS-01\": {\n \"A\": {\"R\": 1, \"SR\": 0, \"UR\": 0},\n \"B\": {\"R\": 2, \"SR\": 0, \"UR\": 0},\n \"C\": {\"R\": 2, \"SR\": 1, \"UR\": 0},\n \"D\": {\"R\": 2, \"SR\": 0, \"UR\": 0}\n },\n },\n \"ASCENDII\": {\n \"ASC-01\": {\"A\": {\"UQ\": 1}},\n \"ASC-02\": {\"B\": {\"UQ\": 1}},\n \"ASC-03\": {\"D\": {\"UQ\": 1}},\n \"ASC-04\": {\"C\": {\"UQ\": 1}},\n \"ASC-05\": {\"A\": {\"UQ\": 1}},\n \"ASC-06\": {\"B\": {\"UQ\": 1}},\n \"ASC-07\": {\"D\": {\"UQ\": 1}},\n \"ASC-08\": {\"C\": {\"UQ\": 1}}\n },\n \"OMEGA\": {\n \"OXO-01\": 1\n }\n}\n","import React, { forwardRef, useMemo, useLayoutEffect } from 'react';\nimport { Effect, BlendFunction } from 'postprocessing';\nimport { Archetype, Rarity } from './components/@types';\n\nimport {\n RARITY, EXT, voxoTree, possibleUrlParam, urlParamAlias, bucket,\n GLB_TYPE, ASSET, bustAssets, defaultCameraLoc, defaultCameraLookat, defaultFov\n} from './constants';\n\nexport type VEC3 = [number, number, number]\n\ntype DefaultProps = Partial<{ blendFunction: BlendFunction; opacity: number }>\ntype GearOption = { [gearOption: string]: boolean }\ntype UrlConfig = {\n bg: string\n // gear: GearState\n portal: boolean\n light: string\n company: string[]\n party: string[]\n interval: string\n turntable: string\n vig: VEC3\n camloc: VEC3\n camlookat: VEC3\n fov: number\n omegakey: string\n gilded: boolean\n \n scene: string\n extra_scene: string\n extra_scene_anomalous: string\n extra_420: string\n extra_mint_cycle: string\n extra_pet: string\n extra_pet_collab: string\n extra_pet_robit: string\n extra_bonsai: string\n\n dome_color: string\n dome_intensity: number\n token_id: string\n}\ntype VoxoInfo = {\n voxoName: string\n archetype: string\n faction: string\n rarity: string\n base: string\n isHero: boolean\n type: GLB_TYPE.PRESALE | GLB_TYPE.HERO | GLB_TYPE.SPECIAL | GLB_TYPE.DIAMOND\n}\n\nexport type GearState = { [gearSlot: string]: GearOption }\n\nexport type UrlParseResult = {\n urlReq: UrlConfig & VoxoInfo,\n extras: { gear: GearState }\n};\n\nexport function swapAxis(vec3: number[], offset: number = 0) {\n return [vec3[0], vec3[2] + offset, -vec3[1]];\n}\n\nexport function getPath(type: string, subcategory: string | null, filename: string, ext?: EXT) {\n // const extKey = type.toUpperCase() as keyof typeof EXT;\n subcategory = subcategory ? `/${subcategory}` : '';\n ext = (!ext && EXT[type.toUpperCase() as keyof typeof EXT]) || ext;\n filename = filename ? `/${filename}${ext ? '.' + ext : ''}` : '';\n return `${bucket}/${type}${subcategory}${filename}`;\n}\n\nexport function parseRequest(voxoName: string, cfg: URLSearchParams = new URLSearchParams('')): UrlParseResult {\n const voxo = parseVoxoName(voxoName);\n const cfgFallback = (cfg: null | undefined | string, prefix?: string) => {\n if (cfg)\n return `${prefix || ''}${cfg.trim().toUpperCase()}`;\n else return '';\n };\n const cfgToBoolean = (cfg: string | null) => (cfg && /true/i.test(cfg)) ? true : false;\n const colorFallback = (value: string | null) => {\n if (value) {\n const test1 = /^([0-9A-F]{6}|[0-9A-F]{3})$/i.test(value);\n const test2 = /^0x([0-9A-F]{6}|[0-9A-F]{3})$/i.test(value);\n\n if (test1)\n return `#${value}`;\n else if (test2)\n return `#${value.substr(2)}`;\n }\n return '';\n };\n const vec3Fallback = (value: string | null, fallback?: VEC3): VEC3 => {\n if (!value) return fallback || [0, 0, 0];\n const numbers = value.split(',').map(v => cfgFallback(v)).filter(v => v.length).map(v => Number(v))\n if (numbers.length >= 3) {\n const [x, y, z] = numbers\n return [x, y, z]\n }\n else {\n return fallback || [0, 0, 0];\n }\n }\n const config: UrlConfig = {\n bg: colorFallback(cfg.get('bg')) || '#0E1C34',\n portal: cfgToBoolean(cfg.get('portal')),\n light: cfgFallback(cfg.get('light')),\n company: (cfg.get('company') || '').split(',').map(v => cfgFallback(v)).filter(v => v.length),\n party: (cfg.get('party') || '').split(',').map(v => cfgFallback(v)).filter(v => v.length),\n interval: cfgFallback(cfg.get('interval')),\n turntable: cfgFallback(cfg.get('turntable')),\n vig: vec3Fallback(cfg.get('vig')),\n camloc: vec3Fallback(cfg.get('camloc'), defaultCameraLoc),\n camlookat: vec3Fallback(cfg.get('camlookat'), defaultCameraLookat),\n fov: Math.sqrt(Math.pow(Number(cfgFallback(cfg.get('fov'))) || defaultFov, 2)),\n omegakey: cfgFallback(cfg.get('omegakey')),\n gilded: cfgToBoolean(cfg.get('gilded')),\n\n extra_420: cfgFallback(cfg.get('extra_420')).replace(/^joint$/i, ASSET.SPLIFF),\n extra_bonsai: cfgFallback(cfg.get('extra_bonsai')),\n extra_mint_cycle: cfgFallback(cfg.get('extra_mint_cycle')),\n extra_pet: cfgFallback(cfg.get('extra_pet')),\n extra_pet_collab: cfgFallback(cfg.get('extra_pet_collab')),\n extra_pet_robit: cfgFallback(cfg.get('extra_pet_robit')),\n extra_scene: cfgFallback(cfg.get('extra_scene')),\n extra_scene_anomalous: cfgFallback(cfg.get('extra_scene_anomalous')),\n scene: cfgFallback(cfg.get('scene')),\n token_id: cfgFallback(cfg.get('token_id')),\n\n dome_color: colorFallback(cfg.get('dome_color')) || 'white',\n dome_intensity: Number(cfgFallback(cfg.get('dome_intensity')))\n };\n\n if (voxoName === 'ASC-01') {\n if (config.extra_420 in urlParamAlias)\n config.extra_420 = urlParamAlias[config.extra_420];\n\n // use blue tipped spliff instead of red\n if (config.extra_420 === 'SPLIFF')\n config.extra_420 = 'SPLIFF-ASC-01'\n }\n\n if (config.vig.length !== 3 || config.vig.some(val => typeof val !== 'number')) {\n config.vig = [0.125, 0.8, 20];\n }\n\n false && getTestUrls(voxo.archetypes);\n\n return {\n urlReq: {\n voxoName,\n archetype: voxo.archetype,\n faction: voxo.faction,\n rarity: voxo.faction,\n base: voxo.base,\n isHero: voxo.isHero,\n type: voxo.type,\n ...config\n },\n extras: {\n gear: cfgFallback(cfg.get('gear')).split(';').reduce((acc, grp) => {\n const slotItems = grp.split(',').map(gear => gear.trim());\n const stateKey = slotItems.length ? slotItems.shift() : null;\n\n stateKey && slotItems.forEach(item => {\n if (stateKey in acc)\n acc[stateKey][item] = false;\n else\n acc[stateKey] = { [item]: false };\n });\n return acc;\n }, {} as GearState)\n }\n };\n}\n\nexport function getArchetypes() {\n return Object.values(voxoTree).reduce((acc: Archetype, species) => {\n typeof species === 'object' && Object.entries(species).forEach(\n ([a_name, rarities]) => (acc[a_name] = rarities)\n );\n return acc;\n }, {});\n}\n\nexport function parseVoxoName(filename: string) {\n const [archetype, faction, rarity] = filename.replace(/^HC-/i, '').split('_');\n const archetypes = getArchetypes();\n const archetypeCode = archetype.split('-')[0];\n const rarityCode = rarity && rarity.split(/\\d+/)[0]\n const rarityMatch = (r: Rarity) => Object.entries(r).filter(([_, n]) => n).some(([_r, n]) => {\n for (let i = 1; i <= n; i++) {\n const match = `${_r}${pad(i, 4)}` === rarity;\n if (match) return true;\n }\n return false;\n \n });\n const existInTree = () => Object.entries(archetypes[archetype]).some(([f, r]) => {\n if (f === faction)\n return rarityMatch(r);\n else if (!faction) {\n _faction = Object.keys(archetypes[archetype])[0];\n return true;\n }\n return false;\n });\n let isHero = false,\n type = GLB_TYPE.PRESALE,\n _faction = '',\n base = faction;\n\n if (archetype in archetypes) {\n if (typeof archetypes[archetype] === 'number' || existInTree()) {\n isHero = true;\n type = GLB_TYPE.HERO;\n }\n\n if (rarityCode === RARITY.SR)\n base = `${archetypeCode}-${rarityCode}-${faction}`;\n else if (rarityCode === RARITY.UR)\n base = `${archetypeCode}-${RARITY.UR}`;\n }\n else if ([...bustAssets, ASSET.ROBOT_BUST, ASSET.MECHA_CHAOTIC, ASSET.ASC05_SPOOKY, ASSET.GOODBOI, ASSET.GOODBOI_FAB].includes(filename as ASSET)) {\n type = GLB_TYPE.SPECIAL;\n }\n\n return {\n isHero,\n type,\n base: base || _faction,\n archetype,\n rarity,\n archetypes,\n archetypeCode,\n faction: faction || _faction || '',\n rarityCode: rarityCode || RARITY.UQ\n }\n}\n\nexport const wrapEffect = Effect>(\n effectImpl: T,\n defaultBlendMode: BlendFunction = BlendFunction.NORMAL\n) => {\n return forwardRef[0] & DefaultProps>(function Wrap(\n { blendFunction, opacity, ...props }: React.PropsWithChildren[0]>,\n ref\n ) {\n const effect: Effect = useMemo(() => new effectImpl(props), [props])\n\n useLayoutEffect(() => {\n effect.blendMode.blendFunction = blendFunction || defaultBlendMode\n if (opacity !== undefined)\n effect.blendMode.opacity.value = opacity\n }, [\n blendFunction,\n effect.blendMode,\n opacity\n ]);\n\n return \n })\n};\n\nexport function capLeadingLetter(text: string) {\n return `${text.charAt(0).toUpperCase()}${text.slice(1).toLowerCase()}`;\n}\n\nexport function toTitle(text: string) {\n return text.split(/\\s+|_|-/).map(word => capLeadingLetter(word)).join(' ');\n}\n\nfunction pad(number: number | string, length: number) {\n let str = '' + number;\n while (str.length < length) { str = '0' + str }\n return str;\n}\n\nfunction getRandomItem(arr: Array) {\n // get random index value\n const randomIndex = Math.floor(Math.random() * arr.length);\n // get random item\n const item = arr[randomIndex];\n\n return item;\n}\n\nfunction getUrlParams(_idx: number) {\n let params: Array = [];\n\n Object.entries(possibleUrlParam).forEach(([p_name, p_values]) => {\n if (p_values.length && Math.random() > 0.25)\n params.push(`${p_name}=${getRandomItem([...p_values])}`)\n });\n\n return params.join('&');\n}\n\nfunction getTestUrls(archetypes: Archetype) {\n testUrl = testUrl || Object.fromEntries(Object.entries(archetypes).map(([a_name, faction], idx) => {\n const factionKeys = Object.keys(faction);\n const randFactionKeys = Math.floor(Math.random() * factionKeys.length);\n const tiers = Object.values(faction)[randFactionKeys];\n // let url = `https://voxo-3js-staging.herokuapp.com/${a_name}`;\n let url = `https://voxo-3js-mainnet.herokuapp.com/${a_name}`;\n\n if (tiers && !tiers.UQ) {\n !tiers.UR && delete tiers.UR;\n\n const tierKeys = Object.keys(tiers).filter(key => tiers[key]);\n const randTierKey = Math.floor(Math.random() * tierKeys.length);\n const n = pad(Object.values(tiers)[randTierKey], 4);\n\n url += `_${factionKeys[randFactionKeys]}_${tierKeys[randTierKey]}${n}`;\n }\n\n return [idx + 1, `${url}?${getUrlParams(idx)}`];\n }));\n\n console.log(JSON.stringify(testUrl));\n}\n\nlet testUrl: object;\n\n// getTestUrls();\n","import React, { useEffect, useRef } from 'react'\nimport { GLTFLoader } from 'three-stdlib'\nimport { AnimationMixer, BufferGeometry, Color, DirectionalLight, Group, Mesh, MeshStandardMaterial, Texture, Vector3 } from 'three'\n\nimport AssetLoader from './AssetLoader'\nimport { useLoaderStore } from './Loading'\nimport { GearState, getPath, swapAxis } from '../utils'\nimport { ASSET_TYPE, envNameMap, GLB_TYPE } from '../constants'\nimport { useFrame } from '@react-three/fiber'\n\ntype GlbProps = {\n filename: string\n subcategory: GLB_TYPE\n env?: string\n archetype?: string\n initPos?: Vector3 | number[]\n initScl?: Vector3 | number[]\n offset?: number\n visible?: boolean\n settings?: GlbSettings\n}\ntype GlbSettings = {\n onclick?: () => void\n gearActive?: GearState\n material?: {\n roughness?: number\n metalness?: number\n map?: Texture\n } & any,\n diamond?: boolean\n}\n\ntype DiamondProps = { geometry: BufferGeometry }\n\nconst Diamond: React.FC = ({ geometry }) => {\n const materialProps = {\n thickness: 3,\n roughness: 0,\n clearcoat: 0.3,\n clearcoatRoughness: 0.6,\n transmission: 1,\n ior: 1.8,\n envMapIntensity: 1.8,\n color: new Color('white')\n }\n\n return \n \n \n \n \n}\n\nconst Glb: React.FC = ({ filename, subcategory, env, archetype, initPos, initScl, offset, visible = true, settings = {} }) => {\n const setProgress = useLoaderStore(state => state.setProgress)\n const assetName = `${subcategory}/${filename}`\n const glb = AssetLoader(\n GLTFLoader,\n getPath(ASSET_TYPE.GLB, subcategory, filename),\n undefined,\n xhr => setProgress(assetName, xhr.loaded / xhr.total)\n )\n const envNames = Object.values(envNameMap).reduce((acc, group) => {\n acc = Object.assign(acc, group)\n return acc\n }, {} as { [newName: string]: string })\n const oldEnvName = env && envNames[env]\n const userData = glb && glb.scene.children[0].userData\n const coords = userData && (\n (oldEnvName && oldEnvName in userData && userData[oldEnvName]) ||\n (archetype && archetype in userData && userData[archetype])\n )\n const position = (coords && swapAxis(coords, offset)) || initPos\n const { scene, gearGlbs } = subcategory === GLB_TYPE.HERO ?\n applyGearSettings(glb.scene, settings.gearActive || {}, position, visible, settings) : {\n scene: glb.scene,\n gearGlbs: []\n }\n const meshes = Object.values(glb.nodes).filter(n => n instanceof Mesh).map(n => n as Mesh)\n let mixer = useRef()\n\n scene.name = subcategory\n\n useEffect(() => {\n if (glb.animations.length) {\n mixer.current = new AnimationMixer(glb.scene)\n glb.animations.forEach(clip => mixer.current && mixer.current.clipAction(clip).play())\n }\n }, [glb])\n\n useFrame((_, delta) => mixer.current && mixer.current.update(delta))\n\n return glb ? (subcategory === GLB_TYPE.DIAMOND ? : <>\n \n {gearGlbs}\n ) : <>\n}\n\nfunction applyGearSettings(\n scene: Group,\n gear: GearState,\n position: Vector3 | number[],\n visible: boolean,\n settings: GlbSettings\n) {\n const gearGlbs = [] as any\n const gearSlots = Object.keys(gear)\n\n scene.children = scene.children.filter(child => {\n if (gearSlots.includes(child.name)) {\n console.log('-------------------------------', child.name)\n\n const gearOptions = Object.entries(gear[child.name])\n\n return !gearOptions.some(([option, state]) => {\n console.log(option, state)\n if (state)\n gearGlbs.push(\n \n )\n return state\n })\n }\n return true\n })\n\n return { scene, gearGlbs }\n}\n\nfunction applyMaterialSettings(group: Group, visible: boolean, settings: GlbSettings) {\n const { roughness, metalness } = settings.material || {}\n const editMaterial = (material: MeshStandardMaterial) => {\n material.needsUpdate = true\n material.dithering = true\n material.roughness = roughness === undefined ? 1 : roughness\n\n /**\n * TODO: implement better glass shader\n * @see https://codesandbox.io/s/glas-transmission-fresnel-enx1u\n */\n if (/^G\\d{2}-/.test(material.name) || material.opacity < 1) {\n // TODO: disable for adjusted glb files\n // material.opacity = 0.6\n material.transparent = true\n }\n else if (/^M\\d{2}-/.test(material.name)) {\n material.metalness = 0.75\n material.roughness = 0.6\n }\n else if (/^E\\d{2}-/.test(material.name)) {\n material.metalness = 0\n material.roughness = 1\n }\n else\n material.metalness = metalness === undefined ? 0 : metalness\n\n // rename material to avoid clash with other asset materials\n material.name = `${material.name}#${material.uuid}`\n }\n\n // traverse object tree\n group.children.forEach(child => {\n if (child instanceof Mesh) {\n const mat = child.material as MeshStandardMaterial | MeshStandardMaterial[]\n\n if (/RENDER|PLANE(_\\d)?/i.test(child.name))\n child.castShadow = false\n else child.castShadow = true\n\n child.visible = visible\n Array.isArray(mat) ? mat.forEach(editMaterial) : editMaterial(mat)\n }\n else if (child instanceof DirectionalLight) {\n const frustum = 15\n\n child.castShadow = true\n\n Object.assign(child.shadow.camera, {\n top: frustum,\n bottom: -frustum,\n left: -frustum,\n right: frustum\n })\n }\n else if (child.children.length)\n applyMaterialSettings(child as Group, visible, settings)\n })\n\n return group\n}\n\nexport default Glb","import create from 'zustand'\nimport React, { useState } from 'react'\nimport { Color, Mesh, MeshStandardMaterial, PerspectiveCamera, Vector2 } from 'three'\nimport { useThree, useFrame, createPortal } from '@react-three/fiber'\nimport { Plane, useFBO } from '@react-three/drei'\n\nimport Glb from './Glb'\nimport { useViewerStore } from './Viewer'\n\nimport { GearState, parseVoxoName } from '../utils'\nimport { GLB_TYPE, ASSET } from '../constants'\n\ntype VoxoStore = {\n audio: string\n audioActive: boolean\n bonsaiActive: boolean\n envActive: boolean\n extraEnvActive: boolean\n anomalousEnvActive: boolean\n gearActive: GearState\n addonActive: boolean\n petActive: boolean\n petRobitActive: boolean\n petCollabActive: boolean\n omegaKeyActive: boolean\n gildedActive: boolean\n cubeActive: boolean\n turntable: boolean\n setAudio: (track: string) => void\n setGear: (gear: GearState) => void\n toggleAudio: () => void\n toggleEnv: () => void\n toggleExtraEnv: () => void\n toggleAnomalousEnv: () => void\n toggleGear: (slot: string, option?: string) => void\n toggleAddon: () => void\n togglePet: () => void\n togglePetRobit: () => void\n togglePetCollab: () => void\n toggleBonsai: () => void\n toggleOmegaKey: () => void\n toggleGilded: () => void\n toggleCube: () => void\n toggleTurntable: () => void\n}\n\n/**\n * @\n * @see http://localhost:3000/AL-01_C_R2_2?company=EXS-01_D_R0002,SM-02_C_R0003,RL-02_B_R0005&interval=1\n * @see http://localhost:3000/RL-01_D_R0028?bg=angos&light=angos&company=SS-04_C_SR0009,RH-03_D_R0016,EXL-01_B_R0001,SM-03_A_UR0001,RS-01_C_SR0024,EXL-02_C_R0002,SS-03_D_R0052,RS-02_A_R0002&interval=0.5\n */\nconst Flipbook: React.FC = () => {\n const [frame, setFrame] = useState(0)\n const [voxoName, company, interval] = useViewerStore(state => [\n state.urlReq.voxoName,\n state.urlReq.company,\n state.urlReq.interval\n ])\n const heroes = [voxoName, ...company].map((hero, idx) => {\n const { type } = parseVoxoName(hero)\n\n return (\n \n )\n })\n const bases = Array.from(new Set([voxoName, ...company].map(hero => parseVoxoName(hero).base)))\n .map(baseName => )\n let elapsed = 0\n\n useFrame((_, delta) => {\n elapsed += delta\n\n if (elapsed > Number(interval)) {\n elapsed = 0\n\n if (frame < company.length) {\n setFrame(frame + 1)\n }\n else setFrame(0)\n }\n })\n\n return <>{heroes}{bases}\n}\nconst Party: React.FC = () => {\n const [voxoName, party] = useViewerStore(state => [\n state.urlReq.voxoName,\n state.urlReq.party\n ])\n const heroes = [voxoName, ...party].map((hero, idx) => {\n const { type } = parseVoxoName(hero)\n\n return \n })\n const bases = Array.from(new Set([voxoName, ...party].map(hero => parseVoxoName(hero).base)))\n .map(baseName => )\n\n return <>{heroes}{bases}\n}\nconst Hero: React.FC = () => {\n const [cubeActive, gildedActive, gearActive] = useVoxoStore(state => [\n state.cubeActive,\n state.gildedActive,\n state.gearActive\n ])\n const [voxoName, isHero, type] = useViewerStore(state => [\n state.urlReq.voxoName,\n state.urlReq.isHero,\n state.urlReq.type\n ])\n const hasBase = gildedActive || [ASSET.OMEGA, ASSET.MEDUSA].includes(voxoName as ASSET)\n const yOffset = isHero && !hasBase ? 0.3 : 0\n const cameraControl = useViewerStore(state => state.cameraControl)\n\n return voxoName !== ASSET.CUBE ? cameraControl.autoRotate = !cameraControl.autoRotate,\n gearActive\n }}\n /> : <>\n}\nconst BasePad: React.FC = () => {\n const [isHero, base, company] = useViewerStore(state => [\n state.urlReq.isHero,\n state.urlReq.base,\n state.urlReq.company\n ])\n const [cubeActive, gildedActive] = useVoxoStore(state => [state.cubeActive, state.gildedActive])\n\n return base && !company.length ?\n :\n <>\n}\nconst Environment: React.FC = () => {\n const env = useViewerStore(state => state.urlReq.scene)\n const [envActive, cubeActive] = useVoxoStore(state => [state.envActive, state.cubeActive])\n\n return envActive ?\n :\n <>\n}\nconst ExtraEnvironment: React.FC = () => {\n const extraEnv = useViewerStore(state => state.urlReq.extra_scene)\n const [extraEnvActive, cubeActive] = useVoxoStore(state => [state.extraEnvActive, state.cubeActive])\n\n return extraEnvActive ?\n :\n <>\n}\nconst AnomalousEnvironment: React.FC = () => {\n const anomalousEnv = useViewerStore(state => state.urlReq.extra_scene_anomalous)\n const [anomalousEnvActive, cubeActive] = useVoxoStore(state => [state.anomalousEnvActive, state.cubeActive])\n\n return anomalousEnvActive ?\n :\n <>\n}\nconst Addon: React.FC = () => {\n const [voxoName, env, extraEnv, anomalousEnv, addon] = useViewerStore(state => [\n state.urlReq.voxoName,\n state.urlReq.scene,\n state.urlReq.extra_scene,\n state.urlReq.extra_scene_anomalous,\n state.urlReq.extra_420\n ])\n const [envActive, extraEnvActive, anomalousEnvActive, addonActive, cubeActive] = useVoxoStore(state => [\n state.envActive,\n state.extraEnvActive,\n state.anomalousEnvActive,\n state.addonActive,\n state.cubeActive\n ])\n\n return addon ? : <>\n}\nconst Pet: React.FC = () => {\n const [env, extraEnv, anomalousEnv, pet] = useViewerStore(state => [\n state.urlReq.scene,\n state.urlReq.extra_scene,\n state.urlReq.extra_scene_anomalous,\n state.urlReq.extra_pet\n ])\n const [envActive, extraEnvActive, anomalousEnvActive, petActive, cubeActive] = useVoxoStore(state => [\n state.envActive,\n state.extraEnvActive,\n state.anomalousEnvActive,\n state.petActive,\n state.cubeActive\n ])\n\n return pet ? : <>\n}\nconst PetRobit: React.FC = () => {\n const [env, extraEnv, anomalousEnv, petRobit] = useViewerStore(state => [\n state.urlReq.scene,\n state.urlReq.extra_scene,\n state.urlReq.extra_scene_anomalous,\n state.urlReq.extra_pet_robit,\n ])\n const [envActive, extraEnvActive, anomalousEnvActive, petRobitActive, cubeActive] = useVoxoStore(state => [\n state.envActive,\n state.extraEnvActive,\n state.anomalousEnvActive,\n state.petRobitActive,\n state.cubeActive\n ])\n\n return petRobit ? : <>\n}\nconst PetCollab: React.FC = () => {\n const [env, extraEnv, anomalousEnv, petCollab] = useViewerStore(state => [\n state.urlReq.scene,\n state.urlReq.extra_scene,\n state.urlReq.extra_scene_anomalous,\n state.urlReq.extra_pet_collab,\n ])\n const [envActive, extraEnvActive, anomalousEnvActive, petCollabActive, cubeActive] = useVoxoStore(state => [\n state.envActive,\n state.extraEnvActive,\n state.anomalousEnvActive,\n state.petCollabActive,\n state.cubeActive\n ])\n\n return petCollab ? : <>\n}\nconst ExtraBonsai: React.FC = () => {\n const bonsai = useViewerStore(state => state.urlReq.extra_bonsai)\n const [bonsaiActive, envActive, extraEnvActive, anomalousEnvActive, cubeActive] = useVoxoStore(state => [\n state.bonsaiActive,\n state.envActive,\n state.extraEnvActive,\n state.anomalousEnvActive,\n state.cubeActive\n ])\n\n return bonsai ? : <>\n}\nconst OmegaKey: React.FC = () => {\n const omegaKey = useViewerStore(state => state.urlReq.omegakey).toLowerCase()\n const [omegaKeyActive, envActive, extraEnvActive, anomalousEnvActive, cubeActive] = useVoxoStore(state => [\n state.omegaKeyActive,\n state.envActive,\n state.extraEnvActive,\n state.anomalousEnvActive,\n state.cubeActive\n ])\n\n return ['true', 'false'].includes(omegaKey) ? : <>\n}\nconst VoxoCube: React.FC = () => {\n const cubeActive = useVoxoStore(state => state.cubeActive)\n const voxoName = useViewerStore(state => state.urlReq.voxoName)\n\n return \n}\nconst ShadowCatcher: React.FC = () => {\n const [envActive, extraEnvActive, anomalousEnvActive] = useVoxoStore(state => [\n state.envActive,\n state.extraEnvActive,\n state.anomalousEnvActive\n ])\n\n return \n \n \n}\nconst HeroCard: React.FC = () => {\n const target = useFBO()\n const { camera, scene } = useThree()\n const [voxoName, base, portal] = useViewerStore(state => [\n state.urlReq.voxoName,\n state.urlReq.base,\n state.urlReq.portal\n ])\n const heroName = voxoName.replace(/^HC-/i, '')\n\n console.log(portal)\n\n useFrame(state => {\n if (!portal) return\n\n const card = scene.getObjectByName(GLB_TYPE.CARD)\n const cel = scene.getObjectByName('RENDER') as Mesh\n const hero = scene.getObjectByName(GLB_TYPE.HERO)\n const base = scene.getObjectByName(GLB_TYPE.BASE)\n\n if (card && hero && cel && cel.material instanceof MeshStandardMaterial) {\n const bg = scene.background\n const cam = camera.clone() as PerspectiveCamera\n\n scene.background = null\n card.visible = false\n hero.visible = true\n base && (base.visible = true)\n\n // cam.position.x *= 2;\n // cam.position.y *= 2;\n // cam.position.z *= 2;\n // cam.position.divide(new Vector3(2, 2, 0.8));\n cam.position.multiplyScalar(2)\n cam.position.clampLength(10, 10)\n cam.lookAt(0, 3.5, 0)\n\n state.gl.setRenderTarget(target)\n state.gl.render(scene, cam)\n state.gl.setRenderTarget(null)\n\n if (target.texture.matrixAutoUpdate) {\n target.texture.rotation = Math.PI\n target.texture.center = new Vector2(0.5, 0.5)\n target.texture.repeat = new Vector2(-window.innerHeight / window.innerWidth, 1)\n }\n else {\n /**\n * @see https://threejs.org/examples/webgl_materials_texture_rotation.html\n */\n console.warn('matrixAutoUpdate is not supported')\n }\n\n cel.material.map = target.texture\n\n card.visible = true\n hero.visible = false\n base && (base.visible = false)\n scene.background = bg\n }\n })\n\n return <>\n {portal && createPortal(<>\n \n \n , scene)}\n \n \n}\nconst Voxo: React.FC = () => {\n const { scene } = useThree()\n const [name, bg, company, party] = useViewerStore(state => [\n state.name,\n state.urlReq.bg,\n state.urlReq.company,\n state.urlReq.party\n ])\n\n scene.background = new Color(bg).convertSRGBToLinear()\n\n if (name.startsWith('HC-')) {\n return <>\n \n \n \n }\n else if (company.length) {\n return \n }\n else if (party.length) {\n return \n }\n\n return <>\n {name && \n \n {name !== ASSET.MEDUSA && }\n \n \n \n \n \n \n \n \n \n \n \n }\n {/* */}\n \n}\n\nexport const useVoxoStore = create(set => ({\n audio: '',\n audioActive: false,\n envActive: false,\n extraEnvActive: false,\n anomalousEnvActive: false,\n\n gearActive: {},\n addonActive: false,\n petActive: false,\n petRobitActive: false,\n petCollabActive: false,\n bonsaiActive: false,\n omegaKeyActive: true,\n gildedActive: false,\n cubeActive: false,\n turntable: false,\n\n setAudio: track => set(({ audio: track })),\n setGear: gear => set(({ gearActive: gear })),\n\n toggleAudio: () => set(state => ({ audioActive: !state.audioActive })),\n toggleEnv: () => set(state => ({\n envActive: !state.envActive,\n extraEnvActive: false,\n anomalousEnvActive: false\n })),\n toggleExtraEnv: () => set(state => ({\n envActive: false,\n extraEnvActive: !state.extraEnvActive,\n anomalousEnvActive: false\n })),\n toggleAnomalousEnv: () => set(state => ({\n envActive: false,\n extraEnvActive: false,\n anomalousEnvActive: !state.anomalousEnvActive\n })),\n\n toggleGear: (slot, option) => set(state => {\n // const { gearActive: oldStates } = state;\n\n // Object.entries(oldStates).forEach(([_slot, options]) => {\n // if (option === _slot)\n // });\n // return { gearActive: state.gearActive };\n }),\n toggleAddon: () => set(state => ({ addonActive: !state.addonActive })),\n togglePet: () => set(state => ({\n petActive: !state.petActive,\n petRobitActive: false\n })),\n togglePetRobit: () => set(state => ({\n petActive: false,\n petRobitActive: !state.petRobitActive\n })),\n togglePetCollab: () => set(state => ({ petCollabActive: !state.petCollabActive })),\n toggleBonsai: () => set(state => ({ bonsaiActive: !state.bonsaiActive })),\n toggleOmegaKey: () => set(state => ({ omegaKeyActive: !state.omegaKeyActive })),\n toggleGilded: () => set(state => ({ gildedActive: !state.gildedActive })),\n toggleCube: () => set(state => ({\n envActive: false,\n extraEnvActive: false,\n anomalousEnvActive: false,\n addonActive: false,\n petActive: false,\n petRobitActive: false,\n petCollabActive: false,\n bonsaiActive: false,\n cubeActive: !state.cubeActive\n })),\n toggleTurntable: () => set(state => ({ turntable: !state.turntable })),\n}))\n\nexport default Voxo","import React from 'react';\n\nimport Glb from './Glb';\nimport { useViewerStore } from './Viewer';\nimport { useVoxoStore } from './Voxo';\n\nimport { ASSET, GLB_TYPE } from '../constants';\n\nconst LightRig: React.FC = () => {\n const [cubeActive] = useVoxoStore(state => [state.cubeActive]);\n const [lightRig, voxoName] = useViewerStore(state => [state.urlReq.light, state.urlReq.voxoName]);\n const cubeRig = cubeActive || voxoName === ASSET.CUBE;\n\n return (<>\n \n \n );\n};\n\nexport default LightRig;","import React from 'react'\nimport { PMREMGenerator, CubeTextureLoader } from 'three'\nimport { useThree, useLoader } from '@react-three/fiber'\nimport { presetsObj } from '@react-three/drei/helpers/environment-assets'\nimport { RGBELoader } from 'three-stdlib'\nimport { useAsset } from 'use-asset'\n\nimport { ASSET, bucket, EXT } from '../../constants'\n\nfunction getTexture(texture, gen, isCubeMap) {\n if (isCubeMap) {\n gen.compileEquirectangularShader()\n return gen.fromCubemap(texture).texture\n }\n\n return gen.fromEquirectangular(texture).texture\n}\n\nconst CUBEMAP_ROOT = 'https://rawcdn.githack.com/pmndrs/drei-assets/aa3600359ba664d546d05821bcbca42013587df2'\n\nfunction extendPreset(extension) {\n return Object.assign({}, presetsObj, extension)\n}\n\nfunction Environment({\n background = false,\n files = ['/px.png', '/nx.png', '/py.png', '/ny.png', '/pz.png', '/nz.png'],\n path = '',\n preset = undefined,\n scene,\n extensions,\n active\n}) {\n if (preset) {\n const extendedPreset = extendPreset({\n bridge: `${ASSET.BRIDGE}.${EXT.HDR}`,\n winter: `${ASSET.WINTER}.${EXT.HDR}`,\n whirlwind: `${ASSET.WHIRLWIND}.${EXT.HDR}`,\n snow: `${ASSET.SNOW}.${EXT.HDR}`\n })\n\n if (!(preset in extendedPreset)) {\n throw new Error('Preset must be one of: ' + Object.keys(extendedPreset).join(', '))\n }\n\n files = extendedPreset[preset]\n path = preset in presetsObj ?\n CUBEMAP_ROOT + '/hdri/' :\n `${bucket}/hdri/`\n // https://storage.googleapis.com/voxodeus/voxo_assets\n }\n\n const defaultScene = useThree(({ scene }) => scene)\n const gl = useThree(({ gl }) => gl)\n const isCubeMap = Array.isArray(files)\n const loader = isCubeMap ? CubeTextureLoader : RGBELoader // @ts-expect-error\n const loaderResult = useLoader(loader, isCubeMap ? [files] : files, loader => {\n loader.setPath(path)\n if (extensions) extensions(loader)\n })\n const map = isCubeMap ? loaderResult[0] : loaderResult // PMREMGenerator takes its sweet time to generate the env-map,\n // Let's make this part of suspense, or else it just yields a frame-skip\n\n const texture = useAsset(() => new Promise(res => {\n const gen = new PMREMGenerator(gl)\n const texture = getTexture(map, gen, isCubeMap)\n gen.dispose()\n res(texture)\n }), map)\n React.useLayoutEffect(() => {\n if (!active) return\n\n const oldbg = scene ? scene.background : defaultScene.background\n const oldenv = scene ? scene.environment : defaultScene.environment\n\n if (scene) {\n scene.environment = texture\n if (background) scene.background = texture\n }\n else {\n defaultScene.environment = texture\n if (background) defaultScene.background = texture\n }\n\n return () => {\n if (scene) {\n scene.environment = oldenv\n scene.background = oldbg\n } else {\n defaultScene.environment = oldenv\n defaultScene.background = oldbg\n } // Environment textures are volatile, better dispose and uncache them\n\n\n useAsset.clear(map)\n texture.dispose()\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [texture, background, scene, active])\n return null\n}\n\nexport { Environment }\n","import create from 'zustand'\nimport styled from 'styled-components'\nimport React, { useState } from 'react'\n\nimport Toggle from './Toggle'\nimport { useVoxoStore } from '../Voxo'\nimport { useViewerStore } from '../Viewer'\nimport { cameraLocForPet, cameraLookatForPet } from '../../constants'\n\nimport config_icon from '../../assets/img/config.png'\nimport checkbox_on from '../../assets/img/checkbox_on.svg'\nimport checkbox_off from '../../assets/img/checkbox_off.svg'\nimport { toTitle } from '../../utils'\n\ntype MenuStore = {\n showConfig: boolean\n showEnvToggle: boolean\n showExtraEnvToggle: boolean\n showAnomalousEnvToggle: boolean\n showAddonToggle: boolean\n showPetToggle: boolean\n showPetRobitToggle: boolean\n showPetCollabToggle: boolean\n showBonsaiToggle: boolean\n showOmegaKeyToggle: boolean\n showGildedToggle: boolean\n toggleConfig: () => void\n addEnvToggle: () => void\n addExtraEnvToggle: () => void\n addAnomalousEnvToggle: () => void\n addAddonToggle: () => void\n addPetToggle: () => void\n addPetRobitToggle: () => void\n addPetCollabToggle: () => void\n addBonsaiToggle: () => void\n addOmegaKeyToggle: () => void\n addGildedToggle: () => void\n}\ntype ToggleValidity = { isValid?: boolean }\n\ntype EnvToggleProps = ToggleValidity\ntype ExtraEnvToggleProps = ToggleValidity\ntype AddonToggleProps = ToggleValidity\ntype PetToggleProps = ToggleValidity\ntype BonsaiToggleProps = ToggleValidity\n\nenum LABEL {\n SCENE = 'Scene:',\n SCENE_ANOMALOUS = 'Scene Anomalous:',\n PET = 'Pet:',\n PET_ROBIT = 'Pet Robit:',\n PET_COLLAB = 'Pet Collab:',\n ADDON = '420:',\n BONSAI = 'Bonsai:',\n OMEGA = 'Omega Key:',\n GILDED = 'Color:',\n CUBE = 'Mint Cycle:',\n}\n\nconst EnvToggle: React.FC = () => {\n const [env, cameraControl] = useViewerStore(state => [state.urlReq.scene, state.cameraControl])\n const [bonsaiActive, envActive, cubeActive, toggleEnv, toggleBonsai] = useVoxoStore(state => [\n state.bonsaiActive,\n state.envActive,\n state.cubeActive,\n state.toggleEnv,\n state.toggleBonsai\n ])\n\n return {\n if (cubeActive) return\n if (bonsaiActive) toggleBonsai()\n toggleEnv()\n cameraControl.maxPolarAngle = envActive ? Math.PI / 2 : Math.PI\n }}\n />\n}\nconst ExtraEnvToggle: React.FC = () => {\n const [extraEnv, cameraControl] = useViewerStore(state => [state.urlReq.extra_scene, state.cameraControl])\n const [bonsaiActive, extraEnvActive, cubeActive, toggleBonsai, toggleExtraEnv] = useVoxoStore(state => [\n state.bonsaiActive,\n state.extraEnvActive,\n state.cubeActive,\n state.toggleBonsai,\n state.toggleExtraEnv\n ])\n\n return {\n if (cubeActive) return\n if (bonsaiActive) toggleBonsai()\n toggleExtraEnv()\n cameraControl.maxPolarAngle = extraEnvActive ? Math.PI / 2 : Math.PI\n }}\n />\n}\nconst AnomalousEnvToggle: React.FC = () => {\n const [anomalousEnv, cameraControl] = useViewerStore(state => [state.urlReq.extra_scene_anomalous, state.cameraControl])\n const [bonsaiActive, anomalousEnvActive, cubeActive, toggleBonsai, toggleAnomalousEnv] = useVoxoStore(state => [\n state.bonsaiActive,\n state.anomalousEnvActive,\n state.cubeActive,\n state.toggleBonsai,\n state.toggleAnomalousEnv\n ])\n\n return {\n if (cubeActive) return\n if (bonsaiActive) toggleBonsai()\n toggleAnomalousEnv()\n cameraControl.maxPolarAngle = anomalousEnvActive ? Math.PI / 2 : Math.PI\n }}\n />\n}\nconst AddonToggle: React.FC = () => {\n const addon = useViewerStore(state => state.urlReq.extra_420)\n const [addonActive, cubeActive] = useVoxoStore(state => [state.addonActive, state.cubeActive])\n const toggle = useVoxoStore(state => !cubeActive ? state.toggleAddon : () => { })\n\n return \n}\nconst PetToggle: React.FC = () => {\n const [pet, setCamera] = useViewerStore(state => [state.urlReq.extra_pet, state.setCamera])\n const [petActive, cubeActive, togglePet] = useVoxoStore(state => [\n state.petActive,\n state.cubeActive,\n state.togglePet\n ])\n\n return {\n if (cubeActive) return\n if (!petActive) setCamera({ loc: cameraLocForPet, lookat: cameraLookatForPet })\n togglePet()\n }}\n />\n}\nconst PetRobitToggle: React.FC = () => {\n const [petRobit, setCamera] = useViewerStore(state => [\n state.urlReq.extra_pet_robit,\n state.setCamera\n ])\n const [petRobitActive, cubeActive, togglePetRobit] = useVoxoStore(state => [\n state.petRobitActive,\n state.cubeActive,\n state.togglePetRobit\n ])\n\n return {\n if (cubeActive) return\n if (!petRobitActive) setCamera({ loc: cameraLocForPet, lookat: cameraLookatForPet })\n togglePetRobit()\n }}\n />\n}\nconst PetCollabToggle: React.FC = () => {\n const [petCollab, setCamera] = useViewerStore(state => [\n state.urlReq.extra_pet_collab,\n state.setCamera\n ])\n const [petCollabActive, cubeActive, togglePetCollab] = useVoxoStore(state => [\n state.petCollabActive,\n state.cubeActive,\n state.togglePetCollab\n ])\n\n return {\n if (cubeActive) return\n if (!petCollabActive) setCamera({ loc: cameraLocForPet, lookat: cameraLookatForPet })\n togglePetCollab()\n }}\n />\n}\nconst BonsaiToggle: React.FC = () => {\n const bonsai = useViewerStore(state => state.urlReq.extra_bonsai)\n const [\n bonsaiActive, envActive, extraEnvActive, anomalousEnvActive, cubeActive,\n toggleEnv, toggleExtraEnv, toggleAnomalousEnv, toggleBonsai\n ] = useVoxoStore(state => [\n state.bonsaiActive,\n state.envActive,\n state.extraEnvActive,\n state.anomalousEnvActive,\n state.cubeActive,\n state.toggleEnv,\n state.toggleExtraEnv,\n state.toggleAnomalousEnv,\n state.toggleBonsai\n ])\n\n return {\n if (cubeActive) return\n if (envActive) toggleEnv()\n if (extraEnvActive) toggleExtraEnv()\n if (anomalousEnvActive) toggleAnomalousEnv()\n toggleBonsai()\n }}\n />\n}\nconst OmegaKeyToggle: React.FC = () => {\n const omegaKey = useViewerStore(state => state.urlReq.omegakey).toLowerCase()\n const [\n omegaKeyActive, envActive, extraEnvActive, anomalousEnvActive, cubeActive,\n toggleEnv, toggleExtraEnv, toggleAnomalousEnv, toggleOmegaKey\n ] = useVoxoStore(state => [\n state.omegaKeyActive,\n state.envActive,\n state.extraEnvActive,\n state.anomalousEnvActive,\n state.cubeActive,\n state.toggleEnv,\n state.toggleExtraEnv,\n state.toggleAnomalousEnv,\n state.toggleOmegaKey\n ])\n\n if (!['true', 'false'].includes(omegaKey)) { return <> }\n\n const assetName = `OMEGA-STAGE-${omegaKey === 'true' ? '0' : '2'}`\n\n return {\n if (cubeActive) return\n if (envActive) toggleEnv()\n if (extraEnvActive) toggleExtraEnv()\n if (anomalousEnvActive) toggleAnomalousEnv()\n toggleOmegaKey()\n }}\n />\n}\nconst GildedToggle: React.FC = () => {\n const [ gildedActive, cubeActive, toggleGilded ] = useVoxoStore(state => [\n state.gildedActive,\n state.cubeActive,\n state.toggleGilded,\n ])\n\n return {\n if (cubeActive) return\n toggleGilded()\n }}\n />\n}\nconst CubeToggle: React.FC = () => {\n const cube = useViewerStore(state => state.urlReq.extra_mint_cycle)\n const [cubeActive, toggleCube] = useVoxoStore(state => [state.cubeActive, state.toggleCube])\n\n return /voxocube/i.test(cube) ? : <>\n}\n// const GearToggles: React.FC = () => {\n// const gear = useVoxoStore(state => state.gearActive);\n// const gearToggles = Object.keys(gear).map(slot => {\n// console.log(slot);\n// const options = [slot, ...Object.keys(gear[slot])];\n// return options.map(option => {\n// // toggleGear(slot, option)\n// }}\n// >{option});\n// })\n\n// return <>{gearToggles};\n// };\nconst MenuToggle: React.FC = () => {\n const showConfig = useMenuStore(state => state.showConfig)\n const showEnvToggle = useMenuStore(state => state.showEnvToggle)\n const showExtraEnvToggle = useMenuStore(state => state.showExtraEnvToggle)\n const showAnomalousEnvToggle = useMenuStore(state => state.showAnomalousEnvToggle)\n const showAddonToggle = useMenuStore(state => state.showAddonToggle)\n const showPetToggle = useMenuStore(state => state.showPetToggle)\n const showPetRobitToggle = useMenuStore(state => state.showPetRobitToggle)\n const showPetCollabToggle = useMenuStore(state => state.showPetCollabToggle)\n const showBonsaiToggle = useMenuStore(state => state.showBonsaiToggle)\n const showOmegaKeyToggle = useMenuStore(state => state.showOmegaKeyToggle)\n const showGildedToggle = useMenuStore(state => state.showGildedToggle)\n\n const toggleConfig = useMenuStore(state => state.toggleConfig)\n\n const [prevToggle, setPrevToggle] = useState(Date.now())\n const toggle = () => {\n if (Date.now() - prevToggle > 500) {\n toggleConfig()\n setPrevToggle(Date.now())\n }\n }\n\n return <>\n \n \n BASE\n {showEnvToggle && }\n\n EXTRA\n {showExtraEnvToggle && }\n {showAnomalousEnvToggle && }\n {showAddonToggle && }\n {showPetToggle && }\n {showPetRobitToggle && }\n {showPetCollabToggle && }\n {showBonsaiToggle && }\n {showOmegaKeyToggle && }\n {showGildedToggle && }\n \n\n {/* http://localhost:3000/sm-01_c_sR0002?gear=ITEM-RH-DAGGER,ITEM-RH-SWORD */}\n {/* */}\n \n \n}\nexport const useMenuStore = create(set => ({\n showConfig: false,\n showEnvToggle: false,\n showExtraEnvToggle: false,\n showAnomalousEnvToggle: false,\n showAddonToggle: false,\n showPetToggle: false,\n showPetRobitToggle: false,\n showPetCollabToggle: false,\n showBonsaiToggle: false,\n showOmegaKeyToggle: false,\n showGildedToggle: false,\n toggleConfig: () => set(state => {\n // const config = !state.showConfig || !state.\n return { showConfig: !state.showConfig }\n }),\n addEnvToggle: () => set({ showEnvToggle: true }),\n addExtraEnvToggle: () => set({ showExtraEnvToggle: true }),\n addAnomalousEnvToggle: () => set({ showAnomalousEnvToggle: true }),\n addAddonToggle: () => set({ showAddonToggle: true }),\n addPetToggle: () => set({ showPetToggle: true }),\n addPetRobitToggle: () => set({ showPetRobitToggle: true }),\n addPetCollabToggle: () => set({ showPetCollabToggle: true }),\n addBonsaiToggle: () => set({ showBonsaiToggle: true }),\n addOmegaKeyToggle: () => set({ showOmegaKeyToggle: true }),\n addGildedToggle: () => set({ showGildedToggle: true })\n}))\nconst MenuWrapper = styled.div`\n display: grid;\n grid-row-gap: 10px;\n position: absolute;\n right: 60px;\n padding: 16px 24px;\n border-radius: 5px;\n background-color: ghostwhite;\n transition: opacity 0.2s ease-in-out;\n`\nconst MenuHeader = styled.h4`\n color: silver;\n margin: 0;\n font-family: Arial;\n font-size: 8px;\n letter-spacing: 0.1em;\n`\n\nexport default MenuToggle","import * as React from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport { Color, Vector3, Spherical, AdditiveBlending, ShaderMaterial } from 'three';\nclass StarfieldMaterial extends ShaderMaterial {\n constructor() {\n super({\n uniforms: {\n time: {\n value: 0.0\n },\n fade: {\n value: 1.0\n }\n },\n vertexShader:\n /* glsl */\n `\n uniform float time;\n attribute float size;\n varying vec3 vColor;\n void main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);\n gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(mvPosition.x + 2.0 * time + 100.0));\n gl_Position = projectionMatrix * mvPosition;\n }`,\n fragmentShader:\n /* glsl */\n `\n uniform sampler2D pointTexture;\n uniform float fade;\n varying vec3 vColor;\n void main() {\n float opacity = 1.0;\n if (fade == 1.0) {\n float d = distance(gl_PointCoord, vec2(0.5, 0.5));\n opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));\n }\n gl_FragColor = vec4(vColor, opacity);\n }`\n });\n }\n}\n\nconst genStar = r => {\n return new Vector3().setFromSpherical(new Spherical(\n r,\n Math.acos(1 - Math.random()),\n Math.random() * 2 * Math.PI\n ));\n};\n\nconst Stars = /*#__PURE__*/React.forwardRef(({\n radius = 100,\n depth = 50,\n count = 5000,\n saturation = 0,\n factor = 4,\n fade = false\n}, ref) => {\n const material = React.useRef();\n const [position, color, size] = React.useMemo(() => {\n const positions = [];\n const colors = [];\n const sizes = Array.from({\n length: count\n }, () => (0.5 + 0.5 * Math.random()) * factor);\n const color = new Color();\n let r = radius + depth;\n const increment = depth / count;\n\n for (let i = 0; i < count; i++) {\n r -= increment * Math.random();\n positions.push(...genStar(r).toArray());\n color.setHSL(i / count, saturation, 0.9);\n colors.push(color.r, color.g, color.b);\n }\n\n return [new Float32Array(positions), new Float32Array(colors), new Float32Array(sizes)];\n }, [count, depth, factor, radius, saturation]);\n useFrame(state => material.current && (material.current.uniforms.time.value = state.clock.getElapsedTime()));\n const [starfieldMaterial] = React.useState(() => new StarfieldMaterial());\n return /*#__PURE__*/React.createElement(\"points\", {\n ref: ref\n }, /*#__PURE__*/React.createElement(\"bufferGeometry\", {\n attach: \"geometry\"\n }, /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attachObject: ['attributes', 'position'],\n args: [position, 3]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attachObject: ['attributes', 'color'],\n args: [color, 3]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attachObject: ['attributes', 'size'],\n args: [size, 1]\n })), /*#__PURE__*/React.createElement(\"primitive\", {\n dispose: undefined,\n ref: material,\n object: starfieldMaterial,\n attach: \"material\",\n blending: AdditiveBlending,\n \"uniforms-fade-value\": fade,\n transparent: true,\n vertexColors: true\n }));\n});\n\nexport { Stars };\n","import { ShaderMaterial, Vector2 } from 'three'\n\nexport class Shaders {\n vertexShader() {\n return `\n varying vec2 vUv; \n varying vec3 worldPos;\n varying vec4 viewPos;\n varying vec3 nor;\n\n void main() {\n vUv =vec2(uv.x,uv.y);\n nor = (vec3(mat3(modelMatrix)*normal));\n viewPos = modelViewMatrix*vec4(position,1.0);\n worldPos = vec3(modelMatrix*vec4(position,1.0));\n vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewPosition; \n }`\n }\n\n normalShader() {\n return `\n varying vec2 vUv; \n varying vec3 nor;\n \n void main() {\n gl_FragColor = vec4(normalize(nor),1.);\n }`\n }\n positionShader() {\n return `\n varying vec2 vUv; \n varying vec4 viewPos;\n\n void main() {\n gl_FragColor = vec4(viewPos);\n }`\n }\n\n lightShader() {\n return `\n varying vec2 vUv; \n varying vec3 worldPos;\n varying vec3 nor;\n uniform vec3 color[3];\n uniform vec3 pos[3];\n uniform float strength;\n uniform float alpha;\n void main() {\n for(int i = 0;i<3;i++){\n vec3 lightPos = pos[i];\n vec3 lightDir = normalize( lightPos-worldPos);\n float distance = length(lightPos - worldPos);\n float attenuation = 1.0 / (1.0 + 1.0 * distance + \n 0.09 * (distance * distance)); \n float diff = smoothstep(0.2,0.8,max(dot(normalize(lightDir),normalize( nor)), 0.0))*0.9;\n diff*=attenuation;\n \n gl_FragColor += vec4(color[i]*diff*strength*vec3(1.2,1.,1.1),1.);\n }\n gl_FragColor.a = alpha;\n gl_FragColor.rgb+=(1.-alpha)*0.7;\n }`\n }\n\n bloomMix() {\n return `\n #define INV_SQRT_OF_2PI 0.39894228040143267793994605993439\n #define INV_PI 0.31830988618379067153776752674503\n\n vec4 smartDeNoise(sampler2D tex, vec2 uv, float sigma, float kSigma, float threshold) {\n float radius = round(kSigma*sigma);\n float radQ = radius * radius;\n \n float invSigmaQx2 = .5 / (sigma * sigma); // 1.0 / (sigma^2 * 2.0)\n float invSigmaQx2PI = INV_PI * invSigmaQx2; // 1.0 / (sqrt(PI) * sigma)\n \n float invThresholdSqx2 = .5 / (threshold * threshold); // 1.0 / (sigma^2 * 2.0)\n float invThresholdSqrt2PI = INV_SQRT_OF_2PI / threshold; // 1.0 / (sqrt(2*PI) * sigma)\n \n vec4 centrPx = texture(tex,uv);\n \n float zBuff = 0.0;\n vec4 aBuff = vec4(0.0);\n vec2 size = vec2(textureSize(tex, 0));\n \n for(float x=-radius; x <= radius; x++) {\n float pt = sqrt(radQ-x*x); // pt = yRadius: have circular trend\n for(float y=-pt; y <= pt; y++) {\n vec2 d = vec2(x,y);\n\n float blurFactor = exp( -dot(d , d) * invSigmaQx2 ) * invSigmaQx2PI; \n \n vec4 walkPx = texture(tex,uv+d/size);\n\n vec4 dC = walkPx-centrPx;\n float deltaFactor = exp( -dot(dC, dC) * invThresholdSqx2) * invThresholdSqrt2PI * blurFactor;\n \n zBuff += deltaFactor;\n aBuff += deltaFactor*walkPx;\n }\n }\n return aBuff/zBuff;\n }\n \n varying vec2 vUv; \n uniform sampler2D tDiffuse;\n uniform sampler2D em;\n\n void main() {\n float gamma = 2.2;\n float exposure = 1.;\n vec4 inRGBA = texture2D(tDiffuse,vUv);\n vec3 afterDenoise = smartDeNoise(tDiffuse, vUv, 5., 1., .01).rgb;\n vec3 afterExposure = clamp(exposure * afterDenoise, 0., 1.);\n vec4 outRGBA = vec4(pow(afterExposure, vec3(1. / gamma)), inRGBA.w);\n \n gl_FragColor = outRGBA + clamp(texture2D(em, vUv), 0., 1.);\n }`\n }\n dof() {\n return `\n varying vec2 vUv; \n uniform sampler2D original;\n uniform sampler2D blurred;\n uniform sampler2D depth;\n uniform sampler2D glow;\n uniform float dis;\n float cameraNear = 0.1;\nuniform float obj;\nfloat cameraFar = 1000.;\n\n\nfloat linearize_depth(float d,float zNear,float zFar)\n{\n return zNear * zFar / (zFar + d * (zNear - zFar));\n}\n\n float linearizeDepth(vec2 uv)\n{\n float z = texture2D(depth, uv).x;\n return (2.0 * cameraNear) / (cameraFar + cameraNear - z * (cameraFar - cameraNear)); \n}\n void main() {\n float z1 = texture2D(depth, vUv).x;\n float z = linearize_depth(z1,0.9,1000.);\n\n \n \n float range;\n if(obj>0.5){\n if(dis<11.){\n float n = 2.*clamp(dis-7.,0.,10.);\n range = smoothstep(7.+n,7.8+n,z);\n }\n}\n else{ if(dis<11.){\n float n = 2.*clamp(dis-9.,0.,10.);\n range = smoothstep(7.+n,10.8+n,z);\n\n }\n}\n \n vec4 col1 = texture2D(original, vUv);\n vec4 col2 = texture2D(blurred, vUv);\n if(dis>100.){\n\n col2+=texture2D(glow,vUv);\n range = 1.0;\n }\n \n gl_FragColor = mix(col1,col2,range);\n\n }\n `\n }\n fragmentShader() {\n return `\n varying vec2 vUv;\n uniform sampler2D tDiffuse;\n uniform float gammaValue;\n uniform float dis;\n uniform float time;\n\nfloat hash(vec3 p3){\n p3 = fract(p3 * 0.1031);\n p3 += dot(p3,p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n}\n\n\nfloat noise(vec3 x){\n vec3 i = floor(x);\n vec3 f = fract(x);\n f = f*f*(3.0-2.0*f);\n return mix(mix(mix(hash(i+vec3(0, 0, 0)), \n hash(i+vec3(1, 0, 0)),f.x),\n mix(hash(i+vec3(0, 1, 0)), \n hash(i+vec3(1, 1, 0)),f.x),f.y),\n mix(mix(hash(i+vec3(0, 0, 1)), \n hash(i+vec3(1, 0, 1)),f.x),\n mix(hash(i+vec3(0, 1, 1)), \n hash(i+vec3(1, 1, 1)),f.x),f.y),f.z);\n}\n\n// Slightly high-passed continuous value-noise.\nfloat grain_source(vec3 x, float strength, float pitch){\n float center = noise(x);\n\tfloat v1 = center - noise(vec3( 1, 0, 0)/pitch + x) + 0.5;\n\tfloat v2 = center - noise(vec3( 0, 1, 0)/pitch + x) + 0.5;\n\tfloat v3 = center - noise(vec3(-1, 0, 0)/pitch + x) + 0.5;\n\tfloat v4 = center - noise(vec3( 0,-1, 0)/pitch + x) + 0.5;\n \n\tfloat total = (v1 + v2 + v3 + v4) / 4.0;\n\treturn mix(1.0, 0.5 + total, strength);\n}\nfloat random (vec2 st) {\n return fract(sin(dot(st.xy,\n vec2(12.9898,78.233)))*\n 43758.5453123);\n}\n vec2 barrelDistortion( vec2 p, vec2 amt )\n {\n p = 2.0 * p - 1.0;\n \n /*\n const float maxBarrelPower = 5.0;\n //note: http://glsl.heroku.com/e#3290.7 , copied from Little Grasshopper\n float theta = atan(p.y, p.x);\n vec2 radius = vec2( length(p) );\n radius = pow(radius, 1.0 + maxBarrelPower * amt);\n p.x = radius.x * cos(theta);\n p.y = radius.y * sin(theta);\n \n /*/\n // much faster version\n //const float maxBarrelPower = 5.0;\n //float radius = length(p);\n float maxBarrelPower = sqrt(5.0);\n float radius = dot(p,p); //faster but doesn't match above accurately\n p *= pow(vec2(radius), maxBarrelPower * amt);\n /* */\n \n return p * 0.5 + 0.5;\n }\n \n //note: from https://www.shadertoy.com/view/MlSXR3\n vec2 brownConradyDistortion(vec2 uv, float scalar)\n {\n // AH!!! uv = uv * 2.0 - 1.0;\n uv = (uv - 0.5 ) * 2.0;\n \n if( true )\n {\n // positive values of K1 give barrel distortion, negative give pincushion\n float barrelDistortion1 = -0.02 * scalar; // K1 in text books\n float barrelDistortion2 = 0.0 * scalar; // K2 in text books\n \n float r2 = dot(uv.x,uv.x);\n uv *= 1.0 + barrelDistortion1 * r2 + barrelDistortion2 * r2 * r2;\n //uv *= 1.0 + barrelDistortion1 * r2;\n }\n \n // tangential distortion (due to off center lens elements)\n // is not modeled in this function, but if it was, the terms would go here\n // return uv * 0.5 + 0.5;\n return (uv / 2.0) + 0.5;\n }\n void main(){\n\n // gl_FragColor /= numTaps;\n vec2 distFromCenter = vUv - 0.5;\n float aberrationAmount = 0.1;\n // stronger aberration near the edges by raising to power 3\n vec2 aberrated = aberrationAmount * pow(vec2((1./dis)*1.5), vec2(3.0, 3.0));\n \n\tgl_FragColor = vec4\n (\n \ttexture2D(tDiffuse, vUv - aberrated).r,\n \ttexture2D(tDiffuse, vUv).g,\n \ttexture2D(tDiffuse, vUv + aberrated).b,\n \t1.0\n );\n\nvec2 uv = vUv;\n // gl_FragColor*=0.1;\n uv *= 1.0 - uv.yx; //vec2(1.0)- uv.yx; -> 1.-u.yx; Thanks FabriceNeyret !\n \n float vig = uv.x*uv.y * 15.0; // multiply with sth for intensity\n \n vig = pow(vig, 0.05); // change pow for modifying the extend of the vignette\n float gamma = gammaValue;\nvec2 x = gl_FragCoord.xy;\n float t = time*222.;\n vec3 color = gl_FragColor.rgb;\n vec3 grain = vec3(0);\n const float grain_strength = 2.0;\n const float grain_rate = 1.0;\n const float grain_pitch = 1.4;\n const float neutral_grain_factor = sqrt(5.0);\n grain = vec3(grain_source(vec3(x, floor(grain_rate*t)), grain_strength/neutral_grain_factor, grain_pitch));\n const float grain_lift_ratio = 0.15;\n color = max(mix(color*grain, color+(grain-1.0), grain_lift_ratio), 0.0);\n//float rnd = random( vUv+time );\ngl_FragColor.rgb = color;\n//gl_FragColor.rgb = vec3(clamp(rnd+0.8,0.,1.))*gl_FragColor.rgb;\n gl_FragColor.rgb = pow(gl_FragColor.rgb, vec3(1.0/gamma));\n gl_FragColor.rgb*=vig;\n //gl_FragColor = texture2D(tDiffuse,vUv);\n \n }\n `\n }\n\n BlurHvs() {\n return `\n\nuniform float width;\nvarying vec2 blurTexCoords[11];\n//varying vec2 blurTexCoords[11];\nvoid main()\n{\n\nvec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewPosition; \nvec2 uv = (position.xy/2.0)+vec2(0.5);\n//float height = 512.;\nfloat pixelSize = (1.0/width)*0.5;\n\n for(int i=-5;i<5;i++){\n blurTexCoords[i+5]=uv+vec2(pixelSize*float(i),0.0);\n }\n}\n`\n }\n\n BlurVvs() {\n return `\n\nuniform float height;\nvarying vec2 blurTexCoords[11];\nvoid main()\n{\n\nvec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewPosition; \nvec2 uv = (position.xy/2.0)+vec2(0.5);\n//float height = 512.;\nfloat pixelSize = (1.0/(height))*0.5;\n\n\n for(int i=-5;i<5;i++){\n blurTexCoords[i+5]=uv+vec2(0.0,pixelSize*float(i));\n }\n}\n`\n }\n\n Blurfs() {\n return `\n\nvarying vec2 blurTexCoords[11];\n\nuniform sampler2D tex;\n\n\n\nvoid main() {\n\n \n\n \n //gl_FragColor = vec4(1.0);\n/*\n gl_FragColor += vec4((1.-texture2D(tex, blurTexCoords[0]).a) * 0.0093);\n gl_FragColor += vec4((1.-texture2D(tex, blurTexCoords[1]).a) * 0.028002);\n gl_FragColor += vec4((1.-texture2D(tex, blurTexCoords[2]).a) * 0.065984);\n gl_FragColor += vec4((1.-texture2D(tex, blurTexCoords[3]).a) * 0.121703);\n gl_FragColor += vec4((1.-texture2D(tex, blurTexCoords[4]).a) * 0.175713);\n gl_FragColor += vec4((1.-texture2D(tex, blurTexCoords[5]).a) * 0.198596);\n gl_FragColor += vec4((1.-texture2D(tex, blurTexCoords[6]).a) * 0.175713);\n gl_FragColor += vec4((1.-texture2D(tex, blurTexCoords[7]).a) * 0.121703);\n gl_FragColor += vec4((1.-texture2D(tex, blurTexCoords[8]).a) * 0.065984);\n gl_FragColor += vec4((1.-texture2D(tex, blurTexCoords[9]).a) * 0.028002);\n gl_FragColor += vec4((1.-texture2D(tex, blurTexCoords[10]).a) * 0.0093);\n*/\n\n gl_FragColor += texture2D(tex,vec2(blurTexCoords[0].x,(blurTexCoords[0].y))) * 0.0093;\n gl_FragColor += texture2D(tex, vec2(blurTexCoords[1].x,(blurTexCoords[1].y))) * 0.028002;\n gl_FragColor += texture2D(tex, vec2(blurTexCoords[2].x,(blurTexCoords[2].y))) * 0.065984;\n gl_FragColor += texture2D(tex, vec2(blurTexCoords[3].x,(blurTexCoords[3].y))) * 0.121703;\n gl_FragColor += texture2D(tex, vec2(blurTexCoords[4].x,(blurTexCoords[4].y))) * 0.175713;\n gl_FragColor += texture2D(tex, vec2(blurTexCoords[5].x,(blurTexCoords[5].y))) * 0.198596;\n gl_FragColor += texture2D(tex, vec2(blurTexCoords[6].x,(blurTexCoords[6].y))) * 0.175713;\n gl_FragColor += texture2D(tex, vec2(blurTexCoords[7].x,(blurTexCoords[7].y))) * 0.121703;\n gl_FragColor += texture2D(tex, vec2(blurTexCoords[8].x,(blurTexCoords[8].y))) * 0.065984;\n gl_FragColor += texture2D(tex, vec2(blurTexCoords[9].x,(blurTexCoords[9].y))) * 0.028002;\n gl_FragColor += texture2D(tex, vec2(blurTexCoords[10].x,(blurTexCoords[10].y))) * 0.0093;\n \n \n}\n`\n }\n\n getSeperableBlurMaterial(kernelRadius) {\n return new ShaderMaterial({\n defines: {\n KERNEL_RADIUS: kernelRadius,\n SIGMA: kernelRadius\n },\n\n uniforms: {\n colorTexture: { value: null },\n texSize: { value: new Vector2(0.5, 0.5) },\n direction: { value: new Vector2(0.5, 0.5) }\n },\n\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n\n fragmentShader: `\n #include \n varying vec2 vUv;\n uniform sampler2D colorTexture;\n uniform vec2 texSize;\n uniform vec2 direction;\n \n float gaussianPdf(in float x, in float sigma) {\n return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\n }\n \n void main() {\n vec2 invSize = 1.0 / texSize;\n float fSigma = float(SIGMA);\n float weightSum = gaussianPdf(0.0, fSigma);\n vec3 diffuseSum = texture2D( colorTexture, vUv).rgb * weightSum;\n for( int i = 1; i < KERNEL_RADIUS; i++ ) {\n float x = float(i);\n float w = gaussianPdf(x, fSigma);\n vec2 uvOffset = direction * invSize * x;\n vec3 sample1 = texture2D( colorTexture, vUv + uvOffset).rgb;\n vec3 sample2 = texture2D( colorTexture, vUv - uvOffset).rgb;\n diffuseSum += (sample1 + sample2) * w;\n weightSum += 2.0 * w;\n }\n gl_FragColor = vec4(diffuseSum/weightSum, 1.0);\n }`\n })\n }\n\n postShader() {\n return `\n varying vec2 vUv;\n uniform sampler2D tDiffuse;\n uniform float gNoise;\n uniform float vigOpacity;\n uniform float vigExtent;\n uniform float vigIntensity;\n \n uniform float time;\n \n float hash(vec3 p3) {\n p3 = fract(p3 * 0.1031);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n \n float noise(vec3 x) {\n vec3 i = floor(x);\n vec3 f = fract(x);\n f = f * f * (3.0 - 2.0 * f);\n return mix(mix(mix(hash(i + vec3(0, 0, 0)), hash(i + vec3(1, 0, 0)), f.x), mix(hash(i + vec3(0, 1, 0)), hash(i + vec3(1, 1, 0)), f.x), f.y), mix(mix(hash(i + vec3(0, 0, 1)), hash(i + vec3(1, 0, 1)), f.x), mix(hash(i + vec3(0, 1, 1)), hash(i + vec3(1, 1, 1)), f.x), f.y), f.z);\n }\n \n // Slightly high-passed continuous value-noise.\n float grain_source(vec3 x, float strength, float pitch) {\n float center = noise(x);\n float v1 = center - noise(vec3(1, 0, 0) / pitch + x) + 0.5;\n float v2 = center - noise(vec3(0, 1, 0) / pitch + x) + 0.5;\n float v3 = center - noise(vec3(-1, 0, 0) / pitch + x) + 0.5;\n float v4 = center - noise(vec3(0, -1, 0) / pitch + x) + 0.5;\n \n float total = (v1 + v2 + v3 + v4) / 4.0;\n return mix(1.0, 0.5 + total, strength);\n }\n \n void main() {\n float gamma = 1.0;\n \n gl_FragColor = texture2D(tDiffuse, vUv);\n vec2 uv = vUv;\n \n uv *= 1.0 - uv.yx; //vec2(1.0)- uv.yx; -> 1.-u.yx; Thanks FabriceNeyret !\n \n float vig = uv.x * uv.y * vigIntensity; // multiply with sth for intensity\n float strength = 5.0;\n \n float x = (uv.x + 4.0 ) * (uv.y + 4.0 ) * (time * 10.0);\n\t vec4 grain = vec4(mod((mod(x, 13.0) + 1.0) * (mod(x, 123.0) + 1.0), 0.01)-0.005) * strength;\n grain = 1.-grain;\n gl_FragColor.rgb = mix(gl_FragColor.rgb*grain.rgb, gl_FragColor.rgb, gNoise);\n \n vig = pow(vig, vigExtent); \n gl_FragColor.rgb *= (vig * vigOpacity) + (1.0 - vigOpacity);\n\n }`\n }\n\n FXAA() {\n return [\n \"precision highp float;\",\n \"\",\n \"uniform sampler2D tDiffuse;\",\n \"\",\n \"uniform vec2 resolution;\",\n \"\",\n \"varying vec2 vUv;\",\n \"\",\n \"// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)\",\n \"\",\n \"//----------------------------------------------------------------------------------\",\n \"// File: es3-keplerFXAAassetsshaders/FXAA_DefaultES.frag\",\n \"// SDK Version: v3.00\",\n \"// Email: gameworks@nvidia.com\",\n \"// Site: http://developer.nvidia.com/\",\n \"//\",\n \"// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\",\n \"//\",\n \"// Redistribution and use in source and binary forms, with or without\",\n \"// modification, are permitted provided that the following conditions\",\n \"// are met:\",\n \"// * Redistributions of source code must retain the above copyright\",\n \"// notice, this list of conditions and the following disclaimer.\",\n \"// * Redistributions in binary form must reproduce the above copyright\",\n \"// notice, this list of conditions and the following disclaimer in the\",\n \"// documentation and/or other materials provided with the distribution.\",\n \"// * Neither the name of NVIDIA CORPORATION nor the names of its\",\n \"// contributors may be used to endorse or promote products derived\",\n \"// from this software without specific prior written permission.\",\n \"//\",\n \"// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\",\n \"// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\",\n \"// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\",\n \"// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\",\n \"// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\",\n \"// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\",\n \"// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\",\n \"// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\",\n \"// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\",\n \"// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\",\n \"// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\",\n \"//\",\n \"//----------------------------------------------------------------------------------\",\n \"\",\n \"#define FXAA_PC 1\",\n \"#define FXAA_GLSL_100 1\",\n \"#define FXAA_QUALITY_PRESET 12\",\n \"\",\n \"#define FXAA_GREEN_AS_LUMA 1\",\n \"\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#ifndef FXAA_PC_CONSOLE\",\n \" //\",\n \" // The console algorithm for PC is included\",\n \" // for developers targeting really low spec machines.\",\n \" // Likely better to just run FXAA_PC, and use a really low preset.\",\n \" //\",\n \" #define FXAA_PC_CONSOLE 0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#ifndef FXAA_GLSL_120\",\n \" #define FXAA_GLSL_120 0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#ifndef FXAA_GLSL_130\",\n \" #define FXAA_GLSL_130 0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#ifndef FXAA_HLSL_3\",\n \" #define FXAA_HLSL_3 0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#ifndef FXAA_HLSL_4\",\n \" #define FXAA_HLSL_4 0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#ifndef FXAA_HLSL_5\",\n \" #define FXAA_HLSL_5 0\",\n \"#endif\",\n \"/*==========================================================================*/\",\n \"#ifndef FXAA_GREEN_AS_LUMA\",\n \" //\",\n \" // For those using non-linear color,\",\n \" // and either not able to get luma in alpha, or not wanting to,\",\n \" // this enables FXAA to run using green as a proxy for luma.\",\n \" // So with this enabled, no need to pack luma in alpha.\",\n \" //\",\n \" // This will turn off AA on anything which lacks some amount of green.\",\n \" // Pure red and blue or combination of only R and B, will get no AA.\",\n \" //\",\n \" // Might want to lower the settings for both,\",\n \" // fxaaConsoleEdgeThresholdMin\",\n \" // fxaaQualityEdgeThresholdMin\",\n \" // In order to insure AA does not get turned off on colors\",\n \" // which contain a minor amount of green.\",\n \" //\",\n \" // 1 = On.\",\n \" // 0 = Off.\",\n \" //\",\n \" #define FXAA_GREEN_AS_LUMA 0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#ifndef FXAA_EARLY_EXIT\",\n \" //\",\n \" // Controls algorithm's early exit path.\",\n \" // On PS3 turning this ON adds 2 cycles to the shader.\",\n \" // On 360 turning this OFF adds 10ths of a millisecond to the shader.\",\n \" // Turning this off on console will result in a more blurry image.\",\n \" // So this defaults to on.\",\n \" //\",\n \" // 1 = On.\",\n \" // 0 = Off.\",\n \" //\",\n \" #define FXAA_EARLY_EXIT 1\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#ifndef FXAA_DISCARD\",\n \" //\",\n \" // Only valid for PC OpenGL currently.\",\n \" // Probably will not work when FXAA_GREEN_AS_LUMA = 1.\",\n \" //\",\n \" // 1 = Use discard on pixels which don't need AA.\",\n \" // For APIs which enable concurrent TEX+ROP from same surface.\",\n \" // 0 = Return unchanged color on pixels which don't need AA.\",\n \" //\",\n \" #define FXAA_DISCARD 0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#ifndef FXAA_FAST_PIXEL_OFFSET\",\n \" //\",\n \" // Used for GLSL 120 only.\",\n \" //\",\n \" // 1 = GL API supports fast pixel offsets\",\n \" // 0 = do not use fast pixel offsets\",\n \" //\",\n \" #ifdef GL_EXT_gpu_shader4\",\n \" #define FXAA_FAST_PIXEL_OFFSET 1\",\n \" #endif\",\n \" #ifdef GL_NV_gpu_shader5\",\n \" #define FXAA_FAST_PIXEL_OFFSET 1\",\n \" #endif\",\n \" #ifdef GL_ARB_gpu_shader5\",\n \" #define FXAA_FAST_PIXEL_OFFSET 1\",\n \" #endif\",\n \" #ifndef FXAA_FAST_PIXEL_OFFSET\",\n \" #define FXAA_FAST_PIXEL_OFFSET 0\",\n \" #endif\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#ifndef FXAA_GATHER4_ALPHA\",\n \" //\",\n \" // 1 = API supports gather4 on alpha channel.\",\n \" // 0 = API does not support gather4 on alpha channel.\",\n \" //\",\n \" #if (FXAA_HLSL_5 == 1)\",\n \" #define FXAA_GATHER4_ALPHA 1\",\n \" #endif\",\n \" #ifdef GL_ARB_gpu_shader5\",\n \" #define FXAA_GATHER4_ALPHA 1\",\n \" #endif\",\n \" #ifdef GL_NV_gpu_shader5\",\n \" #define FXAA_GATHER4_ALPHA 1\",\n \" #endif\",\n \" #ifndef FXAA_GATHER4_ALPHA\",\n \" #define FXAA_GATHER4_ALPHA 0\",\n \" #endif\",\n \"#endif\",\n \"\",\n \"\",\n \"/*============================================================================\",\n \" FXAA QUALITY - TUNING KNOBS\",\n \"------------------------------------------------------------------------------\",\n \"NOTE the other tuning knobs are now in the shader function inputs!\",\n \"============================================================================*/\",\n \"#ifndef FXAA_QUALITY_PRESET\",\n \" //\",\n \" // Choose the quality preset.\",\n \" // This needs to be compiled into the shader as it effects code.\",\n \" // Best option to include multiple presets is to\",\n \" // in each shader define the preset, then include this file.\",\n \" //\",\n \" // OPTIONS\",\n \" // -----------------------------------------------------------------------\",\n \" // 10 to 15 - default medium dither (10=fastest, 15=highest quality)\",\n \" // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)\",\n \" // 39 - no dither, very expensive\",\n \" //\",\n \" // NOTES\",\n \" // -----------------------------------------------------------------------\",\n \" // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)\",\n \" // 13 = about same speed as FXAA 3.9 and better than 12\",\n \" // 23 = closest to FXAA 3.9 visually and performance wise\",\n \" // _ = the lowest digit is directly related to performance\",\n \" // _ = the highest digit is directly related to style\",\n \" //\",\n \" #define FXAA_QUALITY_PRESET 39\",\n \"#endif\",\n \"\",\n \"\",\n \"/*============================================================================\",\n \"\",\n \" FXAA QUALITY - PRESETS\",\n \"\",\n \"============================================================================*/\",\n \"\",\n \"/*============================================================================\",\n \" FXAA QUALITY - MEDIUM DITHER PRESETS\",\n \"============================================================================*/\",\n \"#if (FXAA_QUALITY_PRESET == 10)\",\n \" #define FXAA_QUALITY_PS 3\",\n \" #define FXAA_QUALITY_P0 1.5\",\n \" #define FXAA_QUALITY_P1 3.0\",\n \" #define FXAA_QUALITY_P2 12.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 11)\",\n \" #define FXAA_QUALITY_PS 4\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 3.0\",\n \" #define FXAA_QUALITY_P3 12.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 12)\",\n \" #define FXAA_QUALITY_PS 5\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 4.0\",\n \" #define FXAA_QUALITY_P4 12.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 13)\",\n \" #define FXAA_QUALITY_PS 6\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 2.0\",\n \" #define FXAA_QUALITY_P4 4.0\",\n \" #define FXAA_QUALITY_P5 12.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 14)\",\n \" #define FXAA_QUALITY_PS 7\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 2.0\",\n \" #define FXAA_QUALITY_P4 2.0\",\n \" #define FXAA_QUALITY_P5 4.0\",\n \" #define FXAA_QUALITY_P6 12.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 15)\",\n \" #define FXAA_QUALITY_PS 8\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 2.0\",\n \" #define FXAA_QUALITY_P4 2.0\",\n \" #define FXAA_QUALITY_P5 2.0\",\n \" #define FXAA_QUALITY_P6 4.0\",\n \" #define FXAA_QUALITY_P7 12.0\",\n \"#endif\",\n \"\",\n \"/*============================================================================\",\n \" FXAA QUALITY - LOW DITHER PRESETS\",\n \"============================================================================*/\",\n \"#if (FXAA_QUALITY_PRESET == 20)\",\n \" #define FXAA_QUALITY_PS 3\",\n \" #define FXAA_QUALITY_P0 1.5\",\n \" #define FXAA_QUALITY_P1 2.0\",\n \" #define FXAA_QUALITY_P2 8.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 21)\",\n \" #define FXAA_QUALITY_PS 4\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 8.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 22)\",\n \" #define FXAA_QUALITY_PS 5\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 2.0\",\n \" #define FXAA_QUALITY_P4 8.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 23)\",\n \" #define FXAA_QUALITY_PS 6\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 2.0\",\n \" #define FXAA_QUALITY_P4 2.0\",\n \" #define FXAA_QUALITY_P5 8.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 24)\",\n \" #define FXAA_QUALITY_PS 7\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 2.0\",\n \" #define FXAA_QUALITY_P4 2.0\",\n \" #define FXAA_QUALITY_P5 3.0\",\n \" #define FXAA_QUALITY_P6 8.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 25)\",\n \" #define FXAA_QUALITY_PS 8\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 2.0\",\n \" #define FXAA_QUALITY_P4 2.0\",\n \" #define FXAA_QUALITY_P5 2.0\",\n \" #define FXAA_QUALITY_P6 4.0\",\n \" #define FXAA_QUALITY_P7 8.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 26)\",\n \" #define FXAA_QUALITY_PS 9\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 2.0\",\n \" #define FXAA_QUALITY_P4 2.0\",\n \" #define FXAA_QUALITY_P5 2.0\",\n \" #define FXAA_QUALITY_P6 2.0\",\n \" #define FXAA_QUALITY_P7 4.0\",\n \" #define FXAA_QUALITY_P8 8.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 27)\",\n \" #define FXAA_QUALITY_PS 10\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 2.0\",\n \" #define FXAA_QUALITY_P4 2.0\",\n \" #define FXAA_QUALITY_P5 2.0\",\n \" #define FXAA_QUALITY_P6 2.0\",\n \" #define FXAA_QUALITY_P7 2.0\",\n \" #define FXAA_QUALITY_P8 4.0\",\n \" #define FXAA_QUALITY_P9 8.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 28)\",\n \" #define FXAA_QUALITY_PS 11\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 2.0\",\n \" #define FXAA_QUALITY_P4 2.0\",\n \" #define FXAA_QUALITY_P5 2.0\",\n \" #define FXAA_QUALITY_P6 2.0\",\n \" #define FXAA_QUALITY_P7 2.0\",\n \" #define FXAA_QUALITY_P8 2.0\",\n \" #define FXAA_QUALITY_P9 4.0\",\n \" #define FXAA_QUALITY_P10 8.0\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_QUALITY_PRESET == 29)\",\n \" #define FXAA_QUALITY_PS 12\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.5\",\n \" #define FXAA_QUALITY_P2 2.0\",\n \" #define FXAA_QUALITY_P3 2.0\",\n \" #define FXAA_QUALITY_P4 2.0\",\n \" #define FXAA_QUALITY_P5 2.0\",\n \" #define FXAA_QUALITY_P6 2.0\",\n \" #define FXAA_QUALITY_P7 2.0\",\n \" #define FXAA_QUALITY_P8 2.0\",\n \" #define FXAA_QUALITY_P9 2.0\",\n \" #define FXAA_QUALITY_P10 4.0\",\n \" #define FXAA_QUALITY_P11 8.0\",\n \"#endif\",\n \"\",\n \"/*============================================================================\",\n \" FXAA QUALITY - EXTREME QUALITY\",\n \"============================================================================*/\",\n \"#if (FXAA_QUALITY_PRESET == 39)\",\n \" #define FXAA_QUALITY_PS 12\",\n \" #define FXAA_QUALITY_P0 1.0\",\n \" #define FXAA_QUALITY_P1 1.0\",\n \" #define FXAA_QUALITY_P2 1.0\",\n \" #define FXAA_QUALITY_P3 1.0\",\n \" #define FXAA_QUALITY_P4 1.0\",\n \" #define FXAA_QUALITY_P5 1.5\",\n \" #define FXAA_QUALITY_P6 2.0\",\n \" #define FXAA_QUALITY_P7 2.0\",\n \" #define FXAA_QUALITY_P8 2.0\",\n \" #define FXAA_QUALITY_P9 2.0\",\n \" #define FXAA_QUALITY_P10 4.0\",\n \" #define FXAA_QUALITY_P11 8.0\",\n \"#endif\",\n \"\",\n \"\",\n \"\",\n \"/*============================================================================\",\n \"\",\n \" API PORTING\",\n \"\",\n \"============================================================================*/\",\n \"#if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)\",\n \" #define FxaaBool bool\",\n \" #define FxaaDiscard discard\",\n \" #define FxaaFloat float\",\n \" #define FxaaFloat2 vec2\",\n \" #define FxaaFloat3 vec3\",\n \" #define FxaaFloat4 vec4\",\n \" #define FxaaHalf float\",\n \" #define FxaaHalf2 vec2\",\n \" #define FxaaHalf3 vec3\",\n \" #define FxaaHalf4 vec4\",\n \" #define FxaaInt2 ivec2\",\n \" #define FxaaSat(x) clamp(x, 0.0, 1.0)\",\n \" #define FxaaTex sampler2D\",\n \"#else\",\n \" #define FxaaBool bool\",\n \" #define FxaaDiscard clip(-1)\",\n \" #define FxaaFloat float\",\n \" #define FxaaFloat2 float2\",\n \" #define FxaaFloat3 float3\",\n \" #define FxaaFloat4 float4\",\n \" #define FxaaHalf half\",\n \" #define FxaaHalf2 half2\",\n \" #define FxaaHalf3 half3\",\n \" #define FxaaHalf4 half4\",\n \" #define FxaaSat(x) saturate(x)\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_GLSL_100 == 1)\",\n \" #define FxaaTexTop(t, p) texture2D(t, p, 0.0)\",\n \" #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_GLSL_120 == 1)\",\n \" // Requires,\",\n \" // #version 120\",\n \" // And at least,\",\n \" // #extension GL_EXT_gpu_shader4 : enable\",\n \" // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)\",\n \" #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)\",\n \" #if (FXAA_FAST_PIXEL_OFFSET == 1)\",\n \" #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)\",\n \" #else\",\n \" #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)\",\n \" #endif\",\n \" #if (FXAA_GATHER4_ALPHA == 1)\",\n \" // use #extension GL_ARB_gpu_shader5 : enable\",\n \" #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\",\n \" #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\",\n \" #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\",\n \" #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\",\n \" #endif\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_GLSL_130 == 1)\",\n ' // Requires \"#version 130\" or better',\n \" #define FxaaTexTop(t, p) textureLod(t, p, 0.0)\",\n \" #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)\",\n \" #if (FXAA_GATHER4_ALPHA == 1)\",\n \" // use #extension GL_ARB_gpu_shader5 : enable\",\n \" #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\",\n \" #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\",\n \" #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\",\n \" #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\",\n \" #endif\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_HLSL_3 == 1)\",\n \" #define FxaaInt2 float2\",\n \" #define FxaaTex sampler2D\",\n \" #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))\",\n \" #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_HLSL_4 == 1)\",\n \" #define FxaaInt2 int2\",\n \" struct FxaaTex { SamplerState smpl; Texture2D tex; };\",\n \" #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\",\n \" #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\",\n \"#endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \"#if (FXAA_HLSL_5 == 1)\",\n \" #define FxaaInt2 int2\",\n \" struct FxaaTex { SamplerState smpl; Texture2D tex; };\",\n \" #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\",\n \" #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\",\n \" #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)\",\n \" #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)\",\n \" #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)\",\n \" #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)\",\n \"#endif\",\n \"\",\n \"\",\n \"/*============================================================================\",\n \" GREEN AS LUMA OPTION SUPPORT FUNCTION\",\n \"============================================================================*/\",\n \"#if (FXAA_GREEN_AS_LUMA == 0)\",\n \" FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }\",\n \"#else\",\n \" FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\",\n \"#endif\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"/*============================================================================\",\n \"\",\n \" FXAA3 QUALITY - PC\",\n \"\",\n \"============================================================================*/\",\n \"#if (FXAA_PC == 1)\",\n \"/*--------------------------------------------------------------------------*/\",\n \"FxaaFloat4 FxaaPixelShader(\",\n \" //\",\n \" // Use noperspective interpolation here (turn off perspective interpolation).\",\n \" // {xy} = center of pixel\",\n \" FxaaFloat2 pos,\",\n \" //\",\n \" // Used only for FXAA Console, and not used on the 360 version.\",\n \" // Use noperspective interpolation here (turn off perspective interpolation).\",\n \" // {xy_} = upper left of pixel\",\n \" // {_zw} = lower right of pixel\",\n \" FxaaFloat4 fxaaConsolePosPos,\",\n \" //\",\n \" // Input color texture.\",\n \" // {rgb_} = color in linear or perceptual color space\",\n \" // if (FXAA_GREEN_AS_LUMA == 0)\",\n \" // {__a} = luma in perceptual color space (not linear)\",\n \" FxaaTex tex,\",\n \" //\",\n \" // Only used on the optimized 360 version of FXAA Console.\",\n ' // For everything but 360, just use the same input here as for \"tex\".',\n \" // For 360, same texture, just alias with a 2nd sampler.\",\n \" // This sampler needs to have an exponent bias of -1.\",\n \" FxaaTex fxaaConsole360TexExpBiasNegOne,\",\n \" //\",\n \" // Only used on the optimized 360 version of FXAA Console.\",\n ' // For everything but 360, just use the same input here as for \"tex\".',\n \" // For 360, same texture, just alias with a 3nd sampler.\",\n \" // This sampler needs to have an exponent bias of -2.\",\n \" FxaaTex fxaaConsole360TexExpBiasNegTwo,\",\n \" //\",\n \" // Only used on FXAA Quality.\",\n \" // This must be from a constant/uniform.\",\n \" // {x_} = 1.0/screenWidthInPixels\",\n \" // {_y} = 1.0/screenHeightInPixels\",\n \" FxaaFloat2 fxaaQualityRcpFrame,\",\n \" //\",\n \" // Only used on FXAA Console.\",\n \" // This must be from a constant/uniform.\",\n \" // This effects sub-pixel AA quality and inversely sharpness.\",\n \" // Where N ranges between,\",\n \" // N = 0.50 (default)\",\n \" // N = 0.33 (sharper)\",\n \" // {x__} = -N/screenWidthInPixels\",\n \" // {_y_} = -N/screenHeightInPixels\",\n \" // {_z_} = N/screenWidthInPixels\",\n \" // {__w} = N/screenHeightInPixels\",\n \" FxaaFloat4 fxaaConsoleRcpFrameOpt,\",\n \" //\",\n \" // Only used on FXAA Console.\",\n \" // Not used on 360, but used on PS3 and PC.\",\n \" // This must be from a constant/uniform.\",\n \" // {x__} = -2.0/screenWidthInPixels\",\n \" // {_y_} = -2.0/screenHeightInPixels\",\n \" // {_z_} = 2.0/screenWidthInPixels\",\n \" // {__w} = 2.0/screenHeightInPixels\",\n \" FxaaFloat4 fxaaConsoleRcpFrameOpt2,\",\n \" //\",\n \" // Only used on FXAA Console.\",\n \" // Only used on 360 in place of fxaaConsoleRcpFrameOpt2.\",\n \" // This must be from a constant/uniform.\",\n \" // {x__} = 8.0/screenWidthInPixels\",\n \" // {_y_} = 8.0/screenHeightInPixels\",\n \" // {_z_} = -4.0/screenWidthInPixels\",\n \" // {__w} = -4.0/screenHeightInPixels\",\n \" FxaaFloat4 fxaaConsole360RcpFrameOpt2,\",\n \" //\",\n \" // Only used on FXAA Quality.\",\n \" // This used to be the FXAA_QUALITY_SUBPIX define.\",\n \" // It is here now to allow easier tuning.\",\n \" // Choose the amount of sub-pixel aliasing removal.\",\n \" // This can effect sharpness.\",\n \" // 1.00 - upper limit (softer)\",\n \" // 0.75 - default amount of filtering\",\n \" // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)\",\n \" // 0.25 - almost off\",\n \" // 0.00 - completely off\",\n \" FxaaFloat fxaaQualitySubpix,\",\n \" //\",\n \" // Only used on FXAA Quality.\",\n \" // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.\",\n \" // It is here now to allow easier tuning.\",\n \" // The minimum amount of local contrast required to apply algorithm.\",\n \" // 0.333 - too little (faster)\",\n \" // 0.250 - low quality\",\n \" // 0.166 - default\",\n \" // 0.125 - high quality\",\n \" // 0.063 - overkill (slower)\",\n \" FxaaFloat fxaaQualityEdgeThreshold,\",\n \" //\",\n \" // Only used on FXAA Quality.\",\n \" // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.\",\n \" // It is here now to allow easier tuning.\",\n \" // Trims the algorithm from processing darks.\",\n \" // 0.0833 - upper limit (default, the start of visible unfiltered edges)\",\n \" // 0.0625 - high quality (faster)\",\n \" // 0.0312 - visible limit (slower)\",\n \" // Special notes when using FXAA_GREEN_AS_LUMA,\",\n \" // Likely want to set this to zero.\",\n \" // As colors that are mostly not-green\",\n \" // will appear very dark in the green channel!\",\n \" // Tune by looking at mostly non-green content,\",\n \" // then start at zero and increase until aliasing is a problem.\",\n \" FxaaFloat fxaaQualityEdgeThresholdMin,\",\n \" //\",\n \" // Only used on FXAA Console.\",\n \" // This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define.\",\n \" // It is here now to allow easier tuning.\",\n \" // This does not effect PS3, as this needs to be compiled in.\",\n \" // Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3.\",\n \" // Due to the PS3 being ALU bound,\",\n \" // there are only three safe values here: 2 and 4 and 8.\",\n \" // These options use the shaders ability to a free *|/ by 2|4|8.\",\n \" // For all other platforms can be a non-power of two.\",\n \" // 8.0 is sharper (default!!!)\",\n \" // 4.0 is softer\",\n \" // 2.0 is really soft (good only for vector graphics inputs)\",\n \" FxaaFloat fxaaConsoleEdgeSharpness,\",\n \" //\",\n \" // Only used on FXAA Console.\",\n \" // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define.\",\n \" // It is here now to allow easier tuning.\",\n \" // This does not effect PS3, as this needs to be compiled in.\",\n \" // Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3.\",\n \" // Due to the PS3 being ALU bound,\",\n \" // there are only two safe values here: 1/4 and 1/8.\",\n \" // These options use the shaders ability to a free *|/ by 2|4|8.\",\n \" // The console setting has a different mapping than the quality setting.\",\n \" // Other platforms can use other values.\",\n \" // 0.125 leaves less aliasing, but is softer (default!!!)\",\n \" // 0.25 leaves more aliasing, and is sharper\",\n \" FxaaFloat fxaaConsoleEdgeThreshold,\",\n \" //\",\n \" // Only used on FXAA Console.\",\n \" // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define.\",\n \" // It is here now to allow easier tuning.\",\n \" // Trims the algorithm from processing darks.\",\n \" // The console setting has a different mapping than the quality setting.\",\n \" // This only applies when FXAA_EARLY_EXIT is 1.\",\n \" // This does not apply to PS3,\",\n \" // PS3 was simplified to avoid more shader instructions.\",\n \" // 0.06 - faster but more aliasing in darks\",\n \" // 0.05 - default\",\n \" // 0.04 - slower and less aliasing in darks\",\n \" // Special notes when using FXAA_GREEN_AS_LUMA,\",\n \" // Likely want to set this to zero.\",\n \" // As colors that are mostly not-green\",\n \" // will appear very dark in the green channel!\",\n \" // Tune by looking at mostly non-green content,\",\n \" // then start at zero and increase until aliasing is a problem.\",\n \" FxaaFloat fxaaConsoleEdgeThresholdMin,\",\n \" //\",\n \" // Extra constants for 360 FXAA Console only.\",\n \" // Use zeros or anything else for other platforms.\",\n \" // These must be in physical constant registers and NOT immediates.\",\n \" // Immediates will result in compiler un-optimizing.\",\n \" // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)\",\n \" FxaaFloat4 fxaaConsole360ConstDir\",\n \") {\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaFloat2 posM;\",\n \" posM.x = pos.x;\",\n \" posM.y = pos.y;\",\n \" #if (FXAA_GATHER4_ALPHA == 1)\",\n \" #if (FXAA_DISCARD == 0)\",\n \" FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\",\n \" #if (FXAA_GREEN_AS_LUMA == 0)\",\n \" #define lumaM rgbyM.w\",\n \" #else\",\n \" #define lumaM rgbyM.y\",\n \" #endif\",\n \" #endif\",\n \" #if (FXAA_GREEN_AS_LUMA == 0)\",\n \" FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);\",\n \" FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));\",\n \" #else\",\n \" FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);\",\n \" FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));\",\n \" #endif\",\n \" #if (FXAA_DISCARD == 1)\",\n \" #define lumaM luma4A.w\",\n \" #endif\",\n \" #define lumaE luma4A.z\",\n \" #define lumaS luma4A.x\",\n \" #define lumaSE luma4A.y\",\n \" #define lumaNW luma4B.w\",\n \" #define lumaN luma4B.z\",\n \" #define lumaW luma4B.x\",\n \" #else\",\n \" FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\",\n \" #if (FXAA_GREEN_AS_LUMA == 0)\",\n \" #define lumaM rgbyM.w\",\n \" #else\",\n \" #define lumaM rgbyM.y\",\n \" #endif\",\n \" #if (FXAA_GLSL_100 == 1)\",\n \" FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));\",\n \" #else\",\n \" FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\",\n \" #endif\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaFloat maxSM = max(lumaS, lumaM);\",\n \" FxaaFloat minSM = min(lumaS, lumaM);\",\n \" FxaaFloat maxESM = max(lumaE, maxSM);\",\n \" FxaaFloat minESM = min(lumaE, minSM);\",\n \" FxaaFloat maxWN = max(lumaN, lumaW);\",\n \" FxaaFloat minWN = min(lumaN, lumaW);\",\n \" FxaaFloat rangeMax = max(maxWN, maxESM);\",\n \" FxaaFloat rangeMin = min(minWN, minESM);\",\n \" FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\",\n \" FxaaFloat range = rangeMax - rangeMin;\",\n \" FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\",\n \" FxaaBool earlyExit = range < rangeMaxClamped;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" if(earlyExit)\",\n \" #if (FXAA_DISCARD == 1)\",\n \" FxaaDiscard;\",\n \" #else\",\n \" return rgbyM;\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" #if (FXAA_GATHER4_ALPHA == 0)\",\n \" #if (FXAA_GLSL_100 == 1)\",\n \" FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));\",\n \" #else\",\n \" FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\",\n \" #endif\",\n \" #else\",\n \" FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));\",\n \" FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaFloat lumaNS = lumaN + lumaS;\",\n \" FxaaFloat lumaWE = lumaW + lumaE;\",\n \" FxaaFloat subpixRcpRange = 1.0/range;\",\n \" FxaaFloat subpixNSWE = lumaNS + lumaWE;\",\n \" FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\",\n \" FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaFloat lumaNESE = lumaNE + lumaSE;\",\n \" FxaaFloat lumaNWNE = lumaNW + lumaNE;\",\n \" FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\",\n \" FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaFloat lumaNWSW = lumaNW + lumaSW;\",\n \" FxaaFloat lumaSWSE = lumaSW + lumaSE;\",\n \" FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\",\n \" FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\",\n \" FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\",\n \" FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\",\n \" FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\",\n \" FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\",\n \" FxaaFloat lengthSign = fxaaQualityRcpFrame.x;\",\n \" FxaaBool horzSpan = edgeHorz >= edgeVert;\",\n \" FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" if(!horzSpan) lumaN = lumaW;\",\n \" if(!horzSpan) lumaS = lumaE;\",\n \" if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\",\n \" FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaFloat gradientN = lumaN - lumaM;\",\n \" FxaaFloat gradientS = lumaS - lumaM;\",\n \" FxaaFloat lumaNN = lumaN + lumaM;\",\n \" FxaaFloat lumaSS = lumaS + lumaM;\",\n \" FxaaBool pairN = abs(gradientN) >= abs(gradientS);\",\n \" FxaaFloat gradient = max(abs(gradientN), abs(gradientS));\",\n \" if(pairN) lengthSign = -lengthSign;\",\n \" FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaFloat2 posB;\",\n \" posB.x = posM.x;\",\n \" posB.y = posM.y;\",\n \" FxaaFloat2 offNP;\",\n \" offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\",\n \" offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\",\n \" if(!horzSpan) posB.x += lengthSign * 0.5;\",\n \" if( horzSpan) posB.y += lengthSign * 0.5;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaFloat2 posN;\",\n \" posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;\",\n \" posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;\",\n \" FxaaFloat2 posP;\",\n \" posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;\",\n \" posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;\",\n \" FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\",\n \" FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\",\n \" FxaaFloat subpixE = subpixC * subpixC;\",\n \" FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\",\n \"/*--------------------------------------------------------------------------*/\",\n \" if(!pairN) lumaNN = lumaSS;\",\n \" FxaaFloat gradientScaled = gradient * 1.0/4.0;\",\n \" FxaaFloat lumaMM = lumaM - lumaNN * 0.5;\",\n \" FxaaFloat subpixF = subpixD * subpixE;\",\n \" FxaaBool lumaMLTZero = lumaMM < 0.0;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" lumaEndN -= lumaNN * 0.5;\",\n \" lumaEndP -= lumaNN * 0.5;\",\n \" FxaaBool doneN = abs(lumaEndN) >= gradientScaled;\",\n \" FxaaBool doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;\",\n \" FxaaBool doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" if(doneNP) {\",\n \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n \" doneN = abs(lumaEndN) >= gradientScaled;\",\n \" doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;\",\n \" doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" #if (FXAA_QUALITY_PS > 3)\",\n \" if(doneNP) {\",\n \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n \" doneN = abs(lumaEndN) >= gradientScaled;\",\n \" doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;\",\n \" doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" #if (FXAA_QUALITY_PS > 4)\",\n \" if(doneNP) {\",\n \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n \" doneN = abs(lumaEndN) >= gradientScaled;\",\n \" doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;\",\n \" doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" #if (FXAA_QUALITY_PS > 5)\",\n \" if(doneNP) {\",\n \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n \" doneN = abs(lumaEndN) >= gradientScaled;\",\n \" doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;\",\n \" doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" #if (FXAA_QUALITY_PS > 6)\",\n \" if(doneNP) {\",\n \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n \" doneN = abs(lumaEndN) >= gradientScaled;\",\n \" doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;\",\n \" doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" #if (FXAA_QUALITY_PS > 7)\",\n \" if(doneNP) {\",\n \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n \" doneN = abs(lumaEndN) >= gradientScaled;\",\n \" doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;\",\n \" doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" #if (FXAA_QUALITY_PS > 8)\",\n \" if(doneNP) {\",\n \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n \" doneN = abs(lumaEndN) >= gradientScaled;\",\n \" doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;\",\n \" doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" #if (FXAA_QUALITY_PS > 9)\",\n \" if(doneNP) {\",\n \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n \" doneN = abs(lumaEndN) >= gradientScaled;\",\n \" doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;\",\n \" doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" #if (FXAA_QUALITY_PS > 10)\",\n \" if(doneNP) {\",\n \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n \" doneN = abs(lumaEndN) >= gradientScaled;\",\n \" doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;\",\n \" doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" #if (FXAA_QUALITY_PS > 11)\",\n \" if(doneNP) {\",\n \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n \" doneN = abs(lumaEndN) >= gradientScaled;\",\n \" doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;\",\n \" doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" #if (FXAA_QUALITY_PS > 12)\",\n \" if(doneNP) {\",\n \" if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\",\n \" if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\",\n \" if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\",\n \" if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\",\n \" doneN = abs(lumaEndN) >= gradientScaled;\",\n \" doneP = abs(lumaEndP) >= gradientScaled;\",\n \" if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;\",\n \" if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;\",\n \" doneNP = (!doneN) || (!doneP);\",\n \" if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;\",\n \" if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" }\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" }\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" }\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" }\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" }\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" }\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" }\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" }\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" }\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" }\",\n \" #endif\",\n \"/*--------------------------------------------------------------------------*/\",\n \" }\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaFloat dstN = posM.x - posN.x;\",\n \" FxaaFloat dstP = posP.x - posM.x;\",\n \" if(!horzSpan) dstN = posM.y - posN.y;\",\n \" if(!horzSpan) dstP = posP.y - posM.y;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\",\n \" FxaaFloat spanLength = (dstP + dstN);\",\n \" FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\",\n \" FxaaFloat spanLengthRcp = 1.0/spanLength;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaBool directionN = dstN < dstP;\",\n \" FxaaFloat dst = min(dstN, dstP);\",\n \" FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\",\n \" FxaaFloat subpixG = subpixF * subpixF;\",\n \" FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\",\n \" FxaaFloat subpixH = subpixG * fxaaQualitySubpix;\",\n \"/*--------------------------------------------------------------------------*/\",\n \" FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\",\n \" FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\",\n \" if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\",\n \" if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\",\n \" #if (FXAA_DISCARD == 1)\",\n \" return FxaaTexTop(tex, posM);\",\n \" #else\",\n \" return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\",\n \" #endif\",\n \"}\",\n \"/*==========================================================================*/\",\n \"#endif\",\n \"\",\n \"void main() {\",\n // \" gl_FragColor = texture2D(tDiffuse, vUv);\",\n \" gl_FragColor = FxaaPixelShader(\",\n \" vUv,\",\n \" vec4(0.0),\",\n \" tDiffuse,\",\n \" tDiffuse,\",\n \" tDiffuse,\",\n \" resolution,\",\n \" vec4(0.0),\",\n \" vec4(0.0),\",\n \" vec4(0.0),\",\n \" 0.75,\",\n \" 0.166,\",\n \" 0.0833,\",\n \" 0.0,\",\n \" 0.0,\",\n \" 0.0,\",\n \" vec4(0.0)\",\n \" );\",\n \"\",\n \" // TODO avoid querying texture twice for same texel\",\n \" gl_FragColor.a = texture2D(tDiffuse, vUv).a;\",\n \"}\"\n ].join(\"\\n\")\n }\n}\n","import {\n WebGLRenderTarget, DepthTexture, Mesh,\n Vector3, ShaderMaterial, Color\n} from 'three'\nimport { Shaders } from '../Shader.js'\n\nexport default class glowmaskPass {\n //ren: WebGLRenderTarget;\n glowTarget: WebGLRenderTarget\n lightShader: ShaderMaterial\n scene: any\n renderer: any\n camera: any\n matdictionary: any\n sceneColor: any\n\n constructor(scene: any, camera: any, renderer: any, groundlight: any) {\n\n const shaders = new Shaders()\n this.glowTarget = new WebGLRenderTarget(\n window.innerWidth,\n window.innerHeight\n )\n this.glowTarget.depthBuffer = true\n this.glowTarget.depthTexture = new DepthTexture(window.innerWidth, window.innerHeight)\n let lightUniforms = {\n color: {\n value: [] as any\n },\n pos: {\n value: [] as any\n },\n strength: {\n value: null as any\n },\n alpha: {\n value: null as any\n }\n }\n /*\n scene.traverse(function (node: any) {\n const c = node.children as any\n console.log(c);\n if (node instanceof Mesh) {\n\n let mat = node.material as any;\n if (mat.name.charAt(0) as any == 'E') {\n let n = new Vector3();\n let { r, g, b } = mat.emissive || mat.color;\n\n node.getWorldPosition(n);\n n.y = -1.5;\n lightUniforms.pos.value.push(n);\n // node.material.fog = false;\n lightUniforms.color.value.push(new Vector3(r, g, b));\n\n }\n }\n });*/\n\n if (lightUniforms.pos.value.length < 3) {\n lightUniforms.pos.value.push(new Vector3(0, 0, 0))\n lightUniforms.pos.value.push(new Vector3(0, 0, 0))\n lightUniforms.pos.value.push(new Vector3(0, 0, 0))\n lightUniforms.color.value.push(new Vector3(0, 0, 0))\n lightUniforms.color.value.push(new Vector3(0, 0, 0))\n lightUniforms.color.value.push(new Vector3(0, 0, 0))\n }\n lightUniforms.pos.value[0].x = 1.7\n lightUniforms.pos.value[0].z = -1.0\n lightUniforms.pos.value[1].z = -0.5\n lightUniforms.pos.value[1].x = -1.5\n lightUniforms.pos.value[2].z = 0.5\n this.lightShader = new ShaderMaterial({\n uniforms: lightUniforms,\n fragmentShader: shaders.lightShader(),\n vertexShader: shaders.vertexShader(),\n transparent: true\n })\n this.lightShader.uniforms.strength.value = groundlight\n\n this.scene = scene\n this.renderer = renderer\n this.camera = camera\n this.matdictionary = {} as any\n this.sceneColor = this.scene.background\n //console.log(this.ren);\n // this.ren = new WebGLRenderTarget(1, 2);\n\n }\n\n loopScene(children: any) { }\n\n resize(w: any, h: any) {\n this.glowTarget.setSize(w, h)\n }\n\n update(cam: any) {\n const doSwap = (mat: any) => {\n return mat.type !== 'MeshPhysicalMaterial' &&\n (!(mat.emissive && Object.values(mat.emissive).some(ch => ch)) || mat.type === 'ShadowMaterial')\n }\n this.scene.background = new Color('black')\n this.renderer.setRenderTarget(this.glowTarget)\n this.matdictionary = {}\n this.scene.traverse((node: any) => {\n if (node instanceof Mesh) {\n let mat = node.material as any\n\n if (mat.type === 'ShadowMaterial') {\n // console.log(mat)\n }\n if (doSwap(mat)) {\n let n = mat.name\n this.matdictionary[n] = node.material\n //node.material = new THREE.MeshBasicMaterial({ color: 0x000000 });\n // let opa = mat.opacity;\n mat = this.lightShader.clone() as ShaderMaterial\n\n mat.uniforms.alpha.value = mat.type === 'ShadowMaterial' ? 0 : 1\n mat.name = n\n node.material = mat\n //node.material = mat2;\n //this.scene.remove(node);\n }\n }\n })\n\n this.renderer.render(this.scene, cam)\n this.renderer.setRenderTarget(null)\n this.scene.traverse((node: any) => {\n if (node instanceof Mesh) {\n const mat = node.material as any\n\n if (doSwap(mat)) {\n //let n = node.material.name;\n //this.matdictionary[n] = node.material;\n node.material = this.matdictionary[mat.name]\n //node.material.name = n;\n //this.scene.remove(node);\n }\n }\n })\n this.scene.background = this.sceneColor\n }\n}","import { ShaderMaterial, Vector2 } from 'three';\nimport { Shaders } from '../Shader.js';\n\nexport default class fxaaEffect {\n //ren: WebGLRenderTarget;\n\n postScene: any;\n renderer: any;\n postCamera: any;\n matdictionary: any;\n quad: any;\n sceneColor: any;\n FXAA: any;\n constructor(scene: any, camera: any, renderer: any, quad: any) {\n\n let shaders = new Shaders();\n\n let FXAAuniforms = {\n tDiffuse: {\n value: null\n },\n resolution: {\n value: new Vector2()\n }\n };\n\n\n this.FXAA = new ShaderMaterial({\n uniforms: FXAAuniforms,\n fragmentShader: shaders.FXAA(),\n vertexShader: shaders.vertexShader()\n });\n\n this.postScene = scene;\n this.renderer = renderer;\n this.postCamera = camera;\n this.quad = quad;\n\n }\n resize(w: any, h: any) {\n // this.glowTarget.setSize(w, h);\n }\n update(renderTexture: any) {\n var pixelRatio = this.renderer.getPixelRatio();\n this.quad.material = this.FXAA;\n this.quad.material.uniforms.tDiffuse.value = renderTexture;\n this.quad.material.uniforms.resolution.value.x =\n 1 / (window.innerWidth * pixelRatio);\n this.quad.material.uniforms.resolution.value.y =\n 1 / (window.innerHeight * pixelRatio);\n this.renderer.render(this.postScene, this.postCamera);\n }\n}","import {\n WebGLRenderTarget, ShaderMaterial,\n LinearFilter, RGBAFormat, Vector2\n} from 'three';\n\nexport default class bloomEffectPass {\n postScene: any;\n renderer: any;\n postCamera: any;\n matdictionary: any;\n quad: any;\n sceneColor: any;\n renderTargetsHorizontal: any;\n renderTargetsVertical: any;\n nMips: any;\n resolution: any\n separableBlurMaterials: any\n compositeMaterial: any\n\n constructor(scene: any, camera: any, renderer: any, quad: any) {\n\n let pars = {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n format: RGBAFormat\n };\n this.renderTargetsHorizontal = [];\n this.renderTargetsVertical = [];\n this.nMips = 5;\n this.resolution = new Vector2(window.innerWidth, window.innerHeight);\n let resx = Math.round(this.resolution.x / 2);\n let resy = Math.round(this.resolution.y / 2);\n\n for (let i = 0; i < this.nMips; i++) {\n let renderTargetHorizonal = new WebGLRenderTarget(resx, resy, pars);\n\n renderTargetHorizonal.texture.name = \"UnrealBloomPass.h\" + i;\n renderTargetHorizonal.texture.generateMipmaps = false;\n\n this.renderTargetsHorizontal.push(renderTargetHorizonal);\n\n let renderTargetVertical = new WebGLRenderTarget(resx, resy, pars);\n\n renderTargetVertical.texture.name = \"UnrealBloomPass.v\" + i;\n renderTargetVertical.texture.generateMipmaps = false;\n\n this.renderTargetsVertical.push(renderTargetVertical);\n\n resx = Math.round(resx / 2);\n\n resy = Math.round(resy / 2);\n }\n\n this.separableBlurMaterials = [];\n let kernelSizeArray = [3, 5, 7, 9, 11];\n\n resx = Math.round(this.resolution.x / 2);\n resy = Math.round(this.resolution.y / 2);\n\n for (let i = 0; i < this.nMips; i++) {\n this.separableBlurMaterials.push(\n this.getSeperableBlurMaterial(kernelSizeArray[i])\n );\n\n this.separableBlurMaterials[i].uniforms[\n \"texSize\"\n ].value = new Vector2(resx, resy);\n\n resx = Math.round(resx / 2);\n\n resy = Math.round(resy / 2);\n }\n this.compositeMaterial = this.getCompositeMaterial(this.nMips);\n this.compositeMaterial.uniforms[\n \"blurTexture1\"\n ].value = this.renderTargetsVertical[0].texture;\n this.compositeMaterial.uniforms[\n \"blurTexture2\"\n ].value = this.renderTargetsVertical[1].texture;\n this.compositeMaterial.uniforms[\n \"blurTexture3\"\n ].value = this.renderTargetsVertical[2].texture;\n this.compositeMaterial.uniforms[\n \"blurTexture4\"\n ].value = this.renderTargetsVertical[3].texture;\n this.compositeMaterial.uniforms[\n \"blurTexture5\"\n ].value = this.renderTargetsVertical[4].texture;\n this.compositeMaterial.uniforms[\"bloomStrength\"].value = 1.;\n this.compositeMaterial.uniforms[\"bloomRadius\"].value = 1.;\n this.compositeMaterial.needsUpdate = true;\n\n let bloomFactors = [1.0, 0.8, 0.6, 0.4, 0.2];\n this.compositeMaterial.uniforms[\"bloomFactors\"].value = bloomFactors;\n \n\n this.postScene = scene;\n this.renderer = renderer;\n this.postCamera = camera;\n this.quad = quad;\n\n\n }\n\n\n resize(res_x: any, res_y: any) {\n let resx = Math.round(res_x / 2);\n let resy = Math.round(res_y / 2);\n\n for (let i = 0; i < this.nMips; i++) {\n this.renderTargetsHorizontal[i].setSize(resx, resy);\n this.renderTargetsVertical[i].setSize(resx, resy);\n\n this.separableBlurMaterials[i].uniforms[\n \"texSize\"\n ].value = new Vector2(resx, resy);\n\n resx = Math.round(resx / 2);\n resy = Math.round(resy / 2);\n }\n }\n update(target: any, bloomRadius: any, bloomStrength: any) {\n let inputRenderTarget = target;\n\n for (let i = 0; i < this.nMips; i++) {\n this.quad.material = this.separableBlurMaterials[i];\n\n this.separableBlurMaterials[i].uniforms[\"colorTexture\"].value =\n inputRenderTarget.texture;\n this.separableBlurMaterials[i].uniforms[\n \"direction\"\n ].value = new Vector2(1.0, 0.0);\n this.renderer.setRenderTarget(this.renderTargetsHorizontal[i]);\n this.renderer.clear();\n this.renderer.render(this.postScene, this.postCamera);\n this.renderer.setRenderTarget(null);\n\n this.separableBlurMaterials[i].uniforms[\n \"colorTexture\"\n ].value = this.renderTargetsHorizontal[i].texture;\n this.separableBlurMaterials[i].uniforms[\n \"direction\"\n ].value = new Vector2(0.0, 1.0);\n this.renderer.setRenderTarget(this.renderTargetsVertical[i]);\n this.renderer.clear();\n this.renderer.render(this.postScene, this.postCamera);\n this.renderer.setRenderTarget(null);\n\n inputRenderTarget = this.renderTargetsVertical[i];\n }\n\n this.quad.material = this.compositeMaterial;\n this.compositeMaterial.uniforms[\"bloomStrength\"].value = bloomStrength;\n this.compositeMaterial.uniforms[\"bloomRadius\"].value = bloomRadius;\n \n\n this.renderer.setRenderTarget(this.renderTargetsHorizontal[0]);\n this.renderer.clear();\n this.renderer.render(this.postScene, this.postCamera);\n this.renderer.setRenderTarget(null);\n }\n\n getSeperableBlurMaterial(kernelRadius: any) {\n return new ShaderMaterial({\n defines: {\n KERNEL_RADIUS: kernelRadius,\n SIGMA: kernelRadius\n },\n\n uniforms: {\n colorTexture: { value: null },\n texSize: { value: new Vector2(0.5, 0.5) },\n direction: { value: new Vector2(0.5, 0.5) }\n },\n\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n\n fragmentShader: `\n #include \n varying vec2 vUv;\n uniform sampler2D colorTexture;\n uniform vec2 texSize;\n uniform vec2 direction;\n \n float gaussianPdf(in float x, in float sigma) {\n return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\n }\n\n void main() {\n vec2 invSize = 1.0 / texSize;\n float fSigma = float(SIGMA);\n float weightSum = gaussianPdf(0.0, fSigma);\n vec3 diffuseSum = texture2D( colorTexture, vUv).rgb * weightSum;\n for( int i = 1; i < KERNEL_RADIUS; i ++ ) {\n float x = float(i);\n float w = gaussianPdf(x, fSigma);\n vec2 uvOffset = direction * invSize * x;\n vec3 sample1 = texture2D( colorTexture, vUv + uvOffset).rgb;\n vec3 sample2 = texture2D( colorTexture, vUv - uvOffset).rgb;\n diffuseSum += (sample1 + sample2) * w;\n weightSum += 2.0 * w;\n }\n gl_FragColor = vec4(diffuseSum/weightSum, 1.0);\n }`\n });\n }\n\n getCompositeMaterial(nMips: any) {\n return new ShaderMaterial({\n defines: {\n NUM_MIPS: nMips\n },\n\n uniforms: {\n blurTexture1: { value: null },\n blurTexture2: { value: null },\n blurTexture3: { value: null },\n blurTexture4: { value: null },\n blurTexture5: { value: null },\n dirtTexture: { value: null },\n bloomStrength: { value: 1.0 },\n bloomFactors: { value: null },\n \n bloomRadius: { value: 1.0 }\n },\n\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n\n fragmentShader: `\n varying vec2 vUv;\n uniform sampler2D blurTexture1;\n uniform sampler2D blurTexture2;\n uniform sampler2D blurTexture3;\n uniform sampler2D blurTexture4;\n uniform sampler2D blurTexture5;\n uniform sampler2D dirtTexture;\n uniform float bloomStrength;\n uniform float bloomRadius;\n uniform float bloomFactors[NUM_MIPS];\n \n \n void main() {\n gl_FragColor = bloomStrength * ( bloomFactors[0] * texture2D(blurTexture1, vUv) + \n bloomFactors[1] * texture2D(blurTexture2, vUv) + \n bloomFactors[2] * texture2D(blurTexture3, vUv) + \n bloomFactors[3] * texture2D(blurTexture4, vUv) + \n bloomFactors[4] * texture2D(blurTexture5, vUv) );\n }`\n });\n }\n}","import { WebGLMultisampleRenderTarget, WebGLRenderTarget } from 'three';\n\nexport default class sceneRenderPass {\n constructor(scene, camera, renderer) {\n this.capacity = renderer.capabilities.isWebGL2;\n //////////Render Target for original scene/////////////\n if (this.capacity) {\n this.renderTarget = new WebGLMultisampleRenderTarget(\n window.innerWidth,\n window.innerHeight\n );\n // this.renderTarget.antialias = true;\n this.renderTarget.samples = 32;\n }\n else {\n this.renderTarget = new WebGLRenderTarget(\n window.innerWidth,\n window.innerHeight\n );\n }\n\n this.scene = scene;\n this.renderer = renderer;\n this.camera = camera;\n this.sceneColor = this.scene.background;\n }\n\n dispose() {\n this.renderTarget.dispose();\n }\n\n resize(w, h) {\n this.renderTarget.setSize(w, h);\n }\n\n update(offlinePass, cam) {\n if (offlinePass) {\n this.renderer.setRenderTarget(this.renderTarget);\n this.renderer.render(this.scene, cam);\n this.renderer.setRenderTarget(null);\n }\n else {\n this.renderer.render(this.scene, cam);\n }\n }\n}","import { WebGLRenderTarget, ShaderMaterial } from 'three';\nimport { Shaders } from '../Shader.js';\n\nexport default class compositePass {\n constructor(scene, camera, renderer, quad) {\n let shaders = new Shaders();\n\n this.compositeTarget = new WebGLRenderTarget(\n window.innerWidth,\n window.innerHeight\n );\n let compositeUniforms = {\n tDiffuse: {\n value: null\n },\n em: {\n value: null\n }\n };\n this.compositeMat = new ShaderMaterial({\n uniforms: compositeUniforms,\n fragmentShader: shaders.bloomMix(),\n vertexShader: shaders.vertexShader()\n });\n\n this.postScene = scene;\n this.renderer = renderer;\n this.postCamera = camera;\n this.quad = quad;\n }\n dispose() {\n this.compositeTarget.dispose();\n }\n resize(w, h) {\n this.compositeTarget.setSize(w, h);\n }\n update(dofTexture, bloomTexture) {\n this.renderer.setRenderTarget(this.compositeTarget);\n this.quad.material = this.compositeMat;\n this.quad.material.uniforms.tDiffuse.value = dofTexture;\n this.quad.material.uniforms.em.value = bloomTexture;\n this.renderer.render(this.postScene, this.postCamera);\n this.renderer.setRenderTarget(null);\n }\n}","import { WebGLRenderTarget, ShaderMaterial } from 'three';\nimport { Shaders } from '../Shader.js'\n\nexport default class postEffectPass {\n constructor(scene, camera, postCamera, renderer, quad, vig = {}) {\n const shaders = new Shaders();\n const uniforms = {\n tDiffuse: { value: null },\n gNoise: { value: 0.0 },\n time: { value: 0.0 },\n vigOpacity: { value: vig.opacity || 0.125 },\n vigExtent: { value: vig.extent || 0.8 },\n vigIntensity: { value: vig.intensity || 20.0 }\n };\n\n this.vig = true;\n this.grain = true;\n this.posttarget =\n new WebGLRenderTarget(window.innerWidth, window.innerHeight);\n this.finalMat = new ShaderMaterial({\n uniforms: uniforms,\n fragmentShader: shaders.postShader(),\n vertexShader: shaders.vertexShader()\n });\n this.postScene = scene;\n this.renderer = renderer;\n this.postCamera = postCamera;\n this.camera = camera;\n this.quad = quad;\n this.timer = 0.0;\n }\n dispose() {\n this.posttarget.dispose();\n }\n resize(w, h) {\n this.posttarget.setSize(w, h);\n }\n update(renderTexture, noiseGrain) {\n this.renderer.setRenderTarget(this.posttarget);\n this.quad.material = this.finalMat;\n this.quad.material.uniforms.time.value = this.timer;\n this.quad.material.uniforms.gNoise.value = noiseGrain ? 0.0 : 1.0;\n this.timer += 0.1;\n this.quad.material.uniforms.tDiffuse.value = renderTexture;\n this.renderer.render(this.postScene, this.postCamera);\n this.renderer.setRenderTarget(null);\n }\n}","import React, { useState } from 'react';\nimport { Mesh, Scene, OrthographicCamera, PlaneBufferGeometry } from 'three';\nimport { useThree, useFrame } from '@react-three/fiber';\n\nimport glowmaskPass from '../effects/glowmaskPass';\nimport fxaaEffect from '../effects/fxaaEffect';\nimport bloomEffect from '../effects/bloomEffect';\nimport sceneRenderPass from '../effects/sceneRenderPass';\nimport compositePass from '../effects/compositePass';\nimport postEffectPass from '../effects/postEffects';\n\ntype EffectManagerProps = {\n // opacity, extent, intensity\n vig?: number[]\n}\n\nconst EffectManager: React.FC = props => {\n const { scene, camera, gl } = useThree();\n const [fx, setFx] = useState({} as any);\n\n if (!fx.postEffect) {\n const postScene = new Scene();\n //post processing orthogonal camera\n const postCamera = new OrthographicCamera(\n -1, // left\n 1, // right\n 1, // top\n -1, // bottom\n -1, // near\n 1 // far\n );\n const plane = new PlaneBufferGeometry(2, 2);\n //quad node\n const quad = new Mesh(plane, null as any);\n const vig = props.vig && {\n opacity: props.vig[0],\n extent: props.vig[1],\n intensity: props.vig[2]\n };\n\n //making quad fit the post camera\n quad.position.z = -1;\n //adding quad node to post processing scene\n postScene.add(quad);\n\n setFx({\n scenePass: new sceneRenderPass(scene, camera, gl),\n glowpass: new glowmaskPass(scene, camera, gl, 1.0),\n fxaa: new fxaaEffect(postScene, postCamera, gl, quad),\n bloom: new bloomEffect(postScene, postCamera, gl, quad),\n composite: new compositePass(postScene, postCamera, gl, quad),\n postEffect: new postEffectPass(postScene, camera, postCamera, gl, quad, vig)\n });\n }\n else {\n fx.glowpass.resize(window.innerWidth, window.innerHeight);\n fx.bloom.resize(window.innerWidth, window.innerHeight);\n fx.postEffect.resize(window.innerWidth, window.innerHeight);\n fx.composite.resize(window.innerWidth, window.innerHeight);\n }\n\n useFrame(() => {\n fx.scenePass.update(1, camera);\n fx.glowpass.update(camera);\n fx.bloom.update(fx.glowpass.glowTarget, 0.5, 0.5);\n fx.composite.update(fx.scenePass.renderTarget.texture, fx.bloom.renderTargetsHorizontal[0].texture)\n fx.postEffect.update(fx.composite.compositeTarget.texture, true)\n fx.fxaa.update(fx.postEffect.posttarget.texture);\n }, 1)\n\n return <>{props.children};\n};\n\nexport default EffectManager;","import React from 'react';\n\nexport default class ErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error) {\n // Update state so the next render will show the fallback UI.\n return { hasError: true };\n }\n\n componentDidCatch(error, errorInfo) {\n // You can also log the error to an error reporting service\n console.warn(error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n // You can render any custom fallback UI\n return <>;\n }\n\n return this.props.children;\n }\n}\n","import React, { Suspense } from 'react'\nimport { Color, MOUSE } from 'three'\nimport { Canvas } from '@react-three/fiber'\nimport { OrbitControls, PerspectiveCamera, Stats } from '@react-three/drei'\nimport { ResizeObserver } from '@juggle/resize-observer'\n\nimport { useLoggerStore } from './ui/Logger'\n\nimport { useViewerStore } from './Viewer'\nimport Loading from './Loading'\nimport Voxo, { useVoxoStore } from './Voxo'\nimport LightRig from './LightRig'\nimport { Environment } from './Environment'\nimport { Stars } from './Stars'\nimport EffectManager from './EffectManager'\nimport ErrorBoundary from './ErrorBoundary'\n\nimport { ASSET, mode } from '../constants'\n\nconst EnvironmentLight: React.FC = () => {\n const [voxoName, cube] = useViewerStore(state => [state.urlReq.voxoName, state.urlReq.extra_mint_cycle])\n const cubeActive = useVoxoStore(state => state.cubeActive)\n const showWhirlwind = cubeActive || voxoName === ASSET.CUBE\n\n return <>\n {/^true$/i.test(cube) && }\n \n \n}\n\nconst DomeLight = () => {\n const [dome_color, dome_intensity] = useViewerStore(state => [\n state.urlReq.dome_color,\n state.urlReq.dome_intensity\n ])\n\n return \n}\n\n// const UserLights = () => {\n// const _localState = JSON.parse(localStorage.getItem('vvUserLights') || '{}')\n// const userLights = useControls({\n// light0: _localState.light0 || false,\n// location0: { value: _localState.location0 || [0, 0, 0], render: get => get('light0') },\n// color0: { value: _localState.color0 || 'white', render: get => get('light0') },\n// intensity0: { value: _localState.intensity0 || 0, render: get => get('light0') },\n\n// light1: _localState.light1 || false,\n// location1: { value: _localState.location1 || [0, 0, 0], render: get => get('light1') },\n// color1: { value: _localState.color1 || 'white', render: get => get('light1') },\n// intensity1: { value: _localState.intensity1 || 0, render: get => get('light1') },\n\n// light2: _localState.light2 || false,\n// location2: { value: _localState.location2 || [0, 0, 0], render: get => get('light2') },\n// color2: { value: _localState.color2 || 'white', render: get => get('light2') },\n// intensity2: { value: _localState.intensity2 || 0, render: get => get('light2') }\n// })\n\n// useEffect(() => {\n// localStorage.setItem('vvUserLights', JSON.stringify(userLights))\n// }, [userLights])\n\n// return <>\n// \n// \n// \n// \n// }\n\nconst ThreeCanvas: React.FC = () => {\n const turntable = useVoxoStore(state => state.turntable)\n const cameraData = useViewerStore(state => state.cameraData)\n const setCameraControl = useViewerStore(state => state.setCameraControl)\n const setCameraDataLog = useLoggerStore(state => state.setCameraDataLog)\n const vig = useViewerStore(state => state.urlReq.vig)\n let camera: THREE.PerspectiveCamera\n let control: any\n\n console.log('🟢 ThreeJS loaded on', process.env.REACT_APP_mode || 'localhost')\n\n return (\n \n {\n if (_camera && (!camera || camera.uuid !== _camera.uuid)) { camera = _camera }\n }}\n />\n \n setCameraDataLog({\n camloc: camera.position.toArray(),\n camlookat: control !== null && control.target !== null ? control.target.toArray() : [0, 0, 0],\n fov: cameraData.fov\n })\n }\n onUpdate={self => {\n control = self\n setCameraControl(self)\n\n if (self.autoRotate !== turntable) {\n self.object.position.set(...cameraData.loc)\n self.target.set(...cameraData.lookat)\n }\n }}\n />\n \n {/* {process.env.REACT_APP_MODE !== 'production' && } */}\n }>\n {!mode.production && }\n \n \n \n \n \n \n \n )\n}\n\nexport default ThreeCanvas","import React, { useState } from 'react'\nimport styled from 'styled-components'\n\nimport { DevProps, specialNaming } from '../../constants'\nimport { toTitle } from '../../utils'\n\nexport type ToggleProps = DevProps & {\n asset?: any\n label?: string\n description?: string\n init: boolean\n on: string\n onTooltip?: string\n off?: string\n offTooltip?: string\n toggleOnHover?: boolean\n onToggle?: (isOn?: boolean) => void\n}\n\nconst Trigger = styled.div`\n display: grid;\n grid-gap: 10px;\n grid-auto-flow: column;\n grid-template-columns: min-content max-content;\n place-items: start;\n font-family: Raleway;\n font-size: 13px;\n color: #0e1c34;\n cursor: pointer;\n transition: opacity 0.2s ease-in;\n z-index: 99;\n outline: none;\n word-break: keep-all;\n user-select: none;\n`\nconst Icon = styled.img`\n padding-top: 2px;\n outline: none;\n user-select: none;\n`\nconst Rows = styled.div`\n display: grid;\n`\nconst Description = styled.span`\n font-size: 11px;\n padding: 0 5px;\n opacity: 0.7;\n`\nconst Toggle: React.FC = props => {\n const { asset, label, description, init, toggleOnHover, on, off, onToggle, testId } = props\n const [hover, toggleHover] = useState(false)\n const src = off ? (init ? on : off) : on\n const Label = () => {label}\n const ToggleText = () => {\n if (label) {\n if (description) {\n return \n \n {label}\n {\n specialNaming.reduce((acc, item) => acc.replace(item.test, item.replace), toTitle(description))\n }\n \n \n }\n return