This commit is contained in:
2026-04-12 01:06:31 +07:00
commit 10d660cbcb
1066 changed files with 228596 additions and 0 deletions

View File

@@ -0,0 +1,134 @@
# Pattern Symmetry & Advanced Techniques
Advanced pattern generation including symmetry, Truchet tiles, and domain warping.
## Mirror/Reflection
```glsl
// Mirror horizontally
vec2 mirrorX(vec2 st) {
return vec2(abs(st.x - 0.5) + 0.5, st.y);
}
// Mirror vertically
vec2 mirrorY(vec2 st) {
return vec2(st.x, abs(st.y - 0.5) + 0.5);
}
// Kaleidoscope (4-fold symmetry)
vec2 kaleidoscope(vec2 st) {
st -= 0.5;
st = abs(st);
return st + 0.5;
}
```
## N-fold Radial Symmetry
```glsl
vec2 radialSymmetry(vec2 st, float n) {
st -= 0.5;
float angle = atan(st.y, st.x);
float segment = TWO_PI / n;
angle = mod(angle, segment);
float r = length(st);
return vec2(cos(angle), sin(angle)) * r + 0.5;
}
// Usage: 6-fold snowflake symmetry
vec2 sym = radialSymmetry(st, 6.0);
```
## Truchet Tiles
Random orientation per cell:
```glsl
float random(vec2 st) {
return fract(sin(dot(st, vec2(12.9898, 78.233))) * 43758.5453);
}
float truchet(vec2 st, float n) {
st *= n;
vec2 idx = floor(st);
vec2 local = fract(st);
// Random rotation per cell (0, 90, 180, 270 degrees)
float r = random(idx);
if (r < 0.25) local = local;
else if (r < 0.5) local = vec2(1.0 - local.y, local.x);
else if (r < 0.75) local = 1.0 - local;
else local = vec2(local.y, 1.0 - local.x);
// Draw quarter circles
float d1 = length(local);
float d2 = length(local - 1.0);
return min(abs(d1 - 0.5), abs(d2 - 0.5));
}
// Usage
float pattern = 1.0 - smoothstep(0.0, 0.05, truchet(st, 8.0));
```
## Truchet Variations
```glsl
// Line-based Truchet
float truchetLines(vec2 st, float n) {
st *= n;
vec2 idx = floor(st);
vec2 local = fract(st);
float r = random(idx);
if (r > 0.5) local = vec2(local.y, local.x); // Flip diagonal
// Diagonal line
return abs(local.x - local.y);
}
// Maze pattern
float truchetMaze(vec2 st, float n) {
st *= n;
vec2 idx = floor(st);
vec2 local = fract(st) - 0.5;
float r = random(idx);
if (r > 0.5) local.x = -local.x;
return smoothstep(0.0, 0.1, abs(local.x + local.y));
}
```
## Domain Warping
```glsl
vec2 warp(vec2 st, float a) {
return st + vec2(sin(st.y * 10.0), sin(st.x * 10.0)) * a;
}
vec2 animatedWarp(vec2 st, float t, float a) {
return st + vec2(sin(st.y * 5.0 + t), cos(st.x * 5.0 + t * 1.3)) * a;
}
```
## Iterative Domain Warping
```glsl
vec2 iterativeWarp(vec2 st, int iterations) {
for (int i = 0; i < iterations; i++) {
st = vec2(valueNoise(st), valueNoise(st + 5.0)) * 2.0 - 1.0 + st;
}
return st;
}
```
## Practical Pattern Examples
```glsl
// Islamic-style pattern
float islamicPattern(vec2 st, float n) {
st = radialSymmetry(st, 8.0);
st = tile(st, n);
return smoothstep(0.4, 0.41, length(st - 0.5));
}
```