Toutes les figures pour la première diapo.

This commit is contained in:
Georges Dupéron 2011-11-13 04:08:30 +01:00
parent 0970717052
commit 451ec6af5b
2 changed files with 341 additions and 226 deletions

2
pgfbaseimage.sty Normal file
View File

@ -0,0 +1,2 @@
% http://texblog.net/latex-archive/presentations/beamer-warnings/
\RequirePackage{pgfcore}

View File

@ -1,5 +1,10 @@
\documentclass{beamer} \documentclass[hyperref={pdfpagelabels=false}]{beamer}
% hyperref and lmodern : http://texblog.net/latex-archive/presentations/beamer-warnings/
\usepackage{lmodern}
\usepackage[utf8]{inputenc} \usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{B0}{\textdegree}% °
\DeclareUnicodeCharacter{2264}{\leq}%
\DeclareUnicodeCharacter{2265}{\geq}%
\usepackage[T1]{fontenc} \usepackage[T1]{fontenc}
\usepackage[frenchb]{babel} \usepackage[frenchb]{babel}
\usepackage{hyperref} \usepackage{hyperref}
@ -7,8 +12,7 @@
% https://launchpad.net/ubuntu/precise/i386/pgf/2.10-1 % https://launchpad.net/ubuntu/precise/i386/pgf/2.10-1
% http://launchpadlibrarian.net/70800349/pgf_2.10-1_all.deb % http://launchpadlibrarian.net/70800349/pgf_2.10-1_all.deb
\usepackage{tikz} \usepackage{tikz}
\usepackage{pgfplots} \usetikzlibrary{positioning,calc,chains}
\usetikzlibrary{shapes,positioning,snakes,calc,chains}
\usetheme{Frankfurt} \usetheme{Frankfurt}
\usepackage{graphicx} \usepackage{graphicx}
@ -29,20 +33,20 @@
\vskip0pt% \vskip0pt%
} }
% \AtBeginSection[] { \AtBeginSection[] {
% \begin{frame} \begin{frame}
% \frametitle{Plan} \frametitle{Plan}
% \tableofcontents[currentsection] \tableofcontents[currentsection]
% \end{frame} \end{frame}
% \addtocounter{framenumber}{-1} \addtocounter{framenumber}{-1}
% } }
\begin{document} \begin{document}
\makeatletter\renewcommand*{\figurename}{\@gobble}\makeatother \makeatletter\renewcommand*{\figurename}{\@gobble}\makeatother
% \begin{frame} \begin{frame}
% \titlepage \titlepage
% \end{frame} \end{frame}
% \section{Introduction} % \section{Introduction}
@ -51,256 +55,365 @@
\pgfmathrnd \pgfmathrnd
\xdef\noiseseed{\pgfmathresult} \xdef\noiseseed{\pgfmathresult}
\makeatletter
\pgfmathdeclarefunction{lazyifthenelse}{3}{%
\ifx 1#1%
\pgfmathparse{#2}%
\else%
\pgfmathparse{#3}%
\fi%
}
\makeatother
\shorthandoff{;?:} \shorthandoff{;?:}
\tikzset{ \tikzset{
declare function={ declare function={
hash_3(\a,\b)=Mod(\a*\a+\b,1); hash_3(\a,\b)=Mod(\a*\a+\b,1);
hash_2(\a,\b)=hash_3(mod(\a*\b,1.783)+77.123,mod(\a+\b,1.843)*-0.179); hash_2(\a,\b)=hash_3(mod(\a*\b,1.783)+77.123,mod(\a+\b,1.843)*-0.179);
hash(\a,\b)=hash_2(mod(\a+\b,1.783)*0.417,mod(\a*\b,1.843)+42.56); hash(\a,\b)=hash_2(mod(\a+\b,1.783)*0.417,mod(\a*\b,1.843)+42.56);
noise1D(\x)=hash(\x,\noiseseed); noise1D(\x,\octave)=hash(\x,hash(\octave,\noiseseed));
sampleLeft(\x,\periode)=floor(\x/\periode); sampleLeft(\x,\periode,\octave)=noise1D(floor(\x/\periode), \octave);
sampleRight(\x,\periode)=floor(\x/\periode)+1; sampleLeftLeft(\x,\periode,\octave)=noise1D(floor(\x/\periode)-1, \octave);
sampleRight(\x,\periode,\octave)=noise1D(floor(\x/\periode)+1, \octave);
sampleRightRight(\x,\periode,\octave)=noise1D(floor(\x/\periode)+2, \octave);
sampleDelta(\x,\periode)=frac(\x/\periode); sampleDelta(\x,\periode)=frac(\x/\periode);
linearInterpolation(\x,\a,\b)=\x*(\b-\a) + \a; linearInterpolation(\x,\a,\b)=\x*(\b-\a) + \a;
cosineInterpolation(\x,\a,\b)=(1-cos(\x*180))*0.5*(\b-\a) + \a; cosineInterpolation(\x,\a,\b)=(1-cos(\x*180))*0.5*(\b-\a) + \a;
octave1DLinear(\x,\periode,\amplitude)=\amplitude*linearInterpolation(sampleDelta(\x,\periode), noise1D(sampleLeft(\x,\periode)), noise1D(sampleRight(\x,\periode))); cubicInterpolation_(\x,\p,\q,\r,\s)=((\p*\x + \q)*\x + \r)*\x + \s;
octave1DCosine(\x,\periode,\amplitude)=\amplitude*cosineInterpolation(sampleDelta(\x,\periode), noise1D(sampleLeft(\x,\periode)), noise1D(sampleRight(\x,\periode))); cubicInterpolation(\x,\a,\b,\c,\d)=cubicInterpolation_(\x, (\d-\c)-(\a-\b), ((\a-\b)*2)-(\d-\c), \c-\a, \b);
% perlin1DCosine(\x,\periode,\octaves,\persistance,\amplitude)=\lazyifthenelse{\octaves == 0}{0}{\x + perlin1DCosine(\x,\periode*0.5,\octaves-1,\persistance,\amplitude*\persistance)}; % Using linear interpolation
% recursive(\x)=\lazyifthenelse{\x == 0}{0}{\x+recursive(\x-1)} octave1DLinear(\x,\octave,\periode,\amplitude)=\amplitude*linearInterpolation(sampleDelta(\x,\periode), sampleLeft(\x,\periode,\octave), sampleRight(\x,\periode,\octave));
perlin1DLinear_(\x,\octave,\periode,\octaves,\persistance,\amplitude)=lazyifthenelse(\octave >= \octaves, 0, "octave1DLinear(\x,\octave,\periode,\amplitude) + perlin1DLinear_(\x,\octave+1,\periode*0.5,\octaves,\persistance,\amplitude*\persistance)");
perlin1DLinear(\x,\periode,\octaves,\persistance,\amplitude)=perlin1DLinear_(\x,0,\periode,\octaves,\persistance,\amplitude);
% Using cosine interpolation
octave1DCosine(\x,\octave,\periode,\amplitude)=\amplitude*cosineInterpolation(sampleDelta(\x,\periode), sampleLeft(\x,\periode,\octave), sampleRight(\x,\periode,\octave));
perlin1DCosine_(\x,\octave,\periode,\octaves,\persistance,\amplitude)=lazyifthenelse(\octave >= \octaves, 0, "octave1DCosine(\x,\octave,\periode,\amplitude) + perlin1DCosine_(\x,\octave+1,\periode*0.5,\octaves,\persistance,\amplitude*\persistance)");
perlin1DCosine(\x,\periode,\octaves,\persistance,\amplitude)=perlin1DCosine_(\x,0,\periode,\octaves,\persistance,\amplitude);
% Using cubic interpolation
octave1DCubic(\x,\octave,\periode,\amplitude)=\amplitude*cubicInterpolation(sampleDelta(\x,\periode), sampleLeftLeft(\x,\periode,\octave), sampleLeft(\x,\periode,\octave), sampleRight(\x,\periode,\octave), sampleRightRight(\x,\periode,\octave));
} }
} }
\shorthandon{;?:} \shorthandon{;?:}
\def\foo#1{#1}
\subsection{Perlin noise} \subsection{Perlin noise}
\begin{frame} \begin{frame}
\frametitle{Perlin noise} \frametitle{Perlin noise}
\begin{itemize}
\item Superposition d'octaves de bruit ($\text{seed} = \noiseseed$).
\begin{figure}[h] \begin{figure}[h]
\centering \centering
\begin{tikzpicture}[scale=0.1,mark size=10] \begin{tikzpicture}[
\only<1->{ \path[samples at={0,16,...,64}, mark=ball] plot (\x,{octave1DLinear(\x,16,20)}); } scale=0.09,
\only<2>{ \draw[samples at={0,16,...,64}] plot (\x,{octave1DLinear(\x,16,20)}); } pcurve/.style={samples at={0,1,...,64}, smooth},
\only<3->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{octave1DCosine(\x,16,20)}); } mcurve/.style={pcurve, mark=ball, mark size=18},
\only<4->{ \path[samples at={0,8,...,64}, mark=ball] plot (\x,{20+octave1DLinear(\x,8,10)}); } mgray/.style={mcurve,gray!50!white}]
\only<4->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{20+octave1DCosine(\x,8,10)}); } % Prendre de la place lorsqu'on n'affiche pas les courbes supérieures.
\only<5->{ \path[samples at={0,4,...,64}, mark=ball] plot (\x,{30+octave1DLinear(\x,4,5)}); } \path (0,-5) -- (0,40);
\only<5->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{30+octave1DCosine(\x,4,5)}); } \only<1-14>{
% \only<1->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{perlin1DCosine(\x,16,2,0.5,20)}); } \path (-5,0) -- (70,0);
% \only<1->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{recursive(\x)}); } \node[anchor=east] at (-2,0) {\hphantom{\small $1+2+3$}};
\node[anchor=west] at (64+2,0) {\hphantom{\small $1+2+3$}};
}
% Lignes horizontales
\only<1-14>{ \draw[->,gray] (0,0) -- (70,0); }
\only<2-3,7-14>{ \draw[->,gray] (0,20) -- (70,20); }
\only<3-4,7-14>{ \draw[->,gray] (0,30) -- (70,30); }
% Amplitude
\only<11>{ \draw[<->, thick, red] (-2,1) -- (-2,19); }
% Octaves
\only<12>{ \node[anchor=east, text=red] at (-2,10) {1}; }
\only<12>{ \node[anchor=east, text=red] at (-2,25) {2}; }
\only<12>{ \node[anchor=east, text=red] at (-2,32.5) {3}; }
% Fréquence
\only<13>{ \draw[<->, thick, red] (0,-2) -- (16,-2); }
\only<13>{ \draw[dashed, red] (0,-2) -- (0,{octave1DCosine(0,0,16,20)}); }
\only<13>{ \draw[dashed, red] (16,-2) -- (16,{octave1DCosine(16,0,16,20)}); }
% Persistance
\only<14>{ \draw[<->, dashed, red] (-2,1) -- (-2,19); }
\only<14>{ \draw[<->, dashed, red] (-2,21) -- (-2,29); }
\only<14>{ \draw[thick, red] (-2,10) edge[->,bend left=70] node[left] {\small $\times 0.5$} (-2,25); }
% Étiquette à gauche
\only<4>{ \node[anchor=east] at (-2,{perlin1DCosine(0,16,2,0.5,20)}) {\small $1+2$}; }
\only<5>{ \node[anchor=east] at (-2,{perlin1DCosine(0,16,3,0.5,20)}) {\small $1+2+3$}; }
% Octave 0
\only<1-3>{ \draw[mcurve, mark repeat=16] plot (\x,{octave1DCosine(\x,0,16,20)}); }
\only<4>{ \draw[pcurve, gray] plot (\x,{octave1DCosine(\x,0,16,20)}); }
\only<5>{ \draw[pcurve, gray!50!white] plot (\x,{octave1DCosine(\x,0,16,20)}); }
\only<7>{ \draw[mgray, mark repeat=16] plot (\x,{octave1DLinear(\x,0,16,20)}); }
\only<8>{ \draw[mcurve, mark repeat=16] plot (\x,{octave1DLinear(\x,0,16,20)}); }
\only<9>{ \draw[mcurve, mark repeat=16] plot (\x,{octave1DCubic(\x,0,16,20)}); }
\only<10-14>{ \draw[mcurve, mark repeat=16] plot (\x,{octave1DCosine(\x,0,16,20)}); }
% Octave 1
\only<2-3>{ \draw[mcurve, mark repeat=8] plot (\x,{octave1DCosine(\x,1,8,10) + 20}); }
\only<7>{ \draw[mgray, mark repeat=8] plot (\x,{octave1DLinear(\x,1,8,10) + 20}); }
\only<8>{ \draw[mcurve, mark repeat=8] plot (\x,{octave1DLinear(\x,1,8,10) + 20}); }
\only<9>{ \draw[mcurve, mark repeat=8] plot (\x,{octave1DCubic(\x,1,8,10) + 20}); }
\only<10-14>{ \draw[mcurve, mark repeat=8] plot (\x,{octave1DCosine(\x,1,8,10) + 20}); }
% Octave 2
\only<3-4>{ \draw[mcurve, mark repeat=4] plot (\x,{octave1DCosine(\x,2,4,5) + 30}); }
\only<7>{ \draw[mgray, mark repeat=4] plot (\x,{octave1DLinear(\x,2,4,5) + 30}); }
\only<8>{ \draw[mcurve, mark repeat=4] plot (\x,{octave1DLinear(\x,2,4,5) + 30}); }
\only<9>{ \draw[mcurve, mark repeat=4] plot (\x,{octave1DCubic(\x,2,4,5) + 30}); }
\only<10-14>{\draw[mcurve, mark repeat=4] plot (\x,{octave1DCosine(\x,2,4,5) + 30}); }
% Octave 0+1
\only<4>{ \draw[mcurve, mark repeat=8] plot (\x,{perlin1DCosine(\x,16,2,0.5,20)}); }
\only<5>{ \draw[pcurve, gray] plot (\x,{perlin1DCosine(\x,16,2,0.5,20)}); }
% Octave 0+1+2
\only<5>{ \draw[mcurve, mark repeat=4] plot (\x,{perlin1DCosine(\x,16,3,0.5,20)}); }
\only<6>{ \draw[pcurve] plot (\x,{perlin1DCosine(\x,16,3,0.5,20)}); }
\end{tikzpicture} \end{tikzpicture}
\caption{Perlin noise} % Hash de coordonnées
\begin{tikzpicture}[
node distance=0.5cm,
every node/.style={rectangle,minimum size=6mm,rounded corners=3mm,very thick,draw=black!50}
]
\only<15>{
\path (0,-5*0.09) -- (0,40*0.09); % This and the 17.5*0.09 below are for vertical alignment with the other figure.
\node[draw] (hash1) at (0,17.5*0.09) {hash};
\node[draw,above left=of hash1, draw=blue!50] (x) {$x$};
\node[draw,below left=of hash1] (noctave) {n° octave};
\draw[->] (x) -- (hash1);
\draw[->] (noctave) -- (hash1);
\node[draw, right=of hash1] (hash2) {hash};
\node[draw,below left=of hash2] (seed) {graine};
\draw[->] (hash1) -- (hash2);
\draw[->] (seed) -- (hash2);
\node[right=of hash2, draw=green!50] (valeur) {$valeur$};
\draw[->] (hash2) -- (valeur);
}
\end{tikzpicture}
% \caption{Perlin noise}
\end{figure} \end{figure}
\item Interpolation linéaire, cubique ou cosinusoidale. \begin{itemize}
\item Amplitude, octaves, fréquence, persistance. \item<1-> Superposition d'octaves de bruit ($\text{seed} = \noiseseed$).% TODO : choisir une bonne seed et virer ça.
\item Hash de coordonnées% TODO \item<7-> Interpolation\only<8->{ linéaire}\only<9->{, cubique}\only<10->{ ou cosinusoidale.}
\item<11-> Amplitude\only<12->{, octaves}\only<13->{, fréquence}\only<14->{, persistance.}
\item<15-> Hash de coordonnées
\end{itemize} \end{itemize}
\end{frame} \end{frame}
% \begin{frame} \begin{frame}
% \frametitle{Perlin noise (Variations)} \frametitle{Perlin noise (Variations)}
% \begin{itemize} \begin{itemize}
% \item Cevernes, nuages, textures, terrains : bruit $n$D et voxels. \item Cevernes, nuages, textures, terrains : bruit $n$D et voxels.
% \item Ridged Perlin Noise. \item Ridged Perlin Noise.
% \item Midpoint displacement. \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 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. \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 {\tiny\url{http://www.gamedev.net/blog/33/entry-2138456-seamless-noise/}}
% \end{itemize} \end{itemize}
% \end{frame} \end{frame}
% \subsection{Craters et Hills Algorithm} \subsection{Craters et Hills Algorithm}
% \begin{frame} \begin{frame}
% \frametitle{Craters et Hills Algorithm} \frametitle{Craters et Hills Algorithm}
% \begin{itemize} \begin{itemize}
% \item Craters \item Craters
% \begin{itemize} \begin{itemize}
% \item Soustraire des cercles au terrain (z = z - f(distance au centre)) \item Soustraire des cercles au terrain (z = z - f(distance au centre))
% \item Sur un terrain nu \item Sur un terrain nu
% % TODO : image % TODO : image
% \item Sur un terrain existant \item Sur un terrain existant
% % TODO : image % TODO : image
% \end{itemize} \end{itemize}
% \item Hills Algorithm \item Hills Algorithm
% \begin{itemize} \begin{itemize}
% \item Inverse de craters : on ajoute plein de cercles \item Inverse de craters : on ajoute plein de cercles
% \end{itemize} \end{itemize}
% \item Stockage des cercles dans un arbre (BSP, Quadtree, arbre du LOD, \dots{}). \item Stockage des cercles dans un arbre (BSP, Quadtree, arbre du LOD, \dots{}).
% \end{itemize} \end{itemize}
% \end{frame} \end{frame}
% \subsection{Érosion} \subsection{Érosion}
% \begin{frame} \begin{frame}
% \frametitle{Érosion} \frametitle{Érosion}
% \begin{itemize} \begin{itemize}
% \item Déplacement de sédiments. \item Déplacement de sédiments.
% \item Taux en fonction de la pente, dureté de la roche, végétation. \item Taux en fonction de la pente, dureté de la roche, végétation.
% \item Carte de circulation des eaux. \item Carte de circulation des eaux.
% \item Pas temps-réel. \item Pas temps-réel.
% \item Approximation : modification de la distribution des hauteurs. % TODO : schéma \item Approximation : modification de la distribution des hauteurs.
% \end{itemize} % TODO : schéma
% \end{frame} \begin{figure}[h]
\centering
\begin{tikzpicture}
% Un dégradé vertical indiquant l'élévation de départ
% Fonction f(x) = x
% 2e dégradé indiquant le résultat.
% Même chose avec une autre fonction.
\end{tikzpicture}
\end{figure}
\end{itemize}
\end{frame}
% \subsection{Autres} \subsection{Autres}
% \begin{frame} \begin{frame}
% \frametitle{Autres méthodes} \frametitle{Autres méthodes}
% \begin{itemize} \begin{itemize}
% \item Chaînage d'algorithmes de bruit \item Chaînage d'algorithmes de bruit
% \begin{itemize} \begin{itemize}
% \item Ajout de couleurs, climats, végétation, relief\dots{} \item Ajout de couleurs, climats, végétation, relief\dots{}
% \item Altération du comportement d'un algo. \item Altération du comportement d'un algo.
% \item {\tiny\url{http://www.gamedev.net/blog/33/entry-2249260-procedural-islands-redux/}} \item {\tiny\url{http://www.gamedev.net/blog/33/entry-2249260-procedural-islands-redux/}}
% \end{itemize} \end{itemize}
% \item Cartes polygonales. {\tiny\url{http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/}} \item Cartes polygonales. {\tiny\url{http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/}}
% % TODO : voronoi etc. % TODO : voronoi etc.
% \item Intégration de formes dans le terrain. \item Intégration de formes dans le terrain.
% \end{itemize} \end{itemize}
% \end{frame} \end{frame}
% \subsection{Rivières} \subsection{Rivières}
% \begin{frame} \begin{frame}
% \frametitle{Rivières} \frametitle{Rivières}
% \begin{itemize} \begin{itemize}
% \item Pathfinding {\tiny\url{http://www.umbrarumregnum.net/articles/creating-rivers}} \item Pathfinding {\tiny\url{http://www.umbrarumregnum.net/articles/creating-rivers}}
% % Image % Image
% \item Affinage du tracé en fonction du LOD. \item Affinage du tracé en fonction du LOD.
% % Schéma sur un ou deux niveaux d'affinage. % Schéma sur un ou deux niveaux d'affinage.
% \item Tracé arbitraire. \item Tracé arbitraire.
% \item Intégration dans le terrain. \item Intégration dans le terrain.
% \end{itemize} \end{itemize}
% \end{frame} \end{frame}
% % Si on utilise une méthode de coût qui favorise de passer par un petit % 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 % bout de bruit plutôt que de le contourner, mais favorise le
% % contournement pour une grosse accumulation de bruit, on pourra même % contournement pour une grosse accumulation de bruit, on pourra même
% % simuler l'érosion qui efface les méandres trop petits. % simuler l'érosion qui efface les méandres trop petits.
% \subsection{Démonstration} \subsection{Démonstration}
% \begin{frame} \begin{frame}
% \frametitle{Démonstration} \frametitle{Démonstration}
% \begin{center} \begin{center}
% {\Huge World machine} {\Huge World machine}
% \vspace{1em} \vspace{1em}
% \url{http://www.world-machine.com/} \url{http://www.world-machine.com/}
% \end{center} \end{center}
% \end{frame} \end{frame}
% \section{Rendu} \section{Rendu}
% \subsection{Isosurfaces} \subsection{Isosurfaces}
% \begin{frame} \begin{frame}
% \frametitle{Isosurfaces} \frametitle{Isosurfaces}
% \begin{itemize} \begin{itemize}
% \item Metaballs % TODO : écran de veille / screenshot. \item Metaballs % TODO : écran de veille / screenshot.
% \item Surface 2D d'un bruit 3D. \item Surface 2D d'un bruit 3D.
% \item Simplification de nuages. \item Simplification de nuages.
% \item Surface de l'eau. \item Surface de l'eau.
% \end{itemize} \end{itemize}
% \end{frame} \end{frame}
% \subsection{Ray casting} \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} % \begin{frame}
% \frametitle{Ray casting} % \frametitle{Conclusion}
% \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} % \end{frame}
% \section[LOD]{Niveau de détail} \begin{frame}
\frametitle{Sources}
% \subsection{ROAM} % Génération
% \begin{frame} % * [Différents algos]() : Ridged Perlin Noise, Hills Algorithm, Craters, Erosion.
% \frametitle{ROAM} % * [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.
% \begin{itemize} % * 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)
% \item Triangle bintree. \begin{itemize}
% % TODO : Figure : triangle avec 2 fils. \item http://www.gamasutra.com
% \item Split et merge. CLOD. \item http://vterrain.org
% % TODO : Figure : split forcé, merge d'un losange. % \item Mojoworld generator (mojoworld.org)
% \item Défaut maximal visible à l'écran. \item http://world-machine.com
% % TODO : Figure : Dessin projection pavé triangle erreur à l'écran. \item Algorithmes de bruit {\tiny http://www.sluniverse.com/php/vb/project-development/34994-automatically-generated-terrain-map.html}
% \item Split queue et Merge queue. \item Composition d'algorithmes de bruit {\tiny http://www.gamedev.net/blog/33/entry-2249260-procedural-islands-redux/}
% % TODO : queues l'une au-dessus de l'autre, montrer qu'on va +- les priorités pour éviter le chevauchement. \item Création de cartes polygonales {\tiny http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/}
% \item Frustum culling : utilisation de drapaux. \item Pathfinding pour créer des rivières {\tiny http://www.umbrarumregnum.net/articles/creating-rivers}
% \item Améliorations~: \end{itemize}
% \begin{itemize} \end{frame}
% \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} \end{document}