天天看點

技術分享連載(四十一)

Q1:Unity UI圖集不是正方形,使用PVRTC格式的話,會出現問題麼?比如是512x1024的原始比例。

如果紋理尺寸長寬不相等,那麼即便是2的幂次,也不會被壓縮成PVRTC格式紋理。建議在iOS平台中,盡可能保證紋理尺寸為2的幂次且長寬相等。

Q2:在GPU分析器裡面看到,同一個NGUI的圖集被繪制了很多次。請問是否是由于各個界面Panel不一樣導緻的?這種情況下如何優化?

技術分享連載(四十一)
圖檔中紅框處的内容其實并不是同一個Atlas被多次渲染,而是擁有同一Atlas的不同Widgets在進行渲染。這些Widgets的Mesh是動态生成的,且在不同的Draw Call中,NGUI在生成它們時根據所使用的Atlas的名字進行命名,是以才會出現圖檔中的現象。究其原因,是因為NGUI中UI界面的Draw Call是以Panel為機關的,對于使用相同Atlas的Widget,如果被包含在不同的Panel中,那麼它們将不會被合并到一個Draw Call中,是以在Unity Profiler中的Render.Mesh中出現了多個相同名稱的UIMesh。一般來說,我們建議研發團隊在UI制作時盡可能将同一Atlas中的UI元素放在同一Panel中使用,這樣将會有效避免額外Draw Call的生成。

Q3:對于NGUI而言,如果界面元素的坐标是非整數的數值,會導緻界面元素模糊麼?還有哪些原因會造成界面元素模糊?

導緻界面元素模糊的原因主要分為兩個,一是像素未對齊(通常就是因為坐标非整數造成),在相鄰像素色差較大的情況下容易出現模糊,特别是文字部分;二是紋理分辨率相對于螢幕的分辨率被縮小或放大,紋理被縮小通常會表現出鋸齒感,而紋理被放大則會表現出模糊。 而對于動态字型,通常隻需要確定像素對齊即可使其不模糊,但需要注意的是,UGUI與NGUI都有全局縮放的功能(分别在Canvas Scaler和UIRoot元件上),是為了確定不同分辨率下布局相同,也會使動态字型出現縮放,進而造成模糊的問題。

Q4:怎麼去掉Mesh中的Colors屬性?我把FBX裡的LayerElementColor字段都删了,這個Colors還是存在。

技術分享連載(四十一)
預設情況下,在3d模組化軟體中并不會導出Color屬性。以3ds max為例,Color通常是通過modifier添加的,是以隻需要在導出前将其删除即可。另外也可以通過fbx sdk來直接對檔案進行處理,但這種做法就需要檢視官方的文檔了。

Q5:同一個場景,烘了兩套 Lightmap,切換的時候有沒有辦法在這兩套Lightmap之間實作平滑過渡?

可以嘗試重寫渲染Lightmap的相關Shader,Unity提供了DecodeLightmap函數,是以在Shader中同時Decode需要過渡的兩張Lightmap,然後針對相同的采樣點進行權重平均(具體的過渡方式可自行控制),進而得到Lightmap平滑過渡的效果。

原文出處:侑虎科技

本文作者:admin

轉載請與作者聯系,同時請務必标明文章原始出處和原文連結及本聲明。