IMA5 2018/2019 P26
Sommaire
Présentation générale
Description
Un certains nombre de logiciels permettent à l'heure actuelle de redonner vie à de vieux logiciels de jeux (jeux devenus libres de droit car délaissés par leurs propriétaires, ces jeux sont dit "abandonware"). D'autres jeux existent, totalements libres de droits dès leur diffusion. Dans le cadre d'un projet européen auquel l'équipe de recherche MINT participe, nous souhaitons mettre en place un prototype permettant à une structure de rééducation spécialisé dans la rééducation de l'enfant cérébrolésé de disposer d'un système de réalité virtuelle via lequel l'enfant peut jouer à l'un ou l'autre de ces vieux jeux. Le fait de réaliser cet objectif en réalité virtuelle plutôt que via un dispositif d'interaction standard est le suivant : la réalité virtuelle permettra ici de se libérer des contraintes matérielles, permettra d'adapter l'écran virtuel à la réalité de l'enfant, pourquoi pas par la suite de mettre en place des distracteurs ou d'augmenter la difficulté de l'interaction, etc... et ce afin de permettre aux soignants de disposer d'une application qui leur permette de graduer la difficulté d'interaction (permettant ainsi à l'enfant d'entrainer ses capacités motrices et cognitives), tout en disposant d'une base de jeux importantes et donc la dimension ludique n'est plus à prouver. La travail consistera tout d'abord en un examen des différents émulateurs existants, et en la proposition d'une configuration permettant de réaliser l'interaction d'un affichage 2D dans un environnement type HTC Vive. On pourra par exemple utiliser une fonctionnalité du type VNC et sa compatibilité avec l'environnement Unity. On travaillera ensuite à l'intégration d'un systeme simulant le "touch" à partir des mouvements des mains de l'utilisateur. En fonction de l'avancement, on pourra explorer quelques configurations d'interaction mettant en valeur plusieurs configurations virtuelles différentes, permettant par la suite d'explorer les modalités d'interaction (ce dernier point pourra se faire en collaboration avec une structure médicale basée à Meerbush, prés de dusseldorf en allemagne).
Objectifs
Mettre en place un dispositif de réalité virtuelle permettant à l'utilisateur d'interagir avec une application 2D classique, en simulant une interaction tactile.
Préparation du projet
Cahier des charges
Choix techniques : matériel et logiciel
Unity
Fceux
Fove/HTV Vive
Visual Studio
2 ordinateurs
Liste des tâches à effectuer
Calendrier prévisionnel
Réalisation du Projet
Semaine 1
Semaine 2
Semaine 3-4
A semaine 3 et 4, j'ai fait des choses suivantes :
1. Tester des émulateur du jeux vidéo
2. Apprendre VNC et tester le VNC
3. Apprendre à utiliser Unity
4. Apprendre C#
5. Intégration du VNC à Unity
6. Réalisation d'une solution pour afficher l'image du jeux vidéo à Unity par TCP/IP
Details:
1. Tester des émulateur du jeux vidéo:
J'ai cherché les émulateur du jeux vidéo et j'ai trouvé qu'il y a deux grandes groupes des émulateur qui s'appliquent à mon projet: les émulateur d'Android et les émulateur de "Nintendo entertainment system"(NES, après je vais utiliser NES pour s'appeler). Ils sont convenables, parce qu'il y a beaucoup de jeux vidéo qui sont implémenté aux Android et NES, à la même temps, il est facile à trouver les deux genre d'émulateurs gratuits, par exemple :
Pour l'Android:
BlueStacks[1]
Il est gratuit et il marche en Windows et MacOS.
Nox[2]
Koplayer[3]
Pour NES:
FCEUX[4]
Il est gratuit et "Open source". Il supporte à utiliser le script de LUA à le contrôler.
JNES[5]
NEStopia[6]
Les autres NES émulateur de "open source"
Problème::
1). Comment on réalise l'interaction du jeux video par les dispositif de réalité virtuelle?
Solution 1: On fait une configuration pour intégrer le VNC à l'Unity, et il y a les APIs de Unity qui peut faire l'interaction avec le dispositif de réalité virtuelle.
Solution 2: On programme à transfère l'image du jeux vidéo à Unity pour l'afficher au dispositif de réalité virtuelle par TCP/IP et transfère par TCP/IP les consignes du dispositif de réalité virtuelle au jeux vidéo pour le contrôler.
2). Maintenant, je ne suis pas claire que si on peut utiliser les émulateurs et des jeux à mon projet légalement.*
2. Apprendre VNC et tester le VNC
Description du VNC[7]:
VNC (Virtual Network Computing, littéralement « informatique virtuelle en réseau ») est un système de visualisation et de contrôle de l'environnement de bureau d'un ordinateur distant. Il permet au logiciel client VNC de transmettre les informations de saisie du clavier et de la souris à l'ordinateur distant, possédant un logiciel serveur VNC à travers un réseau informatique. Il utilise le protocole RFB pour les communications.
VNC est indépendant du système d'exploitation : un client VNC installé sur n'importe quel système d'exploitation peut se connecter à un serveur VNC installé sur un système d'exploitation différent ou identique. Il existe des clients et des serveurs VNC pour la plupart des systèmes d'exploitation. Plusieurs clients peuvent se connecter en même temps à un unique serveur VNC.
Parmi les utilisations de ce protocole, on peut citer le support technique à distance, l'administration et la maintenance de systèmes ou logiciels ne permettant que des contrôles graphiques et demandant l'utilisation de la souris ou bien encore la visualisation distante d'applications diverses et variées, dans un but éducatif par exemple.
Teste:
J'ai installé le VNC Viewer[8] et VNC Server[9] est fait un test. (*VNC Viewer est gratuit, mais VNC Server n'est pas gratuit).
Premièrement, j'ai lancé un VNC Server
Après, j'ai lancé un VNC Viewer et connecté à mon serveur de VNC, j pouvais afficher l'écran du serveur et le contrôler.
3. Apprendre à utiliser Unity
La Description du Unity:[10]
Unity est un moteur de jeu multi-plateforme (smartphone, Mac, PC, consoles de jeux vidéo et web) développé par Unity Technologies. Il est l'un des plus répandus dans l'industrie du jeu vidéo, du fait de sa rapidité aux prototypages pour les très gros studios, aussi pour la sphère du jeu indépendant qui développe directement dessus pour sortir leurs applications sur tout support[à recycler].
Il a la particularité de proposer une licence gratuite dite « Personal » sans limitation au niveau du moteur.
Pour utiliser l'Unity, on dois savoir l'utilisation de deux choses: les objets et les scripts.
Les objets de l'Unity sont les éléments du jeux vidéo, par exemple, les images, les cubes, la lumière etc.
Les scripts de l'Unity sont les programme qui contrôlent les objets, les scripts sont C# et javascript.
4. Apprendre C#:
C# ressemble à Java. Il peut fonctionner à multi-plateforme. Il y a des bibliothèques sur le réseau d'internet et l'interactions. Maintenant, je peux utiliser à programmer.
5. Intégration du VNC à Unity
Au début, j'ai cherché la solution à intégrer du VNC à Unity, mais, je ne l'ai trouvé pas. on peut faire l'interaction entre deux ordinateurs à distance par VNC, mais, on ne peux implémenter VNC à Unity qui est important, parce qu'on dois utiliser Unity à connecter les dispositifs de la réalité virtuelle.
Après, je veux coder une programmation à simuler la fonction d'Unity. Et j'ai trouvé quelques bibliothèques outils:
1) VNsharp[11]
VNsharp est une 'open source' bibliothèques gratuites de C# pour la programmation de VNC. Je l'ai essayé, mais ça n'a fonctionné pas bien, parce, la bibliothèque dépende en le bibliothèque native du Windows (J'utilise Macbook) et si on l'utilise à Unity, on dois changer beaucoup de chose. Parce que l'environnement de Unity est Mono[12], qui n'est pas tout même que l'environnement Windows. Donc, je n'ai choisi pas à utiliser.
2) Unity-VNC-Client[13]
Unity-VNC-Client est une bibliothèque à Github. Dans la description, il dit que ça a fonctionné à Windows, mais, dans son Readme, je n'ai trouvé pas de façon à l'utiliser, donc je ne pouvais pas le tester.
3) Unity-VNC-Client(2) [14]
Dans la bibliothèque, il n'y avait pas aussi de façon d'utilisation.
6. Réalisation d'une solution pour afficher l'image du jeux vidéo à Unity par TCP/IP:
Il n'existe pas de bonne solution à intégrer le VNC à Unity, mais, j'ai pensé que je pouvais coder une programmation à stimuler la fonction de VNC moi-mème avec TCP/IP et C# et l'intégrer à Unity.
Mon idée est suivante:
Maintenant, j'ai fini à afficher l'image du jeux vidéo à Unity.
Les détails sont suivants:
Dans l'ordinateur A:
1) Entrer à Unity et Créer un nouveau projet, dans "Main Camera", créer un "Canvas", dans "Canvas", Créer un "Image".
2) Créer un script de C# dans "assets", et coder la programmation suivante: Fichier:GetRemoteImage.txt
3) Mettre l'image à "Canvas"
4) Copier "System.Drawing.dll" au dossier du projet. (System.Drawing.dll est dans "/Applications/Unity/Unity.app/Contents/Mono/lib/mono/2.0", si vous utiliser macbook. Si vous utiliser Linux ou Windows, il est aussi dans le dossier de Unity)
5) Ajouter les configurations suivantes dans le fichier "config"(config est dans "/Applications/Unity/Unity.app/Contents/Mono/etc/mono/", si vous utiliser macbook, si vous utiliser Linux ou Windows, il est aussi dans le dossier de Unity) <dllmap dll="gdiplus" target="/Library/Frameworks/Mono.framework/Versions/"Version of Unity"/lib/libgdiplus.dylib" /> <dllmap dll="gdiplus.dll" target="/Library/Frameworks/Mono.framework/Versions/"Version of Unity"/lib/libgdiplus.dylib" />
Dans l'odinateur B (Windows):
1). Installer FCEUX, et Télécharger le ROM de "Super Mario"[15]
2). Créer la programmation suivants:
xxx
3). Lancer "Super Mario" et la programmtion, taper le IP de l'ordinateur A et le port 50002
Dans l'ordinateur A:
6) Lancer la unity
Un vidéo de présentation est suivante: