El proyecto 'safe-sand' simula entre 100,000 y 460,000 granos de arena individuales directamente en la pantalla de un dispositivo móvil utilizando WebGL2. Al calcular la física en unidades del mundo real —como milímetros para el tamaño y 9.81 m/s² para la gravedad—, la simulación garantiza que la velocidad y el retraso del movimiento de la arena coincidan con la realidad física.
Física y renderizado visual
Cada grano en la simulación se trata como una entidad individual con propiedades físicas específicas. Los granos aislados están programados para rodar y deslizarse, mientras que la arena en masa se comporta como una masa cohesiva que se mantiene unida hasta que la inclinación del dispositivo supera el ángulo de reposo específico de la arena.
Para lograr profundidad visual, el sistema construye un campo de altura a partir de los granos en cada fotograma. Este campo proporciona los datos necesarios para las fuerzas de pendiente y la oclusión ambiental, mientras que la dirección de la luz se sincroniza con la inclinación del teléfono, haciendo que las sombras se alarguen y los granos de cuarzo brillen a medida que el usuario mueve el dispositivo.
“Se simulan entre 100k y 460k granos individuales en la GPU (WebGL2) en unidades reales (milímetros, 9.81 m/s²), por lo que la velocidad a la que se mueve la arena y cuánto se retrasa coincide con la cosa real.”
— GitHub - av/safe-sand: Hyper-realistic sand on your phone screen (WebGL2)
Audio granular sintetizado
En lugar de utilizar muestras pregrabadas, el proyecto sintetiza audio granular basado en el movimiento de la arena. Genera miles de pequeños clics resonantes por segundo en el rango de 2 a 8 kHz para simular arena deslizante, mientras utiliza clics dispersos de menor frecuencia para las piedras e impactos más brillantes para la acción de vertido.
El sistema está diseñado para la precisión; cuando no hay arena en movimiento, la salida de audio es exactamente silenciosa. El sonido también se mezcla con cualquier música que ya se esté reproduciendo en el dispositivo, y el interruptor de silencio en los iPhones silencia la salida.
Escalado de rendimiento y restricciones
Para garantizar que la simulación siga siendo jugable en diversos tipos de hardware, la aplicación supervisa la tasa de fotogramas. Si el navegador limita la tasa de fotogramas (como en el Modo de bajo consumo de iOS), la aplicación primero renderiza fotogramas inactivos para verificar el límite antes de reducir la calidad.
Si se detecta una sobrecarga de rendimiento real, la aplicación reduce la relación de píxeles del dispositivo en pasos (de 3 a 2 a 1.5) y posteriormente reduce la cantidad de granos. Estos ajustes de calidad se recuerdan para visitas futuras, con el sistema intentando un ajuste ligeramente más optimista cada vez.
Qué dicen los lectores de Hacker News
- Nota técnica: Un comentarista señaló que la simulación carecía de un impulso realista, observando que la arena se detenía demasiado abruptamente y caía demasiado rápido. comentario ↗
- Nota técnica: Otro usuario expresó escepticismo respecto al realismo, señalando que la arena parecía quedarse atascada en el aire y las piedras no lograban rotar. comentario ↗
- Nota técnica: Un comentarista informó haber experimentado problemas técnicos donde la animación se distorsionaba y la arena desaparecía por completo en un navegador móvil. comentario ↗
Resumen de opiniones del hilo de Hacker News; no son hechos verificados. Leer el debate completo ↗
