\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}
\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 \\ Sous la direction de Monsieur Jacques Ferber}
\date{Lundi 7 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%
}

\AtBeginSection[] { 
  \begin{frame}
    \frametitle{Plan} 
    \tableofcontents[currentsection] 
  \end{frame} 
  \addtocounter{framenumber}{-1} 
}

\begin{document}
\renewcommand*{\figurename}{}

\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
  \item Interpolation linéaire, cubique ou cosinusoidale.
  \item Amplitude, octaves, fréquence, persistance (modification des amplitudes pour chaque octave).
  \item Ridged Perlin Noise
    % [Démo de Ridged Perlin Noise](http://www.inear.se/2010/04/ridged-perlin-noise/)
    % // Fait des crêtes de montagnes ou vallées.
    % abs(perlinNoise());
  \item Midpoint displacement.
  \item Simplex noise : généralisation des triangles équilatéraux à $n$ dimensions, interpolation par rapport aux coins.
  \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.
  \item Cevernes, nuages, textures, terrains : bruit $n$D et voxels (minefield).
  \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
    \item Sur un terrain existant
    \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.
  \item Végétation.
  \item Pas temps-réel.
  \item Approximation : modification de la distribution des hauteurs.
  \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\dots à une carte d'élévation.
    \item Altération du comportement d'un algo à certains endroits.
    \item {\tiny http://www.gamedev.net/blog/33/entry-2249260-procedural-islands-redux/}
    \end{itemize}
  \item Cartes polygonales. {\tiny http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/}
  \item Intégration de formes dans le terrain.
  \end{itemize}
\end{frame}

\subsection{Rivières}

\begin{frame}
  \frametitle{Rivières}
  \begin{itemize}
  \item Pathfinding pour créer des rivières {\tiny http://www.umbrarumregnum.net/articles/creating-rivers}
  \item Affinage du tracé en fonction du LOD.
  \item Tracés arbitraires.
  \item Intégration des rivières 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}
  World machine.
\end{frame}

\section{Rendu}

\subsection{Isosurfaces}
\begin{frame}
  
\end{frame}

\subsection{Ray casting}

\begin{frame}
  \begin{itemize}
  \item Démonstration
  \item Très simple à implémenter
  \item Très bons résultats avec du sampling
  \item Très lent
  \item Démonstration (concours d'assembleur)
  \item Monte carlo
  \end{itemize}
\end{frame}

\section[LOD]{Niveau de détail}

\subsection{ROAM}
\begin{frame}
  \frametitle{ROAM}
  \begin{itemize}
  \item Triangle bintree.
  \item Opération split et merge : voisins «base», «gauche» et «droite».
  \item Défaut maximal visible à l'écran.
  \item Split queue et Merge queue.
  \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 Temps de calcul proportionnel au nombre de 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 Triangle quadtree.
  \item Pas CLOD : les LOD de deux carrés adjacents sont très différents.
  \item Mais on triche pour ne pas avoir de trous dans le mesh.
  \item Triangle fans.
  \item Calcul du LOD en fonction de la distance
  \item On met à jour une branche si elle n'a pas le LOD égal à celui voulu.
  \item Temps de calcul proportionnel au nombre de triangles mis à jour.
  \end{itemize}
\end{frame}

% Triangle fans

\subsection{Streaming de scène}
\begin{frame}
  \frametitle{Streaming de scène}
  \begin{itemize}
  \item Transfert de morceaux entiers de terrain avec le LOD maximal.
  \item Qualité progressive des tiles.
  \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}
