\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}