En pleine prod de notre film de fin d'etude "ascension", je laisse de coté le script pour faire du modeling d'environnement avec zbrush.
Vu que notre film se passe en haute montagne il y a donc beaucoup de parois rocheuses, cailloux, roche ... , le meilleur outils que j'ai trouvé c'est zbrush.
Voici quelques screens de zbrush des modé finals (sans texture, shader basique de zbrush):
Et voici un step by step:
la modé de base:
Première passe avec le brush TrimBorder (dans le dossier brush), jouer beaucoup avec le alt:
Puis un passage avec le brush Crumple pour déformer le tout et rendre moins lisse:
On ajoute du détails et de la texture avec le brush Fracture:
Et une dernière passe avec le NoiseMaker, on ajoute un noise et une érosion avec une petite échelle:
Et voila finit ! Plus qu'a faire un shader et texture dans max.
lundi 21 janvier 2013
dimanche 18 novembre 2012
Enumerate list python la fin du range.
J'ai découvert il y a peu de temps une fonction de l'objet list qui existe depuis quelques temps mais qui se fait discrète, elle m'a drôlement simplifier la vie.
Cette fonction c'est enumerate(list).
Enumerate d'une list retourne un objet pas vraiment exploitable.
La où énumerate est vraiment intéressant c'est son utilisation dans une boucle for. Par item enumerate return un tuple contenant l'index de l'item et l'item lui même:
listA = ["un", "deux", "trois", "quatre", "cinq"] print (enumerate(listA)) #enumerate object at 0x000000000209A900
La où énumerate est vraiment intéressant c'est son utilisation dans une boucle for. Par item enumerate return un tuple contenant l'index de l'item et l'item lui même:
listA = ["un", "deux", "trois", "quatre", "cinq"]
for i, item in enumerate(listA):
print (i)
print (item)
# Result:
0
un
1
deux
2
trois
3
quatre
4
cinq
Voila finit les:
for i in range(0, len(listA)):
print (i)
print (listA[i])
i = 0
for item in listA:
print (i)
print (item)
i += 1
Faut avouer que avec enumerate c'est quand même plus propres et plus python like.
see ya
dimanche 21 octobre 2012
PyQt parent to main maya window
Pour parenter sa fenetre pyqt a celle de maya pour pouvoir l'avoir en top et qu'elle se hide avec elle. Il faut récupérer le QMainWindow() et y parenter notre nouvelle fenêtre grasse au module SIP.
Exemple:
import maya.OpenMayaUI as OpenMayaUI
import sip
from PyQt4 import QtCore, QtGui
class window(QtGui.QMainWindow):
def __init__ (self, parent = sip.wrapinstance( long( OpenMayaUI.MQtUtil.mainWindow() ), QtCore.QObject )):
super(window, self).__init__(parent)
d = window()
d.show()
lundi 15 octobre 2012
astuce python, compare two variables with set
Petit astuce python fort pratique ! l'utilisation des variables de type "set". "set" permet de faire des opérations entre variables "set". Voici quelques exemples:
Il existe beaucoup d'autres opérateurs, pour plus de détails:
http://docs.python.org/library/sets.html
#union a = set(['a','b','c','d']) b = set(['d','d','d','d','e','f','g']) a.union(b) # Result: set(['a', 'c', 'b', 'e', 'd', 'g', 'f']) # #remarques: 'd' est stocké qu'une fois dans le nouveau set; attention le set mélanges les valeurs #différence a = set(['a','b','c','d','e','f','g']) b = set(['d','d','d','d','e','f','g']) a.difference(b) # Result: set(['a', 'c', 'b']) #
Il existe beaucoup d'autres opérateurs, pour plus de détails:
http://docs.python.org/library/sets.html
lundi 17 septembre 2012
PyQt right click button (QPushButton)
Qt ne propose pas d'event 'right click', du genre mousePressRightEvent() et c'est bien dommage. Donc c'est a nous de faire ce event, pas vraiment en créant un nouvelle fonction mais en modifiant la fonction mousePressEvent() classique. Pour cela nous devons dériver notre QPushButton a partir d'une nouvelle classe, exemple PushRightButton (le 'Q' étant réservé a Qt).
#
#
#import des modules Qt
from PyQt4.QtGui import *
from PyQt4.QtCore import *
#creation de la class, on precise qu'on derive la class QPushButton entre parentheses
class PushButtonRight (QPushButton):
#creation du signal emetteur (emet rien pour le moment)
rightClick = pyqtSignal()
#creation de notre fontion __init__ avec un arg string pour le nom du futur bouton
def __init__ (self, string):
#on integre la classe QPushButton a notre class PushRightButton
QPushButton.__init__(self, string)
#modification de la fontion mousePressEvent
def mousePressEvent (self, event):
#on integre la fonction QPushButton.mousePressEvent(self, event) a notre fonction PushRightButton.mousePressEvent(self, event)
QPushButton.mousePressEvent(self, event)
#condition du click droit
if event.button() == Qt.RightButton :
#emittion du signal rightClick
self.rightClick.emit()
print ('right click')
#
#
Maintenant il suffit de creer un bouton grace a notre class PushRightButton et de faire la connection:
#
#
butRightClick = PushRightButton('hello')
butRightClick.rightClick.connect(laFuturFonction)
#
#
mardi 11 septembre 2012
MFnHikEffector
Comment créer des jolies nodes de contrôles comme ceci (viewport en wireframe):
Grace a l'API maya et a MFnHikEffector:
Grace a l'API maya et a MFnHikEffector:
import maya.OpenMayaAnim as OpenMayaAnim node = OpenMayaAnim.MFnHikEffector() node.create()
mercredi 29 août 2012
python mel delete history
Petite astuce toute bête, comment faire un 'delete by type history' en mel ou python, et bien grâce a la fonction delete:
cmds.delete(ch = True)
Inscription à :
Articles (Atom)









