¿Por qué no hay toneladas de juegos Unity y Unreal Engine hechos en el navegador en este momento?

Bueno, puedo responder la pregunta de Unity.

Solía ​​haber un ecosistema próspero para los juegos de Unity en el navegador, especialmente en Facebook. El reproductor web de Unity fue lo suficientemente decente como para que obtuvieras buenos gráficos y una velocidad de fotogramas fluida (siempre que horneaste y optimizaste mucho). Una vez trabajé en un juego / simulación serio que se implementó en el reproductor web, y empujé sus límites, así que supe de lo que era capaz.

Todo eso cambió cuando Chrome decidió eliminar el soporte NPAPI, en el que se basa el reproductor web. ¿Qué es NPAPI? Los detalles completos están aquí – NPAPI – Wikipedia – sin embargo, para abreviar, es un método de desarrollo de complementos para los distintos navegadores principales. Sin embargo, NPAPI era antiguo, propenso a problemas de seguridad, y hubo una llamada para usar HTML5 / WebGL, etc., por lo que Chrome decidió eliminarlo.

La mayor diferencia entre NPAPI y el uso de WebGL es que el primero daba acceso casi ilimitado a los recursos de la máquina local (consulte los complementos de NPAPI – Google Chrome para más detalles). Para Unity3D WebGL, hay dos grandes problemas:

La primera es que no existe una compilación de código de forma nativa para HTML5 / WebGL. Unity resolvió esto compilando un proyecto en una forma de JavaScript optimizado. Eso es grande , en términos de tamaño de archivo, ya que la mayoría del código del motor de Unity tiene que estar allí para que se ejecute el proyecto, y Unity no es de ninguna manera ligero. En el caso de un reproductor web, la mayor parte del código del motor ya está en la DLL o en el complemento, por lo que puede cargar los datos de la escena y ejecutarlos. Sin embargo, para el jugador web WebGL, el código del motor debe volver a descargarse constantemente, y no estoy seguro de si todavía ha habido una solución para eso.

Para reducir el tamaño, el código WebGL tiene que estar comprimido. Sin embargo, esto significa que el código debe descomprimirse en la computadora del cliente, después de descargarlo , lo que hace que la experiencia sea lenta y torpe.

El problema asesino es el de la memoria. A diferencia de NPAPI, cuando ejecuta el reproductor web WebGL, solo puede usar la memoria que tiene el navegador, y eso está francamente fuera de su control. El jugador puede tener más de 100 pestañas abiertas, dejando poca memoria para que su juego se ejecute. O su juego puede ser demasiado grande para los límites de memoria del navegador, lo que hace que se bloquee sin gracia, mientras se carga, sin un mensaje de error (ese fue el caso hace 2 años cuando lo intenté).

Esencialmente, debe conformarse con modelos menos detallados, activos de juego de menor calidad (sonido, texturas, etc.) para poner algo en uso de WebGL / HTML5. Franky, dudo que WebGL / HTML5 alguna vez proporcione el nivel de calidad y velocidad de fotogramas que los antiguos complementos de NPAPI, por lo que creo que todo el ecosistema de los juegos Unity basados ​​en la web se ha eliminado.

Tenga en cuenta que esto es principalmente para los jugadores de Unity3D WebGL: hay otros motores de juegos capaces de ejecutar juegos en WebGL, aunque estos tienden a estar basados ​​en JavaScript y optimizados para la web. Unity3D es un gran motor, y la web ya no es un ciudadano de primera clase como plataforma de implementación.

De todos modos, no he estado en la escena de la Unidad en los últimos dos años, así que espero que alguien me contradiga.

Hay un problema de contenido oculto aquí, así como un problema de ingeniería social, pero voy a hablar sobre problemas técnicos. Podrías escribir un par de libros sobre los dos primeros.

El TL; DR aquí es que realmente no puede obtener el mismo rendimiento AAA de la plataforma web que esperaría de los programas nativos. Existen algunas soluciones, pero su implementación es más costosa para los desarrolladores.

1.) Tiempo de ejecución de compilación y procesamiento de activos

A diferencia del método estándar de producción de juegos, un juego web actualmente tiene que compilar su código y acceder a sus activos relacionados en tiempo real. Históricamente, un juego tendría activos y código precompilados que se cargarían y ejecutarían bajo demanda. La compilación previa de su juego le permite optimizar su juego para que funcione mejor en diferentes situaciones. Parte de esta personalización ocurre cuando instala (IE, PC / MAC / diferencias de consola) y parte de esto ocurre cuando configura las opciones del juego.

Dado que esta optimización ocurre antes del tiempo de ejecución, puedes cargar el juego más rápido (ya sabes lo que debes hacer). Sin embargo, la compilación en tiempo de ejecución significa que debe resolver todo esto en tiempo de ejecución en lugar de antes. Esto generalmente aumenta los tiempos de carga, entre otras cosas. En teoría, es posible almacenar en caché los datos descargados, pero el navegador (o un usuario desafortunado) puede anular lo que está haciendo muy fácilmente. Ver # 3.

2.) Mantenimiento del servidor

A través de un navegador web puede almacenar archivos y activos de forma remota, pero esto representa un problema de mantenimiento para las compañías de juegos: se necesita tiempo y dinero para mantener los servicios del servidor. Este problema se puede reducir drásticamente instalando el juego una vez en una máquina local y entregando parches periódicamente en lugar de actualizaciones constantes de transmisión. Ancho de banda = $$$, sin mencionar los profesionales de tecnología de la información necesarios para operar los servidores al máximo tiempo de actividad.

3.) Gastos generales / restricciones del navegador

Ejecutar cualquier cosa en un navegador web significa que debe trabajar no solo con el sistema operativo como un requisito del sistema, sino también con la memoria adicional y el tiempo de procesamiento que el navegador usará. Por ejemplo, ¡Chrome ahora está usando ~ 148 MB solo para dejarme responder esta pregunta! Esto probablemente no sea malo para PC o Mac, pero es excelente para las tabletas.

Además, la mayoría de los navegadores tienen características de seguridad que restringen cómo el navegador puede interactuar con su sistema operativo y hardware. Esto significa que ciertos tipos de operaciones de rendimiento que normalmente podría realizar con un juego precompilado simplemente no son posibles dentro de un navegador (a menudo acceso directo a la memoria).

Sí hay.

Fui a kongregate.com y comencé el primer juego. Efectivamente, está hecho con Unity.

Recientemente hablé con un amigo que trabaja en Mozilla en el equipo de WebAssembly. Había escuchado de los operadores de tales sitios web de agregadores de juegos que los juegos más atractivos en los sitios web ahora usan WebAssemly. Lo que prácticamente significa Unidad, supongo porque nadie hace juegos de arcade 2D simples con Unreal AFAIK.

Una razón importante es la preocupación del marketing. Los juegos basados ​​en el navegador, a pesar de tener una barrera de acceso más baja (es mucho más fácil ir a un sitio web que descargar un juego de Steam) simplemente no tienen reputación de juegos serios. De lo contrario, hay una buena cantidad de juegos para navegadores, simplemente no son el típico juego triple A.

Hablando de eso, los juegos que se ejecutan en los navegadores tampoco son muy aptos para el juego inmersivo, lo que limita los tipos de juegos adecuados para su lanzamiento. De nuevo, lo de la mala reputación.

En cuanto al rendimiento, tampoco puede alcanzar el nivel de un ejecutable compilado. Esto no es un problema para la mayoría de los juegos modernos, pero los gráficos intensivos de alto rendimiento son un problema.

La mayoría de la gente prefiere compilar los juegos en un ejecutable para poner en Steam, Microsoft Store, Apple Store o Google Play. Sin mencionar, el Unity Games en el navegador puede ser un poco defectuoso para compilar (Tuve el problema durante Ludum Dare).
El otro problema es que necesitas un sitio web para subir un juego en el navegador.

Ahora, si el desarrollador tiene su propio sitio web y está dedicado a los juegos; Sí, subirán un juego. Pero el otro escollo de los juegos de navegador es que está limitado en los controles que puede hacer y algunos gráficos 3D / vistas 3D pueden disminuir el rendimiento bastante mal.

Entonces, si alguien está haciendo un juego en 3D que está en vista en primera persona / tercera persona; Lo más probable es que no se coloque en un navegador por los motivos enumerados anteriormente.

No puedo hablar por la unidad

Sin embargo, HTML5 Thing es actualmente experimental, lo que significa que cualquier exportación a HTML5 (para navegadores) tendrá errores sin importar lo que haga el desarrollador.

Además, el UE es muy pesado para ser utilizado en un navegador web, lo que significa que necesitaría una computadora decente para ejecutar el juego basado en la web de todos modos.

También muchos más usuarios usan móviles / tabletas para juegos ahora en lugar de juegos basados ​​en navegador.