最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

資源審核

2020-05-21 10:35 作者:unity_某某師_高錦錦  | 我要投稿

實際項目中發(fā)現(xiàn)的許多問題都是源自無心之過:臨時的“測試”更改和疲憊不堪的開發(fā)人員的誤點擊可能會暗地里添加性能不良的資源或更改現(xiàn)有資源的導(dǎo)入設(shè)置。

對于任何大規(guī)模的項目,最好是將防止人為錯誤作為第一道防線。編寫一小段代碼來禁止將 4K 未壓縮紋理添加到項目中,是相對簡單的事情。

但是,這種錯誤操作卻是十分常見的。一個 4K 的未壓縮紋理會占用 60 MB 的內(nèi)存。在低端移動設(shè)備(如 iPhone 4S)上,占用的內(nèi)存超過大約 180–200 MB 是十分危險的。如果誤添加此類紋理,就會無意中占用應(yīng)用程序內(nèi)存預(yù)算的三分之一到四分之一,并導(dǎo)致難以診斷的內(nèi)存不足錯誤。

雖然現(xiàn)在可以使用 5.3 版內(nèi)存性能分析器來跟蹤這些問題,但最好在最初就確保這些錯誤不可能發(fā)生。

使用 AssetPostprocessor

Unity Editor 中的?AssetPostprocessor?類可用于在 Unity 項目上強制執(zhí)行某些最低標準。導(dǎo)入資源時將回調(diào)此類。要使用此類,應(yīng)繼承?AssetPostprocessor?并實現(xiàn)一個或多個?OnPreprocess?方法。重要的方法包括:

  • OnPreprocessTexture

  • OnPreprocessModel

  • OnPreprocessAnimation

  • OnPreprocessAudio

請參閱?AssetPostprocessor?的腳本參考,了解更多可能的?OnPreprocess?方法。

public class ReadOnlyModelPostprocessor : AssetPostprocessor { ??

public void OnPreprocessModel() { ? ? ? ?

ModelImporter modelImporter = (ModelImporter)assetImporter; ? ? ? ?if(modelImporter.isReadable) { ? ? ? ? ? ?

modelImporter.isReadable = false; ? ? ? ? ? ?

modelImporter.SaveAndReimport(); ? ? ? ?

} } }

這是一個在項目中?AssetPostprocessor?強制執(zhí)行規(guī)則的簡單示例:

每次將模型導(dǎo)入項目時,或者模型的導(dǎo)入設(shè)置發(fā)生更改時,都會調(diào)用此類。該代碼只是檢查?Read/Write enabled?標志(由?isReadable?屬性表示)是否設(shè)置為?true。如果是,則強制將標志位更改為?false,然后保存并重新導(dǎo)入資源。

請注意,調(diào)用?SaveAndReimport?會導(dǎo)致再次調(diào)用此代碼片段!但是,因為現(xiàn)在已確保?isReadable?為 false,所以此代碼不會產(chǎn)生無限的重新導(dǎo)入循環(huán)。

此變更的原因?qū)⒃谙旅娴摹澳P汀辈糠钟懻摗?/p>

通用資源規(guī)則

紋理

禁用 read/write enabled 標志

Read/Write enabled?標志使紋理在內(nèi)存中保留兩次:一次保存在 GPU 中,一次保存在 CPU 可尋址內(nèi)存中(1)(注意: 這是因為大多數(shù)平臺上從 GPU 內(nèi)存回讀的速度極慢。將紋理從 GPU 內(nèi)存讀入臨時緩沖區(qū)以供 CPU 代碼(例如 Texture.GetPixel)使用將是非常低效的)。在 Unity 中,默認情況下禁用此設(shè)置,但可能會無意中將其打開。

只有在著色器之外操作紋理數(shù)據(jù)時(例如使用?Texture.GetPixel?和?Texture.SetPixel?API 時)才需要?Read/Write Enabled,否則應(yīng)盡可能避免使用它。

盡可能禁用 Mipmap

如果對象相對于攝像機具有相對不變的 Z 深度,則可禁用 Mipmap,這樣將大約節(jié)省加載紋理所需的內(nèi)存的三分之一。如果對象的 Z 深度會發(fā)生變更,則禁用 Mipmap 可能導(dǎo)致 GPU 上的紋理采樣性能變差。

通常情況下,這對于 UI 紋理以及在屏幕上以恒定大小顯示的其他紋理非常有用。

壓縮所有紋理

使用適合項目目標平臺的紋理壓縮格式對于節(jié)省內(nèi)存至關(guān)重要。

如果所選的紋理壓縮格式不適合目標平臺,Unity 會在加載紋理時解壓縮紋理,這將消耗 CPU 時間和額外的內(nèi)存。此問題在 Android 設(shè)備上最常見,因為此類平臺通常因芯片組不同而支持截然不同的紋理壓縮格式。

實施合理的紋理大小限制

雖然很簡單,但也很容易忘記調(diào)整紋理大小或無意中更改紋理大小導(dǎo)入設(shè)置。應(yīng)確定不同類型紋理的合理最大值,并通過代碼強制執(zhí)行這些限制規(guī)則。

對于許多移動應(yīng)用程序,2048x2048 或 1024x1024 足以滿足紋理圖集的要求,而 512x512 足以滿足應(yīng)用于 3D 模型的紋理的要求。

模型

禁用 Read/Write enabled 標志

模型的?Read/Write enabled?標志與紋理的上述相應(yīng)標志具有相同的工作原理。但是,模型在默認情況下會啟用該標志。

如果項目在運行時通過腳本修改網(wǎng)格 (Mesh),或者如果網(wǎng)格用作 MeshCollider 組件的基礎(chǔ),則 Unity 會要求啟用此標志。如果模型未在 MeshCollider 中使用并且未被腳本操縱,請禁用此標志以節(jié)省一半模型內(nèi)存。

在非角色模型上禁用骨架

默認情況下,Unity 會為非角色模型導(dǎo)入通用骨架。如果模型在運行時實例化,則會導(dǎo)致添加?Animator?組件。如果模型沒有通過動畫系統(tǒng)進行動畫處理,則會給動畫系統(tǒng)增加不必要的開銷,因為每幀都必須運行一次所有激活的 Animator。

在非動畫模型上禁用骨架可以避免自動添加 Animator 組件,并防止可能無意中向場景添加不需要的 Animator。

在動畫模型上啟用 Optimize Game Objects 選項

Optimize Game Objects?選項對動畫模型有著顯著的性能影響。禁用該選項后,Unity 會在每次實例化模型時創(chuàng)建一個大型變換層級視圖來鏡像模型的骨骼結(jié)構(gòu)。此變換層級視圖的更新成本很高,尤其是在附加了其他組件(如粒子系統(tǒng)或碰撞體)的情況下。它還限制了 Unity 通過多線程執(zhí)行網(wǎng)格蒙皮和骨骼動畫計算的能力。

如果需要暴露模型骨骼結(jié)構(gòu)上的特定位置(例如暴露模型的雙手以便動態(tài)附加武器模型),則可在?Extra Transforms?列表中將這些位置專門列入白名單。

如需了解更多詳細信息,請參閱 Unity 手冊的?Model Importer?頁面。

盡可能使用網(wǎng)格壓縮

啟用網(wǎng)格壓縮可減少用于表示模型數(shù)據(jù)不同通道的浮點數(shù)的位數(shù)。這樣做可能導(dǎo)致精確度的輕微損失,在用于最終項目之前,美術(shù)師應(yīng)評估這種不精確性的影響。

在給定壓縮級別中使用的具體位數(shù)在?ModelImporterMeshCompression?腳本參考中有詳細說明。

請注意,可對不同的通道使用不同級別的壓縮,因此項目可選擇僅壓縮切線和法線,同時保持 UV 和頂點位置不壓縮。

注意網(wǎng)格渲染器設(shè)置

將網(wǎng)格渲染器添加到預(yù)制件或游戲?qū)ο髸r,請注意組件上的設(shè)置。默認情況下,Unity 會啟用陰影投射和接收、光照探針采樣、反射探針采樣和運動矢量計算。

如果項目不需要這些功能中的一個或多個,請確保通過自動腳本關(guān)閉它們。添加網(wǎng)格渲染器的任何運行時代碼也都需要處理這些設(shè)置。

對于 2D 游戲,在啟用陰影選項的情況下意外地將網(wǎng)格渲染器添加到場景會為渲染循環(huán)添加完整的陰影 pass。通常情況下,這是對性能的浪費。

音頻

適合平臺的壓縮設(shè)置

應(yīng)為音頻啟用與可用硬件匹配的壓縮格式。所有 iOS 設(shè)備都包含硬件 MP3 解壓器,而許多 Android 設(shè)備本身支持 Vorbis。

此外,應(yīng)將未壓縮的音頻文件導(dǎo)入 Unity。Unity 在構(gòu)建項目時總是會重新壓縮音頻。無需導(dǎo)入壓縮的音頻再重新壓縮,這只會降低最終音頻剪輯的質(zhì)量。

將音頻剪輯強制設(shè)置為單聲道

很少有移動設(shè)備實際配備立體聲揚聲器。在移動平臺項目中,將導(dǎo)入的音頻剪輯強制設(shè)置為單聲道會使其內(nèi)存消耗減半。此設(shè)置也適用于沒有立體聲效果的任何音頻,例如大多數(shù) UI 聲音效果。

降低音頻比特率

盡量降低音頻文件的比特率,以進一步節(jié)省內(nèi)存消耗和構(gòu)建的項目大小,但這種情況需要咨詢音頻設(shè)計師。


資源審核的評論 (共 條)

分享到微博請遵守國家法律
景洪市| 南部县| 呼伦贝尔市| 清涧县| 洛扎县| 广东省| 新平| 寿光市| 武清区| 望城县| 馆陶县| 孝昌县| 周至县| 丰台区| 铜鼓县| 措美县| 新兴县| 富顺县| 广河县| 廊坊市| 海林市| 石城县| 齐河县| 贵州省| SHOW| 德令哈市| 博野县| 灵丘县| 望城县| 鹤壁市| 六安市| 化德县| 张掖市| 金沙县| 三明市| 密云县| 田林县| 通榆县| 浦北县| 沿河| 黄山市|