日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

《秦时明月世界》手游如何用Unity定制化渲染管线?

發(fā)布時(shí)間:2024/8/26 编程问答 78 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《秦时明月世界》手游如何用Unity定制化渲染管线? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

由玄機(jī)科技正版授權(quán)、魔方工作室群研發(fā)的經(jīng)典國(guó)漫IP改編手游《秦時(shí)明月世界》,收獲了廣大玩家和原著粉絲們的一致好評(píng),在TapTap上評(píng)分高達(dá)8.6。這款游戲是魔方工作室對(duì)3D大世界MMO的首次嘗試,也融匯了他們?cè)谕娣ê图夹g(shù)方面的探索。

騰訊魔方工作室高級(jí)工程師王毅以“《秦時(shí)明月世界》手游的定制渲染管線”為主題在Unity線上技術(shù)大會(huì)上發(fā)表演講,介紹了《秦時(shí)明月世界》手游如何借助Unity實(shí)現(xiàn)定制渲染管線技術(shù),具體包括相機(jī)與顏色空間、深度圖、Grab Pass、后處理和多光源幾個(gè)方面。

以下為王毅的演講內(nèi)容:
?


《秦時(shí)明月世界》手游是一款大型MMO手游。首先給大家展示一下游戲中殘?jiān)鹿鹊囊欢侮P(guān)卡戰(zhàn)斗,整個(gè)戰(zhàn)斗過(guò)程結(jié)合Unity的TimeLine,我們做到了一鏡到底,無(wú)縫切換的戰(zhàn)斗和動(dòng)畫的表現(xiàn)形式。
?


今天主要是給大家?guī)?lái)《秦時(shí)明月世界》定制化渲染管線技術(shù)相關(guān)的一些介紹。主要分幾個(gè)維度,包括相機(jī)與顏色空間、深度圖、Grab Pass、后處理和多光源這幾項(xiàng)。
?


《秦時(shí)明月世界》中基于相機(jī)和顏色空間表現(xiàn)的準(zhǔn)備工作,主要是分辨率的分離,UI高清,場(chǎng)景動(dòng)態(tài),平衡效果與效率。

我們?cè)谡麄€(gè)3D游戲世界中,經(jīng)常會(huì)基于PBR的高清的線性空間制作,但是常規(guī)的UI美術(shù)平時(shí)習(xí)慣于在Gamma空間工作,導(dǎo)致兩邊的工作流程有一些沖突。UI的美術(shù)不太適應(yīng)線性空間的流程,也不太適用線性空間下的顏色在他們的自產(chǎn)工具里制作。

但是,我們游戲中要使用在線性空間下的流程。為了他們的統(tǒng)一,我們會(huì)將分辨力進(jìn)行分離,把UI進(jìn)行高清的分辨率顯示,場(chǎng)景進(jìn)行動(dòng)態(tài)控制,場(chǎng)景中使用線性空間的流程,UI使用Gamma空間的流程進(jìn)行繪制,這樣就可以保證場(chǎng)景基于不同的機(jī)型、不同的表現(xiàn)形式進(jìn)行一個(gè)動(dòng)態(tài)分辨率的調(diào)整,保證UI的高清化。同時(shí)也使UI的資產(chǎn)可以在Gamma空間下進(jìn)行正確的顯示,保證游戲中場(chǎng)景的線性空間的顯示和UI的Gamma空間的顯示可以在一個(gè)正確的流程下工作。

我們的過(guò)程就是場(chǎng)景中使用一個(gè)線性空間的表現(xiàn)形式,它有單獨(dú)的相機(jī)區(qū)進(jìn)行繪制,同時(shí)在與UI相機(jī)進(jìn)行blender,輸出到屏幕上。然后場(chǎng)景空間的相機(jī)進(jìn)行Gamma校正,而UI本身就是在Gamma空間的流程進(jìn)行工作的,所以它不需要Gamma校正。
?


接下來(lái)再說(shuō)一下我們基于深度圖的改造。

Unity為我們提供了深度Pass這個(gè)過(guò)程,幫助開發(fā)者可以在游戲項(xiàng)目中快速的某一階段獲取深度圖來(lái)進(jìn)行繪制及采樣深度進(jìn)行渲染。

《秦時(shí)明月世界》進(jìn)行了定制化的改造,在非透明物體中如果需要使用深度圖,就會(huì)采用深度Pass這種方式去獲取深度圖,如果在非透明的物體下不需要使用深度圖,我們就會(huì)采用深度圖獲取的方式,直接從深度Buffer中拷貝出來(lái)深度圖進(jìn)行使用,這樣可以有效地減少額外的DC造成的渲染消耗,尤其是對(duì)一些低端手機(jī)或者是對(duì)于DC特別敏感的手機(jī)來(lái)講,這種使用方式效率會(huì)更高。結(jié)合這兩種方式,我們就會(huì)更高效地使用Unity的深度圖。

我們?cè)赨nity的PC版、Unity的Editor,包括iOS版本都會(huì)使用翻轉(zhuǎn)的Depth這種結(jié)構(gòu)來(lái)表示深度Buffer,但是在安卓平臺(tái),由于OpenGL ES的限制,并沒(méi)有使用這種方式。為了統(tǒng)一這個(gè)方式,我們進(jìn)行了改造,在安卓平臺(tái)也使用深度翻轉(zhuǎn)的這部分使用深度Buffer。

主要原因在于,我們的美術(shù),尤其是關(guān)卡設(shè)計(jì)師和模型師在進(jìn)行關(guān)卡設(shè)計(jì)和資產(chǎn)設(shè)計(jì)的時(shí)候,他們基本上是在PC平臺(tái)或者是在非移動(dòng)端進(jìn)行關(guān)卡的組合以及關(guān)卡的布置,這樣往往會(huì)出現(xiàn)一些因?yàn)榻?jīng)度問(wèn)題,導(dǎo)致關(guān)卡進(jìn)入到實(shí)際的手機(jī)或者是移動(dòng)端的版本上,尤其是安卓的平臺(tái),由于精度的問(wèn)題,會(huì)出現(xiàn)一些關(guān)卡上顯示的瑕疵。這個(gè)時(shí)候美術(shù)師或者是關(guān)卡設(shè)計(jì)師就需要反復(fù)調(diào)整關(guān)卡的結(jié)構(gòu),來(lái)保證顯示效果的正確,相對(duì)來(lái)講是一個(gè)漫長(zhǎng)耗時(shí)的過(guò)程,因?yàn)橐苿?dòng)端要涉及手機(jī)端的APK的打包,這些過(guò)程都會(huì)影響到整個(gè)關(guān)卡制作的進(jìn)度。

為了統(tǒng)一這個(gè)方法,我們就在安卓端也使用了深度翻轉(zhuǎn)的技術(shù),QQ號(hào)購(gòu)買平臺(tái)保證和在PC端以及iOS端使用相同的Buffer處理形式,這樣就可以大大地緩解關(guān)卡設(shè)計(jì)師在制作階段因?yàn)樯疃葲_突導(dǎo)致的顯示中的瑕疵,統(tǒng)一關(guān)卡設(shè)計(jì)中因?yàn)槠脚_(tái)化造成的精度問(wèn)題引起的顯示上的瑕疵。整體來(lái)講,縮短了關(guān)卡制作的難度以及周期。


下面再說(shuō)一下《秦時(shí)明月世界》定制管線中關(guān)于Grab Pass的定制過(guò)程。

首先,Unity本身的Grab Pass是按照傳統(tǒng)的形式,如果是相同的名字命名,它會(huì)使用同一張Grab Pass,如果是不同的名字命名,它會(huì)分別使用不同的Grab Pass。如果是項(xiàng)目中使用不慎,就會(huì)出現(xiàn)很多Grab Pass造成的一些RT的爆增,導(dǎo)致內(nèi)存爆增的問(wèn)題。《秦時(shí)明月世界》這里面采用了單一的控制方式,可以有效地緩解這種處理方式。

首先,它會(huì)收集需求,Grab Pass的Renderer,禁止繪制,然后計(jì)算每個(gè)Renderer的可見性,判斷需要哪些RT,同時(shí)根據(jù)具體的需求,我們可以使用全分辨率的RT,也可以使用不同情況縮小屏幕空間的一些RT動(dòng)作,這樣可以有效地控制RT的分辨率,節(jié)約內(nèi)存。

在整個(gè)繪制階段,利用Unity提供的CommandBuffer,我們可以快速地截取屏幕,并且在特定的階段會(huì)去使用這個(gè)Grab截圖,然后進(jìn)行特殊的效果。
?


下面介紹一下我們《秦時(shí)明月世界》中定制管線的后處理流程。

《秦時(shí)明月世界》使用的是Unity為我們提供的后處理組件,傳統(tǒng)的后處理組件整個(gè)的流程是這樣的形式,首先通過(guò)一個(gè)屏幕空間的分辨率,經(jīng)過(guò)若干個(gè)后處理的流程,進(jìn)入到一個(gè)Unity提供的UberShader,然后再經(jīng)過(guò)FinalPass整個(gè)的階段,為了兼容傳統(tǒng)的后處理流程OnRender Image的方法來(lái)保證傳統(tǒng)的全屏處理繪制顯示,最終再繪制到屏幕上,然后融合到UI相機(jī)顯示到屏幕上。
?


可以看到整個(gè)過(guò)程會(huì)產(chǎn)生大量的RT切換,相當(dāng)于硬件FBO的切換,在Tile GPU上會(huì)造成額外的內(nèi)存的回讀,性能大量地消耗,而且至少會(huì)有兩到三次的全屏幕的操作,這樣會(huì)大大地影響整體的性能,使得后處理階段會(huì)是一個(gè)在《秦時(shí)明月世界》項(xiàng)目中非常重要的性能消耗點(diǎn)。

基于這個(gè),我們優(yōu)化了后處理的流程,降低了它整個(gè)渲染的過(guò)程。首先,我們?nèi)サ袅薝berShader的過(guò)程,將UberShader及FinalPass和繪制屏幕這個(gè)過(guò)程三個(gè)全屏的操作統(tǒng)一到一起,同時(shí)又將傳統(tǒng)的基于屏幕空間的繪制移除掉,這樣就可以保證我們后處理的流程僅僅使用標(biāo)準(zhǔn)的一個(gè)全屏幕處理就可以直接與UI相機(jī)融合,繪制到屏幕上,不會(huì)造成額外的FBO的切換,也不會(huì)造成額外的FBO的回讀操作,大大降低了內(nèi)存中的回讀以及全屏幕的運(yùn)算操作,從而提升了后處理本身的效率。
?


接下來(lái)講《秦時(shí)明月世界》的定制渲染管線的多光源。

Unity中多光源的處理方式在傳統(tǒng)的渲染管線中使用的是ForwardAdd這種方式,采用多個(gè)Pass繪制多個(gè)光源。《秦時(shí)明月世界》采用了單Pass多光源的方式繪制。

首先,使用靜態(tài)分支去優(yōu)化設(shè)備,同時(shí)控制內(nèi)存,使用光照的位置來(lái)定義光源類型,Shader中也會(huì)根據(jù)區(qū)域進(jìn)行劃分。《秦時(shí)明月世界》中對(duì)于多光源主要使用的是點(diǎn)光源和聚光燈,整個(gè)過(guò)程會(huì)采用單Pass多光源的方式繪制。基于這種方式,就可以減少ForwardAdd增加Pass的這種情況,也就是說(shuō)在多光源的情況下整個(gè)繪制過(guò)程,一個(gè)Pass會(huì)把所有燈光繪制到這個(gè)物體上,可以保證我們?cè)趯?duì)于DC特別敏感的設(shè)備上不會(huì)使用多Pass這種方式來(lái)增加系統(tǒng)的消耗,提升整個(gè)多光源效果上整體性能的開銷。
?


給大家展示一下效果。主要展示的是我們?cè)谑褂枚喙庠吹耐瑫r(shí)使用的一個(gè)單Pass多光源的效果。可以看到在技能釋放的過(guò)程中,在技能相關(guān)的位置會(huì)有多個(gè)點(diǎn)光源去影響整個(gè)場(chǎng)景以及人物。但同時(shí)多個(gè)光源又是因?yàn)橐粋€(gè)Pass來(lái)繪制的,會(huì)大大節(jié)省性能。
?

技能多光源


這是一個(gè)色相分離效果。
?

色相分離


這個(gè)是后處理的邊緣模糊和多點(diǎn)旋轉(zhuǎn)的效果。
?

邊緣模糊&多點(diǎn)旋轉(zhuǎn)


這是一個(gè)幀混的效果。
?

幀混效果


這是《秦時(shí)明月世界》中輕功的色相分離以及徑向模糊的后處理展示。
?

色相分離&徑向模糊


這是水面效果的展示。這里面就用到了剛才提到的Grab Pass,用來(lái)做折射處理。
?

水面效果


感謝大家!

總結(jié)

以上是生活随笔為你收集整理的《秦时明月世界》手游如何用Unity定制化渲染管线?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。