Post Effects

Posteffects #

Los posteffects en imágenes con shaders son técnicas que se utilizan para aplicar efectos visuales o transformaciones a una imagen utilizando shaders. Un shader es un programa informático que se ejecuta en la unidad de procesamiento gráfico (GPU) y se utiliza para manipular los píxeles de una imagen o superficie en tiempo real.

Implementación de Posteffects #

Para implementar posteffects en imágenes con shaders, se requiere un entorno de programación que admita el uso de shaders, como p5.js. A continuación, se muestra un ejemplo de cómo se puede aplicar un efecto de desenfoque, escala de grises e inversión de colores a una imagen utilizando shaders en p5.js:

posteffects.js
gray.frag
precision mediump float;


uniform sampler2D uTexture;

void main() {
  vec4 color = texture2D(uTexture, gl_FragCoord.xy / uResolution.xy);
  float gray = dot(color.rgb, vec3(0.299, 0.587, 0.114));
  gl_FragColor = vec4(vec3(gray), color.a);
}
gray.vert
precision mediump float;


attribute vec3 aPosition;
attribute vec2 aTexCoord;

varying vec2 vTexCoord;

void main() {
  vTexCoord = aTexCoord;
  gl_Position = vec4(aPosition, 1.0);
}

}
posteffects.js
let img;
let shaderBlur, shaderGray, shaderInvert;

function preload() {
  img = loadImage('/showcase/imgs/paisaje.jpg'); // Reemplaza 'tu_imagen.jpg' con la ruta de tu imagen
  shaderBlur = loadShader('/showcase/sketches/shaders/blur.vert', '/showcase/sketches/shaders/blur.frag');
  shaderGray = loadShader('/showcase/sketches/shaders/gray.vert', '/showcase/sketches/shaders/gray.frag');
  shaderInvert = loadShader('/showcase/sketches/shaders/invert.vert', '/showcase/sketches/shaders/invert.frag');
}

function setup() {
  createCanvas(800, 600, WEBGL);
  noLoop();

  shader(shaderBlur); // Aplica el shader de Blur por defecto
  shaderBlur.setUniform('uResolution', [width, height]);
  shaderBlur.setUniform('uBlurAmount', 5.0); // Ajusta la cantidad de desenfoque

  image(img, -width / 2, -height / 2, width, height);
}

function draw() {
  background(0);

  // Crea las casillas de verificación
  checkboxBlur = createCheckbox('Blur', false);
  checkboxBlur.position(10, 10);
  checkboxBlur.changed(shader(shaderBlur));
  shaderBlur.setUniform('uResolution', [width, height]);
  shaderBlur.setUniform('uBlurAmount', 5.0); // Ajusta la cantidad de desenfoque

  checkboxGray = createCheckbox('Gray', false);
  checkboxGray.position(10, 30);
  checkboxGray.changed(shader(shaderGray));
  shaderGray.setUniform('uResolution', [width, height]);

  checkboxInvert = createCheckbox('Invert', false);
  checkboxInvert.position(10, 50);
  checkboxInvert.changed(shader(shaderInvert));\
  shaderInvert.setUniform('uResolution', [width, height]);


  rect(-width / 2, -height / 2, width, height); // Dibuja un rectángulo para aplicar el shader
}

En este ejemplo, se carga una imagen específica utilizando loadImage(). Luego se cargan los shaders necesarios utilizando loadShader(). Se establece el shader de desenfoque como el shader predeterminado utilizando shader(shaderBlur), y se ajustan los parámetros del shader con shaderBlur.setUniform(). Se muestra la imagen original en el lienzo utilizando image(). Luego, se crean casillas de verificación para habilitar o deshabilitar los diferentes efectos. Cuando se cambia el estado de una casilla de verificación, se activa el shader correspondiente y se ajustan sus parámetros si es necesario.