Exporter "plusieurs" canaux de textures sous Virtools (Explication

Transcription

Exporter "plusieurs" canaux de textures sous Virtools (Explication
Exporter plusieurs canaux de textures sous Virtools
Introduction
Virtools ne permet l’exportation que de deux canaux de textures, le canal diffuse, et le
canal de lumière. Comment faire, sous 3DS Max 5+ pour obtenir « plusieurs » canaux de
textures diffuses.
Pour l’exemple, nous prendrons un objet relativement complexe. (il s’agit du mur de
scène d’un théâtre romain)
Mur de scène d’un théâtre romain
Nous ne pouvons appliquer un Mapping UVW simple sur cet objet, sachant qu’il a 2
demis cylindre sur ces bords. Pour mapper cet objet, le plus simple sous 3DS est d’appliquer
plusieurs Mapping UVW avec des canaux de textures différents et d’appliquer la bonne
texture. Cependant, si on exporte l’objet sous Virtools, deux canaux seront exportés. Par
contre, 3DS Max offre la possibilité d’appliquer un mapping localement, ce qui est beaucoup
moins connu… Il donne donc la possibilité d’appliquer un modificateur Mapping UVW sur
une partie de l’objet et ce, avec le canal désiré. Voila comment procéder.
Procédure
Sur votre objet, repérez les éléments solidaires (par exemple le cylindre gauche, le
droit, et le mur central), puis appliquer des ID matériaux différents (1 pour le centre, 2 et 3
pour le cylindre gauche et le cylindre droit par exemple), cela rends plus simple la création
d’un canal de texture complexe.
Cylindre gauche du mur
Partie centrale du mur
Après cela, nous avons plusieurs ID
matériaux mais toujours pas de coordonnées de
textures. Ajoutons à notre objet un
modificateur « Select. Maillage », puis
sélectionnez un ID matériaux dont vous voulez
appliquer un Mapping UVW. (Ici, l’ID n°10
correspondant au cylindre gauche du mur de
scène)
Ensuite, Tout en restant en mode sousobjet, ajoutez un mapping UVW, et placez le
comme vous le voulez. Ici, un mapping
Cylindrique à été placé.
Sélection du maillage par ID matériau
Il suffit de continuer comme cela pour
chaque ID Matériau de l’objet, en ajoutant un
modificateur « Select. Maillage » et un mapping
UVW, bien sur ayant le même canal de texture.
Pour la texture diffuse, prenez le canal 1. Tout
vos mapping « sous-objet » doivent avoir le
même canal, le 1.
Après avoir créer les canaux de texture
pour chaque ID matériau, ajouter un dernier
modificateur « Select. Maillage » pour revenir au
mode
objet.
Ajoutez
un
modificateur
« Développer UVW » et laissez le sur le canal 1
(le même que la texture diffuse). Appuyez sur le
bouton éditer pour voir le résultats de vos
mapping locaux.
Application locale du mapping UVW
Sur cette image nous voyons des
polygones « dépassant » le rectangle de
mapping [1,1], ce qui est normal. Il faut
imaginer que la texture se répète en hauteur
et en longueur. Si des polygones sont à
l’extérieur, ce n’est pas grave, il s’agit d’un
mapping qui ne recouvre pas la totalité de
l’élément (par exemple, un mur de brique de
100m de long, ayant un mapping de
5m*5m…)
Résultats des mapping locaux dans l’éditeur UVW
Nous pouvons restreindre l’affichage des polygones en sélectionnant les ID matériaux. Voici l’ID 10 que
nous avons mappé avec notre cylindre :
Affichage du developpement UVW par ID matériau
Conclusion
Il faut maintenant appliquer un matériau multi sous-objet. Pour chaque ID matériau, il
faut appliquer la texture voulue, bien sur en laissant le canal de texture à 1 pour chaque
texture.
Pour conclure, voici un maxscript qui permet la création automatique des matériaux de
fusion pour Virtools. Il créer un nouveau matériau fusion, applique dans le premier slot la
texture courante de l’objet et dans le second, va chercher la texture de lumière à partir des
informations contenues dans le script de rendu en texture.
macroscript CreerMateriauxFusion
ButtonText:"Creation Materiaux Fusion"
category:"Virtools"
internalcategory: "Creation Materiaux Fusion"
toolTip:"MateriauxFusionVirtools"
(
--retire le système d'instances.
--Chemin des fichiers, a partir de la configuration du rendu de texture
local
bakeMtlMappingsIniFile = "$plugcfg/BakeTextureMappings.ini"
local
iniFile = "$plugcfg/BakeTexture.ini"
local chemin = getINISetting iniFile "FileOutput" "FilePath"
if chemin == "" then chemin = (getdir #image)
extension = getINISetting iniFile "FileOutput" "FileType"
if extension == "" then extension = ".tga"
i=0
out_name = ((GetDir #export)+"/plantage.txt")
out_file = createfile out_name
matt = meditMaterials[21]
for g in selection do
(
--Copie du materiau d'origine
if(g.ishidden!=true) then (
MateriauOrigine = copy g.material
--MateriauOrigine=g.material
MateriauFusion = blend();
MateriauFusion.map1=materiauOrigine
MateriauFusion.map1.name="CollectionDiffuse"
MateriauFusion.map2=standardMaterial()
materiauFusion.map2.name=g.name+"_MateriauLumière"
materiauFusion.map2.diffuseMap=bitmapTexture()
materiauFusion.map2.diffuseMap.name=g.name+"TextureLumière"
materiauFusion.map2.diffuseMap.coords.mapchannel=2
materiauFusion.map2.diffuseMap.filename=chemin+"\\"+g.name+"TextureLumières"+ext
ension
g.material=materiauFusion
try(
--select g
--exportFile (g.name+".nmo") #noprompt selectedOnly:true
)
catch (
format "%" g.name to:out_file
format "\n" to:out_file
)
--g.material=matt
--delete g
)
)
close out_file)