2016-07-06 59 views
0

我知道,這是類似z緩衝區,發生在輸出合併階段。 它比較ref值和緩衝區值來決定是否可以通過該點。Stencil Buffer的用途是什麼?

但是,我認爲它可以實現的所有效果總是可以通過一個通用緩衝區來實現。 當我們使用渲染來渲染紋理,並將其用作着色器資源視圖時,將其輸入到像素着色器。 然後判斷並決定是否手動剪裁像素。 代碼如下: if(比較值) clip(0); 由於模板緩衝區可以被普通緩衝區替換,我們仍然使用它。 可以使用圖形硬件的加速嗎?(一些特殊指令)

+1

模板印刷是渲染管線中的一個額外步驟,因此只需要一次渲染即可渲染到顏色緩衝區和模板緩衝區。使用顏色緩衝區時,唯一的問題是顏色緩衝區必須具有相同的屬性(格式,h和w)。 –

回答

2

「輸出合併」是渲染中的關鍵性能路徑之一,所以它一直保持「固定功能」,而其他許多方面現代GPU已經成爲可編程除了各種各樣的測試,你可以用alpha混合做的,你可以用模板數據類似的測試在同一通:

struct D3D11_DEPTH_STENCIL_DESC 
{ 
    BOOL DepthEnable; 
    D3D11_DEPTH_WRITE_MASK DepthWriteMask; 
    D3D11_COMPARISON_FUNC DepthFunc; 
    BOOL StencilEnable; 
    UINT8 StencilReadMask; 
    UINT8 StencilWriteMask; 
    struct D3D11_DEPTH_STENCILOP_DESC 
    { 
     D3D11_STENCIL_OP StencilFailOp; 
     D3D11_STENCIL_OP StencilDepthFailOp; 
     D3D11_STENCIL_OP StencilPassOp; 
     D3D11_COMPARISON_FUNC StencilFunc; 
    } FrontFace, BackFace; 
}; 

模板緩衝區用於多種技術,如陰影,反射,貼花等。見wikipedia

0

首先:是的,任何你可以(或至少通常會)用模板緩衝區做的事情無疑可以用其他方式完成。像圖形卡的大多數部分一樣,問題是額外的硬件是否可以讓你更快地完成工作(我敢肯定答案往往是肯定的)。

例如,一件相當常見的事情,特別是在廣告文案等事物中,就是將圖像剪裁成某種預定義的形狀,例如夕陽下的海邊拍攝,剪切成一些輪廓寫作:

http://www.tipsquirrel.com/wp-content/uploads/2011/07/Sunset.jpg

模板緩存使得這個完全容易做到非常迅速,在硬件。您將文本渲染到模板緩衝區,然後正常渲染圖片(啓用模板緩衝區)。

這對於諸如電影標題這樣的事情特別有效,其中文本是電影的標題/信用,並且圖片是電影的介紹,改變每一幀。在這種情況下,您可以設置模板緩衝區一次,然後在更新模板緩衝區之前重新使用模板緩衝區(例如,使用下一組信用點)。

現在,你可以用其他方法做同樣的事情(例如,在像素着色器中)。但是,模板緩衝區比其他大多數替代方案更快,更便宜。還有一個歷史事實,即模板緩衝器幾乎永遠存在 - 比可編程着色器更長。

+0

非常感謝。 – FireFLO

+0

我已經理解了。你的意思是模板緩衝區早於可編程着色器,所以速度更快但靈活性更低。當我們要實現一個效果時,我們首先嚐試使用模板。如果它不夠用,那麼我們考慮使用高級着色器。 – FireFLO