文章出處

 

哪里來的需求?


眾所周知,由于不同的設備配置不同。導致其CPU和GPU處理能力有高有低。同樣的游戲想要在所有設備上運行流暢且畫面精美,是不可能的。這就需要我們針對不同的設備能力進行畫質調節,以保證游戲的流暢運行。
 

我們需要控制什么?


想要得到我們需要控制什么,只需要找出影響游戲運行效率的點即可。 當然在此不能一一列舉出所有游戲類型的點。但筆者就個人經驗,列出一些能用點。
*貼圖精度
*渲染面數
*材質復雜度
*粒子數目
*陰影質量
*水面效果
*增強性場景交互
*引擎后期效果
下面,我們就一個點一個點來說明原因,并給出常見的優化方法。
 

貼圖精度:SKIP MIPMAP


貼圖精度影響的是tex2D、texCUBE等采樣指令的速度。對于顯卡較次的機器來說,可能會是一大瓶頸。一般的引擎都提供了SKIP MIPMAP的能力。
SKIP MIPMAP即在上傳貼圖數據的時候,跳過指定級數的MIPMAP。 這樣在SHADER中進行訪問時,使用的就是低級別的貼圖精度。 比如,一張1024x1024的貼圖。 SKIP MIPMAP設置為1。表示要跳一級MIPMAP。 那SHADER中采樣的時候。最大分辨率將會是512x512。
 

渲染面數:裁剪&LOD&DETAIL


渲染面數與DRAW CALL數目,會受GPU位寬、GPU頻率限制。 當超出負載時,幀率會驟然下降。 這就要求我們需要對渲染面數有一個很好的控制。常見的控制手法有3種
1、減小裁剪距離
     剪裁距離的減小,會將遠處的景物裁剪掉。 從而減少DRAW CALL和提交的面數。
     注:這里說的減小裁剪距離,一定是和視錐體裁剪時一起使用,當靠攝像機的FAR CLIP PLANE,作用很小。
2、模型LOD
     隨著距離的增加,景物的細節會看不清。此時我們可以減少細節。
     注:LOD的切換,可以是兩個策略分管。 一是距離,二是根據機型配置。 取距離計算結果和機型配置結果中最大的LOD等級。
3、隱藏細節
     場景中的景物,根據主次關系進行標記。不同的主次關系的景物,受不到同的裁剪距離的影響。 比如,地表可視距離為1000,樹木可視距離為800,花草可視距離為500。
     注:主次細節的顯示與否,可以是兩個策略分管。一是距離,二是根據機型配置。距離計算結果和機型配置結果都需要顯示時,才顯示。
 

材質復雜度:切換SHADER


材質復雜度是整個畫質和效率控制系統中的大頭,畢竟大部分的開銷都因材質而起。歸根結底,材質復雜度的控制,就是切換不同的SHADER。 使得GPU運算復雜度降低。筆者參與的引擎和游戲開發項目中,遇到過兩種。
1、宏控制的SHADER編譯
     宏控制的SHADER編譯,是指在SHADER中使用一些宏定義。在對SHADER進行編譯時,將設備定義的宏開關附加到SHADER代碼頂部,編譯器根據宏內容進行編譯。 這個方案的優點是,一套代碼適配多個設備配置。但這個方案也有一個缺點,就是如果要進行實時切換,則會觸發SHADER的重新編譯。如果是手機項目,一般都是啟動的時候進行硬件檢測,選擇最適合當前機型的編譯配置進行材質的初始化。 而對于端游等項目,則需要考慮動態切換問題。
     注:這個方案,匯編級的SHADER不支持。 比如DX ASM、STAGE3D AGAL。 
     PS:筆者曾經工作的公司的一個自研手游3D引擎是用的這個方案,十分好用。 前提是中間不要讓玩家切換畫質。
     PPS:UNITY3D也支持這種方案。
2、切換Technique
     這是基于一個材質擁有多個Technique,且Technique不是用來區分材質。 也就是說,在這種情況下,Material作為區分一個模型材質的單元。 其內包含的Technique用于做設備的性能適配。這樣的方案下,不同的情況下,需要切換高中低配置時,只需要切換Technique即可。
     注:這個方案,常見引擎都支持,如OGRE,UNITY3D。
 

粒子數目:禁用發射器


一個粒子特效可能有一個或者多個發射器構成。這樣的話,我們可以為每一個發射器指定一個LOD等級(如果不支持額外添加數據的,可以通過發射器名字加前綴,比如 LOD0_FIRE0,LOD1_FIRE1等)。 我們再根據玩家的選擇或者配置禁用發射器。以達到減少粒子計算和渲染的開銷。
 

陰影質量:SHADOW MAP精度&選擇性開關


陰影無疑是增強畫質的一個有利武器。 但是當玩家機器配置無法為陰影質量買單時,就只有選擇性關閉了。 比如,可以給NPC,怪物,BOSS,其他玩家,玩家自己都配置一個陰影標記。 一般有 實時陰影、腳底黑圈、關閉 三種。再根據機型配置或者玩家選擇進行動態的開關各單位的陰影。
 
陰影的效率開銷還受另外一些參數的影響。比如SHADOW MAP的分辨率,是否要使用軟陰影等。
 

水面效果:折射&反射&普通水面


水面效果一般有以下4種
1、實時折射  + 實時反射 ( 現在的主流配置)
2、實時反射(早期一些MMORPG使用)
3、普通水面+CUBEMAP反射(絲路傳說那種)
4、普通半透明水面(WOW早期那種)
 
如果都實現了,那根據玩家選擇即可。 和LOD一樣,取玩家選擇和配置的最大值。
 

增強性場景交互


比如,地上的小鳥在來回走動,玩家跑過時,會驚飛。 又比如,玩家進入草叢時,草叢會因為受玩家力的影響左右晃動。
這樣的一些細節,著實令整個世界顯得更加真實。 但CPU和GPU的額外開銷,也是一筆不小的賬。 因此,提供一個配置,供玩家和機型開關。
 

引擎后期效果


引擎后期效果,如BLOOM,HDR,熱力扭曲等,都會帶來不小的開銷。 提供開關讓玩家或者機型配置即可。
 

總結


我們不指望自己的游戲在每一個玩家的機器上,都美侖美奐。 但我們希望自己的游戲,能夠流暢的運行在每一個玩家的機器上。 這樣至少給了玩家一次體驗這個游戲的機會。 如果玩家愿意為這個游戲升級自己的配置,那又何嘗不是一件值得讓人驕傲的事!
 
 
 

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()