Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Background webgl #421

Closed
wants to merge 6 commits into from
Closed

Background webgl #421

wants to merge 6 commits into from

Conversation

Thakisis
Copy link

@Thakisis Thakisis commented Mar 11, 2024

Descripción

Animación webgl de prueba con varios shaders mientras creo uno que se adapte a los temas oscuros y claro.

!!!No hacer merge tiene contenido adicional innecesario y no esta listo para producción faltaría detectar el reduce motion, una aparición gradual un fallback en caso de fallar webgl2 y webgl1 además quiero hacer pruebas con imágenes de los luchadores y efectos que se solapen con el svg.

Problema solucionado

Ruido lento usando contexto 2d

Cambios propuestos

Implementación de un sistema webgl que dibuja un rectángulo en la pantalla y pinta un shader de ruido, humo o cualquier otra cosa.

Shader1
Shader2
Shader4
Shader6

Comprobación de cambios

  • [ x] He revisado localmente los cambios para asegurarme de que no haya errores ni problemas.
  • [x ] He probado estos cambios en múltiples dispositivos y navegadores para asegurarme de que la landing page se vea y funcione correctamente.
  • He actualizado la documentación, si corresponde.

Impacto potencial

El dibujado del canvas webgl es asíncrono así que no se puede medir el tiempo correctamente pero el tiempo de bloqueo del hilo principal no supera los 0.1 milisegundos, aun así, si presentase algún problema en el hilo principal puedo transferir el control del canvas a un worker .

Contexto adicional

Los shaders usados no son míos pero si he modificado un par de ellos el de ruido para permitir colores y el del flare para que este siga al raton. Mi intento es implementar uno propio cuando sepa si se va a usar y si se prefiero ruido o humo.

Para visualizar los 8 shaders y tener el debug he leído dos parámetros de search uno de ellos es shader=[1-8] y el otro es debug=true (para ver el frametime draw time y fps)

Además el shader 2 que esta en scripts/shader/flare.ts tiene 5 variantes para visualizarlas hay que cambiar
//change this value (1 to 5) or tweak the settings yourself. //the gamma and spot brightness parameters can use negative values #define TYPE 4 <-------- el tipo ahí #if TYPE == 1
PD: puedo vincular un parametro del shader al scroll y hace cambios pasar de un shader a otro hacer que scrolleen pero suelen tener un poco de delay con respecto al dom sobre todo cuando se usa geometria (este no es el caso).

Enlaces útiles

el Humo generalmente se basa en movimientos fractales brownianos ahí hay varias implementaciones de esto y de varios tipos de ruidos, sdf y alguna cosa mas.
https://github.com/patriciogonzalezvivo/lygia

Un sitio web creado por el español Iñigo Quilez donde la gente sube shaders que generan imágenes usando imágenes y formulas matemáticas.
https://www.shadertoy.com/

Libro Book of Shader
viene con editor de shaders para ir practicando.

  • Documentación del proyecto:
    quadprocess

  • Código de referencia:

Copy link

vercel bot commented Mar 11, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
la-velada-web-oficial ✅ Ready (Inspect) Visit Preview 💬 Add feedback Mar 12, 2024 3:06pm

const vp_size = [window.innerWidth, window.innerHeight]
canvas.style.background = "black"
canvas.style.width = "100vw"
canvas.style.height = "100vh"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

¿No es mejor '100dvh'?, para tener en cuenta la barra en los navegadores en móvil

Copy link
Author

@Thakisis Thakisis Mar 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

aun tengo que verlo en móvil solo vi una una versión temprana como ya he puesto no esta listo para produccion

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

quiero implementar otras funcionalidades como frame buffer para poder interactuar con el humo con una simulacion basica.

@Thakisis
Copy link
Author

Como no me gusta que la gente no entienda el codigo de lo que subo ahi va un diagrama que explica la creacion del quad con todas sus fases y como se puede dibujar est.
Stages

Cuando pueda creo una con los uniforms como se cambian estos y como se pueden crear uniforms para resolution, delta time, elapsed time o incluso scrollPosition para animar cosas sin alterar la geometria.

@joelmh-112 joelmh-112 added enhancement New feature or request diseño labels Mar 11, 2024
@AlejandroSuero
Copy link
Contributor

Dejo por aquí unas pruebas que se ven como se ralentiza en móvil con el código de producción y como se pixela con el preview de tu PR.

Tú sabrás mejor que yo el porque pasa esto y como puede solucionarse.

Producción:

3D-slow-performance-opt.mp4

Aquí el scroll se ralentiza cuando está la sección Hero visible, por las luces imagino.

Preview:

3D-pixelation-optimized.mp4

Aquí se ve la pixelación de la que hablo.

Mi experiencia con 3D en web es este pequeño proyecto, y me gustaría aprender un poco más de por qué suceden algunos de estos renderizados.

@Thakisis
Copy link
Author

Dejo por aquí unas pruebas que se ven como se ralentiza en móvil con el código de producción y como se pixela con el preview de tu PR.

Tú sabrás mejor que yo el porque pasa esto y como puede solucionarse.

Producción:

3D-slow-performance-opt.mp4

Aquí el scroll se ralentiza cuando está la sección Hero visible, por las luces imagino.

Preview:

3D-pixelation-optimized.mp4

Aquí se ve la pixelación de la que hablo.

Mi experiencia con 3D en web es este pequeño proyecto, y me gustaría aprender un poco más de por qué suceden algunos de estos renderizados.

No deberia pixelarse deberia verse borroso a menos que la configuracion del canvas este mal, la revisare, pero si borroso y posiblemente (mas bien casi seguro en pantallas retina) es por el DPR ahora mismo esta a 1 para ello el viewport hay que multiplicar cada dimension por el dpr.
// Obtenemos el DPR
const dpr = window.devicePixelRatio || 1;

// Ajustar la resolución en funcion del DPR
canvas.width = window.innerWidth * dpr;
canvas.height = window.innerHeight * dpr;

Pero eso en algunos casos puede ser letal.

"me gustaría aprender un poco más de por qué suceden algunos de estos renderizados."

La mejor forma es empezar en algo de mas alto nivel si sabes algun framework casi seguro que tienen una libreria para usar threejs de forma declarativa pero sin lugar a dudas el que esta a años luz del resto es react three fiber. Vercel lo suele usar en algunas de sus presentaciones.

https://docs.pmnd.rs/react-three-fiber/getting-started/examples

He metido un nuevo shader este ya bastante mas exigente .si me lo puedes probar añade eso a la url tienes hasta el 9
?shader=7&debug=true

@Thakisis
Copy link
Author

Thakisis commented Mar 12, 2024

Dejo por aquí unas pruebas que se ven como se ralentiza en móvil con el código de producción y como se pixela con el preview de tu PR.

Tú sabrás mejor que yo el porque pasa esto y como puede solucionarse.

Producción:

3D-slow-performance-opt.mp4

Aquí el scroll se ralentiza cuando está la sección Hero visible, por las luces imagino.

Preview:

3D-pixelation-optimized.mp4

Aquí se ve la pixelación de la que hablo.

Mi experiencia con 3D en web es este pequeño proyecto, y me gustaría aprender un poco más de por qué suceden algunos de estos renderizados.

Hice un prototipo de algo parecido
TshirtEditor
Seleciona la Prenda A es la unica funcional despue selecciona el los patrones son imagenes pregeneradas la 2y la 3 son parecidas. una vez seleccionada en el menu inferior editar cambia los colores te saldra cada zona de color esa si renderizada con threejs. veras que la 3 tiene menos zonas la preview del color es en tiempo real he generado mascas de la zona y le pongo una capa de color con un blend mode para que se vea la preview sin tener que hacer render.

cada patron es un SVG distinto que contiene cada capa con un Id de zona al cargar el patro pongo todas las zonas negras menos la que quiero generar y asi obtengo las mascaras para los colores. Si quieres te paso el repositorio.

https://sport-shop-prvr.vercel.app/editor

Ten en cuenta que eso fue en unos dias pq me pidieron asesoramiento sobre como hacerlo.

Si necesitas ayuda con algo pregunta por el discord de midu en js next o react suelo andar por ahi. este no es lugar para darte explicaciones.

@AlejandroSuero
Copy link
Contributor

Ya probé el shader=7 @Thakisis, casi me peta el móvil xD.

shader-7.mp4

En el Mac, va a unos 30 - 40 fps.

@AlejandroSuero
Copy link
Contributor

Dejo por aquí unas pruebas que se ven como se ralentiza en móvil con el código de producción y como se pixela con el preview de tu PR.
Tú sabrás mejor que yo el porque pasa esto y como puede solucionarse.
Producción:
3D-slow-performance-opt.mp4

Aquí el scroll se ralentiza cuando está la sección Hero visible, por las luces imagino.

Preview:
3D-pixelation-optimized.mp4

Aquí se ve la pixelación de la que hablo.

Mi experiencia con 3D en web es este pequeño proyecto, y me gustaría aprender un poco más de por qué suceden algunos de estos renderizados.

Hice un prototipo de algo parecido TshirtEditor Seleciona la Prenda A es la unica funcional despue selecciona el los patrones son imagenes pregeneradas la 2y la 3 son parecidas. una vez seleccionada en el menu inferior editar cambia los colores te saldra cada zona de color esa si renderizada con threejs. veras que la 3 tiene menos zonas la preview del color es en tiempo real he generado mascas de la zona y le pongo una capa de color con un blend mode para que se vea la preview sin tener que hacer render.

cada patron es un SVG distinto que contiene cada capa con un Id de zona al cargar el patro pongo todas las zonas negras menos la que quiero generar y asi obtengo las mascaras para los colores. Si quieres te paso el repositorio.

https://sport-shop-prvr.vercel.app/editor

Ten en cuenta que eso fue en unos dias pq me pidieron asesoramiento sobre como hacerlo.

Si necesitas ayuda con algo pregunta por el discord de midu en js next o react suelo andar por ahi. este no es lugar para darte explicaciones.

Está bastante chulo, más o menos esa idea tenía yo al empezar. Me pasaré por el discord a ver que tal.

@Thakisis
Copy link
Author

Ya probé el shader=7 @Thakisis, casi me peta el móvil xD.

shader-7.mp4

En el Mac, va a unos 30 - 40 fps.

Por suerte la api es asincrona por el eso del medido de GPU es inutil, pero se puede ver que la CPU no se bloquea, por eso me extraña el problema del scroll el renderer del navegador usa la GPU para ciertas cosas como video o si por ejemplo pones un transform 3d.

A mi ya no me va en el movil creo que mi telefono tiene algun problema con glsl version 300, aun asi ahora paro el trabajo en js y voy a ver si creo un shader que encaje con el diseño de la web y hare una PR eliminando lo que no se use y con el Typescript corregido pq suelo usar JS para three / r3f que es lo que suelo usar no soy de bajar al barro a menos que sea necesario. De todas formas hasta que este webgpu final en safari no veo que el 3d vaya a suponer un cambio mas alla de paginas de estudios especializados.

@Thakisis Thakisis closed this Mar 12, 2024
@Thakisis
Copy link
Author

Cierro la PR hasta que tenga el shader listo el codigo optimizado y listo para produccion. ya he visto el tipo de humo que hace falta

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
diseño enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants