Salut,
je voulais savoir si quelqu’un pourrais me donner la ligne de commande (ou un exemple de code) pour modifier
les réglages de vray via un script python.
Par avance merci
Salut,
Voilà un script qui récupère le VideoPost VrayBridge (ou, à defaut, le créer) puis qui modifie un paramètre :
Fait bien attention à passer par le container du VideoPost et pas directementCode PHP:
import c4d
VRAYBRIDGE = 1019782
def GetVrayVideoPost(rd):
"""Returns the vray video post or create it.
"""
vp = rd.GetFirstVideoPost()
while vp:
if vp.CheckType(VRAYBRIDGE):
return vp
vp = vp.GetNext()
vrayVideoPost = c4d.BaseList2D(VRAYBRIDGE)
rd.InsertVideoPostLast(vrayVideoPost)
rd[c4d.RDATA_RENDERENGINE] = VRAYBRIDGE
return vrayVideoPost
def main():
rd = doc.GetFirstRenderData()
vray = GetVrayVideoPost(rd)
bc = vray.GetData()
bc[c4d.VP_VRAYBRIDGE_SHADOWS] = False
vray.SetData(bc)
c4d.EventAdd(c4d.MSG_UPDATE)
if __name__=='__main__':
main()
car, de mémoire, cela fait planter c4d sur une affectation de booléen.Code PHP:
vray[c4d.VP_VRAYBRIDGE_SHADOWS] = True
Bon courage.
Dernière modification par xs_yann ; 13/12/2012 à 13h05.
merci beaucoup xs_yann, ça c'est vraiment top !
une dernière question, il existe une ligne de commande (comme dans 3ds max) pour affiche les paramètre qui sont modifiable ?
Par exemple la commande "VP_VRAYBRIDGE_SHADOWS" tu l'as trouver comment ?
encore merci
C'est très simple, Script > Console, ensuite tu cliques sur le nom du paramètres que tu veux et tu fais un glisser-déposer (drag-and-drop) jusqu'au champ texte de la console (ça fonctionne également dans toute la zone d'édition du script manager ainsi que de l'expression editor).
Si tu veux une liste, tu peux aller voir dans "VrayBridge/res/strings_us/description/vpvraybridge.str" (les constantes associées aux nom des paramètres) ou "VrayBridge/res/description/vpvraybridge.h" (les constantes associées à leur id).
Par contre pour les objets, ce n'est pas tout à fait pareil, par exemple le résultat du drag-and-drop du VideoPost GI :
On a la classe de l'objet, son nom, son id et son adresse mémoire ; ce qui nous interesse c'est l'ID : 1021096.Code PHP:
<c4d.BaseList2D object called 'Global Illumination/Global Illumination' with ID 1021096 at 0x103e01390>
Voilà deux bouts de code équivalents. Tu remplaces l'id par celle dont tu veux la constante et la console te sort ça :Code PHP:
def main():
for key, value in c4d.__dict__.iteritems():
if value == 1021096:
print "%s = %s\n" % (key, value)
for key in dir(c4d):
value = getattr(c4d, key)
if value == 1021096:
print "%s = %s\n" % (key, value)
Et là tu sais que celui que tu cherches est le 2e car il commence par VP (pour VideoPost, O pour les Objets, T pour les Tags, M pour les Materiaux, etc..)Code PHP:
MSG_GINEW = 1021096
VPglobalillumination = 1021096
Dernière modification par xs_yann ; 13/12/2012 à 15h07.
merci xs_yann
c'est bien plus clair maintenant, je ne trouver jamais le nom des commande et du coup je demander sur le
forum.
encore merci
et pour voir ce qu'il y a dans un BaseContainer c'est ça :
Code PHP:
# CINEMA 4D Python Documentation
def iter_container(bc):
for index, value in bc:
print "Index: %i, Value: %s" % (index, str(value))
J'ai un petit problème,
j'arrive a modifier tous les réglages de vray via python (merci xs_yann) sauf 2 paramétrés
impossible de modifier le chemin et le nom des fichiers d'irradiance map et de ligtcahe ?
j'utilise le code suivant pour modifier le nom de l'irradiance maps:
bc[c4d.VP_VRAYBRIDGE_IRRADAUTOSAVEFILE2])= "c://irradiance_map"
je n'ai pas d'erreur mais je n'ai rien dans l'interface graphique (sous cinema 4D r14)
et j'ai bien "c://irradiance_map" quand je fait
pathname = bc[c4d.VP_VRAYBRIDGE_IRRADAUTOSAVEFILE2]
print pathname
je ne comprend pas ?
Par avance merci
Ça ressemble au même problème insoluble qu'avec le chemin des Xref, hélas.
Essaie néanmoins avec :
bc.SetData(c4d.VP_VRAYBRIDGE_IRRADAUTOSAVEFILE2, "c://irradiance_map")
On ne sait jamais.
merci César
malheureusement cela ne marche toujour pas,
je viens de faire la mise a jour vers la version r14.041 mais pas de changement
Il y a un vrai bug (soit de cinema 4d ou de vray)
on peut piloter l’interface graphique en python dans c4d ?
car via l'interface graphique cela marche très bien, l'idée est d'avoir le focus sur la fenêtre puis sur le champs voulu
ou l'on indique le chemin et le nom du fichier. (j'ai fait une fonction comme cela pour corriger un bug sous 3ds max, ca marche impec !)
merci