PDA

Voir la version complète : Accélerer le rendu d'images pour configurateur



alibabu
30/01/2013, 11h43
Bonjour,

je réalise actuellement un configurateur de produit. Il s'agît de générer plusieurs dizaine de milliers d'images basées sur de petites variations de texture et de couleurs. C'est un script Python qui automatise les variations. La scène reste la même.

Problème : j'aimerais optimiser le temps de rendu et éventuellement le volume de stockage, quitte à assembler les images en post-process.

Quelle est la bonne façon d'aborder la chose? Le tag composite? le multipass?

Merci de vos éclairages.

Alexandre

poumpouny
30/01/2013, 12h10
pourkoi passer par python mograph le fait bien, en plus tu peux mettre les clones en instance de rendu, ce qui redui considérablement la charge de la ram et aussi le poids du fichier !

alibabu
30/01/2013, 14h20
Bonjour Pompouny,

Le script Python est déjà codé et marche plutôt bien.
Mon problème est surtout le temps de rendu (28 jours pour un modèle et j'en ai au moins trois comme ça)

J'ai fait un test avec du multipass en ne cochant que la couche RGBA : le temps de rendu ne change pas,visiblement tout est calculé.
J'ai aussi testé le "render region" - je gagne environ 10%.

Je vais fouiller les composites et les alpha, il y a peut-être quelque chose à faire de ce côté.

Daubermman
30/01/2013, 18h46
Difficile de t'aider avec aussi peu d'infos, autant commencer par ce qui a de plus simple, decris un peu une image, la taille qu'elle fait et le temps que tu met a la rendre, ca sera deja un debut pour voir si tu peux optimiser tout ca.

alibabu
30/01/2013, 20h03
L'image elle même est petite - 800x600px, 200ko / image. C'est du mobilier de bureau. Le rendu par image dure 80s.
J'ai 50 variations de couleurs et 600 variations de taille et de position -> 30000 images.

J'aimerais améliorer le process actuel, par exemple en ne recalculant que la partie couleur pour chaque taille.

J'ai testé aujourd'hui le tag composite pour séparer l'objet de l'environnement mais l'amélioration n'est pas spectaculaire - 55s.

Dans l'idéal, j'aurais aimé que C4D puisse récupérer une partie du render précédent - ombres, réflexions, etc.

Bref, après 2 jours sur la problématique, je vais peut-être revenir à la méthode bourrin et acheter du CPU (ou de la patience)

Floc
30/01/2013, 20h11
28 jours de rendu pour un modele effectivement cela parait énorme. Quelques précisions quand a la nature du modele pourrait aider. A moins qu'il ne s'agisse de 28 jours pour les 10000 vignettes d'un modele, ce qui fait en gros 4mn par images, ce qui parait assez raisonnable. Dans la mesure ou il s'agit d'images fixe il n'est pas forcément nécessaire d'avoir des réglages de globale trop élevé, mais sans précisions difficile d'en dire plus.

edit :
oups désolé tu as posté les réponses pendant que je rédigeais.
80s c'est plutot rapide. Tu peux essayer d'utiliser les caches : irradiance cache précalculé en utilisant l'option lock (Si les variations ne sont pas trop importantes) et aussi le shadow map cache (toujours si la geometrie de l'objet ne change pas).
Vu le nombre d'image meme quelques seconde par ci par la peuvent etre un gain appréciable.

Daubermman
30/01/2013, 21h57
Alors deja 1 mins pour du 800x600 ca me parait énorme. Je sais pas ce que tu fais comme type de rendu mais je pense que ca peut se faire en 20 secondes.
Ensuite pour la partie couleur je te conseille fortement de gérer ca en compositing, sur AE ou script photoshop peut importe mais recalculer un rendu 3d pour de la couleur ça n'est pas nécessaire.
Une chose est sûre, n'achete pas de CPU, c'est pas nécessaire :) je pense que tu as déjà ce qu'il faut

Aurety
30/01/2013, 22h07
idem, je gérerais la couleur en post prod !
Mais pour la qualité des questions et des réponses je vous passe membres reconnus, vous aurez gagné au moins ça :sweatdrop:

Kyan
30/01/2013, 22h37
Pour optimiser tes rendus :

Dans les paramètres de rendu -> options

Tu peux mettre Ray Depth, ReFlections et Shadow à 3.

Si tu as une Ambient Occlusion, Fait en sortes que ton Minimum Sample et Maximum Samples soit des exposant de 2 (2*4*8*16*32*64*128*256.. ect)

Si tu as mis l'Anti-Aliaising sur Best, vu la taille l'image, tu peux mettre les parametre au minimum (min 1x1, max 2x2)

Si tu as mis de la GI et Sauvegarde l'irradiance Cache.

Pour tes Lights, dans l'onglet Shadow, Fait en sortes que ton Minimum Sample et Maximum Samples soit des exposant de 2 (2*4*8*16*32*64*128*256.. ect)


Après sans voir l'image c'est difficile de dire ce que tu pourrais optimiser :)

alibabu
31/01/2013, 10h49
Bonjour,

d'abord merci à tous - quel plaisir d'avoir des solutions au démarrage de l'ordi!
J'ai testé et en optimisant j'ai gagné 30s sans quasiment altérer la qualité de rendu.

C'est le calcul des réflexions qui prend le plus de temps (30s par image). J'ai beaucoup de verre et de métal brillant.

Je vais explorer le changement des couleurs en post process - faut voir comment je peux scripter tout ça.

Daubermman
31/01/2013, 11h23
Je sais pas si tu t'y connais sur After par ex mais tu dois facilement pouvoir mettre une expression sur un effet qui fait de la couleur et de se fait ca changera le tout automatiquement, tu auras qu'a lancer un rendu sequence et boum

alibabu
08/02/2013, 10h35
Bonjour,

juste pour vous faire un petit retour : j'ai simplifié les matériaux utilisés - notamment les options de réflexion - et j'ai gagné 20s de plus.
Je tombe à une vingtaine de seconde par image, c'est très satisfaisant.

Merci à tous pour votre aide.

Alexandre

Melesor
25/02/2021, 14h38
Bonjour,

J'ai lu votre conversation qu'il était possible à l'aide d'un script, "de générer plusieurs images avec variations de texture et de couleurs" en ayant la même scène/vue/objet.

Ce script est il disponible ? Si oui, comment cela fonctionne t'il ?

Je dois créer plusieurs vues avec plusieurs palettes de coloris et je recherche un outils compatible avec Cinema 4D pour générer des visuels avec le même objet (type chaise ou table) avec ces combinaisons possibles de coloris.

Mais je ne sais pas comment faire pour que ce soit possible.

Merci d'avance,

alibabu
25/02/2021, 16h38
Bonjour Mélésor,

C'est un très vieux script Python (pour la R13 de mémoire) qui modifiait le modèle (dimensions, texture) et lançait le rendu.
Je ne suis pas sûr de l'avoir gardé et je ne sais pas s'il fonctionnerait encore sur la version actuelle.

Dans votre cas ce ne devrait pas être trop compliqué si vous n'avez que la texture à changer. Mais il vous faudra coder un peu.
Le process :
- ajouter les matériaux à votre projet en les mettant sur la même layer
- nommer l'objet que vous voulez faire varier (par exemple : myobject)

Puis dans le script
- récupérer tous les matériaux relatifs à la layer (doc.GetMaterials() et if layer.GetName() == ...)
et pour chaque matériau
- trouver l'objet (doc.SearchObject("myobject"))
- trouver le tag de texture
- Assigner le matériau au tag (SetMaterial)
- Lancer le rendu et enregistrer

J'espère que cela vous aide un peu. Cela fait longtemps que je n'ai pas touché à cela et il y a peu être plus simple depuis.

A.

bru
26/02/2021, 18h34
Avez-vous regardé le mécanisme des "prises" ("takes" en version anglaise) ?

Il permet de créer plusieurs versions d'une même scène en faisant varier divers paramètres dont les textures.

Il est aussi possible d'animer les paramètres des textures, dont les couleurs, comme tout paramètre dans C4D, et de sortir une animation en images séparées.

Melesor
12/07/2021, 09h19
Bonjour,

Merci pour vos retours.

Je ne comprends pas le principe de "takes", j'ai regardé des vidéos dessus mais je n'ai pas réussi à m'en servir...

atome451
12/07/2021, 15h55
Bonjour Melesor,

En gros, les "Takes" (Prises) fonctionnent comme un enregisteur d'état. La première prise (générée automatiquement à la création d'un fichier) sert d'état de référence. En créant une deuxième prise, en activant l'enregistrement des changements et en modifiant des paramètres, on génère un deuxième état. Une fois qu'on a fini les changements, on stoppe l'enregistrement.

On peut alors demander dans la palette Prises de lancer le rendu pour les deux prises. Dans la fenêtre de paramètres de rendu, on peut utiliser des codes pour changer les noms de fichier ou de dossier en fonction du nom de la prise ainsi que des tas d'autres trucs. Si on préfère, on peut aussi enregistrer plusieurs paramètres de rendu et choisir le paramètre de rendu selon la prise. Idem pour la caméra.

En créant plusieurs prises avec plusieurs états, on peut automatiser le rendu de plusieurs coloris par exemple. Et si on veut changer l'angle de caméra pour toutes les prises, il suffit de changer la caméra dans la prise de référence (pour peu qu'on n'aie pas changé la caméra dans les prises enfants). Sachant qu'on peut avoir des prises enfants de prises enfants... sous la prise de base, les possibilités sont très vastes.

Par ailleurs, il n'est pas obligatoire de créer les différents matériaux par enregistrement des changements. On peut tout simplement fabriquer les matériaux séparés à part et enregistrer seulement dans la Prise le remplacement d'un tag de matériau par un autre sur un objet.

Ce système est très robuste. J'ai fait des milliers de rendus avec Octane à l'aide de ce système. Il faut toutefois être assez concentré pour l'utiliser et ne pas oublier de stopper l'enregistrement quand c'est nécessaire...

Voilà. J'espère que ce sera utile.