<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【編程雜記】游戲性能優(yōu)化的一些經(jīng)驗(yàn)之談

      作者:王選易,出處:http://www.rzrgm.cn/neverdie/ 歡迎轉(zhuǎn)載,也請(qǐng)保留這段聲明。如果你喜歡這篇文章,請(qǐng)點(diǎn)推薦。謝謝!

      最近談了許多Unity相關(guān)的東西,這篇博文就將一些更加寬泛的東西,算是這段時(shí)間里游戲開發(fā)的一些經(jīng)驗(yàn)的總結(jié)吧。

      優(yōu)化概論

      說起游戲的優(yōu)化,在游戲開發(fā)中經(jīng)常分為這幾步:

      1. 首先要確定游戲中經(jīng)常會(huì)出現(xiàn)哪些問題 - Profile
      2. 然后確定在哪些方向進(jìn)行性能優(yōu)化 - Analyze
      3. 最后再盡可能將問題逐個(gè)解決 - Solve

      游戲開發(fā)中一定是先做工具,進(jìn)行Profile,再進(jìn)行優(yōu)化,所以,說優(yōu)化就不得不再扯一下Profile

      常見的工具有一些是引擎和IDE自帶的,比如Unity自帶的Profiler,就包含了CPU,GPU,Memory等等各式各樣的性能分析工具,其他的比如GPA,Xcode Instrument和Visual Studio,Intel自帶的內(nèi)存管理工具在必要的時(shí)候也使需要去學(xué)習(xí)和使用的。

      另外一些工具,就需要根據(jù)游戲的需求去編寫了,比如一鍵關(guān)閉所有特效,一鍵更改分辨率等等,一鍵設(shè)置場(chǎng)上NPC數(shù)量,簡(jiǎn)單的游戲如啪啪三國(guó)是做成快捷鍵開啟Profile功能的,更為復(fù)雜的游戲如神秘海域則是通過游戲內(nèi)控制臺(tái)來進(jìn)行更為細(xì)致的Profie。

      接著,我們?cè)賮碚f說游戲優(yōu)化中主要的四個(gè)考慮方向:

      CPU

      引發(fā)的問題:

      • 由于短時(shí)間內(nèi)的計(jì)算量太大,導(dǎo)致畫面流暢性降低,俗稱跳幀
      • 發(fā)熱嚴(yán)重,耗電量高

      常見的優(yōu)化手段:

      • 將計(jì)算分到多個(gè)邏輯幀中進(jìn)行計(jì)算,避免短時(shí)間內(nèi)的性能超過負(fù)荷,俗稱“分幀”(time-slice)。
      • 將可以緩存的數(shù)據(jù)盡可能的緩存起來,避免重復(fù)計(jì)算和重復(fù)分配內(nèi)存,常見的示例為“內(nèi)存池”。
      • 使用合理的算法和數(shù)據(jù)結(jié)構(gòu),比如:冒泡排序和直接插入排序在整體數(shù)組比較有序的情況下效率大大好于快速排序。把快排替換成是優(yōu)化程序排序效率的一個(gè)常見的思路。

      GPU

      引發(fā)的問題:

      • 發(fā)熱嚴(yán)重,耗電量高
      • FPS降低

      常見的優(yōu)化手段:

      • 優(yōu)化美術(shù)資源,比如合理規(guī)劃圖集,約定好模型的最大三角形面數(shù),制定合理的粒子效果規(guī)范。這個(gè)可以說是游戲優(yōu)化中最重要的一個(gè),因此,技術(shù)美術(shù)在游戲開發(fā)中作用巨大。
      • 簡(jiǎn)化或者優(yōu)化著色器(shader),如在游戲開始前就對(duì)Shader進(jìn)行編譯和加載。
      • 使用Batching,盡量減少DrawCall
      • 使用平臺(tái)推薦的壓縮格式,比如安卓平臺(tái)的ETC1和IOS平臺(tái)的PVRTC

      IO和網(wǎng)絡(luò)

      引發(fā)的問題:

      • 網(wǎng)絡(luò)延遲甚至掉線
      • 加載資源導(dǎo)致的跳幀
      • 加載時(shí)間過長(zhǎng)

      常見的優(yōu)化手段:

      • 使用獨(dú)立的線程進(jìn)行加載,有些引擎如Unity中還能利用協(xié)程
      • 減少網(wǎng)絡(luò)包里面的冗余數(shù)據(jù)
      • 合并小包,減少請(qǐng)求數(shù)據(jù)的次數(shù)
      • 分幀對(duì)回包進(jìn)行處理
      • 限制一定時(shí)間內(nèi)的發(fā)包頻率

      內(nèi)存

      引發(fā)的問題:

      • 閃退和卡死,比如安卓的Low Memory Killer會(huì)在低內(nèi)存情況下殺掉內(nèi)存占用過大的程序。

      常見的優(yōu)化手段

      • 動(dòng)態(tài)加載和卸載資源,比如在游戲內(nèi)的時(shí)候,我們可以把游戲外的一些UI圖集卸載掉。
      • 降低資源質(zhì)量或屏幕分辨率,這是有損優(yōu)化,一般作為最后的手段

      對(duì)做過項(xiàng)目的一些思考

      需要關(guān)注非功能性需求

      這一點(diǎn)思考是我從為什么很多看起來不是很復(fù)雜的網(wǎng)站,比如 Facebook 需要大量頂尖高手來開發(fā)?這個(gè)答案中想到的,正如這位答主所說:

      事實(shí)上,從我的經(jīng)驗(yàn)來看,一般來說,很多軟件項(xiàng)目及產(chǎn)品,其在非功能性需求上的成本,難度和工作量,是要超過功能性需求的。在特定的軟件領(lǐng)域,例如網(wǎng)站(尤其是淘寶,facebook這樣海量用戶規(guī)模的網(wǎng)站),金融(銀行證券),電信領(lǐng)域,其非功能性需求實(shí)現(xiàn)的重要性,工作量,技術(shù)難度要遠(yuǎn)遠(yuǎn)遠(yuǎn)遠(yuǎn)大于功能性需求的實(shí)現(xiàn)。而且,功能性的需求的實(shí)現(xiàn),其實(shí)在大多數(shù)情況下,更依賴于業(yè)務(wù)的高手(或者好的產(chǎn)品經(jīng)理)而不是技術(shù)的高手,而非功能性需求的實(shí)現(xiàn),恰恰是挑戰(zhàn)技術(shù)高手的重要課題。

      在游戲前端這邊做了一段時(shí)間,大家都在抱怨游戲前端技術(shù)含量低,只能寫業(yè)務(wù)邏輯,但是其中的陷阱就是,作為前端,你應(yīng)當(dāng)盡量少寫業(yè)務(wù)邏輯,你關(guān)注過一下的模塊嗎?

      • 性能:你有沒有在自己的游戲中進(jìn)行Profile,觀察在以上各個(gè)參數(shù)有沒有達(dá)到指標(biāo)
      • 安全:你的游戲前端代碼的Release版本是否還能被別人輕易反編譯,你的游戲是否還能輕易被玩家截取網(wǎng)絡(luò)包或修改內(nèi)存數(shù)據(jù)
      • 可測(cè)試性:你的前端代碼能不能進(jìn)行單元測(cè)試,能不能在QA測(cè)試之前就把Model層的所有bug解決掉
      • 數(shù)據(jù)驅(qū)動(dòng):你能不能做出更優(yōu)秀的工具來給美術(shù)和策劃使用,解放他們的生產(chǎn)力?

      需要善于劃定范圍,縮小問題區(qū)間

      我在過去幾個(gè)月里,參加了全民突擊和崩壞學(xué)園2兩個(gè)Unity3D項(xiàng)目的開發(fā),也遇到了一些性能優(yōu)化相關(guān)的問題,在程序出現(xiàn)問題時(shí),很多時(shí)候我們會(huì)通過所謂的“經(jīng)驗(yàn)”去解決問題,這種Quick Link的能力自然是非常重要,但經(jīng)驗(yàn)并非萬能。

      但是從另一方面來講,當(dāng)我們無法從自己過往的經(jīng)驗(yàn)中找到答案的時(shí)候,我們就要通過劃分范圍,縮小問題區(qū)間來解決問題了,許多人往往只是在自己的經(jīng)驗(yàn)中死守一個(gè)局部的視野去處理問題,最后的結(jié)果就一定不能盡如人意。

      總結(jié)

      其實(shí)這四個(gè)方面的優(yōu)化總是相互制衡的,你把一個(gè)方面的優(yōu)化做好了,另一個(gè)方面的問題又會(huì)出現(xiàn)了,比如,我們?nèi)绻褂脛?dòng)態(tài)加載和卸載資源,這就雖然減少了內(nèi)存占用量,會(huì)在IO上造成加載時(shí)間延長(zhǎng)的問題。

      所以,我們?cè)谧鲇螒騼?yōu)化的時(shí)候,不能太追求完美,剛剛好就是真的好(Good Enough Is Fine)。最終使得以上這四個(gè)方面能達(dá)到均衡即可,切忌在某一方面優(yōu)化過頭,又引發(fā)其他方面的問題,此消彼長(zhǎng)的情況下,有時(shí)反而不如不做優(yōu)化。

      posted @ 2015-05-09 16:09  月出漸分明  閱讀(7902)  評(píng)論(4)    收藏  舉報(bào)
      主站蜘蛛池模板: 亚洲国产中文字幕精品| 亚洲一级特黄大片一级特黄| 亚洲嫩模喷白浆在线观看| 亚洲性无码av在线| 欧美精品黑人粗大破除| 久女女热精品视频在线观看| 武邑县| 日韩精品久久一区二区三| 亚洲三区在线观看内射后入| 亚洲 制服 丝袜 无码| 国产熟女50岁一区二区| 精品人妻免费看一区二区三区| 99热精品国产三级在线观看| 国产真实精品久久二三区| 国产视频最新| 国产精品任我爽爆在线播放6080 | 一区二区在线观看 激情| 国产熟女激情一区二区三区| 成人网站免费观看永久视频下载 | 视频一区二区三区自拍偷拍| 熟女少妇精品一区二区| Y111111国产精品久久久| 亚洲中文无码手机永久| 亚洲理论在线A中文字幕| 国产午夜精品福利在线观看| 伊人欧美在线| 麻豆妓女爽爽一区二区三| 人妻熟女一区二区aⅴ向井蓝| 亚洲精品中文字幕码专区| 2020年最新国产精品正在播放 | 华亭县| 精品三级在线| 天堂va亚洲va欧美va国产| 实拍女处破www免费看| 国内精品亚洲成av人片| 日本熟妇色xxxxx日本免费看| 亚洲精品日韩中文字幕| 兴隆县| 色综合色综合久久综合频道| 国产一区二区三区不卡视频| 亚洲狼人久久伊人久久伊|