PDA

Voir la version complète : modifier les reglages de Vray en python



phobos34
11/12/2012, 22h20
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

xs_yann
13/12/2012, 13h50
Salut,

Voilà un script qui récupère le VideoPost VrayBridge (ou, à defaut, le créer) puis qui modifie un paramètre :

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()

Fait bien attention à passer par le container du VideoPost et pas directement
vray[c4d.VP_VRAYBRIDGE_SHADOWS] = True car, de mémoire, cela fait planter c4d sur une affectation de booléen.

Bon courage. ;)

phobos34
13/12/2012, 15h04
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

xs_yann
13/12/2012, 15h48
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 :

<c4d.BaseList2D object called 'Global Illumination/Global Illumination' with ID 1021096 at 0x103e01390>

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.



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)

Voilà deux bouts de code équivalents. Tu remplaces l'id par celle dont tu veux la constante et la console te sort ça :


MSG_GINEW = 1021096
VPglobalillumination = 1021096

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..)

phobos34
13/12/2012, 16h42
merci xs_yann (http://frenchcinema4d.fr/member.php?60303-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

xs_yann
13/12/2012, 16h50
;)

et pour voir ce qu'il y a dans un BaseContainer c'est ça :


# CINEMA 4D Python Documentation
def iter_container(bc):
for index, value in bc:
print "Index: %i, Value: %s" % (index, str(value))

phobos34
25/04/2013, 19h43
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

César Vonc
02/05/2013, 22h31
Ç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.

phobos34
03/05/2013, 11h42
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