PDA

Voir la version complète : Hair : rendu en reseau ralenti (net render et renderfarm) comment optimiser



yannminh
20/02/2006, 11h00
Bonjour,

j'ai un gros problème, et j'ai le pressentiment que la solution est simple...

en effet, lorsque je lance un rendu en réseau sur la renderfarm de Dann, d'une animation de 800 images comportant plusieurs éléments hair (herbes, végétation) le temps de rendu est explosé du fait que les rendus sont répartis sur plusieurs machines, de ce fait à chaque fois que render net distribue des tronçons d'animation à calculer sur une machine disponible, "la préparation" prend un temps interminable... et je bloque la renderfarm (plus de 12h pour une animation qui, sans hair, ne prend que* 2h) et je sens que je vais me faire jeter par Dann...

Y aurait t'il un truc qui permet de supprimer ce temps de "préparation" lorsque les cheveux sont activés... autre que la solution ultra laborieuse de rendre cette animation en pleins de petits blocs de 200 images... ? ou éventuellement de désactiver la dynamique des cheveux ?

est-ce que d'enregistrer leur cache, ne serait pas une piste... ?

Yann, renderfarmer très lent...

yannminh
20/02/2006, 13h53
C'est bon, je pense que j'ai trouvé...

a part désactiver les dynamiques, je pense qu'il faut tout bêtement enregistrer le cache avant de lancer le rendu en réseau... je teste ça...

Yann, cacheur...

yannminh
20/02/2006, 15h57
Voila, j'ai trouvé la soluce tout seul comme un grand...

vous me direz, c'était fastoche, fallait lire le manuel attentivement...

1) le problème :
lorsqu'on fait un rendu sur une seule machine, le problème n'en est pas un, car comme le rendu avance images par images dans un ordre chronologique, toutes les dynamiques des cheveux peuvent être activées de façon relativement anarchiques, ça ne ralentira pas beaucoup le calcul de position des cheveux, qui s'incrémente à chaque image...

Par contre, lorsqu'on fait un calcul en réseau, sur une renderfarm, le rendu est divisé en plusieurs séquences qui sont réparties sur plusieurs machines, ainsi certaines machines vont commencer leurs séquences à partir d'un "moment" aléatoire, par exemple à partir de l'image 500, 600, 654 etc...
du coup, la "préparation" du calcul va être très longue, car C4D va se mettre sur chaque machine à calculer les x000 étapes antérieures de l'animation des dynamiques de cheveux pour chaque objet cheveux... (ça plombe total l'intérêt de la renderfarm, car plus il y aura de machines, et plus cette "préparation" va être longue ...)

Pour remédier à ce problème la solution est relativement simple, il faut précalculer les animations de cheveux via le menu cache des attributs de l'objet cheveux.

1) désactiver les dynamiques de tous les objets Cheveux dont les mouvements ne sont pas utiles. (important plutôt dans un paysage : herbes de lointain, palmes ou lianes en lointain)

2) activer les dynamiques des objets cheveux vraiment nécessaires, mais limiter dans le temps leur animation dynamique :
---- Après avoir décoché la fonction "temps auto" il faut définir dans le menu "dynamiques" des attributs de l'objet "cheveux" la fourchette d'images dans laquelle l'animation des dynamiques est utile (visible) (ceci afin de réduire la taille du cache à calculer qui peut devenir énorme)*

3) dans le menu Cache des attributs de l'objet cheveux dont on vient d'ajuster la durée d'animation, lancer le calcul du cache, qui ne tiendra compte que de la fourchette indiquée dans le menu dynamique...
éventuellement sauver le cache par sécu sur le disque.

Voila, c'est tout, Normalement cette procédure devrait pas mal optimiser le temps de rendu sur les renderfarms, pour un projet Hair...

et en tous cas, ça permet de rendre radicalement plus fluide la prévisualisation de l'animation pendant le travail, car on peut se ballader dans la time line pratiquement en temps réel, sans que C4D ne bloque à chaque changement d'image pour calculer les dynamiques...

je vérifie et je confirme...

Yann, Coiffeur de renderfarm qui se parle tout seul sur le forum...

Sir Gong
20/02/2006, 16h00
Yann, Coiffeur de renderfarm qui se parle tout seul sur le forum...
Oui mais on t'écoute.

yannminh
20/02/2006, 16h09
Ahhh merci...

je me sens moins seul à couper les cheveux en séquences...


Yann poor lonesome NooBoy...

RenderFred
15/03/2006, 12h29
Il est intéressant aussi de constater que, au contraire du rendu proprement dit, la phase de pré-calcul ne tire pas parti du multithreading (sur un dual Opteron dual core par exemple l'occupation CPU est à 25% seulement, ce qui montre qu'un seul core calcule pendant que les autres se tournent les puces :wink:). Ce qui fait que cette phase de pré-capillarisation reste assez "lente" même sur des machines très rapides.

yannminh
27/03/2007, 15h03
Je réactive ce vieux post car je suis de nouveau confronté au problème... je viens de passer 4heures à tester pleins de configs...


Hair explose les rendus en renderfarm, du fait de la "préparation" des calculs qui recommencent depuis l'image 0 jusqu'à l'image à laquelle le nouveau calcul commrence... outre le fait que ça explose de façon exponentielle les temps de rendu, ça bloque certaines machines au niveau mémoire..

avant, il me semblait avoir résolu ce problème avec la version 9.5 en désactivant les dynamics des cheveux... mais avec la 10 ça ne marche plus.. même en désactivant les dynamics, ou en enregistrant les animations de cheveux en mémoire cache, les temps de préparation sont interminables...
La seule solution que j'ai trouvé pour résoudre cette ENORME galère, c'est de convertir les cheveux en polygones.. mais du coup je perd les animations, ce qui est très génant...

Ogier s'est également confronté à ce problème.. et ne semble pas avoir reçu de réponse..
http://www.frenchcinema4d.fr/forum/index.php?topic=18020.0


Je vous re soumet donc ce problème, au cas ou quelqu'un aurait trouvé une solution depuis...

Yann, Préparateur lent...

Aurety
27/03/2007, 15h09
Déjà donné sur l'autre thread mais il semble que cela vienne de plus loin que le seul problême de Hair, si ca peut te donner des pistes

http://forums.cgsociety.org/showthread.php?f=47&t=478724

yannminh
27/03/2007, 15h14
Merci Aurety...

J'aurais du poser la question plus tôt, j'aurais perdu moins de temps...

Bon, ben y 'a plus qu'à attendre la version 11 de C4D... car il semble que ce soit un problème structurel à la version 10

Yann, NooPatient...

johnc
27/03/2007, 18h36
encore un truc à ce tirer les cheveux... blague a part c'est bon à savoir

zegolem
22/03/2008, 16h39
Je remonte ce message pour inclure les antécédents du problème... et parce que je me suis souvenu que Yminh avait posé cette question... euh, il y a plus longtemps que je ne pensais en fait, tant pis. Je donne mon astuce quand même.

Voilà, j'ai été très récemment confronté à des temps catastrophiques de rendu en réseau pour un fichier de 1800 frames avec des anémones crées dans hair. Malgré le cache et toutes les optimisations possibles, les temps de préparation se comptaient en heures pour un rendu par image de moins de 5mn. Totale inutilité du réseau à ce compte...

Donc, j'ai fini par penser à segmenter mon anim', non pas en modifiant ma première image d'extrait, mais celle du projet. Avec la mise en cache des dynamiques, les raccords fonctionnent bien et les temps de préparation chutent drastiquement. C'est long à faire, un peu lourd, mais ça marche. Pour un rendu en réseau l'idéal est d'attribuer un segment par machine, ce que NetRender ne sais malheureusement toujours pas faire, donc pour contourner, faut multiplier les segments... argh :coup:

Ce problème ne concerne pas que NetRender comme dit plus haut, et affecte des choses beaucoup plus anecdotiques en apparence, comme le calcul des vignettes de la bibliothèque de poses. tant que vous faites vos poses à l'image 0 pas de soucis c'est plutôt rapide, dès que vous la faite mettons, 700 images plus loin, c'est une cata, toute l'anim' étant "re-préparé" pour un vignette de 80x60!
Et si il y a une vidéo en compositing incluse c'est encore pire...

En changeant l'image de départ, tout rentre dans l'ordre, mais ça implique que tout ce qui est dynamique soit conformé (bake), si on veut une image exacte au niveau animation.

yannminh
29/03/2008, 14h40
Donc, j'ai fini par penser à segmenter mon anim', non pas en modifiant ma première image d'extrait, mais celle du projet.



Salut, et merci pour ta réponse... ça m'intéresse beaucoup

peux tu préciser ce que tu veux dire exactement par "segmenter" l'animation... ?

Yann, Noosegmentable...

zegolem
29/03/2008, 15h29
Oups, mauvais choix de terme, "morceau" ou "tronçon" serait plus approprié que segment je pense, et découper ou tronçonner plutôt que segmenter. Je crois que j'ai pensé à "segmenter" car mon anim' repose sur une longue animation de camera suivant une courbe...

Comme dit plus haut, pour que ça marche bien, il faut changer l'image de début du projet et pas simplement l'extrait. Mais dans certains cas, les dynamiques mettent un certain nombre d'images à se remettre en conformité avec le cache, il faut donc prévoir un "débord" d'images (pour ma part avec 50 frames, j'ai largement assez pour que les dynamiques reprennent la même place que dans le rendu suivant). Après faut un peu de montage...