2011-m2s3-presentation-terrain/presentation.tex
2011-11-09 16:42:24 +01:00

293 lines
8.7 KiB
TeX
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[frenchb]{babel}
\usepackage{hyperref}
% \hypersetup{%
% colorlinks,%
% citecolor=black,%
% filecolor=black,%
% linkcolor=black,%
% urlcolor=black%
% }
\usepackage{tikz}
%\makeatletter\def\@makecaption{}\makeatother
%\usepackage[scriptsize]{caption}
%\captionsetup[figure]{labelformat=empty, labelsep=none}
%\renewcommand*{\figurename}{}
\usetikzlibrary{shapes,positioning,snakes,calc,chains}
\usetheme{Frankfurt}
\usepackage{graphicx}
\title{FMIN313 Moteurs de jeux\\ Génération de terrains}
\author{DUPÉRON Georges \and\\ BONAVERO Yoann}
\institute{Université Montpellier II,\\Département informatique\\Master 2 IFPRU\\Encadrants~: F. Koriche et M. Moulis}
\date{Lundi 14 novembre 2011}
\defbeamertemplate*{footline}{shadow theme}
{%
\leavevmode%
\hbox{\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm plus1fil,rightskip=.3cm]{author in head/foot}%
\usebeamerfont{author in head/foot}\insertframenumber\,/\,\inserttotalframenumber%\hfill\url{http://www.pticlic.fr/}
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm plus1fil]{title in head/foot}%
\usebeamerfont{title in head/foot}\insertshorttitle%
\end{beamercolorbox}}%
\vskip0pt%
}
%\defbeamertemplate*{caption}{numbered}
%{%
% \raggedright
% {%
% \usebeamercolor[fg]{caption name}%
% \usebeamerfont*{caption name}%
% \insertcaptionname~\insertcaptionnumber:____%
% }
% \insertcaption\par
%}
\AtBeginSection[] {
\begin{frame}
\frametitle{Plan}
\tableofcontents[currentsection]
\end{frame}
\addtocounter{framenumber}{-1}
}
\begin{document}
\makeatletter\renewcommand*{\figurename}{\@gobble}\makeatother
\begin{frame}
\titlepage
\end{frame}
% \section{Introduction}
\section{Génération}
\subsection{Perlin noise}
\begin{frame}
\frametitle{Perlin noise}
\begin{itemize}
\item Superposition d'octaves de bruit
\begin{figure}[h]
\centering
\begin{tikzpicture}
\draw[draw=blue] (0,0) -- (1,1) -- (2,0);
\end{tikzpicture}
\caption{Perlin noise}
\end{figure}
\item Interpolation linéaire, cubique ou cosinusoidale.
\item Amplitude, octaves, fréquence, persistance.
\item Hash de coordonnées% TODO
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Perlin noise (Variations)}
\begin{itemize}
\item Cevernes, nuages, textures, terrains : bruit $n$D et voxels.
\item Ridged Perlin Noise.
\item Midpoint displacement.
\item Simplex noise : généralisation des triangles équilatéraux à $n$ dimensions, interpolation par rapport aux coins. $d^2$ au lieu de $2^d$.
\item Bruit répétable 1D : points sur un cercle dans un espace 2D. Généralisation à $n$ dimensions : hypercercle $n$D dans un espace $2n$D.
%TODO : référence
\end{itemize}
\end{frame}
\subsection{Craters et Hills Algorithm}
\begin{frame}
\frametitle{Craters et Hills Algorithm}
\begin{itemize}
\item Craters
\begin{itemize}
\item Soustraire des cercles au terrain (z = z - f(distance au centre))
\item Sur un terrain nu
% TODO : image
\item Sur un terrain existant
% TODO : image
\end{itemize}
\item Hills Algorithm
\begin{itemize}
\item Inverse de craters : on ajoute plein de cercles
\end{itemize}
\item Stockage des cercles dans un arbre (BSP, Quadtree, arbre du LOD, \dots{}).
\end{itemize}
\end{frame}
\subsection{Érosion}
\begin{frame}
\frametitle{Érosion}
\begin{itemize}
\item Déplacement de sédiments.
\item Taux en fonction de la pente, dureté de la roche, végétation.
\item Carte de circulation des eaux.
\item Pas temps-réel.
\item Approximation : modification de la distribution des hauteurs. % TODO : schéma
\end{itemize}
\end{frame}
\subsection{Autres}
\begin{frame}
\frametitle{Autres méthodes}
\begin{itemize}
\item Chaînage d'algorithmes de bruit
\begin{itemize}
\item Ajout de couleurs, climats, végétation, relief\dots{}
\item Altération du comportement d'un algo.
\item {\tiny\url{http://www.gamedev.net/blog/33/entry-2249260-procedural-islands-redux/}}
\end{itemize}
\item Cartes polygonales. {\tiny\url{http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/}}
% TODO : voronoi etc.
\item Intégration de formes dans le terrain.
\end{itemize}
\end{frame}
\subsection{Rivières}
\begin{frame}
\frametitle{Rivières}
\begin{itemize}
\item Pathfinding {\tiny\url{http://www.umbrarumregnum.net/articles/creating-rivers}}
% Image
\item Affinage du tracé en fonction du LOD.
% Schéma sur un ou deux niveaux d'affinage.
\item Tracé arbitraire.
\item Intégration dans le terrain.
\end{itemize}
\end{frame}
% Si on utilise une méthode de coût qui favorise de passer par un petit
% bout de bruit plutôt que de le contourner, mais favorise le
% contournement pour une grosse accumulation de bruit, on pourra même
% simuler l'érosion qui efface les méandres trop petits.
\subsection{Démonstration}
\begin{frame}
\frametitle{Démonstration}
\begin{center}
{\Huge World machine}
\vspace{1em}
\url{http://www.world-machine.com/}
\end{center}
\end{frame}
\section{Rendu}
\subsection{Isosurfaces}
\begin{frame}
\frametitle{Isosurfaces}
\begin{itemize}
\item Metaballs % TODO : écran de veille / screenshot.
\item Surface 2D d'un bruit 3D.
\item Simplification de nuages.
\item Surface de l'eau.
\end{itemize}
\end{frame}
\subsection{Ray casting}
\begin{frame}
\frametitle{Ray casting}
\begin{itemize}
\item Très simple, très petit code.
% TODO : Schéma d'explication
\item Sampling
\item Très lent
\item Démonstration
\item Monte Carlo
\end{itemize}
\end{frame}
\section[LOD]{Niveau de détail}
\subsection{ROAM}
\begin{frame}
\frametitle{ROAM}
\begin{itemize}
\item Triangle bintree.
% TODO : Figure : triangle avec 2 fils.
\item Split et merge. CLOD.
% TODO : Figure : split forcé, merge d'un losange.
\item Défaut maximal visible à l'écran.
% TODO : Figure : Dessin projection pavé triangle erreur à l'écran.
\item Split queue et Merge queue.
% TODO : queues l'une au-dessus de l'autre, montrer qu'on va +- les priorités pour éviter le chevauchement.
\item Frustum culling : utilisation de drapaux.
\item Améliorations~:
\begin{itemize}
\item Triangle stripping.
\item Geomorphing.
\item Calcul différé des priorités dans les queues.
\item Temps réel.
\end{itemize}
\item $O(\text{Nb triangles mis à jour})$
\end{itemize}
\end{frame}
\subsection{Geometry clipmaps}
\begin{frame}
\frametitle{Geometry clipmaps}
\begin{itemize}
\item Carrés concentriques avec des LOD différents.
\item Comme le mipmapping de textures.
\item Utilisation forte du GPU.
\item Displacement shader.
\item Remplissage à la jointure des LOD.
\end{itemize}
\end{frame}
\subsection{Notre algo}
\begin{frame}
\frametitle{Notre algorithme}
\begin{itemize}
\item Quadtree de carrés.
% TODO : figure
% TODO : figure trous dans le mesh
\item Triangle fans.
\item LOD en fonction de la distance.
\item Mise à jour de quelques branches seulement.
\item Temps réel.
\item $O(\text{Nb triangles mis à jour})$
\end{itemize}
\end{frame}
\subsection{Streaming de scène}
\begin{frame}
\frametitle{Streaming de scène}
\begin{itemize}
\item Modèle client/serveur.
\item Tiles avec LOD maximal.
\item Qualité progressive des tiles.
\item Geometry clipmaps.
\item \texttt{/usr/lib/xscreensaver/crackberg}
\end{itemize}
\end{frame}
% \section{Conclusion}
% \begin{frame}
% \frametitle{Conclusion}
% \end{frame}
\begin{frame}
\frametitle{Sources}
% Génération
% * [Différents algos]() : Ridged Perlin Noise, Hills Algorithm, Craters, Erosion.
% * [Plein d'algos](http://planetgenesis.sourceforge.net/docs15/noise/noise.html#tileworley) dont plusieurs basés sur une sorte de voronoi donc à priori trop lents.
% * Affichage avec Ogre : [forum](http://www.ogre3d.org/forums/viewtopic.php?f=5&t=67177&p=442222), [doc](http://www.ogre3d.org/docs/api/html/classOgre_1_1BillboardSet.html)
\begin{itemize}
\item http://www.gamasutra.com
\item http://vterrain.org
% \item Mojoworld generator (mojoworld.org)
\item http://world-machine.com
\item Algorithmes de bruit {\tiny http://www.sluniverse.com/php/vb/project-development/34994-automatically-generated-terrain-map.html}
\item Composition d'algorithmes de bruit {\tiny http://www.gamedev.net/blog/33/entry-2249260-procedural-islands-redux/}
\item Création de cartes polygonales {\tiny http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/}
\item Pathfinding pour créer des rivières {\tiny http://www.umbrarumregnum.net/articles/creating-rivers}
\end{itemize}
\end{frame}
\end{document}