SonarDeLInfini/SonarDeLInfini.tex

91 lines
5.0 KiB
TeX

\documentclass[10pt,a4paper]{article}
\usepackage[margin=2.5cm]{geometry}
\usepackage[francais]{babel}
\usepackage{lmodern}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\author{Mysaa (Samy AVRILLON)}
\title{Le sonar de l'infini}
\begin{document}
\maketitle
\tableofcontents
\newpage
\part{Problèmatique}
L'objectif de ce TIPE est de générer des fonds marins aléatoires, réalistes ou au moins 'utiles'. Les applications possibles seraient, par exemple
\begin{itemize}
\item La générations de photographies de synthèse de paysages aléatoires, dans le cinéma par exemple. Les paramètres seront ainsi déterminés de manière à créer les paysages les plus réaliste possible, ou modifiés pour servir un message artistique (par exemple, demander un sol plus imparfait).
\item De la génération procédurale dans des jeux vidéos. L'exemple le plus pertinent est le jeu vidéo \textit{Minecraft}, où le joueur évolue dans un monde généré aléatoirement grâce à une graine (\textit{seed} en anglais) de manière déterministe (deux mondes générés avec une même graine seront rigoureusement identiques). De plus, le moteur de génération est géré de manière à ce que l'on puisse lui demander de générer une zone 'loin' sans qu'il n'ait à générer toutes les zones à partir de l'origine. Enfin, la carte générée est potentiellement infinie (limité bien sur par la taille de stockage allouée aux entiers et aux flottants).
\item De la génération de fonds pour des tests en simulation d'IA de robot sous-marin (voir projet de Quentin SOUVIGNET) ou pour tester des simulations de tsunami.
\end{itemize}
De ces possibles application, je tire un \og Cahier des charges \fg de mon générateur :
\begin{itemize}
\item Laisser accès au plus de paramètres possible, pour une meilleure personnalisation.
\item Permettre une génération procédurale, déterministe et non liée à l'origine.
\item Limiter la complexité en temps du programme, éventuellement la complexité spatiale.
\end{itemize}
\part{Génération}
Je vais présenter dans cette partie les différents algorithmes implémentés, leurs applications possibles, leurs caractéristiques.
\section{Bruit de Perlin}
Il s'agit d'un bruit très flou (voir Figure \ref{perlinExample}). Il peut être utilisé pour la génération d'une carte grande échelle, indiquant les variations globales du terrain.
\begin{figure}[h]
\centering
\includegraphics[height = 8cm]{"perlin"}
\caption{Exemple de génération d'un bruit de Perlin sur une zone de 5x5}
\label{perlinExample}
\end{figure}
Je vais maintenant donner une description simplifiée de fonctionnement de l'algorithme : Il génère d'abord une carte de gradients 2D de norme unitaire de direction et sens aléatoires (vecteurs du cercle trigonométrique), positionnés en chaque noeud entier. Ensuite, il \og lance une nappe \fg qui va prendre une forme imposée par les gradients. L'algorithme met en jeu une fonction d'interpolation pour déterminer les valeurs hors des noeuds, ce qui peut être un paramètre sur lequel agir.
L'avantages de cet algorithme est sa rapidité et sa faible complexité spatiale.
\section{Bruit fractal}
Cet algorithme génère des droites de manière aléatoires, ce qui sépare pour chaque droite le plan en deux, et surélève l'un des deux cotés. Ce bruit est beaucoup plus \og granuleux \fg que le brut de perlin, et semble par conséquent plus réaliste. Le problème est que cette méthode est incompatible avec l'infinité de la map. On ne peux en effet pas charger l'infinité des droites du plan pour générer un carré (une célèbre équation annonce que $ \forall x \in \mathbb{R} \;,\; x < +\infty$). J'ai donc modifié l'algorithme en restreignant l'action des droites progressivement (grâce à une fonction d'interpolation, paramétrable elle aussi) Voir Figure \ref{fractExample} pour deux exemples avec plus ou moins de droites par region. L'inconvenient de cette methode est qu'elle devient vite coûteuse lorsque l'on augmente le nombre de droites.
\begin{figure}[h]
\centering
\includegraphics[height = 7cm]{"bfractal"}
\includegraphics[height = 7cm]{"hfractal"}
\caption{Bruit fractal avec peu à gauche et beaucoup à droite de droites par chunk}
\label{fractExample}
\end{figure}
\part{Définition des paramètres et de presets}
A faire ...
\part{Ouverture}
Je vais ici lister différents extensions pouvant être apportées à l'étude, si le sujet devient complètement traité.
\begin{itemize}
\item Créer un moteur de générations d'images des fonds marins générés précédemment, notamment avec la technique du ray-tracing.
\item Textures de l'eau aléatoires, des coraux aléatoires, avec une texture ayant l'air organique ...
\item Créer un moteur physique simplifié permettant à un joueur virtuel de se déplacer dans l'océan virtuel. Déterminer le meilleur rapport coût algorithmique/réalisme
\end{itemize}
\end{document}