10e cours CFX
Crowd
La note
-> Foule au cinéma de manière générale
Exemple avec star wars dans la menace fantome ils ont utilisé des cotons tiges avec une soufflerie en dessous pour les animer un peu
Le principe de boids :
Craig Reynolds (Craig Reynolds — Wikipédia) a extrait un principe mathématique qui régit le comportement des foules en observant le vol des oiseaux
Ce principe contient 3 règles
- séparation : chaque entité à sa propre zone
- cohésion : rester proche du groupe
- alignement : aligner le comportement de chaque entité sur le groupe
Expérimenter ludiquement avec ce principe : Boids Simulation
Et c'est exactement comme cela que Houdini gère les simulations de foule
VFX - Breakdown "Why V&B" Crowds - YouTube
amazing starlings murmuration (full HD) -www.keepturningleft.co.uk - YouTube
Premier film qui a utilisé le principe de boids :
Jurassic Park (1993) -> breakdown : ILM Before and After Jurassic Park - YouTube
Et le seigneur des anneaux l'a appliqué à des foules immenses : Visual Effects Demonstration The Mumakil Battle The Lord of the Rings: The Return of the King - YouTube
Ragdoll
C'est un état d'une entité dans une crowd simulée et non animée
Souvent on switch entre anim et sim ragdoll dans les crowds
Dans Houdini : Crowd Houdini
Crowd Houdini
La note
Le setup de crowd de base complet est décrit ici
Agent
C'est la base du système de crowd de Houdini
Un agent est une entité qui peut contenir un personnage, une geo etc mais qui est traitée comme un seul point, comme une particule, et spécialement setupé pour le système de crowd.
On va donc créer un agent et importer un fbx

Ensuite on ajoute une animation avec un agent clip : on vient renseigner le fbx animé et on nomme le clip
On peut cocher le clip preview et mettre l'anim qu'on vient de créer pour preview

Dans l'onglet locomotion :
On vient ici définir quel est le joint de locomotion : les hanches généralement (hips)
Après avoir défini les hanches dans l'onglet locomotion, Cocher convert to in-place animation pour que l'anim soit sur place
Ensuite quand on coche dans clip preview "apply clip locomotion" l'animation ne boucle plus et il avance constamment
On peut venir ajouter d'autres anims dans ce node en ajoutant des clips
Et on définit le set current clip sur l'anim qu'on veut avoir

Agent clip properties
node pour gérer le comportement d'un (ou plusieurs) clip d'animation
Par exemple enlever une boucle sur une anim qui boucle : décocher enable looping
Attention il faut utiliser la sortie de droite et pas celle de gauche !
Agent Layer
(Attention il change en fonction des versions)
Node qui permet d'ajouter des props / objets etc aux agents
Le process :

Merge packed : on nomme les primitives packées
Dans le Agent Layer :
- Use existing shapes : cocher Source Layer "defaut"
- Agent un shape bindings avec le nom de la primitive packée
- On peut ajouter un layer par objet :
Attention le binding vient automatiquement diviser la taille de l'objet par 100, le transform après le merge packed vient le prévoir en multipliant par 100
Crowd Source
Node qui vient dupliquer un agent pour en faire une crowd
On a 2 modes de layout : random et formation (alignés / rangés)
L'onglet randomize :
- Randomize primitive : randomize des agents
- Randomize current layer : pour randomize les layers créés
- Randomize clip time : randomize le décalage des animations
- Randomize scale
Le crowd source à une deuxième entrée qui permet d'utiliser un terrain custom
Crowd motion path
Le node crowd motion path vient initialiser les motion paths
Puis on a toute une série de nodes pour gérer les motion paths et leurs influences :
Crowd motion path follow :
On branche les 2 sorties du crowd motion path dans les 2 premières entrées puis une curve custom dans la 3e entrée
Crowd motion path avoid :
Eviter un objet sur le chemin
-> 3e entrée : geo à avoid
Dans ce node il y a un paramètre pour gérer les "collisions" entre agent (-> neighbors)
Crowd motion path trigger :
Permet de trigger un attribute en fonction d'une collision à un objet
- En combinant avec le crowd motion path transition on va pouvoir par exemple trigger une anim différente lors de la collision
- type : object distance
- Cocher time dependant si la geo de collision est animée
- Dans le node crowd motion path transition
- Mettre le trigger group et le clipname de la nouvelle animation

Crowd motion path evaluate : viens "bake" les actions du motion path
Agent terrain adaptation
Node permettant de faire suivre les agents au terrain (adapter les pieds automatiquement etc)
On peut régler l'étirement des genoux et plein d'autres choses pour adapter le mouvement au terrain
Préparer le node terrain adaptation
Ce node doit être couplé à un node agent prep (préparation de l'agent, à mettre donc avant toutes les simu de crowd etc, on travaille sur la préparation de l'agent) :
On va définir dans ce nodes les Lower Limbs et le torso pour que le node d'adaptation au terrain puisse savoir quel joint est le pied, le genou etc
(On peut déplacer dans le viewport l'emplacement des leg, ankle etc pour ajuster la déformation si besoin : par exemple le talon des rigs mixamo est trop haut ce qui cause des problèmes à l'adaptation au terrain)

Ensuite manip pour la plant des pieds avec le chop network :
additionnal channels -> Create foot plant chop network
Chop Network :
En gros il va "bake" l'anim d'une simu : convertir la position en informations de courbes d'anim etc pour pouvoir retoucher à la main les anims
Enfin, si besoin de "corriger" le placement des joints sélectionnés on peut le faire à la main simplement en les selectionnant et en les bougeant
Export Crowd
On va venir exporter en alembic les différentes couches grace à l'attribut name généré automatiquement
Par exemple : unpack -> split -> rop alembic