• 杏彩代理官网

  • 杏彩代理官网

  • 杏彩代理官网

  • 杏彩代理官网

杏彩代理官网

作(zuo)者︰  發(fa)布日期︰2020-02-26 02:51:03
Tag標簽(qian)︰初學者  
  • 最近(jin)在做一個關于vr游(you)戲的項目,作(zuo)為一個剛剛畢業並(bing)且(qie)剛剛進(jin)入這一行業的新手,有太多太多的東西(xi)需要(yao)學了。經過(guo)這個三個月的時(shi)間(jian),在整個團隊的合作(zuo)下,算是基本完成了游(you)戲吧,平台是三星的gear vr,現有在三星官方(fang)商店上架(jia),其實游(you)戲現在還並(bing)不(bu)很(hen)完善,很(hen)多bug可能還沒修復,用戶體驗(yan)也沒有做好,但是由于種種原因(yin)還是上架(jia)了,好評(ping)率不(bu)高。不(bu)過(guo)這次也讓我學到了挺多的東西(xi)的,在這里就稍微記錄一下,作(zuo)為一個新手的經驗(yan),也希望以後還能對照著(zhou)去做以後的游(you)戲。

    這次要(yao)講(jiang)的是關于性yue)苡嘔 庖豢椋 yin)為之前(qian)準備(bei)在oculus上上架(jia),但是oculus上架(jia)有個硬性要(yao)求(qiu)就是在note4 note5 s6 s7等手機上xi)腦(nao)誦凶悸時(shi)匭虢詠jin)60,而我們(men)的游(you)戲一開始並(bing)沒有,因(yin)此(ci)就做這一塊的記錄。做vr的都知(zhi)道,其實vr並(bing)不(bu)同于普通(tong)游(you)戲,我覺得最最不(bu)同的一點就是vr的渲(xuan)染是普通(tong)游(you)戲的兩倍,因(yin)為有兩個鏡片,因(yin)此(ci)在性yue)苡嘔 媳匭胂潞hen)大(da)的功(gong)夫,很(hen)遺(yi)憾我們(men)只花了不(bu)到一個月的時(shi)間(jian)做這一huan)矯媯 雲涫敵?bu)是特別好,只能算基本滿(man)足(zu)能玩的要(yao)求(qiu),但對于眩暈這個問題還是沒有得到特別好的緩解。

    這里必須說(shuo)到unity自帶(dai)的一個工具位置位于Windows->profiler,這個工具主要(yao)可以看(kan)到當(dang)你的游(you)戲在運行的時(shi)候(hou),什麼物品或者哪個腳本佔用了特別大(da)的時(shi)間(jian),導致你的游(you)戲變得很(hen)慢,由于我做的是渲(xuan)染方(fang)面的優化,所以主要(yao)也就是看(kan)看(kan)CPU ,GPU和Render三個選項里面的內(na)容,然(ran)後根據反(fan)饋(kui)結果去做事情。

    我個人覺得,優化的最主要(yao)的目的應該(gai)就是減少Draw Call的調用量,overdraw指(zhi)的就當(dang)我們(men)qian)岩桓 夾蔚乃行畔 kuo)位置,法線,顏(yan)色等傳遞(di)給電腦(nao),然(ran)後調用一系(xi)列(lie)API,並(bing)把它(ta)們(men)放置到gpu可以訪問的指(zhi)定(ding)位置,之後調用了_glDraw命令(ling),一個命令(ling)就是qie)淮raw call,例如,一個場景里有水有樹(shu),我們(men)渲(xuan)染水的時(shi)候(hou)使用的是qie)桓aterial以及一個shader,但渲(xuan)染樹(shu)的時(shi)候(hou)就需要(yao)一個完全(quan)不(bu)同的material和shader,那麼就需要(yao)CPU重新準備(bei)頂點數據、重新設置shader,而這種工作(zuo)實際是非常(chang)耗時(shi)的。因(yin)為,減少Draw Call 就tong)閃酥?兄 氐牟街琛O旅媸俏頤men)游(you)戲做的一些事情。

    1,在搭建模型(xing)方(fang)面,一開始為了求(qiu)逼真,因(yin)此(ci)在建模上都力求(qiu)完美(然(ran)而我們(men)組(zu)沒有專業的,都是程序猿轉(zhuan)行建模),所以做的並(bing)不(bu)怎麼好看(kan)但是面數特別多,而面數多就會導致渲(xuan)染次數變多,這樣很(hen)耗性yue)埽 yin)此(ci)在制作(zuo)的中期我們(men)就意(yi)識到這個缺(que)點,所以就開始大(da)幅度的改模型(xing),基本每個模型(xing)都會砍一般的面,但是在手機內(na)的效果看(kan)起來也並(bing)不(bu)是特別差,然(ran)而會有一些地方(fang)可能看(kan)起來並(bing)不(bu)是特別逼真,因(yin)此(ci)就用了法線貼圖去更進(jin)一步優化表面。再到後期,由于場景內(na)物品fan)嗔耍 sui)然(ran)單(dan)個模型(xing)的面數少了,但仍然(ran)不(bu)能減低(di)draw call 的調用數,因(yin)此(ci)我們(men)又做了一次模型(xing)修改,這一次,就是合並(bing)材質球,基本上,我們(men)qian)衙扛齔【襖錈嫠芯蔡 奈鍥範(fan)己喜bing)了,這件事其實unity好像有有自帶(dai)的合並(bing)貼圖的工具,但我們(men)沒用到,還是讓建模人員把材質球合並(bing),並(bing)且(qie)把場景內(na)的外殼qie)埠喜bing)了,經過(guo)這個方(fang)式,我們(men)的draw call調用量又再次減半了。

    2,在場景的優化上,我們(men)主要(yao)運用了烘焙技術,在unity,雖(sui)然(ran)實時(shi)光照可以帶(dai)來特別好的體驗(yan)效果,但是,跟電腦(nao)端shuo)牟bu)一樣,手機端由于cpu並(bing)不(bu)是十分強kan)螅 yin)此(ci)實時(shi)光太多會導致渲(xuan)染次數大(da)大(da)增加,最終會反(fan)映在畫面抖動十分厲(li)害,並(bing)且(qie)卡頓眩暈感很(hen)強,因(yin)此(ci),在我們(men)的游(you)戲中,只有一個實時(shi)光照,其他(ta)的光作(zuo)為烘焙光照,在這里就必須說(shuo)到一個光照探針(lightprobe),這個東西(xi)的作(zuo)用就是用于靜態烘焙中,對非靜態物體產生一個模擬光照。而這個光照並(bing)不(bu)是qian)  模 薔蔡 模 佑you)戲運行時(shi)就渲(xuan)染,在游(you)戲過(guo)程tao)脅bing)不(bu)會重復渲(xuan)染,這樣做的好處(chu)就是只有在游(you)戲開始時(shi)就只做一次然(ran)後就沒有再次對yue)切┌槐曇槍guo)的物品fang)jin)行渲(xuan)染,這一部分並(bing)不(bu)是我負責的所以只了si)庀攏 da)致的做法就是在適當(dang)的位置添加光照探針,然(ran)後把每個靜態的物品的static打(da)鉤(gou)(這里必須注定(ding)到的是如果場景有用到自yuan) 奧lu)或者是其他(ta)的東西(xi)則需要(yao)把xun)雜Φ難∠罟gou)去掉(diao)),然(ran)後選擇windows->lighting里面有個scene里面的build就可以,這里需要(yao)注意(yi)的有兩點,一點是在windows->lighting中默認xi)幕壩辛礁齠 xi)是勾選的 一個是precomputed realtime gi和baked gi,這里我們(men)需要(yao)把第一個的鉤(gou)去掉(diao)因(yin)為這個是關于實時(shi)光的,第二個就是有的時(shi)候(hou)可能在渲(xuan)染完成後的場景中物品表面會有亂亂的,這是qie)蛭V的nao) yin)(具體的也不(bu)太清楚),這時(shi)需要(yao)找到物品的模型(xing)在他(ta)的Generate Lightmap UV勾選就可以了。此(ci)外就是pixel light的數量,我們(men)的游(you)戲fang)錈媸,這個的設置方(fang)式是在edit里面的project setting 里面的quality里,這里面有很(hen)多東西(xi)都可以操(cao)作(zuo),包括(kuo)防(fang)鋸齒(chi)的一些,還有陰影效果的,還有其他(ta)一些。

    3,在代碼(ma)方(fang)面,盡量少在update用gameobject.find這個函數,好像這個函數是遍歷(li)式的尋找物品,這樣會降低(di)性yue)埽 頤men)采(cai)用的方(fang)法是在定(ding)義的時(shi)候(hou)定(ding)義一個公(gong)有的gameobject或者可見的私(si)有gameobject,然(ran)後在面板中把xun)雜ξ鍥防(fang) 較嚶ξ恢茫 飧齜fang)法好像也並(bing)不(bu)是最好,听一個大(da)神說(shuo)最好的方(fang)式應該(gai)是在一開的時(shi)候(hou)就定(ding)義了並(bing)且(qie)find好,之後就不(bu)在做查(cha)詢的操(cao)作(zuo),這樣的代碼(ma)也不(bu)會特別亂。然(ran)後就是少用update函數,至于為什麼我也不(bu)是特別清楚,我們(men)花在代碼(ma)上xi)氖shi)間(jian)並(bing)不(bu)是特別多。

    4,使用遮擋剔除技術,這個技術也cai)nity自帶(dai)的十分強kan)蟺囊豢kuan)技術,這一技術主要(yao)是講(jiang)我們(men)的場景分成許多個小塊,然(ran)後將攝像機看(kan)得到的地方(fang)的物品顯示出來,看(kan)不(bu)到的就不(bu)顯示,這個地方(fang)其實也不(bu)是特別難操(cao)作(zuo),也cai)且(qie)yao)選擇static里面的Occludee static,然(ran)後在點開Windows->OcclusionCulling里面設置bake的大(da)小,然(ran)後點擊(ji)bake就可以了,這里有兩篇介紹遮擋剔除的文章可以參考︰

    https://docs.unity3d.com/Manual/OcclusionCulling.html

    http://bbs.9ria.com/thread-212020-02-26.html

    其實,還有一門技術就是LOD技術,但是由于我們(men)的游(you)戲場景an) bu)是特別大(da),所以就沒有用到這一技術,這一技術的做法是需要(yao)在建立模型(xing)的時(shi)候(hou)建兩個模型(xing),一個面數多,較為逼真的,一個面數少,較為粗糙(cao)的,在場景中,當(dang)攝像機里物品遠(yuan)的時(shi)候(hou)就使用面數少的模型(xing),近(jin)的時(shi)候(hou)就使用面數多的模型(xing),這也可以優化游(you)戲的性yue)埽  僑綣【疤 ∫裁揮惺裁醋zuo)用,因(yin)此(ci)就沒用了。

    其他(ta)的一些小的優化︰

    1,在場景中,盡量不(bu)要(yao)用到mesh collider,因(yin)為這個很(hen)影響性yue)埽/p>

    2,由于手機加載(zai)場景很(hen)慢,因(yin)此(ci)在游(you)戲fei)杓浦械牡諞桓齔【白(bai)詈醚∮帽bi)較簡單(dan)的,讓玩家可以一開始就進(jin)入一個可視的場景而不(bu)是qie)恢焙諂戀卻鬧 【埃/p>

    ,由于在手機端,攝像機的移動會造成較大(da)的眩暈感,因(yin)此(ci),最好就是攝像機移動的慢點,並(bing)且(qie)攝像機只朝著(zhou)一個方(fang)向線性運動不(bu)要(yao)加速(su)運動並(bing)且(qie)移動的時(shi)間(jian)不(bu)要(yao)太長(這是在一篇文章上看(kan)到的,我們(men)的游(you)戲並(bing)沒有用到);

    4,unity自帶(dai)的Mecanim動畫系(xi)di)騁慘yao)盡量少用,最好一個鏡di)防(fang)鋝bu)要(yao)同時(shi)出現多個帶(dai)有animator的物品,這個親測也bu)嵊跋焓只說(shuo)奶逖yan)。

    然(ran)後想說(shuo)一點就是,另一個性yue)苡嘔 姆fang)向就是關于shader的,然(ran)後這個太難。。。我們(men)現在還不(bu)會,所以做出的效果也不(bu)是特別好,這里我要(yao)推薦另一款(kuan)同款(kuan)的游(you)戲fang)芯┬祝 ying)文名叫dead secret,這款(kuan)游(you)戲真的做的特別好,這里有他(ta)們(men)游(you)戲的一些關于性yue)芊fang)面是如何處(chu)理的,分享給大(da)家學習一下。

    http://robotinvader.com/blog/

    最後在推薦一個網站(zhan)是作(zuo)為初學者(也就是我這種菜(cai)鳥),不(bu)知(zhi)道某個函數是干(gan)嘛用的時(shi)查(cha)詢的網站(zhan),初學的多學些函數感覺也沒有什麼壞處(chu)。

    http://wiki.ceeger.com/ceeger.php

    希望我這篇文章能在這里拋磚引玉,也希望大(da)神們(men)能幫我指(zhi)出我的錯誤和不(bu)足(zu),或者是給我點建議,因(yin)為其實到現在為止,雖(sui)然(ran)游(you)戲基本完成了,某些場景的幀率也能基本保(bao)持在60,但還是需要(yao)花很(hen)大(da)功(gong)夫在這一huan)矯妗4da)家幫忙指(zhi)點指(zhi)點。

杏彩代理官网 | 下一页