[程式] 請教一個關於2D透明貼圖的問題

看板GameDesign (遊戲設計)作者 (赤木巧☠)時間11年前 (2014/10/13 12:39), 11年前編輯推噓6(6017)
留言23則, 4人參與, 最新討論串1/1
工作之餘做一點小練習,想寫一個簡單的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://www.ptt.cc/bbs/GameDesign/M.1413175154.A.064.html ※ 編輯: xtxml (125.227.131.77), 10/13/2014 12:40:47

10/13 12:53, , 1F
怎麼我看兩邊一樣...
10/13 12:53, 1F

10/13 12:57, , 2F
他的圖很失敗只是示意而已沒照顏色畫XD
10/13 12:57, 2F

10/13 12:58, , 3F
如果可以控制順序用depth/stencil buffer可以控制
10/13 12:58, 3F
圖片會經過排序,所以順序可以控制,從後排到前,或從前排到後。 想請教具體怎麼用stencil buffer來解決呢?感謝:)

10/13 13:03, , 4F
10/13 13:03, 4F
感謝支援:)

10/13 13:08, , 5F
抱歉我的示意圖很糟,請看文字的部分
10/13 13:08, 5F
※ 編輯: xtxml (125.227.131.77), 10/13/2014 13:13:09

10/13 13:24, , 6F
你可以畫藍色時同時畫stencil,這樣紅色就畫不上去
10/13 13:24, 6F

10/13 13:35, , 7F
就這個例子的話可以,但很多層"A"疊在一起的話該怎麼做呢?
10/13 13:35, 7F

10/13 15:21, , 8F
引擎等級的話...我記得要先看你調色盤的形式
10/13 15:21, 8F

10/13 15:23, , 9F
我是都用RGB 比較好理解
10/13 15:23, 9F

10/13 16:40, , 10F
我自己手刻的時候都先算好全部顏色再畫...
10/13 16:40, 10F

10/13 16:42, , 11F
樓上 不是本來就該先在BUFFER裡算好再畫嗎? XDDD
10/13 16:42, 11F

10/13 16:44, , 12F
如果這個問題沒有一個通用的解法,那也只能放棄了Q.Q
10/13 16:44, 12F

10/13 16:46, , 13F
我覺得你可以去看一下OPENGL的SHADER跟BUFFER
10/13 16:46, 13F

10/13 16:47, , 14F
小的無知,如果不是用疊的,那效能問題是出在?
10/13 16:47, 14F

10/13 16:48, , 15F
看過不少shader範例,但是始終沒有看到解決類似問題的orz
10/13 16:48, 15F

10/13 16:50, , 16F
我自己測起來,瓶頸是卡在draw call、RTT切換貼圖的次數
10/13 16:50, 16F

10/13 16:55, , 17F
基本上 不管你疊多少層東西 只會產生一次draw call
10/13 16:55, 17F

10/13 16:55, , 18F
看樣子你是一張圖call了4次
10/13 16:55, 18F

10/13 16:55, , 19F
所以結果才會錯誤
10/13 16:55, 19F

10/13 16:58, , 20F
從AZ的圖看的出來左邊的紫色是紅+藍造成的
10/13 16:58, 20F

10/13 16:59, , 21F
不過怎麼感覺我好像離題了...
10/13 16:59, 21F

10/13 17:08, , 22F
看看depthmask是否符合你要的
10/13 17:08, 22F

10/13 18:05, , 23F
嗯嗯,我在看看好了,感謝
10/13 18:05, 23F
文章代碼(AID): #1KErTo1a (GameDesign)
文章代碼(AID): #1KErTo1a (GameDesign)