Voir la version complète : EasyObjectID V2
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 ! :)
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:
Tip top ! Merci Maxime :icon_clap:
sympa ça :) ! merci pour le partage ;)
ç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
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 :)
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)
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.
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... ;-)
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]
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 ^^).
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()
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
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.
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)...
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.
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 ! :)
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 :)
T'as pas un job d'étudiant à faire toi ? Parce que là, c'est plutôt du job de professionnel :icon_prie:
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
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..
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:
haha il est survolté le Gr4phos ;) !!
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:
ça marche nickel avec Vray! Très grand merci Gr4phOs :icon_wavey:
@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 !!! :)
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:
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 ^^
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 !
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:
Powered by vBulletin® Version 4.2.1 Copyright © 2024 vBulletin Solutions, Inc. Tous droits réservés