久久精品人妻一区国产传媒国产精品|51黑料吃瓜网在线观看色噜噜色偷偷30根|久久久久久久久国产在亚洲中文字幕人妻|91av福利china人妻91九色|国语精品视频自产自拍|色婷婷av一区二区三区久久|国产91丝袜在线|亚洲二区中文字幕|91久久精品中文内射|中文 欧美 日韩,3d色噜噜狠狠一区二区三区,国产精品福利99,国产精品传媒网站

我的訂單|我的收藏|我的商城|幫助中心|返回首頁(yè)
搜維爾[SouVR.com]>服務(wù)>VR研究院 孵化器>VR研究院>內(nèi)容制作>Unity

《行尸走肉:行軍作戰(zhàn)》移動(dòng)端優(yōu)化經(jīng)驗(yàn)

文章來(lái)源:Unity 作者:frank 發(fā)布時(shí)間:2018年08月21日 點(diǎn)擊數(shù): 次 字號(hào):

  來(lái)自Disruptor Beam的圖形和客戶(hù)端架構(gòu)師Jason Booth,擁有超過(guò)25年創(chuàng)作游戲的豐富經(jīng)驗(yàn),。本文將分享他參與開(kāi)發(fā)《行尸走肉:行軍作戰(zhàn)》所積累的,,一些讓大型游戲在低端移動(dòng)設(shè)備上也能擁有優(yōu)秀運(yùn)行體驗(yàn)的經(jīng)驗(yàn)技巧。

  如果需要《行尸走肉:行軍作戰(zhàn)》這款游戲高品質(zhì)的運(yùn)行,,需要移動(dòng)設(shè)備支持OpenGLES 2.0且RAM至少1GB,,這樣的配置約占所有Android設(shè)備的40%。這款游戲中有細(xì)節(jié)豐富的美術(shù)資源,、完整的晝夜和天氣循環(huán),,還有上千個(gè)對(duì)象,但它的容量卻不到100MB,。這是如何達(dá)到的呢,?

  游戲介紹

  《行尸走肉:行軍作戰(zhàn)》是一款緊張刺激的多人策略移動(dòng)游戲,游戲背景設(shè)定是基于Robert Kirkman的長(zhǎng)期連載漫畫(huà)系列《行尸走肉》,。該游戲能支持5萬(wàn)玩家夠同時(shí)在線游玩,。游戲發(fā)生于弗吉尼亞州和華盛頓特區(qū),是一個(gè)龐大,、復(fù)雜且可自由探索的世界,,成千上萬(wàn)個(gè)喪尸,、僵尸橫行于此,,到處都會(huì)傳來(lái)爆炸聲。

  世界由多個(gè)區(qū)域組成,,載入和渲染大小為32x64,,游戲平鋪大小為2048x1024,單位為米,。在給定時(shí)間內(nèi),,每次會(huì)渲染4~6個(gè)區(qū)域。游戲中的地圖是通過(guò)結(jié)合手動(dòng)放置內(nèi)容和程序化內(nèi)容來(lái)創(chuàng)建的,。

  手動(dòng)放置內(nèi)容和程序化系統(tǒng)都在地圖編譯器(Map Compiler)中進(jìn)行編譯,。每塊32x64區(qū)域都會(huì)生成程序化內(nèi)容,,然后使用手動(dòng)放置的數(shù)據(jù)來(lái)生成布爾值。地圖編譯器還會(huì)編譯地形數(shù)據(jù)和AI系統(tǒng)的導(dǎo)航信息,。將完整的結(jié)果保存為預(yù)制件流格式,,這是工作室自己的預(yù)制件系統(tǒng)。最后,,所有內(nèi)容都會(huì)通過(guò)Asset Bundle資源包流式傳輸給用戶(hù),。

  

  大型空間節(jié)省工具:自定義預(yù)制件流

  Disruptor Beam的自定義預(yù)制件解決方案或稱(chēng)為預(yù)制件流,在設(shè)計(jì)和運(yùn)行時(shí)使用,,并支持嵌套,。它存儲(chǔ)InstanceEntry的數(shù)組,用于構(gòu)建和傳輸,。

  在編輯時(shí),,預(yù)制件流的額外代碼支持隨機(jī)處理等操作。對(duì)于特定部分,,預(yù)制件流可以隨機(jī)生成多個(gè)元素,,并在這些元素上創(chuàng)建簡(jiǎn)單的變體。例如:房子和車(chē)子這類(lèi)物品是從小型部件組成的,,這些部件可以互相組合并匹配,,從而在同樣的對(duì)象上產(chǎn)生不同變體。

  

  在編譯時(shí),,預(yù)制件流會(huì)分為三個(gè)細(xì)節(jié)層級(jí)(LOD):對(duì)象可以被指定為高,、中、低三個(gè)層級(jí),,以便可以在低端設(shè)備上刪除某些對(duì)象,。當(dāng)所有內(nèi)容都編譯好后,會(huì)進(jìn)行扁平化處理,,所以在傳輸給用戶(hù)的時(shí)候不存在任何層次結(jié)構(gòu),。

  在運(yùn)行時(shí),預(yù)制件流的功能類(lèi)似圖形引擎的底層繪圖列表,,它會(huì)指定要用什么材質(zhì)在哪個(gè)位置繪制哪些網(wǎng)格,,以及存放Transform位置的列表,該列表指定要放置特定預(yù)制件的位置,。

  預(yù)制件流會(huì)打包Transform,,由于現(xiàn)在部件大小已知,約占160平方米,,它可以將Transform打包為七個(gè)部分:三個(gè)用于存儲(chǔ)位置,,三個(gè)用于存儲(chǔ)旋轉(zhuǎn),還有一個(gè)存儲(chǔ)縮放。

  這會(huì)減小流式傳輸給用戶(hù)的場(chǎng)景數(shù)據(jù)大小,。如果一塊區(qū)域被保存為場(chǎng)景,,它的大小約為3.6 MB;如果被保存為預(yù)制件,,大小約為2.1 MB,,而如果是預(yù)制件流,則只有41KB,。

  使用網(wǎng)格圖像序列為角色制作動(dòng)畫(huà)

  《行尸走肉:行軍作戰(zhàn)》中的角色不會(huì)被近距離觀察,。它們僅有60像素高,動(dòng)畫(huà)設(shè)置有限,。團(tuán)隊(duì)必須對(duì)角色批量處理,,因?yàn)榈投嗽O(shè)備上的繪圖調(diào)用效果不好。正常的處理流程是將角色放入紋理中,,在頂點(diǎn)著色器采樣,,然后在著色器中處理所有動(dòng)畫(huà)。但由于OpenGLES 2.0不支持在頂點(diǎn)著色器上采樣,,所以需要另一種解決方案,。

  于是,他們將動(dòng)畫(huà)轉(zhuǎn)換為網(wǎng)格圖像序列(Mesh Flipbook),。載入時(shí),,圖像序列接收每個(gè)動(dòng)畫(huà),然后將所有幀都烘焙為獨(dú)特的網(wǎng)格,,其中1幀 = 1個(gè)網(wǎng)格,。然后在每個(gè)角色上交換網(wǎng)格,制作動(dòng)畫(huà),。不過(guò)這個(gè)方法需要大量?jī)?nèi)存,。

  

  緊密打包的導(dǎo)航系統(tǒng)

  導(dǎo)航數(shù)據(jù)通過(guò)地圖編譯器計(jì)算得出。該系統(tǒng)會(huì)把光線投射用于確定范圍內(nèi)角色將要進(jìn)入的開(kāi)放空間,。它會(huì)考慮像天橋這類(lèi)對(duì)象,,因此角色可以在它們下面行走。

  最終結(jié)果是每個(gè)區(qū)域有64x64位數(shù)據(jù),,數(shù)據(jù)都被緊密地打包起來(lái),,因此整個(gè)世界大約有1MB的數(shù)據(jù)。

  類(lèi)似粒子系統(tǒng)的架構(gòu)更新循環(huán)

  為了編寫(xiě)出快速而緊湊的更新循環(huán)代碼,,請(qǐng)避免使用Update(),、虛函數(shù)和面向?qū)ο蟮拈_(kāi)銷(xiāo)。實(shí)際上,,你也許想通過(guò)內(nèi)嵌大量函數(shù)來(lái)減少開(kāi)銷(xiāo)。這就像模仿粒子系統(tǒng)來(lái)編寫(xiě)或構(gòu)造代碼。

  在粒子系統(tǒng)中有粒子數(shù)組,,你可以通過(guò)數(shù)組壓縮粒子,,一次更新所有內(nèi)容。通常如果你將要擁有數(shù)千個(gè)對(duì)象,,例如:僵尸,。這正是正確的代碼塑造方式。

  善待緩存

  CPU很擅長(zhǎng)通過(guò)內(nèi)存按線性順序來(lái)壓縮并處理數(shù)據(jù),。所以可以設(shè)置一個(gè)大型區(qū)域,,合理安排里面的對(duì)象,給它們運(yùn)行相同的例程,,這樣的做法類(lèi)似著色器:著色器會(huì)接收并處理一整塊像素,。如果你在設(shè)計(jì)時(shí)盡可能保持較小的數(shù)據(jù)量,這些數(shù)據(jù)會(huì)被高效地緩存,,從而盡可能縮短CPU處理時(shí)間,。

  在《行尸走肉:行軍作戰(zhàn)》中,64x64位數(shù)據(jù)網(wǎng)格上的光線投射幾乎是沒(méi)有任何消耗的,,因?yàn)檫@些數(shù)據(jù)都在緩存中,,并且整個(gè)導(dǎo)航數(shù)據(jù)區(qū)域小于1KB。

  慎用線程

  不管是通過(guò)多處理器還是單處理器進(jìn)行處理,,慢代碼還是慢代碼,。如果不確保數(shù)據(jù)結(jié)構(gòu)盡可能緊湊,你只需將低效結(jié)構(gòu)復(fù)制到多處理器中,。

  請(qǐng)考慮使用攤銷(xiāo),,因?yàn)檫@個(gè)方法比線程處理更簡(jiǎn)單。然而,,如果確實(shí)需要用線程處理代碼,,代碼高效且能夠攤銷(xiāo)處理,該過(guò)程可以變得更簡(jiǎn)單,。

  如何獲得漂亮的地形

  為了在游戲中展現(xiàn)漂亮的地形,,該團(tuán)隊(duì)使用JPEG中的yCbCR顏色空間。在JPEG壓縮格式中,,這種顏色空間提供了高分辨率亮度值和低分辨率色度(CbCR)值,。

  他們將四個(gè)亮度紋理壓縮到一個(gè)紋理中,從而得到四種通用地形類(lèi)型,,可以根據(jù)其顏色生成多個(gè)地形,。例如:棕色使地形看起來(lái)像泥土,綠色像草地,。

  

  他們通過(guò)頂點(diǎn)RGBA顏色通道(RGBA)添加Splat權(quán)重遮罩,。通過(guò)將亮度通道用于高度映射和基于高度的混合效果,,從而產(chǎn)生漂亮的過(guò)渡效果。最后將低分辨率色度層應(yīng)用于亮度高度圖,,實(shí)現(xiàn)出美觀的地形效果,。

  

  總體結(jié)果是一個(gè)用于亮度數(shù)據(jù)的1024x1024紋理,整個(gè)世界和所有Splat映射一共使用了3.1MB數(shù)據(jù),。

  重用地形網(wǎng)格制作水的網(wǎng)格

  水的網(wǎng)格是克隆地形網(wǎng)格得到的,。沒(méi)有使用深度圖,而是選擇通過(guò)移動(dòng)頂點(diǎn)到水面高度(vertexHeight=waterHeight)得到了“免費(fèi)的”深度緩沖區(qū),。

  處理結(jié)果的差異是讓高度變成了深度,。這樣做大大節(jié)省了資源,只用了一個(gè)紋理采樣/地形繪圖調(diào)用和一個(gè)紋理采樣/水繪圖調(diào)用就制作出了水的效果,。

  

  快速光照解決方案

  對(duì)移動(dòng)設(shè)備來(lái)說(shuō),,渲染完整的PBR消耗的資源太多,所以他們使用了一種名為球面光照近似處理(Spherical Lighting Approximation)的方法,。

  通過(guò)這種方法將完整的PBR光照環(huán)境渲染為球面映射紋理,,用于漫反射和鏡面反射效果。對(duì)于后續(xù)的mip等級(jí),,將平滑度數(shù)值的1/2存儲(chǔ)為之前的mip等級(jí),,然后使用對(duì)數(shù)空間編碼來(lái)實(shí)現(xiàn)4x強(qiáng)度的HDR。

  然后在運(yùn)行時(shí),,可以選擇一個(gè)mip等級(jí)并在紋理中查看,。而不是進(jìn)行光照計(jì)算。通過(guò)使用text2Dlod以適當(dāng)?shù)墓饣鹊燃?jí)對(duì)光照紋理進(jìn)行采樣,。

  該方法的優(yōu)點(diǎn)是可以使用任意數(shù)量的光線,,只需要照亮球面并渲染即可。這樣能夠得到任意復(fù)雜的光照環(huán)境,,里面帶有無(wú)數(shù)的光線,、天空盒等。這是一個(gè)定制的完整PBR工作流程,,比標(biāo)準(zhǔn)PBR工作流程快20%,。

  

  陰影

  針對(duì)高性能陰影,該團(tuán)隊(duì)提出了一種解決方案,,他們將陰影從上到下進(jìn)行渲染,,高度在陰影平面之上。這樣會(huì)高效地創(chuàng)建距離場(chǎng)并支持基于高度的模糊效果,,用于制作柔和陰影和自身陰影,。

  此外,由于存儲(chǔ)了對(duì)象的高度,,因此它們可以將數(shù)值固定到接近陰影平面的位置,,使陰影模糊,,從而創(chuàng)造出適當(dāng)?shù)沫h(huán)境遮蔽近似效果。

  

  多分辨率渲染

  通過(guò)使用多分辨率渲染功能,,使UI保持在高分辨率,,同時(shí)讓3D世界從降低的填充率獲益,。他們通過(guò)使用DPI來(lái)在多種設(shè)備尺寸上得到一致的效果,,根據(jù)目標(biāo)DPI,范圍從200 DPI到400 DPI)來(lái)設(shè)置分辨率,。

  關(guān)于Asset Bundle資源包自定義構(gòu)建的一些小技巧:

  1,、只標(biāo)記要從代碼載入資源包的數(shù)據(jù)

  2、解析依賴(lài)關(guān)系

  將大型資源(如紋理和音效)放入指定資源包中

  將共享資源放入指定資源包中

  獨(dú)特的資源包含在父資源包之中

  通過(guò)路徑命名資源包

  3,、不要使用資源包變體

  為每個(gè)變體級(jí)別構(gòu)建唯一的清單

  用Perforce檢查,,預(yù)處理所有紋理和音效,構(gòu)建資源包,,用Perforce恢復(fù),。

電話(huà):010-50951355 傳真:010-50951352  郵箱:[email protected] ;點(diǎn)擊查看區(qū)域負(fù)責(zé)人電話(huà)
手機(jī):13811546370 / 13720091697 / 13720096040 / 13811548270 / 13811981522 / 18600440988 /13810279720 /13581546145

  • 暫無(wú)資料
  • 暫無(wú)資料
  • 暫無(wú)資料
  • 暫無(wú)資料
  • 暫無(wú)資料