{"version":3,"sources":["components/filehandling.js","components/urlhandling.js","components/shaders/lightfield_shader.js","components/shaders/quilt_shader.js","components/mirrors.js","components/models/Portrait.js","components/models/LKG_4k.js","components/models/LKG_8k.js","textures/cannon_1k.hdr","app.js","index.js"],"names":["QuiltToTexture","quilt","path","setQuilt","vid","undefined","console","log","type","JSON","stringify","includes","pause","THREE","load","invalidate","src","crossOrigin","loop","playsInline","play","video_texture","format","checkImage","url","setColumns","setRows","request","XMLHttpRequest","open","send","onload","status","regexClean","RegExp","regexTest","test","regexNums","exec","match","quilt_tex","repeat","set","QuiltfromURL","quilt_vertShader","quilt_fragShader","Mirror_Reflection","props","Reflector","resolution","args","width","height","mirror","mixStrength","mixBlur","rotation","Math","PI","Material","color","metalness","roughness","toneMapped","Glass_Reflection","opacity","transparent","Portrait","video","group","useRef","useGLTF","nodes","materials","quilt_material","flatShading","uniforms","isvid","value","quiltTexture","tilesX","columns","tilesY","rows","aspectScaler","aspect","quiltViewPortion","vertexShader","fragmentShader","useState","setPlay","next","setNext","previous","setPrevious","Display","Emmissive","emissiveIntensity","Mirrors","ref","dispose","reflections","position","scale","geometry","BasePlate","material","castShadow","receiveShadow","onPointerDown","e","onPointerUp","Mesh014","Mesh014_1","intensity","Mesh013","Mesh013_1","Mesh015","Mesh015_1","Buttons","buttons","display","Mesh010","Mesh010_1","LED","LED_Frame","Portrait_Body","preload","LookingGlass","fallback","frames","limit","xshift","yshift","Environment","files","HDRI","App","useCapture","duration","fps","bind","startRecording","setAspect","setXshift","setYshift","hologramURL","setHologramURL","SetReflections","mute","SetMute","document","createElement","setAttribute","muted","useEffect","queryString","window","location","search","urlParams","URLSearchParams","urlQuilt","get","className","mode","classname","dpr","camera","target","fov","gl","preserveDrawingBuffer","onCreated","shadows","shadowMap","shadowCameraNear","shadowCameraFar","OrbitControls","minPolarAngle","maxPolarAngle","enablePan","enableZoom","Stats","style","margin","maxwidth","paddingBottom","onClick","for","id","onChange","file","URL","revokeObjectURL","createObjectURL","name","LoadQuilt","item","valueAsNumber","history","replaceState","pathname","UpdateURL","href","render","querySelector"],"mappings":"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","file":"static/js/main.288d83ad.chunk.js","sourcesContent":["// this file handles file input and name parsing. Currently file types like quilts, lightfields, and rgb-d are handled separately while prototyping.\nimport * as THREE from 'three'\nimport { invalidate, useThree } from '@react-three/fiber'\n\nexport function LoadQuilt(file, setQuilt, setColumns, setRows, vid,gl) {\n URL.revokeObjectURL(file) //revoke URL for current element\n setQuilt(file)\n var path = \"\"\n if (file != undefined) {\n // get columns from file name\n path = URL.createObjectURL(file)\n const regexClean = RegExp(/qs[0-9]{1,2}x[0-9]{1,2}/)\n if (regexClean.test(file.name)) {\n const resultClean = regexClean.exec(file.name)\n const regexNums = resultClean[0].match(/\\d+/g)\n console.log(regexNums[0], 'columns')\n console.log(regexNums[1], 'rows')\n setColumns(regexNums[0])\n setRows(regexNums[1])\n console.log(\"your quilt is properly named!🎉\")\n QuiltToTexture(file, path, setQuilt, vid,gl)\n }\n else {\n console.log(\"your quilt is named improperly.😭\")\n QuiltToTexture(file, path,setQuilt, vid,gl) // load the file even though the name is wrong\n }\n } else {\n console.log('quilt is undefined or lacks proper name, setting parameters to 8 columns & 6 rows')\n setColumns(8)\n setRows(6)\n }\n}\n\n// Convert Quilt into image or video texture depending on file input type. \n\n// Scratch Pad: \n// This function needs to have a file input. \n// it then parses the file extension to determine if it's an image or video, and sets the appropriate function.\n// it needs to return the path to the texture or the texture itself, which is not currently handled in application state. \n// should it just return the entire shader? If this occurs then it also needs to be setup on application start to load the default quilt. \n\nfunction QuiltToTexture(quilt, path, setQuilt, vid) {\n if (quilt != undefined) {\n console.log(quilt)\n const type = JSON.stringify(quilt.type)\n if (type.includes('image')) {\n vid.pause()\n const tex = new THREE.TextureLoader().load(path)\n setQuilt(tex)\n invalidate()\n }else if (type.includes('video')) {\n vid.src = path\n vid.crossOrigin = 'Anonymous'\n vid.loop = true\n vid.playsInline = true\n // vid.autoplay = true\n vid.play()\n const video_texture = new THREE.VideoTexture(vid)\n video_texture.format = THREE.RGBAFormat\n setQuilt(video_texture)\n invalidate()\n }\n } else {\n path = '/j_smf_lightfield_qs5x9a0.75.webp'\n setQuilt(new THREE.TextureLoader().load(path))\n invalidate()\n }\n}\n\n// WIP lightfield file parsing from mp4, it's a bit slow currently, can be sped up. Needs cleanup.\n\nconst camsX = 44\nconst camsY = 1\nconst resX = 3008\nconst resY = 1688\nvar fieldTexture\n\nexport function LoadLightfieldVideo(file, SetLightfieldFile, SetFieldTexture) {\n ExtractVideo(file, SetFieldTexture)\n}\n\nexport async function ExtractVideo(file, SetFieldTexture) {\n // based on https://stackoverflow.com/questions/32699721/javascript-extract-video-frames-reliably\n const video = document.createElement('video')\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n var path = ''\n canvas.width = resX\n canvas.height = resY\n canvas.setAttribute('id', 'videosrc')\n path = URL.createObjectURL(file)\n video.src = path\n let seekResolve\n let count = 0\n let offset = 0\n const allBuffer = new Uint8Array(resX * resY * 4 * camsX * camsY)\n\n console.log('starting extraction')\n\n const getBufferFromVideo = () => {\n ctx.drawImage(video, 0, 0, resX, resY)\n const imgData = ctx.getImageData(0, 0, resX, resY)\n allBuffer.set(imgData.data, offset)\n offset += imgData.data.byteLength\n count++\n }\n\n const fetchFrames = async () => {\n let currentTime = 0\n\n while (count < camsX * camsY) {\n getBufferFromVideo()\n currentTime += 0.0333\n video.currentTime = currentTime\n await new Promise((res) => (seekResolve = res))\n }\n\n var fieldTexture2 = new THREE.DataTexture2DArray(allBuffer, resX, resY, camsX * camsY)\n console.log('Loaded field data')\n SetFieldTexture(fieldTexture2)\n }\n\n video.addEventListener('seeked', async function () {\n if (seekResolve) seekResolve()\n })\n\n video.addEventListener('loadeddata', async () => {\n await fetchFrames()\n console.log('loaded data')\n })\n}\n","import * as THREE from 'three'\n\nexport function checkImage(url, setQuilt, setColumns, setRows, vid) {\n var request = new XMLHttpRequest()\n request.open('GET', url, true)\n request.send()\n request.onload = function () {\n if (request.status == 200 && url != undefined) {\n console.log('image exists 💃')\n QuiltfromURL(url, setQuilt, setColumns, setRows, vid)\n } else {\n console.log(\"image doesn't exist in URL\")\n }\n }\n}\n\nfunction QuiltfromURL(url, setQuilt, setColumns, setRows, vid) {\n if (url != undefined) {\n // get columns from file name\n console.log(url, 'quilt name')\n var regexClean = RegExp(/qs[0-9]{1,2}x[0-9]{1,2}/)\n let regexTest = regexClean.test(url)\n console.log(regexTest)\n let resultClean = regexTest ? regexClean.exec(url) : regexClean.exec('banana_qs8x6') //if regex is valid use url params, if not default to 8x6\n var regexNums = resultClean[0].match(/\\d+/g)\n console.log(regexNums[0], 'columns')\n console.log(regexNums[1], 'rows')\n setColumns(regexNums[0])\n setRows(regexNums[1])\n QuiltToTexture(url, setQuilt, vid)\n } else {\n console.log('url is undefined or lacks proper name, setting parameters to 8 columns & 6 rows')\n setColumns(8)\n setRows(6)\n }\n}\n\nfunction QuiltToTexture(url, setQuilt, vid) {\n if (url != undefined) {\n console.log(url, 'quilt is defined')\n var quilt_tex = new THREE.TextureLoader().load(url)\n setQuilt(quilt_tex)\n quilt_tex.repeat.set = new THREE.Vector2(0, 0)\n } else {\n // path = '/j_smf_lightfield_qs5x9a0.75.webp'\n // quilt_tex = new THREE.TextureLoader().load(path)\n // quilt_tex.repeat.set = new THREE.Vector2(0,0)\n }\n}\n","// Borrowed from: https://github.com/hypothete/lightfield-webgl2\n\nexport var lightfield_fragShader = `\nprecision highp float;\nprecision highp int;\nprecision highp sampler2DArray;\n\nuniform sampler2DArray field;\nuniform vec2 camArraySize;\nuniform float aperture;\nuniform float focus;\n\nin vec2 vSt;\nin vec2 vUv;\n\nvoid main() {\n vec4 color = vec4(0.0);\n float colorCount = 0.0; // proportional exposure\n\n // if (vUv.x < 0.0 || vUv.x > 1.0 || vUv.y < 0.0 || vUv.y > 1.0) {\n // discard;\n // }\n\n for (float i = 0.0; i < camArraySize.x; i++) {\n for (float j = 0.0; j < camArraySize.y; j++) {\n float dx = i - (vSt.x * camArraySize.x - 0.5);\n float dy = j - (vSt.y * camArraySize.y - 0.5);\n float sqDist = dx * dx + dy * dy;\n if (sqDist < aperture) {\n float camOff = i + camArraySize.x * j;\n vec2 focOff = vec2(dx, dy) * focus;\n color += texture(field, vec3(vUv + focOff, camOff));\n colorCount++;\n }\n }\n }\n\n gl_FragColor = vec4(color.rgb / colorCount, 1.0);\n}`\n\nexport var lightfield_vertShader = `\nout vec2 vSt;\nout vec2 vUv;\n\nvoid main() {\n // note that position is referring to each vertex's clip space\n vec3 posToCam = cameraPosition - position;\n vec3 nDir = normalize(posToCam);\n // given similar triangles we can project the focusing plane point\n float zRatio = posToCam.z / nDir.z;\n vec3 uvPoint = zRatio * nDir;\n // offset the uv into 0-1.0 coords\n vUv = uvPoint.xy + 0.5;\n vUv.x = 1.0 - vUv.x; // why is this necessary?\n vSt = uv;\n vSt.x = 1.0 - vSt.x;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}\n`\n","// shader\nexport var quilt_vertShader = `\n varying vec2 vUv; \n varying vec3 vNormal;\n varying vec4 vPos; \n void main() {\n vUv = uv;\n // vUv.y = 1.0 - vUv.y; // why???\n // normal info\n // https://discourse.threejs.org/t/basic-custom-shader-camera/10065\n // not correct, we want to get the normalRay relative to the device.\n vNormal = (modelViewMatrix * vec4(normal, 0.025)).xyz;\n vNormal = normalize(vec3(vNormal.x, 0, vNormal.z));\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n vPos = gl_Position;\n }`\n\nexport var quilt_fragShader = `\n uniform sampler2D quiltTexture;\n uniform float tilesX;\n uniform float tilesY;\n uniform vec2 aspectScaler;\n uniform vec2 quiltViewPortion;\n uniform bool isvid;\n varying vec2 vUv;\n varying vec3 vNormal;\n varying vec4 vPos; \n vec2 texArr(vec3 uvz) {\n // float z = floor(uvz.z * tilesX * tilesY);\n float z = uvz.z;\n float x = (mod(z, tilesX) + uvz.x) / tilesX;\n float y = (floor(z / tilesX) + uvz.y) / tilesY;\n return vec2(x, y) * quiltViewPortion;\n }\n float remap(float value, float from1, float to1, float from2, float to2) {\n return (value - from1) / (to1 - from1) * (to2 - from2) + from2;\n }\n void main() {\n vec3 nuv = vec3(vUv.xy, 0.0);\n nuv.xy *= aspectScaler; // aspect ratio adjustment\n \n //discard pixels outside vUV\n if (nuv.x < 0.0 || nuv.x > 1.0 || nuv.y < 0.0 || nuv.y > 1.0) {\n discard;\n }\n nuv.z = -vNormal.x * 1.6; // now -1 to 1 is like the viewcone\n float fade = nuv.z; // how far off center it is determines fade\n nuv.z = nuv.z * .5 + .5; // 0-1\n nuv.z = clamp(nuv.z, 0.0, 1.0);\n // nuv.z = mod(nuv.z + 4.0, 1.0); // ok really between 0-1 now\n // gl_FragColor = vec4(nuv.z, g, 0.0, 1.0);\n \n // get some samples\n float tiles = tilesX * tilesY;\n nuv.z *= tiles;\n nuv.x += (vPos.x/tilesX)* 0.0000001;\n vec3 uv_1 = nuv;\n uv_1.z = floor(uv_1.z);\n uv_1.z = clamp(uv_1.z, 0.0, tiles - 1.0);\n vec3 uv_2 = nuv;\n uv_2.z = ceil(uv_2.z);\n uv_2.z = clamp(uv_2.z, 0.0, tiles - 1.0);\n float lerp = clamp(mod(nuv.z + 2.0, 1.0), 0.0, 1.0);\n vec4 col1 = texture2D(quiltTexture, texArr(uv_1)); \n vec4 col2 = texture2D(quiltTexture, texArr(uv_2)); \n col1 = mix(col1, col2, lerp);\n vec4 privacy = vec4(0.0,0.0,0.0,1.0);\n if (abs(fade) > 1.0) {\n vec3 edgeUv = nuv;\n edgeUv.z = tiles - 1.0;\n if (fade > 0.0) {\n edgeUv.z = 0.0;\n }\n vec4 col3 = texture2D(quiltTexture, texArr(edgeUv)); \n float fadeLerp = clamp((abs(fade) - 1.0) * 2.3, 0.0, 1.0);\n vec4 privacylerp = mix(col3, privacy, 0.95);\n col1 = mix(col1, privacylerp, abs(fadeLerp));\n }\n if (isvid) {\n gl_FragColor = col1;\n }\n else {\n gl_FragColor = linearToOutputTexel( col1 );\n } \n }`","import { Reflector } from '@react-three/drei'\n\nexport function Mirror_Reflection(props) {\n return (\n
🧪Experimental: This project is still under active development!