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
|
||||
% 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
|
||||
% (ou nuanceurs de pixels en français). L'article ici étudié se nomme «Procedural
|
||||
% Phasor Noise» et porte sur une nouvelle conception de shader, grandement inspiré
|
||||
% d'une autre étude intitulée «Gabor Noise».
|
||||
% (ou nuanceurs de pixels en français). L'article ici étudié se nomme
|
||||
% «Procedural Phasor Noise» et porte sur une nouvelle conception de shader,
|
||||
% 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
|
||||
% en détails, avant d'introduire la méthode Gabor Noise pour enfin déboucher sur
|
||||
% le sujet d'étude en lui-même, Procedural Phasor Noise et ainsi voir les
|
||||
% améliorations apportées par ce dernier par rapport aux autres méthodes de
|
||||
% shading.
|
||||
% Nous allons donc étudier au travers de ce rapport, ce que sont les shaders
|
||||
% plus en détails, avant d'introduire la méthode Gabor Noise pour enfin
|
||||
% déboucher sur le sujet d'étude en lui-même, Procedural Phasor Noise et ainsi
|
||||
% voir les améliorations apportées par ce dernier par rapport aux autres
|
||||
% méthodes de shading.
|
||||
|
||||
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
|
||||
@ -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
|
||||
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.
|
||||
\newline
|
||||
|
||||
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 à
|
||||
@ -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,
|
||||
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.
|
||||
\newline
|
||||
|
||||
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
|
||||
@ -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
|
||||
textures présentes dans la nature. Pour rendre le tout encore plus attractif,
|
||||
ceci se fait de manière procédurale.
|
||||
\newline
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
certaines méthodes telle que le texturage cellulaire ne se base pas sur un
|
||||
générateur de bruit.
|
||||
\newline
|
||||
|
||||
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
|
||||
|
BIN
rapport.pdf
BIN
rapport.pdf
Binary file not shown.
24
rapport.tex
24
rapport.tex
@ -4,6 +4,7 @@
|
||||
\usepackage{xltxtra}
|
||||
\usepackage{fontspec}
|
||||
\usepackage[french]{babel}
|
||||
\usepackage{listings}
|
||||
|
||||
%\setromanfont[Mapping=tex-text]{Linux Libertine O}
|
||||
\setmainfont[Mapping=tex-text]{Cantarell}
|
||||
@ -11,6 +12,27 @@
|
||||
\newenvironment{citationFR}{\begin{quotation}\og}{\fg\end{quotation}}
|
||||
\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}
|
||||
\author{Cyril Colin \\ Voisin Dylan \\ \\
|
||||
Master 1 Informatique\\
|
||||
@ -23,7 +45,7 @@ Université d'Aix-Marseille}
|
||||
|
||||
\newpage
|
||||
\tableofcontents
|
||||
|
||||
\newpage
|
||||
\section*{Introduction}
|
||||
\input{Parties/intro.tex}
|
||||
|
||||
|
Reference in New Issue
Block a user