lunes, 13 de marzo de 2017

Unity 5 vs Unreal Engine 4. Migramos a Unreal.

Ya está. Sin rodeos. Como cuando te quitas una tirita. No hay dolor!

Y no, no nos hemos vuelto locos... aunque cualquiera lo podría pensar teniendo en cuenta que no disponemos de mucho tiempo para desarrollar el juego, menos aún si nos ponemos a probar cosas por en medio :D.

Pero nos picó la curiosidad, y a diferencia de con Torii, el único motor que nos hacía tilín y era gratuito fue Unity. Así que cuando salió Unreal Engine para todos los públicos, aunque lo probamos por encima, ya habíamos empezado con el otro y decidimos seguir con él por ser simplemente con el que empezamos y aprendimos.

Como prácticamente no hemos tocado Unity todavía para el nuevo proyecto, ya que casi todo ha sido modelado 3D y diseño, nos hemos decidido a darle una oportunidad a Unreal para ver si realmente valía la pena cambiar de motor o, por el contrario, quedarse con el actual.

Finalmente, y después de muchas pruebas y muchos problemas que nos hemos encontrado (por nuestra poca experiencia con el motor), los hemos podido solucionar y creemos que las ventajas que nos ofrece frente a los inconvenientes son suficientemente interesantes como para dar el paso.

La versión que utilizaremos será la 4.15, la última disponible a día de hoy y la que ofrece más posibilidades.

Llevamos pocos días con este motor, pero a continuación vamos a listar las cosas buenas y malas que hemos encontrado durante estas pruebas. Todo esto siempre bajo nuestro criterio y teniendo en cuenta que el único otro motor que hemos probado ha sido Unity y solo para una pequeña demo jugable de un simple escenario, pero trasteamos lo suficiente con él para poder valorar posibilidades.

Para empezar, las cosas buenas:
  • Es gratis. Si no fuera gratis, ni nos hubiéramos planteado probarlo, porque como sabréis, nuestra dedicación es mínima (ratos libres) y tampoco nos podemos permitir comprar la licencia de un motor así. Cabe decir que es un poco trampa la palabra "gratis". Porque una vez haces un juego y obtienes beneficios, a partir de los $3000 ganados, los señores de Unreal se llevan una comisión del 5%. Que oye!, tampoco está tan mal :D.
  • Es un motor robusto. Durante estos días de pruebas, no ha crasheado ni una vez. Algo que en parte debería ser normal, pero en cambio con Unity nos pasó varias veces y es molesto (algunas veces salia la típica ventanita de critical error sin saber porqué, o cuando entrabas te decía que el layout no se había podido cargar y te ponía el que viene por defecto).
  • Sistema de iluminación. Aunque en las últimas versiones Unity ha mejorado el sistema de iluminación y ha introducido la iluminación global (GI o Global Illumination), no nos terminaba de convencer como nos estaba quedando. Y lo peor, esa sensación de no saber qué hacer para mejorar el resultado. En cambio Unreal por defecto lleva una iluminación más realista y más acorde a lo que estamos buscando. Seguramente con Unity al final se puede dejar algo parecido, pero es un trabajo añadido si lo comparamos con Unreal donde te lo da prácticamente hecho.
Escena renderizada con Unreal Engine 4.
  • Los Blueprints. Con la versión 4 de Unreal también sacaron la novedad de la programación con blueprints, la cuál es otra manera de programar prácticamente cualquier funcionalidad que pueda tener tu juego pero sin picar código. Todo se hace de manera visual con nodos y conexiones entre ellos. Está claro que para realizar algoritmos complejos o funcionalidades dónde se requiera mucha optimización hacerlo en C++ siempre será mejor. Pero para funcionalidades básicas, los blueprints són muy útiles.
Programación básica de un coche con blueprints.
  • El Editor. Hasta donde hemos probado, el editor de Unreal parece más completo que el de Unity. Tiene muchas pequeñas utilidades que muchas veces echas en falta y no sabes porque no vienen por defecto con el motor. Por ejemplo, poder colocar objetos en el escenario y que automáticamente se alineen a un grid predefinido es algo muy útil cuando, por ejemplo en nuestro caso, tienes que crear unas carreteras en formato de cuadrícula. Y así con otros muchos pequeños detalles donde se nota que Unreal está algo más trabajado que Unity. Decimos lo mismo que antes, seguro que con Unity al final puedes hacer lo mismo, ya sea programando un script o consiguiéndolo por Internet, pero cuantos más añadidos útiles tenga un motor por defecto, mejor.
Editor de Unreal Engine 4.
  • Los Wheeled Vehicles. Sí, aunque parezca mentira, y luego ya veréis porqué, el sistema de vehículos de Unreal está mucho mejor hecho que en Unity, dónde en éste último, prácticamente lo tienes que programar todo para hacer un vehículo con unas físicas decentes (viene con unos wheel colliders, pero són algo justos para nuestro gusto). En cambio Unreal viene con un componente específico para crear vehículos, el cuál viene con muchos parámetros por defecto, como por ejemplo, la tracción de las ruedas (delante, detrás o en las cuatro), marchas manuales o automáticas, configuración de ruedas y fricción dependiendo de la superficie por dónde rueda, torque del motor, freno de mano, suspensiones, diferencial, etc.
Creación de los colliders para un coche.

Pero eh!, no todo es bueno. Ahora, las cosas más reguleras:
  • El lenguaje de programación C++. Esto es algo personal, pero una vez probada la programación en C# de Unity, lo preferimos antes que el C++. Aunque este último es algo más rápido para algoritmos que necesiten mucho procesamiento, pero menos amigable.
  • El rendimiento del Editor. En este caso, el editor de Unreal pide mas recursos gráficos que el de Unity. Tanto en el ordenador de sobremesa como en el portátil, hemos notado que los ventiladores soplan más con el Unreal que con Unity, por lo que es algo a tener en cuenta, pero tampoco nada preocupante. Además del espacio ocupado en disco, que aunque no sea algo muy importante en los ordenadores de hoy en día con lo poco que cuesta el almacenamiento, estamos hablando de 3 veces más de espacio; 15GB por los 5GB que pide Unity.
  • Hacer funcionalidades fuera de lo común. Aunque no es algo que hayamos experimentado nosotros mismos, o al menos hasta el momento, hemos leído algunas opiniones en foros dónde comentan que Unreal está muy bien si quieres hacer funcionalidades típicas que te puedas encontrar en un juego, pero si te quieres salir de aquí el desarrollo de estas funcionalidades en C++ es muy tedioso.
  • Desarrollo en 2D y móviles. En este caso, y por lo leído en varios artículos, Unity es mejor motor para realizar juegos en 2D y juegos móviles que requieran poca carga gráfica. En cambio Unreal es ideal para juegos que tengan que lucir muy bien gráficamente.
  • Los Wheeled Vehicles. Sí, otra vez los volvemos a nombrar. Igual que antes hemos comentado las cosas buenas que tienen, ahora vamos a comentar las malas. Y es que durante estos días de pruebas nos hemos encontrado muchos (y cuando decimos muchos, son muchos... pero muchos... pero muchos, muchos... basta!) problemas para encontrar el proceso correcto de creación y funcionamiento de un simple vehículo. Al final hemos podido encontrar un proceso correcto para crearlos, pero aún así, no estamos del todo satisfechos, porque hay una parte, concretamente la del rig del coche, que aún no sabemos qué hacer para que funcione correctamente y tenemos que usar un rig que nos facilitaron muy amablemente para poder tirar adelante con este tema. En una próxima entrada entraremos con mucho más detalle sobre este tema y publicaremos un tutorial de como crear un coche modelado en Blender e importado a Unreal en su versión 4.15.
Y hasta aquí los pros y contras que hemos ido encontrando estos días. Seguro que mientras vayan transcurriendo los días iremos encontrando más cosas buenas y más cosas malas, pero de momento esto es lo que hay, que no es poco :-).

Si alguien lee esto (hola?... eco... eco... eco...) y está con Unity y le pica la curiosidad para probar Unreal, le recomendamos primero que no se quede sólo con la opinión de esta entrada, sinó que lea más críticas que pueda encontrar por Internet. Por ejemplo, recomendamos este artículo donde detalla bien los pros y contras de cada motor gráfico.

También recomendamos este artículo de la propia documentación de Unreal dónde explica las similitudes entre Unreal y Unity. Muy útil.

Esperamos que este artículo os haya resultado interesante, y recordad que en próximas entradas detallaremos mucho más el tema de los Wheeled Vehicles y empezaremos a mostrar el progreso del juego en este nuevo (para nosotros) motor.

ACTUALIZACIÓN 1: Unas semanas más tarde hicimos una nueva entrada dedicada a la migración a Unreal Engine, comentando más impresiones. Podéis seguir con la lectura en el siguiente artículo.

ACTUALITZACIÓN 2: Posteriormente hemos realizado también una nueva entrada de blog hablando solo de la programación con Blueprints. Os aconsejamos la lectura si os interesa el tema :-)

8 comentarios:

  1. Bien, Gracias por el link. voy a empollar esto...
    Un Saludo.

    ResponderEliminar
    Respuestas
    1. Recuerda en no quedarte solo con la opinión de esta guía. Lo mejor es comparar varias y sacar una conclusión personal.

      En próximas semanas sacaremos una nueva entrada dedicada a los Blueprints, ya que nos están gustando bastante (aunque también tienen cosas malas) y nos gustaría dedicarle una entrada detallada.

      Estad atentos! ;)

      Eliminar
  2. Vengo de Unity y me parece absolutamente impresionante lo extremadamente mal planteado que esta Unreal.
    Es muchísimo más potente, pero extremadamente poco usable.
    - No tiene prefabs, lo más parecido son los Bluprints, que son objetos reutilizables.
    - Pero espera, un Blueprint en realidad es código representado visualmente, entonces, no debería ser un componente?
    si, sin embargo han decidido que sea una especie de "prefab" supongo que intentando copiar a Unity, lo cual no tiene sentido, porque te obliga a repetir código por todos los lados y desoptimiza muchísimo.
    - He leido sobre esto y la gente que lleva años programando con Unreal conicide en que los blueprints solo son buenos para proyectos pequeños, para uno grande se vuelven incomprensibles o poco óptimos o escalables.
    - En la jerarquía del proyecto, que en unreal llaman world outliner, NO SE PUEDEN COLOCAR los objetos!! increible...
    - Tampoco se pueden desactivar para que no esten en la escena!! solo los ocultas hasta que das a play!! impresionante...
    - Tampoco podemos tocar cosas en modo play y que luego se haga un roll back como pasa en unity, el debugeo se vuelve un infierno.
    - A la hora de exportar un asset, no se pueden crear packages como en unity, solo puedes exportar en tu propio ordenador a otro proyecto y creando la estructura de carpetas desde la raiz que tengas. Además falla más que una escopeta de feria, cargandose childs etc...
    - El editor, tiende a crashear que da gusto. Tanto a mi como a mi compañero se nos cierra aproximadamente una vez a la hora y los 2 tenemos buenos pcs, creo que esta repleto de bugs y esta mal acabado, incluso según abres el editor, en la escena inicial, podemos contemplar un maravilloso z fighting...

    Sinceramente, creo que los de Epic deberían aprender un poco de Unity y de usabilidad y dejar de intentar que su motor se vea cada vez mejor y mejor y poner un poco de atención a cosas que son extremadamente básicas.

    Ya se ha comentado mil veces que motor es para que cosa y por que, y sería tontería que yo lo repitiera, llevo solo un mes usando Unreal y quizás es poco, pero hay cosas que saltan a la vista desde el momento 1.

    Si los de Epic hicieran esas mejoras, el motor incluso podría superar a Unity, aunque creo que las 2 empresas tienen filosofías muy diferentes, no creo que Epic se preocupe por la mejora constante y la usabilidad, y al fin y al cabo por hacer las cosas bien y pulirlas como hace la gente de Unity.

    Los de Unity también podrían acercarse a la calidad grafica de Unreal, pero esto es mucho más complicado ya que en mi opinión tendrían que reescribir el core.

    Cada uno es para lo que es, pero de verdad, que no entiendo a la gente que dice que Unreal es mejor... a ver para picar codigo a bajo nivel con un equipo de muchas personas, puede que lo sea, pero por dios, a nivel de pulido tanto de bugs, errores, gliches como de usabilidad, es absolutamente vergonzoso, es increiblemente malo.

    ResponderEliminar
    Respuestas
    1. Buenas! gracias por comentar.

      En nuestro caso, y luego de estar con Unreal varios meses, nos pasó un poco lo contrario a vosotros. Aunque de primeras sí que cuesta hacer el cambio de chip acostumbrado a Unity y sus metodos, luego vimos que Unreal nos facilitaba mucho mas.

      Por poner ejemplos, los Blueprints al final son como las clases de cualquier lenguaje de programación, allí creas tus variables, tus métodos y la parte 3D si la necesitas, y luego utilizas ese mismo Blueprint tantas veces como quieras que si luego lo tienes que editar solo lo tendrás que hacer una vez.

      Y como al final son clases, cuando creas un Blueprint puedes hacer que herede de otros Blueprints, como la clase WheeledVehicle que lleva por defecto una mucho mejor implementación que los WheelCollider que tiene Unity (que es algo muy basico y si quieres un vehículo te lo tienes que programar todo a pelo o comprar un asset).

      El tema de bugs, no se que versión estaréis utilizando pero sí es verdad que dependiendo de la versión he tenido mas crasheos que otros, pero nunca tantos como comentáis, es raro.

      Como comentamos en el artículo, una vez acostumbrados a Unreal, luego tocar Unity nos parecía que le faltaban muchas opciones esenciales en cualquier editor. Por ejemplo la colocación directa de objetos al escenario y que hagan "snap" sobre una cuadrícula predefinida. O por ejemplo poder seleccionar facilmente todos los objetos de una escena del mismo tipo y reemplarlo por otro (los Actores llamados en Unreal).

      Pues así, muchísimas más. Pero al final, como comentas, cada uno se acostumbra a trabajar bajo un entorno y se siente más cómodo con el que le va mejor.

      Eliminar
  3. Que tal todo?... estas usando C++ ?... qué tan complejo es respecto a C# ?

    Saludos.

    ResponderEliminar
    Respuestas
    1. Buenas! en Unreal Engine se utiliza C++ o bien los Blueprints. En nuestro caso utilizamos los Blueprint por lo que no tocamos código como tal, sino que se hace por nodos tal como comentamos en la entrada. Saludos!

      Eliminar