jeudi 28 février 2013

Zbrush to Max pourquoi c'est mou ?

    J'ai souvent entendu et eu ce problème, "j'ai sorti une décimation (ou high poly) de zbrush avec mes normales... et quand je rends avec max ma modé est toute mole et je perds beaucoup de détails."

Le problème vient des smooth group, faut savoir que par défaut max import des .obj avec un smooth group commun pour tout les poly. Vous pouvez voir ça dans l'editpoly, face mode, smoothing groups.

Tout les poly on un smooth group a 1.










Donc avant de rendre votre modé sortie de ZBrush pensez bien a "Clear All" les smooth groups.










Voila, c'est bête mais on y pense pas toujours.
En image, un petit comparatif:

 Avec smoothing group a 1.



Sans smoothing group.

La modé reste en peu moche (pas de lighting, shader, texture ..)  mais on peu voir qu'on gagne réellement en dureté et en détails.


vendredi 22 février 2013

la recursivité ou la fonction dans la fonction

Voici mon dernier petit utilitaire écrit en python pour 3ds max (py3dsMax), il s'agit d'une boucle récursive, c'est a dire une boucle infinie qui analyse des "éléments" les un après les autres jusqu’à qu'on lui signal par une "clé" de stopper la boucle.

Par exemple c'est très pratique lorsqu'on a des arbres nodales et qu'on veut effectuer une tache sur chacun de leurs nodes:



 


from Py3dsMax import mxs

#le nouveau nom appliqué a tout les nodes.
newName = "Name"

#je recupere ma selection d'objet.
sel = mxs.selection

#je recupere le nombre de slot du material appilque a ma selection.
idMap = mxs.getNumSubTexmaps(sel[0].material)

#je rename le material
sel[0].material.name = newName + sel[0].material.name 

#Je lance ma fonction recursive.
renameNode(idMap, sel[0].material)


def renameNode(idMap, sel):

 for i in range(1, idMap+1):
  slot = mxs.getSubTexmap(sel, i)
  if slot == None :
   print("empty slot")

  else:
   slot.name = newName + slot.name 
   idMap = mxs.getNumSubTexmaps(slot)
   for i in range(1, idMap+1):
    #je relance ma fonction dans cette meme fonction:
    renameNode(idMap, slot)