learn GLSL from zero
ToolsCrea con shadersShader MakerCrea shaders gratis en líneaToolkitObras de shaders listas para tu webSketcher LabPinta el hero de tu landing con shaders3D StudioEl editor Three.js en tu navegador
GamesJuega con shadersOnomatoShaderEscribe una palabra y explótalaThe WatcherUn ojo que te sigueAetherVidrio líquido con un ojo adentroBloomcoreUna palabra hace crecer un jardín de luzPyrokineAvienta fuego a la paredVoltaicLa pirámide lanza rayosSurfSurfea un océano de shader

Lección 1 de 10 · Domain warping

Giraffe

La distorsión es haute couture.

Ya sabes hacer noise y FBM. Ahora vas a aprender a conectarlos diferente, usar la salida de un noise como entrada de otro. Eso es domain warp: el noise se dobla a sí mismo.

Para convertir ese campo en materiales reconocibles necesitas herramientas de corte y forma. Estas son las nuevas:

Con estas herramientas + domain warp vas a fabricar: camuflaje, piel de vaca, leopardo, madera, tie-dye, escamas, mármol, y una lava lamp.

El código de abajo es tu primer domain warp. fb(p + fb(p)), una línea que cambia todo.

fb(p + fb(p)). El noise se distorsiona a sí mismo.

fb(p + fb(p))Evalúas fb() una vez para obtener un desplazamiento. Lo sumas a las coordenadas. Evalúas fb() otra vez. El noise se distorsiona a sí mismo = formas fluidas.
PruebaCambia el 0.8 (amplitud del warp) a 0.1, apenas se dobla. A 2.0, se come a sí mismo. Ese número es tu perilla principal.

El código

void main(){
  vec2 p = gl_FragCoord.xy / R * 4.0;
  float warp = fb(p);
  float f = fb(p + warp * 0.8);
  float patch = smoothstep(0.40, 0.48, f);
  float crack = 1.0 - smoothstep(0.36, 0.40, f);
  float edge = smoothstep(0.40,0.42,f)*(1.-smoothstep(0.46,0.48,f));
  vec3 hide = vec3(0.92, 0.65, 0.28);
  vec3 dark = vec3(0.04, 0.02, 0.005);
  vec3 col = mix(dark, hide, patch);
  col *= 0.7 + 0.3 * f;
  col -= vec3(0.1, 0.05, 0.01) * crack;
  col += vec3(.08,.04,.01) * edge;
  col += vec3(.18,.12,.04) * pow(patch, 3.) * 0.6;
  gl_FragColor = vec4(col, 1.0);
}
close