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

Discussion: Matière Formule

  1. #1
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483

    Matière Formule

    v 1.1

    Module Python pour C4D R13.


    Matière paramétrable via un champ de code Python.




    Les trois variables r, v, b sont à définir. Elles représentent la couleur du pixel calculé (en nombre flottant).

    Le code personnalisé s'incruste dans la fonction Output() de la classe c4d.plugins.ShaderData.
    Les variables sh (BaseShader) et cd (ChannelData) peuvent donc être utilisées dans votre code.


    D'autres variables sont disponibles, tels que :

    x, y, z : renvoient les coordonnées du point calculé.
    t : renvoie la valeur du champ Temps de l'interface.


    -------


    Quelques exemples de code :

    Couleur
    Code PHP:
    1
    0.5

    Normales
    Code PHP:
    if cd.vd:
        
    cd.vd.n
        r 
    n.x
        v 
    n.y
        b 
    n.
    Coordonnées textures
    Code PHP:
    cd.p
    n.x
    n.y
    n.
    Bruit modifié
    Code PHP:
    Noise(Vector(xyz), (t+cos(x)+cos(y)+cos(z))*10)

    Formule
    Code PHP:
    cos(cos(y) + cos(x) + cos(z))
    abs(0-(m*3)) 
    -------

    Code PHP:
    import os
    import math
    import c4d
    from c4d import plugins
    Vector
    from c4d
    .utils.noise import Noise
    from math import 
    *

    MODULE_ID 1028230

    class MatFormule(plugins.ShaderData):
        
    tps 0
        ech 
    0.1
        echxyz 
    Vector(111)
        
    contra 0
        lumi 
    0
        cola 
    Vector(000)
        
    colb Vector(111)
        
    col_ True
        con_ 
    True
        colc 
    Vector(100)
        
    codetxt 'n = Noise(Vector(x, y, z), (t+cos(x)+cos(y)+cos(z))*10)\nr = v = b = n'
        
    code compile(codetxt'<string>''exec')
        
    mode 1
        min 
    True
        max 
    False
        prof 
    2
        
        def Init
    (selfnode):
            
    donnees node.GetDataInstance()
            
    donnees.SetReal(1000self.tps)
            
    donnees.SetReal(1001self.ech)
            
    donnees.SetVector(1003self.echxyz)
            
    donnees.SetReal(1002self.contra)
            
    donnees.SetReal(1006self.lumi)
            
    donnees.SetVector(1004self.cola)
            
    donnees.SetVector(1005self.colb)
            
    donnees.SetString(1007self.codetxt)
            
    donnees.SetVector(1008self.colc)
            
    donnees.SetLong(1010self.mode)
            
    donnees.SetBool(1011self.min)
            
    donnees.SetBool(1012self.max)
            
    donnees.SetLong(1014self.prof)
            return 
    True
        
        def recup
    (selfsh):
            
    donnees sh.GetDataInstance()
            
    self.tps donnees.GetReal(1000)
            
    self.ech donnees.GetReal(1001)
            
    self.echxyz donnees.GetVector(1003)
            
    self.contra donnees.GetReal(1002)
            
    self.lumi donnees.GetReal(1006)
            if 
    self.contra == and self.lumi == 0:
                
    self.con_ False
            
    else: self.con_ True
            self
    .cola donnees.GetVector(1004)
            
    self.colb donnees.GetVector(1005)
            if 
    self.colb == Vector(111) and self.cola == Vector(000):
                
    self.col_ False
            
    else: self.col_ True
            txt 
    donnees.GetString(1007)
            
    self.colc donnees.GetVector(1008)
            
    self.SetExceptionColor(self.colc)
            
    self.codetxt txt
            self
    .code compile(txt'<string>''exec')
            
    self.mode donnees.GetLong(1010)
            
    self.min donnees.GetBool(1011)
            
    self.max donnees.GetBool(1012)
            
    self.prof donnees.GetLong(1014)
        
        
    def InitRender(selfshirs):
            
    self.recup(sh)
            return 
    0
        
        def Output
    (selfshcd):
            if 
    cd.vd and self.mode is 1# 3d
                
    vec cd.vd.self.ech
            
    else: # 2d et aperçu
                
    if self.mode is 0:
                    
    vec = (cd.p) * 100 self.ech # Coordonnées UVW
                
    else:
                    
    vec = (cd.p-0.5) * 100 self.ech # Coordonnées UVW
            
            
    vec.self.echxyz.x
            y 
    vec.self.echxyz.y
            z 
    vec.self.echxyz.z
            t 
    self.tps
            r 
    0
            
            exec self
    .code
            
            vec 
    Vector(rvb)
            if 
    self.col_ is True:
                
    dif self.colb self.cola
                vec
    .dif.vec.self.cola.x
                vec
    .dif.vec.self.cola.y
                vec
    .dif.vec.self.cola.z
            
    if self.con_ is True:
                
    vec = ((vec-0.5) * (self.contra 1)) + 0.5 self.lumi
            
    if self.min is True:
                if 
    vec.0vec.0
                
    if vec.0vec.0
                
    if vec.0vec.0
            
    if self.max is True:
                if 
    vec.1vec.1
                
    if vec.1vec.1
                
    if vec.1vec.1
            vec 
    c4d.utils.TransformColor(vecself.prof)
            return 
    vec
        
        def FreeRender
    (selfsh): # Libère la mémoire
            
    return

    if 
    __name__=='__main__':
        
    plugins.RegisterShaderPlugin(MODULE_ID"Formule"0MatFormule"matformule"0
    -------

    Lien alternatif
    Fichiers attachés Fichiers attachés
    Dernière modification par César Vonc ; 22/02/2012 à 11h42. Motif: Mise à jour : v1.1

Discussions similaires

  1. Matière Formule (développement)
    Par César Vonc dans le forum Programmation
    Réponses: 23
    Dernier message: 20/02/2012, 04h01
  2. Comment utiliser l'outil Formule
    Par edBattistini dans le forum Nouveaux membres
    Réponses: 5
    Dernier message: 04/10/2008, 13h56
  3. déformation -> formule
    Par benoit.raemy dans le forum Nouveaux membres
    Réponses: 5
    Dernier message: 02/11/2005, 15h26
  4. Formule 1
    Par Matts3D dans le forum Général Cinema 4D
    Réponses: 2
    Dernier message: 13/04/2005, 18h59
  5. Achète objet C4D Formule 1
    Par 3D Weave SARL dans le forum Emploi/Formations/Annonces
    Réponses: 2
    Dernier message: 02/11/2004, 17h22

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