Была проблема:
При импорте в юнити из макса все материалы имеют тип 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{;}
}
}
}
}
//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;
}
}
}
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;
}
}
}