chapitre 1-1 fini
This commit is contained in:
parent
46f1e81574
commit
2aaae09fb9
1
Parties/biblio.bib
Normal file
1
Parties/biblio.bib
Normal file
@ -0,0 +1 @@
|
|||||||
|
http://www.cochoy.fr/pdfs/perlin-noise/perlin_noise.pdf
|
@ -0,0 +1,85 @@
|
|||||||
|
L'algorithme du bruit de Perlin se décompose en 3 parties que sont:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item la définition de la grille.
|
||||||
|
\item le calcul du produit scalaire entre le vecteur gradiant et le vecteur
|
||||||
|
distance.
|
||||||
|
\item l'interpolation entre ces valeurs.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
|
||||||
|
Pour la définitionde la grille, il faut définir une grille à $n$ dimensions.
|
||||||
|
Attribuer pour chaque nœud un vecteur de gradient aléatoire de norme 1 et de
|
||||||
|
dimension $n$.
|
||||||
|
\newline
|
||||||
|
|
||||||
|
Pour ce qui concerne le produit scalaire, nous faisons comme suit:
|
||||||
|
|
||||||
|
Soit un point de l'espace à $n$-dimensions envoyé à la fonction de bruit,
|
||||||
|
l'étape consiste à déterminer dans quelle cellule de grille le point donné se
|
||||||
|
situe. Pour chaque nœud-sommet de cette cellule, calculer le vecteur distance
|
||||||
|
entre le point et le nœud-sommet. Puis calculer le produit scalaire entre le
|
||||||
|
vecteur de gradient au nœud et le vecteur de distance. Cela conduit à l'échelle
|
||||||
|
de complexité $O(2^{n})$.
|
||||||
|
\newline
|
||||||
|
|
||||||
|
La dernière étape est l'interpolation entre les $2^{n}$ produits scalaires
|
||||||
|
calculés aux nœuds de la cellule contenant le point d'argument. Cela a pour
|
||||||
|
conséquence que la fonction de bruit renvoie 0 lorsqu'elle est évaluée sur les
|
||||||
|
nœuds de la grille eux-mêmes.
|
||||||
|
|
||||||
|
L'interpolation est effectuée en utilisant une fonction dont la dérivée première
|
||||||
|
(et éventuellement la dérivée seconde) est nulle aux $2^{n}$ nœuds de la grille.
|
||||||
|
Cela a pour effet que le gradient de la fonction de bruit résultante à chaque
|
||||||
|
nœud de grille coïncide avec le vecteur de gradient aléatoire précalculé.
|
||||||
|
\newline
|
||||||
|
|
||||||
|
Voici le pseudo-code de l'implantation du bruit de Perlin à 2 dimensions:
|
||||||
|
|
||||||
|
\begin{lstlisting}[caption=Implantation du bruit de Perlin en pseudo-code, label=code:perlin]
|
||||||
|
// Function to linearly interpolate between a0 and a1
|
||||||
|
// Weight w should be in the range [0.0, 1.0]
|
||||||
|
function lerp(float a0, float a1, float w) {
|
||||||
|
return (1.0 - w)*a0 + w*a1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Computes the dot product of the distance and gradient vectors.
|
||||||
|
function dotGridGradient(int ix, int iy, float x, float y) {
|
||||||
|
|
||||||
|
// Precomputed (or otherwise) gradient vectors at each grid node
|
||||||
|
extern float Gradient[IYMAX][IXMAX][2];
|
||||||
|
|
||||||
|
// Compute the distance vector
|
||||||
|
float dx = x - (float)ix;
|
||||||
|
float dy = y - (float)iy;
|
||||||
|
|
||||||
|
// Compute the dot-product
|
||||||
|
return (dx*Gradient[iy][ix][0] + dy*Gradient[iy][ix][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute Perlin noise at coordinates x, y
|
||||||
|
function perlin(float x, float y) {
|
||||||
|
|
||||||
|
// Determine grid cell coordinates
|
||||||
|
int x0 = floor(x);
|
||||||
|
int x1 = x0 + 1;
|
||||||
|
int y0 = floor(y);
|
||||||
|
int y1 = y0 + 1;
|
||||||
|
|
||||||
|
// Determine interpolation weights
|
||||||
|
// Could also use higher order polynomial/s-curve here
|
||||||
|
float sx = x - (float)x0;
|
||||||
|
float sy = y - (float)y0;
|
||||||
|
|
||||||
|
// Interpolate between grid point gradients
|
||||||
|
float n0, n1, ix0, ix1, value;
|
||||||
|
n0 = dotGridGradient(x0, y0, x, y);
|
||||||
|
n1 = dotGridGradient(x1, y0, x, y);
|
||||||
|
ix0 = lerp(n0, n1, sx);
|
||||||
|
n0 = dotGridGradient(x0, y1, x, y);
|
||||||
|
n1 = dotGridGradient(x1, y1, x, y);
|
||||||
|
ix1 = lerp(n0, n1, sx);
|
||||||
|
value = lerp(ix0, ix1, sy);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
\end{lstlisting}
|
@ -1 +1,15 @@
|
|||||||
Dans cette partie, nous parlerons de …
|
Dans cette partie, nous nous intéresseront au bruit de Perlin. Pour le contexte
|
||||||
|
de la découverte de ce générateur de bruit, voici un extrait de l'article
|
||||||
|
Wikipédia dédié:
|
||||||
|
|
||||||
|
\guillemets{Le bruit de Perlin a été développé par Ken Perlin
|
||||||
|
en 1985. À cette époque, après avoir travaillé sur les effets spéciaux de Tron
|
||||||
|
pour MAGI en 1981, il cherchait à éviter le look « machinique ». Il commença
|
||||||
|
donc par mettre au point une fonction pseudo-aléatoire de bruit qui remplit les
|
||||||
|
trois dimensions de l'espace, avant d'inventer l'année suivante le premier
|
||||||
|
langage de shading. Ses travaux sur les textures procédurales ont valu à Ken
|
||||||
|
Perlin l'Academy Award for Technical Achievement en 1997.}
|
||||||
|
|
||||||
|
Une des particularité de sa méthode est que les détails du bruit généré sont de
|
||||||
|
même taille, ce qui permet de combiner une texture générée d'une taille donnée
|
||||||
|
avec d'autres échelles pour ajouter de la profondeur.
|
@ -2,15 +2,15 @@
|
|||||||
% textures de manière procédurale et presque instantanément est devenue presque
|
% textures de manière procédurale et presque instantanément est devenue presque
|
||||||
% incontournable dans des domaines tels que les jeux vidéos, les animations ou
|
% incontournable dans des domaines tels que les jeux vidéos, les animations ou
|
||||||
% encore les effets spéciaux. De tels procédés sont appelés des (pixel) shaders
|
% encore les effets spéciaux. De tels procédés sont appelés des (pixel) shaders
|
||||||
% (ou nuanceurs de pixels en français). L'article ici étudié se nomme «Procedural
|
% (ou nuanceurs de pixels en français). L'article ici étudié se nomme
|
||||||
% Phasor Noise» et porte sur une nouvelle conception de shader, grandement inspiré
|
% «Procedural Phasor Noise» et porte sur une nouvelle conception de shader,
|
||||||
% d'une autre étude intitulée «Gabor Noise».
|
% grandement inspiré d'une autre étude intitulée «Gabor Noise».
|
||||||
|
|
||||||
% Nous allons donc étudier au travers de ce rapport, ce que sont les shaders plus
|
% Nous allons donc étudier au travers de ce rapport, ce que sont les shaders
|
||||||
% en détails, avant d'introduire la méthode Gabor Noise pour enfin déboucher sur
|
% plus en détails, avant d'introduire la méthode Gabor Noise pour enfin
|
||||||
% le sujet d'étude en lui-même, Procedural Phasor Noise et ainsi voir les
|
% déboucher sur le sujet d'étude en lui-même, Procedural Phasor Noise et ainsi
|
||||||
% améliorations apportées par ce dernier par rapport aux autres méthodes de
|
% voir les améliorations apportées par ce dernier par rapport aux autres
|
||||||
% shading.
|
% méthodes de shading.
|
||||||
|
|
||||||
Dans le monde de l'Infographie et plus particulièrement dans le domaine de la
|
Dans le monde de l'Infographie et plus particulièrement dans le domaine de la
|
||||||
modélisation, les textures sont devenues indispensables pour associer un modèle
|
modélisation, les textures sont devenues indispensables pour associer un modèle
|
||||||
@ -19,6 +19,7 @@ apportés par les textures. Les domaines d'application sont nombreux,
|
|||||||
l'animation, les images de synthèses utilisées dans les films, ou encore les
|
l'animation, les images de synthèses utilisées dans les films, ou encore les
|
||||||
jeux vidéos. Plus les textures sont précises (et donc par conséquent lourde en
|
jeux vidéos. Plus les textures sont précises (et donc par conséquent lourde en
|
||||||
terme d'espace disque), plus la qualité du rendu final sera réaliste.
|
terme d'espace disque), plus la qualité du rendu final sera réaliste.
|
||||||
|
\newline
|
||||||
|
|
||||||
Il se pose par conséquent une question de limitations, en effet, ces textures de
|
Il se pose par conséquent une question de limitations, en effet, ces textures de
|
||||||
très hautes qualités prennent certes de la place, mais également du temps à
|
très hautes qualités prennent certes de la place, mais également du temps à
|
||||||
@ -28,6 +29,7 @@ avoir plusieurs textures pour un type d'objet donné. Prenons l'exemple des jeux
|
|||||||
vidéos, il serait assez facheux de n'avoir que 3 ou 4 textures pour les arbres,
|
vidéos, il serait assez facheux de n'avoir que 3 ou 4 textures pour les arbres,
|
||||||
donnant ainsi une diversité assez pauvre et une répétition qui peut vite lasser
|
donnant ainsi une diversité assez pauvre et une répétition qui peut vite lasser
|
||||||
l'utilisateur, qu'importe la qualité de rendu de ces dites textures.
|
l'utilisateur, qu'importe la qualité de rendu de ces dites textures.
|
||||||
|
\newline
|
||||||
|
|
||||||
Avoir suffisamment de textures debonne qualité prendrait beaucoup trop de temps
|
Avoir suffisamment de textures debonne qualité prendrait beaucoup trop de temps
|
||||||
et de place pour pouvoir être créé. Il faudrait donc palier à cela en utilisant
|
et de place pour pouvoir être créé. Il faudrait donc palier à cela en utilisant
|
||||||
@ -39,18 +41,21 @@ fait, nous sommes en mesure de créer des fonctions mathématiques basée sur
|
|||||||
l'aléa capables de s'adapter, moyennant certains paramètres, à plusieurs
|
l'aléa capables de s'adapter, moyennant certains paramètres, à plusieurs
|
||||||
textures présentes dans la nature. Pour rendre le tout encore plus attractif,
|
textures présentes dans la nature. Pour rendre le tout encore plus attractif,
|
||||||
ceci se fait de manière procédurale.
|
ceci se fait de manière procédurale.
|
||||||
|
\newline
|
||||||
|
|
||||||
Avec cette méthode, nous sommes donc capables de palier non seulement à la
|
Avec cette méthode, nous sommes donc capables de palier non seulement à la
|
||||||
qualité mais aussi à la diversité des textures concevables, le tout de manière
|
qualité mais aussi à la diversité des textures concevables, le tout de manière
|
||||||
presque instantannée et sans prendre d'espace disque. Ce type de texture est
|
presque instantannée et sans prendre d'espace disque. Ce type de texture est
|
||||||
plus communément appelé \guillemets{textures procédurales} et permet la synthèse
|
plus communément appelé \guillemets{textures procédurales} et permet la synthèse
|
||||||
de textures comme le bois, le marbre, le granite, le métal…
|
de textures comme le bois, le marbre, le granite, le métal…
|
||||||
|
\newline
|
||||||
|
|
||||||
Ces textures procédurales sont cependant générées avec des procédés différents
|
Ces textures procédurales sont cependant générées avec des procédés différents
|
||||||
selon le type de texture que l'on souhaite obtenir, ces procédés sont appelés
|
selon le type de texture que l'on souhaite obtenir, ces procédés sont appelés
|
||||||
les générateur de bruits, puisque basés sur l'aléa. On notera cependant que
|
les générateur de bruits, puisque basés sur l'aléa. On notera cependant que
|
||||||
certaines méthodes telle que le texturage cellulaire ne se base pas sur un
|
certaines méthodes telle que le texturage cellulaire ne se base pas sur un
|
||||||
générateur de bruit.
|
générateur de bruit.
|
||||||
|
\newline
|
||||||
|
|
||||||
Dans ce rapport, nous allons donc voir différents types de générateurs de
|
Dans ce rapport, nous allons donc voir différents types de générateurs de
|
||||||
bruits, on se limitera cependant aux générateurs de bruits gradients, par
|
bruits, on se limitera cependant aux générateurs de bruits gradients, par
|
||||||
|
BIN
rapport.pdf
BIN
rapport.pdf
Binary file not shown.
24
rapport.tex
24
rapport.tex
@ -4,6 +4,7 @@
|
|||||||
\usepackage{xltxtra}
|
\usepackage{xltxtra}
|
||||||
\usepackage{fontspec}
|
\usepackage{fontspec}
|
||||||
\usepackage[french]{babel}
|
\usepackage[french]{babel}
|
||||||
|
\usepackage{listings}
|
||||||
|
|
||||||
%\setromanfont[Mapping=tex-text]{Linux Libertine O}
|
%\setromanfont[Mapping=tex-text]{Linux Libertine O}
|
||||||
\setmainfont[Mapping=tex-text]{Cantarell}
|
\setmainfont[Mapping=tex-text]{Cantarell}
|
||||||
@ -11,6 +12,27 @@
|
|||||||
\newenvironment{citationFR}{\begin{quotation}\og}{\fg\end{quotation}}
|
\newenvironment{citationFR}{\begin{quotation}\og}{\fg\end{quotation}}
|
||||||
\newcommand{\guillemets}[1]{\og #1\fg{}} % [1]: nbr arg
|
\newcommand{\guillemets}[1]{\og #1\fg{}} % [1]: nbr arg
|
||||||
|
|
||||||
|
\lstset{
|
||||||
|
language=C, % Code langugage
|
||||||
|
basicstyle=\ttfamily, % Code font, Examples: \footnotesize, \ttfamily
|
||||||
|
% keywordstyle=\color{OliveGreen}, % Keywords font ('*' = uppercase)
|
||||||
|
% commentstyle=\color{gray}, % Comments font
|
||||||
|
% numbers=left, % Line nums position
|
||||||
|
% numberstyle=\tiny, % Line-numbers fonts
|
||||||
|
% stepnumber=1, % Step between two line-numbers
|
||||||
|
% numbersep=5pt, % How far are line-numbers from code
|
||||||
|
% backgroundcolor=\color{lightlightgray}, % Choose background color
|
||||||
|
% frame=none, % A frame around the code
|
||||||
|
% tabsize=2, % Default tab size
|
||||||
|
captionpos=b, % Caption-position = bottom
|
||||||
|
% breaklines=true, % Automatic line breaking?
|
||||||
|
% breakatwhitespace=false, % Automatic breaks only at whitespace?
|
||||||
|
% showspaces=false, % Dont make spaces visible
|
||||||
|
% showtabs=false, % Dont make tabls visible
|
||||||
|
% columns=flexible, % Column format
|
||||||
|
% morekeywords={__global__, __device__}, % CUDA specific keywords
|
||||||
|
}
|
||||||
|
|
||||||
\title{Rapport ERDI}
|
\title{Rapport ERDI}
|
||||||
\author{Cyril Colin \\ Voisin Dylan \\ \\
|
\author{Cyril Colin \\ Voisin Dylan \\ \\
|
||||||
Master 1 Informatique\\
|
Master 1 Informatique\\
|
||||||
@ -23,7 +45,7 @@ Université d'Aix-Marseille}
|
|||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
|
\newpage
|
||||||
\section*{Introduction}
|
\section*{Introduction}
|
||||||
\input{Parties/intro.tex}
|
\input{Parties/intro.tex}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user