Быстрый Импорт геометрии с лайтмапами из Макса(визард)

Раздел, посвящённый всему, что связано с программированием для Редактора Юнити. Скрипты Редактора, Wizards и прочее.

Быстрый Импорт геометрии с лайтмапами из Макса(визард)

Сообщение iqubik 26 сен 2009, 01:51

Написал кусочек кода для работы с материалами на выделенных объектах.
Была проблема:
При импорте в юнити из макса все материалы имеют тип diffuse и mainColor=серый.
А чаще всего нужно тип шейдера lightmapped/diffuse и основной белый цвет + на второй слот неплохо было бы закинуть сразу лайтмапу.
Появилось решение для более приятной интеграции 3дмакса и юнити в переносе геометрии с лайтмапами.

И в довесок скрипт из доков по Юнити, который автоматически при эспорте картинок в имени которых есть _bump ставит для них генерацию бампмэпов.

Это мой первый визард.

Коды:
ChangeMaterialOnSelectionQE.cs

Синтаксис:
Используется cpp
//Qub Edition
//http://vkontakte.ru/id2928819
//26.09.09 01:44

using UnityEngine;
using UnityEditor;

public class ChangeMaterialOnSelectionQE : ScriptableWizard
{
       
    //vkly4em ili net do4ernie obj
        public bool includeChildren=true;
        //vkly4em ili net prefabi
    public bool excludePrefabs=false;
        //mojem li izmenyat osnovnoi 4vet
        public bool ActivateMainColor=true;
        //mojem li izmenyat specular color y specular shaderov
        public bool ActivateSpecColor=false;
        //mojem li dobavit' na vtoroi slot materiala laitmapy
        public bool AddLightMap=true;
        //mojem li menyat main map
        public bool AddMainMap= false;
        //можем ли менять карту бампа
        public bool AddBumpMap=false;
        //moje li moneyat shader
        public bool ChangeShader=true;
        //stavim cveta po ymol4aniu    
        public Color maincolor = new Color(1,1,1,1);
        public Color speccolor = new Color(1,1,1,1);
        //imya shadera po umol4aniu
        public string ShaderName = "Lightmapped/Diffuse";
        //kartinka laitmapa
        public Texture lightmaptexture;
        //картинка главной текстуры
        public Texture maintexture;
        //картинка текстуры бампа
        public Texture bumptexture;
        //rejim raboti (include/exclude)
    private SelectionMode modePrefs;
        //vremennii material dlya raboti
        private Material tempmat;
       
       
    [MenuItem ("Custom/Change Material On Selection(qe)")]
    static void DoSet()
    {
        ScriptableWizard.DisplayWizard("Change Material(Integrate 3dmax with unity!) -- Qub Edition", typeof(ChangeMaterialOnSelectionQE), "Set");
        }
   
    void OnWizardUpdate()
    {
        helpString = "Этот скрипт позволяет быстро изменить\nтип, цвета, лайтмапу, шейдер\nна выбранных в иерархии объектах\n\nПо умолчанию заточен под лайтмапы,\nно с чекбоксно расширяемым функционалом.\n\nВозможные варианты поля ShaderName:\nDiffuse\nBumped Diffuse\nVertexLit\nTransparent/Diffuse......";
    }
   
   
    void OnWizardCreate()
    {
        //настройка вложений и исключений выборки   
        if(includeChildren || excludePrefabs)
        {modePrefs=(SelectionMode.ExcludePrefab | SelectionMode.Editable | SelectionMode.Deep);}
        else
                {modePrefs=(SelectionMode.Editable);}
   //создание массива выбранных объектов
        Object[] objs = Selection.GetFiltered(typeof(GameObject), modePrefs);
       
                //сама обработка
        foreach (GameObject go in objs)
        {
                        //init                 
                        if(go.renderer) //если рендер компонента есть на объекте = обрабатываем его
                                {
                                //временный материал для удобства работы с функциями
                                tempmat = go.renderer.sharedMaterial;
                               
                                //menyaem shader
                                if(ChangeShader==true)
                                //тут шейдернэйм это строка в интерфейсе, которую можно изменить
                                tempmat.shader = Shader.Find(ShaderName);
                                else{;}
                       
                                //menyaem maincolor
                                if(ActivateMainColor==true)
                                tempmat.SetColor ("_Color", maincolor);
                                else{;}

                                //menyaem specular color
                                if(ActivateSpecColor==true)
                                tempmat.SetColor ("_SpecColor", speccolor);
                                else{;}
                               
                                //dobavlyem vo vtoroi slot nashy laitmapy
                                if(AddLightMap==true)
                                tempmat.SetTexture("_LightMap", lightmaptexture);
                                else{;}
                               
                                if(AddMainMap==true)
                                tempmat.SetTexture("_MainTex", maintexture);
                                else{;}
                                       
                                if(AddBumpMap==true)
                                tempmat.SetTexture("_BumpMap", bumptexture);
                                else{;}

                        }              
        }
   
    }  
}


ToNormal.js
Синтаксис:
Используется cpp
//import UnityEditor;

class ToNormal extends AssetPostprocessor
{
        function OnPreprocessTexture ()
        {
        // Automatically convert any texture file with "_bump"
        // in its file name into a normal map.
                if (assetPath.Contains("_bump"))
                {
                var textureImporter : TextureImporter = assetImporter;
                textureImporter.convertToNormalmap = true;
                }
        }
}
----------------------
qub edition
Идеальное общество это общество где каждый станет настолько эгоистом, что начнёт понимать, что делая недоброе другому получит тоже в ответ. (око за око, с прощением)
iqubik
UNIт
 
Сообщения: 74
Зарегистрирован: 11 июн 2009, 13:38
Откуда: Stavropol
  • Сайт
  • ICQ

Re: Быстрый Импорт геометрии с лайтмапами из Макса(визард)

Сообщение Neodrop 26 сен 2009, 02:24

(3A4OT)
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Быстрый Импорт геометрии с лайтмапами из Макса(визард)

Сообщение Const_47 26 сен 2009, 15:34

Похоже еще один 04.07.
Магия пля :D
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск


Вернуться в Editor

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3