Basado en gran medida en Free Association en el Metaverso - Avaer @Exokit - M3, Avaer demostrará algunas de las formas en que los estándares abiertos permiten la travesía abierta y gratuita de usuarios y activos en todo el metaverso interconectado.
This workshop has been presented at JS GameDev Summit 2022, check out the latest edition of this JavaScript Conference.
FAQ
El Metaverso se refiere a un universo virtual donde los usuarios pueden interactuar con ambientes y otros usuarios. Relacionado con la web, significa que estos mundos virtuales se pueden acceder y gestionar a través de tecnologías de navegador estándar, utilizando APIs de navegador para cargar activos desde cualquier parte de la web, lo que facilita un entorno abierto y accesible.
Exokit es un navegador que fue desarrollado para explorar y utilizar las capacidades del Metaverso a través de la web. Permite a los usuarios acceder y interactuar con contenido virtual directamente desde el navegador, aprovechando la tecnología de código abierto para crear y experimentar mundos virtuales.
Los activos en el Metaverso se pueden cargar utilizando una API de navegador web estándar para acceder a contenido de diferentes fuentes como IPFS, GitHub y otros sitios web. Esto se logra mediante un motor de traducción que utiliza JavaScript para cargar activos a través de URLs, facilitando así la importación de elementos virtuales en el Metaverso.
Totem es la tecnología utilizada para hacer traducciones y conexiones de activos al motor de juego en el Metaverso. Funciona identificando URLs y utilizando plantillas y generación de código para convertir activos en versiones 3D que pueden ser integradas y operadas en entornos virtuales, promoviendo un sistema abierto y modulable de creación de contenido.
Desarrollar el Metaverso en la web ofrece ventajas como la accesibilidad universal, la capacidad de usar código abierto, y la interoperabilidad entre diferentes dispositivos y plataformas. Esto permite una mayor facilidad de uso, innovación y colaboración en la creación de experiencias virtuales.
Los NFT se integran en el Metaverso mediante URLs que pueden apuntar a direcciones de Ethereum, permitiendo cargar y utilizar activos NFT directamente en ambientes virtuales. Esta integración se facilita utilizando tecnologías web estándar, lo que permite a los usuarios interactuar con sus activos NFT de forma natural en el entorno del Metaverso.
El Masterclass discutió el potencial del Metaverso y los mundos virtuales abiertos en la web. Destacaron el uso de la integración de IA, proyectos de código abierto y herramientas estándar para construir un Metaverso abierto y orientado al futuro. El enfoque se centró en la optimización del rendimiento, el renderizado y la carga asíncrona, así como en la integración de NFT 3D y metadatos. El Masterclass también exploró la generación procedural, la personalización de avatares y la sincronización multijugador. Se enfatizó la importancia de la interoperabilidad y el potencial de la web como la mejor plataforma de juegos.
¡Echemos un vistazo! El objetivo principal es abrir tus ojos a lo que es posible en los mundos virtuales abiertos en la web. Otro objetivo es convencerte de que el Metaverso puede ser bueno. Mi objetivo personal es aprender algo hoy. He estado desarrollando tecnologías relacionadas con el Metaverso durante ocho años, constantemente sorprendido por lo que es posible en la web. Escribí un navegador llamado Exokit. Tenemos los ingredientes para importar el metaverso utilizando una API de navegador web. Todo lo que necesitas es un motor de traducción y código JavaScript para cargar activos. Estamos creando el primer videojuego distribuido del mundo utilizando Totem. Todo en el juego es un activo con una URL. En el futuro, proporcionaremos servicios como VRChat con soporte de AR y VR e integración con KaleidoKit.
¡Echemos un vistazo! Sí, otro título para esta sala podría haber sido Importar el Metaverso. Tengo algunos objetivos que espero lograr aquí. El principal es simplemente abrir tus ojos, tal vez a lo que es posible en los mundos virtuales abiertos en la web. Un objetivo desafiante es convencerte de que el Metaverso puede ser bueno. Sé que hay mucho escepticismo y controversia al respecto en estos días. Y mi objetivo personal es, no sé, espero aprender algo hoy.
He escrito algunas notas de guion que quería cubrir, pero espero que cualquier persona que tenga preguntas sobre las cosas locas de las que voy a hablar, simplemente participe. Me encantaría profundizar en las partes que a la gente le parezcan más interesantes.
Así que un poco de antecedentes sobre mí, he estado desarrollando tecnologías relacionadas con el Metaverso durante unos ocho años. Y todo eso ha sido en la web. Básicamente comencé en la web y nunca me fui. Y constantemente me sorprendía de lo que podía hacer simplemente utilizando lo que está disponible en el navegador. Las herramientas de código abierto que ya existen, solo para crear experiencias, mundos e incluso mis propios navegadores.
Escribí un navegador llamado Exokit. Me sorprendió mucho que todo esto sea posible en una tecnología abierta como la web. Básicamente, cualquier persona puede alojarlo, cualquier persona puede experimentarlo en cualquier dispositivo. Y parece que yo era la única persona que lo estaba haciendo. Cada vez que mostraba una de las nuevas y geniales cosas que había creado, ya sea el navegador funcionando en Magic Leap o algunos emuladores inmersivos de N64 que escribí que básicamente te permiten jugar Legend of Zelda en tu HTC Vive en el navegador, utilizando WebVR. Eso es lo que se llamaba en ese momento.
Así que básicamente empecé a frecuentar a todas las personas que pensaban que, como, wow, esto es realmente genial, como no sabía que esto era posible. Y sí, comenzamos a construir esta caja de herramientas tecnológicas con todas estas cosas diferentes que hemos estado lanzando básicamente de código abierto desde el primer día y trabajando juntos en ellas. Y eventualmente, lo que comenzó a parecer era que básicamente teníamos los ingredientes para, entre comillas, importar el metaverso, lo que significa que puedes usar una API de navegador web estándar para cargar activos desde cualquier parte de la web. Desde diferentes lugares, incluyendo, por ejemplo, IPFS, el alojamiento en GitHub, básicamente cualquier sitio web, o incluso cosas como NFT.
Y resulta que esto en realidad no es tan difícil de hacer. Lo único que realmente tienes que hacer es agregar un motor de traducción que pueda tomar una URL y luego escribir algún código JavaScript que pueda cargar ese activo. Entonces, lo que estás viendo aquí, básicamente todo esto es solo una declaración de importación en JavaScript. Así que esto es en realidad un archivo GLB. No estoy seguro si es un archivo GLB o se genera de forma procedural. Este es un archivo JSON que describe esa pistola y hace referencia a todos los activos y el propio personaje es un archivo VRM que acabamos de importar al mundo. Y la forma en que funciona es que en realidad tenemos un sistema en el backend que toma esas URL y básicamente utiliza plantillas y alguna generación de código inteligente para darte un cargador. Para el frontend que te dará la versión 3D de ese activo. Y eso se conecta a través de algunas API al resto de un supuesto motor de juego, que proporciona los servicios que necesitarías para algo así, donde puedes caminar, interactuar con el entorno. Puedes hacer que las cosas te sigan Y puedes tener un inventario que puedes equipar en ti mismo.
Así que básicamente comenzamos a conectar todas estas cosas y nos dimos cuenta de que, hey, en realidad estamos creando posiblemente el primer videojuego distribuido del mundo donde todos estos activos están simplemente conectados utilizando un cliente en el que todos estamos de acuerdo en usar. Entonces, esa tecnología que estamos utilizando para hacer todas estas traducciones y conectarla al motor de juego. Terminamos llamándola Totem, porque básicamente estamos tratando de desarrollar una cultura de crear arte a partir de los ingredientes crudos de la web. Y básicamente estamos uniendo cosas. Las cosas se importan. Interactúan entre sí. Y básicamente estamos apilando arte juntos. Estamos creando estos tótems virtuales en cierto sentido. Todo en el juego es un activo con una URL y eso incluso puede ser un archivo local si lo estás alojando localmente. Yo lo estoy haciendo ahora mismo. Puede ser algo en un repositorio de GitHub, IPFS o, como mencioné, incluso NFT si solo quieres apuntarlo a una dirección de Ethereum. Sí. Y en el futuro, hay muchas cosas realmente locas que podremos hacer una vez que tengamos este juego base funcionando. Una de las cosas es proporcionar servicios simples para recrear el software que a mucha gente le encanta, como VRChat. Donde básicamente tienes tu avatar, que puede animarse. Tiene expresiones faciales. Tienes espejos y pronto también tendremos soporte de AR, así como soporte de VR e integración con KaleidoKit.
2. Construyendo Mundos y Creando Relaciones Espaciales
Short description:
Esto nos permite construir mundos y atravesarlos, creando relaciones espaciales. Las escenas pueden estar contenidas unas dentro de otras, proporcionando un nivel de detalle sin ruido de fondo. La calle es una representación direccional de los mundos virtuales, con diferentes secciones de contenido. Los metadatos definen elementos del juego como misiones. Nuestro objetivo es construir el primer videojuego distribuido, utilizando tecnología de código abierto. Utilizamos three.js, CryEngine y PhysX para el renderizado. React se utiliza para la interfaz de usuario. Admitimos arrastrar y soltar y animaciones suaves. Nuestra caja de herramientas tiene como objetivo hacer que estos elementos funcionen juntos sin problemas.
Entonces, básicamente, esta es una forma en la que puedes usar tu cámara web para v-tubear tu avatar aquí al lado. Y otra cosa que esto nos permite hacer es construir mundos para poder atravesarlos y compartir en el sentido de que tengo alguna forma de identificar dónde estoy en este supuesto metaverso. Y puedo ir a tu lugar y podemos tener una relación espacial entre esos dos lugares.
Entonces, en realidad, esto todavía es un poco problemático, pero voy a hacerlo un poco más manejable. Porque estamos cargando todo a través de estas declaraciones de importación estructuradas, nos permite básicamente tener una escena contenida dentro de otra escena. Y que las escenas sean un concepto de primera clase que puede ser, por ejemplo, capturado... para que puedas obtener vistas previas de la escena y básicamente obtener un nivel de detalle de un activo distante sin tener que lidiar con el fondo de la escena.
Entonces, ahí lo tienes, la escena perfecta que se ha creado para una escena y básicamente obtener un nivel de detalle de un activo distante sin tener que ir allí. Entonces, lo que va a suceder ahora es que este es un lugar que llamamos la calle. Básicamente, se supone que es una representación direccional de los mundos virtuales, y cada sección de la calle tiene un contenido diferente. A medida que me acerco, lo que debería hacer en realidad es cargar esa escena, tomar una captura de pantalla virtual en 3D y luego darme una versión de baja resolución que está LOD antes de que siquiera vaya allí. Esto es básicamente sí, así que en realidad tengo que apagar la niebla allí. Pero lo que realmente hizo es que todo eso es código JavaScript que se ejecutó al lado y básicamente te dio un poco de detalle. Si apagas la niebla, incluso verías que está completamente texturizado.
Y lo que también vamos a hacer para mejorarlo es usar marching cubes para dar básicamente una malla 3D completa con textura del mundo virtual que estará allí cuando vayas. Y, por supuesto, puedes simplemente ir allí y ahora estás en alguno de estos mundos virtuales. Otra cosa que esto nos permite hacer es usar metadatos para definir los tipos de cosas que querrías en un juego video, como por ejemplo, misiones. En este mundo, en realidad hay una misión. Dice: destruye a todos los Reavers en el área y hay una recompensa de algún activo virtual. Así que si puedo encontrarlo, no estoy seguro de dónde está. Esto podría estar roto, pero también tenemos un sistema de búsqueda de ruta para geolocalizarte en el mundo virtual para que puedas localizar tu objetivo. Y luego, si hay algunos Reavers, puedes ir y matarlos y obtener tu seda virtual, lo que eso signifique. Así que todo esto en realidad es de código abierto. Y nuestro objetivo es básicamente construir el primer tipo de juego video distribuido. Cualquiera puede bifurcar estas cosas. Y una de mis prioridades en este momento es en realidad conectar todas las diferentes comunidades virtuales que ya han comenzado a construir sobre esto. En cuanto a la tecnología en el renderizado, en términos de motor, muchas de las cosas son cosas que construí y muchas de ellas son solo código de código abierto. Como por ejemplo, todo es three.js. Hay un gráfico de escena. No hay nada realmente loco en lo que estamos haciendo, excepto que usamos los shaders de Bloom y SSAO de Unreal Engine. Lo siento, no es Unreal. Este es CryEngine. Pero eso es lo que da a los mundos. Si defines correctamente la configuración de renderizado, este efecto brumoso realmente agradable. Usamos PhysX, que es el mismo motor PhysX que todos están usando, incluido Unity. Está integrado en WebAssembly y lo estamos cargando de esa manera. Para la interfaz de usuario, simplemente estamos usando React, aunque hay mucho WebGL, por ejemplo, para renderizar este tipo de paneles y estos diferentes shaders. En realidad, todo es solo código de react bajo el capó. El IK del avatar es en realidad un proyecto de Unity de código abierto que portamos a JavaScript. Así es como obtienes todas las diferentes animaciones suaves y básicamente la capacidad de animar cualquier personaje independientemente de cuál sea su activo. De hecho, déjame mostrarte un poco de reorientación de animaciones. Vamos a cambiar de personaje. Esto está utilizando exactamente las mismas animaciones, pero el personaje todavía funciona. Igual que antes. También admitimos arrastrar y soltar en este juego. Si tienes tus propios activos virtuales, puedes arrastrarlos. Eso se carga en un servidor y luego se descarga nuevamente. Si quieres soltarlos en el mundo, puedes hacerlo. Y si es un avatar, puedes usarlo. Y básicamente, estamos tratando de construir el mejor conjunto de herramientas del mundo que conocemos para hacer que este tipo de cosas funcionen juntas en el contexto de un juego video.
3. Integración de IA y Metaverso Abierto
Short description:
Tenemos soporte de IA para todo en el mundo, lo que nos permite construir experiencias increíbles. Al combinar IA con datos abiertos, código y metadatos, podemos generar scripts de personajes y tener avatares que son verdaderas IA en el OpenVirtualWorld. Podemos definir cómo se usan los objetos y sus habilidades. Los avatares tienen implementado el seguimiento de rutas y pueden interactuar con objetos. También tenemos funciones como mapeo de voz a avatar y conversión de voz a texto. Nuestro objetivo es construir un metaverso abierto utilizando herramientas estándar y proyectos de código abierto, creando la próxima versión de internet.
Las animations para los avatares son de Mixamo, por lo que básicamente estamos reutilizando cosas abiertas. Y incluso tenemos soporte de IA para prácticamente todo en el mundo. Esto muestra una de las razones más geniales por las que queremos construir cosas de esta manera. No solo nos permite trabajar juntos, lo cual definitivamente lo hace, sino que también, si combinas esto con IA, puedes crear experiencias realmente increíbles. Y la forma en que funciona la IA es que necesitas que todos los data estén estructurados en el sentido de datos data abiertos que se puedan descargar, cosas que se puedan importar, código que se pueda ejecutar, y metadatos que se puedan analizar para generar, por ejemplo, un guion entre múltiples personajes hablando. Y en realidad tenemos ese sistema integrado también. Básicamente, puedes conectar cualquier clave de API de cualquier motor de IA que desees, ya sea GOOSE AI, que es el abierto, si es tu propio alojado o incluso OpenAI. Y básicamente, escribirá guiones de personajes para cosas que suceden en el mundo, que luego realmente suceden en el mundo. Lo analizamos, lo que te permite tener avatares que son verdaderas IA en tu OpenVirtualWorld. En realidad, no puedo mostrarte mucho de eso porque aún no está aprobado para ser implementado por OpenAI, pero te daré una idea de lo que es posible. Por cierto, si hay alguna pregunta, estaré encantado de responderlas si voy demasiado rápido. OpenVirtualWorld.com Aquí nuevamente, estamos cargando. Todos estos avatares son simplemente diferentes activos VRM. Cada objeto aquí es básicamente un archivo JSON interactivo. Incluso puedo mostrarte cómo se ve este sombrero, de hecho, en términos de código. Es algo que llamamos archivo .metaverse, pero en realidad es solo JSON. Básicamente, el motor ve esto y lo representa en el mundo. Y tienes tu URL de inicio básica, que hace referencia al archivo GLB. En este caso, será relativo a la ubicación del archivo. Y este archivo puede alojarse en cualquier lugar absoluto. Actualmente está en las páginas de GitHub. Y luego tienes los componentes para definir cómo se puede usar ese sombrero. En este caso, se adjuntará a la cabeza y se adjuntará a 0.1 metros por encima de la cabeza. Y eso parece estar bien. Y básicamente eso se sincroniza por completo con el avatar. También tenemos un modo de uso donde se ajusta al avatar, pero aún hay trabajo que debemos hacer para asegurarnos de que el desplazamiento de la ropa sea adecuado para lo que estás haciendo o adecuado para la forma de cualquier avatar que estés usando. Y hay diferentes habilidades que se pueden definir para los objetos. En este caso, estamos trabajando en un sistema de hechizos tipo combate mágico y cosas que realmente tengan sentido en el contexto de un juego de acción porque probablemente queramos explorar ese ángulo. Entonces probablemente quieras tu jugo de sorber o lo que sea que se supone que sea esto. Y sí, los diferentes objetos pueden, por ejemplo, ser editables. Y los avatares básicamente tienen implementado el seguimiento de rutas. Así que saben seguirte. Saben interactuar esencialmente con el resto de los objetos. Esta es la parte que no puedo mostrarte porque OpenAI es bastante estricto en cuanto a lo que se permite mostrar públicamente. Pero hay formas en las que podemos hablar literalmente con el avatar, hacer que vaya a buscar el objeto por nosotros. Y luego, por ejemplo, ayudarnos en una pelea. Eso es en realidad una integración relativamente simple entre IA y sistemas de personajes basados en acciones tradicionales. También tenemos funciones que, una vez más, están inspiradas en VRChat. Como hay un discurso del avatar en el sentido de... Lo siento, en realidad no puedo hacer eso debido al efecto de eco. Pero básicamente, cuando hablas, ejecutamos el audio a través del motor de fonemas del habla, y luego se asigna al avatar. Otra cosa genial que puedes hacer es convertir el habla en texto. Entonces básicamente puedes convertir tus mensajes de micrófono en mensajes de chat, pero incluso podemos hacer algo mejor que eso, que es lo contrario. Así que te daré una demostración. Oye, Drake, ¿qué tal? Y eso es todo lo que puedo mostrarte en términos de IA. Pero sí, básicamente nuestra idea es permitir que todos estos diferentes activos se unan a través del poder de la IA, y simplemente utilizando herramientas estándar, proyectos de código abierto estándar para construir todas las diferentes piezas de herramientas, proyectos de código abierto estándar para construir la mejor, entre comillas, versión del metaverso. Y es un metaverso abierto. Creo que esa es la única forma de obtener una buena versión del metaverso. Y no estoy hablando de construir el tipo de cosas que Mark Zuckerberg quiere construir. Me interesa más construir sistemas abiertos y básicamente la próxima versión de internet.
4. Construyendo un Metaverso Abierto y Visionario
Short description:
Podemos construir un metaverso abierto y visionario que sea accesible en varios dispositivos. Estamos trabajando en la sincronización multijugador utilizando CRDT para la replicación del estado de los objetos y WebCodecs para la transcodificación de voz. La optimización del rendimiento es una prioridad, con sistemas para configurar automáticamente la fidelidad gráfica. Planeamos estandarizar los avatares y permitir conexiones con miles de personas. React se utiliza para el renderizado y la interfaz de usuario, con elementos de lienzo y React hooks para la integración del motor.
Y creo que honestamente podemos lograrlo. Creo que la web ha evolucionado mucho más allá del punto en el que no podemos hacerlo. Y parece que el futuro es realmente prometedor para nosotros porque, en primer lugar, WebGL y WebXR tienen un gran soporte en Oculus. Y parece que Apple también está en el tren de WebGPU y WebXR. Entonces, todo lo que estamos construyendo aquí será accesible en los dispositivos de realidad virtual de todos. De hecho, vengo principalmente de un fondo de realidad virtual y la única razón por la que no estoy haciendo esto en realidad virtual es porque hay muchas otras cosas que tengo que hacer. Pero vamos a arreglar la realidad virtual aquí y básicamente todo esto también será completamente inmersivo. Y lo que estamos tratando de hacer aquí es mostrar el camino a seguir para una versión del metaverso que pueda ser buena, que pueda ser abierta y que sea visionaria, donde todo lo que estamos construyendo estará accesible dentro de un año en cualquier forma que deseemos, ya sea en el escritorio, simplemente viendo contenido en nuestro teléfono o simplemente reuniéndonos en auriculares de realidad virtual.
Otra cosa en la que estamos trabajando es, por supuesto, el multijugador para asegurarnos de que todo esto se pueda hacer de manera sincronizada con otros clientes. Espero que no se use para crear bots locos, pero nunca se sabe, pero en realidad las tecnologías detrás de eso son bastante simples. Estamos utilizando CRDT para replicar básicamente el estado de los objetos en el mundo. Entonces, esencialmente, las posiciones, las transformaciones y todos los componentes de cada objeto están en un almacén global. Y luego obtenemos actualizaciones de ese almacén y ese almacén se sincroniza de ida y vuelta con una consistencia central con el servidor. Y eso es esencialmente cómo hacemos el multijugador. Simplemente sincronizamos esos estados. Y para la voz, en realidad no usamos WebRTC. Vamos a usar WebCodecs, que esencialmente hace la transcodificación nosotros mismos y lo hacemos a través de un socket web, que tiende a ser más confiable que algunos de los saltos locos que tienes que hacer con WebRTC. También es más seguro en el sentido de que queremos que alguien pueda alojarlo en su Raspberry Pi si lo desea. Deberías poder configurar tu propio servidor privado que tenga tus propias conexiones de voz privadas cifradas y ejecute el mismo contenido. Y lo que espero para el futuro es que comencemos a construir en sistemas más abiertos como este porque creo que es verdaderamente la forma en que llegaremos a lo que sea una buena versión del metaverso. Cuanto más contenido haya, mejor haremos este juego loco que estamos haciendo. Si alguien quiere que me sumerja en alguna tecnología en particular, sé que hay mucho aquí. Solo avísenme y veré si puedo profundizar más en eso.
Alguien en el chat había preguntado antes, ¿qué pasa con el rendimiento? Ahora mismo, el principal problema que tenemos es que nuestros avatares tienen una calidad tan alta. Hay 55 llamadas de dibujo principalmente en los avatares. Y no solo los renderizamos una vez, sino que también hacemos un pase de profundidad sobre todo esto. Entonces, la forma en que estamos renderizando en realidad es extremadamente no optimizada en este momento. Estamos trabajando en eso. Esperemos que en la próxima semana o dos. Pero en términos de pensamiento visionario sobre el rendimiento, en realidad tenemos sistemas para configurar automáticamente la fidelidad gráfica. Por ejemplo, para el avatar, puedes reducir la calidad a media, lo que cambia lo que dije, ya no serán 55 llamadas de dibujo para el avatar. Será una. Incluso desactivé la iluminación aquí. No tenía que desactivarse, pero ahora tenemos todo el avatar básicamente automáticamente en una sola textura y una sola llamada de dibujo y una sola geometría. Entonces, en realidad podemos hacer esto súper rápido y esto básicamente soluciona todos los problemas de rendimiento que hemos tenido. Pero planeamos ir un poco más allá de simplemente estandarizar el avatar porque también tenemos un sistema de hojas de cálculo donde tomará capturas de pantalla de tu avatar desde todos los ángulos necesarios y básicamente te representará como un plano único. Y esto es algo que puede permitir conexiones con miles de personas. Espero que eso responda la pregunta. Y a pesar de ser un avatar en aerosol, aún tienes interactividad completa con el mundo. Hay algunos ángulos que debemos corregir, pero en general, esto nos ha funcionado bien. Esta también es una forma o un camino tecnológico donde podemos ser interoperables con otros tipos de mundos virtuales. Como hay otros mundos virtuales donde todo es en 2D. Y si estandarizas tus formatos, es bastante fácil crear algo como un Generador de Sprites. Si alguien tiene una pregunta sobre si React solo está renderizando la escena o si los componentes son solo botones o la interfaz de usuario con WebGL, bueno, básicamente todo es React. En realidad, se utiliza Vite.js para cosas como el estilo y la importación de eso. Pero hay elementos de lienzo en React y luego simplemente usamos React hooks para conectarnos a nuestro motor. Este lienzo para el personaje aquí es el mismo que el renderizador de la escena principal. Entonces, básicamente obtienes esto de forma gratuita. Ni siquiera requiere más memoria hacerlo de esta manera.
5. Renderizado y Carga Asincrónica
Short description:
Podemos renderizar elementos en el inventario utilizando un hilo de renderizado separado y cambiando el nombre de dominio. Al ejecutar una segunda copia del motor, podemos dibujar de forma asíncrona y enviar los búferes de imagen de vuelta al hilo principal. Esto permite explorar el mundo sin interrupciones ni caída de fotogramas. El código se puede ampliar para una mejor legibilidad, y estoy disponible para explicar cualquier código específico mencionado.
Puedo mostrar ese código, creo que es algún personaje. Aquí está nuestro lienzo, y lo estamos conectando a nuestro motor aquí, game.player.render.addCanvas. Y esto nos coloca en el bucle de renderizado, y luego simplemente copiamos los fotogramas en el lienzo. Ahí está. Copiar fotograma. Este lienzo dibuja desde la escena principal donde dibujamos temporalmente esa ventana. En realidad, hay una peculiaridad interesante del navegador que estamos aprovechando para poder renderizar elementos en tu inventario. Estos son, una vez más, archivos JSON estándar, archivos GLB estándar que estamos importando. Pero la forma en que hacemos las vistas previas es en realidad en un hilo de renderizado separado. Es un truco del navegador donde siempre que cambies completamente el nombre de dominio, y por nombre de dominio me refiero a top más uno, eso significa que debes estar en.xyz en lugar de.com, de lo contrario esto no funciona. Pero básicamente, siempre que te enmarques en una URL en una estructura de origen completamente diferente de esta manera, entonces obtendrás un hilo de renderizado diferente. Y siempre que ejecutes una segunda copia del motor, que en este caso lo hacemos, puedes hacer el dibujo de forma completamente asíncrona y luego enviar los búferes de imagen de vuelta al hilo principal. Esto te permite tener básicamente el aspecto donde estás explorando el mundo y las cosas continúan cargando, y puedes cargar las vistas previas de forma asíncrona. En realidad no hay interrupciones, que es el problema común que se tiene con muchas cosas de tres JRSpace. Cuando agregas algo a la escena, hay un proceso de compilación. Pero en este caso, gran parte de eso se puede hacer fuera del hilo, incluso en un hilo de GPU separado. Y siempre que tengas una GPU rápida, ni siquiera se perderán fotogramas y generalmente no se pierden. Y también se puede limitar. ¿Puedes ampliar un poco el código? Es difícil de leer para las personas. De hecho, si alguien quiere hablar sobre alguno de los códigos que acabo de mencionar, probablemente pueda encontrarlo y explicarlo.
6. Enrutamiento y Abstracciones de Escenas
Short description:
Alguien preguntó sobre el enrutamiento en React y cómo se renderizan las escenas al cambiar de niveles o áreas. El ponente explica que no están utilizando un marco de enrutamiento estándar y que actualmente están trabajando en problemas de compilación de sombreadores. Mencionan que a medida que atraviesas el mundo virtual, la URL cambia y el botón de retroceso funciona. También mencionan el concepto de escenas como abstracciones y se ofrecen a mostrar un archivo de escena para una mayor explicación.
Alguien preguntó, eso es interesante. Alguien preguntó sobre el enrutamiento ¿solo está instruyendo la fuente de la escena, ¿verdad? ¿El enrutamiento? Supongo que en React, el enrutamiento solo está instruyendo la fuente de las escenas, ¿verdad? No estoy seguro de dónde comienza el enrutamiento en este momento. En realidad, no estamos utilizando ningún marco de enrutamiento estándar. Es algo hecho a medida, pero eventualmente se conecta con React. De hecho, me hubiera encantado mostrar mucho más sobre el recorrido de escenas, pero todavía estamos trabajando en problemas de compilación de sombreadores allí, pero la idea es que a medida que atraviesas el mundo virtual, la URL realmente cambia y el botón de retroceso realmente funciona. Simplemente te teletransportará de vuelta a la URL anterior. Probablemente, modulo alguna coordenada. ¿Qué tipo de guardado de progreso automático en tu barra de URL? Sí, estaba preguntando sobre el enrutamiento porque vi que, sabes, cambiaste las diferentes escenas como oscuridad a escenas de hierba, y eso es lo que noté. Pero también me interesaba saber, ¿cómo renderizas otra escena cuando cambia el nivel? ¿Cuando entras en una mazmorra o vas a otra área, o lo haces todavía de forma manual? Estoy seguro de que puedo mostrarte esto aún no está conectado, pero puedo explicarte cómo funciona. Una escena es una abstracción. Incluso puedo mostrarte cómo se ve un archivo de escena. Te mostraré este archivo. Puede ayudar a explicar.
7. Escenas, Optimización y Técnicas de Shader
Short description:
Una escena es un tipo de archivo que puede importar otros tipos de archivos, que contienen diferentes activos. Múltiples escenas pueden coexistir y cambiar entre ellas es fluido. La operación más costosa es la malla del esqueleto, pero existen oportunidades de optimización. El equipo planea reescribir el sistema de avatares utilizando WebAssembly y optimizar la versión de llamada de dibujo de los personajes. Experimentan con técnicas de shader, incluyendo SSAO y diferentes métodos de iluminación. Su objetivo es lograr resultados comparables a Unreal Engine. No dependen de Redux para la gestión del estado.
¡Eso es increíble, gracias! Una escena es simplemente otro tipo de archivo que puedes importar en el webiverso. Lo interesante es que es un tipo de archivo que puede importar otros tipos de archivos. Es una escena y la escena contiene otras URL. Además de las URL, como por ejemplo, la base de la calle, que creo que es este objeto aquí. Las cosas azules, también tienes las luces definidas para la escena. Básicamente, este es un contenido en línea que se traducirá en una URL de datos. Es lo mismo que si cargaras una URL de datos. Pero básicamente son todos estos diferentes activos en la escena.
Y así, al ser las escenas un concepto de primera clase, puedes tener dos escenas al mismo tiempo. Así que tengo un sistema aquí donde si te acercas al borde de donde debería estar la siguiente escena, en realidad se agregará y luego se mostrará una vista previa de la escena tomando una instantánea volumétrica en 3D de ella y luego mostrándola frente a ti. Y esto es solo una llamada de dibujo. No hay ningún impacto en el rendimiento porque toda esa escena está en pausa. Pero aún está ahí. Y ahora básicamente tenemos dos escenas en el mundo al mismo tiempo. Y cuando cruzamos el umbral, podemos cambiar mágicamente de una a la otra o cambiar, pero en realidad hay un error aquí. Esto debería haber mostrado la vista previa completa de toda la escena antes. Pero básicamente podemos caminar hacia adelante y hacia atrás y estas son solo diferentes escenas que tienen datos completamente diferentes y podrían tener salas multijugador completamente diferentes, por ejemplo. Entonces, si estoy aquí, puedo ir a casa de mi amigo y saludarlo. La operación más costosa que está ocurriendo ahora mismo es solo la malla del esqueleto, ¿verdad? Es solo el personaje en sí. Todo lo demás es más bien cargado dinámicamente. ¿Correcto? Así es. En realidad, todo se carga dinámicamente pero hay muchas oportunidades para optimizar aún más. Por ejemplo, probablemente reescribiremos nuestro sistema de avatares. Al menos la parte cinemática en WebAssembly. Ya estamos utilizando mucho WebAssembly, por cierto. Por ejemplo, esta generación procedural es un algoritmo de WebAssembly. La física también es de WebAssembly. Y probablemente también vamos a tomar el código de los huesos que es la única parte computacionalmente pesada de esta aplicación. El resto es solo multiplicación de matrices. Y probablemente lo escribamos en WebAssembly además de hacer que los personajes sean solo la versión de una sola llamada de dibujo lo que significa que hacemos un pase sin conexión para generar nuevamente la textura limpia para el personaje y luego la intercambiamos directamente por las 55 versiones de materiales. Y una vez que arreglemos la iluminación casi ni siquiera se nota la diferencia pero es 55 veces más rápido. En realidad, es más que eso. Es como 110 veces más rápido porque también hay un pase de profundidad secundario que hacemos para algunos efectos, como SSAO. Pero sí, esta es principalmente la única parte costosa de todo lo que estamos renderizando aquí. Todo lo demás son solo shaders básicos, son shaders de 3JS. Puede ser tan rápido como cualquier shader que puedas escribir.
Entonces, eventualmente, ¿vas a depender, más adelante en el proyecto, supongo, de algo en tiempo real, como en un motor real o algo más potente o vas a hacer más trucos de geometría, por así decirlo? ¿Puedes explicar a qué te refieres con trucos de geometría? Como, por ejemplo, puedes tener algunos bloqueadores en la luz para engañar el comportamiento con el entorno en lugar de hacerlo correctamente y ver dónde está la luz por sí sola y simplemente usar algo como Lumen, por ejemplo, y poder abordar ese problema solo con el motor real abierto, por ejemplo.
No, estamos experimentando con, básicamente, las mejores técnicas de shader que podemos implementar. En realidad, la mayoría de esta investigación ya se ha realizado y la mayor parte está en código abierto en alguna forma, ya sea GLSL u otro lenguaje. Como, es solo código abierto de Unity. De hecho, ya hemos implementado muchas de esas cosas. Como por ejemplo, para SSAO. Y luego hay muchas formas diferentes de hacer sombras, puedes hacer iluminación basada en voxels. Todo eso es algo con lo que estamos experimentando. En realidad, es una de mis cosas favoritas ver todos los algoritmos que son posibles y ver lo impresionante que se ve. Siempre me sorprenden los resultados, y luego todos dicen, como, oh, wow, ¿esto es Unreal o algo así? Bueno, yo digo, no, no es Unreal. No es Unreal, pero está utilizando la misma tecnología que Unreal, entonces, ¿hay alguna diferencia?
Y mi última pregunta, lo siento, no quiero quitar tiempo a los demás participantes, pero también tenía curiosidad. ¿Estás utilizando una tienda para mantener el estado en la aplicación en general? ¿O es solo una página, entonces simplemente, vale. Entonces estás utilizando algo como Redux o no sé, como- No es Redux.
8. Integración de la Interfaz de Usuario y el Motor
Short description:
El lado de la interfaz de usuario utiliza useState y el API de contexto para cosas relacionadas con la interfaz de usuario. El contenido principal del motor, incluyendo eventos de escena y estados de personajes, es manejado por el estado YJS, un CRDT que se replica en la red. Esto permite la funcionalidad multijugador, donde los personajes pueden seguirse unos a otros actualizando sus posiciones en el servidor. En este caso, el servidor y el cliente son la misma entidad.
En el lado de la interfaz de usuario, principalmente se utiliza useState, y hay algo de contexto ahí. ¿Oh, es el API de contexto? De acuerdo. Sí, pero eso es solo para las cosas de la interfaz de usuario. El núcleo del contenido del motor, como lo que está sucediendo en la escena, el estado de los personajes, todo eso está en el estado YJS, el CRDT que mencioné. Y eso es lo que realmente se replica en la red. Y es por eso que, aunque todo aquí parece ser para un solo jugador, ya está ejecutando básicamente el mismo código multijugador porque solo está actualizando el motor de estado. El motor responde a los cambios de estado. Y así es como puedes hacer que estos personajes te sigan. Estás actualizando la posición en el servidor prácticamente. Entonces dos personas pueden ver la posición en el plano. Sí, excepto en este caso, el servidor y el cliente son la misma cosa. Entendido. De acuerdo. Sí, muchas gracias. Esto es increíble. No puedo esperar para participar.
9. Explorando Avatares e Interacciones Virtuales
Short description:
Estamos trabajando con artistas para explorar las posibilidades de los avatares en un mundo virtual. Estamos agregando sistemas de combate y dispositivos geniales como arcos y pistolas. Los avatares tienen un sistema de emociones y pueden realizar bailes. Tratamos el movimiento e interacciones de los avatares como problemas de diseño de juegos. Nuestro objetivo es crear un mundo virtual donde las personas quieran pasar tiempo con sus amigos. También estamos trabajando en habilitar el almacenamiento de inventario y configuración en una base de datos, lo que permite la interacción con objetos virtuales desde otras interfaces. La pistola y la explosión son aplicaciones separadas, demostrando un grado de aislamiento. La solución de píxeles permite importaciones dinámicas y carga recursiva. La acción de disparo es impulsada por eventos y eficiente, permitiendo múltiples partículas en una sola llamada de dibujo. La solución de píxeles funciona especificando un punto de entrada y exportando componentes. Las aplicaciones pueden establecer componentes y enviarse mensajes entre sí, logrando un nivel de aislamiento.
Una de las cosas más geniales que hemos estado haciendo es trabajar con artistas para construir este mundo virtual y explorar todas las cosas que podemos hacer con los avatares. Por ejemplo, estamos agregando sistemas de combate para diferentes objetos. Puedo mostrarte, por ejemplo, arcos y pistolas, y todos estos dispositivos geniales con los que puedes jugar en cualquier mundo virtual.
El mundo en el que estamos trabajando es principalmente el mundo del juego, y los avatares también tienen un sistema completo de emociones, por lo que si estás en una sala multijugador y quieres mostrar que estás enojado, puedes aumentar tu nivel de enojo, así como tu nivel de diversión, para estar enojado pero divertido. También puedes hacer cosas como bailar. Y quería mostrar algunos objetos, así que también hemos implementado cinemática inversa para un arco. Puedes disparar y las flechas se adhieren a las cosas. Y también tratamos muchas de estas cosas como problemas de diseño de juegos, como ¿cómo hacer que los avatares se muevan de manera interesante? ¿Qué tipo de interacciones quieres tener en un mundo virtual que realmente te hagan querer estar allí y pasar tiempo con tus amigos? Y creo que la mejor manera de probar la pistola podría ser en la oscuridad. De hecho, una de las características que esperamos habilitar pronto es que todo tu inventario y configuración y todas las cosas que ganas se almacenen en una base de datos que estamos ejecutando y eso permite cosas como estar en Discord e interactuar con todos estos objetos virtuales desde otras interfaces además del juego. Pero sí, hay efectos de iluminación básicos para prácticamente todo. De hecho, esta pistola es un buen ejemplo de múltiples aplicaciones trabajando juntas porque la pistola y la explosión no son la misma aplicación. La pistola importa la explosión. Y eso permite un grado de aislamiento. Entonces, si alguna vez necesitas esta explosión genial en otro lugar, simplemente puedes importarla. ¿Estás haciendo algo como una inyección de dependencias? Sí, esencialmente. Increíble. El compilador del backend es simplemente vjs. Entonces puedes pensar en ello como una importación dinámica y es recursivo. Así que pasará por todo, determinará qué tipo de cosa estás tratando de cargar. En este caso, estoy haciendo referencia a un repositorio de GitHub. Incluso puedo mostrarte cómo funciona y por qué. Pero realmente solo tienes que especificar el repositorio de GitHub.
¿La explosión de píxeles funciona con algún tipo de agrupación de objetos debido a las animations y lo costosas que son las partículas para la acción de disparo, por así decirlo? Es impulsado por eventos. Te mostraré el código en un segundo. Pero es impulsado por eventos. Y en la acción de disparo, todo se basa en cambios de estado. Es una máquina de estados. Cuando ocurre la acción de disparo, por ejemplo, agregamos la luz y luego inicializamos una nueva partícula. Y en cada cuadro, recorremos la animación de la partícula. Y eventualmente, cuando la partícula se da cuenta de que está muerta, se autodestruye. Se elimina de la geometría y la malla se vuelve invisible. En realidad, es bastante eficiente. Y eso también permite que se realicen múltiples partículas en una sola llamada de dibujo porque estamos utilizando instancias para un montón de cubos en este caso. Pero estos efectos serán mucho más avanzados una vez que les dediquemos más tiempo. Aunque creo que en realidad ya se ve bastante genial.
Entonces, la razón por la que la solución de píxeles funciona es que en cualquier lugar donde coloques un directorio HTTP que tenga un archivo llamado.metaverse, se podrá cargar en la web sin importar todo lo demás. Y lo que eso te permite hacer es, básicamente, especificar dónde está tu punto de entrada y algunos componentes que estás describiendo sobre tu punto de entrada. En realidad, esto es un error, ignóralo esto no debería tener ningún componente. Pero, por ejemplo, este tiene un punto de entrada llamado index.js y luego aquí se definen algunos shaders, algunas constantes, algunas funciones para sí mismo. Y finalmente, simplemente exportas un valor predeterminado que especifica qué es tu objeto. En este caso, se hace una inyección de dependencias para un use app, que básicamente llama a nuestro motor. Aquí es donde importas el motor, importas el archivo metaverse desde el archivo metaverse. Entonces, básicamente, obtiene estas funciones del motor que le permiten acceder a qué aplicación soy. El motor ya me ha configurado con componentes, me ha enviado a la escena. Y todo lo que tengo que hacer es crear algunas mallas adicionales, animarlas en cada cuadro. Aquí está, explosionmesh.update, y esto podría ser... Supongo que usa el hook personalizado y la clase, como tal, como una especie de separación de preocupaciones porque luego puedes hacer cosas como la recolección de basura que necesita hacerse por la explosión, no estará vinculada a ningún otro activo, supongo. Sí, eso es correcto. Y las aplicaciones pueden establecer componentes entre sí y enviarse mensajes entre sí. Y eso es básicamente el nivel de aislamiento.
10. Interactuando con Objetos y Optimización
Short description:
Si conoces el tipo de objeto con el que estás interactuando, puedes exponer tu propia API. De lo contrario, son objetos abiertos en la web. Nosotros proporcionamos los primitivos. La pistola importa GLBs y utiliza código JavaScript para hacer que funcionen juntos. Puedes manejar colisiones con una clase y acceder a la API de PhysX. El raycasting te permite golpear objetos y aplicar daño. Los avatares y los edificios pueden ser dañados. También hay vehículos. Las tasas de fotogramas generalmente no son un problema. Los activos están optimizados, pero animar avatares es un desafío. La configuración de renderizado define cómo se ven las escenas, incluyendo la iluminación, SSAO, profundidad de campo y más. Se pueden utilizar mallas procedurales. Los avatares y los activos tienen diferentes requisitos de optimización.
Si sabes con qué tipo de objeto estás interactuando, entonces, por supuesto, puedes hacer cosas más avanzadas, como exponer tu propia API. Pero de lo contrario, estos son simplemente objetos abiertos en la web. Depende de ti definir cómo quieres usarlos. Nosotros simplemente proporcionamos los primitivos.
Por ejemplo, useFrame es solo una conveniencia para cada vez que debería renderizarme, llamar a esta función y luego hacemos la actualización. Sí. Y otra cosa que la pistola, por ejemplo, importa, es que puede importar directamente GLBs. Entonces, la explosión más el GLB es igual a la pistola y el resto es solo código JavaScript para hacer que estas cosas funcionen juntas.
Entonces, cuando disparas o golpeas algo, ¿también usas una clase solo para manejar la colisión? Sí. Entonces, básicamente, tienes acceso a la API de PhysX si lo deseas. Si quieres hacer un Raycast, entonces hay una función para eso. Me pregunto si está aquí en el repositorio de la pistola. Oh, aquí está. Aquí está. Tenemos un Raycast, desde la posición de las armas, cuaternión de las armas. Supongo que esto corrige algún error en el GLB donde tenemos que girar 180 grados, pero básicamente tomas la posición, la dirección a la que está mirando, obtienes un resultado de eso. Y no solo te dirá el punto en el que golpeaste, sino también la aplicación que golpeaste. Así es como puedes apuntar a algo y luego ver, oh, esto es lo que golpeé. Y luego puedo llamar a la función .hit en eso. Y eso permite sistemas de seguimiento de daños. Este edificio aquí no es invencible. En realidad, puedes destruirlo. Si le disparas lo suficiente. Veamos cuánto tiempo lleva. Ahí lo tienes. Está destruido. Veamos. También funciona para avatares donde puedes definir raycasts para saber dónde vas a golpear. Y si eso golpea algún tipo de avatar dentro de su caja delimitadora, dentro de su controlador de personaje, entonces sufrirán daño. Eso permite definir automáticamente la vida útil de un personaje y las mecánicas de juego. ¿Hay alguna otra aplicación que alguien quiera que cubra o profundice? También hay vehículos. Oh, genial. Montar. En realidad, esto es un error. No se supone que deba volverse loco así, pero puedes subirte. Solo se supone que se volverá loco cuando lo estés montando. Supongo que podrías tener algún tipo de problemas con las tasas de fotogramas a veces o no en absoluto, según el objeto con el que estés interactuando. No, eso generalmente no es un problema. De hecho, los activos están en su mayoría optimizados y es bastante fácil obtener activos optimizados en estos días con solo ktx2 y texturas comprimidas y comprimir todo en mallas únicas. El principal problema que tenemos en este momento está casi exclusivamente relacionado con la animación de los avatares porque no hacemos ninguna optimización y son de muy alta calidad. Básicamente, necesitamos hacer un intercambio de geometría en tiempo de ejecución para asegurarnos de que sea una sola llamada de dibujo. Y eso probablemente nos limitará principalmente por cualquier otro contenido que haya dentro de la escena porque el avatar será una operación relativamente económica y solo es cuestión de cuál es el costo de los sombreadores que estás usando, si estás usando niebla, si quieres configurar tus efectos de renderizado. Otra cosa que hacen las escenas es definir la configuración de renderizado de cómo quieres que se vea la escena, lo cual se respeta en cada escena a la que vayas. También mostraré eso. Así que tienes fácil acceso a cosas como la iluminación, pero también tienes SSAO, oclusión ambiental en el espacio de pantalla, profundidad de campo, HDR, brillo, niebla, tipo de niebla. Y a medida que pasas de un mundo a otro, estas configuraciones de renderizado recompilarán tus sombreadores, básicamente, y se asegurarán de que cada mundo se vea de la manera que se ve, e incluso puede tener su propio skybox. También puedes trabajar con una malla procedural, ¿verdad? No solo tienes que trabajar con una estática. Absolutamente. Oh, tenemos una criatura aquí. ¿Te refieres a avatares o a otra cosa? Simplemente para los activos en el mundo en general, creo que para los avatares es bastante costoso, así que... En realidad, necesitamos trabajar, no estoy seguro de cómo maneja la palabra real eso.
11. Generación Procedural y Mundos Infinitos
Short description:
Ya estamos realizando generación procedural utilizando funciones de ruido para crear geometría. Las estructuras de madera, los sistemas de contenedores y el terreno son generados de forma procedural. Tenemos planes para mundos generados infinitamente con biomas, texturas, shaders y elementos interactivos. Estas técnicas son bien conocidas y se han utilizado en juegos como Minecraft. Nos aseguramos de actualizar eficientemente la geometría para evitar caídas de fotogramas.
Sí, adelante. En cuanto a la generación procedural, ya estamos haciendo mucho de eso. Este es en realidad un shader que utiliza funciones de ruido dentro del shader para dibujar todo esto. Básicamente, esta geometría se realiza completamente en la GPU. También en una de nuestras escenas principales, tenemos estos edificios que estamos intentando. Estábamos tratando de construirlo con bloques de fortnight que generan juntos la geometría. Aún no se ve bien porque no hemos reemplazado todas las secciones de pared diferentes, pero todas las diferentes estructuras de madera que ves aquí son generadas de forma procedural. Y está construido correctamente, tiene un interior, también tenemos algún tipo de sistema de contenedores aquí arriba, que nuevamente es generado de forma procedural. Puedes entrar y tener diferentes secciones de algún tipo de hábitat virtual. Y parte de esto utiliza técnicas similares donde simplemente usamos funciones de ruido para generar un terreno y también tenemos cosas mucho mejores en proceso donde se genera infinitamente, tiene biomas. Aplicamos texturas y shaders realmente geniales. Y también lo adornamos con algunas otras geometrías que hemos creado. Así que árboles con dosel, y solo un montón de objetos diferentes con los que puedes interactuar en el mundo. Las técnicas para hacer esto son bien conocidas. Básicamente, esto fue lo que hizo famoso a Minecraft y nosotros estamos haciendo exactamente lo mismo. Estamos utilizando funciones de ruido, mapas de biomas, y actualización eficiente de la geometría en fragmentos a medida que avanzas por el mundo para asegurarnos de que no haya caídas de fotogramas. De hecho, he estado haciendo esto durante años, así que es realmente divertido para mí volver a hacerlo. Pero vamos a hacer mucho de eso para el juego real.
12. Integración de NFTs 3D y Metadatos
Short description:
Podemos integrar NFTs 3D y otros metadatos utilizando un sistema llamado Totem. Totem te permite solicitar una URL que genera un archivo JavaScript importable para cargar tu contenido NFT en el mundo. La URL puede ser una URL de Ethereum con tu dirección o la dirección del contrato y el ID del token. Ya hemos hecho esto para otros proyectos, lo que facilita escribir el archivo JavaScript utilizando metadatos estándar. Puedes importar activos como archivos VRM, imágenes, GIFs y shaders. Agradecemos las solicitudes de extracción de cualquier persona que desee integrar su token o contenido en la cadena.
Hola, ¿puedes explicar cómo puedes integrar como un NFT 3D o cualquier otro tipo de metadatos de NFT? Claro, todavía estamos conectando, por ejemplo, el sistema de inicio de sesión, pero una vez que tengamos los inicios de sesión funcionando, entonces solo será un complemento de Metamask, que nos permite conocer tu dirección. Y una vez que conocemos tu dirección, podemos obtener toda tu lista de NFTs. Pero la forma en que renderizamos todo esto es una vez más, a través del sistema del que hablé antes, es Totem, puedo mostrártelo en un segundo. Porque en realidad ya hemos hecho esto para otros NFTs. Y Totem es un sistema donde solicitas una URL, y a partir de esa URL, se supone que te devolverá un archivo JavaScript importable que puede cargar tu contenido en el mundo. Así que esa URL puede ser una URL de Ethereum en forma de Ethereum y luego tu dirección o la dirección del contrato de Ethereum, y luego el ID del token. Y luego nosotros determinamos el estándar en nuestro backend. Y el trabajo de Totem es descubrir todo esto cómo generar el archivo JavaScript que deseas. De hecho, ya lo hemos hecho para algunos otros proyectos. Entonces, básicamente, todo lo que tienes que hacer es usar los metadatos estándar que provienen del NFT y luego averiguar cómo escribir el archivo JavaScript para ello. Y en muchos casos, esto es realmente simple porque el archivo VRM o cualquier activo o la imagen están directamente allí. Y luego todo lo que tienes que hacer es usar nuestro sistema para importar la imagen. Y así es como se cargan algunas de estas cosas Por ejemplo, esto solo está importando un GIF y luego agregándolo al mundo y Totem se encarga de eso. Lo mismo aquí, este es en realidad un shader. Está en la cadena y sí, básicamente todo lo que tienes que hacer y aceptaremos solicitudes de extracción de cualquier persona que desee integrar su token. Está basado en la dirección del contrato, pero cualquier persona que quiera conectar sus NFTs. Nos encantaría una solicitud de extracción o si realmente lo deseas y quieres conectar cualquier contenido que tengas en la cadena. Nos encantaría ayudarte. Espero que eso responda tu pregunta. Cualquiera puede hacerlo.
13. Personalización y Herramientas para el Usuario Final
Short description:
Tenemos una experiencia nativa y herramientas en el mundo para inspeccionar todo en el mundo. Estamos trabajando en herramientas, incluido un exportador de Unity, para generar archivos y archivos de escena para la creación básica. Planeamos integrar las herramientas de construcción de Fortnite y proporcionar un servicio de alojamiento para mundos virtuales. Es fácil de usar, con funcionalidad de arrastrar y soltar, y puedes jugar sin herramientas externas. Sin embargo, se recomienda el uso de herramientas externas como Blender, ya que a menudo ofrecen una mejor funcionalidad.
La última pregunta. ¿Puedo tener la oportunidad de personalización para mi usuario final, digamos si mi usuario final quiere escalar, modificar, ¿solo el desarrollador tiene la opción o? No, no, no, no. Ojalá pudiera mostrarte más herramientas. Hay errores que estoy corrigiendo. Pero si sabes a qué me refiero con el sistema de construcción de Fortnite, eso es más o menos lo que tenemos, así como herramientas en el mundo para inspeccionar todo en el mundo. Y si esto estuviera funcionando, verías las transformaciones aquí. Así que hay una experiencia nativa. También estamos trabajando en herramientas para hacer eso. Estamos trabajando en tooling, por ejemplo, un exportador de Unity, que siempre y cuando no hayas hecho algo demasiado loco, generará todos los archivos, incluido el archivo de escena, y luego funcionará de esa manera. Pero no solo es necesariamente para desarrolladores. Queremos asegurarnos de que cualquier persona pueda tener acceso a herramientas básicas de creación. Probablemente vamos a integrar todo eso, incluidas las herramientas de construcción de Fortnite. Y de hecho, probablemente también vamos a proporcionar un servicio de alojamiento para gran parte de este contenido para los mundos virtuales de las personas. Así que en realidad podría ser aún más simple. Además de ser de arrastrar y soltar, realmente solo se trata de iniciar sesión. Luego puedes jugar sin usar ninguna herramienta externa. Pero si quieres usar herramientas externas, entonces, por supuesto, lo alentamos, porque en la mayoría de los casos, son mejores. De hecho, usamos Blender para todo.
14. Integración de Tecnología y Rendimiento
Short description:
¿Estás pensando en integrar tecnología web-tree para mejorar el procesamiento? Estamos considerando precargar mundos sin conexión y proporcionar herramientas para la exploración y el intercambio. No tenemos planes de cobrar tarifas de gas. Proporcionaremos alojamiento para el contenido de juegos de primera parte. Los usuarios pueden conectarse a nuestro servicio o ejecutar su propia versión avanzada. Construir WebAverse en un navegador permite un desarrollo tecnológico más rápido. Hay poca diferencia de rendimiento entre las aplicaciones basadas en navegador y las aplicaciones de escritorio tradicionales. La web tiene el potencial de ser la mejor plataforma de juegos. No necesitas Unity para crear algo bueno. Gracias, esta aplicación es impresionante.
Genial. ¿Estás pensando en integrar alguna tecnología web-tree como Hashgraph o cualquier otra para mejorar el procesamiento de mallas y activos y todo lo que tienes en tu supuesta tubería? Probablemente estemos bien. Así que mencioné la técnica de precargar mundos. Probablemente lo haremos también sin conexión y proporcionaremos herramientas geniales para que las personas exploren los mundos de los demás sin necesidad de ir a ellos, solo explorando las vistas previas o incluso creando mapas topográficos que se pueden compartir y decir, por ejemplo, `encuéntrame aquí`. Mucho de eso está en proceso y vamos a construir mucha infraestructura antes de hacer eso, pero si tienes alguna sugerencia de tecnologías específicas que deberíamos usar, me encantaría investigarlas. Queremos usar lo mejor de lo que está disponible. Si tienes alguna idea, probablemente la mejor manera es abrir un problema en GitHub. Algunas de las mejores solicitudes de funciones y sugerencias que hemos recibido han llegado a través de eso. Sí. Sí, lo haremos. También te enviaremos un correo electrónico. Gracias.
Oh, gracias. Como acabo de mencionar, las personas pueden dejar sus obras de arte. Entonces, ¿cobran alguna tarifa de gas como muchos de los sitios web de NFT, donde cobran tarifas de gas y todo en la blockchain? Probablemente no... No puedo hacer ninguna promesa porque no sé cómo... No puedo predecir el mercado, pero realmente no tenemos planes de cobrar tarifas de gas por eso. En realidad, solo queremos financiarnos principalmente construyendo el mejor juego posible y dando a las personas razones para obtener cosas de primera parte o integrarse en el resto del juego. Porque la mayoría de los costos para hacer cosas como acuñar son en realidad bastante bajos. Entonces, la forma en que podríamos restringirlo es simplemente que necesitas haber comprado una copia del juego, entre comillas, que podría ser un NFT, y luego eso te permite, por ejemplo, acuñar infinitamente o algo así. Pero si quieres presentar tu propuesta sobre cuál es la mejor solución, nuevamente, creo que GitHub y unirse al discord, unirse a la discusión es probablemente la mejor manera. Si no te importa, ¿puedo compartir el enlace de tu discord en el cuadro de chat? Sí, está bien. Sí, gracias.
Entonces mencionaste la creación de tu propio mundo virtual y que estás proporcionando un servicio de alojamiento para los siguientes pasos. Si alguien quiere crear su propia misión y jugar en su mundo virtual, ¿imaginas que configurarán su propia database e infraestructura para eso o también lo proporcionas tú? Lo estamos proporcionando solo porque así es como se ejecutará nuestro contenido de juego de primera parte. Pero creo que el caso del que estás hablando es muy avanzado. Espero que podamos mantenernos al día con las solicitudes de funciones y las demandas de los usuarios para que sigan diciendo que es mejor si trabajamos juntos y simplemente nos conectamos a este servicio y luego todo está resuelto. Y luego confías en nosotros para ejecutarlo. Pero lo que nos mantiene honestos, creo que la mejor esperanza es que, lo que nos mantiene honestos es el hecho de que en cualquier momento cualquier persona puede ejecutar la versión más avanzada que es `resuelve esto tú mismo`. Vengo de un entorno en el que sé lo difícil que es hacer estas cosas porque las he hecho. Así que en realidad estoy tratando de evitar que mucha gente tenga un destino horrible al decir que, sí, probablemente intentaremos que te alojes con nosotros. Pero sí, en cualquier momento, cualquier persona que tenga una mejor idea para WebVerse y lo que puede ser, animo a los Forks porque así es como realmente mejoramos todo. Genial. Hola. Sí. Hola, estoy curioso acerca de las capacidades de rendimiento de una aplicación basada en navegador a gran escala como esta. Entonces, ¿cómo se compara con las aplicaciones de escritorio tradicionales como Unity o Unreal? ¿Existen ventajas o desventajas notables para construir WebAverse en una aplicación basada en navegador como esta? Construirlo de esta manera permite que básicamente todo lo demás suceda. Permite que la tecnología avance al ritmo que los usuarios realmente desean, en lugar de al ritmo que alguna, sea cual sea la compañía de motores de juego lo haga. En realidad, no creo que haya mucha diferencia en estos días, porque incluso la implementación de Chrome de WebGL está altamente optimizada. Especialmente si conoces el truco de poder donde en Chrome seleccionas los controladores de OpenGL para tarjetas NVIDIA. En ese punto, es prácticamente nativo. Además, vamos a pasar a WebGPU, que es aún más de bajo nivel que WebGL, que es lo que estamos haciendo actualmente. En realidad, no creo que haya ninguna diferencia apreciable, en los próximos años, probablemente no haya ninguna diferencia apreciable entre un juego de Unity y un juego en la web, porque en última instancia, esto se reduce al poder de cómputo y las API disponibles. Y que alguien realmente tenga la pasión de dar el salto y hacer algo bueno. Creo que eso es prácticamente lo único que le ha faltado a la web, en términos de ser básicamente la mejor plataforma de juegos. Es solo que alguien lo tome en serio, en lugar de decir constantemente, bueno, sí, Unity es malo por todas estas razones, pero tenemos una fecha límite que cumplir, así que voy a usar Unity. Y luego, si todos hacen eso, la web puede estancarse. Creo que uno de mis objetivos es mostrar a las personas que no necesitas usar Unity para hacer algo bueno. Y en muchos casos, en realidad puedes hacerlo mucho mejor con una interfaz de arrastrar y soltar en el navegador. Gracias, sinceramente, esta aplicación es sinceramente impresionante.
15. Optimización de rendimiento y Principios Fundamentales
Short description:
Hemos adoptado un enfoque de principios fundamentales para el rendimiento, considerando factores como la carga de avatares, los shaders y el renderizado dependiente del contexto. Muchas bases de código carecen de optimización de rendimiento debido a la falta de comprensión de los motores de juego y la recompilación de shaders. El Web Reverse tiene como objetivo abordar estos problemas y crear un motor de juego de alto rendimiento.
Apenas estamos comenzando. Sí, es posible que hayas mencionado esto. ¿Cómo es, qué cosas has integrado que hacen que esto sea mucho más eficiente que otros juegos basados en navegador, como desde HTML, archivo HTML, WebGL? No hay mucha diferencia, aparte de que en realidad, me considero un ingeniero bastante experimentado en todo esto. Y en realidad, la forma en que comencé con todo esto fueron los compiladores y la optimización de código. Así que creo que con 3JS, especialmente y con la cultura de la web donde principalmente se trata de copiar y pegar código para que funcione y luego pegas algo y de alguna manera funciona y luego lo lanzas, creo que eso ha construido muchas bases de código que simplemente no tomaron en serio el rendimiento en absoluto porque no entienden necesariamente el motor de juego subyacente, no entienden la recompilación de shaders. No entienden por qué son necesarias las texturas comprimidas, y así sucesivamente. Y si acumulas suficientes de estos errores, puedes construir una especie de monstruosidad de una aplicación que parece funcionar a pesar de todos los errores que has cometido. Creo que con el Web Reverse, hemos adoptado un enfoque de principios fundamentales como qué significa cargar un avatar, qué tipo de shaders va a tener, ¿los shaders dependerán del contexto del mundo? ¿Necesitamos precargar cosas? ¿Necesitamos transferir este procesamiento a algún tipo de trabajador? Creo que muchas personas realmente no han tenido la voluntad de hacer ese tipo de preguntas. Pero cuando te haces esas preguntas, las mismas preguntas que las personas que crearon Unity y personas como mis héroes, como Tim Sweeney, son las personas que realmente se lo tomaron en serio, pensaron en estas cosas. Y espero que el Web Reverse en última instancia se considere algo así como, bueno, y cuando alguien se tomó en serio la web, realmente tienes un motor de juego bastante bueno. Buen trabajo.
16. Publicación de Tutoriales y Compatibilidad Móvil
Short description:
Planeamos publicar tutoriales sobre cómo hemos diseñado el sistema. Actualmente, la plataforma es compatible con dispositivos móviles y funciona tanto en dispositivos móviles como en computadoras de escritorio. Aunque puede haber errores, estamos trabajando activamente en resolverlos. Nuestro objetivo es alcanzar el estado beta, donde se implementen todas las características necesarias. También estamos explorando la integración con ARKit y utilizando cámaras web con TensorFlow y KaleidoKit para animar avatares. Si bien el uso de una cámara web para crear avatares con rostros reales no es nuestro enfoque actual, es una idea interesante que otros están explorando.
¿Planeas publicar tutoriales y cómo lo has diseñado? ¿Podrías repetir la pregunta? ¿Publicar los estudios? Como publicar tutoriales sobre cómo tienes tus tutoriales. Ojalá tuviera más tiempo para hacer eso, sinceramente. Voy a decir que sí, porque sé que mucha gente quiere que lo haga.
Sí. Hola chicos, ¿puedo hacerles una pregunta? ¿Es compatible con dispositivos móviles? ¿Funciona en dispositivos móviles o en computadoras de escritorio? No sé si actualmente funciona en iOS. Es posible que haya errores pero no hay razón para que no funcione realmente. Si los hay, probablemente sean errores pequeños. Porque actualmente no hemos alcanzado el estado beta. El estado beta implica que todas las características que necesitamos estén más o menos presentes en la primera versión. Y luego vamos a solucionar todos estos problemas Como, ¿funciona en iOS? Configurar las tuberías de testing y demás. Definitivamente está en proceso. También queremos integrar, con suerte, cosas como ARKit. Porque en realidad ya tenemos un sistema que utiliza cámaras web y simplemente TensorFlow, creo, es el que usamos, PoseNet, con KaleidoKit para animar los avatares. Entonces, incluso si no tengo un dispositivo de realidad virtual, solo tengo una cámara web, puedo unirme a multijugador y básicamente tener un avatar animado en el mundo. Así que eso también está en proceso. Entonces, ¿puedes usar tu cámara y crear tu propio avatar, como usar tu rostro real y- Eso no es para lo que lo estamos usando en este momento. Pero suena como una idea genial. Sé que otras personas lo están haciendo, como Ready Player Me. Como, tal vez sea mejor si lo implementas, supongo. Es mucho trabajo. Sí, entiendo.
17. Generación Procedural y Jugabilidad Atractiva
Short description:
Los mundos virtuales a menudo carecen de actividades atractivas más allá de las interacciones básicas como caminar y disparar. Sin embargo, estamos abordando este problema a través de la generación procedural. Al combinar elementos de Minecraft y Fortnite, estamos creando un mundo donde todo es generado y destructible. Esto incluye biomas para explorar, NPCs con comportamiento controlado por IA y misiones generadas de forma procedural. Hemos construido la infraestructura necesaria para implementar fácilmente estas características, ya que los NPCs y las criaturas se tratan como objetos con animaciones, hitboxes y estadísticas. Esto permite la existencia de mecánicas de combate y crea un ciclo de juego atractivo. Además, los jugadores pueden personalizar su experiencia agregando objetos que les ayuden en sus misiones.
Tengo más bien una pregunta sobre el diseño del juego. Tengo más bien una pregunta sobre el diseño del juego. Así que un problema muy común que he visto en los mundos virtuales es que generalmente no hay mucho que hacer. Puedes caminar, puedes insertar imágenes, puedes disparar, pero ¿qué más hay para hacer? ¿Cómo nos vamos a entretener con eso? Esa es una excelente pregunta. Creo que la respuesta es la generación procedural. Esa es en realidad mi especialidad y estoy realmente contento de volver a ello. Básicamente estamos creando una combinación de Minecraft y Fortnite donde todo es generado. Todo es destructible utilizando todos los sistemas de física que ya tenemos y utilizando una gran cantidad de técnicas de optimización. Así que hay biomas que puedes explorar con NPCs controlados por IA que te ayudarán o te dificultarán tu misión según lo que la IA devuelva y misiones generadas de forma procedural como hablar con este NPC y luego la gente puede compartir semillas interesantes como, ¿sabías que si vas a este lugar hay este NPC que te ofrece una muy buena oferta en esta misión y puedes realmente aprovechar eso. Todo esto es en realidad bastante fácil de conectar con toda la infraestructura que hemos construido porque los NPCs son solo objetos, las criaturas son solo objetos, son solo cosas a las que les estableces animaciones, tienen su propia hitbox y básicamente todo tiene estadísticas también. Esto permite la existencia de mecánicas de combate. Creo que la gente se sorprenderá mucho con lo que vamos a crear aquí porque básicamente me encanta hacer cosas de generación procedural pero creo que eso es todo lo que realmente necesitas para crear ese increíble ciclo de juego. Y además, por supuesto, si quieres agregar tu objeto para ayudarte en tus misiones eso lo hace aún más interesante.
18. Sincronización de Posiciones con CRDTs
Short description:
El servidor utiliza CRDTs para sincronizar las posiciones en casi tiempo real. No es intensivo en datos e incluye compresión de audio utilizando WebCodecs. Existe latencia, pero se logran animaciones suaves a través de la interpolación.
Sí, me gusta eso, gracias por tu respuesta. Me llamó la atención cuando dijiste que tienes una amplia experiencia en compiladores y problemas relacionados con la memoria. Claro. Ahora mismo, ¿hay un servidor de emparejamiento o estás utilizando algún otro servidor de terceros como un servidor de juego para sincronizar las posiciones en casi tiempo real? Solo estamos utilizando CRDTs. Tal vez pueda mostrarte ese código. Básicamente es un tipo de datos replicado que el servidor refleja en todos los clientes. Probablemente sea WSRTC. Y esto puede ejecutarse en cualquier servidor. No recomiendo ejecutarlo en una red doméstica o algo así. Sí. Pero teóricamente podrías hacerlo, en realidad no es intensivo en datos en absoluto porque incluso cosas como el audio se comprimen utilizando WebCodecs. Pero sí, en su mayoría es solo un intercambio rápido de datos. Por supuesto, hay latencia, actualmente no hacemos ninguna predicción, pero podríamos hacerlo. Sin embargo, sí realizamos interpolación. Entonces, independientemente de las diferentes velocidades de fotogramas de los jugadores todos ven animaciones suaves de los personajes de los demás. En realidad, sorprendentemente no es un problema tan difícil.
19. Código Backend, Rendimiento y Optimización
Short description:
El orador discute el uso de JSON en la aplicación y la posibilidad de utilizar WebAssembly para obtener un rendimiento más rápido. Explica que la mayor parte del trabajo se realiza en el frontend y que el bucle de renderizado de React no se ejecuta cuando todo está cerrado. El orador también menciona el uso de un minimapa y planes para optimizar el código backend en el futuro. Se discute el uso de Deno y la posibilidad de utilizar funciones sin servidor para obtener más monitoreo y potencia. El orador explica que el código para convertir avatares en sprites está escrito en JavaScript y se almacena en la tienda de la aplicación.
La siguiente pregunta. Entonces, la operación más pesada en términos de construcción, supongo, realmente no tienes ningún puente de construcción hacia JavaScript, ¿verdad? JavaScript simplemente se ejecuta limpiamente en React y React simplemente renderiza componentes. No tiene nada que ver en términos de convertir código o poder leer desde un archivo agnóstico de lenguaje como un búfer de perlas o algo así, ¿correcto?
Sí, eso es en su mayoría correcto. Estás lidiando con JSON, básicamente. Sí. Pero esa lectura de JSON, ¿es lo más rápido que se puede hacer? ¿No es, por ejemplo, algo que funcionó con, no sé, búferes o datos en serie que podrían ser aún más eficientes en rendimiento?
Sí. Si nuestras herramientas de perfilado alguna vez dicen que este asunto de JSON es un problema, lo moveremos a WebAssembly porque creo que es una excelente idea y creo que sería genial explorarla. ¿Podemos tomar todos estos CRDT y simplemente escribirlo en Rust o lo que sea. Sí. Y compilarlo a WebAssembly y luego tendrías este increíble motor de estado y luego solo tienes una interfaz limpia de eventos. Porque parece que gran parte del trabajo se realiza desde el frontend, por lo que no se realiza ningún renderizado del servidor o algo así, ¿verdad? Porque es como un sitio estático, por así decirlo.
Sí, en su mayoría. No es un sitio estático en el sentido de que usamos el estado de React para dibujar, por ejemplo, la interfaz de usuario. Pero por ejemplo, cuando todo está cerrado, no se ejecuta el bucle de renderizado de React. Esto es solo el motor del juego y todo se pinta encima de eso por el navegador. Pero cuando el componente está cerrado, es prácticamente como la destrucción de un componente en React, por lo que simplemente se recoge como basura. En algunos casos, sí. En otros casos, donde no queremos reinicializar cosas, simplemente lo mantenemos y lo ocultamos. De acuerdo, es solo un modelo, por así decirlo. Sí, pero realmente depende. Nos aseguramos de que sea eficiente en lo que sea. Por ejemplo, no necesitamos renderizar el avatar cuando está fuera de pantalla. Cosas así. También nos permite hacer cosas geniales como tener un minimapa. Es difícil de ver probablemente, pero hay un minimapa que se renderiza en tiempo real desde la vista superior y almacena en caché las imágenes a medida que avanzas. Así que en todo momento, tienes una vista perfecta de dónde estás. Y en realidad virtual, esperamos que esto pueda ser un buen mapa físico que puedas sacar. Es como un renderizado. Genial. En cuanto al código backend, ¿crees que puedes mostrar algunos problemas interesantes con los que te encontraste y explicar cómo los resolviste? Porque supongo que al no ser una aplicación súper intensiva en el backend, no debería tener tanta carga pero veo muchos tipos interesantes de operaciones, como operaciones con cuaterniones. Así que me preguntaba si podrías darnos una descripción general rápida. ¿Te refieres literalmente al código backend porque se ejecuta en el backend o estás más interesado en problemas técnicos de geometría? Porque la mayor parte de las cosas de geometría se manejan completamente en el frontend.
Sí, y eso es algo que he podido hacer como. ¿No es menos eficiente tenerlo en el backend? Desde como- Sí, en algunos casos, en algunos casos. Por eso, en este momento, una de las cosas que haremos después de asegurarnos de que todo esto sea interoperable y podamos comenzar a atravesar mundos para poder hablar mejor entre nosotros, probablemente optimizaremos muchas de estas cosas y las moveremos del frontend al backend. Porque es solo JavaScript, es JavaScript aislado. Básicamente se puede ejecutar en cualquier lugar. En el futuro, de hecho, actualmente estamos usando Node. Pero en el futuro, esperamos usar Deno para que sea aún más similar a un navegador en el backend. Deno ya tiene WebGPU. Entonces, si tuviéramos WebGPU, probablemente ya podríamos hacer eso y luego ser una aplicación prácticamente nativa. Pero luego con Deno, tendrías que pasar por la compilación a JS, ¿verdad? Porque solo es compatible con TypeScript, si no me equivoco... Creo que también admite cualquier JavaScript. De acuerdo. Pero ya tenemos nuestro propio sistema de compilación en Totem. Supongo que algunas de las funciones aquí también pueden ser como sin servidor, ¿verdad? Porque quieres tener un poco más de monitoreo, un poco más de potencia asociada a eso. Sí, absolutamente. Pero la forma en que escribí todo el código diferente, como por ejemplo, el código que convierte tu avatar en un sprite, es solo el archivo de JavaScript que define la interfaz de Three.js para generarlo y la malla para renderizarlo. Esto es lo que se mantiene en la tienda, ¿verdad? En la configuración general de la aplicación, por así decirlo. Sí.
20. Generación de Sprites y Animación
Short description:
El motor puede convertir al usuario en un sprite generando el código del sprite en el backend. El código para generar el sprite se puede mover entre computadoras. El código del avatar cruncher genera la imagen completa de la hoja de cálculo para el avatar. Se utiliza un shader para dibujar el avatar basado en la normal de la cámara y el fotograma correcto de la textura. Esto permite la creación de personajes simples y ayuda a superar las limitaciones de volumen de la red. El sistema puede detectar y cambiar el cabello del personaje de forma programática. El sistema de animación permite que ocurran múltiples acciones simultáneamente y especifica las animaciones para diferentes acciones. La vinculación entre objetos y animaciones se realiza a través de desplazamientos de huesos. La etapa del jugador determina el estado actual del avatar.
Y luego el motor, basado en eso, responderá convirtiéndote en el sprite. Pero el código para generar el sprite es algo que podríamos realmente trasladar al backend. Viste que hubo una pausa allí, eso se debe a que se está haciendo todo en el frontend. Pero esto también podría hacerse fácilmente fuera del hilo principal. Simplemente no he tenido tiempo para optimizarlo. Lo bueno del web es que básicamente puedes mover el código entre computadoras y simplemente funciona. Es solo un búfer. Si tienes algo como node, sí. Si tuvieras un marco de backend un poco diferente, supongo que habría sido un poco más complicado. Sí, pero desde el principio hemos tratado de mantenerlo lo más básico y compatible con todo. Así es como hemos podido unir todo esto con componentes de código abierto puros.
Este es el código del avatar cruncher porque básicamente toma tu avatar y lo comprime. En este caso, es el código para el atlas. Y luego tenemos otra función que es el avatar spriter, que también realiza el cálculo de posicionar las cámaras en los diferentes lugares, animar al avatar porque obtienes el ciclo completo de caminata así como los ciclos de salto, luego obtienes las diferentes acciones, como por ejemplo, gatear. Entonces, coloca al avatar en todas estas posiciones diferentes, posiciona la cámara, toma una captura de pantalla, y luego genera la imagen completa de la hoja de cálculo. Y luego tenemos un shader que toma la normal de la cámara hacia el plano. En realidad, esto es solo un dibujo de un solo plano, pero toma la normal de la cámara y encuentra el fotograma correcto de la hoja de cálculo, de la textura, y luego simplemente lo dibuja. En realidad, es una operación muy económica, y una búsqueda de textura. Y básicamente eso te permite crear personajes que son lo más simples posible y que esperamos que sea la solución temporal para poder tener a miles de personas en este tipo de mundos, porque en ese punto, el cuello de botella tiende a no ser ni siquiera los gráficos. Es simplemente el volumen de la red y cómo se transmite correctamente. Así que en este punto, no parece haber muchas limitaciones en lo que podremos hacer. Me pregunto si eso funciona. Ahí vamos. También tenemos un sistema para que nuestros personajes sean transformados por shaders adicionales. Alguien tiene una pregunta, la responderé. Ahí vamos, funcionó. Básicamente, puedes detectar cuando es el cabello de un personaje y luego cambiar su cabello de forma programática. Así que esta es una aplicación que interactúa con otra simplemente debido al hecho de que se utiliza el formato de archivo estándar y se puede detectar qué es cabello y qué no lo es. Eso también nos permite hacer cosas como cuando te acercas al personaje, en realidad no ves su cara, no ves su cabello, simplemente lo recortamos usando Vertex Jitter. Simplemente anulamos esas posiciones que estaban en esa transformación, y luego cuando te alejas puedes ver la cabeza completa del avatar y hace que la experiencia sea relativamente fluida. Funciona para la mayoría de los avatares, simplemente puedes arrastrarlos y soltarlos y obtienes una vista en primera persona o en tercera persona. Eso está vinculado a la acción de la rueda del mouse o algo que cambia la cámara prácticamente. Así es, sí. En cuanto a la animación, vi que hay un switch case allí, como para poder reproducir diferentes animations al mismo tiempo, o hay algún tipo de sincronización entre esos tipos de acciones. Pueden ocurrir múltiples acciones al mismo tiempo. Por ejemplo, apuntar es una acción y hace que tu avatar mire en una dirección determinada, pero también me estoy moviendo. Por lo tanto, es la intersección de estas dos acciones diferentes lo que crea la animación, que es como caminar de lado. Y cuando llevas puesto un objeto que puede cambiar la funcionalidad de lo que significa apuntar. Estas animations aún son un poco rudimentarias. Vamos a hacer una transición limpia, pero todo nuestro sistema de animación es consciente de todas las diferentes acciones que puedes tener en tu avatar. Y especificamos cuál es la lista de ellas. Por ejemplo, este es el tipo de apuntar con espada hacia atrás. Y luego la espada simplemente define que soy el tipo de objeto que cuando me apuntas, básicamente debería tener esto. Y luego cuando me haces clic o me activas, entonces debería atacar de esta manera con estas animations de combo. Y el avatar simplemente lo ejecuta. La vinculación entre el objeto que define la animación es principalmente un desplazamiento de uno de los huesos del personaje. Como en este caso, creo que es la muñeca porque es lo más cercano a la mano. Y luego simplemente lo desplazamos para que el personaje lo sostenga.
Tienes una especie de etapa del jugador que dice, `Oye, estoy en un vehículo`, `Oye, estoy manejando la espada`, y todo eso. Exactamente, así es.
21. Animación del Avatar e Integración Multijugador
Short description:
La acción de Apuntar es manejada por el gestor de IO y llamada al motor del juego. El sistema de avatar reconoce las acciones del jugador e incluye la animación correspondiente en la pila de animaciones del personaje. En un entorno multijugador, se utiliza el mismo CRDT para los jugadores conectados, lo que permite que sus avatares tengan su propio estado e inventario. Los cambios en el CRDT se replican en el mundo compartido, lo que permite que otros jugadores vean los objetos que se están soltando. También se admite la transferencia de voz y la optimización de la animación del avatar es un desafío conocido. El motor recoge las transformaciones replicadas y las pasa a la aplicación, asegurando que todos los usuarios vean lo mismo. El orador menciona un producto de Adobe que puede entender y aplicar mallas y mallas esqueléticas, lo que facilita el manejo de movimientos complejos. El arma está representada por metadatos, que son interpretados por el avatar. Se muestra el código de una espada específica, destacando su capacidad para tallar cosas en el mundo.
Y eso es algo que puedo mostrar también. Acciones, probablemente juego. Aquí está la acción de Apuntar. Creo que hay una mejor. La acción de Apuntar, probablemente cuando el usuario, sí, cuando el usuario hace clic derecho eso es manejado por el gestor de IO. Y luego el gestor de IO lo va a llamar al motor del juego, para decir, Oh, ¿qué debo hacer? En este caso, significa agregar la acción de Apuntar. Y luego más tarde el propio sistema de avatar, reconoce eso, Hey, este jugador tiene esta acción de Apuntar. Puedo mostrar también ese código. Que luego incluirá su animación en la pila de animaciones del personaje. Y hay un montón de reglas para cómo esas animaciones se apilan y componen. Y también hay un montón de errores que necesitamos corregir. Pero la idea es que no importa lo que tu personaje esté haciendo no importa cómo te estés moviendo queremos que haya una animación creíble. En algunos casos eso significa que tienes que dividir el avatar en dos partes, la mitad superior y la mitad inferior porque quieres que las piernas vayan en una dirección pero están sosteniendo algo de otra manera.
Entonces, en un entorno multijugador, ¿el otro jugador sabría que estás en un cierto estado de jugador? Sí. Sí, porque sí, olvidé mencionar que esto en realidad utiliza el mismo CRDT cuando estás conectado a una sala multijugador. También es tu propio avatar el que tiene su propio estado. Así que tu avatar tiene su propio inventario y eso no está relacionado con el inventario del mundo. Está vinculado a tu avatar. Y de hecho, cuando sueltas algo en el mundo y lo vuelves a recoger se está moviendo entre esos diferentes gestores de aplicaciones lo que también permite la posibilidad de que cuando vayas a un mundo diferente todas las cosas que llevas también vengan contigo. Y todo esto se replica utilizando el CRDT y básicamente todo el motor del juego simplemente responde a estos cambios en el CRDT. Como este objeto desapareció de aquí y apareció aquí. Así que eso significa que necesito moverlo. Necesito animarlo de nuevo en el avatar porque simplemente lo agarraron. Pero en el mundo compartido, por así decirlo como cuando haces multijugador las otras personas también pueden ver qué tipo de objeto estás soltando por esa razón.
Sí, sí, porque el jugador individual en el código multijugador es exactamente el mismo. Está utilizando el mismo almacenamiento de datos. La única diferencia con el multijugador es que ese estado se replica. Y además de eso, por supuesto, hacemos la transferencia de voz real para que puedas hablar. De hecho, la forma más eficiente de hacer esto una vez que hayamos solucionado el soporte de realidad virtual probablemente será hacer la animación una vez en un cliente y luego enviar las transformaciones de huesos reales a la red. Y luego el resto de los clientes no necesitarán realmente animarlo. Porque como mencioné, esta es en realidad una de las partes más costosas de todo el motor, simplemente animar avatares. Es en realidad un problema conocido. Así es como funciona VRChat también. Básicamente solo quieres animarlo una vez en el cliente y luego no en otros remotos. Y luego los remotos simplemente reproducen las animaciones. Y eso es una especie de optimización que podemos hacer sobre esto. Pero la forma en que funciona actualmente es simplemente que las acciones que se replican, el motor, ya sea un jugador individual o un cliente remoto simplemente recoge esas transformaciones, las interpola y luego las pasa a la aplicación para que el usuario vea exactamente lo mismo. Supongo que hay algo que es como, tal vez como si fueras a expirar a algo más como el producto recientemente adquirido por Adobe, el que prácticamente puede entender qué tipo de malla y malla esquelética debe aplicar. Suena genial, no había oído hablar de eso. No recuerdo el nombre. Definitivamente te lo enviaré por correo electrónico, tan pronto como lo recuerde. Pero va a ser como un problema bastante más fácil de manejar porque como mencioné antes, supongo que la malla esquelética es la más costosa. Así que si tienes un jefe que tiene movimientos más intrincados o algún movimiento más flotante o algo así. Siento que, ya sabes, eso podría ser realmente costoso y tienes 1,000 jugadores al mismo tiempo. Oh hombre, necesitas un T630 para eso. Ahí lo tienes. Entonces mencionaste que, cuando estabas hablando de las animaciones que la animación que tiene el avatar depende de la espada o el arma que están llevando. ¿Las armas envían señales al avatar, por así decirlo, o cómo funciona eso? El arma es un conjunto de metadatos, puedo mostrarlo, que luego es interpretado. De hecho, este es el código para esta espada exacta. Así que en primer lugar, solo dice, está diciendo que es index.js y esto es solo porque la espada tiene características adicionales como que en realidad puede tallar cosas en el mundo.
22. Animación del Avatar y Posibilidades Futuras
Short description:
El sistema permite animaciones de apuntar y sostener múltiples objetos. La diferencia entre jugadores locales, jugadores remotos y NPCs es importante para las características de IA. Hay voces seleccionables generadas por IA disponibles para los personajes. El futuro puede traer una inmensa variedad y aplicaciones complejas. Los motores de IA son seleccionables en la aplicación y es posible la integración de OpenAI. El objetivo es proporcionar una experiencia increíble que difumine la línea entre sitio web y videojuego. El estilo probablemente se acerque al estilo caricaturesco de Fortnite. Se admite la construcción en Blender y la funcionalidad de arrastrar y soltar.
No sé si eso está funcionando en este momento pero básicamente tiene esa función. Por eso, además de ser el GLB, también tiene el script, pero también especifica, por ejemplo, que para la acción de apuntar, la aplicación debe reproducir una cierta animación y el jugador también debe reproducir una cierta animación. Entonces, en este caso, cuando apuntas, el jugador debería entrar en la animación de la espada en reposo, que es exactamente lo que sucede cuando hacemos clic derecho. Y todo esto está definido y analizado en un archivo JavaScript que luego obtienes en el frontend, que implementa este comportamiento de agregar esta acción al avatar, eliminarla cuando dejan de apuntar y asegurarse de que el avatar se anime de acuerdo a la cosa que están usando y activando en ese momento. Y tenemos la opción de, por ejemplo, tener varios objetos. Así que puedes sostener el arco o sostener la espada al mismo tiempo, simplemente según las teclas que estés presionando. Y esto simplemente cambia el estado del avatar en consecuencia. Entonces. ¿El sistema sabe si un NPC está controlado por una persona o si está controlado por IA? Sí, hay diferentes clases en el código. Hay un jugador local y luego hay un jugador remoto y luego hay un jugador NPC, creo. Así que eso es una comprobación fácil. Incluso puedo mostrar eso. En función de eso, puedes entender cuánto renderizado debes hacer para colocar un objeto en el mundo. Esto no es generalmente cómo estimamos eso. El costo de renderizado de un objeto tiende a ser más una propiedad de cuántos materiales tiene y qué tan grandes son las geometrías. Esos son los dos factores principales. Así que eso generalmente no está relacionado con los jugadores reales. Manejamos eso a un nivel mucho más bajo. Pero por ejemplo, la diferencia entre un jugador local y un jugador remoto es más importante para las características de IA que tenemos, porque necesitamos saber cuando estamos básicamente interactuando con el sistema. ¿Esto es algo que viene del jugador? ¿Hay un NPC que debería moverse, realizar alguna acción? Sí, una cosa que ni siquiera he mostrado es que en realidad tenemos voces seleccionables generadas por IA para todos estos diferentes personajes. Así que además de algunos de los personajes que estamos creando en esta lista, vamos a agregar muchos más. Y todos tienen sus propias voces generadas por IA que en este momento es fácil de probar que puedes ir a la configuración de audio y simplemente cambiar la voz por otra persona. Y luego tu personaje tiene una voz completamente diferente. ¿Es eso un mapa neuronal que entiende qué está sucediendo y aprende del estilo de lucha o adopta la dificultad del jefe o algo así? No en este momento, estamos comenzando principalmente con la generación procedural de misiones utilizando el sistema de IA. En el futuro, probablemente, una vez que descubramos qué es lo más divertido y qué es lo que más disfrutan las personas, encontraremos formas de, ¿cómo podemos hacer esto aún mejor y darle a estos personajes cierta memoria, eso realmente suena como una idea genial. Pero por ahora, principalmente ¿cómo podemos hacer algo que sea atractivo, realmente divertido de jugar? Y luego el cielo es el límite. Realmente desearía poder mostrar más de las características de IA porque me sorprende. ¿Qué podría deparar el futuro? Probablemente sería una cierta variedad inmensa de objetos que se intercalan, como dijiste, Bruce, hay mucho en animadores realmente grandes y tienes grandes GPUs y software y de repente, estos son pequeños juguetes. No es una variedad realmente amplia que sale de eso. ¿Cómo diseñas una aplicación que tenga ese nivel de complejidad? En términos de motores de IA, en realidad es solo una opción seleccionable en la aplicación. Si tienes tu propia clave de API, por ejemplo, para OpenAI, puedes ingresarla. En realidad, no almacenamos eso. Es completamente local. Y luego básicamente puedes usar OpenAI con la aplicación. Esperamos poder expandir eso básicamente a todos de forma gratuita, para que ni siquiera tengas que hacer eso. Pero eso es algo que requiere la aprobación de OpenAI antes de que podamos `lanzarlo`. Queremos que esto sea simplemente una experiencia increíble cuando te sumerjas en ella. Sientes que por primera vez, abriste un sitio web y estás confundido. ¿Es esto un sitio web o es un videojuego serio? ¿Lo mantendrás con baja poligonización o realmente le aplicarás gráficos un poco más altos? No, probablemente... No estamos tratando de ser realistas, pero probablemente no seremos de baja poligonización, por así decirlo. Probablemente estaremos más cerca de Fortnite. Estilo favorito. ¿Entonces un estilo caricaturesco? Probablemente. Hemos descubierto que a mucha gente le gusta construir muchas cosas diferentes en este tipo de tecnologías. Y parece que el estilo caricaturesco es lo que más se adapta. Así que eso es lo que probablemente haremos para nuestras propias cosas, pero animamos a las personas a construir cualquier otra cosa, ha habido otras cosas que en realidad están tratando de ser realistas. Y todo es realmente muy fácil de configurar. Si puedes hacerlo en Blender, entonces es solo arrastrar y soltar. Me encanta esa función.
23. Técnicas de Juego y Audio
Short description:
Estamos utilizando técnicas inspiradas en juegos como Minecraft y No Man's Sky. El objetivo es crear un mundo vivo y en constante evolución con muchas cosas por explorar. El audio web permite sonido posicional y convoluciones en el motor del juego. La función del jefe aún no está habilitada.
Supongo que puedes ayudar o confundir a muchas personas durante una misión, no sé, duplicando el objeto de la misión o algo que no tenga ninguna interacción. Realmente estoy interesado en lo que el juego va a presentar, porque las técnicas que estamos utilizando, las estamos aprendiendo de los mejores. Las técnicas que estamos utilizando están inspiradas en los juegos en los que crecimos, como Minecraft y No Man's Sky, entre otros. Estamos reimplementando lo mejor de eso. Y si alguna vez has jugado algo como No Man's Sky, sabes lo increíble que es, como la sensación cuando aterrizas por primera vez en un planeta alienígena y hay tantas cosas por explorar y sientes que es un mundo vivo y en constante evolución. Otro juego que realmente disfruté fue Subnautica. Así que si no lo has probado, definitivamente deberías hacerlo. Me pregunto dónde está la entrada de la cueva. Ahí está. Muy bien. Resulta que cosas como el audio web también son bastante buenas. Por lo tanto, podemos obtener convoluciones en el motor del juego prácticamente de forma gratuita, solo con metadatos que definen que esta es un área con esta cantidad de reverberación. Y nuevamente, puedes obtener sonido posicional para las cosas que dicen tus personajes. En realidad, no sé si el jefe está habilitado para esto. Parece que aún no, así que podríamos estar a salvo.
24. IA y Misiones Procedurales
Short description:
Estamos experimentando con un sistema de grupo para cambiar el control entre múltiples personajes. La escena de IA en nuestro sistema comprende descripciones y genera misiones basadas en los datos. Estamos explorando constantemente los límites de las misiones generadas de forma procedural. Si estás interesado, prueba a jugar con OpenAI. La combinación de IA y tecnología web permite a un equipo de desarrollo de una sola persona crear todo un universo. Tenemos un equipo y estamos contratando. El sistema de IA se encarga de la búsqueda de jugadores y genera nuevas misiones.
Otra cosa con la que estamos experimentando, ya que estamos haciendo misiones y generación procedural y cosas así, es, por ejemplo, un sistema de grupo, donde a veces no solo quieres ser un personaje, sino un grupo de personajes. Entonces, ¿cómo se cambia el control entre ellos? Eso es principalmente una cuestión de ajustar un poco de código.
Tengo curiosidad por saber, ¿cómo lo has diseñado de forma procedural? Por ahora, solo basado en la historia. Estamos en los primeros días, pero por ahora, principalmente basado en la historia. Así es como funciona el sistema de OpenAI, hay una escena virtual, además de la escena real que estás renderizando, hay otras dos cosas, supongo. Está la escena de físicas, que es la vista del motor de físicas, que no es la que estás renderizando, pero también está la tercera, que es la escena de IA. Y lo que hace la escena de IA es comprender todas las diferentes descripciones, incluso descripciones textuales, y las descripciones analizadas de los datos que has cargado. Así que cualquier cosa que se llame y cualquier descripción adicional que hayas añadido para la escena se alimenta al algoritmo de IA, que luego genera lo que cree que sería la mejor misión, la misión más divertida que podríamos tener en este territorio. Y luego eso se analiza de nuevo por el motor en función de un conjunto predefinido de misiones. Lo estamos ampliando y hay muchas personas que tienen muchas ideas, pero una simple es ir a esclavizar a este jefe porque entiende que esto es boss.glb y el mundo dice, oh, esto es una caverna que tiene una criatura peligrosa viviendo en ella. Cuando conectas algo así a un sistema como OpenAI y generas una indicación adecuada, en realidad producirá una aproximación razonable de, hey, la mejor misión sería ir aquí a la entrada de la misión, luego seguir este camino para esclavizar a este jefe y tu recompensa será tal y tal. Y una vez que el motor analiza eso, tienes básicamente la misión generada de forma procedural. Y estamos explorando constantemente cuáles son los límites de eso.
No sé. Es muy interesante. Quería aprender más al respecto. ¿Hay alguna referencia a la que me puedas dirigir? Me gustaría que la respuesta que otras personas me dieran fuera sí. Pero muchas de estas cosas son nuevas y en su mayoría he tenido que aprenderlas yo mismo. No sé. Pero realmente animo a cualquiera, especialmente en el ámbito de la IA, a que juegue con OpenAI. OpenAI. Creo que ahora está abierto para todos. Solo prueba algunas indicaciones y creo que te sorprenderás. Y si eres un ingeniero, es bastante fácil convencer a la gente y hacerles darse cuenta de lo que esto puede hacer para algo como un medio, como los videojuegos. ¿Hay alguna parte de eso en tu GitHub a la que pueda echar un vistazo como referencia? Sí, hay una carpeta de IA en nuestro repositorio. Dices IA, pero el tema principal de esto es el hecho de que puedes construir un juego, un buen juego solo con JS que se ejecuta, se ejecutará en la web, pero ¿qué tiene que ver la IA con eso? ¿No es la IA algo más pequeño en esto? ¿No es lo más importante? Como el motor y los shaders y la optimización del rendimiento, etc. Creo que es la combinación de todo. Porque si hablamos de algo como Minecraft, que por cierto, mucha gente pregunta por ejemplos de juegos en la web que realmente hayan tenido éxito, bueno, Minecraft comenzó como una de esas cosas. Inicialmente era un applet de Java. Y ciertamente, no tenía los mejores gráficos en absoluto. Así que en realidad es muy difícil decir cómo debería ser el enfoque para el futuro del próximo Minecraft o Fortnite que utilice todas estas tecnologías abiertas. Creo que la parte de la IA, sin embargo, es uno de los diferenciadores clave que solo es posible en algo como la web donde todos los metadatos se han definido de manera precisa y estructurada de formas que hacen que la web sea una plataforma increíble. Solo tienes que analizarlo. Una vez que combinas eso con algo como la IA, eso es lo que permite, por ejemplo, a un equipo de desarrollo de una sola persona, que es lo que ha sido la mayor parte de la vida de este proyecto. Permite a un equipo de desarrollo de una sola persona crear básicamente todo un universo. Y quiero convencer a la gente de que probablemente esa sea la forma en que deberíamos crear y empoderarnos a nosotros mismos. Y solo estoy tratando de mostrar a la gente e inspirarlos, supongo.
Probablemente hablaste de esto al principio, pero llegué un poco tarde a la masterclass. ¿Estás trabajando en esto solo? No, no, tenemos un equipo, de hecho... Oh, vale. No, también estamos contratando. Espero que alguien del equipo pueda compartir algunos enlaces, si estás interesado. No, necesitamos mucha ayuda para construir esto. A pesar de lo lejos que hemos llegado, todavía falta mucho por recorrer. Eso puede perderse aquí. Entonces, la IA se encarga de hacer coincidir las misiones o es muy similar a cero indicaciones donde genera nuevas misiones que no ha visto antes. Son dos cosas diferentes. Aquí se mezclan diferentes sistemas.
25. Generación Procedural e Interoperabilidad
Short description:
La generación procedural y los sistemas controlados por IA permiten la creación de un mundo habitable e inmersivo utilizando activos web. La combinación de modelos de IA, como texto a imagen y texto a 3D, tiene un potencial transformador para industrias como los videojuegos. Sin embargo, construir sobre plataformas cerradas y basadas en publicidad puede limitar el progreso. Al utilizar la web como plataforma para el metaverso, podemos crear una experiencia mejor y más inclusiva. La interoperabilidad es un aspecto clave, incluyendo la capacidad de llevar avatares, activos e identidades a través de diferentes metaversos. La firma criptográfica en la cadena de bloques garantiza la seguridad, y características como especificar el ENS de alguien en la URL e iniciar sesión con Metamask y Discord mejoran la experiencia del usuario. También se está desarrollando un sistema de acuñación, que permite a los usuarios definir metadatos para objetos y acuñarlos directamente. El objetivo es permitir una experiencia en 3D para cualquier persona, independientemente de su fuente de datos o imagen de perfil.
Parte de esto es simplemente generación procedural, que no sé si cuenta como IA, pero ese es el tipo de cosa que puede, por ejemplo, jugar con diferentes clases de personajes en el mundo. Pero luego, además de eso, tienes todo el sistema de ajedrez y las personalidades de todos los diferentes avatares. Así es donde vamos a generar, por ejemplo, historias y biografías y descripciones para estos diferentes avatares, lo que les da, por ejemplo, diferentes estadísticas, diferentes objetos y diferentes comportamientos. Así que en realidad, a pesar de que el sistema está controlado por IA, es interesante porque no puedes decirle directamente al juego que haga algo. Tienes que convencer a las IA de que lo hagan. Y algunas de las IA que vas a encontrar no van a hacer lo que quieres que hagan. Por ejemplo, su personalidad puede ser muy terca o pueden engañarte. Entonces, en realidad, esta capa de IA nos permite mezclar nuestras técnicas de generación procedural de formas completamente nuevas que construyen un mundo habitable y respirable, a pesar de que todo esto son solo activos web. Lo que realmente tienes detrás de esto es el conocimiento de todo internet, como toda la historia de internet, entrenado en una IA que te cuenta una historia inmersiva con todos estos activos. Y luego es nuestro trabajo hacer que toda esa experiencia sea realmente divertida e interesante y agregar las mecánicas de juego que simplemente queremos jugar. Como, hey, este es un juego realmente divertido, es una forma genial de pasar el tiempo. Es un lugar realmente genial para hacer arte, tal vez hacer algunos amigos, no sé. Aún no he visto un juego realmente bueno que utilice modelos de IA multimodales como texto a imagen, texto a activos 3D. Creo que todo eso está en sus primeras etapas, pero creo que una vez que más personas comiencen a darse cuenta de las diferentes combinaciones que se pueden hacer probablemente será transformador para muchas industrias, especialmente cosas como los juegos. Sé que esto es exactamente lo que Mark Zuckerberg quiere hacer. Creo que Mark Zuckerberg y yo probablemente estaríamos de acuerdo en muchas cosas. Pero el problema con lo que Meta está haciendo es que están tratando de construir todo esto sobre bases equivocadas, esencialmente. Como todo está construido sobre publicidad y todas estas plataformas de código cerrado que cada una extrae impuestos del usuario. Y a veces impuestos que ni siquiera entendemos como impuestos sobre la libertad de expresión. Y creo que tenemos la oportunidad de hacer algo mucho mejor simplemente utilizando la web. La web que siempre ha estado ahí. La web que todos ya están usando. Realmente lo tomamos en serio como plataforma para el metaverso. De hecho, estaba depurando características de renderizado de HTML. Como estamos en el navegador, en realidad podemos simplemente insertar páginas HTML aquí pero aún tengo que solucionar el error allí. Solo estaba usando transformaciones de I-frame. ¿Hay alguna otra interoperabilidad que esté en tu hoja de ruta? ¿Puedes ampliar sobre eso? Entonces, hay interoperabilidad a nivel de avatar, a nivel de activos, identidad de las personas, digamos en nivel de blockchain o NFT. ¿Qué cantidad de cosas puedo llevar de un juego a otro en diferentes metaversos? Probablemente vamos a firmar criptográficamente todas estas cosas solo en la cadena de bloques. Una de las cosas que vamos a hacer, una de las características más solicitadas en realidad es poder, en la URL, especificar simplemente el ENS de alguien. Entonces eso simplemente cargará su propia galería que han configurado, que simplemente se escribirá en nuestro contrato o se almacenará en algún sistema como Ceramic. Así que en realidad hay inicio de sesión tanto con Metamask como con Discord. Y con el inicio de sesión de Metamask, simplemente extraeremos todos esos tokens. También tenemos un sistema de acuñación en desarrollo para que cualquier cosa que arrastres y sueltes te brinde un asistente para definir todos los diferentes metadatos para el objeto que estás soltando. Y tal vez incluso puedas acuñarlo aquí mismo, que una vez más, se agregará a tu Metamask. Y no hay tarifas por eso en absoluto. Siempre y cuando creo que probablemente vamos a limitarlo a las personas que realmente poseen uno de nuestros tokens, como una copia del juego para que podamos proporcionarte un servicio de alojamiento razonable sin arruinarnos. Pero también es posible ya que estas cosas, como lo que estamos haciendo son contratos de código abierto. Cualquiera puede cargar lo que quiera y acuñar sus propias cosas. No tiene que pasar por nosotros. Interesante. Y por curiosidad, ¿has visto algún algoritmo o flujo de trabajo donde las personas puedan crear un personaje a partir de su NFT 2D y generar un avatar o incluso una historia completa? He jugado con eso. Hay algunas victorias fáciles que podrías lograr allí pero no he visto nada que fuera realmente convincente para mí. Pero creo que eso probablemente será el futuro donde tengamos algún tipo de activos y se transformen a través de este proceso de IA o algo así en alguna otra forma. El problema es que requiere mucha suposición la mayor parte del tiempo, porque si tienes un PFP 2D eso realmente no te dice todo lo que necesitas saber, no tiene un cuerpo completo que puedas generar. Pero si alguien, por cierto, tiene alguna técnica interesante, me encantaría conocerlas y probarlas. Porque en última instancia, queremos asegurarnos de que cualquier persona que tenga algún tipo de data, ya sea en la cadena o no, pueda tener una buena experiencia en 3D, y no solo tenga que ser una simple imagen de perfil 2D. Bueno, si eso es todo, gracias por tenerme aquí. Puedes seguirnos, supongo, en Twitter como Web Averse, o si quieres seguirme, soy Web Mixed Reality. Pero últimamente he estado tuiteando. Es posible que incluso haga sesiones de transmisión, pero eso probablemente se anunciará en la cuenta de Twitter de Web Averse.
En esta masterclass, construiremos un juego utilizando el motor WebGL de PlayCanvas desde el principio hasta el final. Desde el desarrollo hasta la publicación, cubriremos las características más cruciales como la escritura de scripts, la creación de UI y mucho más. Tabla de contenido:- Introducción- Introducción a PlayCanvas- Lo que vamos a construir- Agregando un modelo de personaje y animación- Haciendo que el personaje se mueva con scripts- 'Falsa' carrera- Agregando obstáculos- Detectando colisiones- Agregando un contador de puntuación- Fin del juego y reinicio- ¡Resumen!- Preguntas Nivel de la masterclassSe recomienda familiaridad con los motores de juegos y los aspectos del desarrollo de juegos, pero no es obligatorio.
En esta masterclass, construiremos un juego completo utilizando el motor PlayCanvas mientras aprendemos las mejores prácticas para la gestión de proyectos. Desde el desarrollo hasta la publicación, cubriremos las características más cruciales como la gestión de activos, scripting, audio, depuración, y mucho más.
En este masterclass, te presentaremos los conceptos básicos de la construcción de experiencias de Realidad Mixta con WebXR y Babylon.js. Aprenderás lo siguiente:- Cómo agregar objetos de malla 3D y botones a una escena- Cómo utilizar texturas procedurales- Cómo agregar acciones a objetos- Cómo aprovechar la experiencia predeterminada de Realidad Cruzada (XR)- Cómo agregar física a una escena Para el primer proyecto en este masterclass, crearás una experiencia interactiva de Realidad Mixta que mostrará estadísticas de jugadores de baloncesto a fanáticos y entrenadores. Para el segundo proyecto en este masterclass, crearás una aplicación WebXR activada por voz utilizando Babylon.js y Azure Speech-to-Text. Luego, desplegarás la aplicación web utilizando el alojamiento de sitios web estáticos proporcionado por Azure Blob Storage.
Sumérgete en el cautivador mundo del desarrollo de microjuegos con Frank Force en este interactivo masterclass de codificación en vivo. Diseñado tanto para desarrolladores experimentados como para curiosos principiantes, esta sesión explora los desafíos únicos y las alegrías de crear juegos y demos con restricciones extremas de tamaño.
Walt te mostrará 2 formas de crear rápidamente un servidor de juegos en Vultr: una con nuestra instalación de Minecraft con un solo clic en el Marketplace de Vultr, y otra a través de la Terminal después de implementar un servidor de Vultr.
PlayCanvas is an open-source game engine used by game developers worldwide. Optimization is crucial for HTML5 games, focusing on load times and frame rate. Texture and mesh optimization can significantly reduce download sizes. GLTF and GLB formats offer smaller file sizes and faster parsing times. Compressing game resources and using efficient file formats can improve load times. Framerate optimization and resolution scaling are important for better performance. Managing draw calls and using batching techniques can optimize performance. Browser DevTools, such as Chrome and Firefox, are useful for debugging and profiling. Detecting device performance and optimizing based on specific devices can improve game performance. Apple is making progress with WebGPU implementation. HTML5 games can be shipped to the App Store using Cordova.
This Talk explores the use of Babylon.js and WebXR to create immersive VR and AR experiences on the web. It showcases various demos, including transforming a 2D game into a 3D and VR experience, VR music composition, AR demos, and exploring a virtual museum. The speaker emphasizes the potential of web development in the metaverse and mentions the use of WebXR in Microsoft products. The limitations of WebXR on Safari iOS are discussed, along with the simplicity and features of Babylon.js. Contact information is provided for further inquiries.
Little.js is a super lightweight and fast JavaScript game engine that has everything included to start making games right away. It has a tiny footprint and no dependencies, making it perfect for size-coding competitions like JS13K. Little.js is built with an object-oriented structure and comes with several classes. It provides a fast rendering system, a comprehensive audio system, and various starter projects for different game types. Little.js is designed to be simple and easy to understand, allowing you to look at and modify the code.
The Talk showcases the development of a video game called Athena Crisis using web technologies like JavaScript, React, and CSS. The game is built from scratch and includes features like multiple game states, AI opponents, and map editing. It demonstrates the benefits of using CSS for game development, such as instant load times and smooth transitions. The Talk also discusses optimizing performance, supporting dark mode, and publishing the game to other platforms.
The Talk discusses ways to boost the performance of WebGL Unity games, including issues with bundle size, memory usage, and runtime performance. It suggests using Brotli for compression and non-exception support for better performance. Choosing the appropriate texture compression format and experimenting with separate builds can also help. The Talk also covers optimizing textures, models, audio, and assets by reducing build size, using compression, disabling unnecessary models, and optimizing audio quality. Unity's optimization tools and profilers are recommended for analyzing performance and memory issues.
Web3 gaming enables decentralized identity and finance, allowing game developers to bypass centralized platforms. It is driven by wallets, ERC20 tokens, and NFTs. Web3 games focus on collaborative world-building, ownership, and open-source collaboration. The challenge is achieving decentralization while addressing economic and technological limitations. Web3 aims to redefine the gaming industry by using economic tools and exploring new genres like RPG and RTS games.
Comments