網易手游《大話西遊》客戶端的建築遮擋人物半透技術是怎麼實現的?
01-28
夢幻西遊中的建築遮擋是人物只要被建築遮擋一部分,就全身變半透明。這種效果不太好。
大話西遊做到了只有被建築遮擋的部分變半透明。後者是如何實現的?
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)