Es un motor gráfico 3D optimizado para la creación de herramientas empresariales, principalmente de visualización de productos en catálogos y plataformas de venta online. En concreto, todo el proyecto está pensado en la optimización del proceso de creación y distribución de assets.
Descripción
Una de las principales fricciones que he identificado en la industria para adoptar herramientas de venta en 3D es el alto coste de producción de modelos 3D e integración con los sistemas de venta. Esto es especialmente relevante en el caso de las PYMEs.
El objetivo de bg2 engine consiste en proporcionar, no solo un motor gráfico de alto nivel para crear aplicaciones, sino también una herramienta de edición de escenas y assets que sea extensible de forma sencilla.
La fase de modelado 3D suele ser la más costosa, y en cierta medida este punto es complicado de solucionar desde el motor gráfico. No obstante, se puede paliar en gran medida proporcionando utilidades que optimicen el proceso de modelado.
Hay muchas industrias donde los productos se crean de manera modular. El caso del mueble tapizado es un claro ejemplo, donde un modelo de un sofá puede estar compuesto por más de 50 artículos individuales, y muchos de ellos no son más que modificaciones menores de un artículo principal. Por ejemplo, para un modelo concreto de sofá, podemos tener módulos idénticos donde solamente varía la anchura.
Realizando el proceso de modelado de las piezas maestras en un software de modelado, como Blender, podemos importar esas piezas en software de edición de assets del motor gráfico, y una vez ahí utilizar el sistema de plugins para crear automatizaciones personalizadas para cada tipo de industria. Por ejemplo, en el caso del mueble tapizado modular, se podría crear una herramienta que genere módulos a partir de varias piezas maestras.
Este sistema hace que la producción de los modelos maestros sea independiente del software de modelado, de manera que las empresas no tienen que cambiar de software para utilizar estas automatizaciones.
Después de la creación de los assets en forma de modelos 3D o de materiales, hay otra parte importante que hay que desarrollar para implementar una herramienta de catálogo o ventas: la conexión con el propio sistema de ventas y con los datos de los artículos del catálogo.
Para solucionar esto, bg2 engine define un formato propio de fichero que permite:
- Extensibilidad de los assets mediante plugins: estos plugins pueden servir para implementar funciones en tiempo de ejecución, para conectar el asset con una base de datos externa o para facilitar y automatizar la producción.
- Metadatos a nivel de sub malla: un asset en 3D está formado por diferentes mallas. Por ejemplo, un sofá está formado por la base, los asientos, los respaldos, los brazos y los cojines. El formato de fichero permite añadir metadatos de catalogación para cada una de las partes del asset de forma nativa, lo que facilita tareas como por ejemplo la identificación de una parte tapizable o de accesorios opcionales.
Destacado
Para cumplir con los objetivos del proyecto tuve que dividirlo en varias partes:
- bg2 engine - web: API de JavaScript para navegadores y backend (Node.js). El desarrollo de aplicaciones para navegador web fue un requisito muy importante que identifiqué en las primeras fases del proyecto. En ese momento comenzaba a estar disponible WebGL 1.0 para la mayor parte de los navegadores web. Recientemente también añadí soporte para operaciones de backend que no requieran representación gráfica con WebGL, como por ejemplo la exportación y modificación de modelos 3D.
- bg2 engine - native: API de C++ para aplicaciones nativas. En la primera fase del proyecto era necesario disponer de un API nativa principalmente para el desarrollo del software de edición de assets y escenas. También realicé algún prototipo de aplicación para iOS y Android utilizando esta API, pero nunca he llegado a poner en producción ninguno de estos prototipos. Más tarde opté por desarrollar el editor con el API de JavaScript, utilizando Electron.js, y esta parte estuvo parada durante unos años. Recientemente he recuperado el desarrollo de las APIs nativas para creación de algunas herramientas interesantes, que no es posible crear en navegador web.
- bg2 engine - composer: es el editor de assets y escenas. Como he mencionado antes, comenzó como un proyecto en C++, utilizando QT para la interfaz gráfica de usuario, y bg2 engine - native para la renderización. La decisión de rehacer la herramienta por completo en JavaScript vino de la necesidad de obtener una representación en el editor con el mismo acabado que en la web. A pesar de que ambas APIs (JavaScript y C++) compartían código en la parte de shaders, la tecnología subyacente es muy distinta, y resultaba muy complicado conseguir resultados idénticos. Por otra parte, la elección de una herramienta JavaScript simplificó muchísimo el proceso de creación de plugins del editor, que es una parte determinante para conseguir el objetivo de optimización en la producción de assets
A raíz de este proyecto, he podido colaborar con la empresa Grupo SIM en la creación de su herramienta de ventas Sim 3D, y de esta colaboración han surgido otros proyectos destacables:
- bg2-io: se trata de una refactorización de las APIs de C++ y JavaScript. Es una biblioteca con utilidades de lectura y escritura del formato de assets y escenas de bg2 engine. Aquí se incorporan también algunas herramientas de línea de comandos para exportación de archivos de assets a formato JSON, GLTF y OBJ.
- bg2 engine - Unreal Tools: es un plugin para Unreal Engine, para versiones de la 4.8 hasta la 5.1 de Unreal, desarrollado en lenguaje C++ y basado en bg2-io, y permite hacer importaciones de ficheros de assets de bg2 engine dentro de una aplicación desarrollada con Unreal, en tiempo de ejecución: es decir, la importación puede realizarse en la aplicación final, no es necesario que se haga en el editor.
- bg2 engine - Godot Plugin: es un plugin que permite importar assets de bg2 engine en el motor gráfico Godot 3D. Dentro de bg2-io está definido el paquete bg2-io-net, que es una serie de clases en C# para importación de assets y materiales. A través de esta dependencia implementé un plugin para importar assets en Godot
Disponibilidad
Todos los repositorios de bg2 engine son públicos y están disponibles con licencias de código abierto, principalmente MIT.
Hay algunas excepciones, como por ejemplo la versión actualizada de bg2 engine - native, que no está pública debido a que se encuentra en una fase de desarrollo muy temprana.
El editor de escenas para macOS y Windows puede descargarse de la página web del proyecto, y el resto de repositorios están también disponibles desde esa misma web:
https://www.bg2engine.org/#/downloads
Actualmente estoy aprovechando el desarrollo de la nueva versión del API nativa para organizar y unificar todos los proyectos en un mismo repositorio. Actualmente el repositorio central incluye scripts para descargar dependencias y otros repositorios secundarios. Mi intención es simplificar todo y agruparlo en un mismo repositorio:
https://github.com/ferserc1/bg2e