# OpenSpace3D

OpenSpace3D (OS3D) es un motor de juego libre cuyo desarrollo se lleva a cabo continuamente por el grupo i-maginer de Nantes. Adjunto a la filosofía del grupo centrada en la tecnología digital y la formación, openspace3D es una solución de software dedicada a la creación de aplicaciones inmersivas y videojuegos que se basan en tecnologías de realidad extendida (XR), tanto en realidad aumentada (AR), realidad virtual (VR) ) o realidad mixta (RM). Diseñado para ser accesible para todos, el motor del juego se presenta al usuario como una solución de desarrollo sin código, que permite un uso completo sin conocimientos previos de desarrollo. Así, openspace3D se basa en el lenguaje de alto nivel Scol (Standard Cryo OnLine Language), a su vez basado en los lenguajes C y C++, así como en el motor SO3Engine diseñado para openspace3D.
Creado en 2009 por el equipo de desarrollo del grupo i-maginer y adquirido en 2023 por su empresa i-magineXR con el objetivo de desarrollar técnicas de enseñanza inmersivas, en particular en CFA, openspace3D es un motor de juego francés que sigue siendo sobre todo una solución gratuita. para permitir a los creadores de todos los niveles disponer de las herramientas necesarias para crear aplicaciones y videojuegos completos integrando funcionalidades de realidad extendida.

## Descripción
### Realidad extendida

Aunque es posible crear todo tipo de aplicaciones 3D, como videojuegos o serious games, el punto clave de openspace3D es su desarrollo orientado al diseño de aplicaciones y videojuegos en realidad extendida (XR), lo que permite a sus usuarios crear rápidamente crear contenidos para realidades virtuales, aumentadas y mixtas. Esta capacidad de crear contenidos rápidamente se destaca aún más por el aspecto del desarrollo sin código, que también afecta a la integración de dispositivos inmersivos en las aplicaciones.

### Equipo soportado

Para permitir el acceso directo a un gran número de dispositivos inmersivos y manteniendo su filosofía de desarrollo sin código, openspace3D es compatible con la mayoría de los cascos de realidad virtual del mercado (Android integrado, OpenXR, OpenVR):
Meta Quest
Pico 4
HTC Vive
Además de los cascos de realidad virtual, openspace3D también admite la integración de una gran cantidad de otros periféricos:
Mando de juegos
Tobii eye tracker
Leap motion

## Plugit

La mayor y considerable ventaja de openspace3D es que ofrece la posibilidad de crear aplicaciones completas en desarrollo sin código. Para crear su aplicación y hacerla interactiva, el usuario de openspace3D dispone de una biblioteca de funciones presentadas en forma visual de bloques, llamada PlugIT, que se pueden conectar entre sí en una interfaz tipo pizarra 2D. Son estas conexiones entre PlugIT las que harán que la aplicación sea interactiva y crearán el escenario de la aplicación final.
Se pueden utilizar y conectar varias categorías de PlugIT entre sí para realizar una amplia gama de acciones posibles, como por ejemplo:
Modelos 3D PlugIT: Objetos, Personajes, etc.
Periféricos PlugIT: ratón, teclado, gamepad, sensores del teléfono, etc.
También es posible crear PlugIT personalizados para satisfacer necesidades específicas: éstas se definen a través de un archivo XML que describe la información clave del bloque: su nombre, su descripción, su documentación, su script escrito en la escuela de idiomas. Estos PlugIT se pueden utilizar con otros PlugIT integrados en openspace3D.

#### Ejemplo de uso de PlugIT

Para permitir que el jugador de un videojuego creado en openspace3D abra una puerta mediante un interruptor, se debe utilizar el siguiente PlugIT:
Object click
Rotate to
Las conexiones PlugIT quedarán entonces de la siguiente manera:Object click.LeftClick -> Rotate to.Go
Otros ejemplos están disponibles en los tutoriales en línea de openspace3D, así como en el libro electrónico de introducción al software.

### Aspectos técnicos y lenguajes de programación.
#### motor de renderizado 3D

Openspace3D utiliza el motor de renderizado 3D SO3Engine, basado en el motor 3D Ogre3D y desarrollado específicamente para openspace3D. Esto permite que openspace3D funcione en todas las plataformas populares: Windows, MacOS, Linux, Android, iOS, etc.

#### Programación de alto nivel: Scol

El motor openspace3D está basado en el lenguaje de programación Scol (Standard Cryo OnLine Language), un lenguaje de alto nivel creado originalmente por la empresa francesa Cryo-Interactive en 1997 y diseñado para el desarrollo de aplicaciones 3D. Scol es un lenguaje funcional compuesto por un núcleo y complementado con diferentes complementos que permiten gestionar diferentes aspectos del motor del juego, como controladores, dispositivos de audio, etc.

#### Programación de bajo nivel

El núcleo y los complementos de Scol están escritos en los lenguajes informáticos C y C++.

### Formatos compatibles

Openspace3D permite la importación y utilización de una gran cantidad de formatos multimedia:
| Tipo de formato | Formato soportado |
| Imagen | JPG, PNG, TGA, DDS, BMP |
| Audio | WAV, MP3, OGG |
| Video | MP4, MPEG, AVI |
| Modelo 3D | GLTF, GLB, COLLADA, FBX, 3DS, OBJ, BLEND, IFC, PLY, DXF, STL |

## Historia del proyecto
### Génesis

Tras la liquidación de la empresa Cryo Interactive en 2002, el lenguaje Scol creado por la empresa se distribuyó bajo una licencia gratuita y su desarrollo se hizo cargo de antiguos empleados de su filial Cryo Networks. En 2006, el grupo i-maginer llevó a cabo y financió Scol para desarrollar un motor de juego que permitiera la creación sencilla de aplicaciones 3D.
Así nació openspace3D y se presentó su primera versión en 2009 en la exposición internacional de realidad virtual Laval Virtual en forma de concurso que permitía a los participantes crear una aplicación 3D completa en un tiempo limitado a 30 horas y sin conocimientos previos de programación.
Desde entonces, la tecnología ha seguido desarrollándose dentro de i-maginer. El año 2023 presenta una nueva etapa crucial en el desarrollo de openspace3D, con la creación de la empresa i-magineXR con el objetivo de desarrollar soluciones de realidad aumentada basadas en openspace3D que reforzarán las posibilidades de formación y enseñanza, especialmente en el CFA.

### Historial de versiones

| Versión | Fecha De Lanzamiento | Descripción |
| Alfa | Abril de 2009 | Primera versión alfa oficial |
| 1.0 | Marzo 2012 | Primer lanzamiento |
| 1.8.1 | Diciembre 2014 | Primera versión compatible con Oculus DK2 |
| 1.83 | Abril de 2020 | Exportar a Oculus Quest |
| 1.92 | Diciembre 2023 | Soporte para materiales de PBS, passthrought modo para cascos de realidad virtual |

## Documentación

La documentación completa de openspace3D está disponible en el sitio web del motor 3D. La documentación incluye en particular un curso para aprender el lenguaje Scol, así como una guía para crear su propio PlugIT. Para acompañar la documentación técnica y las guías en línea, está disponible para su compra en el sitio web un manual educativo basado en una serie de tutoriales, escrito por el creador y desarrollador principal de openspace3D.
También hay disponibles vídeos tutoriales en línea para iniciarse en openspace3D, producidos por el equipo de desarrollo pero también por la comunidad de usuarios.

## Comunidad de desarrollo

El mantenimiento y desarrollo continuo de openspace3D lo lleva a cabo desde 2006 el grupo i-maginer. En 2023, el grupo i-maginer fundó la empresa i-magineXR para dedicarse al desarrollo de openspace3D y sus aplicaciones, especialmente en educación y formación. Las áreas de desarrollo de Openspace3D incluyen la integración de funciones generativas de IA para ayudar a diseñar entornos 3D y aumentar la inmersión a través de la generación de diálogos para personajes no jugadores.
Como software libre, el seguimiento del desarrollo openspace3D se comparte en línea en un Redmine dedicado. El equipo de desarrollo también es responsable del foro de la comunidad, que está abierto a todos los usuarios del motor del juego. El foro permite obtener apoyo tanto de la comunidad como del equipo de desarrollo.

## Motores analógicos

Unity
Unreal Engine
Godot
Crystal Space