網易手游《大話西遊》客戶端的建築遮擋人物半透技術是怎麼實現的?

夢幻西遊中的建築遮擋是人物只要被建築遮擋一部分,就全身變半透明。這種效果不太好。

大話西遊做到了只有被建築遮擋的部分變半透明。

後者是如何實現的?


PC版還是手機版?沒太深究他們怎麼做,你要做的話可以畫三次,自底向上為:

第1層:不透明的角色

第2層:遮住角色的牆壁

第3層:半透明的角色。

由於前兩層角色和牆壁重疊的部分完全被牆壁蓋住,第三層半透膜效果繪製上去時,半透明繪製到自身身上,看起來還是不透明的,半透明繪製到牆壁上面,混色後看起來牆壁和角色部分都是透明的了。


我說一種我自己的做法。

1.人物透明。

2.其它物體不透明。

混合方式是先繪製人物(帶深度),再繪製其它物體,取目標(即人物)透明度做混合,一次繪製搞定。

混合公式是:

人物alpha*物體+(1-人物alpha)*人物


畫兩遍主角

深度檢測大的就是被遮擋的用半透材質

深度檢測小的就是露出來的用正常材質


端游不清楚,手游的做法是先把地圖繪製出來。後面人物繪製的時候,根據額外的遮擋信息(基於格子編輯的)判斷人物是否被遮半透明


一般引擎最後畫半透明物體時已經有了之前場景的深度貼圖,可以把角色當做透明物體畫,畫的時候PS中跟深度貼圖比較一下深度,被遮擋的PIXEL就能畫成任意形式了吧。


簡單的說就是攝像機與主角之間有一條虛擬的線(在這裡2d和3d道理差不多)當建築這個層的有效像素遮擋了這一條線時。就會把這張圖片的alpha值降低到半透明。

2d遊戲的一般做法呢,就是將建築可能會與玩家產生遮擋的地方單獨製作,比如屋檐的一角柱子等等。主要是為了節省資源。

當年西山居有款遊戲叫《蒼穹之劍》在這塊處理的很厲害。2d遊戲做出了看起來不錯的透視感,可惜很早就夭折了。


覺得類似xray吧


剛好上星期剛寫了一個,答案是stencil緩衝 自行Google去吧少年~


猜一下

地圖分兩層,一層是實底的地圖,位於角色下方,被角色遮擋

一層是半透明的樹木和建築物,位於角色上方。遮擋角色。

當然這樣同一張地圖會佔用兩份資源,造成遊戲包體過大,所以有第二種猜測。

仍然是分兩層,一層是實體的地圖,一層是二值的地圖,用於標記遮罩位置。畫角色的時候,畫在遮罩位置上的部分變成半透效果,非遮罩位置上的部分畫成非半透。


推薦閱讀:

關於下半年的預防針
Skeletal Animation 理論與實踐
從零開始手敲次世代遊戲引擎(一)
「千萬別學我!」之遊戲開發者的囧事(上)
遊戲開發匯總 (Gu Lu's Blog)

TAG:遊戲開發 | 遊戲引擎 | 手機遊戲開發 | 遊戲編程 |