# OpenSpace3D

Openspace3D (OS3D) est un moteur de jeu libre développé en continu par le groupe nantais i-maginer. C'est une solution logicielle de création d'applications et de jeux vidéos immersifs qui s'appuient sur des technologies de réalité étendue, autant en réalité augmentée qu'en réalité virtuelle ou réalité mixte. Se voulant accessible à tous, le moteur de jeu se présente à l'utilisateur comme une solution en développement No code, qui permet une utilisation complète sans connaissance préalable en développement. Ainsi, openspace3D repose sur le langage de haut niveau Scol (Standard Cryo OnLine Language), lui-même codé en C et C++, ainsi que sur le moteur SO3Engine, conçu pour openspace3D.
Créé en 2009 par l'équipe de développement du groupe i-maginer, openspace3D est repris en 2023 par sa société i-magineXR dans le but de faire évoluer les techniques de pédagogie immersive, notamment en CFA.

## Description
### Réalité étendue

Bien qu'il soit possible de créer toutes sortes d'applications en 3D, tels que des jeux vidéo ou des serious games, le point clef d'openspace3D est son développement orienté vers la conception d'applications et de jeux vidéos en réalité étendue (XR), qui permet à ses utilisateurs de pouvoir rapidement créer du contenu pour les réalités virtuelle, augmentée et mixte. Cette capacité à rapidement créer du contenu est d'autant plus mise en avant par l'aspect développement no code qui concerne également l'intégration des périphériques immersifs dans les applications.

#### Équipements supportés

Pour permettre un accès direct à un grand nombre de périphériques immersifs et en restant dans la continuité de sa philosophie de développement no code, openspace3D est compatible avec la plupart des casques de réalité virtuelle du marché (Android embarqué, OpenXR, OpenVR):
* Meta Quest
* Pico 4
* HTC VIVE
En plus des casques de réalité virtuelle, openspace3D supporte également l'intégration d'un grand nombre d'autres périphériques:
* Gamepad
* Tobii eye tracker
* Leap motion

### PlugIT

L'avantage majeur et considérable d'openspace3D est qu'il offre la possibilité de réaliser des applications complètes en développement No code. Pour créer son application et la rendre interactive, l'utilisateur d'openspace3D dispose d’une bibliothèque de fonctions se présentant sous une forme visuelle de blocs, appelés PlugIT, que l'on peut connecter entre eux sur une interface de type tableau blanc 2D. Ce sont ces connexions entre PlugIT qui vont rendre l'application interactive et créer le scénario de l'application finale.
Plusieurs catégories de PlugIT sont utilisables et connectables entre eux pour réaliser un large éventail d'actions possibles, tels que :
* PlugIT de modèles 3D: objets, personnages, etc. ;
* PlugIT de périphériques: souris, clavier, gamepad, capteurs de téléphone, etc.
Il est également possible de créer des PlugIT personnalisés afin de répondre à des besoins spécifiques : ces derniers sont définis au travers d'un fichier XML décrivant les informations clefs du bloc: son nom, sa description, sa documentation, son script rédigé dans le langage Scol. Ces PlugIT sont ensuite utilisables avec les autres PlugIT intégrés à openspace3D.

#### Exemple d'utilisation des PlugIT

Pour permettre au joueur dans un jeu vidéo réalisé sur openspace3D d'ouvrir une porte au moyen d'un interrupteur, il faut utiliser les PlugIT suivants :
* Object click
* Rotate to
Les connexions des PlugIT seront alors les suivantes : Object click.LeftClick -> Rotate to.Go
D'autres exemples sont disponibles dans les tutoriels openspace3D en ligne ainsi que dans le livre électronique d'introduction au logiciel.

### Aspects techniques et langages de programmation
#### Moteur de rendu 3D

Openspace3D utilise sur le moteur de rendu 3D SO3Engine, basé sur le moteur 3D Ogre3D et développé spécifiquement pour openspace3D. Cela permet à openspace3D de fonctionner sur toutes les plateformes courantes: Windows, MacOS, Linux, Android, iOS, etc.

#### Programmation haut-niveau : Scol

Le moteur openspace3D est basé sur le langage de programmation Scol (Standard Cryo OnLine Language), un langage de haut-niveau créé originellement par la société française Cryo-Interactive en 1997 et conçu pour le développement d'applications 3D. Scol est un langage fonctionnel composé d'un noyau et complété par différents plugins qui permettent de gérer les différents aspects du moteur du jeu, tels que les contrôleurs, les périphériques audio, etc.

#### Programmation bas-niveau

Le noyau et les plugins de Scol sont rédigés dans les langages informatiques C et C++.

### Formats compatibles

Openspace3D permet l'importation et l'utilisation d'un grand nombre de formats multimédia :
| Type de format | Formats supportés |
| Image | JPG, PNG, TGA, DDS, BMP |
| Audio | WAV, MP3, OGG |
| Vidéo | MP4, MPEG, AVI |
| Modèle 3D | GLTF, GLB, COLLADA, FBX, 3DS, OBJ, BLEND, IFC, PLY, DXF, STL |

## Histoire du projet
### Genèse

À la suite de la liquidation de la société Cryo Interactive en 2002, le langage Scol créé par la société est distribué sous licence libre et son développement est repris par d'anciens employés de sa filiale Cryo Networks. En 2006, le développement de Scol est assuré et financé par le groupe i-maginer afin de développer un moteur de jeu permettant la création simple d'application en 3D.
C'est ainsi qu'openspace3D est créé et que sa première version est présentée en 2009 à l'occasion du salon international sur la réalité virtuelle Laval Virtual sous la forme d'un concours permettant aux participants de créer une application 3D complète en un temps limité de 30 heures et sans connaissances préalables en programmation.
La technologie reste depuis développée au sein d'i-maginer. L'année 2023 présente une nouvelle étape cruciale dans le développement d'openspace3D, avec la création de la société i-magineXR dans le but de développer des solutions en réalité augmentée basées sur openspace3D qui viendront renforcer les possibilités des formations et enseignements, notamment au sein des CFA.

### Historique des versions

| Version | Date de sortie | Description |
| Alpha | Avril 2009 | Première version alpha officielle |
| 1.0 | Mars 2012 | Première release |
| 1.8.1 | Décembre 2014 | Première version compatible avec l'Oculus DK2 |
| 1.83 | Avril 2020 | Export vers l'Oculus Quest |
| 1.92 | Décembre 2023 | Prise en charge des matériaux PBS, mode passthrough pour les casques VR |
| 1.93 | Décembre 2024 | Pathfinding, intégration IA générative, Android XR, reconnaissance et synthèse vocale |
| 1.93.1 | Janvier 2025 | Mise a jour de la version SDL2, Correction du splashscreen et gestion des fenêtres sur Linux et Raspberry Pi |

## Documentation

La documentation complète d'openspace3D est disponible sur le site internet du moteur 3D. La documentation inclut notamment un cours pour apprendre le langage Scol ainsi qu'un guide pour la création de ses propres PlugIT. Pour accompagner la documentation technique et les guides en ligne, un manuel pédagogique basé sur une série de didacticiels, rédigé par le créateur et lead développeur d'openspace3D, est disponible à l'achat sur le site internet.
Des tutoriels vidéos en ligne sont également disponibles pour débuter en openspace3D, réalisés par l'équipe de développement mais aussi par la communauté d'utilisateurs.

## Communauté de développement

La maintenance et le développement continu d'openspace3D sont assurés depuis 2006 par le groupe i-maginer. En 2023, le groupe i-maginer fonde la société i-magineXR pour se consacrer au développement d'openspace3D et de ses applications, notamment dans la pédagogie et la formation. Les axes de développements d'openspace3D incluent notamment l'intégration de fonctions d'IA génératives pour aider à la conception des environnements 3D et pour augmenter l'immersion au travers de la génération de dialogues pour les personnages non-joueurs.
En sa qualité de logiciel libre, le suivi du développement d'openspace3D est partagé en ligne dans un Redmine dédié. L'équipe de développement est aussi responsable du forum communautaire, qui est ouvert à tous les utilisateurs du moteur de jeu. Le forum permet notamment d'obtenir un support venant à la fois de la communauté mais aussi de l'équipe de développement.

## Moteurs analogues

* Unity
* Unreal Engine
* Godot
* Crystal Space
* C4