unity 批量导入模型工具_零基础的Unity图形学笔记3:使用多模型UV与优化模型导出...
前文所說,貼圖多UV,直接命名對應(yīng)貼圖就可以。
模型的多套UV,則需要在3DMAX里編輯。
這篇文章主要解決兩個問題:
1.模型導出會有幾套UV?
如果在3d模型中只做了一套uv,將模型導入unity的時候,在導入設(shè)置中勾選Generate Lightmap UVs, unity會自動為我們生成用于光照貼圖的uv1,和用于動態(tài)光照的uv2
比如Unity自帶的物體box,sphere就自帶兩套uv
第一套是正常的,比如方塊可以每個面是同一個uv,
但是第二套需要烘焙光照信息,所以默認是全展開,紋理看出來要小些。
也有一些材質(zhì)會用到四套UV,比如Unity的speedtree。
2.模型多UV有什么作用
做很多效果時,使用多UV可以避免使用多材質(zhì),或者多貼圖,性能更好。
其實額外的UV可以替代很多mask貼圖實現(xiàn)的效果。
3. 如何自己在模型中添加第二套UV
3DMax和maya等軟件都能對模型加多套uv
注意模型在fbx里可以保留多套uv,但是obj里只能保留默認的第一套
另外unity里現(xiàn)在貌似支持最多四套
開始在3DMAX里制作兩套UV
uv0UV1
這是我們剛才操作過的茶壺,現(xiàn)在它多出了個MAP2,也就是我們的第二套UV。
我們使用下面的Shader在Unity里測試:
Shader "UV/multiTextureUV" {Properties{_MainTex("Texture", 2D) = "white" { }}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma target 3.0sampler2D _MainTex; uniform float4 _MainTex_ST;struct appdata {float4 vertex : POSITION;// 多套uv的語義聲明float2 texUV0 : TEXCOORD0;float2 texUV1 : TEXCOORD1;float2 uv3 : TEXCOORD2;float2 uv4 : TEXCOORD3;float2 uv5 : TEXCOORD4;};struct v2f {float4 pos : SV_POSITION;float2 uv_MainTex : TEXCOORD0;float2 uv2_Tex_002 : TEXCOORD1;};//頂點函數(shù)v2f vert(appdata input){v2f o;o.pos = UnityObjectToClipPos(input.vertex);o.uv_MainTex = input.texUV0;o.uv2_Tex_002 = input.texUV1;return o;}fixed4 frag(v2f i) : SV_Target{fixed2 main_uv = i.uv_MainTex;fixed2 _Tex_2_uv = i.uv2_Tex_002;//在這里替換測試//如果沒有多套uv 后面的值還是會返回uv0//return tex2D(_MainTex, _Tex_2_uv);return tex2D(_MainTex, main_uv);}ENDCG}} }結(jié)果如上,我們實現(xiàn)了 不同模型UV的采樣。
當然這個是會影響烘焙光照的。 因為Unity默認使用第二套UV作為lightmap的采樣UV。
如果我們導入的模型使用了第二套UV,Unity就不會自動給模型加入第二套UV了。
4.解決unity導入模型內(nèi)存占用
4. 1刪除color
經(jīng)過驗證,在3DMAX里,制作一個模型導出,一般情況,美術(shù)人員沒有手動修改,只會多出一個color,然而我們大多數(shù)情況不需要,可以刪除。
如果想去掉color通道的話直接去掉alpha通道就行。
我們把剛才茶壺的color通道刪除,驚喜的發(fā)現(xiàn),模型變小了,并且它占用Unity的內(nèi)存也會變小。
4. 2刪除多層UV通道
某些時候,因為美術(shù)的一些意外操作,會引入多個我們不需要的UV通道。
由于unity的光照貼圖會自動占用uv2通道,如果你的項目中又使用的是動態(tài)加載光照貼圖的方式的話,最好不要在導入模型的時候把UV2設(shè)置為null,如果你這樣做了有可能會導致光照貼圖顯示不出來的問題。
如果物體不需要烘培,你自己也不使用uv2,則可以刪除該通道。
方法一:
在max中進行設(shè)置把沒有必要的通道全部clear掉,具體的操作請看下面的截圖:
方法二:
程序這邊進行處理,做一個工具,對每個導入到unity中的模型代碼中清除相應(yīng)的通道,具體的代碼如下
public class ClearModelUV:AssetPostprocessor
{
void OnPostprocessModel(GameObject rImaportModel)
{
this.ClearMeshUVAndColorChannel(rImaportModel);
}
private void ClearMeshUVAndColorChannel(GameObject rImportModel)
{
List<Vector2> rNewUV = null;
List<Color32> rNewColor = null;
var rFilters= rImportModel.GetComponentsInChildren<MeshFilter>();
for (int filter_index = 0; filter_index < rFilters.Length; filter_index++)
{
rFilters[filter_index].sharedMesh.SetColors(rNewColor);
rFilters[filter_index].sharedMesh.SetUVs(1, rNewUV);
rFilters[filter_index].sharedMesh.SetUVs(2, rNewUV);
rFilters[filter_index].sharedMesh.SetUVs(3, rNewUV);
}
}
}
引用鏈接:
unity中多套uv set理解和應(yīng)用?blog.csdn.net另特別感謝 “華獅虎 ”幫助我在3DMAX里制作UV通道和驗證效果。
總結(jié)
以上是生活随笔為你收集整理的unity 批量导入模型工具_零基础的Unity图形学笔记3:使用多模型UV与优化模型导出...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android studio cmake
- 下一篇: 股市红色和绿色数字代表什么