<< Volver al inicio
bg2 engine - web

$ bg2 engine - web_

Es el API para JavaScript del proyecto bg2 engine. Implementa las APIs para desarrollo de aplicaciones web con WebGL y para el editor de assets y escenas bg2 engine - composer. También dispone de APIs para manejo de ficheros de escenas y assets para entorno Node.js.

Descripción

Está dividido en varios módulos, donde solamente dos de ellos, el módulo app y el módulo render, requieren de un navegador con soporte de WebGL para funcionar. El módulo db puede funcionar en navegador web para las operaciones de carga, pero no para las operaciones de guardado de escenas y assets. Este módulo está pensado para funcionar solamente en entorno Node.js

Las escenas se definen como un árbol, cuyos nodos solamente tienen información de su nombre, nodo padre y lista de nodos hijos. Aparte de esto, los nodos tienen una lista de componentes únicos, es decir, un nodo solamente puede tener un componente de cada tipo.

El comportamiento de un nodo se implementa por composición, añadiendo los componentes que lo formarán. Por ejemplo, para representar un objeto 3D, necesitamos un componente Transform y otro componente Drawable para especificar los datos de posición y de geometría 3D, respectivamente.

Para visualización, aunque el motor soporta varios materiales, actualmente solo existe un tipo de material implementado siguiendo el modelo PBR, que soporta las siguientes propiedades:

Salvo el color de reflejo, todas las propiedades pueden especificarse como valores (color o valor numérico) o como mapa de texturas.

La iluminación está implementada combinando el mapa de irradiancia generado por el entorno de la escena, con hasta un máximo de 5 fuentes de luz. De estas fuentes de luz, las que son de tipo foco o de tipo direccional soportan también proyección de sombras utilizando la técnica de shadow mapping.

image.png

Destacado

El API de materiales tiene una serie de herramientas especialmente diseñadas para la creación de catálogos de producto 3D personalizados por el usuario: es posible aplicar ciertas propiedades concretas de material a una malla.

Esta característica está integrada en el motor gráfico porque es muy común utilizarla en catálogos de productos en 3D. Tomemos como ejemplo el proyecto Sim 3D, un sistema de venta de sofás tapizados modulares.

Cuando se prepara un asset 3D, hay ciertas propiedades del material de cada parte del sofá que dependen de ese sofá, pero hay otras propiedades que dependen del tejido con el que está tapizado.

Por ejemplo: el mapa de oclusión ambiental es una textura que se utiliza para marcar las sombras de proximidad de cada pieza, y por lo tanto esa textura está asociada a ese modelo 3D concreto. A la hora de aplicar un tapizado, las propiedades del material que querremos aplicar serán su textura de albedo, las propiedades de rugosidad y metalicidad, y su mapa normal, para dar relieve a la textura del tejido.

bg2 engine - web tiene integrado un sistema en el que podemos aplicar a una malla solamente aquellas propiedades de un material que nos interese aplicar. Para definir qué propiedades son aplicables se utiliza una máscara.

Junto con esta característica, el API incluye herramientas para serialización y deserialización de materiales a formato JSON, y un sistema de biblioteca de assets, también en formato JSON. Tanto las bibliotecas como los materiales pueden definirse manualmente en ficheros JSON, o mediante el editor de escenas y assets.

A partir de esto, aplicar las propiedades de un material a una pieza es tan fácil como invocar una única función de JavaScript, que es capaz de deserializar el material y determinar cuales de las propiedades tienen que ser aplicadas.

Otra característica interesante es el formato estandarizado de biblioteca de assets. Se trata de un formato basado en JSON que define un árbol de nodos. Dentro de la biblioteca bg2 engine se definen los nodos de tipo grupo, modelo 3D y material, aunque para proyectos concretos se han definido nuevos tipos de nodos.

La biblioteca soporta de forma nativa la carga de recursos a partir de una biblioteca. Además, el formato de metadatos permite añadir información de forma retardada: ciertos metadatos pueden ser cargados solamente cuando va a ser necesario utilizarlos.

Interesante: incluir una demo interactiva del ejemplo de las esferas, con una interfaz gráfica para cambiar de entorno. Sería interesante también poder cambiar de escena, para cambiar entre la escena de las esferas y un modelo resultón de un sofá con un suelo donde se aprecie el sistema de proyección de sombras.

Disponibilidad

La versión 1.x de la biblioteca está disponible a través del paquete de npm:

npm: bg2e-js

La versión 2.x está disponible solamente en github porque todavía se encuentra en desarrollo. Aunque el API está cerrada y ya es estable, falta completar las definiciones de tipos para TypeScript antes de publicar la versión 2.0 en npm:

https://github.com/ferserc1/bg2e-js

Ambas versiones son de código abierto y están disponibles con la licencia MIT.

Proyectos relacionados

<< Volver al inicio