Faire glisser des points le long des bords

 


Donc, même si j’ai dit plus tôt que les sops du solveur sont bons, le sentiment suffisant que vous obtenez en faisant bouger les choses sans eux est génial. Cet exemple est totalement procédural; pas de confiance sur les trames précédentes, pas de mise en cache. net.


Le but ici est donné n’importe quelle géo, des points peuvent-ils être faits pour glisser le long de ses bords comme des fourmis? Ils le peuvent certainement.


  1. Créez une grille, réglez son mode sur « lignes » pour en faire des fils (c’est-à-dire que les bords poly qui n’ont pas de faces. peuvent également les considérer comme des courbes de degré 1, en polys)
  2. Augmenter le nombre de points avec un rééchantillonnage
  3. Agitez-le avec un sop de montagne (j’ai inséré un nœud de gigue, une montagne n’aura aucun effet à moins que les lignes de la grille ne soient légèrement gigues)
  4. Créez un attribut u-coord le long de chaque fil avec un point vop et un extrait vex (connect ptnum et numvtx) : u = vertexprimindex(0, ptnum) / float(numvtx);
  5. Colorez-le avec une rampe basée sur u, cos il a l’air bien
  6. Dispersez quelques points sur les lignes, ils hériteront de la u-coord des lignes, ainsi que de l’ID de la ligne sur laquelle ils se trouveraient (appelé sourceprim)
  7. Ajoutez un nouvel attribut aléatoire, 'delta', entre -1 et 1, pour tous les points
  8. Pointez vop pour faire glisser les points vers le bas des lignes.


Ce point vop est l’endroit où toutes les choses soignées se produisent:


  1. Prenez le temps, multipliez-le par delta. Cela signifie que par point si la valeur delta est 1, ils se déplacent à pleine vitesse, si delta est -1, ils se déplacent en sens inverse à pleine vitesse, les valeurs entre les deux sont plus lentes.
  2. Prenez le u-coord, ajoutez-y du temps, puis modulo par 1. Cela signifie que le u-coord changera en douceur, mais s’il frappe 0 ou 1 (c’est-à-dire le début ou la fin de la ligne), il se déformera instantanément à l’autre extrémité de la ligne.
  3. Alimentez le sourceprim, le u-coord mis à jour et la géométrie de ligne d’origine dans un vop d’attribut primitif. Ce nœud retournera l’attribut de votre choix à la coordonnée uv que vous demandez, sur la primitive que vous demandez. Ici, nous lui demanderons de retourner P, la position sur la ligne à notre u-coord.
  4. Définissez cette position P comme position du point


Dans l’exemple de scène, je transmets cette configuration à un instanceur de point rapide, pour instérier des cubes sur les points. J’ai également quelques autres éléments de configuration géographique derrière un nœud de commutateur pour montrer que cela fonctionne pour une variété de formes.


Voici une autre variation basée sur ce post, déplacer des choses le long de plusieurs chemins dans une direction.




Les principales différences ici sont


Le delta aléatoire est centré autour de 1 plutôt que de 0, donc tout se déplace dans le sens un

À la toute fin, il utilise un sop de piste pour calculer v, qui est l’attribut de Houdini standard pour la vitesse. Ceci est récupéré par les nœuds de copie et d’instance, qui orienteront les copies dans le sens du mouvement.


Voici encore une autre version:



Toujours agréable de trouver un moyen plus élégant d’obtenir un effet. L’attribut interpolate sop est destiné à vous aider à coller des points dispersés sur la géométrie déformante. Le sop scatter a des options pour stocker la primitive sur laquelle chaque point a été dispersé, et l’uv de cet emplacement. L’interpolation attributaire les utilise pour coller le point à l’emplacement correspondant sur la géométrie que vous lui attribuez.


Ici, je l’utilise dans un but différent; plutôt que d’avoir des uvs statiques et des géos déformants, j’ai des uv statiques et des uv changeants. En réséchant chaque point uv pour qu’il s’exécute dans une boucle entre 0 et 1, et qu’ils soient dispersés sur des courbes fermées, ils contournent les courbes. Ajoutez quelques bâtiments, une forme de voiture simple, c’est une sim de foule de voiture à peine passable. amusement!





0 Commentaires