\section{qPCV - ShadeVis Ambient Occlusion} \index{qPCV, ambient occlusion} \index{Portion de Ciel Visible} \index{eclairage@éclairage!simuler} \label{subsection:qPCV} \par Cet outil permet de calculer rapidement l'illumination des points d'un nuage ou des sommets d'un maillage par détermination de la "\textbf{P}ortion de \textbf{C}iel \textbf{V}isible" (P.C.V. - voir figure~\ref{fig:PCVExample}). \begin{figure}[!htb] \begin{center} \includegraphics[width=0.6\textwidth]{Partie3_Fonctions/PCVExample.jpg} \caption{\label{fig:PCVExample}Rendu classique avec normales (gauche) et rendu "PCV" (droite)} \end{center} \end{figure} Cet éclairage consiste à calculer pour chaque point la quantité de ciel qu'il voit, ou autrement dit la quantité d'énergie lumineuse qu'il recevrait si le nuage était éclairé uniformément. Ceci permet de colorier les points en fonction de leur profondeur relative et fait très bien ressortir le relief et la micro-géométrie. En pratique le calcul est effectué avec un algorithme équivalent à \emph{ShadeVis} (proposé initialement par Cignoni et al. du VCG). \\ \par Les deux principaux paramètres de l'algorithme, modifiables via la boîte de dialogue associée à la fonction (figure \ref{fig:PCVParamWindow}), sont : \begin{itemize} \item le nombre de « rayons » lumineux. Pour chaque direction d'éclairement (rayon), l'algorithme projette, via la carte graphique, les entités selon cette direction et calcule la visibilité des points (ou des sommets d'un maillage). Cette information est accumulée pour chaque direction et permet de calculer l'éclairement global. Plus le nombre de rayons est grand, et plus la dynamique est importante et les différences d'éclairement entre deux points fines. Par contre, le temps de calcul est proportionnel au nombre de rayon. \item la résolution du buffer de rendu. La projection des entités selon une direction se fait dans un buffer vidéo dont la résolution va jouer sur le pouvoir de séparation entre points. Plus la résolution est forte, et mieux les points seront dissociés (d'où un meilleur calcul de leur éclairement propre et une meilleure finesse du résultat). Par contre, si la résolution est trop grande, outre un temps de calcul et une consommation mémoire plus importants (cela dépend des performances de la carte graphique), il faut aussi se méfier du fait que le nuage peut devenir "poreu" et laisser passer la lumière (voir remarque ci-dessous). Dans le cas d'un maillage ceci ne pose pas problème. Les cartes graphiques actuelles assurent des performances très intéressantes dans l'absolu, il ne faut donc pas hésiter à utiliser des valeurs importantes pour ces paramètres (telles que les valeurs par défaut).\\ \end{itemize} \begin{figure}[!htb] \begin{center} \includegraphics[width=0.3\textwidth]{Partie3_Fonctions/PCVParamWindow} \caption{\label{fig:PCVParamWindow}Interface de paramétrage de PCV} \end{center} \end{figure} \par Remarques : \begin{itemize} \item L'algorithme crée un nouveau type de champ scalaire (« PCV ») et la rampe de couleur « Gray » (niveaux de gris) est automatiquement activée. \item \textcolor[rgb]{1.0,0.0,0.0}{La lumière simulée par l'algorithme PCV est considérée comme provenant de l'hémisphère des Z positifs. Z correspondant à la direction verticale, le nuage de points doit donc être orienté en conséquence avant tout calcul.}. Si la checkbox "360° mode" est cochée, la lumière vient du globe complet et la direction ne joue plus. \item Puisque l'illumination calculée par cet algorithme est un champ scalaire, il est possible de jouer avec les potentiomètres de saturation pour régler le contraste. Dans le cas d'un maillage, on peut aussi utiliser les fonctions de moyenne et de rehaussement du contraste (voir sections~\ref{subsection:smoothMeshSF} et \ref{subsection:enhanceMeshSF}). Une fois les paramètres correctement réglés, on peut transformer le champ scalaire en \emph{couleurs} avec la fonction « Scalar Fields > Convert to RGB » (section~\ref{subsection:scalarFieldConvertToRGB}). \item L'éclairage provenant du ciel est représenté de manière discrète par un nombre limité de « rayons » lumineux, qui sont échantillonnés de manière uniforme sur l'hémisphère (ou la sphère complète si le mode 360° est activé). Il n'y a pas pour autant de lancer de rayons dans \emph{ShadeVis} (on devrait plutôt parler de direction d'observation - Cf. l'article de Cignoni et al. pour plus d'informations). \item Dans le cas des maillages, il est possible d'accélérer l'algorithme si le maillage est fermé (option «~closed mesh~», activée par défaut). \item Dans le cas des nuages de points, il faut faire attention à ce que la résolution ne soit pas trop grande, sinon des «~trous~» peuvent apparaître entre les points lors du rendu interne : cceci est simplement dû au fait que la densité d'un nuage est limitée, et que pour un niveau de zoom suffisant, on observera toujours des zones sans information entre les points. \end{itemize}