Bonjour,
Est-il possible ou existe t'il un moyen pour convertir les textures de Vray (dans cinema 4D) vers le Rendu Physique de Cinema 4D ?
Il existe depuis Vray la possibilité de convertir les textures C4D vers VRAY mais pour l'inversse je ne trouve pas de solutions...
Des idées ?
Meci d'avance
Hello
J'ai posé la même question il y a quelques jours ici. (A moins que tu parles specifiquement des shaders et pas des materiaux)
Pour l'instant ca déchaine pas les foules .
Hello. C'est un process qui m'intéresserait aussi si quelqu'un dégote un script ou autre...
--- www.aerografik.fr ---
Je vais essayé de poser la question dans la partie "programmation" du forum pour voir si quelqu'un pourrait transformer le code COFFEE en PYTHON... ?
J'ai commencé a en ecrire un. En fait c'est moins compliqué que ce que j'imaginais.
Dans un premier temps ca va etre un peu rustique, mais une fois qu'il fonctionnera, si je trouve le temps j'essaierai de regarder le coffee (il est plus sophistiqué)
Super!
Dans un premier temps, un script qui se contente de prendre la map du canal Diffuse vray et la place dans un shaker C4D dans le canal couleur, juste ça ça serait déjà top...
NiKo
--- www.aerografik.fr ---
Voila une premiere mouture.
Ca ne marche qu'avec le vrayadvance material et ne prend que le premier canal diffuse.
A prendre avec des pincettes quand même, c’était surtout un exercice pour se familiariser avec le système des shaders et materiaux. Il y a une peu de cineversity et un peu d'oli_D. Le code est tel quel avec les print et les commentaire. Plus facile a déchiffrer si ca interesse un codeur non expérimenté. Les autres vont rigoler je pense .
Mais maintenant je pense pouvoir tenter de convertir le script coffee.
Attention si il y a un filtre avant la texture ça ne fonctionnera pas. C'est gênant dans mon cas car il y a en a a peu près partout.
Le cooffe etait un script de tcastudio quel est l’éthique a ce sujet ?Code PHP:
import c4d, os
def creer_mat(filename,nom,couleur, alpha=True):
mat = c4d.BaseMaterial(c4d.Mmaterial)
mat.SetName(nom)
doc.InsertMaterial(mat)
mat[c4d.MATERIAL_COLOR_COLOR] = couleur
if filename != "":
print "dans creer mat : " + filename
shd = c4d.BaseList2D(c4d.Xbitmap)
shd[c4d.BITMAPSHADER_FILENAME] = filename
mat[c4d.MATERIAL_COLOR_SHADER] = shd
mat.InsertShader(shd)
else:
print "dans creer mat : no texture"
if alpha :
mat[c4d.MATERIAL_USE_ALPHA]=True
shda = c4d.BaseList2D(c4d.Xbitmap)
shda[c4d.BITMAPSHADER_FILENAME] = filename
mat[c4d.MATERIAL_ALPHA_SHADER]=shda
mat.InsertShader(shda)
mat.Message(c4d.MSG_UPDATE)
mat.Update(True, True)
return mat
# recursive function where we do stuff to the shaders
def shadertree(mat, shader):
print "2 dans shadertree"
filename = ""
dcolor = c4d.Vector(0,0,0)
dcolor = mat[c4d.VRAYMATERIAL_COLOR1_COLOR]
# Loop through the BaseList
while(shader):
print shader.GetName()
if mat[c4d.VRAYMATERIAL_USE_COLOR1] == True:
print "3 Channel diffuse on"
# If it's a bitmap, we'll look at the filename
if shader.GetType() == c4d.Xbitmap:
filename = shader[c4d.BITMAPSHADER_FILENAME]
# for instance we can set the filename to just the file part
filename = os.path.basename(filename)
print "filename : " + filename
shader[c4d.BITMAPSHADER_FILENAME] = filename
else:
print "no texture"
filename = ""
# Check for child shaders & recurse
if shader.GetDown(): shadertree(shader.GetDown())
# Get the Next Shader
shader = shader.GetNext()
mat_name = 'AR_' + mat.GetName()
ar_mat = creer_mat(filename,mat_name,dcolor, alpha=False)
doc.InsertMaterial(ar_mat)
# --------------- main function -------------------
def main():
c4d.CallCommand(13957) # Clear Console
# Get the first material
mat = doc.GetFirstMaterial()
print "First material in manager : " + mat.GetName()
# Loop through materials
matList = doc.GetActiveMaterials()
for mat in matList:
print "1 : " + mat.GetName()
shd = mat.GetFirstShader()
shadertree(mat, shd)
if __name__=='__main__':
main()
Voila la version inspirée du coffee.
J’en ai fait deux versions, une qui remplace les materiaux dans les tags et l’autre non. Sur la petite scène de test que j’ai aussi mis dans le zip, ca fonctionne, mais je suis pas très sur de moi sur une grosse scène.
Donc, il faut sélectionner des materiaux dans le material manager et lancer le script.
Les canaux converti sont couleur, bump ou normal, luminance et specular… mais pas vraiment.
Pour Normal et bump, un canal est creé (bump ou normal) selon le reglage du vray material.
Par contre pour l’amount j’ai juste fait un mix des deux paramètre de vray. Comme j’utilise pas je sais pas trop lequel est plutot utilsé et vue que le 1er est en cm, suis pas trop sur de la pertinance du resultat.
Pour le specular c’est plus compliqué comme coté c4d les layers de specular sont dynamique il doit y avoir une technique, mais j’ai pas le temps de decrypter ça. Pour l’instant la texture du specular1 se retrouve dans le canal diffuse. Je trouve que c’est plus simple pour la recuperer et la recoller à la bonne place manuellement. Si vous trouvez ca plutôt chiant qu’autre chose, dites moi, ou simplement mettez en commentaire toute la partie specular.
J’ai bien essayé de conservé la fonctionnalité pour descendre dans la hierarchie des shaders afin de recuperer les textures même si elles sont dans des sous-shader.
Dans le script de cineversity et dans la doc il parles bien de hiereachy mais il semblerai que ce soit une simple liste sans distinction de canaux, donc pas une hiérarchie, bref, comme c’est évidement pas expliqué dans la doc, on verra plus tard.
J’ai laissé le morceau de code qui est censé faire le job, et l’ais mis en commentaire.
J'ais quand même fait un cas special pour le shader filter car dans mon fichier il y a en a plein.
Je vais aussi le remettre dans la section programation, comme ca se sera plus visible pour nos amis dev.
Dernière modification par Floc ; 26/05/2019 à 20h44.
J'ais mis une nouvelle version dans la section programation