chapitre 1-1 fini

This commit is contained in:
DylanVsn 2019-12-03 17:06:45 +01:00
parent 46f1e81574
commit 2aaae09fb9
6 changed files with 137 additions and 10 deletions

1
Parties/biblio.bib Normal file
View File

@ -0,0 +1 @@
http://www.cochoy.fr/pdfs/perlin-noise/perlin_noise.pdf

View File

@ -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}

View File

@ -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.

View File

@ -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

Binary file not shown.

View File

@ -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}