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 ^^)
lien de téléchargement :
http://graphos.xyz/files/Plugin/graph_EasyObjectID/graph_EasyObjectId.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
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 !
Dernière modification par gr4ph0s ; 17/10/2017 à 17h39.
SDK Specialist
MAXON Computer GmbH
Merciiiiii
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
SDK Specialist
MAXON Computer GmbH
Tip top ! Merci Maxime
kenavo !! // Pinterest KAMIGAZ®
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
--- www.aerografik.fr ---
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
Dernière modification par gr4ph0s ; 10/03/2016 à 12h40.
SDK Specialist
MAXON Computer GmbH
Quick Matte Pro mais sais pas s'il gère vray...
Il semblerait que les Render Elements soient des BaseObject dans un SceneHook.
Tu peux récupérer le SceneHook comme ça :
Après je sais pas trop s'il y a moyen de créer des Render Elements.Code PHP:
mpSceneHook = doc.FindSceneHook(1028268)
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... ;-)
--- www.aerografik.fr ---
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 !
SDK Specialist
MAXON Computer GmbH
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.
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
Code: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]
Dernière modification par valkaari ; 13/04/2016 à 01h50.
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 ^^).
Dernière modification par gr4ph0s ; 13/04/2016 à 16h59.
SDK Specialist
MAXON Computer GmbH
Et bien merci valkaari
Voici comment rajouter une passe sans avoir à passer par l'interface ou SpecialEventAdd
Code: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()
SDK Specialist
MAXON Computer GmbH
Bien joué Val, fallait le trouver.
Je suppose que vous avez vu le fichier .py dans certaines versions de VrayBridge :
C'est là que y'a le peu d'info sur Vray + Python.Code PHP:
# 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
'''
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.
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 )
EDIT :Code: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()
mais sa fait crash si on veux rajouter d'autre pass... Bon bha faudra ouvrir la boite de dialogue :p
Dernière modification par gr4ph0s ; 13/04/2016 à 20h39.
SDK Specialist
MAXON Computer GmbH
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.
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
Oui j'ai vu ça. Au final c'est pas plus mal puisque ça permet de récupérer le node avec GetNLARoot() .
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.
Dernière modification par gr4ph0s ; 13/04/2016 à 21h45.
SDK Specialist
MAXON Computer GmbH
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 !
Dernière modification par gr4ph0s ; 14/04/2016 à 03h32.
SDK Specialist
MAXON Computer GmbH
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
Dernière modification par gr4ph0s ; 20/04/2016 à 23h55.
SDK Specialist
MAXON Computer GmbH
T'as pas un job d'étudiant à faire toi ? Parce que là, c'est plutôt du job de professionnel
kenavo !! // Pinterest KAMIGAZ®
Salut Maître gr4ph0s,
T'arrive t-il de dormir un peu ? grand génie que tu es !
Yaya °)
Les détails font la perfection, et la perfection n'est pas un détail.http://yayaprodtm.cgsociety.org/
LdV.
salut,
c'est clair
je veux un Graphos intégré à ma R18..
::::::::::::::
pxlntwrk.net
aha ! C'est le moment de dire que tu cherches un stage en alternance Maxime !!
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
kenavo !! // Pinterest KAMIGAZ®
haha il est survolté le Gr4phos !!