Quieres recrear en Unity ese extraño eco cósmico visual expandible que pulsa desde una galaxia lejana y un sonido de radio repetitivo que suena no natural. Te explico desde cero y paso a paso, con las herramientas más actuales (Unity, Blender, FMOD) para que termines con una escena interactiva donde las ondas visuales y el audio están sincronizados y listos para exportar.
Herramientas y versiones recomendadas
Instalas Unity 6 (familia 6.x, preferiblemente la LTS disponible) como Editor principal para aprovechar las últimas mejoras de rendimiento y pipeline.
Modelas activos y creas texturas/meshes en Blender 4.5 LTS para estabilidad en producción.
Para el audio, añades FMOD (integración FMOD for Unity) o usas el sistema de audio de Unity con un spatializer externo según necesites; FMOD facilita diseñar patrones repetitivos complejos.
Para gráficos, URP es la opción práctica para rendimiento y compatibilidad; HDRP sirve si buscas máximo realismo y tienes hardware potente.
Unity Documentación
Resumen del flujo de trabajo antes de empezar
Vas a: crear proyecto en Unity / preparar assets en Blender / configurar URP y VFX Graph / Shader Graph / diseñar efecto de pulso visual / generar efecto sonoro en FMOD o dentro de Unity / sincronizar audio y visual mediante parámetros (C# o eventos FMOD) / optimizar y exportar.
Paso a paso detallado (lista simple con acciones concretas)
Crear proyecto: Abres Unity Hub y creas un proyecto nuevo con plantilla URP (Unity 6 LTS). Configuras nombre, ruta y control de versiones (git con .gitignore para Unity).
Preparar assets en Blender: Modelas un punto emisor (pequeña sonda o antena) y exportas como FBX/glTF (aplica transformaciones; escala 1 = 1 metro). Guarda texturas en PNG/EXR.
blender.org
Importar a Unity: Importas paquete URP, instalas Visual Effect Graph y Shader Graph desde Package Manager; importas FMOD for Unity si vas a usar FMOD.
assetstore.unity.com
Escena base: Creas una cámara con espacio profundo (far plane alto), añades un skybox estelar HDRI y un volumen de post-procesado (exposición y bloom suaves).
Starfield y nebula: Montas un sistema de partículas para estrellas (shuriken o VFX Graph) y una nube volumétrica con VFX Graph o un particle shader en Shader Graph para la nebulosa, usando gradientes y ruido 3D.
Crear pulso visual: En VFX Graph o con un Shader Graph aplicado a un quad esférico, generas un expander radial controlado por un parámetro [PulseTime] y una curva (smoothstep + sin) para que cada pulso se expanda, desvanezca y deje un halo. Controlas velocidad, intensidad y ancho del anillo desde C#.
Script de control (sincronización): Añades un script C# que expone parámetros (pulseRate, pulsePattern, loudness) y actualiza el material/VFX: material.SetFloat("_PulseTime", Time.time * speed); Para patrones complejos cargas una secuencia binaria o un archivo JSON con timesteps.
Audio: Diseñas el eco en FMOD Studio como un evento con varios layers: carrier (ruido filtrado), pulsos (sine/filtered clicks), delay/feedback para la repetición y un low-pass para darle textura radio. Expones un parámetro de intensidad (0–1) para controlar la amplitud del evento desde Unity.
Spatial y filtros en Unity: Si no usas FMOD, en Unity creas un AudioSource 3D con filtros (Audio Low Pass, Echo, Reverb Zone) y usas un spatializer plugin si quieres HRTF/occlusion. Activas 3D sound y ajustas rolloff para que la señal suene distante y espacial.
Unity Documentación
Sincronizar audio/visual: Usas el mismo script para disparar parámetros visuales y el evento de audio a la vez. Si usas FMOD, llamas al evento FMOD y ajustas su parámetro para que la animación del shader lea el mismo valor (por ejemplo, pulsePhase). Esto asegura que cada pulso visible tenga su pulso audible.
Analítica visual (opcional): Para mostrar que la señal no cuadra, generas una UI con un espectrograma simple que se alimenta del audio (AudioSource.GetSpectrumData) y lo dibujas en un Texture2D o UI. Esto da realismo de laboratorio.
Optimización y build: Reduces overdraw (limitando partículas), usa instancing, occlusion culling si hay geometría, y configura calidad URP (shadow resolution, render scale). Haces builds para Standalone o WebGL (si eliges WebGPU revisa compatibilidad).
Snippets útiles (muy cortos y claros)
Usas este patrón para empujar el tiempo al shader (C#):
Código:
[SerializeField] Material pulseMat;
[SerializeField] float speed = 1f;
void Update() {
pulseMat.SetFloat("_PulseTime", Time.time * speed);
}
Y para disparar un evento FMOD:
Código:
FMODUnity.RuntimeManager.CreateInstance("event:/CosmicEcho").start();
FMODUnity.RuntimeManager.StudioSystem.setParameterByName("EchoIntensity", intensity);
(Instalas FMOD for Unity y enlazas el evento desde el inspector).
Pruebas, ajuste y validacion
Pruebas básicas: ajustas pulseRate y escuchas en auriculares para verificar espacialidad; revisas el espectrograma en tiempo real y comparas visuales. Iteras bajando partículas si el framerate cae. Para sincronía fina, dispara audio y visual desde la misma coroutine o evento, y añade un pequeño offset en ms si notas desfase.
Exportación y entrega final
Compilas un build (Standalone Windows/Mac o WebGL). Si usas FMOD, empaquetas el banco de audio en la carpeta Assets/StreamingAssets o configuras FMOD para cargar en tiempo de ejecución. Documentas parámetros ajustables en un README para que cualquiera pueda cambiar ritmo o timbre sin tocar código.
Consejos rápidos y problemas comunes
- Si el pulso no se ve, aumenta la exposición/bloom o la intensidad del shader.
- Si el audio llega desincronizado en builds WebGL, prueba ajustar sample rate o usar FMOD en modo streaming.
- Si el VFX Graph no compila en URP, revisa la versión del package y la compatibilidad con Unity 6 (usa el Package Manager).
Al final quizás logres que la señal suene tan convincente que hasta tu vecino piensa que alguien está intentando contactar con él… y lo único que te esté llamando es el router con eco.