Salut Tout le monde,
Je travail actuellement sur une animation un peu complexe et mon viewport devient extrêmement lent...
Si je lance mon animation je me trouve à 5 images secondes, je suis normalement à 25...
Du coup je me demandais si vous connaissiez quelques astuces pour accélérer l'animation dans le viewport ?
• Qu'est ce que je peux optimiser ?
• Ma scène contient t'elle trop de points, de polygones ?
Merci d'avance pour vos réponses ;-)
Probablement trop d'objets. surtout si ils sont animés.
500000 ou 1 million de polys normalement c'est pas un probleme. Sauf si tu a 100 000 objet de 10 polys.
J'avais eu le cas d'un scene importé d'archicad ou une cage d'escalier grillagée etait composée de 50000 objet. on pouvait a peine deplacer la vue. Une fois cette cage d'escalier connectée en un seul objet plus de soucis
C4d est pas très bon la dessus.
solution -> connect+delete
.
Une autre possiblité c'est trop d'objet générés.
Si tes 5000 objets sont tous des extrude; lathe, loft et compagnie, ca peu plomber.
Faire gaffe aussi au subdivs. Tu peux descendre le reglage pour le viewport.
Un plan bien maillé avec un displace deformer et un subdiv par exemple peu vite plomber ta scene.
La solution tu "écrase" tout ce que tu peux avec current state to object.
Ton fichier va devenir plus lourd sur le disque, mais sera bien plus fluide.
Et si il y a des objet dupliqué en masse préférer les instances avec render instance coché
pareil avec les cloner pas oublier de cocher render instance.
Evidement tout ca est une histoire de quantité.
10 subdiv ca va, 1000 subdiv bonjour les dégats !
Dernière modification par Floc ; 22/05/2020 à 17h30.
Salut Floc,
J'ai quelques millier de rochers, j'ai suivie ton conseil en les regroupant en un seul objet et je gagne un peu en performance (13 i/s) !
Rien de dingue mais c'est quand même un peu mieux !
Ma scène ne contient aucune subdiv, mais il y des moteurs, de la physique etc... C'est sans doute ce qui plombe le viewport...
Je suis en train de faire des export en alembic pour essayer d'alléger le tout.
Par contre j'ai pas bien compris quand tu dit : "La solution tu "écrase" tout ce que tu peux avec current state to object."
Qu'est ce que tu entends pas écraser ?
Dans cette scène j'ai placé les rochers sans cloneur, il n'y a donc aucune instances...
Tu penses qu'il vaudrait mieux que je reprennent ça avec des cloneurs et des instances ?
Est-ce que tu sais s'il il existe une solution pour créer des instances d'objet et avoir la possibilité de faire des rotations et changer leurs taille sans passer par un cloneur ?
Merci encore Floc !
J'ai déjà terminé la première scène je passe à la deuxième ;-)
Je pense que Floc veut dire de transformer tous les objets "calculés" via une animation ou une simulation en objets polygonaux figés avec la commande "convertir en objet", appliquée sur l'objet dans l'état d'animation "final" de l'objet. Cela évitera des tas de calculs à chaque trame.
D'autre part, qu'entends-tu par "sans cloneur" ? A priori, les instances peuvent être créées directement, via l'objet instance... Donc les instances ne sont pas un mécanisme spécialement associé aux objets cloneurs. Tu peux les dupliquer "à la main" ou les manipuler avec des commandes de répartition.
Tu peux aussi créer des objets instances via d'autres mécanismes comme les particules ou les commandes de répartition.
Note bien la case "rendre instance" ou "instance de rendu" qui se trouve dans les propriétés des instances ou dans les commandes qui en créent. Cette option fait en sorte que le système ne conserve qu'une copie de l'objet en mémoire et la réutilise. Outre le fait que cela permet d'économiser la mémoire sur les grandes scènes, cela permet d'optimiser l'accès à celle-ci.
Note aussi une alternative aux cloneurs qui permet d'autres types d'arrangements est le plugin (payant) SurfaceSpread 2 de Lauberk. Il offre assez bien de possibilités et de contrôle pour distribuer des objets sur des surfaces et depuis peu sur des splines. Il y a une version de démo.
Dernière modification par bru ; 22/05/2020 à 19h30.
Effectivement c'est probablement la cause. Je t'aurai dit d'essayer de mettre en cache, mais un alembic fait aussi le job.
Transformer les objet générés genre lofts, extrude etc... ou qui ont un modifier, bend, FFD, displace etc.., en objet editable.
L'avantage de "Current State to object" par rapport a "make editable" c'est qu'il converti tout y compris les modifiers et même les perso skinné.
Ca depend du nombre et de leur maillage. Si il y en un vingtaine a 10000 polys ca vaut pas le coup de t'embeter.
Au dessus de 100 ca commence a devenir interressant. Et si il font disons plus de 100000 polys c'est tout de suite rentable.
Si tu les a deja placé tes objets et que tu veux les remplacer par des instances j'avais ecrit un petit script pour faire ca
Attention c'est bricolo.
Tu selectionne tes objets, tu applique le script. Il va creer les instances hors de la hierarchie si il y en a une. Ensuite tu selectionne toutes les instances et dans le champs "reference object" tu place un des objets source, n'importe lequel (puisque ce sont censé etre tous les même), et le tour est joué.
Vaux mieux faire une sauvegarde avant, car pas d'annulation.
Salut Bru, salut Floc,
Merci pour vos réponses, je prends note de vos remarques !
Concernant les différents objets de ma scène, tout est déjà convertit, j'e n'ai aucun déformateurs ni subviv etc...
Je connais " SurfaceSpread " mais je n'utilises effectivement pas... En générale j'utiliserai des cloneurs pour répartir mes objets, ça me suffit en générale.
Mais merci quand même pour l'info.
J'ai finalement redessiner mes petits rochers en utilisant "NitroDraw", super plugin pour ce genre de chose, j'ai simplement ajouter l'option "Instance" qui m'a permis d'avoir des instances de mon rochers source.
J'ai également transformé les différentes parties qui utilisées la physique et les moteurs en alembic mais malgré tout je reste sur un taux d'image vraiment pas terrible...
Bon je vais me débrouiller comme ça, je suis quand même surpris par la lenteur du viewport malgré mes différentes optimisations...
FLOC :
J'ai essayé ton script Python mais je n'ai pas réussi à le faire fonctionner... mais moins d'une erreur de ma part :
• Je sélectionne mes 1000 rochers qui se trouvent dans un NUL,
• J'applique le script et il ne me sort qu'une seule instance...
Encore merci ;-)
Il est difficile de juger de ce que doit être la vitesse de rendu comme cela, et dire si la situation est normale ou non.
Cela dépend aussi beaucoup de ton matériel.
Quelques éléments qui peuvent être en jeu:
- Si tu travailles avec une version antérieure à la R21, l'option "OpenGL matériel" est-elle bien cochée dans les préférences générales (onglet "OpenGL") ? J'ai constaté avec la R19 que cette option se retrouvait souvent décochée, je ne sais pourquoi. Je le constatais parce que le viewport était par moments très inefficace. Cette option n'existe plus en R21.
- Tu peux aussi réduire la qualité de l'affichage pour le rendre plus rapide. Par exemple en réduisant voire annulant l'antialiasing. Il y a des options dans l'onglet "OpenGL" des préférences générales (y compris en R21).
- S'il s'agit uniquement de vérifier l'animation, tu peux réduire la qualité d'affichage en choisissant "ombrage constant" ou "ombrage rapide" dans option du viewport, et supprimer toutes les options non essentielles dans le menu "option", en particulier "OpenGL HQ". Tu peux aussi choisir des vues "fil de fer" ou "boite" pour les éléments qui ne sont pas impliqués dans ce qu'il faut vérifier. Cela peut se faire élément par élément à l'aide du tag "propriétés d'affichage".
Dernière modification par bru ; 23/05/2020 à 18h16. Motif: Changement d'ordre des choses à regarder.
Salut Bru, Floc
Bru :
Pour l'OpenGL tout est au minimum, j'ai même essayé en supprimer l'OpenGL pour tester... Ça ne change rien.
Le reste des réglages c'est pareil.
Floc :
J'ai essayé ton script plusieurs fois chez moi mais ça ne semble pas fonctionner...
Si je sélectionne tous mes objets et que j'active le script, il me créé seulement une instance.
Bref, ne vous embêtez pas, je vais me démerder...
Merci encore :-)
Le message "object has no attribute "INSTANCEOBJECT_RENDERINSTANCE" me dit que ca doit etre une histoire de version. Apparement tu est en R20 ou 21.
Il faut juste glisser la case a cocher "render instance" d'un objet instance dans le bas de la console pour voir si l'identifiant a changé. si oui tu le remplace.
Salut Floc,
Ok je regarderai le script à tête reposée pour l’adapter merci !
Envoyé de mon iPhone en utilisant Tapatalk