A-Buffer簡介
A-Buffer是一種圖形學(渲染方向)上的用于可見面分析(Visble Surface Detection)的技術,
可見面分析最常見的技術有以下三種:
- Z-Buffer 演算法(或者叫 Depth-Buffer 演算法)
- Back-Face Detection方法,該方法用于剔除不可見(反方向的)面
- A-Buffer 方法,也是本文要介紹的方法,
A-Buffer是Z-Buffer方法是Z-Buffer的衍生方法,因此了解ABuffer有必要回顧一下ZBuffer,
Z-Buffer的缺陷
Z-Buffer是用于剔除 不透明 物體的演算法,假設某個像素有A B C三個不透明物體重疊,A在最上面,B在中間,C在最底下,那么Z-Buffer的結果就是A,意味著B、C都被A遮蔽了,因此可以針對該像素點剔除,
Z-Buffer是一個用于存盤深度資訊的演算法,其大小與Color Buffer一致,每一個像素對應一個深度資訊,Z-Buffer永遠存盤距離螢屏最近的點的深度資訊,
演算法的偽代碼可以表示如下:
Init Z-Buffer as size = sizeof(ColorBuffer), All one initialized
# P.S. 0 <= ZBuffer [x,y] <= 1
For each object in ObjectsToRender:
if object.pixel.depth < ZBuffer[object.pixel.xy]:
ZBuffer[object.pixel.xy] = object.pixel.depth
render this object
else:
Not to render this object
該演算法只適用于不透明物體,因為渲染半透明物體需要各個半透明物體的相對位置資訊來正確地顏色混合(Blending)(見半透明渲染部分),
Z-Buffer 的衍生
雖然Z-Buffer不適用于半透明物體渲染,但是將Z-Buffer稍微做修改就能渲染半透明物體,修改的目的是為了在渲染時保留各個半透明的順序資訊,也即,針對每一個像素而言,需要記錄的不僅僅只是一個單一的深度資訊,還要記錄下該像素關聯了哪些圖元,
這種修改又稱為A-Buffer,即Accumulation Buffer, Accumulation 取“累計”之意,意為該Buffer針對每一個像素記錄累計的圖元資訊,
具體實作方法參見:A-Buffer Method from GeeksForGeeks
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551067.html
標籤:其他
上一篇:微信小程式 + App = ?
下一篇:返回列表
