projet-modelisation-geometr.../docs/rapport.md

96 lines
4.3 KiB
Markdown
Raw Normal View History

<h1 align="center">
Projet de Modélisation Géométrique<br>
Création et suivi de trajectoire de caméras<br>
Option longue 1
</h1>
<p align="center">
Laurent Fainsin &mdash;
Damien Guillotin
</p>
## Description
Lobjectif de ce projet était de construire, à partir des connaissances acquises durant le cours dinterpolation et dapproximation, un module sous Unity3D qui permet de réaliser un suivi de trajectoire de caméra en ne fournissant quun nombre restreint dinformations, à savoir quelques points (trois coordonnées spatiales, trois coordonnées axiales).
Nous avons décidé (avec l'accord de notre professeur, Julien Desvergnes) de modifier légèrement la consigne de ce projet. Nous avons opté pour le developpement d'un plugin pour un serveur [Minecraft](https://www.minecraft.net/fr-fr) [Spigot](https://www.spigotmc.org/), permettant aux joueurs de créer des travelings.
## API Spigot
L'API Spigot nous permet d'interfacer avec le monde / les propriétés / les entités de notre serveur Minecraft.
Le serveur Minecraft ([paperMC](https://papermc.io/)) étant écrit en Java, nous devons utiliser ce langage de programmation pour développer notre plugin.
Pour développer notre plugin nous avons donc créé un environnement de developpement sous VSCode via le gestionnaire de dépendance Java: [Gradle](https://gradle.org/).
Pour compiler notre plugin nous pouvons générer une archive `.jar` via la commande `gradle jar`. Pour déployer notre plugin sur notre serveur, nous plaçons notre archive dans le dossier `plugins` de notre serveur.
Pour améliorer le déployment et le lancement du serveur Minecraft, nous avons de plus utilisé un [docker-compose](https://docs.docker.com/compose/).
Une fois le plugin déployé, et le serveur démarré, nous pouvons utiliser notre plugin. Si celui-ci n'est pas activé, nous pouvons utiliser la commande `/reload confirm` pour relancer les plugins.
## Choix de courbe
Pour le traveling de notre caméra, nous utilisons des courbes de Bezier. Pour réaliser la courbe complète, nous faisons suivre des courbes de degrés 3.
La courbe finale s'apparente à une spline mais nous avons choisi ce type de modélisation car nous souhaitons que notre caméra passe exactement par certains points de contrôles (interpolation). Il est ainsi plus intuitif pour l'utilisateur de modifier la courbe.
Ces courbes de bézier sont générées par évaluation, nous avons fait ce choix car la subdivision semblait peu adapté à la génération d'un nombre de point précis. De plus, le temps de calcule de la courbe reste négligeable, l'optimisation temporelle que permettrait la subdivision ne serait pas perceptible.
Puisque la caméra dans Minecraft ne permet pas de rotation "row", nous avons directement interpolé nos rotations selon un schéma de bézier (sans passer par des quaternions).
### Avantages / Inconvénients
2022-05-24 12:19:27 +00:00
### Démonstrations mathématiques
2022-05-24 12:19:27 +00:00
$\displaystyle B_k^n(t) = \binom{n}{k} t^k (1 - t)^{n-k}$
$\displaystyle S_i(t) = \sum_{k=0}^{n} P_i^k\ B_k^n(t)$
$\displaystyle S_i'(t) = n \sum_{k=0}^{n - 1} (P_i^{k + 1} - P_i^k)\ B_k^{n - 1}(t)$
$\displaystyle S_i'(1) = S_{i + 1}'(0)$
$\displaystyle n (P_i^{n} - P_i^{n - 1}) = n (P_{i + 1}^{1} - P_{i + 1}^{0})$
## Démonstrations
2022-05-24 12:19:27 +00:00
<style>
video {
max-width: 100%;
}
</style>
<table>
<tr>
<td colspan=2>
<img src="2022-05-23_17.46.36.png"/>
</td>
</tr>
<tr>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/demo_show.webm" autoplay loop></video>
</td>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/demo_noshow.webm" autoplay loop></video>
</td>
</tr>
<tr>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/full_show.webm" autoplay loop></video>
</td>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/full_noshow.webm" autoplay loop></video>
</td>
</tr>
</table>
## Conclusion
Notre interpolation fonctionne bien, nos résultats sont satisfaisants.
Seul bémol, notre serveur fonctionne assez lentement par rapport au serveur.
Tandis qu'un client Minecraft tourne au minimum à 60 fps, notre serveur étant monothreadé, celui-ci "tourne" plutôt aux alentoour des 15 fps (ou ticks). On obtient alors un rendu peu fluide dans certains cas.