作者xtxml (赤木巧☠)
看板GameDesign
標題[程式] 請教一個關於2D透明繪圖的問題
時間Mon Oct 13 12:39:11 2014
工作之餘做一點小練習,想寫一個簡單的2D graphic engine,不過碰上一點問題如下。
A和B的構造如下圖,A包含了A1和A2,A2蓋在A1上。
然後我想做的效果是 A * 0.5(alpha)之後蓋到B上面。
http://i.imgur.com/T322qyt.png
這邊如果只是簡單地把A1 * 0.5(alpha)、 A2 * 0.5(alpha),貼到B上面,
會出現不想出現的效果如左圖,但實際上我想呈現的是右邊的效果。
http://i.imgur.com/ZQ0hJak.png
右邊當初我是使用RTT(render to texture)的方式完成,
不過只要有一個這類的物件就要多一次這樣的步驟,使用到大量的draw call,
物件一多之後速度變慢得蠻嚴重的。
想請問一下各位先進,類似的問題有沒有效能比較好的方式可以解決呢?
(如果可以的話,給個關鍵字也會對我幫助很大,
因為這個問題不知道該怎麼描述,連google都很難找orz)
感謝:)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.131.77
※ 文章網址: http://webptt.com/m.aspx?n=bbs/GameDesign/M.1413175154.A.064.html
※ 編輯: xtxml (125.227.131.77), 10/13/2014 12:40:47
1F:→ cowbaying: 怎麼我看兩邊一樣... 10/13 12:53
2F:→ azureblaze: 他的圖很失敗只是示意而已沒照顏色畫XD 10/13 12:57
3F:→ azureblaze: 如果可以控制順序用depth/stencil buffer可以控制 10/13 12:58
圖片會經過排序,所以順序可以控制,從後排到前,或從前排到後。
想請教具體怎麼用stencil buffer來解決呢?感謝:)
感謝支援:)
5F:→ xtxml: 抱歉我的示意圖很糟,請看文字的部分 10/13 13:08
※ 編輯: xtxml (125.227.131.77), 10/13/2014 13:13:09
6F:→ azureblaze: 你可以畫藍色時同時畫stencil,這樣紅色就畫不上去 10/13 13:24
7F:→ xtxml: 就這個例子的話可以,但很多層"A"疊在一起的話該怎麼做呢? 10/13 13:35
8F:推 cowbaying: 引擎等級的話...我記得要先看你調色盤的形式 10/13 15:21
9F:→ cowbaying: 我是都用RGB 比較好理解 10/13 15:23
10F:→ KanoLoa: 我自己手刻的時候都先算好全部顏色再畫... 10/13 16:40
11F:推 cowbaying: 樓上 不是本來就該先在BUFFER裡算好再畫嗎? XDDD 10/13 16:42
12F:→ xtxml: 如果這個問題沒有一個通用的解法,那也只能放棄了Q.Q 10/13 16:44
13F:推 cowbaying: 我覺得你可以去看一下OPENGL的SHADER跟BUFFER 10/13 16:46
14F:→ KanoLoa: 小的無知,如果不是用疊的,那效能問題是出在? 10/13 16:47
15F:→ xtxml: 看過不少shader範例,但是始終沒有看到解決類似問題的orz 10/13 16:48
16F:→ xtxml: 我自己測起來,瓶頸是卡在draw call、RTT切換貼圖的次數 10/13 16:50
17F:推 cowbaying: 基本上 不管你疊多少層東西 只會產生一次draw call 10/13 16:55
18F:推 cowbaying: 看樣子你是一張圖call了4次 10/13 16:55
19F:→ cowbaying: 所以結果才會錯誤 10/13 16:55
20F:推 cowbaying: 從AZ的圖看的出來左邊的紫色是紅+藍造成的 10/13 16:58
21F:→ cowbaying: 不過怎麼感覺我好像離題了... 10/13 16:59
22F:→ cowbaying: 看看depthmask是否符合你要的 10/13 17:08
23F:→ xtxml: 嗯嗯,我在看看好了,感謝 10/13 18:05