標籤:

這款遊戲中 主角被遮擋部分變成半透明的效果是如何實現的?

如圖所示

本人OpenGL初學者 不知道如何在opengl里實現這種效果,希望有人可以提供一下思路

順便問一下這款遊戲里刀光的效果是如何實現的


看了問題日誌才知道說的是implosion... 正好最近在研究這個東東,我們來具體看下是怎麼畫的吧!

ps. unity里想用stencil是很坑的,(據說)手機硬體這部分支持的就不好,然後unity的API在這方面也不靈;更何況光為了畫這樣一個小人還得在整個buffer上留8位,不划算啊,直接畫兩遍得了

2015.4.25 增加了刀光效果的分析

原來的遮擋效果在下面~

========== 刀光效果 ==========

為了截這個界面我試了好多次。。。求贊……_(:з」∠)_

1. 首先,刀光本身是一個貼圖~

2. (麻煩的地方來了)新建一個buffer,然後吧當前這個屏幕的東西直接畫上去(感覺就是Graphics.Blit一下) 這個主要是為了後面第二道刀光的扭曲

3. 畫第二道刀光,能夠看出來做了一些 扭曲~這裡的輸入貼圖也是上一步的

4. 畫第三道刀光,和第一道一樣也是貼圖的,不過這次用了兩張貼圖(多了一個法線的)

這樣就搞定啦~~

========== 原答案:主角被遮擋部分變成半透明的實現 ==========

1. 第一步,繪製好所有場景

2. 將depth test 設為GREATER,繪製被擋住的部分

3. depth test改回LEQUAL,正常繪製

(我這裡的截圖全部繪製是因為工具讓我看到了這一步的模型)

畫完這一步就成這樣啦

來看下對應的深度圖


用模板緩存吧。

1:渲染完整個場景之後,

2:再渲染一遍角色,獲得深度fail的部分,設置模板緩存;

3:然後再渲染一遍角色,使用那個半透明的材質,忽略之前已有場景的深度,並且僅渲染模板緩存被設置的部分。

刀光是什麼樣的?有可能只是簡單的幾個半透明、使用特定貼圖的幾何片而已。


身為插件黨,回答當然是See-Through System這個插件,不過手游還是別試了,性能下降有點大.......


對角色使用兩個pass進行渲染。

pass1 檢測是否在渲染最上層,是,渲染遊戲本體;

pass2 否,渲染半透明體或outline,並關閉深度寫入;

這是UNITY3D中的處理方法


我又來強答了。。。

個人認為是

1繪製會導致遮擋的場景

2不考慮深度繪製被遮擋半透明模型

3考慮深度繪製實體模型,這樣未被遮擋部分半透明模型就被實體模型蓋住了

最後,由於看不到源碼以上都是我瞎猜的


開啟深度測試;

渲染除機體外的所有物體;

關閉深度檢測,關閉深度寫入;

渲染透明機體;

開啟深度檢測,開啟深度寫入;

渲染實體機體;


兩個pass就完事了


推薦閱讀:

unity 最後一次drawcall 如何避免?
在U3D等引擎當道的年代,我有沒有必要學opengl/dx或者osg???
如何開始寫一個virtual globe軟體,類似於google earth那樣?
3d引擎開發需要那些技能儲備?
求實時渲染基本演算法好書推薦?

TAG:遊戲 | OpenGL |