看板 GameDesign 關於我們 聯絡資訊
工作之餘做一點小練習,想寫一個簡單的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
cowbaying: 怎麼我看兩邊一樣... 10/13 12:53
azureblaze: 他的圖很失敗只是示意而已沒照顏色畫XD 10/13 12:57
azureblaze: 如果可以控制順序用depth/stencil buffer可以控制 10/13 12:58
圖片會經過排序,所以順序可以控制,從後排到前,或從前排到後。 想請教具體怎麼用stencil buffer來解決呢?感謝:)
azureblaze: 他要的是http://i.imgur.com/o3AnsIR.png 10/13 13:03
感謝支援:)
xtxml: 抱歉我的示意圖很糟,請看文字的部分 10/13 13:08
※ 編輯: xtxml (125.227.131.77), 10/13/2014 13:13:09
azureblaze: 你可以畫藍色時同時畫stencil,這樣紅色就畫不上去 10/13 13:24
xtxml: 就這個例子的話可以,但很多層"A"疊在一起的話該怎麼做呢? 10/13 13:35
cowbaying: 引擎等級的話...我記得要先看你調色盤的形式 10/13 15:21
cowbaying: 我是都用RGB 比較好理解 10/13 15:23
KanoLoa: 我自己手刻的時候都先算好全部顏色再畫... 10/13 16:40
cowbaying: 樓上 不是本來就該先在BUFFER裡算好再畫嗎? XDDD 10/13 16:42
xtxml: 如果這個問題沒有一個通用的解法,那也只能放棄了Q.Q 10/13 16:44
cowbaying: 我覺得你可以去看一下OPENGL的SHADER跟BUFFER 10/13 16:46
KanoLoa: 小的無知,如果不是用疊的,那效能問題是出在? 10/13 16:47
xtxml: 看過不少shader範例,但是始終沒有看到解決類似問題的orz 10/13 16:48
xtxml: 我自己測起來,瓶頸是卡在draw call、RTT切換貼圖的次數 10/13 16:50
cowbaying: 基本上 不管你疊多少層東西 只會產生一次draw call 10/13 16:55
cowbaying: 看樣子你是一張圖call了4次 10/13 16:55
cowbaying: 所以結果才會錯誤 10/13 16:55
cowbaying: 從AZ的圖看的出來左邊的紫色是紅+藍造成的 10/13 16:58
cowbaying: 不過怎麼感覺我好像離題了... 10/13 16:59
cowbaying: 看看depthmask是否符合你要的 10/13 17:08
xtxml: 嗯嗯,我在看看好了,感謝 10/13 18:05