Skip to content

Instantly share code, notes, and snippets.

@FadedWeiss
Created November 1, 2022 01:46
Show Gist options
  • Select an option

  • Save FadedWeiss/c8776c6cfae304be81bdd99e0a7cc86b to your computer and use it in GitHub Desktop.

Select an option

Save FadedWeiss/c8776c6cfae304be81bdd99e0a7cc86b to your computer and use it in GitHub Desktop.
Half\Ico
<script>
let logo = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtQAAAFuCAYAAAChlI9+AAAgAElEQVR4XuydCbhNZfv/7/dNSZSDlLlQZipEKGMcOecg86yRFJIGGUIZMoRQIsk8z5wj58hUmedIJESGijhKIb31299V+/xOWms9a++91t5r7/29r6t/v/+1n/HzrPN2r3vdz/f+j4j86fmHRgIkQAIkQAIkQAIkQAIk4AeB/9Ch9oMau5AACZAACZAACZAACZDA3wToUPNRIAESIAESIAESIAESIIEACNChDgAeu5IACZAACZAACZAACZAAHWo+AyRAAiRAAiRAAiRAAiQQAAE61AHAY1cSIAESIAESIAESIAESoEPNZ4AESIAESIAESIAESIAEAiBAhzoAeOxKAiRAAiRAAiRAAiRAAnSo+QyQAAmQAAmQAAmQAAmQQAAE6FAHAI9dSYAESIAESIAESIAESIAONZ8BEiABEiABEiABEiABEgiAAB3qAOCxKwmQAAmQAAmQAAmQAAnQoeYzQAIkQAIkQAIkQAIkQAIBEKBDHQA8diUBEiABEiABEiABEiABOtR8BkiABEiABEiABEiABEggAAJ0qAOAx64kQAIkQAIkQAIkQAIkQIeazwAJkAAJkAAJkAAJkAAJBECADnUA8NiVBEiABEiABEiABEiABOhQ8xkgARIgARIgARIgARIggQAI0KEOAB67kgAJkAAJkAAJkAAJkAAdaj4DJEACJEACJEACJEACJBAAATrUAcBjVxIgARIgARIgARIgARKgQ81ngARIgARIgARIgARIgAQCIECHOgB47EoCJEACJEACJEACJEACdKj5DJAACZAACZAACZAACZBAAAToUAcAj11JgARIgARIgARIgARIgA41nwESIAESIAESIAESIAESCICAKxzqTJkySY3qNaRqtapy+vRpWbVqlezfvz+AbbErCZAACZAACZAACZAACQSHQMgd6nz58smWLVskT548/9jxd999J0uXLpWkxCRZu26tXLx4MThEOAsJkAAJkAAJkAAJkAAJ+EAg5A71nDlzpHnz5qZL/vPPP2XNmjWSmJgoK1askK+++sqHLbIpCZAACZAACZAACZAACThHIKQO9X/+8x+5evWqXHfddT7t8MSJE39Fr5OSZP369fLrr7/61J+NSYAESIAESIAESIAESMAuAmHpUKff/B9//KHl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1q1b4/r160bMaUMCJEACJEACJEACJOADAQpqH6AFs0unTp0wduxYpQuSPk9yV9+4cUNpSwMSIAESIAESIAESIAHfCVBQ+84uKD2LFy+OvXv3epx7/Pjx+Mc//oE//vgjKD5yUhIgARIgARIgARIIJQIU1A7b7TRp0rjyUYeHh+t6Pnz4cPTq1Yti2mH7SndJgARIgARIgAScS4CC2oF716ZNG92KiO+99x769+/vwBXRZRIgARIgARIgARJwLgEKaofuXbOmzdCufTtXCfHZs2e74qq3bNni0NXQbRIgARIgARIgARJwLgEKaufunctzCQG5efOmw1dB90mABEiABEiABEjAuQQoqJ27d/ScBEiABEiABEiABEjABgQoqG2wCXSBBEiABEiABEiABEjAuQQoqJ27d/ScBEiABEiABEiABEjABgQoqG2wCXSBBEiABEiABEiABEjAuQQoqJ27d/ScBEiABEiABEiABEjABgQoqG2wCXSBBEiABEiABEiABEjAuQQoqJ27d/ScBEiABEiABEiABEjABgQoqG2wCXSBBEiABEiABEiABEjAuQQoqJ27d/ScBEiABEiABEiABEjABgQoqG2wCXSBBEiABEiABEiABEjAuQQoqJ27d/ScBEiABEiABEiABEjABgQoqG2wCXSBBEiABEiABEiABEjAuQQoqJ27d/ScBEiABEiABEiABEjABgQoqG2wCXSBBEiABEiABEiABEjAuQQoqJ27d/ScBEiABEiABEiABEjABgQoqG2wCXSBBEiABEiABEiABEjAuQQoqJ27d/ScBEiABEiABEiABEjABgQoqG2wCXSBBEiABEiABEiABEjAuQQoqJ27d/ScBEiABEiABEiABEjABgT+H5DOOZQbMoSbAAAAAElFTkSuQmCC`;
let noise = `
// Simplex 4D Noise
// by Ian McEwan, Ashima Arts
//
vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}
float permute(float x){return floor(mod(((x*34.0)+1.0)*x, 289.0));}
vec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;}
float taylorInvSqrt(float r){return 1.79284291400159 - 0.85373472095314 * r;}
vec4 grad4(float j, vec4 ip){
const vec4 ones = vec4(1.0, 1.0, 1.0, -1.0);
vec4 p,s;
p.xyz = floor( fract (vec3(j) * ip.xyz) * 7.0) * ip.z - 1.0;
p.w = 1.5 - dot(abs(p.xyz), ones.xyz);
s = vec4(lessThan(p, vec4(0.0)));
p.xyz = p.xyz + (s.xyz*2.0 - 1.0) * s.www;
return p;
}
float snoise(vec4 v){
const vec2 C = vec2( 0.138196601125010504, // (5 - sqrt(5))/20 G4
0.309016994374947451); // (sqrt(5) - 1)/4 F4
// First corner
vec4 i = floor(v + dot(v, C.yyyy) );
vec4 x0 = v - i + dot(i, C.xxxx);
// Other corners
// Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI)
vec4 i0;
vec3 isX = step( x0.yzw, x0.xxx );
vec3 isYZ = step( x0.zww, x0.yyz );
// i0.x = dot( isX, vec3( 1.0 ) );
i0.x = isX.x + isX.y + isX.z;
i0.yzw = 1.0 - isX;
// i0.y += dot( isYZ.xy, vec2( 1.0 ) );
i0.y += isYZ.x + isYZ.y;
i0.zw += 1.0 - isYZ.xy;
i0.z += isYZ.z;
i0.w += 1.0 - isYZ.z;
// i0 now contains the unique values 0,1,2,3 in each channel
vec4 i3 = clamp( i0, 0.0, 1.0 );
vec4 i2 = clamp( i0-1.0, 0.0, 1.0 );
vec4 i1 = clamp( i0-2.0, 0.0, 1.0 );
// x0 = x0 - 0.0 + 0.0 * C
vec4 x1 = x0 - i1 + 1.0 * C.xxxx;
vec4 x2 = x0 - i2 + 2.0 * C.xxxx;
vec4 x3 = x0 - i3 + 3.0 * C.xxxx;
vec4 x4 = x0 - 1.0 + 4.0 * C.xxxx;
// Permutations
i = mod(i, 289.0);
float j0 = permute( permute( permute( permute(i.w) + i.z) + i.y) + i.x);
vec4 j1 = permute( permute( permute( permute (
i.w + vec4(i1.w, i2.w, i3.w, 1.0 ))
+ i.z + vec4(i1.z, i2.z, i3.z, 1.0 ))
+ i.y + vec4(i1.y, i2.y, i3.y, 1.0 ))
+ i.x + vec4(i1.x, i2.x, i3.x, 1.0 ));
// Gradients
// ( 7*7*6 points uniformly over a cube, mapped onto a 4-octahedron.)
// 7*7*6 = 294, which is close to the ring size 17*17 = 289.
vec4 ip = vec4(1.0/294.0, 1.0/49.0, 1.0/7.0, 0.0) ;
vec4 p0 = grad4(j0, ip);
vec4 p1 = grad4(j1.x, ip);
vec4 p2 = grad4(j1.y, ip);
vec4 p3 = grad4(j1.z, ip);
vec4 p4 = grad4(j1.w, ip);
// Normalise gradients
vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
p0 *= norm.x;
p1 *= norm.y;
p2 *= norm.z;
p3 *= norm.w;
p4 *= taylorInvSqrt(dot(p4,p4));
// Mix contributions from the five corners
vec3 m0 = max(0.6 - vec3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.0);
vec2 m1 = max(0.6 - vec2(dot(x3,x3), dot(x4,x4) ), 0.0);
m0 = m0 * m0;
m1 = m1 * m1;
return 49.0 * ( dot(m0*m0, vec3( dot( p0, x0 ), dot( p1, x1 ), dot( p2, x2 )))
+ dot(m1*m1, vec2( dot( p3, x3 ), dot( p4, x4 ) ) ) ) ;
}
`;
</script>
import * as THREE from "https://cdn.skypack.dev/[email protected]";
import { OrbitControls } from "https://cdn.skypack.dev/[email protected]/examples/jsm/controls/OrbitControls";
import { RoomEnvironment } from "https://cdn.skypack.dev/[email protected]/examples/jsm/environments/RoomEnvironment";
import * as BufferGeometryUtils from "https://cdn.skypack.dev/[email protected]/examples/jsm/utils/BufferGeometryUtils";
console.clear();
let scene = new THREE.Scene();
let camera = new THREE.PerspectiveCamera(
60,
innerWidth / innerHeight,
0.1,
100
);
camera.position.set(0, 0, 12);
let renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
renderer.setSize(innerWidth, innerHeight);
document.body.appendChild(renderer.domElement);
window.addEventListener("resize", (event) => {
camera.aspect = innerWidth / innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(innerWidth, innerHeight);
});
const pmremGenerator = new THREE.PMREMGenerator(renderer);
let env = pmremGenerator.fromScene(new RoomEnvironment(), 0.04).texture;
let controls = new OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;
//controls.target.set(0, 1.25, 0);
//controls.update();
let light = new THREE.DirectionalLight(0xffffff, 0.1);
light.position.setScalar(1);
scene.add(light, new THREE.AmbientLight(0xffffff, 0.9));
let gu = {
time: { value: 0 }
};
let baseG = new THREE.IcosahedronGeometry(5, 11);
baseG.rotateZ(THREE.MathUtils.degToRad(31.72));
let restFaces = [];
let lidFaces = [];
let vtx = [new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3()];
let pos = baseG.attributes.position;
let faces = pos.count / 3;
let tlrc = 0.01;
let canMove = [];
for (let i = 0; i < faces; i++) {
vtx[0].fromBufferAttribute(pos, i * 3 + 0);
vtx[1].fromBufferAttribute(pos, i * 3 + 1);
vtx[2].fromBufferAttribute(pos, i * 3 + 2);
if (vtx[0].y > -tlrc && vtx[1].y > -tlrc && vtx[2].y > -tlrc) {
vtx.forEach((v) => {
restFaces.push(v.clone());
canMove.push(1);
});
} else {
// lid
let cntr = [];
vtx.forEach(v => {
if (v.y < -tlrc) cntr.push(v);
})
if (cntr.length == 1){
cntr[0].setScalar(0);
vtx.forEach(v => {
restFaces.push(v.clone());
canMove.push(v.length() == 0 ? 0 : 1)
})
}
}
}
let b3 = new THREE.Box3().setFromPoints(restFaces);
let translateY = -b3.min.y;
let g = new THREE.BufferGeometry()
.setFromPoints(restFaces)
.translate(0, translateY, 0);
//g.rotateZ(Math.PI);
g.computeVertexNormals();
setAttributes(g);
console.log(g.attributes.position.count);
let m = new THREE.MeshStandardMaterial({
//wireframe: true,
roughness: 0.3,
metalness: 0.9,
envMap: env,
onBeforeCompile: (shader) => {
shader.uniforms.time = gu.time;
shader.uniforms.colorIn = { value: new THREE.Color("#91a8d0") };
shader.uniforms.colorOut = { value: new THREE.Color("#f7cac9") };
shader.uniforms.logo = {value: new THREE.TextureLoader().load(logo, tex =>{
//console.log(tex);
})};
shader.vertexShader = `
uniform float time;
attribute vec3 position2;
attribute vec3 position3;
attribute float canMove;
attribute float canMove2;
attribute float canMove3;
varying vec3 vPos;
varying vec3 vN;
${noise}
float noisePos(vec3 pos){
float t = time * 0.125;
vec3 pn = normalize(pos);
float n = snoise(vec4(pn * 1.5, t));
n = n * 0.5 + 0.5;
return 2. + n * 4.;
}
${shader.vertexShader}
`
.replace(
`#include <beginnormal_vertex>`,
`#include <beginnormal_vertex>
vec3 na = normalize(position) * canMove;
vec3 nb = normalize(position2) * canMove2;
vec3 nc = normalize(position3) * canMove3;
vec3 a = length(position) < 0.001 ? position : na * noisePos(vec3(modelMatrix * vec4(position, 1.)));
if(normal.y >= 0.){
vec3 b = nb * noisePos(vec3(modelMatrix * vec4(position2, 1.)));
vec3 c = nc * noisePos(vec3(modelMatrix * vec4(position3, 1.)));
vec3 ab = normalize(a - b);
vec3 cb = normalize(c - b);
objectNormal = normalize(cross(cb, ab));
vN = objectNormal;
}
`
)
.replace(
`#include <begin_vertex>`,
`#include <begin_vertex>
transformed = a;
vPos = a;
`
);
//console.log(shader.vertexShader);
shader.fragmentShader = `
uniform vec3 colorIn;
uniform vec3 colorOut;
uniform sampler2D logo;
varying vec3 vPos;
varying vec3 vN;
${shader.fragmentShader}
`
.replace(
`#include <color_fragment>`,
`#include <color_fragment>
vec2 logoUV = (vPos.xz + vec2(1, 0.5)) * vec2(1., 2.) / 3.;
float valRoughness = texture(logo, logoUV).r;
float texRoughness = 1. - valRoughness;
float limRoughness = step(0.01, vPos.y);
diffuseColor.rgb = mix(colorIn, colorOut, clamp(length(vPos) / 7., 0., 1.));
diffuseColor.rgb = mix(diffuseColor.rgb, vec3(0.5, 1, 1), valRoughness * (1. - limRoughness));
`
).replace(
`#include <roughnessmap_fragment>`,
`#include <roughnessmap_fragment>
roughnessFactor = mix(roughnessFactor * texRoughness, roughnessFactor, limRoughness);
`
);
//console.log(shader.fragmentShader);
} /**/
});
let o = new THREE.Mesh(g, m);
//o.rotation.set(-Math.PI * 0.5, 0, 0)
scene.add(o);
let plane = new THREE.Plane();
let clock = new THREE.Clock();
renderer.setAnimationLoop(() => {
controls.update();
let t = clock.getElapsedTime();
t *= 0.1;
gu.time.value = t;
let rt = t * 2;
o.rotation.set(rt * 0.27, rt * 0.31, rt * 0.21);
renderer.render(scene, camera);
});
function setAttributes(g) {
let pos = g.attributes.position;
let faces = pos.count / 3;
let faceVerts = [
new THREE.Vector3(),
new THREE.Vector3(),
new THREE.Vector3()
];
let canMoves = [0, 0, 0];
let position2 = [];
let position3 = [];
let canMove2 = [];
let canMove3 = [];
for (let i = 0; i < faces; i++) {
faceVerts[0].fromBufferAttribute(pos, i * 3 + 0);
faceVerts[1].fromBufferAttribute(pos, i * 3 + 1);
faceVerts[2].fromBufferAttribute(pos, i * 3 + 2);
canMoves[0] = canMove[i * 3 + 0];
canMoves[1] = canMove[i * 3 + 1];
canMoves[2] = canMove[i * 3 + 2];
for (let v = 0; v < 3; v++) {
let v2 = faceVerts[(v + 1) % 3];
let v3 = faceVerts[(v + 2) % 3];
position2.push(v2.x, v2.y, v2.z);
position3.push(v3.x, v3.y, v3.z);
canMove2.push(canMoves[(v + 1) % 3]);
canMove3.push(canMoves[(v + 2) % 3]);
}
}
g.setAttribute("position2", new THREE.Float32BufferAttribute(position2, 3));
g.setAttribute("position3", new THREE.Float32BufferAttribute(position3, 3));
const vectors = [
new THREE.Vector3(1, 0, 0),
new THREE.Vector3(0, 1, 0),
new THREE.Vector3(0, 0, 1)
];
const centers = new Float32Array(pos.count * 3);
for (let i = 0, l = pos.count; i < l; i++) {
vectors[i % 3].toArray(centers, i * 3);
}
g.setAttribute("center", new THREE.BufferAttribute(centers, 3));
g.setAttribute("canMove", new THREE.Float32BufferAttribute(canMove, 1));
g.setAttribute("canMove2", new THREE.Float32BufferAttribute(canMove2, 1));
g.setAttribute("canMove3", new THREE.Float32BufferAttribute(canMove3, 1));
}
body{
overflow: hidden;
margin: 0;
/*https://www.svgbackgrounds.com/category/pattern*/
background-color: #DBC1CB;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='540' height='450' viewBox='0 0 1080 900'%3E%3Cg fill-opacity='0.025'%3E%3Cpolygon fill='%23444' points='90 150 0 300 180 300'/%3E%3Cpolygon points='90 150 180 0 0 0'/%3E%3Cpolygon fill='%23AAA' points='270 150 360 0 180 0'/%3E%3Cpolygon fill='%23DDD' points='450 150 360 300 540 300'/%3E%3Cpolygon fill='%23999' points='450 150 540 0 360 0'/%3E%3Cpolygon points='630 150 540 300 720 300'/%3E%3Cpolygon fill='%23DDD' points='630 150 720 0 540 0'/%3E%3Cpolygon fill='%23444' points='810 150 720 300 900 300'/%3E%3Cpolygon fill='%23FFF' points='810 150 900 0 720 0'/%3E%3Cpolygon fill='%23DDD' points='990 150 900 300 1080 300'/%3E%3Cpolygon fill='%23444' points='990 150 1080 0 900 0'/%3E%3Cpolygon fill='%23DDD' points='90 450 0 600 180 600'/%3E%3Cpolygon points='90 450 180 300 0 300'/%3E%3Cpolygon fill='%23666' points='270 450 180 600 360 600'/%3E%3Cpolygon fill='%23AAA' points='270 450 360 300 180 300'/%3E%3Cpolygon fill='%23DDD' points='450 450 360 600 540 600'/%3E%3Cpolygon fill='%23999' points='450 450 540 300 360 300'/%3E%3Cpolygon fill='%23999' points='630 450 540 600 720 600'/%3E%3Cpolygon fill='%23FFF' points='630 450 720 300 540 300'/%3E%3Cpolygon points='810 450 720 600 900 600'/%3E%3Cpolygon fill='%23DDD' points='810 450 900 300 720 300'/%3E%3Cpolygon fill='%23AAA' points='990 450 900 600 1080 600'/%3E%3Cpolygon fill='%23444' points='990 450 1080 300 900 300'/%3E%3Cpolygon fill='%23222' points='90 750 0 900 180 900'/%3E%3Cpolygon points='270 750 180 900 360 900'/%3E%3Cpolygon fill='%23DDD' points='270 750 360 600 180 600'/%3E%3Cpolygon points='450 750 540 600 360 600'/%3E%3Cpolygon points='630 750 540 900 720 900'/%3E%3Cpolygon fill='%23444' points='630 750 720 600 540 600'/%3E%3Cpolygon fill='%23AAA' points='810 750 720 900 900 900'/%3E%3Cpolygon fill='%23666' points='810 750 900 600 720 600'/%3E%3Cpolygon fill='%23999' points='990 750 900 900 1080 900'/%3E%3Cpolygon fill='%23999' points='180 0 90 150 270 150'/%3E%3Cpolygon fill='%23444' points='360 0 270 150 450 150'/%3E%3Cpolygon fill='%23FFF' points='540 0 450 150 630 150'/%3E%3Cpolygon points='900 0 810 150 990 150'/%3E%3Cpolygon fill='%23222' points='0 300 -90 450 90 450'/%3E%3Cpolygon fill='%23FFF' points='0 300 90 150 -90 150'/%3E%3Cpolygon fill='%23FFF' points='180 300 90 450 270 450'/%3E%3Cpolygon fill='%23666' points='180 300 270 150 90 150'/%3E%3Cpolygon fill='%23222' points='360 300 270 450 450 450'/%3E%3Cpolygon fill='%23FFF' points='360 300 450 150 270 150'/%3E%3Cpolygon fill='%23444' points='540 300 450 450 630 450'/%3E%3Cpolygon fill='%23222' points='540 300 630 150 450 150'/%3E%3Cpolygon fill='%23AAA' points='720 300 630 450 810 450'/%3E%3Cpolygon fill='%23666' points='720 300 810 150 630 150'/%3E%3Cpolygon fill='%23FFF' points='900 300 810 450 990 450'/%3E%3Cpolygon fill='%23999' points='900 300 990 150 810 150'/%3E%3Cpolygon points='0 600 -90 750 90 750'/%3E%3Cpolygon fill='%23666' points='0 600 90 450 -90 450'/%3E%3Cpolygon fill='%23AAA' points='180 600 90 750 270 750'/%3E%3Cpolygon fill='%23444' points='180 600 270 450 90 450'/%3E%3Cpolygon fill='%23444' points='360 600 270 750 450 750'/%3E%3Cpolygon fill='%23999' points='360 600 450 450 270 450'/%3E%3Cpolygon fill='%23666' points='540 600 630 450 450 450'/%3E%3Cpolygon fill='%23222' points='720 600 630 750 810 750'/%3E%3Cpolygon fill='%23FFF' points='900 600 810 750 990 750'/%3E%3Cpolygon fill='%23222' points='900 600 990 450 810 450'/%3E%3Cpolygon fill='%23DDD' points='0 900 90 750 -90 750'/%3E%3Cpolygon fill='%23444' points='180 900 270 750 90 750'/%3E%3Cpolygon fill='%23FFF' points='360 900 450 750 270 750'/%3E%3Cpolygon fill='%23AAA' points='540 900 630 750 450 750'/%3E%3Cpolygon fill='%23FFF' points='720 900 810 750 630 750'/%3E%3Cpolygon fill='%23222' points='900 900 990 750 810 750'/%3E%3Cpolygon fill='%23222' points='1080 300 990 450 1170 450'/%3E%3Cpolygon fill='%23FFF' points='1080 300 1170 150 990 150'/%3E%3Cpolygon points='1080 600 990 750 1170 750'/%3E%3Cpolygon fill='%23666' points='1080 600 1170 450 990 450'/%3E%3Cpolygon fill='%23DDD' points='1080 900 1170 750 990 750'/%3E%3C/g%3E%3C/svg%3E");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment