日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unity 批量导入模型工具_零基础的Unity图形学笔记3:使用多模型UV与优化模型导出...

發布時間:2024/10/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity 批量导入模型工具_零基础的Unity图形学笔记3:使用多模型UV与优化模型导出... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前文所說,貼圖多UV,直接命名對應貼圖就可以。

模型的多套UV,則需要在3DMAX里編輯。

這篇文章主要解決兩個問題:

  • 如何正確使用多模型UV? 從3DMAX導出,到shader使用
  • 如何優化模型導出的內存占用?
  • 1.模型導出會有幾套UV?

    如果在3d模型中只做了一套uv,將模型導入unity的時候,在導入設置中勾選Generate Lightmap UVs, unity會自動為我們生成用于光照貼圖的uv1,和用于動態光照的uv2

    比如Unity自帶的物體box,sphere就自帶兩套uv

    第一套是正常的,比如方塊可以每個面是同一個uv,

    但是第二套需要烘焙光照信息,所以默認是全展開,紋理看出來要小些。

    也有一些材質會用到四套UV,比如Unity的speedtree。

    2.模型多UV有什么作用

    做很多效果時,使用多UV可以避免使用多材質,或者多貼圖,性能更好。

    其實額外的UV可以替代很多mask貼圖實現的效果。

    3. 如何自己在模型中添加第二套UV

    3DMax和maya等軟件都能對模型加多套uv

    注意模型在fbx里可以保留多套uv,但是obj里只能保留默認的第一套

    另外unity里現在貌似支持最多四套

    開始在3DMAX里制作兩套UV

    uv0

    UV1


    這是我們剛才操作過的茶壺,現在它多出了個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;};//頂點函數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}} }

    結果如上,我們實現了 不同模型UV的采樣。

    當然這個是會影響烘焙光照的。 因為Unity默認使用第二套UV作為lightmap的采樣UV。

    如果我們導入的模型使用了第二套UV,Unity就不會自動給模型加入第二套UV了。

    4.解決unity導入模型內存占用

    4. 1刪除color

    經過驗證,在3DMAX里,制作一個模型導出,一般情況,美術人員沒有手動修改,只會多出一個color,然而我們大多數情況不需要,可以刪除。

    如果想去掉color通道的話直接去掉alpha通道就行。

    我們把剛才茶壺的color通道刪除,驚喜的發現,模型變小了,并且它占用Unity的內存也會變小。

    4. 2刪除多層UV通道

    某些時候,因為美術的一些意外操作,會引入多個我們不需要的UV通道。

    由于unity的光照貼圖會自動占用uv2通道,如果你的項目中又使用的是動態加載光照貼圖的方式的話,最好不要在導入模型的時候把UV2設置為null,如果你這樣做了有可能會導致光照貼圖顯示不出來的問題。

    如果物體不需要烘培,你自己也不使用uv2,則可以刪除該通道。

    方法一:

    在max中進行設置把沒有必要的通道全部clear掉,具體的操作請看下面的截圖:

    方法二:

    程序這邊進行處理,做一個工具,對每個導入到unity中的模型代碼中清除相應的通道,具體的代碼如下

    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理解和應用?blog.csdn.net

    另特別感謝 “華獅虎 ”幫助我在3DMAX里制作UV通道和驗證效果。

    總結

    以上是生活随笔為你收集整理的unity 批量导入模型工具_零基础的Unity图形学笔记3:使用多模型UV与优化模型导出...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。