Lightmap précalculé avec 3DS MAX
Lightmap précalculé avec 3DS MAX
Bonjour,
Je suis en train d'intégrer des modélisations avec des lightmaps pré-calculé à l'aide de v-ray dans 3DS MAX.
Etant donné que le nombre de modélisation est assez important je voudrais créer un code me permettant d'accéder à la texture "Lightmap" du shader "Lightmapped/Diffuse", et d'y poser directement la lightmap calculé avec v-ray.
(J'ai environ 400 modélisations à intégrer avec différents LOD d'où mon envie d'automatiser l'assignation des lightmaps.)
Quelqu'un pourrait-il m'aider?
Merci d'avance
Je suis en train d'intégrer des modélisations avec des lightmaps pré-calculé à l'aide de v-ray dans 3DS MAX.
Etant donné que le nombre de modélisation est assez important je voudrais créer un code me permettant d'accéder à la texture "Lightmap" du shader "Lightmapped/Diffuse", et d'y poser directement la lightmap calculé avec v-ray.
(J'ai environ 400 modélisations à intégrer avec différents LOD d'où mon envie d'automatiser l'assignation des lightmaps.)
Quelqu'un pourrait-il m'aider?
Merci d'avance
Re: Lightmap précalculé avec 3DS MAX
Un script éditeur qui fait ça?
Après avoir créé une classe Editor (un peu de recherches sur le net/la doc):
Tu dois récupérer dans un 1er temps la liste des objets sélectionnés avec Selection.objects.
Sur cette sélection tu vas aller chercher le composant MeshRenderer.
Sur ce composant tu vas aller chercher le matériau (avec sharedMaterial attention, et pas material), ou les matériaux si tu en as plusieurs.
Enfin, sur chaque matériau tu vas pouvoir changer une propriété.
Pour changer la texture d'un matériau, tu fais
Pour la texture, tu pourrais aller la charger avec Resources.Load par exemple.
Sinon tu peux très bien te faire une EditorWindow et mettre un champ Texture en GUI pour pouvoir glisser la texture directement dans Unity.
Je te donne la piste à suivre, il suffit de bosser un peu et tu aura le résultat.
Après avoir créé une classe Editor (un peu de recherches sur le net/la doc):
Tu dois récupérer dans un 1er temps la liste des objets sélectionnés avec Selection.objects.
Sur cette sélection tu vas aller chercher le composant MeshRenderer.
Sur ce composant tu vas aller chercher le matériau (avec sharedMaterial attention, et pas material), ou les matériaux si tu en as plusieurs.
Enfin, sur chaque matériau tu vas pouvoir changer une propriété.
Pour changer la texture d'un matériau, tu fais
Code : Tout sélectionner
material.SetTexture("_NomDeLaPropriétéDeLaTexture", laTexture);
Sinon tu peux très bien te faire une EditorWindow et mettre un champ Texture en GUI pour pouvoir glisser la texture directement dans Unity.
Je te donne la piste à suivre, il suffit de bosser un peu et tu aura le résultat.
- boubouk50
- ModoGenereux
- Messages : 6222
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Lightmap précalculé avec 3DS MAX
Regarde:
OnAssignMaterialModel()
Tu dois créer un dossier Editor dans Assets, créer un script qui redéfinit OnAssignMaterialModel(material : Material, renderer : Renderer) : Material
Dans lequel tu dois:
Récupérer la texture de lightmap (je te conseille de trouver un tag particulier --> genre NomTexture_LM.extension)
Récupérer le Shader voulu: Shader.Find(String ShaderName)
Affecter le tout à ton objet.
OnAssignMaterialModel()
Tu dois créer un dossier Editor dans Assets, créer un script qui redéfinit OnAssignMaterialModel(material : Material, renderer : Renderer) : Material
Dans lequel tu dois:
Récupérer la texture de lightmap (je te conseille de trouver un tag particulier --> genre NomTexture_LM.extension)
Récupérer le Shader voulu: Shader.Find(String ShaderName)
Affecter le tout à ton objet.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Lightmap précalculé avec 3DS MAX
Merci pour ta réponse rapide !
Pour l'éditor script je m'en sors j'en ai déjà un qui me classe tous mes objets par noms et me constitue les LOD Group automatiquement .
En faite c'est juste l'accès à la propriété de la texture qui me manque (surement une erreur simpliste mais que je n'arrive pas à trouver).
Voilà mon code pour l'instant :
Pour l'éditor script je m'en sors j'en ai déjà un qui me classe tous mes objets par noms et me constitue les LOD Group automatiquement .
En faite c'est juste l'accès à la propriété de la texture qui me manque (surement une erreur simpliste mais que je n'arrive pas à trouver).
Voilà mon code pour l'instant :
Code : Tout sélectionner
var LOD0 = GameObject.Find ("LOD 0");
foreach (Transform child in LOD0.transform)
{
//application du shader à l'objet
child.renderer.material.shader = Shader.Find("Legacy Shaders/Lightmapped/Diffuse");
// création et chemin de la variable contenant la texture
Texture lightmap ;
lightmap = (Texture)Resources.Load("Lightmap/"+ child.name + "VRayTotalLightingMap",typeof(Texture2D));
Debug.Log (lightmap);
// assignation de la texture comme lightmap
child.renderer.sharedMaterial.SetTexture ("_Lightmap (RGB)",lightmap);
}
- boubouk50
- ModoGenereux
- Messages : 6222
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Lightmap précalculé avec 3DS MAX
Je dirai qu'il faut bien faire attention si ton chemin "Lightmap/"+ child.name + "VRayTotalLightingMap" est bon.
Aussi que ton shareMaterials soit bien partagé qu'avec des GameObject qui ont strictement le même shader. Parce qu'un bout de route au nord et au sud partage souvent le même matériau mais pas le même lightmap (attention au nommage dans 3dsMax)
Après j'utiliserai plutôt
Pour pouvoir aller chercher la lightmap un peu où je veux dans mes sous-dossier d'Assets, et pas à avoir a tout mettre dans le même répertoire Resources.
- EDIT - ça c'est pour l'editor pas pour un script de jeu.
Aussi que ton shareMaterials soit bien partagé qu'avec des GameObject qui ont strictement le même shader. Parce qu'un bout de route au nord et au sud partage souvent le même matériau mais pas le même lightmap (attention au nommage dans 3dsMax)
Après j'utiliserai plutôt
Code : Tout sélectionner
var destPath = System.IO.Directory.GetFiles(texPath, texName, System.IO.SearchOption.AllDirectories);
if (destPath.Length > 0) {
Debug.Log(destPath[0]);
return AssetDatabase.LoadAssetAtPath(destPath[0], Texture2D);
- EDIT - ça c'est pour l'editor pas pour un script de jeu.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Lightmap précalculé avec 3DS MAX
Mon chemin est bon j'arrive à appliquer ma lightmap en temps de main texture par exemple c'est juste son attribution en temps que lightmap et non main texture qui me pose problème ...
Et merci pour le morceau de code permettant de retrouver les textures dans n'importe quel dossier.
Et merci pour le morceau de code permettant de retrouver les textures dans n'importe quel dossier.
- boubouk50
- ModoGenereux
- Messages : 6222
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Lightmap précalculé avec 3DS MAX
Dans ce cas essaie plutôt avec cela:
Code : Tout sélectionner
child.renderer.sharedMaterial.SetTexture ("_LightMap" ,lightmap);
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Lightmap précalculé avec 3DS MAX
Parfait !!!
Je n'avais juste pas testé avec le M majuscule à lightMap ...
Je te remercie beaucoup et bonne soirée
Je n'avais juste pas testé avec le M majuscule à lightMap ...
Je te remercie beaucoup et bonne soirée