L’objet Octane Scatter propose une série de paramètres pour faciliter la création d’un grand nombre d’instances de rendu dans Octane pour Cinema 4D (plusieurs centaines de milliers ou plusieurs millions). Comme il est directement lié au nœud Scatter d’Octane Render, il est « traduit » assez rapidement en successions de coordonnées. Petit tour d’horizon.

L’objet Octane Scatter est un objet dédié à la répartition d’instances de rendu sur un ou plusieurs polygones, soit distribuées de manière aléatoire selon la surface, soit de manière ordonnée selon les vertex ou encore d’après un fichier .csv de coordonnées. Il permet de piloter le recouvrement des instances d’après une vertex map, une texture (un bruit Cinema 4D ou une texture bitmap par exemple) ou l’inclinaison des normales des polygones de l’objet référence. De même, il permet de contrôler la position, l’échelle et la rotation des instances à l’aide de shaders (un bruit Cinema 4D ou une texture bitmap par exemple). Enfin, il est possible d’affecter à l’Octane Scatter des effecteurs MoGraph.

Sauf erreur de ma part, cet objet a été développé par le développeur du plugin Octane en premier lieu afin de pallier le manque d’outil automatique disponible dans les versions plus légères de Cinema 4D. Cela étant, il reste utile également pour les détenteurs des versions plus complètes de C4D équipées de MoGraph. Comme il y a un lien direct entre l’objet Octane Scatter et le noeud Scatter spécifique au moteur de rendu, la réactivité du LiveViewer et le temps de préparation au rendu sont très bons, comparé à d’autres outils comme Mograph, X-Particles ou le MultiCloner du plugin Forester.

L’exemple le plus simple pour illustrer l’usage de cet objet est la répartition d’arbres et de touffes d’herbe sur la surface d’un terrain. Mais son utilité ne s’arrête pas là car il est suffisamment souple et complet pour pouvoir être employé dans la majorité des cas où une multitude d’instances est nécessaire. Bien entendu, il ne faut pas vous attendre à des systèmes complexes de peinture d’instances ou de gestions avancées par altitude, etc, comme on peut en trouver dans des plugins comme Carbon Scatter. L’offre reste simple et fonctionnelle.

Dernier avantage de cet outil : comme il est destiné à être utilisé en association avec le Live Viewer, il n’est pas nécessaire d’avoir un bon affichage dans le viewport de Cinema 4D. Il offre donc un mode d’affichage très simplifié sous forme de lignes. Ce qui permet de gérer des centaines de milliers d’instances de rendu dans le viewport sans gros ralentissement. Néanmoins, il offre d’autres options de visualisation si nécessaire.

Seule ombre au tableau : cet objet n’est pas particulièrement optimisé pour la répartition d’instances animées, il est plutôt dédié à la répartition d’instances fixes. Donc, pour l’emploi d’instances de rendu animées, même si cet outil fonctionnera dans pas mal de cas, il est préférable de bien tester avant ou de se tourner vers d’autres outils comme Mograph ou X-Particles (avec un Octane ObjectTag par exemple) si on ne veut pas prendre le risque de tomber sur des fonctions non reconnues en pleine production.

Vous l’avez peut-être remarqué, je mentionne systématiquement qu’il s’agit de la gestion d’instances de rendu. Ce type d’instance, équivalente au noeud Scatter d’Octane (des instances sans déformations ou variations de forme, uniquement des variations de couleur, d’échelle, de position et de rotation), occupe très peu de mémoire dans Octane, hormis le maillage de référence bien entendu. Cet outil n’est dédié qu’à ce type d’instances.

Petit rappel : Octane n’est pas en mesure de rendre des instances de rendu à plusieurs niveaux (des instances de rendu dans d’autres instances de rendu). Donc, si vous tentez d’utiliser des instances de rendu ou des objets contenant des instances avec un objet Octane Scatter, cela ne fonctionnera pas. autant le savoir…

À savoir : depuis longtemps, le développeur du plugin Octane pour C4D a mis en place un système complexe d’identification des animations pour les rendus dans le Visualiseur. Afin de maximiser les performances, le système sépare automatiquement les maillages animées des maillages fixes. Cette opération se fait de manière transparente dans la plupart des cas mais parfois ça coince lors d’une animation par script ou par plugin. Dans ce cas, deux solutions s’offrent à vous : l’utilisation d’un Octane ObjectTag sur l’objet ou le groupe d’objets incriminé avec l’option Main > Force updates > Force on Picture Viewer et/ou, si cela ne suffit pas, une animation quasiment imperceptible de l’objet (par exemple une rotation de 0,0001°) sur l’ensemble des frames avec l’ajout de quelques clefs d’animation.

Pourquoi ça ne fonctionne pas dans le Visualiseur alors que ça s’anime bien dans le Live viewer ? Car le LV utilise le buffer du viewport au lieu d’une conversion du maillage. Donc, si ça s’anime dans le viewport, ça s’anime dans le LV, il n’y a pas d’identification de l’animation à ce stade… Ce n’est donc pas toujours un critère d’évaluation fiable.

Comment ça fonctionne ?

L’objet Octane Scatter fonctionne comme un Cloneur Mograph : pour ajouter des instances, il suffit de placer un ou des objets en enfant de l’Octane Scatter dans le Gestionnaire d’objet et de déterminer la surface sur laquelle les instances doivent se répartir en glissant un object sur l’input Surface. Tous les objets enfants seront alors répartis en proportion égale : par exemple, s’il y a cinq objets enfants, chaque objet sera instancié à concurrence de 20% de la quantité globale définie dans les paramètres de l’Octane Scatter. Donc, si on veut deux fois plus d’un objet que de l’autre par exemple, il suffit de dédoubler l’objet enfant correspondant ou d’utiliser deux Objets Octane Scatter avec des quantités d’instances différentes.

D’une manière générale, tous les systèmes de contrôle de la répartition des instances décrits ci-dessous comme les vertex maps ou les shaders fonctionnent sur des délimitations contrastées et non progressives (à l’exception des variations de position, d’échelle et de rotation bien entendu). Par exemple, si vous utilisez un shader de dégradé, vous n’obtiendrez pas une répartition progressive des instances sur la surface, du plus dense au moins dense, mais bien une cassure abrupte. Il sera donc parfois nécessaire d’utiliser un shader de variation de l’échelle ou un effecteur Mograph Randomisation pour atténuer cette cassure abrupte. Bien entendu, les variations, de position, d’échelle ou de rotation sont quant à elles progressives.

Paramètres de l’objet Octane Scatter

Onglet Distribution

Distribution : Vertex, Surface ou Use .csv file. Ce paramètre détermine le type de répartition. Selon le choix, les paramètres disponibles pour l’objet Octane Scatter vont varier.

  • Si on choisi Vertex, les instances de rendu seront réparties selon les vertex (les points du maillage). Cela donnera une répartition sous forme d’une grille équivalente aux vertex du maillage. Changer le nombre d’instances ne changera rien dans ce mode puisqu’il y a une instance par vertex du maillage de référence. Pour faire varier le nombre d’instances, il faudra donc faire varier le nombre de polygones de l’objet de référence. C’est un mode surtout adapté au motion design ou aux utilisateurs qui veulent un contrôle absolu sur base d’un maillage fait main.
  • Le choix Surface va répartir les instances selon la surface de l’objet de référence sur un mode de type grosso modo stochastique. Dans ce mode, on détermine le nombre d’instances à répartir à l’aide des paramètres Count et Keep away.
  • L’option Use .csv file permet d’utiliser un fichier de répartition généré directement dans la version Standalone ou à partir d’un logiciel tiers. Un fichier .csv est un simple fichier texte structuré d’une manière spécifique (qui peut varier selon les logiciels). C’est un système courant de transport de données structurées en tableau (pour plus d’infos sur la structure propre à Octane : https://docs.otoy.com/StandaloneH_STA/StandaloneManual.htm#StandaloneSTA/Scatter.htm). Je ne vais pas détailler les paramètres pour cette option car ils parlent d’eux-même et sont très peu nombreux.

Le champ Surface est destiné à recevoir l’objet de référence sur lequel les particules vont être réparties. C’est un champ Cinema 4D standard sur lequel on peut glisser l’objet à partir du Gestionnaire d’objets. Cette option n’est disponible que pour les distributions de type Vertex ou Surface.

Zone Parameters

Count n’est utile que dans le mode Surface. Il détermine le nombre d’instances à générer. La glissière s’échelonne de 0 à 200.000 mais on peut aller au-delà en tapant un chiffre plus élevé dans le champ numérique. Ce paramètre est absent du mode Use .csv file et n’a pas d’effet en mode Vertex.

Seed est un champ qui permet de faire varier la grille stochastique aléatoire de répartition. Si on a par exemple deux objets Octane Scatter utilisant la même surface avec un nombre d’instances similaire, on peut faire varier ce champ pour éviter d’avoir deux répartition identiques avec des instances qui se chevauchent trop. Ce paramètre est absent du mode Use .csv file et n’a pas d’effet en mode Vertex.

Keep away. Je ne sais pas trop quelle est la logique qui justifie la présence de ce paramètre mais il est certain qu’il a pour fonction de retirer des instances. Il me semble qu’il agit comme un diviseur du nombre d’instances définies dans le Count. Je vous invite à essayer pour vous faire votre propre opinion. Il est très probable qu’il y a des cas de figure auxquels je ne pense pas où ce paramètre peut être utile. Ce paramètre est absent du mode Use .csv file et n’a pas d’effet en mode Vertex.

Normal Align et Up Vector, ces deux paramètres fonctionnent en association. Le Up Vector détermine l’orientation des instances selon leur axe. Par défaut il est à 1 en Y. Le Normal Align quant à lui détermine le degré d’impact des normales de l’objet de référence (Surface) sur l’orientation des instances. Si le Normal Align est à 1, les instances vont suivre strictement l’orientation des normales de la surface de référence. Si le Normal Align est à zéro, les instances seront orientées strictement selon le Up Vector sans tenir compte des normales de la surface. Toute les valeurs intermédiaires orientent les instances plus ou moins fort dans le sens du Up Vector ou des normales de la surface de référence. Ce paramètre est absent du mode Use .csv file.

Vertex map et Limit, permettent d’utiliser une carte d’influence des points (ou Vertex map en anglais) pour contrôler les zones de la surface où des instances doivent être générées. Le paramètre Limit permet d’affiner la sélection. En effet, dans une carte d’influence des points, entre le point sélectionné et les points adjacents non sélectionnés, les valeurs de sélection sont progressives. Le paramètre Limit permet donc de déterminer à quelle valeur la répartition commence. Par exemple : en admettant que vos points sélectionnés le sont tous à 100%, si vous déterminez une limite à 0,5, la génération d’instance s’arrêtera à mi-chemin entre un point sélectionné et un point non sélectionné. En peignant une carte d’influence avec des valeurs progressives et en jouant sur la limite, il est possible de contrôler assez précisément la génération des instances, pour peu qu’on soit en mode Surface bien entendu. En mode Vertex, une carte d’influence a juste un effet on/off sur la génération des instances et ce paramètre est absent du mode Use .csv file. Vertex map est un champ Cinema 4D standard sur lequel on peut glisser le tag de carte d’influence des points à partir du Gestionnaire d’objets.

Shader, Min. et Max. Ces trois paramètres fonctionnent de manière combinée. Le paramètre Shader est destiné à recevoir un shader Cinema 4D quelconque (une image bitmap, un bruit, une surface comme échiquier ou carrelage, etc) alors que Min. et Max. clampent ce shader pour déterminer les zones où les instances doivent être ou non générées en fonction des valeurs du shader. Ces paramètres peuvent être utilisés en même temps que Vertex map et Limit et ils fonctionnent dans les modes Vertex et Surface. Pour une raison que j’ignore, il est bien souvent nécessaire de très légèrement monter la valeur Min. pour correctement voir l’effet du shader.

Normal Threshold. Il s’agit d’un autre système de restriction de la répartition des instances qui se base lui sur l’orientation des normales de la surface de référence. À l’aide des valeurs Normal low et Normal high, il est possible de déterminer une fourchette d’orientation de normales dans laquelle les instances vont être générées. Un exemple : sur une surface de type « montagnes et vallées », en diminuant la valeur Normal high, on va restreindre l’apparition des arbres aux seules surfaces horizontales, c’est à dire les vallées. Les versants abrupts seront alors exempts de végétation. Un autre exemple : en utilisant plusieurs Octane Scatter avec différents types de végétations et des valeurs différentes dans les Normal high et low, on pourra répartir les végétations selon l’orientation des versants (les feuillus dans les vallées, les sapins aux pieds des montagnes et l’herbe partout jusqu’à mi-hauteur). Cet ensemble de paramètres est utilisable en mode Vertex et Surface.

Zones Position, Scale et Rotation

Avant toute chose, il faut savoir que la présence systématique des trois champs XYZ ou HPB pour la gestion des position, échelle et rotation peut être trompeuse. Seuls certains champs sont actifs selon les cas pour les modes Vertex et Surface, ne vous étonnez donc pas si certaines de vos manipulations restent sans effet. Il est vraisemblable que le développeur ait conservé tous les champs pour permettre une utilisation différente avec le mode Use .csv file, mais je n’ai pas eu l’occasion de tester cette théorie.

Position. Seul le champ du milieu est actif, le champ en Y. Vous pouvez utiliser un shader Cinema 4D standard (une image bitmap, un bruit, une surface comme échiquier ou carrelage, etc) pour faire varier la position des instances en Y. Si un shader est utilisé, la valeur dans le champ en Y déterminera le déplacement maximal des instances : blanc = 100% de la valeur Y de déplacement, noir = 0% de la valeur Y de déplacement. Si aucun shader n’est utilisé, la valeur Y déterminera le déplacement global de toutes les instances. Bien entendu, ces déplacements sont relatifs à la surface de référence.

Scale. Dans le cas du Scale, les trois axes XYZ sont actifs, sauf si la case à cocher Uniform est active. Dans ce cas, seule la première valeur est prise en compte. Si on n’utilise pas de shader Cinema 4D standard (une image bitmap, un bruit, une surface comme échiquier ou carrelage, etc), toutes les instances seront mises à l’échelles à partir de leur axe dans les proportions indiquées par les trois axes. Une valeur de 1 sur chacun des axes équivaut à aucune mise à l’échelle, les proportions de base de l’objet sont conservées. Une valeur plus basse que 1 équivaut à une réduction alors qu’une valeur au-dessus de 1 correspond à un agrandissement. On peut mettre des valeurs différentes sur les trois axes pour modifier les proportions relatives des toutes les instances de rendu. Si on utilise un shader, les proportions relatives des instances définies dans les champs des axes seront conservées mais variables selon les valeurs du gris du shader : blanc = 100% des valeurs d’échelle, noir = 0% des valeurs d’échelle. Il n’est donc pas possible de faire varier une échelle sur un seul ou deux axes, les variations pilotées par le shader se font toujours sur les trois axes selon les proportions déterminées par les champs XYZ.

Rotation. Seul le premier champ est actif, le champ en H. Vous pouvez utiliser un shader Cinema 4D standard (une image bitmap, un bruit, une surface comme échiquier ou carrelage, etc) pour faire varier la rotation des instances en H. Si un shader est utilisé, la valeur dans le champ en H déterminera la rotation maximale des instances : blanc = 100% de la valeur de rotation H, noir = 0% de la valeur de rotation H. Si aucun shader n’est utilisé, la valeur H déterminera la rotation globale de toutes les instances. Bien entendu, l’axe de rotation est relatif aux normales de la surface de référence et aux valeurs de Normal Align et Up Vector. Attention, si le Up Vector est par exemple à 1 en X et 0 en Y et Z, la rotation s’effectuera tout de même sur l’axe Y. Ce serait donc une bonne idée de vérifier que les axes des objets à instancier soient dans le bon alignement (Y vertical) pour ne pas avoir de déconvenue.

Onglet Display

Dans l’onglet Display, on peut gérer l’affichage dans le viewport. À l’aide du paramètre Display Type, on peut choisir comment afficher les instances dans le viewport : invisibles ou sous forme de lignes, de cubes, de cercles ou d’objets complets. Cette option est très pratique pour un grand nombre d’instances, surtout si elle est combinée à l’option Display Rate qui permet de réduire le nombre d’instances affichées dans le viewport pour encore plus de réactivité (car même si les lignes sont très rapides à afficher, lorsqu’on atteint des millions d’instances, il peut être très utile d’en réduire le nombre). Enfin, lorsqu’on utilise plusieurs objets à instancier dans un même Octane Scatter, il est pratique de pouvoir les différencier à l’affichage dans le viewport par des couleurs. C’est ce que permettent les options Color de 1 à 8.

Onglet Effectors

Si vous disposez d’une version de Cinema 4D qui intègre Mograph, vous pouvez utiliser des Effecteurs et les intégrer ici pour encore plus de contrôle sur les instances. Le développeur du plugin Octane pour Cinema 4D propose toujours des ensembles de fichiers à télécharger. On peut généralement les trouver avec les annonces pour les nouvelles versions sur le forum dédié : https://render.otoy.com/forum/viewforum.php?f=85. Ce sont des fichiers à consommer sans modération si vous voulez creuser les possibilités offertes par l’association de Octane Scatter et Mograph.

Conclusion

Voilà tout ce que je peux vous apprendre sur l’objet Octane Scatter. C’est un objet qui peut sembler limité ou insuffisant pour certain mais qui recèlle néanmoins pas mal de possibilités pour tout qui veut bien creuser. De plus, il offre une excellente rapidité d’exécution, ce qui n’est pas à dédaigner lorsqu’on veut travailler avec des millions d’instances. Et enfin, il est offert avec le plugin Octane sans aucun surcoût, ce qui n’est pas mal non plus…

Ici je n’ai pas abordé toutes les nouvelles options de colorisation des instances mais cela va sans dire que cet outil est parfaitement compatible avec ces nouvelles possibilités. Pour comprendre comment ça fonctionne, je vous invite à nouveau à télécharger les derniers fichiers d’exemples sur le forum : https://render.otoy.com/forum/viewforum.php?f=85.

Voilà. J’espère que ce petit tour d’horizon de cet objet vous sera utile. N’hésitez pas à me faire part de vos commentaires ou remarques si vous décellez une erreur dans cet article. Merci de m’avoir lu.

Pin It on Pinterest

Share This