qPCV.tex 4.8 KB

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