這款遊戲中 主角被遮擋部分變成半透明的效果是如何實現的?
01-13
如圖所示本人OpenGL初學者 不知道如何在opengl里實現這種效果,希望有人可以提供一下思路順便問一下這款遊戲里刀光的效果是如何實現的
看了問題日誌才知道說的是implosion... 正好最近在研究這個東東,我們來具體看下是怎麼畫的吧!
ps. unity里想用stencil是很坑的,(據說)手機硬體這部分支持的就不好,然後unity的API在這方面也不靈;更何況光為了畫這樣一個小人還得在整個buffer上留8位,不划算啊,直接畫兩遍得了
2015.4.25 增加了刀光效果的分析
原來的遮擋效果在下面~========== 刀光效果 ==========
為了截這個界面我試了好多次。。。求贊……_(:з」∠)_1. 首先,刀光本身是一個貼圖~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引擎開發需要那些技能儲備?
※求實時渲染基本演算法好書推薦?