247 lines
7.8 KiB
TeX
247 lines
7.8 KiB
TeX
\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}
|