El Motor de Píxeles Híbrido desarrollado en Rust
¡Hola a todos! Bienvenidos a un nuevo Devlog de Proyecto-Q. Hoy quiero sumergirlos en las entrañas de lo que estoy construyendo: un motor de simulación de píxeles (Falling Sand Engine) desarrollado en Rust, que busca llevar la interactividad a un nivel superior combinando mundos de arena con físicas de cuerpos rígidos tradicionales.
Estado del Proyecto: Actualmente me encuentro en una etapa temprana (calculo que falta un 89% del camino total), pero los cimientos que he puesto son lo que me permite decir con confianza que la escalabilidad está asegurada.
🎯 La Visión: Simplicidad que Genera Complejidad
La filosofía de Proyecto-Q no es programar mil materiales uno por uno. Mi enfoque ha sido pulir al máximo 4 comportamientos fundamentales (o "Pilares de Comportamiento"). Si estos 4 pilares funcionan a la perfección, crear "Fuego", "Ácido", "Aceite" o "Magma" se convierte simplemente en una pequeña modificación de valores en un archivo JSON.
🏛️ Los 4 Pilares de la Materia
1. Sólidos Dinámicos (La Roca)
A diferencia de otros motores de píxeles donde lo sólido es estático, aquí los sólidos son Cuerpos Rígidos (RigidBodies). Gracias a la integración con el motor de físicas Rapier2D, las estructuras sólidas tienen masa, rotación y pueden chocar entre sí mientras interactúan con los píxeles sueltos.
- (En este GIF se puede ver cómo un objeto sólido —una roca— cae con rotación física real, rebotando y aplastando el terreno).
El comportamiento clásico. Los píxeles buscan el camino más corto hacia abajo, pero con la capacidad de deslizarse diagonalmente si encuentran un obstáculo, formando pilas naturales con su propio ángulo de reposo.
(La arena fluyendo y acumulándose de forma natural, interactuando con la gravedad píxel a píxel).
3. Líquidos Hidrodinámicos (El Agua)
Los líquidos comparten la gravedad del polvo, pero añaden un factor de dispersión horizontal. Si no pueden caer, buscarán expandirse hacia los lados hasta encontrar un hueco o llenar un recipiente.
(Simulación de agua mostrando cómo fluye y se nivela automáticamente al llenar un espacio). "tengo problemas con el agua por ahora ya ves que parece agua miel".
Este es el comportamiento que estoy puliendo ahora (el que "me faltaba" para cerrar el cuarteto básico). Son materiales con gravedad invertida o flotabilidad extrema. De aquí derivarán el humo, el vapor, el fuego y cualquier elemento volátil.
🛠️ Arquitectura Técnica: Bajo el Capó
El motor está construido bajo el paradigma de Data-Oriented Design en Rust. Esto significa que priorizamos cómo se mueven los datos a través de la CPU para lograr un rendimiento masivo.
El Corazón: materials.json
Aquí es donde ocurre la magia. En lugar de escribir código para cada material, uso un sistema Data-Driven. Un material en Proyecto-Q se define de forma modular:
{
"name": "Aceite",
"density": 80,
"friction": 0.1,
"state": "Liquid",
"dispersion": 5,
"color": [100, 80, 20, 255]
}
¿Quieres crear "Arena de Oro"? Solo copia la arena, sube la densidad y cambia el color. El motor se encarga del resto. Como la densidad es dinámica, la arena (densidad 150) siempre se hundirá en el agua (densidad 100), desplazándola hacia arriba de forma realista.
🔗 Interacción Total
Lo que hace especial a Proyecto-Q es el conjunto. No son sistemas aislados. Los píxeles afectan a la roca y la roca afecta a los píxeles.
(El clímax de la simulación actual: una roca cayendo sobre una piscina de agua y arena, provocando salpicaduras y desplazamientos basados en masa y densidad).
🚧 El Camino al 100%: Hoja de Ruta
Como mencioné, apenas estamos en el 11% de la visión final. El camino por delante es ambicioso pero claro:
🌐 Generación de Mundo Procedural (30%): Creación de biomas y cavernas infinitas usando ruido de Perlin/Simplex.
🧪 Sistema Químico y Reacciones (20%): Termodinámica real. Fuego que quema madera, agua que apaga fuego, vapor que se condensa.
🧠 IA de Entidades (25%): Criaturas que puedan navegar por este mundo pixelado y reaccionar a los cambios del terreno.
⚡ Optimización Multihilo (14%): Dividir el mundo en Chunks más eficientes para permitir millones de píxeles activos a la vez.
Conclusión
Proyecto-Q es un experimento sobre cómo la simplicidad en las reglas básicas puede llevar a una complejidad emergente infinita. Al pulir estos 4 comportamientos base, el resto del universo se construye casi solo.
¡Gracias por acompañarme en este viaje! No olviden dejar sus comentarios y sugerencias para el próximo Devlog.
Publicado originalmente por Maikol Gabriel en el Devlog oficial de Proyecto-Q.
0 Comentarios