Ordre de priorité et d'exécution

Les sous-opérateurs de type Sortie, y compris Modification quantité, possèdent des options permettant de définir l'ordre de priorité et l'ordre d'exécution. Ces options sont importantes dans les simulations complexes.

L'ordre de modification et de traitement des données est défini par les sous-opérateurs Sortie. Ces sous-opérateurs contrôlent la modification des données. Ils vont chercher des données de particules dans les sous-opérateurs qui les précèdent dans le flux de données et définissent des propriétés de particules sur la base de ces données.

Les sous-opérateurs de sortie qui ont le même ordre d'exécution traitent les mêmes données d'entrée. Lorsque plusieurs sous-opérateurs de sortie ont le même ordre d'exécution, c'est leur ordre de priorité qui détermine l'ordre dans lequel ils extraient les données sous-opérateurs en amont. Une fois que toutes les données ont été extraites, elles sont appliquées aux propriétés des particules.

Si des sous-opérateurs ont un ordre d'exécution différent, ils peuvent extraire des données différentes même si elles proviennent du même sous-opérateur d'entrée. En effet, il se peut qu'un sous-opérateur de sortie de moindre rang d'exécution modifie les données d'une propriété. Lorsque le sous-opérateur de sortie de plus haut rang d'exécution extrait les données, elles ont déjà été modifiées.

Prenons l'exemple suivant : lorsque des particules entrent dans l'événement, vous devez calculer des valeurs initiales pour toutes les nouvelles particules. Vous souhaitez ensuite modifier les propriétés des particules dans chaque image (qu'une particule soit nouvelle dans l'événement ou non) et, pendant cette modification, vous avez besoin que des valeurs initiales soient définies dans toutes les particules.

Dans ce scénario, vous avez deux flux de données : le premier calcule les valeurs initiales, tandis que le second modifie les propriétés des particules. L'ordre d'exécution du sous-opérateur de sortie du premier flux doit être défini sur 1 et son filtre d'entrée sera très probablement défini sur Entrée standard Nouveau dans l'événement. L'ordre d'exécution du sous-opérateur de sortie du deuxième flux sera défini sur 2.

Autre exemple : vous souhaitez analyser les données de vitesse de toutes les particules et, selon certaines conditions, définir deux sous-ensembles de particules, dont les vitesses seront modifiées différemment. Dans ce scénario, vous devez utiliser deux sous-opérateurs de sortie avec le même ordre d'exécution. Cela permet de garantir que la vitesse d'entrée initiale est la même pour chaque sous-opérateur de sortie.

Par ailleurs, vu que le sous-opérateur Modification quantité modifie le nombre de particules, il ne peut pas utiliser le même ordre d'exécution que les autres sous-opérateurs. Des protections intégrées dans le programme empêchent cette situation.

De plus, la zone Ordre de priorité et d'exécution comporte des boutons d'option Avant/ Normal/Après. Cette option définit l'ordre de traitement à un niveau supérieur. Si l'option est définie sur Avant, la sortie est effectuée avant l'exécution de tout autre opérateur dans l'événement courant. Si elle est définie sur Normal, le sous-opérateur de sortie est exécuté dans l'ordre normal, entre les autres opérateurs de l'événement. Si elle est définie sur Après, la sortie est traitée une fois que tous les opérateurs et tests du système de particules ont été exécutés pour cette étape d'intégration.

Pour voir un exemple d'utilisation de l'option Avant/ Normal/Après, ouvrez le fichier inclus CollisionAsBody.max .

Cet exemple utilise l'opérateur Données pour produire une collision simple et rapide. Comme vous le savez probablement, les systèmes de particules dans 3ds Max traitent les particules comme des points au niveau des collisions et des déflecteurs. Par conséquent, si une particule possède une forme de taille visible, cette forme pénètre dans les surfaces des déflecteurs, ce qui peut ruiner l'effet visuel global. L'exemple suivant montre comment relier les données de particules de manière à décaler la position des particules sur une distance égale à celle de l'interpénétration.

Tout d'abord, vous allez créer un canal de données personnalisé pour enregistrer des valeurs réelles, où sera inscrit le décalage de position nécessaire pour éviter la pénétration. Pour toutes les nouvelles particules, cette valeur est initialisée sur zéro (voir le bloc de données 01).

Une fois que tous les autres opérateurs et tests ont effectué leur tâche, vous calculez la quantité de pénétration et décalez la position des particules dans la phase Après. De cette manière, les positions des particules sont ajustées pour éviter la pénétration et les particules sont prêtes pour le rendu. Les opérateurs de sortie à droite effectuent leur tâche dans la phase Après.

Dans la phase Avant, vous devez à présent redéplacer les particules vers leur position initiale non décalée, afin que les tests de collision poursuivent leur tâche comme si de rien n'était.

Dépendant de l'historique

Les systèmes de particules sont, par nature, dépendants de l'historique. En d'autres termes, pour déterminer l'état d'un système de particules par exemple à l'image 100, le logiciel doit calculer l'état de toutes les images précédentes depuis que la première particule a été créée. En effet, les modifications des propriétés des particules (par exemple, leur position) s'accumulent suite aux changements constants d'autres paramètres, tels que la vitesse.

Toutefois, dans certaines configurations, les propriétés des particules ne sont pas dépendantes de l'historique et peuvent donc être calculées à partir de l'état courant des particules. C'est le cas, par exemple, de l'orientation des particules si elles "regardent" la caméra ou suivent la vitesse des particules. Ici, l'orientation de la particule dépend soit de la position (comme c'est le cas pour des particules orientées vers la caméra) soit de la vitesse de cette particule. Dans ce cas, pour calculer l'orientation actuelle des particules, il n'est pas nécessaire d'en connaître tout l'historique : il suffit de connaître leur vitesse ou position courante.

En ce sens, l'opérateur qui calcule l'orientation des particules n'est pas dépendant de l'historique. Cet opérateur ne doit rien faire pendant que le système parcourt toutes les images précédentes pour arriver à l'image courante. L'opérateur n'intervient que dans l'image finale, pour y analyser la position ou la vitesse des particules et calculer leur orientation.

Si vous êtes sûr que le résultat du sous-opérateur de sortie ne dépend pas de l'historique des particules, vous pouvez désactiver l'option Dépendant de l'historique. Cela permet d'accélérer les calculs globaux, puisque l'opérateur n'est mis à contribution que dans la dernière image.