PDA

Voir la version complète : EasyObjectID V2



gr4ph0s
10/03/2016, 04h55
Un petit plugin qui permet de rajouter simplement les buffer_object ID en menu (car ceci est assez embettant à faire quand on a une 20e sur environ 50 plans ^^)


https://vimeo.com/237970730

lien de téléchargement :
http://graphos.xyz/files/Plugin/graph_EasyObjectID/graph_EasyObjectId.zip (http://graphos.fr/files/EasyObjectID_V1.7.zip)

code source:
https://gr4ph0s.github.io/EasyObjectId_V2/

Changelog
V1.1 :

Si un ID est déjà présent alors il ne sera pas rajouté

V1.2 :

Ajout d'un ID unique pour le plugin, on va dire que c'est les 2 nuits blanches dans la semaine qui m'ont fait oublier ceci :icon_wip:

V1.3 :

Support de Vray (Ajout du Post Effect si cela n'est pas fait). Activation automatique de multipass dans les paramètres de rendu

V1.4 :

Support de Arnold (Création d'un c4d-drivers si aucun driver existe dans la scène sinon le premier driver dans la scène est utilisé)

V1.5 :

Support de Octane (Render Layer)

V1.6 :

Support de Iray (Ajout du Post Effect si cela n'est pas fait). Activation automatique de multipass dans les paramètres de rendu + Ajout d'un icone

V1.7 :

Une petite fenêtre de dialogue s'ouvre pour définir les options de multipass des Object ID dans Vray.
Une fenêtre de dialogue s'ouvre pour choisir d'ajouter les render Layer et/ou Object id dans octane.
Les object Buffer standard inutilisé sont supprimé
Si un object buffer de C4D / Vray / Octane est dans la liste des object buffer à rendre mais qu'ils ne sont pas dans la scène (sur un tag appliqué à un objet) alors ceux si sont retiré.
Correction d'un bug avec Iray, qui lorsqu'un espace était dans le nom du masque, ce dernier n'étais pas pris en compte (il étais bien ajouté mais si on lançait 2 fois le plugin le masque était ajouté 2 fois)
Ajout de message de dialogue lors des différentes erreurs possibles.

V2:

Re-écriture complète en C++
Support de windows / mac R17 - R18 - R19
Support de toute les version de Vray (1.8, 1.9 et 3.4)
Support de Redshift

V2.1

Support de Win/Mac R16


Si vous voulez que je rajoute un autre moteur de rendu say it ! :)

Itsmil
10/03/2016, 06h09
Merciiiiii :icon_clap:

gr4ph0s
10/03/2016, 06h37
Désolé j'avais complètement zappé de réclamer un ID unique pour mon plugin du coup je t'invite à le re-télécharger afin d'éviter tout conflit possible !

http://graphos.fr/files/EasyObjectID_V1.2.zip

:icon_wip:

Aurety
10/03/2016, 08h50
Tip top ! Merci Maxime :icon_clap:

clemz
10/03/2016, 09h13
sympa ça :) ! merci pour le partage ;)

NiKo
10/03/2016, 11h17
ça c'est très cool! Est-ce que c'est imaginable qu'il soit compatible avec Vray, dont le système est exactement similaire? Un tag compo, cocher l'ID et aller créer à la mano l'ID correspondant dans le panneau multipass de vray... Très très chiant à faire...

Nico

gr4ph0s
10/03/2016, 11h51
Faut juste que je regarde comment c'est foutu mais logiquement c'est faisable :)

EDIT: Alors oui c'est faisable mais il faudra bien passer par le tag de compo de Vray et non le tag de compo de C4D :)

Huv
10/03/2016, 12h04
Quick Matte Pro (http://www.eyedesyn.com/product/quick-matte-pro-for-cinema-4d/) mais sais pas s'il gère vray...
;)

valkaari
10/03/2016, 15h05
Alors pour v-ray on en parlait un peu justement ici (http://frenchcinema4d.fr/showthread.php?80435-script-python-pour-compter-les-pass-dans-un-post-effects)


Comme vray gère les multipass avec sa propre interface j'suis pas certain que ça soit si "facile". Peut être faut il envoyer un message à phobos34 (http://frenchcinema4d.fr/member.php?202378-phobos34)

xs_yann
10/03/2016, 15h36
Il semblerait que les Render Elements soient des BaseObject dans un SceneHook.
Tu peux récupérer le SceneHook comme ça :


mpSceneHook = doc.FindSceneHook(1028268)

Après je sais pas trop s'il y a moyen de créer des Render Elements.
Faut chercher, si c'est faisable ça doit effectivement pas être trop compliqué, mais c'est pas certains qu'en Python on puisse faire ça.

NiKo
10/03/2016, 17h07
Ok...
Bon, c'est un peu casse-testiboulettes, mais ça demande juste 5 à 10 minutes d'attention, ces Obj-ID. Donc pas de quoi mettre 4 gars en mode brainstorming pendant une semaine... ;-)

gr4ph0s
12/04/2016, 04h37
Bon alors d'après mes recherche cela va être possible pour Vray pour le moment je rencontre un petit problème pour que ça fonctionne comme ça le fait actuellement avec le moteur de C4D.

Je n'arrive pas a récupérer un mpnode créer(j'arrive à les créer via un c4d.SpecialEventAdd(1028266,1409,1) il faut que la fenêtre du multiPassManager sois ouvert mais ça on peux l'ouvrir via c4d.CallCommand(1028266)).
Cependant je n'ai pas accès a eu pourtant ce sont des c4d.BaseObject 'mpnode' qui ont pour ID 1028267.
Ils sembleraient qu'ils soient dans le doc courant vu qu'ils sont dans le même document que celui d'un cube créé de façon normal, cependant via la console l'adresse mémoire est différente.Mais en faisant un getDocument().GetFirstObject() du mpnode récupéré via un link on obtient bien le premier objet de ma scène courante, du coup je me dis que ça dois pas être ça.

J'ai essayé de regardé au niveau des bits de masquage mais rien n'y fait je n'arrive pas a les retrouver dans ma liste d'objet(j'ai regardé que OHIDE et THIDE).

Pour le moment le seul moyen que j'ai trouvé c'est d'ajouter une pass dans le VrayMultiPass Manager puis de la glisser dans un champs de type Link et après avec des getDown()/ getNext() on s'en sort. Mais bon mon but c'est d'avoir que 1 click à faire, pas 3! :p

Bon sinon demain je m'attaque a Arnold ! La y'a des exemples dans leur documentation(comme quoi elle est vraiment complète leur doc ) donc ça devrais le faire :)
Si vous voulez d'autre moteur de rendu say it ! :)

valkaari
13/04/2016, 01h43
vu sous cet angle hein c'est de suite plus simple.... du coup, grâce à tes précisions, j'ai fait quelques recherches également.


J'ai utilisé l'outil fournis dans le SDK c++ (une fois compilé) pour regarder de plus près la scène.
17614



Il semble qu'il stock les pass vray dans un sceneHook comme l'a dit Yann, mais en plus qu'il les stock dans la piste "Motion" qui est visiblement réservé pour l'animation non linéaire..... puisqu'en utilisant la fonction (privé) GetNLARoot() ... ben on retrouve ses petit.


Reste que ça se mets bizarrement à jour tout ça ....


Autre chose, si tu mets un nombre n à la fin de la commande c4d.SpecialEventAdd(1028266,1409,<n>) cela crée n passID.




Tu peux surement parcourir le document pour récupérer les pass à créer, les id. Ouvrir la boite de dialogue comme tu disais, ajouter le bon nombre de pass et après en récupérant la NLARoot aller mettre à jour les id des pass....


C'est un peu bidouille mais bon ....

Si t'as ouvert la fenêtre et que t'as lancé c4d.SpecialEventAdd(1028266,1409,1) ce bout de code doit fonctionner.
Attention le c4d.VRAYRE_OBJID peut renvoyer "none" oO



mpSceneHook = doc.FindSceneHook(1028268)
motion = mpSceneHook.GetNLARoot() #récupère la track motion visiblement
objectID = motion.GetDown().GetNext().GetNext().GetNext() #aller jusqu'à la bonne entrée des pass d'objet
objID = objectID.GetDown() #la première pass d'objet.
print objID[c4d.VRAYRE_OBJID]

gr4ph0s
13/04/2016, 01h57
Tu peux surement parcourir le document pour récupérer les pass à créer, les id. Ouvrir la boite de dialogue comme tu disais, ajouter le bon nombre de pass et après en récupérant la NLARoot aller mettre à jour les id des pass....

c4d.VRAYRE_OBJID peut renvoyer "none" oO


Ouep c'est exactement à ça que j'avais pensé !


Oui je m'en été rendu compte mais on peu récupérer / set les données via le baseContainer du mpnode justement voici une petite liste avec les ID du baseContainer (je n'ai fait que pour l'object id vu que je m’intéressais uniquement a ceux-ci)
1000 = Type de Pass => (1404 = ObjectID) | type LONG
1300 = Id | type LONG
1400 = Aff Mat Obj | type BOOL
1202 = Consider AA | type BOOL
1050 = Enable PASS | TYPE BOOL

Du coup en passant par un objID.GetDataInstance().GetLong(1300) on a bien la valeur dans tout les cas. (haaa ce bon vieux Vray et sa magnifique intégration dans C4D... ^^)

En tout cas merci je n'aurais jamais regardé les pistes Motion(et je ne sais même pas ce que c'est mais bon ^^).

gr4ph0s
13/04/2016, 16h57
Et bien merci valkaari :)
Voici comment rajouter une passe sans avoir à passer par l'interface ou SpecialEventAdd



import c4d


def createNode(passID):
obj = c4d.BaseObject(1028267)
obj.SetName('Object_ID')
bc = obj.GetDataInstance()
bc.SetLong(1000,1404) #Pass ID (1404 = MultiPass Node)
bc.SetLong(1300,passID)#ID
bc.SetBool(1400,1) #Affect Matte object
bc.SetBool(1202,1) #Consider For Antialiasing
bc.SetBool(1050,1) #Enable the pass

return obj




def main():
mpSceneHook = doc.FindSceneHook(1028268)
motion = mpSceneHook.GetNLARoot() #récupère la track motion visiblement
objectID = motion.GetDown().GetNext().GetNext().GetNext() #aller jusqu'à la bonne entrée des pass d'objet

mpnodeMultiPass = createNode(6) #on créer un mpnode avec les setting voulu
mpnodeMultiPass.InsertUnder(objectID) #on insère dans la liste des pass

c4d.EventAdd()


if __name__=='__main__':
main()

xs_yann
13/04/2016, 17h24
Bien joué Val, fallait le trouver. :thumbup1:

Je suppose que vous avez vu le fichier .py dans certaines versions de VrayBridge :


# VRay Multipass Manages scripts, work in progress.
# This are Python examples, but it should work also with C++ and COFFEE.
# There probably will be more powerful system for C++ later...

c4d.CallCommand(1028266) # Open V-Ray Multipass Manager

# V-Ray Multipass Manager need to be open to call this >>>
c4d.CallCommand(1028266,command) # call MP Command

c4d.CallCommand(1028266,1000) # add all nodes
c4d.SpecialEventAdd(1028266,1000) # add all nodes

c4d.SpecialEventAdd(1028266,1409,12) # add 12 Object Select nodes
c4d.SpecialEventAdd(1028266,1410,14) # add 14 Material Select nodes

# Available Commands
'''
ADDALL = 1000,
ADDSTANDARD = 1001,
ADDRAW = 1002,
ADDID = 1003,
ADDSPECIALS = 1004,

ADD_NODE_ATMOSPHERICS = 1100,
ADD_NODE_DIFFUSE,
ADD_NODE_REFLECTION,
ADD_NODE_REFRACTION,
ADD_NODE_SELFILLUM,
ADD_NODE_SHADOW,
ADD_NODE_SPECULAR,
ADD_NODE_LIGHTING,
ADD_NODE_GI,
ADD_NODE_CAUSTICS,
ADD_NODE_SSS,
ADD_NODE_REFLFILTER,
ADD_NODE_REFRFILTER,
ADD_NODE_BACKGROUND,
ADD_NODE_MATTESHADOW,
ADD_NODE_WIRECOLOR,

ADD_NODE_RAWGI = 1200,
ADD_NODE_RAWLIGHT,
ADD_NODE_RAWSHADOW,
ADD_NODE_RAWREFLECTION,
ADD_NODE_RAWREFRACTION,

ADD_NODE_SAMPLERATE = 1300,
ADD_NODE_VELOCITY,
ADD_NODE_COVERAGE,
ADD_NODE_POINTPOSPASS,
ADD_NODE_NORMALS,
ADD_NODE_BUMPNORMALS,
ADD_NODE_ZDEPTH,

ADD_NODE_MULTIMATTE = 1400,
ADD_NODE_OBJSELECT = 1404,
ADD_NODE_MATSELECT = 1405,
ADD_NODE_EXTRATEX = 1407,

ADD_NODE_MULTI_OBJSELECT = 1409, #add 10 nodes
ADD_NODE_MULTI_MATSELECT = 1410, #add 10 nodes
'''

C'est là que y'a le peu d'info sur Vray + Python.

Attention Gr4ph0s, ton code ne fonctionnera pas en R17, les mpnode semblent être insérés dans le dernier node enfant du MpSceneHook (retourné par GetBranchInfo) et non systématiquement . Malheureusement GetBranchInfo n'est pas dispo en Python.

http://www.xsyann.com/fc4d/mpscenehook.png

gr4ph0s
13/04/2016, 18h52
Et bien merci xs_yann, oui j'avais vu ce petit code de python mais bon au final je ne vais rien utilisé de ceci a par les ID :p

Tampis pour la R17 pour le moment je vais faire pour toutes les autres versions(après pourquoi pas utiliser une DLL,si il n'y a qu'une seule fonction qui manque je devrais réussir a me débrouiller) j'avais déjà fait ça sur un autre projet ou en Autoit j’appelais des fonction en C++ dans une DLL.

Voici un code qui marchera à tout les coups car dans mon précédente on devais avoir ouvert la fenêtre (qui initialise des mpnode Intermedaire )



import c4d


def createMasterNode():
obj = c4d.BaseObject(1028267)
obj.SetName('Object_ID')
bc = obj.GetDataInstance()
bc.SetLong(1000,1500) #Pass ID (1500 = Container Pass)
bc.SetBool(1050,1) #Enable the pass

return obj


def createNode(passID):
obj = c4d.BaseObject(1028267)
obj.SetName('Object_ID_' + str(passID))
bc = obj.GetDataInstance()
bc.SetLong(1000,1404) #Pass ID (1404 = MultiPass Node)
bc.SetLong(1300,passID)#ID
bc.SetBool(1400,1) #Affect Matte object
bc.SetBool(1202,1) #Consider For Antialiasing
bc.SetBool(1050,1) #Enable the pass

return obj




def main():
mpSceneHook = doc.FindSceneHook(1028268)
motionNode = mpSceneHook.GetNLARoot() #récupère la track motion visiblement


if motionNode.GetDown() is None : #on check si un master node existe deja sinon on le crée
masterNode = createMasterNode()
masterNode.InsertUnder(motionNode)
else:
masterNode = motionNode.GetDown().GetNext().GetNext().GetNext()

mpnodeMultiPass = createNode(6) #on créer un mpnode avec les setting voulu
mpnodeMultiPass.InsertUnder(masterNode) #on insère dans la liste des pass


c4d.EventAdd()


if __name__=='__main__':
main()


EDIT :
mais sa fait crash si on veux rajouter d'autre pass... Bon bha faudra ouvrir la boite de dialogue :p

valkaari
13/04/2016, 20h12
ben sans le GetBranchInfo je donne ma langue au chat pour le moment.
Le pire c'est que ça doit être un bug à la noix puisqu'il crée l'enfant VrayMpSH et il met rien dedans.

Enfin, même, ça reste problématique de trouver les enfants si on a pas toutes les fonctions.

xs_yann
13/04/2016, 20h54
Tampis pour la R17 pour le moment je vais faire pour toutes les autres versions(après pourquoi pas utiliser une DLL,si il n'y a qu'une seule fonction qui manque je devrais réussir a me débrouiller) j'avais déjà fait ça sur un autre projet ou en Autoit j’appelais des fonction en C++ dans une DLL.


Oui ça peut être une bonne solution, tu peux t'inspirer des travaux de Niklas Rosenstein pour te créer un module Python à partir de code cpp : https://github.com/nr-plugins/apex



ben sans le GetBranchInfo je donne ma langue au chat pour le moment.
Le pire c'est que ça doit être un bug à la noix puisqu'il crée l'enfant VrayMpSH et il met rien dedans.


Oui j'ai vu ça. Au final c'est pas plus mal puisque ça permet de récupérer le node avec GetNLARoot() :icon_mrgreen:.
Espérons qu'une meilleure API soit fournie avec la nouvelle version de VrayForC4D (VRay 3 core)...

gr4ph0s
13/04/2016, 21h23
Bon bha voila une petite mise à jour pour que ça sois compatible avec Vray 1.9 (je n'ai pas de version antérieure mais ça m'étonnerais que ça fonctionne) :)
Pour que ça fonctionne il suffit que le renderEngine sois sur VrayBridge.
Comme vous l'avez peut être lu ceci n'est pas compatible avec la R17

http://graphos.fr/files/EasyObjectID_V1.3.zip

Pour vray l'id 0 est considéré comme null donc je ne l'ajoute pas.
Et si vous n'avais pas mis de post Effect ça le rajotue automatiquement !
De plus je n'utilise pas vraiment Vray donc j'ai mis les options comme elles le sont par default, si vous voulez changer dites le :) (Consider For AA de décoché et affect Matte Object de coché).


@xs_yann: merci pour le lien effectivement j'étais tombé dessus :)
Et oui après je pense que c'est la façon que C4D gère les anciens truc vu que Vray est compatible R15/16/17.

gr4ph0s
14/04/2016, 00h33
Je me permet de faire un double post :)

Petite mise à jour, le plugin supporte maintenant Arnold, si il y a un driver en cours les passes sont crée dans ce dernier sinon je crée un c4d_display driver donc pensez bien a le changer ! ;)

EDIT :
Une autre mise à jour, le plugin supporte maintenant Octane. Enfin les layers mask d'octane, vu que octane a une pass d'object_id.
http://graphos.fr/files/EasyObjectID_V1.5.zip

Si vous voulez un autre moteur de rendu say it ! :)

gr4ph0s
20/04/2016, 23h47
http://graphos.fr/files/EasyObjectID_V1.6.zip

Petite mise à jour, le plugin supporte maintenant Iray. (Ajout du Post Effect si cela n'est pas fait). Activation automatique de multipass dans les paramètres de rendu

J'ai aussi rajouté un icone, c'est plus facile pour le docker dans l'interface :)

J'ai aussi pris contact avec corona et pour le moment il est impossible de rajouter des pass cependant normalement ceci devrais être possible dans l'alpha 6. Donc je rajouterais corona par la suite lors de la sortie de son alpha6 :)

Aurety
21/04/2016, 00h02
T'as pas un job d'étudiant à faire toi ? Parce que là, c'est plutôt du job de professionnel :icon_prie:

gr4ph0s
21/04/2016, 00h09
Haha merci.
Faut bien occuper le temps pendant les lives de NAB...

17714

Justement je travail pour l'école je fait un perso pour notre prochain cours sur le rigging :p Alors moi j'attend ça !!

Bon j'ai encore du taff sur toute la partie supérieur du visage

miroof
21/04/2016, 00h19
Haha merci.
Faut bien occuper le temps pendant les lives de NAB...


lol a part imaginary forces c'est pas terrible aujourd'hui et là il reste le mec qui s'occupe du pluging c4d houdini et ses présentations sont pas terribles.

yayaprod
21/04/2016, 08h30
Salut Maître gr4ph0s,
T'arrive t-il de dormir un peu ? grand génie que tu es ! :icon_wavey:
Yaya °)

pxlntwrk
21/04/2016, 09h33
salut,
c'est clair
je veux un Graphos intégré à ma R18..

Aurety
21/04/2016, 09h58
aha ! C'est le moment de dire que tu cherches un stage en alternance Maxime !! :icon_grin:
C'est clair que tu deviens un membre influent sur ce forum.. Bravo pour tout ce travail, içi et à l'école.. Le seul gars qui suit mon cours sur Houdini et qui me dépatouille quand je bredouille :sweatdrop:

clemz
21/04/2016, 10h38
haha il est survolté le Gr4phos ;) !!

Huv
21/04/2016, 11h04
http://graphos.fr/files/EasyObjectID_V1.6.zip

Petite mise à jour, le plugin supporte maintenant Iray. (Ajout du Post Effect si cela n'est pas fait). Activation automatique de multipass dans les paramètres de rendu
:icon_thumbsup::icon_thumbsup::icon_thumbsup:
Ca me sidère qu'un truc pareil ne soit toujours pas implante directement dans c4d :whistling:
Maxon... sort toi les doigts un peu... :whistling: ou mets y les... mais bouge toi un peu :whistling:

NiKo
21/04/2016, 13h17
ça marche nickel avec Vray! Très grand merci Gr4phOs :icon_wavey:

gr4ph0s
21/04/2016, 19h45
@mirrof: oui c'est sur, mais bon c'est toujours bon de voir comment les autres travail :)

@yayaprod: non, bien sur que non quelle question, je suis un robot.

@pxlntwrk : haha c'est gentil, surtout quand on voit ton travail.

@aurety : Merci et si une personne est intéressé qu'elle n'hésite pas à me contacter. De toute façon je vous contacteraient d'ici peu de temps :p

@clemz : merci et bien le bonjour ;)

@Huv : A vrai dire c'est plutôt au moteur de rendu externe qu'il faut en vouloir. Par exemple avec Octane il les rajoutent automatiquement. Pareille avec Arnold.

@Niko : merci du retour !


En tout cas merci à tous, cela fait plaisir.

Je pense rajouter une petite boite de dialogue pour pouvoir décider des options. Par exemple pour Octane activer ou non les object ID ou les layer ID, pour vray le force AA ou le matt object. Donc stay tuned !!! :)

gr4ph0s
23/04/2016, 03h16
je me permet de faire un double post encore.

Version 1.7, une grosse mise à jour d'un point du vue du code mais pas vraiment exceptionnel en terme de features :p

Une petite fenêtre de dialogue s'ouvre pour définir les options de multipass des Object ID dans Vray.
Une fenêtre de dialogue s'ouvre pour choisir d'ajouter les render Layer et/ou Object id dans octane.
Les object Buffer standard inutilisé sont supprimé
Si un object buffer de C4D / Vray / Octane est dans la liste des object buffer à rendre mais qu'ils ne sont pas dans la scène (sur un tag appliqué à un objet) alors ceux si sont retiré.
Correction d'un bug avec Iray, qui lorsqu'un espace était dans le nom du masque, ce dernier n'étais pas pris en compte (il étais bien ajouté mais si on lançait 2 fois le plugin le masque était ajouté 2 fois)
Ajout de message de dialogue lors des différentes erreurs possibles.



Voili,voilou et la petite vidéo un peu plus propre:
https://www.youtube.com/watch?v=sIFDk7jUS-k&feature=youtu.be

http://graphos.fr/files/EasyObjectID_V1.7.zip

La prochaine maj sera surement pour corona, sauf si un bug est trouvé ^^.

valkaari
23/04/2016, 04h40
je me permet de faire un double post encore.

non mais la, par contre, faut arrêter de déconner !!! :ban:

gr4ph0s
23/04/2016, 05h05
non mais la, par contre, faut arrêter de déconner !!! :ban:


Moi qui pensez que t'allais me disputer pour ma gestion de mon UI (même po :'( je suis déçu :p)

Promis dans la prochaine version je fait une class avec une UI dynamique ^^

clemz
23/04/2016, 11h25
merci pour l'update Mister Gr4phos :) .

j'utilise ton plugin sur un petit projet de cochons ! j'ai pas mal d'éléments dont je veux les IDs donc c'est parfait !

gr4ph0s
17/10/2017, 17h36
Mise à jour !
Tout est en C++ maintenant,

Les versions supportées sont win/Mac R16 (pas merci valkaari au final j'ai refait les boucles ! :icon_mrgreen:)
Cette mise à jour rajoute le support de toute les versions de Vray sur toute les versions de C4D.
Ainsi que le support de Redshift.


https://vimeo.com/237970730

lien de téléchargement :
http://graphos.xyz/files/Plugin/graph_EasyObjectID/graph_EasyObjectId.zip (http://graphos.fr/files/EasyObjectID_V1.7.zip)

code source:
https://gr4ph0s.github.io/EasyObjectId_V2/

valkaari
19/10/2017, 20h34
pas merci valkaari au final j'ai refait les boucles ! :icon_mrgreen:

chez moi ça fonctionne hein :whistling: