Script per assegnare un unico ID a più materiali

Forum dedicato a tutti i motori di rendering come Vray, Corona, Octane, RedShift, inserite i vostri rendering e postate le vostre problematiche.

Moderatori: Arkimed, natas, visualtricks, cappellaiomatto

Rispondi
  • Advertising
IoAro
Messaggi: 51
Iscritto il: ven lug 30, 2010 1:06 pm

Script per assegnare un unico ID a più materiali

Messaggio da IoAro »

Buongiorno a tutti,
come da titolo vorrei sapere se fosse possibile creare uno script che possa assegnare un unico ID a dei materiali selezionati. Questo mi ritornerebbe molto utile perché in progetti complessi dove voglio utilizzare il multipass mi risulta difficile controllare/impostare gli ID di tutti i materiali, soprattutto perché se si selezionano materiali di diversa natura (displacement material, ovverride material, advanced material, ecc...) la casella dell'ID non risulta più visibile e quindi bisogna ricercare e selezionare solo i materiali advanced.

Grazie e buona giornata! :)
Avatar utente
masterzone
Site Admin
Messaggi: 10360
Iscritto il: ven set 17, 2004 5:34 pm
Località: Verona

Re: Script per assegnare un unico ID a più materiali

Messaggio da masterzone »

ricordo che c'era un plugin che faceva questa cosa...ma non ricordo se c'e' ancora, sicuramente e' un passa mano tra utenti :)
IoAro
Messaggi: 51
Iscritto il: ven lug 30, 2010 1:06 pm

Re: Script per assegnare un unico ID a più materiali

Messaggio da IoAro »

Grazie @masterzone,
si effettivamente ho provato a cercarlo in internet sotto forma di script o anche plugin ma ad oggi niente...
Avatar utente
visualtricks
Moderatore
Messaggi: 3562
Iscritto il: gio set 23, 2004 5:13 pm
Località: Pistoia

Re: Script per assegnare un unico ID a più materiali

Messaggio da visualtricks »

ciao, io ne avevo fatto uno per me, è molto basic e non fa distinzioni tra i tipi di materiali

Codice: Seleziona tutto

import c4d
from c4d import gui

def main():
   
   #mats = doc.GetMaterials()    #tutti i materiali
    mats = doc.GetActiveMaterials()  # solo materiali selezionati
   
    if not mats:
        gui.MessageDialog('Select some materials')
        return
    k = 1
    doc.StartUndo()
    for mat in mats:
        name = mat.GetName()+" ID"+str(k)
        print name
        doc.AddUndo(c4d.UNDOTYPE_CHANGE,mat)
        mat[c4d.VRAYMATERIAL_ID] = k
        mat.SetName(name)
        k = k+1
    doc.EndUndo()
    c4d.EventAdd()

if __name__=='__main__':
    main()
Allegati
QuickMatID.py.zip
(510 Byte) Scaricato 82 volte
IoAro
Messaggi: 51
Iscritto il: ven lug 30, 2010 1:06 pm

Re: Script per assegnare un unico ID a più materiali

Messaggio da IoAro »

Come sempre risolutivo, visualtricks!

Ho provato a modificare leggermente lo script per adattarlo ma non so se sono riuscito a compilarlo in maniera decente... che dici?

import c4d
from c4d import gui
#Welcome to the world of Python


def main():

mats = doc.GetMaterials() #tutti i materiali

if not mats:
gui.MessageDialog('Select some materials')
return
doc.StartUndo()
for mat in mats:
doc.AddUndo(c4d.UNDOTYPE_CHANGE,mat)
mat[c4d.VRAYMATERIAL_ID] = 0
mat[c4d.VRAYSTDMATERIAL_ID] = 0
mat[c4d.VRAYMDLMATERIALS_ID] = 0
mat[c4d.VRAYALHAIRMATERIAL_ID] = 0
mat[c4d.VRAYALSURFACEMATERIAL_ID] = 0
mat[c4d.VRAYSTOCHASTICFLAKESMATERIAL_ID] = 0
mat[c4d.VRAYSKINMATERIAL_ID] = 0
mat[c4d.VRAYHAIRMATERIAL_ID] = 0
mat[c4d.VRAYCARPAINTMATERIAL_ID] = 0
mat[c4d.VRAYFASTSSS2MATERIAL_ID] = 0
mat[c4d.VRAYMTLOSL_ID] = 0
mat[c4d.VRAYVRMATMATERIAL_ID] = 0
doc.EndUndo()
c4d.EventAdd()

if __name__=='__main__':
main()
  • Advertising
Rispondi