ProyectosExperimentos

Acreción

Un experimento con WebGPU para probar rocas modeladas en Blender: una roca gira en un estudio oscuro, otras más chicas caen sobre ella y se quedan pegadas, y otros quedan orbitando alrededor.

Estado
Finalizado
Periodo
2026.10
Tipo
Experimento
Rol
Proyecto individual, Desarrollo 3D, Física y simulación, Modelado 3D
Tecnologías
  • Three.js
  • WebGPU
  • TSL
  • Rapier
  • Vite
  • Blender
Log de desarrollo
3 entradas

Demo interactiva

Arrastrá para girar la cámara y usá la rueda para acercarte. Pasá el puntero sobre las rocas para moverlas. El panel Controls cambia cómo caen las rocas (gravedad, amortiguación, agarre, rebote, fricción) y cómo orbitan los guijarros; Launch repite la secuencia. Necesita un navegador con WebGPU.

Descripción técnica

  • Render: WebGPURenderer de Three.js r186, con el post-procesado escrito en TSL: bloom, FXAA y un fondo con dithering. Un mapa de entorno procedural de estudio nocturno, más una luz principal y una de contorno, ambas con sombras.
  • Física: Rapier. Cada fragmento es un cuerpo con un convex hull calculado de sus propios vértices; la roca principal usa sus triángulos reales. No hay gravedad global: cada frame, cada fragmento es atraído hacia el centro.
  • Pegarse: un fragmento que se queda quieto tocando algo fijo durante un par de segundos pasa a ser un cuerpo fijo, y los siguientes se pueden apilar encima.
  • Girar juntos: el mundo físico vive en el espacio del pivote de la roca, así que lo que se pega gira con ella sin cálculos extra.
  • Golpes: cada impacto empuja e inclina el pivote en proporción al momento que perdió el fragmento, y un muelle amortiguado lo devuelve a su lugar. Es solo visual: en la física la roca no se mueve.
  • Órbitas: cada guijarro sigue una elipse con la roca en un foco, a la que llega en espiral desde fuera de la pantalla. Son cuerpos de Rapier movidos por su velocidad, así que se apartan cuando algo se cruza y después vuelven a su carril.
  • Rocas: modeladas en Blender y exportadas como GLB, comprimidas con meshopt y con las texturas en WebP. Cada modelo se dibuja como un InstancedMesh.

Resultados y limitaciones

  • Corre en navegadores con WebGPU. Three.js cae a WebGL 2 si no lo hay, pero ese camino no está probado.
  • Que una roca se pegue es una regla, no un pegamento físico: queda fija cuando deja de moverse.
LOG

Log de desarrollo

  1. Una demo para probar las rocas

    La demo publicada, con un panel para que cualquiera cambie cómo caen y orbitan las rocas.

  2. Golpes, órbitas y el puntero

    La roca reacciona a cada golpe, unas rocas pequeñas quedan orbitando y el puntero puede mover las rocas.

  3. Rocas que caen y se pegan

    La roca en un estudio oscuro con WebGPU, y los primeros fragmentos que caen sobre ella y se quedan pegados.