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 à 08h19. 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 à 20h25.
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 à 13h49.
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 à 20h27.
Ah oui ça m'as l'air bien ça, surtout que j'ai tendance a pas trop me préoccuper des "défenses" dans mes codes
Super les gars...
Je teste en l'état...
NiKo
--- www.aerografik.fr ---
ça a l'air de marcher très bien! Bien ouais les gars!
Edit: ha non, ça ne marche plus quand la texture est chargée dans un VrayAdvancedBitmap, ce qui est le cas dans la majorité du temps...
NiKo
--- www.aerografik.fr ---
Ah ok, je suis tombé sur le seul mec qu'utilise jamais le VrayAdvancedBitmap
Voila, c'est réparé, cette version prend en compte le V-Ray AdvBitmap, et aussi l'exposure en bonus.
PS : Comme j'uitlise pas du tout vray si il y a un autre truc tres utilsé et qui a un equivalent CD4 dites moi, si c'est pas trop compliqué je peux essayer de l'integrer.
Dernière modification par Floc ; 28/05/2019 à 19h22.
--- www.aerografik.fr ---
Juste un petit rappel, vu que moi même je l’avais oublié
On peu recuperer la map de specular dans le canal diffuse (qui n’est pas activé), je sais c’est un peu bizarre, mais le canal reflectance de C4d etant dynamique c'est plus compliqué et j’ai pas vraiment le temps de m’y coller.
Ca permet de recoller le map à sa place plus facilement.
ça marche nickel Floc! Grand merci pour le travail! :-)
NiKo
--- www.aerografik.fr ---
Une petite "mise a jour"
La refraction est prise en compte, le canal couleur n'est plus activé par defaut et le canal alpha est activés a bon escient.
C'est a dire pas en fonction de l'activation du canal weight (il est toujours actif), mais si il y a une texture dans ce canal, ou si sa valeur de mix est < 1.
Et super important un icone plus joli
Je croyais plus jamais m'en servir, mais finalement ce truc est plutôt utile. Donc je continue a l'ameliorer doucement.
La je voulais recuperer les maps de speculaires et les mettre a la bonne place dans la reflectance.
J'y suis presque sauf que dans le cas d'un materiaux nouvellement créé, c'est comme si les layers du canal reflectance n'existait pas encore.
J'obtient des messages du genre c4d.baseMaterial object has no attribute 'GetReflectionLayer...
Un petit bout de code pour illustrer le probleme.
la simple fonction GetReflectionLayerCount() genere une erreur.
C'est pour ca que j'ai tenté insert, Message et Update avant l'appel mais ca ne change rien.
Par contre si vous essayez avec ce deuxieme script en selectionnant le materiau nouvellement créé, pas de probleme.Code PHP:
def main():
mat = c4d.BaseMaterial(c4d.Mmaterial)
doc.InsertMaterial(mat)
mat.Message(c4d.MSG_UPDATE)
mat.Update(True, True)
cntLayer = mat.GetReflectionLayerCount()
print cntLayer
if __name__=='__main__':
main()
Code PHP:
def main():
#Maintenant on selectionne le mat nouvellement crée et ca fonctionne !
matList = doc.GetActiveMaterials()
mat = matList[0]
cntLayer = mat.GetReflectionLayerCount()
print cntLayer
if __name__=='__main__':
main()
Le message d'erreur dit bien que la fonction n'existe pas pour un BaseMaterial.
Code:mat = c4d.BaseMaterial(c4d.Mmaterial) AttributeError: 'c4d.BaseMaterial' object has no attribute 'GetReflectionLayerCount'
Donc utilise un Material pour créer ton instance.
dans ton deuxième script si tu print ta mat tu auraCode:mat = c4d.Material(c4d.Mmaterial)
Code:<c4d.Material object called 'Mat.1/Mat' with ID 5703 at 0x0000023B68790B50>
Ah ben oui, ca marche comme ça !
Grand merci Valkaari.
Y'as des fois c'est un peux ésotérique le python dans c4d quand même, surtout que j'avais lu sur le forum C4dCafé que c4d.Material etait déprécié !
Enfin bon, du coup une version qui prend en compte le canal Specular1 de vray et place respectivement specular Color dans layer color et specularReflectionGlossiness dans Layer Mask. Si reflectionGlossiness n'existe pas il essaye specularHighlightGlossiness.
Bon je sais Layer mask c'est pas la bonne place, mais le but etant (pour moi) de reconvertir vers Redshift, c'est plus facile d'acces pour le recuperer manuellement car le convertisseur redshift ne prend pas en compte la texture rougnhess.
Salut,
désolé d'arriver un peu tard dans le fil,
super utile comme outil
Est ce que quelqu'un sait si il existe le me genre de script pour Octane ?
Merci
::::::::::::::
pxlntwrk.net
La dernière fois que j'avais regardé (il y a environ 1an), octane n'avait pas d'API pour son node graph dans c4d donc compliqué c'est d'ailleurs pour ça que je n'ai pas fait de light lister pour octane.
SDK Specialist
MAXON Computer GmbH
::::::::::::::
pxlntwrk.net
Et bien en faite il semblerait que ça sois possible maintenant https://plugincafe.maxon.net/topic/1...dynamic-slot/5
SDK Specialist
MAXON Computer GmbH
yep, j'avais vu la même discussion sur le forum d'Otoy ici>> https://render.otoy.com/forum/viewto...p?f=30&t=72632
mais j'ai pas approfondi
::::::::::::::
pxlntwrk.net
Salut,
J'ai voulu télécharger le fichier "VrayMat_To_C4DMat_v0.42.zip" pour tester la conversion mais ça me dit que je n'ai pas l'autorisation de télécharger le fichier.
Faut-il une autorisation particulière des modérateurs ?
Merci
Il faut juste etre connecté, mais vu que tu as laissé un message tu devais l'etre.
J'ai quand même testé mais sans probleme.
Souci de navigateur peut etre ?
Oui en effet, vraiment curieux, Chrome m'autorise à télécharger tous les "VrayMat_To_C4DMat.zip" de la page, sans problème, mais pas le dernier fichier "VrayMat_To_C4DMat_v0.42.zip "
Alors qu'avec Microsoft Edge, ça passe...
En tout cas tant mieux !
Merci Floc
En jetant un oeil a vos lien je me suis dit que ca serait peut etre assez facile de transposer mon script pour Octane du coup j’ai un petit test vite fait.
Par contre avant de tenter de pousser plus loin si quelqu’un (genre au hasard pxl ) pouvait tester sur une version 3 ou 4 ca serait pas mal, car vu que j’ai n’ais jamais pus faire fonctionner la 3 sur ma deuxieme machine (ce qu’y ma fait passer a redshift), je n’ai plus qu’une version 2.quelquechose sur une R15. Je ne sais donc pas trop comment ca a evolué. Le node graph par exemple, pour moi n’etait qu’une interface pour construire un materiaux « classique » mais ca a peut etre changé.
Pour l'instant ne sont pris en compte que les textures diffuse et specular.
Et pour parfaire le tableau histoire que ca fonctionne dans une version plus recente de C4D, la texture Specular qui devrait etre converti en reflectance est transmise sur le canal luminance (vu que y pas reflectance en R15)
Et je conseillerai dans un premier temps de plutot utiliser le petit fichier c4d de test histoire d’eviter un fail quasi certain .
Dernière modification par Floc ; 20/09/2019 à 01h40.
@ Floc t'es un tueur ! je regarde ça au plus vite ! merci
::::::::::::::
pxlntwrk.net
Salut Floc,
un super merci de t’être penché sur la chose,
je n'arrive pas a le faire fonctionné,
je suis en r19 avec la version 2018 et 2019 d'octane.
testé sur la scène fournie et sur une nouvelle scène avec un mat nouvellement créé
quand je sélectionne le tag de texture je n'ai aucun retour
quand sélectionne le materiaux dans la bibol j'ai uniquement ce retour dans la console
je sais qu'il y a eu pas mal de chamboulement sur les materiaux entre les version 4, 2018, 2019 quel bazarCode:1029501oGlossy _ Traceback (most recent call last): File "'scriptmanager'", line 134, in <module> File "'scriptmanager'", line 94, in main AttributeError: 'module' object has no attribute 'OCTANE_MATERIAL_USE_COLOR'
alors te prends pas trop le choux ....
::::::::::::::
pxlntwrk.net