Souls Like: Desarrollo de un Videojuego en Unity
Importancia de la optimización en el desarrollo de videojuegos
Durante la fase de preproducción y preparación técnica para el desarrollo de nuestro videojuego, fue necesario realizar una investigación exhaustiva sobre las estrategias de optimización aplicables tanto a dispositivos móviles como a sistemas Windows. La necesidad de optimizar surge no solo por la diversidad del hardware, sino también por las limitaciones inherentes a cada plataforma. Los dispositivos móviles, por ejemplo, suelen contar con procesadores menos potentes, memoria restringida y limitaciones térmicas más estrictas. En contraste, Windows ofrece mayor capacidad, pero exige una correcta administración de recursos para mantener altas tasas de fotogramas y evitar cuellos de botella. Por esta razón, la optimización se convierte en un requisito fundamental para asegurar una experiencia de juego fluida, estable y eficiente.
Modularidad y diseño basado en componentes reutilizables
Una de las técnicas centrales identificadas en nuestra investigación fue la modulación o diseño modular, que consiste en dividir los escenarios y objetos del juego en piezas independientes que pueden reutilizarse dinámicamente. Este enfoque no solo reduce el peso del proyecto, sino que también disminuye el número de assets que deben cargarse simultáneamente en memoria. La modularidad facilita la construcción de niveles complejos sin aumentar significativamente la carga de procesamiento o el tamaño del ejecutable. Además, permite reutilizar geometrías, texturas y materiales, lo que resulta especialmente útil cuando se busca lanzar el mismo título en plataformas con capacidades gráficas distintas. En motores como Unity, la modularidad también habilita el uso de instancing para renderizar múltiples copias de un mismo objeto de forma eficiente.
Occlusion Culling y reducción del coste de renderizado
Otra técnica clave fue el occlusion culling, una estrategia que evita renderizar objetos que se encuentran ocultos detrás de otros y que, por lo tanto, no son visibles para la cámara. Sin este tipo de optimización, el motor gráfico procesaría geometrías innecesarias, generando un consumo elevado de GPU y reduciendo considerablemente el rendimiento. En nuestras pruebas y análisis se evidenció que el uso adecuado del occlusion culling permite mantener tasas de fotogramas más estables y liberar recursos del pipeline de renderización. Esta técnica se vuelve indispensable en escenarios amplios o con muchos elementos estructurales, como edificios modulares, interiores complejos o niveles urbanos, donde existen múltiples capas de objetos superpuestos. Su implementación adecuada contribuye directamente a mejorar la fidelidad gráfica sin sacrificar rendimiento.
Consideraciones de rendimiento multiplataforma
La investigación también nos permitió comprender que optimizar para múltiples plataformas implica tomar decisiones equilibradas entre calidad visual y eficiencia. Para dispositivos móviles, por ejemplo, se requieren modelos de baja cantidad de polígonos, texturas comprimidas y sistemas de iluminación simplificados. En cambio, la versión para Windows puede aprovechar hardware más potente, permitiendo resoluciones superiores, sombras en tiempo real y efectos avanzados. Sin embargo, incluso en esta plataforma, un rendimiento óptimo no es opcional: sin una buena gestión de recursos, el juego puede presentar caídas en FPS, tiempos de carga excesivos y consumo de memoria innecesario. Por esta razón, la optimización debe ser vista como una práctica continua durante todo el ciclo de desarrollo, no como un ajuste final ejecutado al terminar el proyecto.
Impacto de la optimización en la experiencia del jugador
Finalmente, nuestra revisión documental evidencia que la optimización no solo beneficia al rendimiento técnico, sino que también mejora la experiencia del usuario. Un videojuego estable, con tiempos de respuesta adecuados y sin fluctuaciones de frame rate, genera una percepción más profesional, aumenta la inmersión y fortalece la retención del jugador. Por ello, las técnicas mencionadas como la modularidad, el occlusion culling y otras que contemplamos en nuestra investigación se convierten en elementos esenciales para alcanzar un producto final competitivo y técnicamente sólido.
Assets necesarios y optimización del escenario de las catacumbas
Durante la construcción del escenario correspondiente al segundo nivel, un sistema de catacumbas, nos enfrentamos a un problema crítico de rendimiento que evidenció la importancia de diseñar y estructurar adecuadamente los assets antes de integrarlos en Unity. Inicialmente, el escenario había sido desarrollado como una única pieza completa, con un solo material y un mapa de texturas horneado (baked) en resolución 4K. Sin embargo, a pesar de contar con un mapa de alta calidad, el rendimiento en nuestras computadoras personales era considerablemente bajo, mientras que en las máquinas de la universidad el comportamiento era apenas aceptable. Esta discrepancia nos generó inquietud y nos llevó a investigar las causas subyacentes del bajo desempeño.
El primer paso fue aplicar una descomposición modular del entorno, dividiendo el mapa de las catacumbas en piezas independientes que luego ensamblaríamos directamente en Unity. El objetivo era reducir el peso de la escena, facilitar el uso de técnicas como el occlusion culling y permitir que el motor reutilizara geometrías mediante instancing. Sin embargo, para nuestra sorpresa, esta primera versión modular no mostró ninguna mejoría significativa frente al escenario original. Incluso cuando habíamos reducido las texturas de 4K a 2K, la diferencia en rendimiento era prácticamente inexistente, lo que indicaba que el problema tenía un origen más profundo que la simple resolución de texturas.



Tras un análisis más detallado, determinamos que los principales responsables del bajo rendimiento no eran las texturas ni los materiales, sino la complejidad geométrica de los modelos. Durante la fase de modelado, varios elementos del escenario conservaban modificadores activos, especialmente Subdivision Surface y Bevel, los cuales incrementaban drásticamente la cantidad de polígonos generados. Esto significa que, aunque visualmente la escena pareciera simple, en realidad contenía miles de tris y quads innecesarios, sobrecargando tanto la GPU como la etapa de renderizado en Unity. No importaba cuántas texturas redujéramos o cuántos módulos creáramos: el verdadero cuello de botella estaba en la geometría.
El proceso de optimización final consistió en aplicar o eliminar por completo los modificadores, simplificar la topología de los modelos y remover vértices, segmentos y uniones que no aportaban nada estructural al diseño. Cada módulo fue revisado uno a uno hasta dejar únicamente la geometría indispensable para mantener la forma visual. Al reimportar todos los modelos en Unity, el resultado fue inmediato: la tasa de fotogramas aumentó de forma notable, la escena se volvió mucho más ligera y finalmente pudimos aplicar técnicas de optimización como el occlusion culling con total eficacia.
Esta experiencia nos permitió entender que, en escenarios complejos, exportar un entorno como un único objeto con una textura gigante puede resultar contraproducente. En cambio, optar por assets modulares, geometría optimizada y una topología limpia no solo mejora el rendimiento, sino que facilita la escalabilidad del proyecto y su mantenimiento a largo plazo. De este modo, logramos transformar una escena inicialmente problemática en un nivel funcional, eficiente y compatible tanto con dispositivos móviles como con equipos de escritorio.
Selección de la versión de Unity y configuración inicial del proyecto
El equipo decidió trabajar con una versión estable de Unity que garantizara compatibilidad con los paquetes esenciales del proyecto (URP, navegación, animaciones, UI, etc.). Tras evaluar opciones, se eligió una versión actual y confiable de Unity que ofreciera soporte continuo y herramientas necesarias para el despliegue multiplataforma.
Cada integrante instaló la misma versión del editor para evitar problemas de incompatibilidad, cambios en la estructura de librerías o conflictos al abrir escenas y prefabs compartidos.
Intento de trabajo colaborativo con GitHub Desktop
Inicialmente, el equipo buscó trabajar de forma totalmente colaborativa utilizando GitHub Desktop. La idea era que todos pudiéramos:
Clonar el mismo repositorio.

Trabajar simultáneamente sobre el proyecto.

Subir cambios de forma ordenada.
Unificar escenas, scripts y assets sin sobrescribir trabajo ajeno.
Sin embargo, la coordinación resultó más compleja de lo previsto. Unity genera múltiples archivos internos, meta-ficheros y carpetas dependientes del sistema. Esto provocó:
Conflictos constantes al modificar la misma escena.
Archivos doblados o sobrescritos accidentalmente.
Dificultad para revisar cambios en carpetas grandes.
Problemas al unir el trabajo de modelado, scripts y UI en un solo flujo.
Pese a los esfuerzos por organizar ramas y commits, el proceso terminó siendo más costoso que productivo, por lo que decidimos replantear el método de trabajo.
División del proyecto por responsabilidades específicas
Para evitar bloqueos y conflictos en GitHub, definimos un pipeline de trabajo basado en roles. Cada integrante se encargó de un área específica, lo que permitió avanzar con mayor estabilidad.
Integración general y flujo del juego en Unity
Felipe se centró en asegurar que todos los componentes del juego pudieran ensamblarse correctamente. Sus tareas incluyeron:
Configurar el flujo de operabilidad del proyecto dentro de Unity.
Conectar los niveles, incluso cuando eran escenarios de prueba.
Implementar los Canvas, botones, menús, créditos e interfaz general.
Garantizar que la navegación entre escenas funcionara sin errores.
Definir el pipeline de trabajo para que el ensamblado final fuera posible.
Su aporte fue fundamental para que el resto del equipo entendiera cómo debía estructurarse cada aporte antes de ser integrado al juego.
Diseño de escenarios y programación de IA
Christian asumió la responsabilidad de construir los niveles 1 y 3:
Utilizó assets libres de uso y modelos descargados para componer ambos escenarios.
Configuró la IA del único enemigo presente en el nivel 1.
Ajustó posiciones, colliders, iluminación base y distribución general de los elementos.
Preparó las escenas para que pudieran integrarse al flujo del juego sin afectar rendimiento.
En el caso del nivel 3, el escenario provenía de un asset externo tipo volcán/arena de batalla, cuyo diseño era único, por lo que la modularidad no fue necesaria.
Modelado, modularidad y optimización de geometría
Sebastian se encargó del rendimiento del proyecto:
- Descomponer modelos propios y de uso libre en módulos reutilizables.
- Revisar topología, eliminar polígonos innecesarios y corregir geometría pesada.
- Preparar cada módulo para ser instanciado en Unity y evitar cuellos de botella.
- Determinar qué partes podían modularizarse y cuáles no.
- En escenarios como el nivel 1 y 2, identificar estructuras repetibles (paredes, columnas, arcos, pasillos) y convertirlas en módulos optimizados.
- Encargarte también de la ambientación e iluminación para unificar el estilo visual de cada nivel.





Gracias a esto Unity pudo manejar los escenarios de forma mucho más eficiente.
Creditos:
Autor: Juan Sebastián Dávila Galvis, Juan Felipe Davila Galvis, Christian Camilo Méndez Pulido
Editor: Carlos Iván Pinzón Romero
Código: UCMV-10
Universidad: Universidad Central
Referencias:
Brackeys. (2020, junio 28). How to optimise your Unity game with occlusion culling [Video]. YouTube. https://www.youtube.com/watch?v=O_S2OUrez_E
Desarrollo Videojuegos. (2020, octubre 12). Occlusion culling en UNITY – Desarrollo videojuegos [Video]. YouTube. https://www.youtube.com/watch?v=0lp8KxvkNww
GameDevTraum. (2022, marzo 18). Optimizacion de videojuegos con OCCLUSION CULLING en Unity [Video]. YouTube. https://www.youtube.com/watch?v=18KMqxJlhmw
Kaizen Gamedev. (2019, febrero 3). Optimizar tu juego – posibles formas en Unity [Video]. YouTube.
https://www.youtube.com/watch?v=j-efIcZY5ro
Sykoo. (2020, abril 14). Unity game optimization tutorial [Video]. YouTube.
https://www.youtube.com/watch?v=XWhPeXqw1R8
