%-*-LaTeX-*-

\part{Introduction}

Avant d'expliquer le sujet de notre projet, nous nous proposons
d\'efinir ce qu'est une m\'etaforme et de voir \'egalement quelques
exemples d'application de ces objets.

\section{M\'etaformes : d\'efinition}
\subsection{Des \textit{metaballs} \ldots}
Nous avons parl\'e des formes molles : \textit{metaballs}, m\'etaformes.
\\Expliquons premi\`erement le cas de base, la \textit{metaball} \index{Metaball}:
\\Une \textit{metaball} est compos\'ee de plusieurs atomes (points) qui
\'emettent ou absorbent de l'\'energie.
Un point P de l'espace re\c{c}oit de l'\'energie de tous les \'emetteurs \index{\'Emetteur}, 
on fait la somme alg\'ebrique de toutes ces \'energies (certaines peuvent
en effet \^etre n\'egatives lorsque la puissance \index{Puissance}\footnote{Power.}
de l'\'emetteur est n\'egative).
\\Le but est de trouver la surface\footnote
{Ces surfaces sont souvent appel\'ees iso-surfaces ou surfaces implicites : comme
le nom l'indique, la surface de l'objet n'est pas mod\'elis\'ee explicitement, on utilise
des \'equations.}
qui rassemble tous les points o\`u l'\'energie
est \'egale \`a une certaine valeur seuil \index{Seuil} \footnote{Treshold.}  que l'on fixe.
\\On obtient alors une ``peau'' autour des \'emetteurs comme le montre
la figure \ref{metaform1} page \pageref{metaform1}.

\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.2]{graphics/metaform1.ps} 
\end{center}
\caption{Exemple de m\'etaforme\index{M\'etaforme} \label{metaform1}}
\end{figure}

\subsection{\ldots aux m\'etaformes}\label{emetteurs}
Les m\'etaformes\index{M\'etaforme} constituent une extension des \textit{metaballs},
puisqu'elles
sont constitu\'ees de plusieurs types d'\'emetteurs en plus du point.
Nous avons choisi de traiter 5 types d'\'emetteurs :
\begin{itemize}
\item{Le point : voir la figure \ref{point} page \pageref{point}}
\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.2]{graphics/ePoint.eps}
\caption{L'\'emetteur point $\Rightarrow$ \textit{Metaball}\label{point}}
\end{center}
\end{figure}

\item{Le segment : voir la figure \ref{segment} page \pageref{segment}}
\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.2]{graphics/eSegment.eps}
\caption{L'\'emetteur segment \label{segment}}
\end{center}
\end{figure}
 
\item{Le triangle (facette) : voir la figure \ref{facette} page \pageref{facette}}
\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.2]{graphics/eFacett.eps}
\caption{L'\'emetteur triangle \label{facette}}
\end{center}
\end{figure}
 
\item{La ligne bris\'ee : voir la figure \ref{ligne-brisee} page \pageref{ligne-brisee}}
\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.2]{graphics/eLines.eps}
\caption{L'\'emetteur ligne brisee \label{ligne-brisee}}
\end{center}
\end{figure}

\item{Le r\'eseau de triangles : voir la figure \ref{mesh} page \pageref{mesh}}
\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.2]{graphics/eRfacetts.eps}
\caption{L'\'emetteur r\'eseau de facettes \label{mesh}}
\end{center}
\end{figure}

\end{itemize}

La distance d'un point P de l'espace \`a un \'emetteur quelque soit son type,
est la distance la plus courte de P \`a n'importe quel point de l'\'emetteur.
\\Une m\'etaforme\index{M\'etaforme} poss\`ede un \index{Squelette} squelette
qui peut donc comporter 5 types d'\'emetteurs diff\'erents,
pour le calcul de la surface tout se passe comme nous l'avons vu pr\'ec\'edemment
pour une \textit{metaball}.

\subsection{Un exemple}

Les m\'etaformes permettent de cr\'eer plus
facilement (qu'avec une simple \textit{metaball}) des objets complexes.
\\Nous nous proposons, avec la figure \ref{squelette} page \pageref{squelette},
de voir un exemple d'utilisation d'une m\'etaforme.
\\Nous d\'esirons repr\'esenter un personnage : nous allons utiliser l'\'emetteur
point pour mod\'eliser la t\^ete, comme le montre la figure, l'\'emetteur triangle
pour le tronc, et l'\'emetteur ligne bris\'ee pour les bras et les jambes. Cet ensemble
d'\'emetteur constitue une m\'etaforme. La figure
\ref{bonhomme} page \pageref{bonhomme} montre le r\'esultat :
on peut remarquer la souplesse des formes du bonhomme. On voit ainsi que
l'on arrive rapidement et facilement \`a mod\'eliser divers objets aux contours
souples et arrondis avec un bon r\'esultat .


\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.7,angle=0]{graphics/squelette.eps}
\end{center}
\caption{Squelette compos\'e de diff\'erents types d'\'emtteurs\label{squelette}}
\end{figure}

\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.7,angle=0]{graphics/man-flat.ps}
\end{center}
\caption{Le bonhomme en \textit{flat}\label{bonhomme}}
\end{figure}


\subsection{Au niveau d'un \'emetteur}\label{niveauemetteur}
Une m\'etaforme\index{M\'etaforme} poss\`ede un seuil\index{Seuil} d'\'energie
qui lui est propre et qui est commun
\`a tous les \'emetteurs qui la constituent.
\\En revanche, chaque \'emetteur poss\`ede sa propre puissance\footnote{Power.} qui
repr\'esente l'intensit\'e de l'\'emission \'energ\'etique de l'\'emetteur. Si la puissance
est n\'egative, l'\'emetteur absorbe de l'\'energie (\'emise par d'autres \'emetteurs) au
lieu d'en \'emettre.
\\Un \'emetteur poss\`ede aussi sa propre fonction de distribution de
l'\'energie\footnote{ou fonction de densit\'e}.
Cette fonction calcule en chaque point de l'espace une valeur qui est fonction
de la distance entre le point et l'\'emetteur. Cette valeur repr\'esente l'\'energie
que le point re\c{c}oit de l'\'emetteur. Plus le point est loin de l'\'emetteur, moins
il re\c{c}oit d'\'energie.
A chaque fonction est associ\'e un rayon qui repr\'esente la limite d'influence
de l'\'emetteur : l'\'energie re\c{c}ue en
un point P situ\'e \`a une distance d \'egale au rayon (ou sup\'erieure)
de l'\'emetteur est nulle. La section \ref{fonction-energie} page \pageref
{fonction-energie} parle plus en d\'etail de ces fonctions.



\section{Les m\'etaformes : leurs applications}
\label{applications}

Elles sont particuli\`erement adapt\'ees pour mod\'eliser des objets au rendu\index{Rendu} lisse qui se
d\'eforment en se d\'epla\c{c}ant et qui peuvent subir des modifications topologiques.
De tels objets changent de forme \`a cause de ph\'enom\`enes externes, se d\'eforment pendant
une collision avec d'autres objets ou se fondent dans leur environnement.
\\La d\'eformation d'un objet se fait simplement en changeant la relation spaciale
entre primitives. Une surface ferm\'ee et
compacte est toujours garantie bien qu'elle puisse \^etre constitu\'ee de plusieurs parties d\'econnect\'ees.
\\Les surfaces implicites peuvent \^etre utilis\'ees pour diverses applications.
\\Blinn qui a le premier introduit l'utilisation des surfaces implicites
pour le graphisme et l'animation sur ordinateur, utilise les \textit{blobby}
mol\'ecules (voir \cite{Blobby}) pour visualiser
des champs \'energ\'etiques d'\'electrons.
Tatsumi pr\'esente l'utilisation des m\'etaballs pour la mod\'elisation
de certaines cellules dans le foie de morue.
Fujita repr\'esente des \'eclaboussements d'eau gr\^ace aux m\'etaballs.
Max et Wyvill ont rendu\index{Rendu}
du corail en utilisant des objets mous (\index{Soft Object}\textit{Soft Objects},
voir \cite{SoftObj}).
Payne et Toga ont mod\'elis\'e un cerveau de rat (voir \cite{Manip}).
Les objets mous ont aussi \'et\'e utilis\'es pour visualiser des \'eclairs (voir \cite{Lightning}).
Au Japon, les m\'etaformes\index{M\'etaforme} sont beaucoup utilis\'ees pour la mod\'elisation et l'animation de formes
complexes comme des parties de l'anatomie humaine (voir \cite{Magic}).\\
Les m\'etaformes\index{M\'etaforme} servent dans le domaine de la simulation sur ordinateur.
On les utilise en physique pour mod\'eliser des d\'etections de collisions, des d\'eformations
ou des fusions d'objets.\\
Dans le domaine de l'animation, les avantages des m\'etaformes sont exploit\'es pour
les d\'eformations d'objets, les \textit{morphings} \dots. Des articles pr\'esentent des
exemples d'animations qui ont beaucoup de succ\`es,
en voici quelques uns :
des lettres descendant un escalier (voir \cite{Soft}), un train traversant une banque
(voir \cite{Train}), un guitariste \'emergeant de bulles de dentifrice (voir \cite{Guitarist}).


\section{Sujet de notre projet}
Maintenant que nous avons d\'efinit et d\'ecrit les m\'etaformes, que nous
avons mentionn\'e quelques une de leurs applications, nous pouvons expliquer
en quoi a consist\'e notre projet.
\\Notre travail a \'et\'e de r\'ealiser un logiciel de modelage et de visualisation
de m\'etaformes.
Pour r\'ealiser notre programme Xblob\index{Xblob}, nous avons
utilis\'e la librairie 3D 'Photon 4D'
\index{Photon 4D}cr\'e\'ee par Franck Diard.
Cette librairie a pour but de calculer des images
en \textit{raytracing}\index{Raytracing}\footnote{Lanc\'e de rayons.} sur de nombreux
types d'objets (cube, sph\`ere,...), cependant elle ne g\`ere pas les m\'etaformes\index{M\'etaforme}.
Nous avons d\^u, dans un premier temps, ajouter la possibilit\'e de
cr\'eer et de traiter des m\'etaformes\index{M\'etaforme} dans Photon 4D, de mani\`ere \`a ce que
ces derni\`eres soient g\'er\'ees comme n'importe quel autre objet dans la librairie.
\\Ensuite nous avons cr\'e\'e notre outil Xblob qui est compos\'e d'une interface qui
permet de mod\'eliser et de les visualiser dans diff\'erents modes de rendus\index{Rendu}
(voir la partie \ref{interf} page \pageref{interf} sur l'interface et son fonctionnement).
Notre logiciel permet aussi d'animer les m\'etaformes cr\'e\'ees.
\\Une autre fonctionnalit\'e importante est de pouvoir importer des objets 3D
provenant d'autres modeleurs\index{Modeleur} (diff\'erents formats), et de les visualiser sous
forme de m\'etaformes.
Ceci est \'egalement valable dans l'autre sens : nos m\'etaformes peuvent \^etre export\'ees
dans divers formats pour \^etre visualis\'ees sous forme de r\'eseau de facettes
(voir la section \ref{emetteurs} page \pageref{emetteurs}) dans d'autres
logiciels.
\\La technologie des m\'etaformes est r\'ecente et encore
en d\'eveloppement, les cr\'eateurs de logiciels de modelage
s'y int\'eressent et certains ont d\'ej\`a int\'egr\'e les
\textit{metaballs} dans leur modeleur\index{Modeleur}.
Nous avons donc pu explorer un domaine nouveau


\subsection{Les outils utilis\'es}

\begin{itemize}
\item{Logiciels
\\Notre application est programm\'ee en langage C++
(le compilateur utilis\'e est g++), ce qui nous a
permis de profiter des nombreuses possibilit\'es
(g\'en\'ericit\'e, polymorphisme, h\'eritage) d'un langage
\`a objet tout en ayant un code g\'en\'er\'e efficace et rapide.
\\Nous avons utilis\'e la librairie Photon4D comme nous l'avons expliqu\'e
pr\'ecedemment pour r\'ealiser notre projet.
\\Nous nous nous sommes servis de la librairie MOTIF pour la cr\'eation de l'interface. 
\\En plus des outils de programmation \'enonc\'es pr\'ecedemment,
nous avons utilis\'e un script zsh que nous avons \'ecrit
qui permet une gestion du travail \`a plusieurs sur les m\^emes fichiers, voir
la section \ref{mk} page \pageref{mk}}

\item{Plate-formes
\\Nous avons d\'evelopp\'e notre logiciel sous UNIX (Solaris, Linux),
mais nous avons aussi une version moins aboutie pour Windows NT/95
(utilisation de Visual C++).}
\end{itemize}

\subsubsection{Notre script zsh : mk} \label{mk}
Nous avons programm\'e, pour pouvoir travailler tous les quatre ensemble, un
utilitaire que nous avons appel\'e mk.
\newline Son fonctionnement est d\'ecrit dans la figure \ref{mkfig} page
\pageref{mkfig}.

\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.7]{graphics/mkfig.eps} 
\end{center}
\caption{Fonctionnement de mk\label{mkfig}}
\end{figure}

Le probl\`eme que gomme mk est les erreurs d\^ues \`a la recompilation de tous les fichiers
qui sont \'edit\'es.
\newline Par exemple imaginons qu'un utilisateur A travaille sur un fichier toto.cpp
et qu'un utilisateur B travaille sur le fichier titi.cpp.
Maintenant A veut recompiler pour voir ses modifications de toto.cpp prendre effet
mais le make va aussi lancer la compilation de titi.cpp puisque B est en train de
le modifier, et cette compilation va g\'en\'erer des erreurs car le fichier est en cours
d'\'edition.
\newline Ce genre de probl\`eme arrive constamment surtout lorsque on travaille \`a 4.
Le probl\`eme peut etre detourn\'e de plusieurs fa\c{c}ons mais toutes font perdre du temps.
mk r\'esoud ces probl\`emes de mani\`ere \'el\'egante.
\newline
Le principe de mk est bas\'e sur le fait que les sources qu'on \'edite sont toutes ensemble dans
un r\'epertoire, il n'y aura donc jamais de compilation dans ce r\'epertoire.
Quand un utilisateur veut faire une compilation il passe par l'intermediaire de mk.
mk fait une copie des fichiers que l'utilisateur a modifi\'e dans le repertoire de compilation,
apres avoir sauvegard\'e les fichiers qu'il y avait avant.
Les fichiers du repertoire de compilation
sont toujours sans erreur (de compilation) car d\`es qu'il s'en produit une, la pr\'ec\'edente version du
fichier (celle qui a \'et\'e sauvegard\'ee) sera restaur\'ee dans le fichier de compilation ainsi le prochain
utilisateur \`a essayer de compiler disposera d'un "espace" de compilation sain.
D'autre part mk n'autorise qu'une seule compilation \`a la fois en g\'erant un syst\`eme de verrous.

\subsection{Ce qui est fait et ce qu'il reste \`a faire}

Nous avons donc cr\'e\'e un modeleur de m\'etaformes.

\subsubsection{Ses fonctionnalit\'es actuelles}

\begin{itemize}
\item{Modeliser avec 5 types d'\'emetteurs possibles.
\newline
Comme l'\'emetteur r\'eseau de facettes est tr\`es general,
il nous permet de repr\'esenter n'importe quel objet.}
\item{Positionner et d\'eplacer des \'emetteurs dans l'espace.}
\item{Modifications des attributs des \'emetteurs, m\'etaformes, et des objets issus d'une s\'election multiple.
\newline
Cela concerne la position dans l'espace, la puissance, la fonction d'\'energie ainsi que  l'iso valeur (seuil) de
la m\'etaforme.
Le fait de pouvoir modifier la fonction de r\'epartition d'\'energie dans l'espace permet
de donner aux m\'etaformes, des formes tr\`es vari\'ees et particuli\`eres (gondolement de la surface etc).}
\item{Nous pouvons visualiser la sc\`ene avec diff\'erents rendus :
\begin{itemize}
\item{Points}
\item{Fil de fer}
\item{Faces cach\'ees}
\item{Gouraud}
\item{Phong}
\item{Raytracing}
\end{itemize}}

\item{L'utilisateur peut donner la pr\'ecision voulue pour le maillage.
On peut donc mod\'eliser avec une pr\'ecision
moyenne et avoir une grande pr\'ecision pour la visualisation finale.}

\item{Nous pouvons aussi sauvegarder/charger une sc\`ene gr\^ace \`a des scripts.
Xblob nous permet aussi d'importer des objets vari\'es provenant d'autres logiciels de synth\`ese d'image.
De plus, nous pouvons sauvegarder une sc\`ene au format de ces logiciels.}

\item{Xblob offre aussi la possibilit\'e de faire des animations.
En effet, il suffit de sp\'ecifier le nombre
d'images que l'on d\'esire avoir pour l'animation, et d'enregistrer la sc\`ene aux diff\'erents moments
que l'on souhaite.}

\item{Xblob permet aussi de mod\'eliser \`a plusieurs en m\^eme temps via le reseau.
Les personnes desirant travailler
en reseau se partagent la m\^eme scene. Elles peuvent mod\'eliser simultan\'ement. Les interactions d'une personne
sont per\c{c}ues par les autres. Cela permet de cr\'eer des sc\`enes complexes rapidement.}
\end{itemize}

\subsubsection{Evolutions \`a venir}
\begin{itemize}
\item{Possibilit\'e d'avoir une fonction 'undo' (annule la derni\`ere action)}
\item{Permettre \`a l'utilisateur de placer lui-m\^eme des lampes et des cam\'eras.}
\item{Sauvegarder une animation dans un fichier graphique.}
\item{Ameliorer l'ergonomie g\'en\'erale du logiciel.}
\item{Etendre les fonctions de modelage.}
\end{itemize}

\endinput







