Boutique Cinema 4D
Affichage des résultats 1 à 4 sur 4

Discussion: Coup de pouce sur un script python basique...

  1. #1
    Squatteur Avatar de Helium
    Date d'inscription
    novembre 2009
    C4D version
    R13 Broadcast
    OS
    OS X 10.6
    Messages
    188

    Coup de pouce sur un script python basique...

    Salut la compagnie,

    Ça fait quelques années !! J'ai toujours un oeil sur le forum de loin, mais très pris par d'autres projets ces derniers temps, énormément de boulot en 2D, rénovation de ma maison, ou mon statut nouvellement acquis de papa

    Bref, j'essai d'optimiser mon workflow et je suis en train de me faire un setup studio standard avec vray qui soit contrôlable facilement et rapidement. Xpresso m'a toujours permis d'arriver à mes fins ; par contre pour modifier mes paramètres de rendus (arrêtez moi si je me trompe) il me semble qu'Xpresso ne suffise plus et qu'il faille passer par des noeuds en Python.

    Je suis une bille en programmation, quelques base de actionscirpt et un peu de html.

    D'habitude j'arrive à me dépatouiller avec des morceaux pris à droite à gauche ; pour gérer la taille de mon rendu j'ai pu écrire un truc tout simple qui fonctionne:
    Code:
    import c4d
    #Welcome to the world of Python
    def main():
        global Output1
        Output1 = Input1
        global Output2
        Output2 = Input2
        rd = doc.GetActiveRenderData()
        rd[c4d.RDATA_XRES] = Output1
        rd[c4d.RDATA_YRES] = Output2
    Je souhaiterai maintenant avoir un contrôle sur l'IG, rien de fou, juste un menu déroulant avec 3 ou 4 niveaux de qualité (qui contrôlerait donc les différents paramètres de l'irradiance map et du light cache, le max rate, etc etc)

    J'ai donc d'une part créé un user data qui renvoi 3 valeurs possibles : 0, 1 ou 2 en fonction de la qualité d'IG souhaitée.

    D'autre part j'ai non sans peine trouvé un petit bout de code qui me permet d'agir sur les paramètres (enfin un seul pour le moment mais le reste ira tout seul) de l'IG de vray :
    Code:
    import c4d
    #Welcome to the world of Python
    
    def check_vray():
        doc = c4d.documents.GetActiveDocument() ## Sets Active Document
        rdata = doc.GetActiveRenderData() ## Sets Active RenderData
        
        post = rdata.GetFirstVideoPost() ## Returns the first Video Post Effect
        if post == None: return ## If no Video Post Effect is found the script is stopped
        
        while post:
            if post.GetType() == 1019782: ## if Video Post Effect is V-Ray Bridge
                post[c4d.VP_VRAYBRIDGE_IRRADMAXRATE] = -1 ## Here you can put your code
                post = None ## changes post object to none so the loop is broken
              
            else:
                
                post = post.GetNext() ## Try the next Post-Effect
                    
        c4d.EventAdd() ## refreshes the interface
    
    if __name__=='__main__':
        check_vray()
    Je suppose qu'il ne manque pas grand chose, quelques instructions conditionnelles bien placées, j'ai bien essayé, mais à l'évidence je suis complètement dépassé et j'ai de grosse lacunes de syntaxe...

    Il y aurait un codeur charitable pour me venir en aide ? Allez, je vous laisse vous foutre de ma gueule en échange.

    Merci !!!
    Dernière modification par Helium ; 06/11/2017 à 13h10.

  2. #2
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    Pour le noeud xpresso tu peux aussi utiliser tes ports d'entrée et du coup n'avoir qu'un seul output à relier à un result pour que ça fonctionne

    Code:
    import c4d
    #Welcome to the world of Python
    def main():
        global Output1
        Output1 = 0.0
        rd = doc.GetActiveRenderData()
        rd[c4d.RDATA_XRES] = Input1
        rd[c4d.RDATA_YRES] = Input2

    pour l'autre partie, qu'est ce qui te bloque du coup ?

  3. #3
    Squatteur Avatar de Helium
    Date d'inscription
    novembre 2009
    C4D version
    R13 Broadcast
    OS
    OS X 10.6
    Messages
    188
    Merci pour l'optimisation du 1er code je prends note !

    Pour reformuler simplement ce que je cherche à faire pour l'autre partie : je voudrais faire varier la valeur de [c4d.VP_VRAYBRIDGE_IRRADMAXRATE] en fonction d'une valeur Input

    Un truc du genre (qui ne marche pas en l'état)
    Code:
    def main():
          global Output4
          Output4 = Input4
    
    def check_vray():
          doc = c4d.documents.GetActiveDocument() ## Sets Active Document
          rdata = doc.GetActiveRenderData() ## Sets Active RenderData
     
          post = rdata.GetFirstVideoPost() ## Returns the first Video Post Effect
          if post == None: return ## If no Video Post Effect is found the script is stopped
     
          while post:
             if post.GetType() == 1019782: ## if Video Post Effect is V-Ray Bridge
                if Input4 == 0 
                    post[c4d.VP_VRAYBRIDGE_IRRADMAXRATE] = -2
                elif Input4 == 1
                    post[c4d.VP_VRAYBRIDGE_IRRADMAXRATE] = -1
                else
                    post[c4d.VP_VRAYBRIDGE_IRRADMAXRATE] = 0
                    post = None ## changes post object to none so the loop is broken
     
             else:
     
                post = post.GetNext() ## Try the next Post-Effect
     
        c4d.EventAdd() ## refreshes the interface
    
    if __name__=='__main__':
        check_vray()
    Merci !
    Dernière modification par Helium ; 07/11/2017 à 11h11.

  4. #4
    Squatteur Avatar de Helium
    Date d'inscription
    novembre 2009
    C4D version
    R13 Broadcast
    OS
    OS X 10.6
    Messages
    188
    Ok ça marche, merci le frangin, il est plus pote avec le code que moi. J'ai pas tout saisi mais il y avait apparament un problème avec la déclaration des variables.

    Merci d'avoir pris le temps de regardé quand même. Voilà mon code qui marche :

    Code:
    import c4d
    #Welcome to the world of Python
    def main():
        global Output4
        Output4 = Input4
        
        if Input4 == 0 :
            irradmaxrate = -2
            irradsubdiv = 50
        elif Input4 == 1 :
            irradmaxrate = -1
            irradsubdiv = 50
        else :
            irradmaxrate = 0
            irradsubdiv = 70
            
        doc = c4d.documents.GetActiveDocument() 
        rdata = doc.GetActiveRenderData() 
        
        post = rdata.GetFirstVideoPost() 
        if post == None: return 
        
        while post:
            if post.GetType() == 1019782: 
                post[c4d.VP_VRAYBRIDGE_IRRADMAXRATE] = irradmaxrate
                post[c4d.VP_VRAYBRIDGE_IRRADSUBDIV] = irradsubdiv
            
                post = None 
              
            else:
                
                post = post.GetNext() 
                    
        c4d.EventAdd()
    Dernière modification par Helium ; 07/11/2017 à 18h39.

Discussions similaires

  1. [Résolu] Importer script python dans un plugin python
    Par Pandoxyd dans le forum Nouveaux membres
    Réponses: 8
    Dernier message: 28/09/2016, 11h48
  2. explosion Fx, un coup de pouce ?
    Par Vcyrille dans le forum Animation
    Réponses: 6
    Dernier message: 09/08/2010, 14h20
  3. QTVR et petit coup de pouce.
    Par plarot_1 dans le forum Rendu
    Réponses: 15
    Dernier message: 23/03/2007, 16h29
  4. 1er rig CD joints , un coup de pouce ?
    Par Maha dans le forum Animation
    Réponses: 8
    Dernier message: 30/08/2006, 18h32
  5. besoin d'1 coup pouce
    Par cratum dans le forum Travaux en cours
    Réponses: 5
    Dernier message: 09/01/2003, 01h35

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
Mediaworks - Logiciels 3D | Design Internet - Creation site internet