first commit

This commit is contained in:
2026-10-06 12:16:46 +09:00
commit 619d980098
415 changed files with 22283 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
uniform sampler2D uTexture;
uniform float uGridSize;
uniform float uStrength;
uniform vec2 uViewOffset;
uniform vec2 uResolution;
uniform float uTime;
uniform vec2 uPetSize;
uniform bool uIsVideo;
varying vec2 vUv;
varying vec3 vWorldPosition;
float hash(vec2 p) { return fract(sin(dot(p, vec2(41.3, 17.9))) * 15731.743); }
float noise(vec2 p) {
vec2 i = floor(p);
vec2 f = fract(p);
f = f * f * (3.0 - 2.0 * f);
return mix(mix(hash(i), hash(i + vec2(1.0, 0.0)), f.x), mix(hash(i + vec2(0.0, 1.0)), hash(i + vec2(1.0)), f.x), f.y);
}
vec3 srgbToLinear(vec3 value) {
return mix(value / 12.92, pow((value + 0.055) / 1.055, vec3(2.4)), step(vec3(0.04045), value));
}
vec4 mediaSample(vec2 uv) {
vec3 background = srgbToLinear(vec3(17.0, 25.0, 35.0) / 255.0);
if (any(lessThan(uv, vec2(0.0))) || any(greaterThan(uv, vec2(1.0)))) return vec4(background, 1.0);
vec4 color = texture2D(uTexture, uv);
if (uIsVideo) color.rgb = srgbToLinear(color.rgb);
return color;
}
vec2 hitUv(vec3 ray) {
float rayZ = abs(ray.z) < 0.0001 ? (ray.z < 0.0 ? -0.0001 : 0.0001) : ray.z;
float signedT = -vWorldPosition.z / rayZ;
return (vWorldPosition + ray * signedT).xy / uPetSize + 0.5;
}
void main() {
vec2 stableUv = vUv * (uResolution / max(uResolution.y, 1.0));
vec2 noisePos = stableUv * 9.0 + uViewOffset * 0.6;
vec2 randomNormal = vec2(noise(noisePos), noise(noisePos + vec2(23.7))) - vec2(0.5);
vec3 incident = normalize(vWorldPosition - cameraPosition);
vec3 normal = normalize(vec3(randomNormal * 0.32, 1.0));
vec3 refracted = refract(incident, normal, 0.75);
vec2 centerUv = mix(hitUv(incident), hitUv(refracted), clamp(uStrength, 0.0, 1.0));
vec2 radius = vec2(0.008) * clamp(uStrength, 0.0, 1.0);
vec4 color = vec4(0.0);
color += mediaSample(centerUv + vec2(-radius.x, -radius.y));
color += mediaSample(centerUv + vec2(0.0, -radius.y));
color += mediaSample(centerUv + vec2(radius.x, -radius.y));
color += mediaSample(centerUv + vec2(-radius.x, 0.0));
color += mediaSample(centerUv);
color += mediaSample(centerUv + vec2(radius.x, 0.0));
color += mediaSample(centerUv + vec2(-radius.x, radius.y));
color += mediaSample(centerUv + vec2(0.0, radius.y));
color += mediaSample(centerUv + vec2(radius.x, radius.y));
color /= 9.0;
color.a = 1.0;
gl_FragColor = color;
#include <colorspace_fragment>
}
+56
View File
@@ -0,0 +1,56 @@
uniform sampler2D uTexture;
uniform float uGridSize;
uniform float uStrength;
uniform vec2 uViewOffset;
uniform vec2 uResolution;
uniform float uTime;
uniform vec2 uPetSize;
uniform bool uIsVideo;
varying vec2 vUv;
varying vec3 vWorldPosition;
float hash(vec2 p) {
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
}
vec3 srgbToLinear(vec3 value) {
return mix(value / 12.92, pow((value + 0.055) / 1.055, vec3(2.4)), step(vec3(0.04045), value));
}
vec4 mediaSample(vec2 uv) {
vec3 background = srgbToLinear(vec3(17.0, 25.0, 35.0) / 255.0);
if (any(lessThan(uv, vec2(0.0))) || any(greaterThan(uv, vec2(1.0)))) return vec4(background, 1.0);
vec4 color = texture2D(uTexture, uv);
if (uIsVideo) color.rgb = srgbToLinear(color.rgb);
return color;
}
vec2 hitUv(vec3 ray) {
float rayZ = ray.z;
rayZ = abs(rayZ) < 0.0001 ? (rayZ < 0.0 ? -0.0001 : 0.0001) : rayZ;
float signedT = -vWorldPosition.z / rayZ;
return (vWorldPosition + ray * signedT).xy / uPetSize + 0.5;
}
void main() {
vec2 grid = vec2(uGridSize, max(1.0, uGridSize * uPetSize.y / uPetSize.x));
vec2 scaled = vUv * grid;
vec2 cell = floor(scaled);
vec2 local = fract(scaled) - 0.5;
float variation = mix(0.85, 1.15, hash(cell));
vec2 lensLocal = local + uViewOffset * (0.12 + 0.08 * hash(cell + vec2(9.0)));
float bulge = max(0.0, 0.25 - dot(lensLocal, lensLocal));
vec3 normal = normalize(vec3(-lensLocal * bulge * 1.8 * variation, 1.0));
vec3 incident = normalize(vWorldPosition - cameraPosition);
vec3 refracted = refract(incident, normal, 0.75);
vec2 straightUv = hitUv(incident);
vec2 refractedUv = hitUv(refracted);
vec2 uv = mix(straightUv, refractedUv, clamp(uStrength, 0.0, 1.0));
vec4 color = mediaSample(uv);
float edge = smoothstep(0.46, 0.5, max(abs(local.x), abs(local.y)));
color.rgb *= mix(1.0, 0.75, edge * clamp(uStrength, 0.0, 1.0));
color.a = 1.0;
gl_FragColor = color;
#include <colorspace_fragment>
}
+48
View File
@@ -0,0 +1,48 @@
uniform sampler2D uTexture;
uniform float uGridSize;
uniform float uStrength;
uniform vec2 uViewOffset;
uniform vec2 uResolution;
uniform float uTime;
uniform vec2 uPetSize;
uniform bool uIsVideo;
varying vec2 vUv;
varying vec3 vWorldPosition;
float hash(float value) { return fract(sin(value * 91.7) * 43758.5453); }
vec3 srgbToLinear(vec3 value) {
return mix(value / 12.92, pow((value + 0.055) / 1.055, vec3(2.4)), step(vec3(0.04045), value));
}
vec4 mediaSample(vec2 uv) {
vec3 background = srgbToLinear(vec3(17.0, 25.0, 35.0) / 255.0);
if (any(lessThan(uv, vec2(0.0))) || any(greaterThan(uv, vec2(1.0)))) return vec4(background, 1.0);
vec4 color = texture2D(uTexture, uv);
if (uIsVideo) color.rgb = srgbToLinear(color.rgb);
return color;
}
vec2 hitUv(vec3 ray) {
float rayZ = abs(ray.z) < 0.0001 ? (ray.z < 0.0 ? -0.0001 : 0.0001) : ray.z;
float signedT = -vWorldPosition.z / rayZ;
return (vWorldPosition + ray * signedT).xy / uPetSize + 0.5;
}
void main() {
float ridgeCount = max(1.0, uGridSize * uPetSize.x / uPetSize.y);
float ridgeCoordinate = vUv.x * ridgeCount;
float ridgeCell = floor(ridgeCoordinate);
float phase = fract(ridgeCoordinate) * 6.2831853;
float ridge = sin(phase + uViewOffset.x * 0.9);
float ridgeVariation = mix(0.92, 1.08, hash(ridgeCell));
vec3 normal = normalize(vec3(-ridge * 0.34 * ridgeVariation, 0.0, 1.0));
vec3 incident = normalize(vWorldPosition - cameraPosition);
vec3 refracted = refract(incident, normal, 0.75);
vec2 uv = mix(hitUv(incident), hitUv(refracted), clamp(uStrength, 0.0, 1.0));
vec4 color = mediaSample(uv);
color.a = 1.0;
gl_FragColor = color;
#include <colorspace_fragment>
}