文章出處
文章列表

哪里來的需求?
眾所周知,由于不同的設備配置不同。導致其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,熱力扭曲等,都會帶來不小的開銷。 提供開關讓玩家或者機型配置即可。
總結
我們不指望自己的游戲在每一個玩家的機器上,都美侖美奐。 但我們希望自己的游戲,能夠流暢的運行在每一個玩家的機器上。 這樣至少給了玩家一次體驗這個游戲的機會。 如果玩家愿意為這個游戲升級自己的配置,那又何嘗不是一件值得讓人驕傲的事!
文章列表
全站熱搜