2013-10-02 245 views
2

我已經創建了一個具有紋理和AO的對象,它們在maya(具有分層紋理)的不同UV集上,並且在maya中,混搭看起來沒問題。Unity 3D多UV集

我如何在Unity3D中實現相同的效果?

我無法統一使用第二個UV設置。

+0

統一的內置着色器都沒有使用UV2任何東西,但光照貼圖。你需要編寫你自己的着色器。 – Jessy

+0

Unity資源商店中有許多着色器可用。有可能已經有一個使用AO2的UV2。可能花費一點點,但可能比投資數天學習着色器編程便宜。 (這個提到頂點AO的支持https://www.assetstore.unity3d.com/#/content/8880。可以聯繫他們確認它是做你想做的。) – Calvin

回答

4

您需要編寫一個可以做到這一點的着色器。這裏有一個很小的例子,但你可能會需要有東西鏡面更復雜的設置,等等

Shader "Custom/twotex" { 
     Properties { 
      _MainTex ("Base (RGB)", 2D) = "white" {} 
      _AoTex ("AO (RGB)", 2D) = "white" {} 

     } 
     SubShader { 
      Tags { "RenderType"="Opaque" } 
      LOD 200 

      CGPROGRAM 
      #pragma surface surf Lambert 

      sampler2D _MainTex; 
      sampler2D _AoTex; 


      struct Input { 
       float2 uv_MainTex : TEXCOORD0; 
       float2 uv_AoTex : TEXCOORD1; 
      }; 

      void surf (Input IN, inout SurfaceOutput o) { 
       half4 c = tex2D (_MainTex, IN.uv_MainTex.xy); 
       half4 ao = tex2D (_AoTex, IN.uv_AoTex.xy); 
       o.Albedo = c.rgb * ao.rgb; 
       o.Alpha = c.a; 
      } 
      ENDCG 
     } 
     FallBack "Diffuse" 
    } 
+0

謝謝你這有效,有一些小的改變:) – eblue

+1

對於那些需要更多信息的人,我只是改變了它,所以它使用網格中的第二個UV集合,並添加了一個滑塊來控制強度(更改了下面的float2 uv_AoTex:TEXCOORD1; - > float2 uv2_AoTex:TEXCOORD1;以及half4 ao = tex2D(_AoTex,IN.uv_AoTex.xy);) - > half4 ao = tex2D(_AoTex,IN.uv2_AoTex.xy);) – eblue

+0

順便說一句,我只注意到它沒有讀取Alpha通道,我修改了它會是「#pragma surface surf Lambert alpha」,但整個網格都是半透明的,這裏是鏈接[link](http://imageshack.us/a/img849/6179/dml8.jpg),圖像在權利沒有敖。 – eblue