From 451ec6af5b0e0a1c16c636aa3257539e9791b591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Sun, 13 Nov 2011 04:08:30 +0100 Subject: [PATCH] =?UTF-8?q?Toutes=20les=20figures=20pour=20la=20premi?= =?UTF-8?q?=C3=A8re=20diapo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pgfbaseimage.sty | 2 + présentation.tex | 565 +++++++++++++++++++++++++++------------------- 2 files changed, 341 insertions(+), 226 deletions(-) create mode 100644 pgfbaseimage.sty diff --git a/pgfbaseimage.sty b/pgfbaseimage.sty new file mode 100644 index 0000000..903b93f --- /dev/null +++ b/pgfbaseimage.sty @@ -0,0 +1,2 @@ +% http://texblog.net/latex-archive/presentations/beamer-warnings/ +\RequirePackage{pgfcore} \ No newline at end of file diff --git a/présentation.tex b/présentation.tex index e504b0b..c2a8608 100644 --- a/présentation.tex +++ b/présentation.tex @@ -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} +\DeclareUnicodeCharacter{B0}{\textdegree}% ° +\DeclareUnicodeCharacter{2264}{\leq}% ≤ +\DeclareUnicodeCharacter{2265}{\geq}% ≥ \usepackage[T1]{fontenc} \usepackage[frenchb]{babel} \usepackage{hyperref} @@ -7,8 +12,7 @@ % https://launchpad.net/ubuntu/precise/i386/pgf/2.10-1 % http://launchpadlibrarian.net/70800349/pgf_2.10-1_all.deb \usepackage{tikz} -\usepackage{pgfplots} -\usetikzlibrary{shapes,positioning,snakes,calc,chains} +\usetikzlibrary{positioning,calc,chains} \usetheme{Frankfurt} \usepackage{graphicx} @@ -29,20 +33,20 @@ \vskip0pt% } -% \AtBeginSection[] { -% \begin{frame} -% \frametitle{Plan} -% \tableofcontents[currentsection] -% \end{frame} -% \addtocounter{framenumber}{-1} -% } +\AtBeginSection[] { + \begin{frame} + \frametitle{Plan} + \tableofcontents[currentsection] + \end{frame} + \addtocounter{framenumber}{-1} +} \begin{document} \makeatletter\renewcommand*{\figurename}{\@gobble}\makeatother -% \begin{frame} -% \titlepage -% \end{frame} +\begin{frame} + \titlepage +\end{frame} % \section{Introduction} @@ -51,256 +55,365 @@ \pgfmathrnd \xdef\noiseseed{\pgfmathresult} +\makeatletter +\pgfmathdeclarefunction{lazyifthenelse}{3}{% + \ifx 1#1% + \pgfmathparse{#2}% + \else% + \pgfmathparse{#3}% + \fi% +} +\makeatother + \shorthandoff{;?:} \tikzset{ declare function={ 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(\a,\b)=hash_2(mod(\a+\b,1.783)*0.417,mod(\a*\b,1.843)+42.56); - noise1D(\x)=hash(\x,\noiseseed); - sampleLeft(\x,\periode)=floor(\x/\periode); - sampleRight(\x,\periode)=floor(\x/\periode)+1; + noise1D(\x,\octave)=hash(\x,hash(\octave,\noiseseed)); + sampleLeft(\x,\periode,\octave)=noise1D(floor(\x/\periode), \octave); + 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); linearInterpolation(\x,\a,\b)=\x*(\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))); - octave1DCosine(\x,\periode,\amplitude)=\amplitude*cosineInterpolation(sampleDelta(\x,\periode), noise1D(sampleLeft(\x,\periode)), noise1D(sampleRight(\x,\periode))); - % perlin1DCosine(\x,\periode,\octaves,\persistance,\amplitude)=\lazyifthenelse{\octaves == 0}{0}{\x + perlin1DCosine(\x,\periode*0.5,\octaves-1,\persistance,\amplitude*\persistance)}; - % recursive(\x)=\lazyifthenelse{\x == 0}{0}{\x+recursive(\x-1)} + cubicInterpolation_(\x,\p,\q,\r,\s)=((\p*\x + \q)*\x + \r)*\x + \s; + cubicInterpolation(\x,\a,\b,\c,\d)=cubicInterpolation_(\x, (\d-\c)-(\a-\b), ((\a-\b)*2)-(\d-\c), \c-\a, \b); + % Using linear interpolation + 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{;?:} +\def\foo#1{#1} + \subsection{Perlin noise} \begin{frame} \frametitle{Perlin noise} - \begin{itemize} - \item Superposition d'octaves de bruit ($\text{seed} = \noiseseed$). \begin{figure}[h] \centering - \begin{tikzpicture}[scale=0.1,mark size=10] - \only<1->{ \path[samples at={0,16,...,64}, mark=ball] plot (\x,{octave1DLinear(\x,16,20)}); } - \only<2>{ \draw[samples at={0,16,...,64}] plot (\x,{octave1DLinear(\x,16,20)}); } - \only<3->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{octave1DCosine(\x,16,20)}); } - \only<4->{ \path[samples at={0,8,...,64}, mark=ball] plot (\x,{20+octave1DLinear(\x,8,10)}); } - \only<4->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{20+octave1DCosine(\x,8,10)}); } - \only<5->{ \path[samples at={0,4,...,64}, mark=ball] plot (\x,{30+octave1DLinear(\x,4,5)}); } - \only<5->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{30+octave1DCosine(\x,4,5)}); } - % \only<1->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{perlin1DCosine(\x,16,2,0.5,20)}); } - % \only<1->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{recursive(\x)}); } + \begin{tikzpicture}[ + scale=0.09, + pcurve/.style={samples at={0,1,...,64}, smooth}, + mcurve/.style={pcurve, mark=ball, mark size=18}, + mgray/.style={mcurve,gray!50!white}] + % Prendre de la place lorsqu'on n'affiche pas les courbes supérieures. + \path (0,-5) -- (0,40); + \only<1-14>{ + \path (-5,0) -- (70,0); + \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} - \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} - \item Interpolation linéaire, cubique ou cosinusoidale. - \item Amplitude, octaves, fréquence, persistance. - \item Hash de coordonnées% TODO + \begin{itemize} + \item<1-> Superposition d'octaves de bruit ($\text{seed} = \noiseseed$).% TODO : choisir une bonne seed et virer ça. + \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{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} +\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. + {\tiny\url{http://www.gamedev.net/blog/33/entry-2138456-seamless-noise/}} + \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{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} +\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} +\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 + \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} -% \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{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} +\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. +\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} +\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} + \vspace{1em} + \url{http://www.world-machine.com/} + \end{center} +\end{frame} -% \section{Rendu} +\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{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} +\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{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} +% \frametitle{Conclusion} % \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} +\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}