Salut tous le monde !
Nous sommes quelque un à essayé de trouver une solution 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'inverse nous ne trouvons pas de solutions...
Floc à trouvé un code en COFFEE qui fonctionné sous les anciennes version de C4D et VRAY mais qui n'est plus utilisable aujourd'hui...
Nous nous demandons donc si quelqu'un serait capable de transformer le code pour l'adapter aux actuelles versions ?
Voici le lien : https://forums.cgsociety.org/t/vray-...-maybe/1504511
Un grand merci d'avance !
Dernière modification par shtl ; 26/03/2020 à 09h19. Motif: titre
Comme il y a plusieurs type de texture vray (je connais hyper mal vray) faudrait déjà essayer de référencer des correspondances.
Qu'est ce qu'on fait si on trouve un vray blend material. Est ce qu'il peut y avoir des layers, les bruits, les textures.
on fait ça pour une matière puis on fait une boucle puis voilà =)
(j'ai pas une chié de temps pour ce genre de chose en ce moment)
Comment créer un tableau de BaseMaterial qui correspondent à des Matériaux V-ray
Code PHP:
import c4d
from c4d import gui
# Welcome to the world of Python
# Main function
vrayMatsIds = {
1022115 : 'V-Ray 2 Sided Material/V-Ray 2 Sided Material' ,
1024192 : 'V-Ray Fast SSS2 Material/V-Ray Fast SSS2 Material' ,
1022116 : 'V-Ray Blend Material/V-Ray Blend Material' ,
1035368 : 'V-Ray OSL Material/V-Ray OSL Material' ,
1039186 : 'V-Ray VrMat Material/V-Ray VrMat Material' ,
1020295 : 'V-Ray Advanced Material/V-Ray Advanced Material'
}
def GetAllMaterials(OnlyVray = True):
# Creates an empty array and add all materials in it.
# By default, only pick vray materials
mats = []
mat = doc.GetFirstMaterial()
while mat:
if mat.GetType() in vrayMatsIds:
mats.append(mat)
mat = mat.GetNext()
return mats
def main():
for mat in GetAllMaterials():
print mat
# Execute main()
if __name__=='__main__':
main()
Dernière modification par valkaari ; 27/05/2019 à 21h25.
Voici la version inspirée du coffee deja postée ici avec les explications.
Je la reposte ici, comme ça si un valeureux dev passe par la qu’il n’hesite point à pointer de son doigt expert les eventuelles bourdes !
D'ailleur je vois que Vaalkari est déja passé, zut je l'ai manqué
On pourrai rester ici maintenant, vu qu'il y a quatre discussion sur ce même sujet
dès que j'ai un peu de temps je regardes, n'hésites pas à poser des questions.
Et pour réagir à ton autre post, non c'est pas si compliqué, bien pour ça qu'on encourage tout le monde à mettre le nez dedans
Dernière modification par valkaari ; 27/05/2019 à 14h49.
Merci Vaalkari, je crois qu'un oeil expert ne sera pas de trop.
En attendant, voila une version améliorée.
Je me suis rendu compte que le canal weight de vray en fait c’est l’alpha, donc je l’ai rajouter.
Les layers sont pris en compte et le Filter conserve maintenant ses parametres.
J’ai ajouter un dialogue pour l’option remplacer les materiaux dans les tags.
et j’ai aussi ajouter un petit icone (total illisible )
J’ai converti ma grosse scene avec, et ca à l’air de plutot bien fonctionner.
Par contre dans cette scene la majorité des bitmap sont des bitmapshader C4d, mais j’ai quand même rencontré quelques materiaux ou le vrayAdvBitmap Shader a été utilisé et bien sur dans ce cas ca ne fonctionne pas. Mais il semblerai que les utilsateur vray utlise plutôt les shader c4d dans les materiaux VRay. Si c'est pas le cas dites moi, j'essaierai de le prendre en compte.
Pour les layers et le filter j'ai utilisé un getClone du shader, c'est beaucoup plus simple, j'espere juste qu'il y a pas un loup derrière la facilité.
une idée comme ça.
Pour remplacer tes textures tu peux aussi utiliser la partie "Assignment"
ça t'évitera de parcourir toute la hiérarchie des objets * nombre de texture.
Tu peux aussi créer des tableaux si tu veux tracer les correspondances.
pas beaucoup de code à ajouter et ça supprime pas mal de code pour parcourir l'arborescence
"Sans programmation défensive"
Code PHP:
#on récupère une matière (ici je sais que la première est une vray)
vrayMat = doc.GetFirstMaterial()
#je récupères les données des assignements
vrayAssign = vrayMat[c4d.ID_MATERIALASSIGNMENTS]
#Création de la matière et insertion dans le document
phyMat = c4d.BaseMaterial(c4d.Mmaterial)
doc.InsertMaterial(phyMat)
#pour tous les objets présents dans la liste assignment
for i in xrange(vrayAssign.GetObjectCount()):
#récupération du tag
textTag = vrayAssign.ObjectFromIndex(doc, i)
#mise à jour du champ "material" du tag avec la matière physique
textTag[c4d.TEXTURETAG_MATERIAL] = phyMat
Dernière modification par valkaari ; 27/05/2019 à 21h27.