關於遊戲中的特效

特效是遊戲中增加交互印象的很重要一方面,一個好的特效系統能夠很大程度上提高遊戲的特色。這尤其體現在動作遊戲上,比如God of War,Ninja Gaiden等系列中的特效效果就很出彩。這裏簡單總結一下自己所瞭解的一些遊戲中較爲常見的特效:

公告板

公告板效果就是直接使用公告板來渲染出一定的特殊效果。常規公告板的面方向始終與視線的方向垂直,但是也可以增加其屬性設置爲不必與視線垂直,此時即相當於在某些位置繪製一個面形出來,這樣也可以完成一些特殊的效果,比如靜止面上的紋理動畫等(這需要引擎支持動態的紋理,比如gif等;或是幀貼圖的合併與提取等)。

粒子

粒子特效中引擎中最爲常見也是必須的一種效果,包括各種灰塵、火焰、煙霧等效果的實現均是由粒子系統來完成。粒子系統是一種過程模型,將造型與動畫結合爲一個整體,用單個隨時間變化的粒子作爲場景的基本元素。每個粒子都有自己的生命週期,比如“出生”、"生長"、“死亡”等基本屬性。在實現過程中需要採用隨機的方法來實現粒子的不確定性,從而增加更爲真實的模擬。每個粒子本身的實現又是用公告板的渲染方式並結合不同的Alpha操作來完成。

拖尾

拖尾效果在動作遊戲中比較常見,其一般的實現是在要渲染的模型中設置出一些對應的綁定點來,然後在動畫播放的過程中記錄這些綁定點的位置,並在其上生成相應的不同類型的連接面生,並以豐富的Alpha操作模型進行渲染而實現。在動畫更新的過程中也同時完成這些生成的面片的更新以便實現出動態變化的效果。其通常會結合一定的環境反射或扭曲等來增強其表現力。該特效常見於動作遊戲中的刀光或角色的運動中,實現較好可以很大程度上增加引擎的表現力,比如下述戰神中武器上面的拖尾效果就很炫麗。

貼花

貼花效果嚴格意義上來說可以並不完全屬於特效的範疇,比如可能在場景編輯器中同樣需要,因爲其不是動態變化的而屬於靜態場景的一部分。當前的貼花實現既可以用基於前向渲染的傳統方式來實現,同樣也可以用後處理的方式來實現,不過這就要求引擎使用了延遲渲染的架構,具體差異就跟引擎的細節相關了(之前也有簡單介紹的實現)。貼花在遊戲中主要使用在一些動態產生的圖像或痕跡的表面上,比如射擊遊戲中的彈孔、走在雪地上的腳印、因攻擊而濺到地面上的血跡等各種,這些實現通常也需要與引擎中的邏輯部分相結合從而在特定的場合特定的時間上合理產生以增強表面力。比如下圖中就是Ninja Gaiden中的一些Decal使用效果(注意角色身上以及地面上的血漬):

殘影

殘影主要用來表現角色的快速移動效果,而其實現方式既可以用後處理方式也可以用非後處理方式。一般來說使用前向的基於幾何實體的實現方式可能得到更好的效果。在後處理實現中主要是利用後備的累積buffer來實現基於屏幕空間的角色累積,其優點是實現效率較高,畢竟是基於圖像空間的,但也有一個明顯的缺點就是效果不是太好,特別是當攝像機的位置變化較爲劇烈時,另外還有就是使用這種方式的話累積出的效果的材質可控性較差,變化不太豐富;另外一個方式就是前向的基於模型渲染的實現,這個通常是將模型進行虛擬的複製然後再下一幀進行還原繪製,這種方法不會受Camera變化的影響,而且由於是直接進行幾何體的渲染因而材質的控制就爲簡單,也使用其效果較好。另外在這種方法中也可以將其與其它的特效相結合,比如使用拖尾對多個殘影間進行連接可以得到另外一種更加炫麗的效果。這種效果在最新的Ninja Gaiden3中用得也挺多的,效果也很好看(主角快速攻擊時身後的藍色運動痕跡)

屏幕特效

屏幕特效一般是在後處理過程中施加的一個基於圖像空間的用來模擬攝像機上一些效果的操作,比如FPS遊戲中彈屏幕眩暈、動作遊戲中的屏幕濺血等。這個操作的實現其實還是很簡單的,只需在後得理過程中增加個目標貼圖的Alpha混合即可,但是比較重要的是控制其基於Alpah的漸變、同引擎中邏輯相結合的觸發以及各種狀態下觸發的隨機性控制等,而且還需要美工製作出不錯的屏幕以及Alpha通道貼圖來供使用。比如下圖中的Ninja Gaiden中主角攻擊後敵人的血漬屏幕噴濺的效果:


特效在引擎中的組織與使用的一些注意點:

  • 特效可以以某類型結點的方式在引擎中管理,且其與其它結點,比如角色的模型應是等價的,同樣要參與對應的可見性測試、幀更新等操作。
  • 基本上分佈非後處理特效與後處理特效,這是從特效的實現方式上進行分解,兩大類的實現方式也有一定的區別,但是對應的更新、加載及釋放等操作區別不大。
  • 在引擎中需要提供編輯器供美工進行使用,其可以與場景等其它編輯器相互獨立,但需要使用統一的引擎框架(包括資源、邏輯的管理,渲染流程等),需要既方便開發同時又方便維護。
  • 某些特效可能需要與特定的模型進行綁定,而且狀態也可能會受這些關聯模型的影響,因而在組織場景時就需要注意。
  • 由於特效中涉及到不可缺少的Alpha混合等操作,因而需要在支持半透明的Pass中完成渲染。針對不同的引擎渲染管線,整個特效部分所處的渲染位置可能有所差別。在傳統的前向渲染引擎中沒有什麼特別之處;在使用延遲渲染或光照的引擎結構中則需要將特效渲染置於一個前向渲染流中來完成。對於後處理特效則需要置於合適的後處理Pass中。

上述簡單介紹了遊戲中一些常見特效的實現,原理都比較簡單實現起來也不復雜,但最重要的是將這些效果整合到編輯器中,並提供關鍵屬性的調節接口以供美工來進行使用與設計,這樣才能在遊戲中得到預期的效果。當然,不管何種類型的遊戲想要提高體驗效果特效是很重要的一部分,除了上述還有很多,有些情況下還需要根據美工人員的需求特別設計相應的實現,這就需要對具體問題進行具體分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章