<div class="load">
<img class="load" width="100px" height="100px" src="/content/0b632e2759a669b034e33e9217a917c787d65b728dd3e0761081380924c0bbbdi0" />
</div>
<div id="root"></div>
<head>
<style>
html,
body,
#root {
margin: 0;
width: 100%;
height: 100%;
overflow: hidden;
background-color: black;
}
.load {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
</style>
<script type="module">
//BLOB
await import(
'/content/0b7ba5105ad7e8d47f32530e937a315667578c87827876cec754bbd970793547i0'
).then((o_o) =>
o_o
.ordEngine({
r3f: true,
CameraControls: true,
environment: true,
statery: true,
sceneComposer: true,
drei2: true,
drei3: true,
pane: true,
postprocessing: true,
vfx: true,
})
.then(() => {
document.querySelector('.load').style.display = 'none';
})
);
const tunnelStore = makeStore({
active: false
});
const useDracoGLTF = (url) => {
const [gltf, setGltf] = useState(null);
useEffect(() => {
const useDracoGLTF = async () => {
try {
const codeUrl =
'/content/00ae91a4f7f4f6fa98c1deb0f57359079f7b5299094378ff15fa1c7f4366db3ci0';
const response = await fetch(codeUrl);
const code = await response.text();
let modifiedCode = code.replace(
'THREE.DRACOLoader=t',
'window.DRACOLoader=t'
);
let modifiedCode2 = modifiedCode.replace(
'/content/',
window.location.origin + '/content/'
);
const blob = new Blob([modifiedCode2], {
type: 'application/javascript',
});
const blobUrl = URL.createObjectURL(blob);
const script = document.createElement('script');
script.type = 'module';
script.src = blobUrl;
script.onload = () => {
const loader = new PAC2.GLTFLoader();
const draco = new window.DRACOLoader();
loader.setDRACOLoader(draco);
loader.load(
url,
(gltf) => {
setGltf(gltf);
},
undefined,
(error) => {
console.error('Error loading GLTF:', error);
setError(error);
}
);
};
document.head.appendChild(script);
} catch (error) {
console.error('Error fetching or processing code:', error);
}
};
useDracoGLTF();
}, [url]);
return gltf;
};
window.useDracoGLTF = useDracoGLTF;
const Book = (props) => {
// load file
const gltf = useDracoGLTF(
'/content/f07c9f52c8337edbb60ae4345150a48e287f17006a651300ad18306a2e86868ci0'
);
useFrame(({
clock
}) => {
if (gltf && gltf.scene) {
gltf.scene.position.y += Math.sin(clock.elapsedTime) * 0.01;
gltf.scene.position.z += Math.cos(clock.elapsedTime) * 0.0003;
gltf.scene.position.x += Math.sin(clock.elapsedTime * 1.4) * 0.006;
gltf.scene.rotation.y += Math.sin(clock.elapsedTime) * 0.002;
gltf.scene.rotation.z += Math.cos(clock.elapsedTime) * 0.0012;
gltf.scene.rotation.x += Math.sin(clock.elapsedTime * 1.4) * 0.002;
}
});
// display placeholder until ready
if (!gltf) {
return null;
} else {
return html` <group
rotation=${props.rotation}
position=${props.position}
scale=${props.scale}
>
<primitive scale="100" object=${gltf.scene} />
</group>`;
}
};
const meta = {
Name: 'Epic',
Spike: 1,
attributes: {
'Blob Buddies': 2,
Blob: 'organic',
Skin: 'graph',
Realm: 'physical',
Wireframe: 'blob',
},
};
let audioUrl =
'/content/3a533772ec8d8cb0e5a3788d39952796d5d52b1d2a3a909d66432e26046e8174i0';
const {
BlobBuddy,
Eyes,
vertex,
fragment,
realms
} = await import(
'/content/c9fe50a7c2938430caf594200d8e3cb2463b6ca9cd83f74f6aa303fabcd7b3b1i0'
);
const {
Color
} = THREE;
window.sceneStarted = true;
const buddies = meta.attributes['Blob Buddies'];
const eyes = meta.attributes['Realm'];
const vert = meta.attributes['Blob'];
const frag = meta.attributes['Skin'];
let wireframe = false;
if (meta.attributes['Wireframe']) {
wireframe = true;
}
const color = fragment[frag];
const shape = vertex[vert];
document.body.style.background = 'none';
const hoverEvents = {
onPointerEnter: () => {
document.body.style.cursor = 'pointer';
},
onPointerLeave: () => {
document.body.style.cursor = 'auto';
},
onClick: async () => {
play();
document.body.style.transition = 'none';
document.body.style.opacity = '1';
},
};
const scene1 = {
enabled: true,
minDistance: 2.220446049250313e-16,
maxDistance: 1.7976931348623157e308,
minZoom: 0.01,
maxZoom: 1.7976931348623157e308,
minPolarAngle: 1.5707963268,
maxPolarAngle: 1.5707963268,
minAzimuthAngle: -1.7976931348623157e308,
maxAzimuthAngle: 1.7976931348623157e308,
smoothTime: 0.9,
draggingSmoothTime: 0.125,
dollySpeed: 0,
truckSpeed: 2,
dollyToCursor: false,
verticalDragToForward: false,
target: [0, 0, 0],
position: [0, 0.4654114749945175, 30000],
zoom: 2,
focalOffset: [0, 0, 0],
target0: [0, 0, 0],
position0: [0, 0.3, 35],
zoom0: 2,
focalOffset0: [0, 0, 0],
};
const start = {
enabled: true,
minDistance: 2.220446049250313e-16,
maxDistance: 1.7976931348623157e308,
minZoom: 0.01,
maxZoom: 1.7976931348623157e308,
minPolarAngle: 0,
maxPolarAngle: 3.141592653589793,
minAzimuthAngle: -1.7976931348623157e308,
maxAzimuthAngle: 1.7976931348623157e308,
smoothTime: 0.25,
draggingSmoothTime: 0.125,
dollySpeed: 1,
truckSpeed: 2,
dollyToCursor: false,
verticalDragToForward: false,
target: [0, 0, 0],
position: [0, 194.393179687732, 157.19825600461715],
zoom: 2,
focalOffset: [0, 0, 0],
target0: [0, 0, 0],
position0: [0, 0.3, 35],
zoom0: 2,
focalOffset0: [0, 0, 0],
};
const scene2 = {
enabled: true,
minDistance: 2.220446049250313e-16,
maxDistance: 1.7976931348623157e308,
minZoom: 0.05,
maxZoom: 0.05,
minPolarAngle: 0,
maxPolarAngle: 3.141592653589793,
minAzimuthAngle: -1.7976931348623157e308,
maxAzimuthAngle: 1.7976931348623157e308,
smoothTime: 0.25,
draggingSmoothTime: 0.125,
dollySpeed: 1,
truckSpeed: 2,
dollyToCursor: false,
verticalDragToForward: false,
target: [0, 0, 0],
position: [0, 0.4654114749914877, 39999.99999999999],
zoom: 0.04999999999999998,
focalOffset: [0, 0, 0],
target0: [0, 0, 0],
position0: [0, 0.3, 35],
zoom0: 2,
focalOffset0: [0, 0, 0],
};
const scene3 = {
enabled: true,
minDistance: 2.220446049250313e-16,
maxDistance: 1.7976931348623157e308,
minZoom: 0.05,
maxZoom: 0.05,
minPolarAngle: 0,
maxPolarAngle: 3.141592653589793,
minAzimuthAngle: -1.7976931348623157e308,
maxAzimuthAngle: 1.7976931348623157e308,
smoothTime: 0.75,
draggingSmoothTime: 0.125,
dollySpeed: 1,
truckSpeed: 2,
dollyToCursor: false,
verticalDragToForward: false,
target: [0, 0, 0],
position: [-63.70611665947312, 0.4654114749914877, -39999.94926910157],
zoom: 0.05,
focalOffset: [0, 0, 0],
target0: [0, 0, 0],
position0: [0, 0.3, 35],
zoom0: 2,
focalOffset0: [0, 0, 0],
};
const scene4 = {
enabled: true,
minDistance: 2.220446049250313e-16,
maxDistance: 1.7976931348623157e308,
minZoom: 0.01,
maxZoom: 1.7976931348623157e308,
minPolarAngle: 0,
maxPolarAngle: 3.141592653589793,
minAzimuthAngle: -1.7976931348623157e308,
maxAzimuthAngle: 1.7976931348623157e308,
smoothTime: 0.2,
draggingSmoothTime: 0.125,
dollySpeed: 1,
truckSpeed: 2,
dollyToCursor: false,
verticalDragToForward: false,
target: [0, 0, -508800],
position: [0, 0.4552934294705598, -479452.20000353165],
zoom: 2,
focalOffset: [0, 0, 0],
target0: [0, 0, 0],
position0: [0, 0.3, 35],
zoom0: 2,
focalOffset0: [0, 0, 0],
};
const scene6 = {
enabled: true,
minDistance: 2.220446049250313e-16,
maxDistance: 1.7976931348623157e308,
minZoom: 0.01,
maxZoom: 1.7976931348623157e308,
minPolarAngle: 1.37,
maxPolarAngle: 1.37,
minAzimuthAngle: -1.7976931348623157e308,
maxAzimuthAngle: 1.7976931348623157e308,
smoothTime: 0.25,
draggingSmoothTime: 0.125,
dollySpeed: 1,
truckSpeed: 2,
dollyToCursor: false,
verticalDragToForward: false,
target: [0, 0, -2159600],
position: [-3744.0325772282144, -855.2926176106155, -2130504.569784263],
zoom: 2,
focalOffset: [0, 0, 0],
target0: [0, 0, 0],
position0: [0, 0.3, 35],
zoom0: 2,
focalOffset0: [0, 0, 0],
};
const Blobby = ({
wireframe,
shape,
color
}) => {
const meshRef = useRef();
useFrame(({
clock
}) => {
const time = clock.getElapsedTime();
meshRef.current.material.uniforms.time.value = time;
});
return html`<mesh renderOrder=${2} ref=${meshRef}>
<sphereGeometry args=${[1, 32, 32]} />
<shaderMaterial
side=${THREE.DoubleSide}
vertexShader=${shape}
fragmentShader=${color}
transparent=${true}
depthWrite=${true}
wireframe=${wireframe}
blending=${THREE.AdditiveBlending}
uniforms=${{
time: { value: 0 },
}}
/>
</mesh>`;
};
const Cam = () => {
const ref = useRef();
const {
active
} = useStore(tunnelStore);
useEffect(() => {
window.cam = ref.current;
window.cam.fromJSON(JSON.stringify(scene1));
}, []);
useFrame((state, dt) => {
const start = 0;
const end = -2700000;
const dur = 55;
const delay = 30;
if (active) {
const distancePerSecond = (end - start) / dur;
window.blobRef.current.position.z += distancePerSecond * dt;
}
if (window.cam && blobRef.current) {
window.cam.moveTo(
blobRef.current.position.x,
blobRef.current.position.y,
blobRef.current.position.z,
true
);
window.cam.setTarget(
blobRef.current.position.x,
blobRef.current.position.y,
blobRef.current.position.z,
true
);
}
});
return html` <${CameraControls}
rotation=${[0, Math.PI, 0]}
ref=${ref}
/>`;
};
const Bloberson = ({
scale,
position
}) => {
const ref = useRef();
useFrame(() => {
if (window.avg) {
ref.current.scale.x = 1 + window.avg * 0.01;
ref.current.scale.y = 1 + window.avg * 0.01;
ref.current.scale.z = 1 + window.avg * 0.01;
}
});
return html` <group scale=${scale}>
<group ref=${ref} position=${position}>
${buddies > 0 &&
Array.from({ length: buddies }).map(
() =>
html` < $ {
BlobBuddy
}
color = $ {
color
}
shape = $ {
shape
}
wireframe = $ {
wireframe
}
/>`
)
}
$ {
meta.attributes &&
html`
<${Blobby} color=${color} shape=${shape} wireframe=${wireframe} />
`
} <
$ {
Eyes
}
position = $ {
[0.32, 0.27, 1.2]
}
colors = $ {
realms[eyes]
}
/> <
/group> <
/group>`;
};
const tunnelShaders = {
frag: {
neon: `
uniform vec3 color;
uniform float time;
varying vec2 vUv;
void main() {
// Coordinate transformations for more interesting patterns
vec2 pos = vUv * 6.0 - 3.0; // Scale and translate UVs
float len = length(pos); // Distance from center
// Base color modulation with time and space
vec3 dynamicColor = 0.5 + 0.5 * cos(time + len * 12.0 + vec3(0.0, 2.0, 4.0));
// Swirling patterns
float angle = atan(pos.y, pos.x) + time;
float swirl = sin(angle * 8.0) * cos(angle * 8.0);
// Combining multiple color channels
vec3 colorChannels;
colorChannels.r = 0.5 + 0.5 * sin(time * 1.2 + swirl);
colorChannels.g = 0.5 + 0.5 * sin(time * 0.7 + swirl + 2.0);
colorChannels.b = 0.5 + 0.5 * sin(time * 1.5 + swirl + 4.0);
// Final color mixing
vec3 finalColor = mix(dynamicColor, colorChannels, 0.6 + 0.4 * sin(time * 0.5));
// Flickering effect
float flicker = 0.5 + 0.5 * sin(time * 10.0 + len * 20.0);
finalColor *= flicker;
gl_FragColor = vec4(finalColor, 1.0);
}
`,
lsd: `
uniform float time;
varying vec2 vUv;
// Function to generate a smooth random gradient
float hash(float n) {
return fract(sin(n) * 43758.5453);
}
// Function to create swirling patterns
float swirl(float x, float y, float time) {
float dx = sin(time * 2.0 + x * 10.0);
float dy = cos(time * 2.0 + y * 10.0);
return sin(sqrt(dx*dx + dy*dy) * 10.0);
}
void main() {
// Base dynamic pattern
float dynamic = swirl(vUv.x, vUv.y, time);
// Color modulation to create a psychedelic effect
vec3 color1 = vec3(sin(time + vUv.y * 5.0), cos(time + vUv.x * 5.0), sin(time + vUv.x * vUv.y));
vec3 color2 = vec3(sin(time * 2.0 + vUv.x * 20.0), cos(time * 2.0 + vUv.y * 18.0), sin(time * 1.5 + vUv.x * vUv.y * 15.0));
// Combine two color layers based on dynamic patterns
vec3 mixedColor = mix(color1, color2, (sin(time * 3.0 + dynamic * 20.0) + 1.0) / 2.0);
// Intensity modulation to enhance the psychedelic effect
float intensity = 0.5 + 0.5 * sin(time * 5.0 + dynamic * 25.0);
// Final color output with swirling and flickering
gl_FragColor = vec4(mixedColor * intensity, 1.0);
}`,
slots: `
uniform vec3 color;
uniform float time;
varying vec2 vUv;
void main() {
// Base dynamic color modulation
vec3 dynamicColor = vec3(sin(time + vUv.x * 6.28), cos(time + vUv.y * 6.28), sin(time + vUv.x * 6.28 + vUv.y * 6.28));
// Swirling pattern
float swirlFactor = sin(time * 3.0 + length(vUv * 40.0)) * 0.5 + 0.5;
vec3 swirlColor = mix(vec3(0.1, 0.2, 0.5), vec3(1.0, 0.0, 0.5), swirlFactor);
// Neurons fireworks effect
float fireworkIntensity = pow(sin(vUv.x * 20.0 + time) * cos(vUv.y * 20.0 + time), 12.0);
vec3 fireworkColor = vec3(1.0, 0.8, 0.2) * fireworkIntensity;
// Combine all effects
vec3 combinedColor = dynamicColor * swirlColor + fireworkColor;
// Final color modulation to enhance visibility and contrast
float finalModulation = 0.5 + 0.5 * sin(time * 2.0 + vUv.x * 40.0);
vec3 finalColor = combinedColor * finalModulation;
gl_FragColor = vec4(finalColor, 1.0);
}
`,
},
vert: {
eegwave: `
vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}
float noise(vec3 p){
vec3 a = floor(p);
vec3 d = p - a;
d = d * d * (3.0 - 2.0 * d);
vec4 b = a.xyxy + vec4(0.0, 1.0, 0.0, 1.0);
vec4 k1 = permute(b.xyxy + vec4(0.0, b.z, 1.0, b.w));
vec4 k2 = permute(k1.xyxy + vec4(b.z, b.z, b.w, b.w));
vec4 c = k2 + a.zzzz;
vec4 k3 = permute(c);
vec4 k4 = permute(c + 1.0);
vec4 o1 = fract(k3 * (1.0 / 41.0));
vec4 o2 = fract(k4 * (1.0 / 41.0));
vec4 o3 = o2 * d.z + o1 * (1.0 - d.z);
vec2 b1 = mix(o3.xy, o3.zw, d.y);
return mix(b1.x, b1.y, d.x);
}
uniform float time;
uniform float channelOffset;
varying vec2 vUv;
void main() {
vUv = uv;
vec3 pos = position;
float noiseScale = 0.3;
float waveHeight = 8.0;
float wave = noise(vec3(pos.x * noiseScale, pos.y * noiseScale, time + channelOffset)) * waveHeight;
pos.y += wave;
gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
}`,
},
};
const EEGWavePlane = ({
color = new THREE.Color(0x00ff00),
position,
frag,
vert,
segments = 30,
}) => {
const groupRef = useRef();
const channels = 25;
const channelDepth = 20;
useFrame(({
clock
}) => {
groupRef.current.children.forEach((mesh, index) => {
mesh.material.uniforms.time.value = clock.getElapsedTime();
});
});
return html`<group position=${position} ref=${groupRef}>
${Array.from(
{ length: channels },
(_, index) =>
html` < mesh key = $ {
index
}
position = $ {
[0, 0, index * channelDepth]
} >
<
torusGeometry args = $ {
[15, 2, 5, segments]
}
/> <
shaderMaterial
uniforms = $ {
{
time: {
value: 0
},
color: {
value: color
},
channelOffset: {
value: (index * Math.PI) / 8
},
}
}
vertexShader = $ {
vert
}
fragmentShader = $ {
frag
}
transparent = $ {
true
}
depthWrite = $ {
true
}
wireframe = $ {
false
}
/> <
/mesh>`
)
} <
/group> `;
};
const Planet = ({
speed,
radius,
diameter,
color,
scale
}) => {
const ref = useRef();
useEffect(() => {
ref.current.rotation.y = Math.random() * Math.PI * 2;
}, []);
useFrame(() => {
ref.current.rotation.y += speed / 20;
});
return html` <group scale=${scale} ref=${ref}>
<group position=${[radius, 0, 0]}>
<${Bloberson} scale=${[4, 4, 4]} />
</group>
</group>`;
};
const SolarSystem = ({
scale
}) => {
return html` <group scale=${scale}>
<${Planet}
scale=${[1, 1, 1]}
radius=${45}
speed=${0.1}
diameter=${1}
color=${'purple'}
/>
<${Planet}
scale=${[1, 1, 1]}
radius=${55}
speed=${0.08}
diameter=${1}
color=${'purple'}
/>
<${Planet}
scale=${[1, 1, 1]}
radius=${65}
speed=${0.04}
diameter=${1}
color=${'purple'}
/>
<${Planet}
scale=${[1, 1, 1]}
radius=${120}
speed=${0.03}
diameter=${1}
color=${'purple'}
/>
</group>`;
};
const Postprocessing = () => {
const ref = useRef();
const brightnessContrast = useRef();
const bloom1 = useRef();
const bloom2 = useRef();
return html`
<${POST.EffectComposer} ref=${ref} multisampling=${8}>
<!-- <${POST.SMAA} />-->
<${POST.BrightnessContrast}
ref=${brightnessContrast}
contrast="0.0"
/>
<${POST.Bloom}
kernelSize="4"
ref=${bloom1}
intensity="0.5"
luminanceThreshold="0.0"
width="512"
height="512"
/>
<${POST.Bloom}
ref=${bloom2}
mipmapBlur
intensity="1.2"
luminanceThreshold="0.5"
width="512"
height="512"
/>
<//>
`;
};
const TvScreen = (props) => {
const eegData = [
-5733.17774929735, -5483.55346722048, -5719.40907471288,
-5535.29775563452, -5670.65992005586, -5568.11011649491,
-5620.81552992052, -5594.14989878534, -5571.10525025192,
-5643.86017845394, -5532.9061189778, -5686.68612083031,
-5495.44459527071, -5723.74531313721, -5460.28530124251,
-5750.52270299467, -5447.54480690298, -5771.66745324939,
-5433.7314288296, -5774.14849688393, -5435.56427187494,
-5773.38853757245, -5447.88008306981, -5761.85503743351,
-5459.92767333122, -5742.76664766868, -5490.41545276826,
-5702.80172858259, -5527.83227298645, -5661.67451878482,
-5565.45025890473, -5614.28882053957, -5607.6727041808,
-5567.46191590571, -5635.27710858311, -5519.67388626026,
-5684.96503650725, -5471.21530428115, -5703.87461231644,
-5437.77709457601, -5738.05042958861, -5412.92195474171,
-5749.96390938329, -5406.28348663849, -5745.8064849146,
-5401.34375111386, -5742.76664766868, -5423.71784731363,
-5724.12529279295, -5437.285356198, -5688.11663247545,
-5484.53694397652, -5665.94370197579, -5520.03151417154,
-5619.58618397548, -5558.87884603487, -5578.19075324425,
-5619.74264618667, -5525.77591249656, -5660.57928330651,
-5496.40572028228, -5699.56072563657, -5464.39802222228,
-5734.09417082002, -5433.75378057406, -5760.60333974401,
-5419.58277458939, -5763.19614210083, -5415.51475709853,
-5764.04550839013, -5416.90056525476, -5750.56740648358,
-5434.15611197425, -5722.71713289227, -5463.70511814417,
-5703.47228091625, -5498.9985226391, -5658.4335158388,
-5544.21610167219, -5608.5220704701, -5581.49881142364,
-5555.07904947747, -5627.20812883474, -5506.01697039807,
-5671.0398997116, -5480.96066486367, -5715.16224326637,
-5446.56133014695, -5748.51104599369, -5420.70036181216,
-5748.28752854914, -5404.29418138196, -5772.71798523879,
-5401.99195170307, -5759.9104356659, -5415.42535012071,
-5749.33806053854, -5440.99574577758, -5722.78418812563,
-5466.02969956752, -5679.17593469333, -5512.67779024575,
-5636.77467546161, -5551.56982559798, -5593.50169819614,
-5595.06632030801, -5544.5066743501, -5645.35774533245,
-5507.02279889855, -5685.47912662973, -5467.50491470157,
-5720.52666193565, -5435.09488524138, -5743.88423489144,
-5416.69939955466, -5763.55377001211, -5409.79271051797,
-5764.98428165725, -5416.8782135103, -5754.94834839682,
-5429.17167296072, -5736.64226968792, -5459.97237682013,
-5706.71328386227, -5477.65260668428, -5667.4859723432,
-5520.41149382728, -5627.18577709029, -5570.65821536281,
-5585.36566321441, -5620.63671596488, -5540.17043592578,
-5651.21390237974, -5507.87216518786, -5697.48201340223,
-5468.01900482404, -5731.03198182964, -5434.26787069653,
-5753.24961581822, -5420.61095483434, -5766.54890376912,
-5407.6245913058, -5769.32052008158, -5422.35439090185,
-5755.64125247494, -5441.77805683351, -5732.77541789716,
-5463.66041465526, -5699.0466355141, -5506.1510808648,
-5663.52971357461, -5547.34534589593, -5613.90884088383,
-5575.0168055316, -5569.42886941777, -5645.7824284771,
-5541.06450570399, -5688.58601910901, -5497.21038308267,
-5713.10588277649, -5466.61084492336, -5747.88519714894,
-5440.21343472164, -5760.93861591084, -5425.14835895876,
-5770.08047939306, -5425.7295043146, -5757.608205987, -5430.87040553932,
-5743.45955174679, -5460.37470822033, -5719.36437122397,
-5479.70896717417, -5685.07679522953, -5517.1034356479,
-5657.67355652732, -5573.85451481992, -5621.50843399864,
-5613.7747304171, -5582.52699166858, -5648.62110002292,
-5536.79532251302, -5685.52383011864, -5506.66517098727,
-5715.45281594429, -5484.15696432078, -5748.33223203805,
-5464.15215303328, -5755.86476991949, -5418.59929783336,
-5755.93182515285, -5451.34460346038, -5765.31955782408,
-5469.42716472473, -5748.53339773815, -5478.83724914041,
-5713.19528975431, -5505.72639772015, -5682.841620784,
-5526.04413343002, -5644.39662032087, -5569.25005546213,
-5595.89333485286, -5592.78644237357, -5556.08487797795,
-5627.65516372385, -5517.61752577037, -5658.34410886098,
-5478.61373169586, -5689.54714412059, -5454.1385715173,
-5712.5470891651, -5444.48261791261, -5737.51398772168,
-5443.02975452301, -5740.24090054523, -5439.90051029927,
-5741.06791509007, -5466.1414582898, -5713.88819383242,
-5475.86446712786, -5694.66569360086, -5497.65741797178,
-5651.4821233132, -5530.64859278781, -5624.77178868911,
-5570.36764268489, -5578.6154363889, -5616.70280894075,
-5551.39101164234, -5641.82616970851, -5499.13263310583,
-5676.51607710315, -5461.71581288765, -5701.43827217082,
-5436.95008003117, -5728.41682772837, -5426.48946362608,
-5730.98727834073, -5397.94628595666, -5772.5615230276,
-5508.02862739904, -5868.02582359622, -5646.49768429967,
-5963.66893812048, -5743.57131046907, -5968.58632190065,
-5776.33896784055, -5906.33671359262, -5792.83455524857,
-5831.19014873387, -5777.32244459658, -5728.41682772837,
-5774.84140096204, -5649.1351901454, -5771.7121567383,
-5580.31416896751, -5781.4128138319, -5527.72051426417,
-5791.18052615887, -5490.19193532371, -5791.38169185897,
-5480.58068520793, -5791.13582266996, -5471.81880138145,
-5782.26218012121, -5477.49614447309, -5770.2145898598,
-5497.21038308267, -5738.94449936682, -5520.56795603847,
-5706.98150479573, -5551.74863955362, -5668.11182118795,
-5589.27721849408, -5628.10219861295, -5622.06722761002,
-5573.63099737537, -5663.30619613006, -5536.41534285728,
-5691.17882146583, -5499.62437148385, -5729.44500797332,
-5473.65164442678, -5748.08636284904, -5452.66335638325,
-5743.77247616917, -5446.76249584705, -5760.26806357718,
-5448.86355982585, -5747.10288609301, -5454.80912385096,
-5731.45666497429, -5471.72939440363, -5703.38287393843,
-5501.32310406245, -5668.15652467686, -5541.28802314854,
-5631.58907074798, -5571.17230548529, -5589.16545977181,
-5615.29464904006, -5549.58052034146, -5635.72414347221,
-5539.81280801449, -5721.73365613623, -5516.20936586969,
-5752.82493267357, -5505.72639772015, -5749.98626112774,
-5457.60309190787, -5752.62376697347, -5443.23092022311,
-5756.44591527533, -5451.14343776029, -5734.58590919804,
-5464.66624315575, -5721.73365613623, -5497.72447320515,
-5688.47426038674, -5529.1063224204, -5658.72408851672,
-5556.59896810043, -5626.35876254544, -5587.31026498202,
-5582.90697132432, -5633.39956204886, -5547.63591857385,
-5673.11861194594, -5506.82163319846, -5696.7444058352,
-5466.94612109019, -5713.35175196549, -5446.56133014695,
-5734.27298477566, -5434.37962941881, -5737.91631912188,
-5430.66923983923, -5714.46933918826, -5423.89666126927,
-5715.43046419984, -5434.44668465217, -5678.10305095948,
-5459.48063844212, -5638.80868420704, -5487.37561552234,
-5601.14599479985, -5522.33374385044, -5558.38710765685,
-5561.9633867697, -5519.18214788224, -5608.79029140357,
-5476.95970260617, -5640.68623074129, -5453.44566743918,
-5680.40528063837, -5422.62261183531, -5700.87947855943,
-5388.60325677434, -5708.00968504068, -5382.88121019378,
-5711.65301938689, -5380.84720144835, -5695.17978372333,
-5394.50411731054, -5678.8406585265, -5422.66731532423,
-5654.90194021487, -5458.72067913064, -5620.18968107577,
-5499.02087438355, -5587.06439579301, -5541.91387199329,
-5550.45223837522, -5590.86419235041, -5507.31337157647,
-5623.45303576625, -5468.0413565685, -5660.33341411751,
-5432.27856544001, -5685.12149871844, -5411.04440820747,
-5709.55195540809, -5395.88992546677, -5719.38672296843,
-5394.90644871073, -5715.78809211112, -5401.32139936941,
-5695.26919070115, -5429.01521074953, -5694.62099011195,
-5450.94227206019, -5662.79210600759, -5475.68565317221,
-5623.25187006615, -5513.99654316861, -5568.15481998382,
-5549.15583719681, -5529.70981952069, -5586.75147137063,
-5489.61078996787, -5627.25283232365, -5453.15509476126,
-5667.37421362093, -5419.26985016702, -5686.48495513021,
-5404.98708546008, -5698.77841458063, -5388.06681490741,
-5707.83087108503, -5387.70918699613, -5704.9474960503,
-5393.81121323242, -5693.16812672235, -5409.03275120649,
-5648.41993432283, -5424.8801380253, -5617.82039616351,
-5466.96847283464, -5587.06439579301, -5504.16177560828,
-5543.0091074716, -5554.92258726628, -5496.91981040476,
-5588.60666616042, -5462.52047568804, -5637.04289639508,
-5443.00740277856, -5668.42474561033, -5403.53422207048,
-5682.39458589489, -5382.45652704913, -5695.40330116788,
-5372.53235251097, -5691.64820809939, -5375.72865196808,
-5693.07871974453, -5386.83746896237, -5676.44902186978,
-5411.51379484103, -5642.40731506435, -5444.75083884607,
-5606.37630300239, -5469.27070251354, -5572.58046538597,
-5508.22979309914, -5505.16760410876, -5540.55041558151,
-5461.7381646321, -5576.84964857693, -5419.98510598959,
-5610.19845130425, -5384.28937009446, -5636.88643418389,
-5359.27776804897, -5659.97578620622, -5345.82201788688,
-5668.22357991023, -5340.54700619543, -5663.70852753026,
-5337.86479686079, -5652.7338210027, -5367.63732047526,
-5633.46661728223, -5393.05125392094, -5614.04295135056,
-5431.74212357308, -5569.27240720658, -5471.57293219244,
-5530.69329627672, -5515.24824085811, -5492.91884814726,
-5558.11888672339, -5452.32808021642, -5600.18486978827,
-5427.40588514875, -5652.57735879151, -5424.29899266946,
-5713.21764149876, -5445.37668769082, -5817.84615729405,
-5537.37646786886, -5893.08212913062, -5593.59110517396,
-5934.7010773064, -5622.60366947695, -5914.67391427444,
-5613.01477110562, -5864.06956482763, -5618.31213454153,
-5805.91032575492, -5619.49677699766, -5725.51110094918,
-5629.7785794471, -5651.75034424667, -5642.96610867573,
-5578.83895383346, -5652.01856518013, -5516.85756645889,
-5670.41405086685, -5465.47090595614, -5691.11176623246,
-5429.97633576111, -5703.00289428269, -5397.38749234527,
-5709.39549319691, -5390.16787888621, -5710.17780425284,
-5380.82484970389, -5695.44800465679, -5389.18440213018,
-5668.62591131042, -5407.35637037234, -5624.63767822238,
-5426.3330014149, -5588.67372139379, -5461.291129743, -5547.47945636266,
-5499.1996883392, -5507.44748204321, -5541.06450570399,
-5465.91794084525, -5582.79521260205, -5416.98997223258,
-5612.63479144988, -5390.41374807522, -5630.71735271422,
-5356.2155790586, -5652.62206228042, -5336.59074742684,
-5658.16529490534, -5336.36722998229, -5659.90873097286,
-5339.45177071712, -5644.03899240959, -5358.40605001522,
-5624.68238171129, -5383.79763171645, -5594.52987844108,
-5415.53710884298, -5548.37352614087, -5463.79452512199,
-5513.32599083495, -5500.60784823988, -5472.13172580382,
-5538.09172369143, -5433.70907708515, -5571.70874735221,
-5391.03959691997, -5604.78932914607, -5363.27873030647,
-5631.74553295917, -5343.89976786372, -5650.99038493519,
-5333.4615032031, -5652.97969019171, -5336.72485789357,
-5652.91263495834, -5348.72774466607, -5636.01471615013,
-5367.50321000853, -5605.39282624636, -5390.05612016393,
-5580.24711373414, -5423.11435021333, -5535.38716261234,
-5459.52534193103, -5502.55245000749, -5503.24535408561,
-5455.85965584036, -5529.53100556505, -5399.80148074645,
-5581.63292189037, -5376.24274209055, -5601.43656747777,
-5345.35263125332, -5619.56383223103, -5331.69571539113,
-5628.61628873543, -5312.003828526, -5623.29657355506,
-5310.68507560314, -5620.12262584241, -5321.41391294168,
-5601.3248087555, -5343.1621602967, -5569.04888976203,
-5372.13002111078, -5538.47170334717, -5402.88602148128,
-5491.62244696885, -5442.73918184509, -5451.94810056068,
-5485.96745562166, -5416.72175129911, -5528.12284566436,
-5382.9706171716, -5561.85162804742, -5345.44203823114,
-5580.98472130117, -5312.87554655976, -5599.08963430996,
-5297.96693300807, -5602.35298900044, -5291.48492711603,
-5608.41031174783, -5300.89501153171, -5600.87777386639,
-5320.92217456367, -5588.80783186052, -5346.22434928708,
-5556.55426461152, -5377.89677118025, -5518.71276124868,
-5413.45839660864, -5477.80906889547, -5459.8382663534,
-5443.6332516233, -5502.01600814057, -5405.00943720453,
-5526.31235436348, -5363.83752391786, -5584.00220680263,
-5353.19809355713, -5604.7222739127, -5327.85121534481,
-5619.36266653093, -5310.41685466967, -5622.84953866596,
-5312.16029073719, -5615.78638741808, -5316.92121230617,
-5601.16834654431, -5334.82495961487, -5575.88852356536,
-5359.12130583779, -5546.96536624019, -5386.92687594019,
-5501.32310406245, -5424.43310313619, -5466.76730713455,
-5478.5913799514, -5442.62742312281, -5548.0606017185,
-5456.37374596283, -5651.12449540192, -5509.43678729973,
-5770.57221777108, -5582.03525329056, -5875.35719577756,
-5605.59399194646, -5899.16180362246, -5582.07995677948,
-5885.97427439383, -5558.63297684586, -5842.18720700588,
-5529.37454335386, -5793.19218315985, -5517.19284262572,
-5725.3993422269, -5501.61367674037, -5650.27512911262,
-5515.2035373692, -5599.96135234372, -5533.7554852671,
-5540.43865685924, -5566.32197693848, -5496.98686563812,
-5594.50752669663, -5448.59533889238, -5620.39084677587,
-5409.14450992877, -5645.15657963235, -5376.75683221303,
-5659.84167573949, -5350.89586387823, -5650.23042562371,
-5338.06596256089, -5653.24791112517, -5345.7102591646,
-5650.34218434598, -5354.06981159089, -5615.00407636214,
-5373.9181606672, -5579.35304395593, -5395.91227721122,
-5533.59902305592, -5433.48555964059, -5501.88189767383,
-5476.2444467836, -5456.64196689629, -5517.01402867008,
-5414.08424545339, -5552.30743316501, -5371.3700617993,
-5572.55811364151, -5345.39733474223, -5602.30828551153,
-5320.96687805258, -5620.0779223535, -5311.64620061472,
-5626.73874220118, -5308.47225290206, -5619.51912874212,
-5312.42851167065, -5604.85638437943, -5330.1087415348,
-5580.24711373414, -5356.81907615889, -5551.77099129808,
-5395.97933244459, -5519.69623800471, -5442.44860916717,
-5476.46796422815, -5475.14921130529, -5432.30091718446,
-5520.54560429402, -5394.45941382163, -5539.72340103667,
-5361.95997738361, -5587.48907893766, -5321.07863677485,
-5593.92638134079, -5285.248790413, -5605.16930880181,
-5284.51118284597, -5616.00990486263, -5289.20504918159,
-5593.85932610742, -5297.0505114854, -5575.19561948724,
-5321.41391294168, -5543.52319759407, -5346.20199754262,
-5516.20936586969, -5383.86468694981, -5474.94804560519,
-5420.8791757678, -5426.91414677073, -5458.85478959737,
-5390.10082365284, -5502.28422907403, -5349.53240746646,
-5523.33957235093, -5304.76186332248, -5558.92354952378,
-5283.90768574568, -5581.40940444582, -5266.56273204836,
-5585.03038704758, -5260.41600232315,
];
const indexx = useRef(0);
useFrame(() => {
indexx.current++;
if (eegData[indexx.current] < -5900) {
matRef.current.material.uniforms.brainColor.value = new Vector3(
Math.random(),
Math.random(),
Math.random()
);
}
if (indexx.current > eegData.length) {
indexx.current = 0;
}
});
const matRef = useRef();
useFrame(({
clock
}) => {
if (matRef.current?.material?.uniforms) {
matRef.current.material.uniforms.time.value = clock.getElapsedTime();
}
});
const tex1 = drei2.useTexture(
'data:image/webp;base64,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'
);
const tex2 = drei2.useTexture(
'data:image/webp;base64,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'
);
const tex3 = drei2.useTexture(
'data:image/webp;base64,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'
);
useEffect(() => {
tex1.flipY = false;
tex1.encoding = THREE.sRGBEncoding;
tex1.needsUpdate = true;
tex2.flipY = false;
tex2.encoding = THREE.sRGBEncoding;
tex2.needsUpdate = true;
tex3.flipY = false;
tex3.encoding = THREE.sRGBEncoding;
tex3.needsUpdate = true;
}, [tex1, tex2, tex3]);
// load file
const gltf = useDracoGLTF(
'/content/4dd1dbc7697b13cbd3e6e143eb799228c566dd78a833689ab75c1804136b08b0i0'
);
useEffect(() => {}, [gltf]);
// display placeholder until ready
if (!gltf) {
return null;
} else {
return html` <group
rotation=${props.rotation}
position=${props.position}
scale=${props.scale}
rotation=${props.rotation}
>
<mesh ref=${matRef} geometry=${gltf.scene.children[0].geometry}>
<shaderMaterial
uniforms=${{
brainColor: { value: new Vector3(1, 0, 0) },
tex1: { value: tex1 },
tex2: { value: tex2 },
tex3: { value: tex3 },
time: { value: 0 },
color: { value: color },
channelOffset: { value: (0 * Math.PI) / 8 },
}}
vertexShader=${`
uniform float channelOffset;
varying vec2 vUv;
varying vec3 vPos;
void main() {
vUv = uv;
vec3 pos = position;
vPos = pos;
gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
}`}
fragmentShader=${`
${window.shaderNoise}
varying vec2 vUv;
varying vec3 vPos;
uniform vec3 brainColor;
uniform sampler2D tex1;
uniform sampler2D tex2;
uniform sampler2D tex3;
uniform float time;
void main() {
vec3 vPoss = vPos;
vPoss.x += fract(sin(fract(time * 6. * cos(time * 0.4)))) * 0.02 * sin(time);
vPoss.z += fract(sin(fract(time * 4. * sin(time * 0.1)))) * 0.02 * sin(time);
float dist = distance(vec3(0.), vPos.xyz);
vec4 pic1 = texture2D(tex1, vPoss.xz * 0.42 + 0.5);
vec4 pic2 = texture2D(tex2, vPoss.xz * 0.42 + 0.5);
vec4 pic3 = texture2D(tex3, vPoss.xz * 0.42 + 0.5);
vec3 c = vec3(0.0, 0.0, 0.0);
c = mix(pic3.rgb, pic2.rgb, sin(time * 1.3));
c = mix(c, pic1.rgb, cos(time * 0.5)) * brainColor * 2.;
c += sin(time * 2.) * 0.04 * snoise(vPos.xz * 88. + sin(time)) * cos(time * 0.3);
c.rb += snoise(vPos.xz * 5. + time * dist) * 0.02;
c.rb += snoise(vPos.xz * 8. - time * dist) * 0.02;
// c *= snoise(vPos.xz / vPos.yy * 22.);
gl_FragColor = vec4(c, 1.0);
}`}
side=${THREE.DoubleSide}
transparent=${true}
depthWrite=${true}
wireframe=${false}
/>
</mesh>
<mesh geometry=${gltf.scene.children[1].geometry}>
<shaderMaterial
uniforms=${{
time: { value: 0 },
color: { value: color },
channelOffset: { value: (0 * Math.PI) / 8 },
}}
vertexShader=${`
uniform float time;
uniform float channelOffset;
varying vec2 vUv;
varying vec3 vPos;
void main() {
vUv = uv;
vec3 pos = position;
vPos = pos;
gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
}`}
fragmentShader=${`
${window.shaderNoise}
varying vec2 vUv;
varying vec3 vPos;
void main() {
vec3 c = vec3(0.4, 0.1, 0.8);
c *= snoise(vPos.xz * 6.) + 1.1;
c *= snoise(vPos.zy * vPos.xy * 4.) + 1.1;
c *= snoise(vPos.yy * 5.) + 1.1;
gl_FragColor = vec4(c, 1.0);
}`}
side=${THREE.DoubleSide}
transparent=${true}
depthWrite=${true}
wireframe=${false}
/>
</mesh>
</group>`;
}
};
const Canvas = (props) => {
const blobRef = useRef();
useEffect(() => {
window.blobRef = blobRef;
}, []);
return html`
<${Fiber.Canvas} ...${props}
gl=${{ precision: 'highp' }}
camera=${{
zoom: 2,
fov: 40,
near: 1,
far: 600000,
position: [0, 0.3, 35],
}} >
<${Suspense}>
<ambientLight intensity="1"/>
<${Cam} />
<${SceneComposer} hidePlayButton audioUrl=${audioUrl}>
<color attach="background" args=${['black']}/>
<group ...${hoverEvents}>
<${Postprocessing} />
<${SolarSystem} scale=${[1, 1, 1]} />
<${SolarSystem} scale=${[3000, 3000, 3000]} />
<group position=${[0, 0, -2400000]}>
<group postition=${[40, 0, 0]}>
<${TvScreen} scale=${[4444, 4444, 4444]} position=${[
0, 0, -64000,
]} rotation=${[Math.PI / 2, 0, 0]} />
<${TvScreen} scale=${[4444, 4444, 4444]} position=${[
16000, 0, -32000,
]} rotation=${[Math.PI / 2, 0, 0]} />
<${TvScreen} scale=${[4444, 4444, 4444]} position=${[
-16000, 0, -32000,
]} rotation=${[Math.PI / 2, 0, 0]} />
</group>
</group>
<pointLight
intensity=${1000}
position=${[20, 20, 0]}
decay=${1}
power=${1000}
shadow=${true}
color=${'purple'}
/>
<group ref=${blobRef} scale=${[1, 1, 1]}>
<${Bloberson} scale=${[1500, 1500, 1500]} />
<${Bloberson} scale=${[80000, 80000, 80000]} />
</group>
<group scale=${[1, 1, 1]}>
<${Book}
position=${[0, -7, 0]}
scale=${[1, 1, 1]}
rotation=${[Math.PI / 8, -Math.PI / 8, 0]} />
</group>
<group scale=${[1500, 1500, 1500]}>
<${EEGWavePlane}
position=${[0, 0, -840]}
segments=${30}
frag=${tunnelShaders.frag.lsd} vert=${
tunnelShaders.vert.eegwave
} />
<${EEGWavePlane}
position=${[0, 0, -1000]}
segments=${30}
frag=${tunnelShaders.frag.slots}
vert=${tunnelShaders.vert.eegwave} />
<${EEGWavePlane}
position=${[0, 0, -1250]}
segments=${30}
frag=${tunnelShaders.frag.neon} vert=${
tunnelShaders.vert.eegwave
} />
</group>
</group>
<//>
<//>
</${Fiber.Canvas}>
`;
};
ReactDOM.render(
html`
<div
style=${{
display: 'flex',
flexDirection: 'column',
height: '100%',
width: '100%',
}}
>
<${Canvas} />
</div>
`,
document.getElementById('root')
);
window.scenes = [{
name: 'start',
time: [0.0, 15],
onStart: async () => {
window.cam.fromJSON(JSON.stringify(start), true);
},
onEnd: () => {},
onFrame: (state, dt) => {},
},
{
name: 'scene1',
time: [15, 25],
onStart: async () => {
window.cam.fromJSON(JSON.stringify(scene1), true);
},
onEnd: () => {},
onFrame: (state, dt) => {},
},
{
name: 'scene2',
time: [25, 30],
onStart: async () => {
window.cam.fromJSON(JSON.stringify(scene2), true);
},
onEnd: () => {
tunnelStore.set({
active: true
});
},
onFrame: (state, dt) => {},
},
{
name: 'scene3',
time: [30, 40],
onStart: async () => {
window.cam.fromJSON(JSON.stringify(scene3), true);
},
onEnd: () => {},
onFrame: (state, dt) => {},
},
{
name: 'scene4',
time: [40, 50],
onStart: async () => {
window.cam.fromJSON(JSON.stringify(scene2), true);
},
onEnd: () => {},
onFrame: (state, dt) => {},
},
{
name: 'scene5',
time: [50, 80],
onStart: async () => {
window.cam.fromJSON(JSON.stringify(scene1), true);
},
onEnd: () => {
tunnelStore.set({
active: false
});
},
onFrame: (state, dt) => {},
},
{
name: 'scene6',
time: [80, 85],
onStart: async () => {
window.cam.fromJSON(JSON.stringify(scene6), true);
},
onEnd: () => {},
onFrame: (state, dt) => {},
},
];
</script>
</head>