En noviembre de 2022, lanzamos un proyecto paralelo en mi empresa, un videojuego llamado Cuprum 2929. Como me encanta Linux (siendo usuario completo desde 2009) y soy el propietario de la empresa, tomé la audaz decisión de desarrollarlo íntegramente en Linux. Si bien esto es cierto en gran medida, debo aclarar que no desarrollamos todo en el sistema operativo Linux, pero alrededor del 95% lo hace, lo cual sigue siendo impresionante en mi opinión.
En el artículo siguiente, entraré en detalles sobre nuestras elecciones, nuestra configuración, cómo ayudamos a algunas partes del ecosistema a soportar mejor Linux y por qué algunos trabajos no se pudieron realizar en Linux. También compartiré algunos consejos y trucos que descubrí yo mismo para mejorar la experiencia y desbloquear algunas funciones que pueden no estar disponibles en la versión UE Linux, y cómo aprovecharlas al máximo.
Tabla de Contenidos
Configurando Unreal Engine
Como ocurre con muchas cosas en el sistema operativo Linux, hay varias formas de hacerlo. Si tienes intención de desarrollar tu videojuego en Linux, te voy a ofrecer lo mejor que nos ha funcionado hasta ahora. Si quieres experimentar tú mismo, puedes seguir guía para el motor irrealque sería superfluo repetir aquí.
Después de probar varias formas, el mejor flujo para nosotros (que se volverá cada vez más claro a medida que avance en este artículo) es crear su propia bifurcación de Unreal Engine. Para acceder al código fuente de Unreal Engine como se describe en el tutorial anterior, también puedes bifurcarlo.
Dado que el proyecto Unreal Engine tiene un tamaño enorme, solo tenemos una copia de la última confirmación (git clone –profundidad=1). Pero ¿por qué esforzarse tanto?
Más adelante verás que hacemos cambios en el código, creamos complementos que no están disponibles para Linux en la tienda de Unreal Engine y tenemos una forma sincronizada para que todos usemos el mismo motor con los mismos complementos disponibles.
El proceso de creación de UE desde la fuente no es diferente si tienes tu propia bifurcación y ya la proporciona Epic Games. Aquí .
Usar complementos de terceros
enlace en vivo
Nos encontramos experimentando con escenas/cinemáticas al principio de nuestro proyecto. La parte clave era hacer que el diálogo de los personajes fuera realista, así que intentamos usar LiveLink. Era mayo de 2023 y descubrimos que muchos complementos no estaban disponibles en la versión de Linux. Después de examinar un poco el código, descubrimos que podíamos intentar habilitar estos complementos con alguna configuración y reconstruir el motor.
¡Todo funcionó sin problemas y todo el código compilado! También creamos una prueba de concepto con una pantalla de presentación usando Metahumans y Quixel Bridge. Más tarde, estos complementos estuvieron disponibles de forma predeterminada en Linux, por lo que ahora no es necesario cambiar nada.
Luego enviamos el código a nuestra bifurcación y lo pusimos a disposición de nuestros tres desarrolladores.
Puente Kiksel
Quixel Bridge está disponible cuando se construye UE desde la fuente. Sin embargo, no estaba disponible cuando utilizamos alguno de los archivos binarios prediseñados proporcionados. Parece estar disponible ahora, pero es posible que no siempre esté disponible para la última versión.
Traje elegante
En el invierno de 2023 compramos un Rokoko Smartsuit y guantes. Se trata de un traje con sensores que te permite crear animaciones rápidamente usando un traje y guantes. Lo compramos sabiendo que Linux no es compatible, pero queríamos hacerlo de esta manera, sólo por diversión (y porque puedo tener problemas para controlar mi enojo cuando la gente me dice que algo no funciona en Linux, ¡pero tal vez!).
El primer problema fue que Rokoko Studio, el software con el que interactúas para usar el traje y crear animaciones, a pesar de trabajar con Wine, no reconocía el hardware para el emparejamiento inicial (conexión USB). Pasé de 3 a 4 días jugueteando con el código fuente de Wine, pero parecía mucho trabajo.
Por suerte, compramos una Mac debido a las necesidades de otro proyecto en el que cierto estudio de videojuegos educativos no podía ejecutar Linux de forma fiable. Luego hicimos el emparejamiento inicial a través de la Macbook (el resto de la conexión es inalámbrica). Así es como funcionó:
- Conecta el traje y los guantes vía USB (uno a la vez).
- Configure la dirección IP de Studio en su máquina Linux (ejecutando Wine).
- Asigne una dirección IP de LAN estática a la máquina Linux para no tener que repetir este emparejamiento.
Todas las demás funciones de Rokoko Studio funcionan perfectamente en Linux.
Luego nos topamos con otro problema. El complemento Rokoko Smartsuit no estaba disponible para Linux. Nosotros relaciones públicas proporcionadas que amablemente se ha combinado con todos los cambios necesarios para que sea compilable y utilizable en Linux (junto con algunas correcciones de errores). Desde entonces nuestra integración ha funcionado a la perfección.
Colaboración multiplataforma
Debido a que crear un videojuego es una tarea que involucra múltiples disciplinas y la gestión de necesidades a menudo a corto plazo (como crear animación técnica o programación personalizada), necesitamos los servicios de contratistas a corto plazo. Por lo tanto, no podemos esperar que todos los contratistas utilicen la misma configuración que nosotros.
Para trabajar juntos, debemos asegurarnos de que estamos usando la misma versión de Unreal Engine (hasta el nivel de parche). Entonces no importa si tenemos cambios adicionales que no afecten su núcleo.
Cuando abra un proyecto que se realizó en otra plataforma, recibirá un mensaje pidiéndole que convierta u omita la conversión. Trabajos de conversión in situ (instale el control de versiones antes de hacer esto.).
Sistema de control de versiones (VCS)
Estamos usando Git para VCS con LFS. Básicamente, todos los archivos, excepto los archivos fuente y de configuración de C++, se envían a Git LFS. Esto incluye texturas, sonidos, mapas, planos y, literalmente, cualquier cosa que no sea un archivo de texto. Desde el principio nos dimos cuenta de que usar Git LFS sería un desafío. Usamos GitLab, que proporciona un backend LFS con un límite de 10 GB, y tuvimos que trabajar con mucho cuidado para no exceder este límite.
A medida que avanzaba el trabajo, necesitábamos encontrar otra solución. Uno de nuestros ingenieros tomó la iniciativa de crear una configuración que fuera económica y fácil de usar, sin dejar de usar GitLab. Su trabajo se resume en Este artículoY nosotros código abierto del módulo Terraform esto ayuda con la configuración.
Ciertamente, este no es un problema específico de Linux, pero me gustaría enfatizar cuán comprometidos estamos para ayudarnos a nosotros mismos y a la comunidad. La instalación con S3 nos cuesta unos 0,20 euros al mes, prácticamente nada.
Proyectos de construcción desde la fuente.
Notamos que escribir C++ es algo problemático. Ahora no estoy 100% seguro si esto está relacionado con nuestra configuración o no. En general, parece que al Makefile generado le faltan algunas cosas para que funcione. Voy a describir cómo solucionamos este problema usando el proyecto inicial Lyra, que está disponible a través de Tienda de juegos épicos. Tenga en cuenta que la forma más eficiente que hemos encontrado para descargar contenido de la tienda en Linux es Administrador de activos épico.
Cuando descargue y abra el proyecto, recibirá una advertencia de versión; puedes elegir convertir en el lugar. Entonces, en nuestro caso, ocurre un error que indica que no se puede compilar el código fuente.
Si abre una terminal y ejecuta make, obtendrá un error que indica que faltan algunos objetivos. Este es un problema al que también nos enfrentamos cuando trabajamos en otros videojuegos. Actualmente lo estamos solucionando mediante prueba y error, utilizando el Makefile de Unreal Engine como guía. Sin embargo, planeamos encontrar la causa raíz y, si es necesario, enviar un PR para solucionarla.
Nuestro progreso
Finalmente, quiero compartir nuestro progreso para darles una idea del estado del ecosistema para el desarrollo de videojuegos en Linux. Por el momento tenemos:
- Menús de navegación, efectos de sonido y visuales (usando Niagara)
- Metahumanos personalizados importados con todas las funciones de trabajo.
- Escenas cortas animadas con Smartsuit y editadas en Unreal Engine
- Una rica colección de recursos 3D creados en Blender3D e importados con éxito a nuestro proyecto.
- Comportamiento de la IA en algunos de nuestros niveles
Puedes seguir nuestros avances en nuestra web Página de vapor. Mientras escribo esto, también estamos configurando un servidor de Discord; desafortunadamente, aún no está listo para su publicación. ¡Búscanos en Steam October Fest, donde lanzaremos una demostración y mostraremos nuestra jugabilidad!