我有一個復古的2D遊戲,有很多精靈(讓人想起世嘉的超級縮放器拱廊),它不使用半透明。我曾考慮過使用Z-Buffer進行排序來簡化事情。好吧,但默認情況下寫的做,即使阿爾法是零Z緩衝,使這裏所示的效果:OpenGL ES,Z緩衝區,2D精靈,丟棄,性能
http://i.stack.imgur.com/ubLlp.png
現在,因爲我在OpenGL ES是2,我沒有alpha測試,所以從我的理解我唯一的可能性是放棄像素着色器,如果alpha爲0,以便它不會被寫入Z緩衝區。但就性能而言,這是錯誤的:不僅if
速度很慢,而且discard
基本上也會造成目的,因爲它禁用了早期的深度測試,結果比在軟件中做得更糟。
if (val.a < 0.5) {
discard;
}
有沒有其他解決方案我可以使用哪些不會殺死性能?所有的2D遊戲都會自行排序,而不是使用深度緩衝區?
感謝您的評論!只是爲了確定,你說的第二個選項是什麼?我吸引了很多人(典型的2000〜3000個大型精靈)。 所以在透明和不透明的部分分離的利益是: - 我渲染一個簡單的着色器,通過推移和使用Z緩衝, 不透明貼圖 - 然後我呈現透明的精靈部分,採用Z緩衝太(部件尚未被遮擋)使用if + discard着色器。 - 我嘗試通過預處理去除大部分完全透明的區域。 有點讓我想起我們以前用Mega Drive上的精靈來做什麼^^ – Brunni
今天我遇到了這個馬裏博客,其中提到了爲了效率原因將2D精靈分成不透明和透明的部分:https://community.arm。 COM /組/臂馬裏圖形/博客/ 2015/11/19 /馬裏性能-7-加速-2D-渲染-使用的OpenGL-ES – Columbo