Releases: grandch/3dEngine
rendu-IG3-anim
L'objectif du TP est de réaliser une animation (simpliste) à l'aide d'une approche skinning.
Liens utiles :
[globjects](https://github.com/cginternals/globjects)
[glbinding](https://github.com/cginternals/glbinding)
[Sujet d'un TP semblable (english) mais avec plus de détails](https://www.cs.utexas.edu/~theshark/courses/cs354/assignments/assignment_5.shtml)
Skinning: Real-Time Shape Deformation, Part I: Direct methods, http://skinning.org/
Vous devez au moins animer un cylindre à l'aide de deux os.
Comme vu en cours (j'espère), un os est simplement une transformation.
Un squelette est une hiérarchie d'os.
Pour animer un mailllage, vous aurez besoin d'associer un poids à chaque vertex pour chaque os.
Dans le cas d'un cylindre, vous pouvez définir ce poids avec une simple fonction de "distance" le long du cylindre, de tel sort que chaque extrémité soit influencer par un seul os, et qu'au centre, un mélange doux des deux os interviennent.
Travail à faire (en partant du code fourni, à adapter suivant ce que vous avez) :
définir une classe Bone contenant une transformation
ajouter les données de poids au Vertex
calculer les poids pour chaque Vertex
définir 2 Bones succéssif dont les articlulations se trouvent respectivement à la base et au milieu du cylindre
animer l'articulation du milieu (vous pouvez ajouter des primitives visuelles pour afficher avec deux segments les deux bones)
ajouter au maillage une donnée "pose de référence"
animer les points du maillage en CPU (et mettre à jour les données sur le GPU)
effectuer le même calcul sur GPU (en envoyant les poids et les matrices de transformation au shader).
Voici des exemples de résultat attendus (avec en rouge l'influence du bone 1, en vert celle du bone 2, pour deux frame différentes, pour deux calcul de poids différent).
rendu-IG3-rendu
Commencez par finir la partir matériau multifacette du M1 si non fini.
Ensuite quelque chose qui vous plait parmi
Simulation atmosphérique ***
Lens flare (simulation de lentille c.f. [ici](https://resources.mpi-inf.mpg.de/lensflareRendering/) ) ***
Shadow map *
Cubemaps ou envmaps *
Percentage closer filtering shadow maps **
Shadow volume **
Order indepedent transparency [[presentation](http://on-demand.gputechconf.com/gtc/2014/presentations/S4385-order-independent-transparency-opengl.pdf)][[presentation](http://developer.amd.com/wordpress/media/2013/06/2041_final.pdf)][[papier](https://moodle.univ-tlse3.fr/pluginfile.php/119491/course/section/15761/j.1467-8659.2010.01725.x.pdf)] ***
Antialiasing ([FXAwhitePaper](http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf) ou [course notes](http://iryoku.com/aacourse/downloads/09-FXAA-3.11-in-15-Slides.pdf) ou autre technique AA voir le cours [siggraph](http://iryoku.com/aacourse/) ) ***
Rendu HDR (tonemapping + bloom, voir LearnOpenGL, mais j'attends mieux !) [voir [Moving Frostbite to PBR](https://www.ea.com/frostbite/news/moving-frostbite-to-pb)] **
SSAO [Voir ici](http://developer.amd.com/wordpress/media/2012/10/Chapter8-Mittring-Finding_NextGen_CryEngine2.pdf) et [Ici](http://perso.telecom-paristech.fr/~boubek/papers/SAO/) **
Les "*" est une indication du niveau de difficulté a priori, plus il y a de *, plus c'est difficile.
rendu-TP-IG2
A réaliser pour le TP :
Choix d'une bibliothèque de manipulation et d'affichage de maillages.
Selection du voisinage d'un point par le nombre d'anneaux topologiques.
Calcul et affichage (par variation de couleur) du Laplacien par diffusion.
Calcul et affichage du Laplacien par résolution d'un système linéaire.
Lissage Laplacien.
Selection d'un voisinage par une zone.
Déformation du maillage par translation pondérée par le Laplacien calculé entre 0 (bord) et 1 (poignée) sur le maillage.
Modification des valeurs du Laplacien par une fonction de transfert pour contrôler le profil de la déformation.




