Performances de contour dynamiques

Pour les Traits dynamiques, les performances du graphe de Substance importent beaucoup car la Substance peut être régénérée de nombreuses fois en très peu de temps. Si un calcul de Substance est trop lourd, il peut créer une latence et par conséquent saccager et se figer lorsque vous peignez. Tout cela peut finir par créer une mauvaise expérience de peinture. Cette page regroupe des informations et des recommandations sur l’utilisation de la fonction de contour dynamique.

Le calcul des traits dynamiques peut être lourd

Il est également important de savoir que le calcul peut avoir un impact dans différents contextes :

  • Lorsque vous peignez : le contour dynamique est généré (en fonction de ses paramètres) pendant la peinture. Une configuration incorrecte peut ralentir et ralentir la peinture.
  • Lors de la réouverture d’un projet : même si le processus de peinture s’est déroulé correctement, il est toujours possible que le calcul se bloque lors de l’ouverture d’un projet, ce qui rend l’ouverture des projets beaucoup plus longue que d’habitude. En effet, le processus de peinture initial s’est bien déroulé, car le calcul s’est étalé dans le temps. Cependant, il se produit presque tous en même temps lors de l’ouverture d’un projet. Cela signifie qu’un projet peut demander des milliers de Substances uniques à générer si le contour dynamique n’a pas été correctement configuré.
  • Consommation de mémoire : la génération d’un grand nombre de variations pour un graphe de Substance de données pourrait finir par consommer beaucoup de mémoire (car ces générations sont volatiles car elles sont créées à la volée).

Utilisation des Variations et des paramètres d’Espacement

Bien qu’il soit facile d’implémenter des effets impressionnants ou avancés dans la Substance de données elle-même, il peut parfois être plus avantageux de conserver une structure simple et d’utiliser plutôt des paramètres natifs des paramètres d’outil de Substance 3D Painter. Ces paramètres sont beaucoup plus rapides à calculer pour le moteur de peinture :

  • Variation : ces paramètres permettent de créer un effet aléatoire à très faible coût en modifiant certains attributs sans recalculer la Substance (comme l’angle, la position et l’opacité).
  • Espacement : plus l’espacement est petit, plus le nombre de tampons créés lors de la peinture d’un contour est élevé. Parfois, il n’est pas nécessaire d’appliquer un coup de pinceau continu et l’utilisation d’un grand espacement peut également aider à mieux voir l’alpha/le matériau utilisé.

Quand et quel type de aléatoire utiliser

Random Seed est un excellent moyen de générer de l’unicité. Le problème est que la génération peut être coûteuse et, dans le cas de la fonction Dynamic Stroke, elle peut se produire assez souvent si elle n’est pas modifiée correctement. Il est important de comprendre quand utiliser le générateur aléatoire et quand l’éviter, et de préférer plutôt une méthode alternative pour obtenir le meilleur compromis entre les visuels et les performances :

  • Générateur aléatoire par tampon : dans ce cas, une nouvelle génération de Substance unique se produit pour chaque tampon. C’est très bien pour créer des clous uniques sur une planche de bois par exemple, mais pas si vous créez des traînées d’encre/de peinture.
  • Générateur aléatoire par contour : un générateur aléatoire unique est créé pour le contour du pinceau actuel. Ceci est utile lorsque vous avez peu de tampons mais que vous avez besoin d’un nouvel ensemble de variations à chaque trait (comme un effet de pulvérisation).
  • Générateur aléatoire statique : la Substance est générée une fois et ne changera jamais. Optimale pour les performances mais peut-être trop restrictive selon vos besoins.

Qu’en est-il de Time ($time) ?
Le temps peut être utile pour créer des aspects très spécifiques, mais il s’agit en fait de l’une des variables les plus coûteuses à utiliser dans un graphe de Substance. La raison en est qu’il est très difficile d’obtenir des valeurs similaires d’un coup de pinceau à l’autre. Le moteur du pinceau générera donc probablement de nouvelles variations en permanence. Si possible, évitez-le et utilisez plutôt l’espacement et l’index de tampon, qui, une fois combinés, peuvent donner des résultats similaires.

Utilisation de StampIndex et de StampCycleCount

L’StampIndex est l’ID d’un tampon individuel dans un coup de pinceau. Par défaut, il commence à 0 et augmente de 1 pour chaque nouveau tampon. Le StampCycleCount permet de limiter la quantité d’index uniques et indique à Substance 3D Painter de recycler/réutiliser les graphes de Substance déjà générés. Lorsque l’ID actuel atteint la limite, Substance 3D Painter recommence à partir de 0, en créant une boucle.

La meilleure solution pour avoir du hasard tout en gardant de bonnes performances est donc de profiter du Cycle Count avec les éléments suivants :

  • StampIndex as RandomSeed : lors de la création d’un graphe de Substance, il est possible de définir le générateur aléatoire sur Absolu. Vous pouvez ainsi lui attribuer une valeur personnalisée qui peut être l’index de tampon. Cette opération crée une version de graphe de Substance unique pour chaque tampon à l’intérieur de votre trait.
  • Combiné avec StampCycleCount : vous pouvez créer un ensemble limité de nouvelles variations, puis les réutiliser.
  • Démarrage aléatoire : si le nombre de cycles est défini pour démarrer à partir d’une valeur aléatoire au lieu de 0, cela signifie qu’il utilisera obtenir une version de Substance différente au début pour chaque trait à l’intérieur du pool de graphes déjà générés.

Désactivation du calcul en fonction des valeurs des paramètres

Substance 3D Painter ne peut pas déterminer lors de l’ajustement d’un paramètre qu’il peut produire la même sortie, simplement parce que le calcul est masqué dans le graphe de Substance. C’est en gros une boîte noire.

Pour améliorer les performances lors de l’ajustement des paramètres et de la peinture avec des Traits dynamiques, il est possible de spécifier à quel moment de nouvelles instances de graphe doivent être générées en utilisant des valeurs conditionnelles dans les champs userdata du graphe de Substance.

Les valeurs possibles sont :

Variable
Utilisation
IsStampIndexActive
Permet de déterminer si l’index de tampon doit changer pendant la peinture.
IsRandomSeedActive
Permet de déterminer si l’option Générateur aléatoire doit être modifiée pendant la peinture.
IsTimeActive
Utilisé pour déterminer si le temps ($time) doit augmenter pendant la peinture.

Par exemple :

IsRandomSeedActive=input.roundness_jitter>0 || input.flip_x_jitter || input.flip_y_jitter

Dans ce cas, la valeur de départ aléatoire ne sera modifiée que si le paramètre de graphe (identifiant) rondeur_variation est supérieur à 0 ou si les valeurs booléennes flip_x_variation ou flip_y_variation sont activées. Si la condition n’est pas remplie, le graphe ne sera pas régénéré. Les paramètres de graphe doivent être préfixés par « input. » à reconnaître.

recommendation-more-help
substance-3d-painter-help-guide