欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Unity項(xiàng)目中如何實(shí)現(xiàn)資源管理

小編給大家分享一下Unity項(xiàng)目中如何實(shí)現(xiàn)資源管理,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)公司從2013年成立,公司以成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計(jì)等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶上1000家,涉及國(guó)內(nèi)多個(gè)省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗(yàn)。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計(jì)、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計(jì)、獨(dú)特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。

一個(gè)3D游戲項(xiàng)目中的資源主要由貼圖、模型、動(dòng)作、聲音等組成。模型設(shè)計(jì)師設(shè)計(jì)模型,場(chǎng)景由模型組成,角色不僅是一個(gè)精致的模型還帶了各類的動(dòng)作,包括走路、跑步、待機(jī)、攻擊等等。各類基礎(chǔ)資源構(gòu)成了游戲的大部分元素。

在我做的劍俠世界手游項(xiàng)目里面有上萬的材質(zhì),主城更是有7000+的模型。每個(gè)角色可以有不同的外裝、發(fā)型、武器、掛件、坐騎等等。承載這么多資源對(duì)內(nèi)存以及性能都有非常高的要求。一個(gè)優(yōu)秀的資源管理方案可以承載更多內(nèi)容,滿足更多的需求。

貼圖資源配置

對(duì)于這資源管理,Unity提供非常豐厚的支持。以貼圖為例子,Unity支持直接把原始貼圖直接放進(jìn)工程,不需要做任何額外處理。Unity根據(jù)貼圖配置會(huì)自動(dòng)生成最后的貼圖數(shù)據(jù)。不同平臺(tái)(IOS、Android、PC)支持的貼圖格式不一樣,通過配置文件的形式,最后方便的生成不同格式的貼圖。這是一個(gè)非常好的做法,同時(shí)可以直觀的在開發(fā)環(huán)境看到不同格式的貼圖表現(xiàn)。

Unity項(xiàng)目中如何實(shí)現(xiàn)資源管理

可以看到上圖,貼圖的配置屬性非常多。不同的貼圖會(huì)有不同的配置,有些屬性的配置對(duì)內(nèi)存和性能會(huì)有較大的影響。下圖可以看到現(xiàn)在這是一張 512 X 512的RGB貼圖,內(nèi)存大小為1M。如果限定使用50M的貼圖內(nèi)存的話,那只能加載50張貼圖,這明顯是不夠用的。

Unity項(xiàng)目中如何實(shí)現(xiàn)資源管理

三維計(jì)算機(jī)圖形渲染中一個(gè)常用的技術(shù)被稱為Mipmap。為了加快渲染速度和減少圖形鋸齒,貼圖被處理成由一系列被預(yù)先計(jì)算和優(yōu)化過的圖片組成的文件。對(duì)于UI使用的2D貼圖,我們需要關(guān)閉Mipmap避免精度損失。同時(shí)在測(cè)試中我們也發(fā)現(xiàn)開啟Mipmap并沒有帶來多少性能提升,在手游的場(chǎng)景中,我們的視距非常近,并沒有過多這方面的需求。同時(shí)關(guān)閉Mipmap我們能節(jié)約33%內(nèi)存,這是一個(gè)比較不錯(cuò)的提升。關(guān)閉Mipmap后,我們看到貼圖變成了0.8M,這里應(yīng)該是768KB。

Unity項(xiàng)目中如何實(shí)現(xiàn)資源管理

一個(gè)不小的提升,不過還是要注意,這是測(cè)試之后做的決定,不同情況下的決策是不一樣的。

接下來討論貼圖壓縮,ETC是所有Android都接受的格式,這個(gè)格式的壓縮質(zhì)量較差。但在大部分情況下,很難在手機(jī)那么小的屏幕上看到差異,渲染本身就是一件視覺欺騙,如果覺得滿意那就沒問題。ETC 2對(duì)圖片質(zhì)量有較大的提升,但是需要 OPGL ES 3.0 以上才支持,這個(gè)要根據(jù)支持的機(jī)型做決定。這里不對(duì)壓縮格式做過多的討論,詳情見Unity官方文檔。

設(shè)置壓縮格式為ETC后貼圖的大小為128KB,減小了6倍,這是一個(gè)非常大的提升。

Unity項(xiàng)目中如何實(shí)現(xiàn)資源管理

再來說說Max Size這個(gè)屬性,真的需要512X512這么大的一張貼圖么,256X256是不是足夠了。做出這樣的決定,然后在真機(jī)上看看效果,貼圖大小限制成256后,最后的貼圖大小為32KB。總計(jì)減少了32倍,現(xiàn)在我們可以加載1600張貼圖了,相信這個(gè)數(shù)字能滿足大部分項(xiàng)目的需求了。

Unity項(xiàng)目中如何實(shí)現(xiàn)資源管理

最后來說說Read/Write Enable這個(gè)屬性,如果打開這個(gè)屬性,會(huì)使運(yùn)行時(shí)貼圖大小翻倍,內(nèi)存中會(huì)額外存儲(chǔ)一份貼圖數(shù)據(jù)。在大部分情況下這是不必要的,所以默認(rèn)關(guān)閉這個(gè)屬性,在需要的時(shí)候開啟。

在這種最優(yōu)的配置下我們使貼圖大小縮小了64倍,從開始的25張到最后的1600張,令人驚奇的優(yōu)化。資源格式配置在整體資源管理中屬于最基礎(chǔ)的模塊,但同時(shí)也是最重要的模塊,他決定了你能顯示多少資源。

資源配置工具

正常情況下貼圖資源使由美術(shù)提交,不同種類的貼圖有不一樣的配置文件,Ios的配置格式和Android也會(huì)有區(qū)別。很難要求美術(shù)對(duì)資源配置這塊有深入的理解,同時(shí)每次都要配置一些屬性也顯的非常麻煩。這時(shí)候就需要程序來幫忙做一些工作了。

首先根據(jù)前面的認(rèn)識(shí),我們抽離出部分屬性設(shè)置。

public class TextureImportData : ImportData 
{
    public TextureAlphaMode AlphaMode = TextureAlphaMode.FormTexture;
    public TextureImporterType TexType = TextureImporterType.Default;
    public TextureImporterShape ShapeType = TextureImporterShape.Texture2D;
    public TextureImporterFormat AndroidFormat = TextureImporterFormat.ETC2_RGB4;
    public TextureImporterFormat IosFormat = TextureImporterFormat.PVRTC_RGB4;
    public bool ReadWriteEnable = false;
    public bool MipmapEnable = false;
    public int MaxSize = -1;
}

然后可以給一個(gè)貼圖應(yīng)用這個(gè)配置

public static void FormatTexture(string path, TextureImportData data)
{
    TextureImporter tImporter = AssetImporter.GetAtPath(path) as TextureImporter;
    if (tImporter == null) return;

    if (tImporter.textureType != data.TexType)
    {
        tImporter.textureType = data.TexType;
    }
    tImporter.isReadable = data.ReadWriteEnable;
    tImporter.mipmapEnabled = data.MipmapEnable;

    if (data.MaxSize > 0)
    {
        tImporter.maxTextureSize = data.MaxSize;
    }

    TextureImporterPlatformSettings settingAndroid = tImporter.GetPlatformTextureSettings(EditorConst.PlatformAndroid);
    settingAndroid.overridden = true;
    settingAndroid.format = data.GetFormatByAlphaMode(data.AndroidFormat, tImporter);
    settingAndroid.maxTextureSize = tImporter.maxTextureSize;
    tImporter.SetPlatformTextureSettings(settingAndroid);

    TextureImporterPlatformSettings settingIos = tImporter.GetPlatformTextureSettings(EditorConst.PlatformIos);
    settingIos.overridden = true;
    settingIos.format = data.GetFormatByAlphaMode(data.IosFormat, tImporter);
    settingIos.maxTextureSize = tImporter.maxTextureSize;
    tImporter.SetPlatformTextureSettings(settingIos);

    tImporter.SaveAndReimport();
}

最后和美術(shù)做了一個(gè)約定或者說規(guī)范,可以按目錄和一個(gè)正則來批量設(shè)置貼圖格式。

一般來說十幾條規(guī)則就能覆蓋所有情況,如果有疏漏,增加一個(gè)規(guī)則即可。這里還要需要考慮一個(gè)細(xì)節(jié)問題就是如果一個(gè)文件被多個(gè)規(guī)則覆蓋怎么辦。設(shè)想一開始添加的是一些通用規(guī)則,后面添加的則是一些特殊規(guī)則。而且按照一條條規(guī)則去設(shè)置屬性,后面的規(guī)則也會(huì)覆蓋前面的規(guī)則。所以這里只用引入一個(gè)規(guī)則配置的順序?qū)傩约纯桑樞蚩梢孕薷模皂樞蚩亢蟮囊?guī)則為準(zhǔn)。然后為了方便查看,還可以記錄當(dāng)前規(guī)則下貼圖的數(shù)量以及大小,這樣有一個(gè)更加直觀的認(rèn)識(shí)。

public class ImportData {
    public string RootPath = "ArtWorks";
    public string FileNameMatch = "*.*";
    public int  Index = -1;
    public int  TotalCount = 0;
    public int  TotalMemuse = 0;
    public bool PreBuild = true;
}

設(shè)計(jì)完了數(shù)據(jù),最后就是實(shí)現(xiàn)一個(gè)窗口界面方便來配置這些屬性,同時(shí)可以把需要的信息都顯示窗口上。窗口是直接用Unity的API實(shí)現(xiàn)了,還是非常方便的。

Unity項(xiàng)目中如何實(shí)現(xiàn)資源管理

最后我把資源配置工具交給技術(shù)美術(shù)(Tech Artist)來使用,美術(shù)這邊有需求有調(diào)整,直接配置即可,不需要繼續(xù)來參與。

項(xiàng)目中的資源管理

然后考慮是否有資源漏配,資源配置是否合理,目前我們資源處于一個(gè)什么樣的情況?需要一個(gè)方案來獲取更多信息。上面的工具已經(jīng)看到能統(tǒng)計(jì)貼圖的資源大小,實(shí)現(xiàn)一個(gè)函數(shù)可以導(dǎo)出資源使用情況的統(tǒng)計(jì),以及按大小排序的資源列表。然后把每次統(tǒng)計(jì)結(jié)果保存下來,對(duì)比每天的統(tǒng)計(jì)結(jié)果可以觀察到項(xiàng)目中的一個(gè)資源增長(zhǎng)情況。

Unity項(xiàng)目中如何實(shí)現(xiàn)資源管理

我特意選了一張有問題的貼圖列表,可以觀察到如果配置有問題,很容易在列表中暴露出來。

還有一些想法沒有實(shí)踐,比如不僅顯示貼圖大小,還顯示貼圖的壓縮格式。知道這張貼圖的大小是2M,但是不知道是壓縮前2M還是壓縮之后的。同時(shí)項(xiàng)目中不可避免的還是存在重復(fù)貼圖,可以考慮程序?qū)崿F(xiàn)一個(gè)功能做重復(fù)貼圖對(duì)比等等。

不過要考慮投入成本與收益,關(guān)注Top10與每日的資源變化已經(jīng)對(duì)項(xiàng)目有一定程度上的把控。可以把精力放到更關(guān)鍵的產(chǎn)品開發(fā)上,這里實(shí)際做了產(chǎn)品質(zhì)量的保障。

以上是“Unity項(xiàng)目中如何實(shí)現(xiàn)資源管理”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)頁名稱:Unity項(xiàng)目中如何實(shí)現(xiàn)資源管理
本文地址:http://chinadenli.net/article42/gsjoec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站全網(wǎng)營(yíng)銷推廣搜索引擎優(yōu)化ChatGPT企業(yè)網(wǎng)站制作網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站