Contrôler les lumières avec XPresso

Il est très pratique d'utiliser XPresso pour ajuster l'éclairage, particulièrement si vous utilisez un grand nombre de lumières devant être contrôlées.
Le but de cet expression est de créer un couloir éclairé par des lampes dont l'intensité varie avec leur distance par rapport à un objet qui se déplace. Pensez à une pièce qui allumerait automatiquement les lampes situées dans la partie ou vous marchez. Se contenter d'allumer ou éteindre les lampes risque d'être un peu abrupt, et nous voulons aussi que le couloir ne soit jamais complètement dans le noir.
Comme d'habitude il existe plusieurs méthodes pour résoudre ce problème, nous allons vous en montrer deux.
La première est de créer une expression qui contrôle l'intensité en fonction de la distance pour chaque lampe.
La seconde est de créer une seule expression qui contrôlera toutes les lampes.
Fondamentalement ces deux méthodes fonctionnent à l'identique, la principale différence réside dans la manière dont vous référencerez les lampes. La première expression peut être transférable ainsi vous pouvez la réutiliser facilement, alors que la seconde est plus facile à ajuster puisque vous n'avez qu'une seule expression à modifier.
Nous commencerons par créer une expression d'après la première méthode, ensuite nous la modifierons selon la seconde méthode.

la scène de base

Ajoutez une propriété XPresso sur la première lumière puis faites glisser la lumière elle même et la sphère dans l'éditeur XPresso. Nous aurons besoin de la position globale de ces deux objets pour déterminer la distance. La distance peut être calculée soit par la soustraction des deux positions, le vecteur résultant étant converti en un réel (Info), ou en utilisant le nœud distance. Dans notre exemple nous utiliserons le nœud distance.

Votre expression doit ressembler à cela :
Maintenant il nous faut adapter la distance à l'intensité de la lumière. Pour avoir une idée de l'intervalle de valeurs dont nous parlons, créez un nœud Résultat et connectez le à la sortie du nœud distance. Activez la Mise à jour de l'animation dans le menu Calculer pour avoir un affichage en temps réel du résultat dans le nœud.
Vous pouvez tester l'expression en déplaçant la sphère le long de son axe Z. Si vous ne modifiez pas la position en X et en Y de la sphère, la plus petite distance doit être un peu en dessous de 140 unités, ainsi nous connaissons la distance minimum qui devra créer l'intensité maximum au niveau de l'éclairage. Maintenant déplacez la sphère sur son axe Z jusqu'à atteindre la lumière suivante. La distance est d'environ 330 unités cela correspond à la distance à laquelle la lumière aura son intensité minimum.
Comme nous ne voulons pas que la lumière s'éteigne complétement nous utiliserons un intervalle d'intensité compris entre 20% et 100% (0.2 - 1.0). Pour convertir l'intervalle des valeurs (Info) de 330/140 vers 20%/100% vous pouvez utiliser un certain nombre de nœuds math ou le nœud de cartographie d'intervalle. Nous utiliserons la cartographie d'intervalle puisque elle a justement été créée pour cet usage.
Remplacez le nœud résultat par la cartographie d'intervalle. Nous allons avoir besoin d'un second nœud pour l'objet lumière, faites le simplement glisser depuis le gestionnaire d'objets et placez le à droite de la cartographie d'intervalle. Vous pouvez créer la connection en tirant un lien depuis la sortie de la cartographie d'intervalle puis en le relâchant sur le carré bleu situé en haut et à gauche du nœud lumière.
Réglez l'intervalle de sortie de la cartographie d'intervalle sur Pourcentages et activez Clamper (min) et Clamper (max) (Info).
Du fait que nos intervalles sont inversés (une valeur élevée sera convertie en une valeur faible) vous activez l'option Inverser.
Nous n'utiliserons pas la spline optionnelle donc vous pouvez la désactiver.
Saisissez les limites des intervalles dans les champs Paramètres.

Nous avons désormais une lumière qui fonctionne comme prévu (scene). Réalisez une animation qui déplace la sphère d'une extrémité du couloir à l'autre pour tester votre expression.(animation)

Nous devrons effectuer une modification avant de copier cette expression sur les autres lumières. Actuellement elle pointe vers l'objet Lumière1 et le fait de copier l'expression ne changera pas cela. La solution consiste à utiliser une référence relative. Sélectionnez les deux nœuds de l'objet Lumière1 et changez la référence absolue en référence relative.
Désormais ces nœuds d'objet font référence à l'objet qui porte la propriété XPresso, indépendamment de son type. Si vous copiez la propriété sur un objet qui ne dispose pas des ports que vous utilisez ceux ci seront déclarés indéfinis, par exemple il n'y a pas de valeur d'intensité sur un objet cube.
Maintenant nous pouvons copier sans problème cette expression sur toutes les autres lumières en utilisant Ctrl+glisser. (scène) (animation)

L'expression que nous venons de créer présente quelques inconvénients. Si vous souhaitez modifier la distance ou l'intervalle d'intensité il faudra le faire séparément pour toutes les expressions ou bien remplacer toutes les propriétés par une nouvelle qui a été modifiée. Une première étape pour rendre les choses plus faciles est de permettre l'accès aux valeurs souhaitées en dehors de l'éditeur XPresso en utilisant une des méthodes indiquées ici. Cela vous permettra de faire une multi sélection des lumières (si vous employez les données utilisateur) ou des propriétés (si vous utilisez les ports du groupe) et de changer les valeurs simultanément. Cependant vous êtes toujours coincés avec une propriété Xpresso pour chaque lumière. (scène)
Pour éviter cela nous utiliserons un nœud itérateur pour répéter la même opération sur toutes les lumières. Dans ce cas deux itérateurs sont utilisables : le nœud Hiérarchie et le nœud Liste d'objets. Hiérarchie vous permet d'accéder à tous les enfants de notre objet neutre nommé Lumières, ce qui peut poser un problème si vous utilisez une hiérarchie plus complexe pour votre jeu de lumières. Dans ce cas le meilleur choix est l'itérateur Liste d'objets qui n'accédera qu'aux objets placés dans la liste.

Supprimez toutes les propriétés XPresso excepté celle de la Lumière1 puis ajoutez un nœud Liste d'objets. Comme nous allons placer cette expression sur l'objet neutre il faut changer la référence de la Lumière1 en absolue, sinon la référence pointera vers le neutre qui n'a pas de valeur d'intensité. Ensuite vous déplacez la propriété depuis la Lumière1 sur l'objet neutre Lumières.

A présent nous connectons la sortie Instance du nœud Liste d'objets à l'entrée Objet des deux nœuds Lumière1. De cette façon la référence changera tout à tour pour pointer successivement sur chacun des objets placés dans la liste.
Pour rendre cette expresssion plus simple d'emploi ajoutez toutes les valeurs susceptibles d'être modifiées au port d'entrée du groupe principal (Info)
Vous pouvez modifier l'ordre des ports en cliquant sur le nom d'un port puis en le faisant glisser, cela permet de garder l'expression bien lisible. (scène)

Vous pouvez facilement modifier cette expression pour que, à la place de lumières qui changent d'intensité ce soient des portes qui s'ouvrent et se ferment automatiquement. Animez simplement la rotation des portes à la place de l'intensité de la lumière.

Gardez à l'esprit qu'il y a toujours plus d'une solution à un problème.
Essayez toujours de trouver plus d'une solution à un problème. Ceci vous aidera quand cela deviendra difficile d'avancer et que vous devez produire dans un temps limité ou avec des contraintes.

Retour à l'index