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

Discussion: feuillage et multishader

  1. #1
    Timide
    Date d'inscription
    juillet 2003
    C4D version
    R19 Broadcast
    OS
    windows 10
    Messages
    131

    feuillage et multishader

    Bonjour,
    j’enchaîne depuis ce matin les rubriques d'aide, forum et tutos, mais je ne trouve pas la solution à mon problème
    je suis pourtant sur qu'elle est très simple :
    sur des arbres archmodel, comment faire pour varier la teinte des feuilles ?
    (sachant qu'il s'agit d'un seul maillage avec toutes les feuilles dessus )
    j'essaie avec un objet fracture + multi shader de mograph mais je dois mal le paramétrer, impossible d'y arriver
    ça marche très bien sur un feuillage simple, mais qu'il devient un peu plus complexe, je crois que l'objet fracture ne gère plus,
    tout disparait
    qqun connait il une autre méthode pour avoir l'équivalent du "material by element " de max ?

  2. #2
    Vieux Croûton Avatar de Aurety
    Date d'inscription
    juillet 2002
    C4D version
    R17 Studio
    OS
    Mac
    Messages
    14 477
    Billets dans le blog
    3
    Un petit test vite fait sur un modele d'ananassier ( ), un arbre qui produit des ananas, quoi... que j'avais comme modele issu des Archmodels.

    Alors effectivement toutes les feuilles sont sur un même objet, alors la première chose que j'ai fait, c'est de singulariser chaque feuille pour les mettres dans l'objet Fracture. Désolé mais pour ça j'ai utilisé le plugin Morphmill de Spanki qui est payant, pas trouvé le moyen de faire un "split by group" ou " split by connected" directement dans Cinema 4D. Un petit développeur dans le coin ?

    Bref je me retrouve enfin avec toutes mes feuilles texturées par la même texture dans mon objet fracture.
    Sur cette texture, je rajoute en mode "calque" ou "fusion" une matière couleur Mograph que je met pour tester en mode produit. Reste juste à sélectionner ma fracture et lui ajouter un effecteur randomisation, je désactive les paramêtres de transformation de position et j'active la couleur. Bingo ça marche !

    Cliquez sur l'image pour la voir en taille réelle 

Nom : 		ananas.jpg 
Affichages :	100 
Taille :		65,3 Ko 
ID : 			6466
    kenavo !! // Pinterest KAMIGAZ®

  3. #3
    Timide
    Date d'inscription
    juillet 2003
    C4D version
    R19 Broadcast
    OS
    windows 10
    Messages
    131
    salut aurety,
    merci de ta réponse
    je ne connaissais pas morrphmill, qui a l'air intéressant,
    cepandant, vois la tete de mon arbre ,
    est on vraiment obligé de passer par une individualisation des feuilles ?!
    (210000 polys = 105000 feuilles qd même ..!)
    fracture, qui fonctionne sur une petite branche, sans individualiser les feuilles, et donc avec un seul maillage,
    ne fonctionne pas sur qque chose d'aussi gros ..

    j'avais oublié la pj !
    (en fait je voudrais d'ailleurs surtout pouvoir affecter des materiaux différents aux feuilles pour pouvoir faire disparaitre des feuilles, justement,
    en mettant un matériau transparent sur certaines d'entre elles..)
    Miniatures attachées Miniatures attachées Couper.jpg  
    Dernière modification par Karl315 ; 27/11/2012 à 17h04.

  4. #4
    Vieux Croûton Avatar de Aurety
    Date d'inscription
    juillet 2002
    C4D version
    R17 Studio
    OS
    Mac
    Messages
    14 477
    Billets dans le blog
    3
    ouais ! c'est la misère !!
    kenavo !! // Pinterest KAMIGAZ®

  5. #5
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707
    Salut,

    J'avais fait un petit script qui applique aléatoirement toutes les texures sélectionnées sur des polygones de l'objet selectionné.

    Code PHP:
    import c4d
    import random

    """Pour appliquer aléatoirement les materiaux sélectionnés
       sur les polygones de l'objet sélectionné
       en créant autant de tagSelection que de materiaux"""

    def main():
        
        
    materials doc.GetActiveMaterials()
        
    NB=len(materials)
        
    lst_bs = []
        for 
    i in xrange(NB):
            
    tgSel c4d.SelectionTag(c4d.Tpolygonselection)
            
    name str(i+1)
            
    tgSel.SetName(name)
            
    op.InsertTag(tgSel)
            
            
    tgTex c4d.BaseTag(c4d.Ttexture)
            
    tgTex[c4d.TEXTURETAG_MATERIAL]= materials[i]
            
    tgTex[c4d.TEXTURETAG_RESTRICTION]=name
            tgTex
    [c4d.TEXTURETAG_PROJECTION]=6#projection UVW
            
    op.InsertTag(tgTex)

            
    bs tgSel.GetBaseSelect()
            
    lst_bs.append(bs)
        
        
        for 
    i in xrange(op.GetPolygonCount()):
            
    bs random.choice(lst_bs)
            
    bs.Select(i)
            
        
    op.Message(c4d.MSG_UPDATE)    
        
    c4d.EventAdd()
            

        
        

    if 
    __name__=='__main__':
        
    main() 
    EDIT : j'ai oublié de dire que c'est du python à coller dans le menu scripts/gestionnaire de scripts sous l'onglet python puis bouton exécuter
    Dernière modification par oli_d ; 27/11/2012 à 19h35.

  6. #6
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707
    Je n'avais pas vu que tes feuilles avaient plusieurs polys chacune.

    Le script ci-dessous tient compte des polygones connectés, le principe reste le même sélectionner d'abord les textures que l'on veut appliquer puis l'objet polygonal contenant les feuilles.


    J'ai testé sur un arbre provenant d'arbaro, ça à l'air de fonctionner pas trop mal. Par contre c'est pas optimisé du tout, donc quand il y a beaucoup de polys il faut être très patient ...

    Code PHP:
    import c4d
    import random

    """Pour appliquer aléatoirement les materiaux sélectionnés
       sur les polygones de l'objet sélectionné en tenant compte des connections
       en créant autant de tagSelection que de materiaux"""

    def getPointsPolysConnected(op,id_pt,nb=None):
        
    """renvoie un tuple avec la liste des points connectes et la liste des polygones connectes
           au point id_pt
           nb est le Neighbor si non renseigne sera initialise"""
           
        
    if not nb :
            
    nb c4d.utils.Neighbor()
            
    nb.Init(op)

        
    points = [id_pt]    
        
    polys_id = []
        
    points_traites = []
        
        while 
    len(points):
            
    #on prend le premier point en le supprimant de la liste
            
    id_pt points.pop(0)
            
    #qu'on rajoute a la liste des point traites
            
    points_traites.append(id_pt)
            
    #polygones relies au point
            
    polys =nb.GetPointPolys(id_pt)
            for 
    p in polys :
                if 
    p not in polys_id polys_id.append(p)
                
    poly op.GetPolygon(p)
                if 
    poly.a not in points and poly.a not in points_traites
                    
    points.append(poly.a)
                if 
    poly.b not in points and poly.b not in points_traites
                    
    points.append(poly.b)
                if 
    poly.c not in points and poly.c not in points_traites
                    
    points.append(poly.c)
                if 
    poly.d not in points and poly.d not in points_traites
                    
    points.append(poly.d)
        return (
    points_traites,polys_id)

    def main():
        
        
    materials doc.GetActiveMaterials()
        
    NB=len(materials)
        
    lst_bs = []
        for 
    i in xrange(NB):
            
    tgSel c4d.SelectionTag(c4d.Tpolygonselection)
            
    name str(i+1)
            
    tgSel.SetName(name)
            
    op.InsertTag(tgSel)
            
            
    tgTex c4d.BaseTag(c4d.Ttexture)
            
    tgTex[c4d.TEXTURETAG_MATERIAL]= materials[i]
            
    tgTex[c4d.TEXTURETAG_RESTRICTION]=name
            tgTex
    [c4d.TEXTURETAG_PROJECTION]=c4d.TEXTURETAG_PROJECTION_UVW 
            op
    .InsertTag(tgTex)

            
    bs tgSel.GetBaseSelect()
            
    lst_bs.append(bs)
        
        
    nb c4d.utils.Neighbor()
        
    nb.Init(op)
        
        
    pts_id range(op.GetPointCount())

        while 
    len(pts_id):
            
    id pts_id[0]
            
    pts,polys getPointsPolysConnected(op,id,nb)
            
    bs random.choice(lst_bs)
            [
    bs.Select(i) for i in polys]
            [
    pts_id.remove(i) for i in pts]
            
        
    op.Message(c4d.MSG_UPDATE)    
        
    c4d.EventAdd()
            

        
        

    if 
    __name__=='__main__':
        
    main() 

  7. #7
    Vieux Croûton Avatar de Aurety
    Date d'inscription
    juillet 2002
    C4D version
    R17 Studio
    OS
    Mac
    Messages
    14 477
    Billets dans le blog
    3
    Oli, puisque tu as récupéré les polygones connectés, tu as un moyen simple de faire un "split_by_group" ou "split_by_connected"

    Mon plugin le fait trés bien mais c'est une fonction qui pourrait-être utile à d'autres
    kenavo !! // Pinterest KAMIGAZ®

  8. #8
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    en passant comme ça, je comprends pas trop pourquoi le fracture en mode "explode segment" ne convient pas ou la commande "polygon group to object"

  9. #9
    Vieux Croûton Avatar de Aurety
    Date d'inscription
    juillet 2002
    C4D version
    R17 Studio
    OS
    Mac
    Messages
    14 477
    Billets dans le blog
    3
    bhein le mode explode segment marche visiblement mal, même sur mon ananassier qui est moins gourmand niveau ressource n'était pas rendu et disparaissait, un bug ?
    Pour la fonction "polygon group to object" , je savais qu'elle existait dans les anciennes versions mais ne la voyant plus dans les menus, j'ai douté. Maintenant effectivement elle est présente dans le gestionnaire de commande. Merci Val
    kenavo !! // Pinterest KAMIGAZ®

  10. #10
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    mesh-> convertion (je mets toujours 3 plombe à la trouver aussi)

    C'est vrai que le fracture est lent de toute façon avec pleins de "group" j'ai pas testé depuis longtemps je sais pas pour le bug.


    SInon y a paul everett qui a fait un plugins pour ce genre de choses aussi http://www.tools4d.com/?p=3235

    qui fait parti de son kit de remapping.

  11. #11
    Timide
    Date d'inscription
    juillet 2003
    C4D version
    R19 Broadcast
    OS
    windows 10
    Messages
    131
    merci pour vos réponses
    oli ton script est top et marche super bien des maillages un peu balèzes, mais pas trop non plus quand même :
    j'ai mis 5 min à appliquer 3 textures sur un maillage de 530000 polys..
    mais ça marche qd même !
    pour le plug de everett, je l'avais repéré mais je voulais être sur qu'il n'y avait pas un moyen de faire sans
    en plus je pense quil y a un problème, c'est qu'il a l'air de fonctionner avec un objet fracture
    qui est en mode explode segments, donc impossible sur gros maillage ..
    pour l'instant je garde le script
    merci oli !

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/03/2010, 05h29
  2. Réponses: 0
    Dernier message: 07/03/2010, 11h04
  3. Réponses: 10
    Dernier message: 28/05/2009, 09h56
  4. Réponses: 0
    Dernier message: 19/05/2009, 00h08
  5. Tut'Minute™ - Modélisation express d'un feuillage
    Par Pascal dans le forum Modélisation
    Réponses: 0
    Dernier message: 01/07/2006, 21h22

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