posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Sampling

          Posted on 2007-12-14 13:42 ZelluX 閱讀(449) 評論(0)  編輯  收藏 所屬分類: Laboratory

          CAL樣例程序里面出現(xiàn)很多sample指令,google到的簡單介紹:

          Antialias (抗鋸齒)

          雖然減小像素的大小可以使圖像可以更加精細(xì),一定程度上減輕了鋸齒,但是只要像素的大小大到可以互相彼此區(qū)分,那么鋸齒的產(chǎn)生是不可避免的!抗鋸齒的方法一般是多點(diǎn)(注意此處是“點(diǎn)”而不是“像素”,后面可以看出它們間的區(qū)別)采樣。

          一、??????? 理論與方法:

          1 Oversampling (重復(fù)取樣):

          1 )方法:

           首先,將場景以比你的顯示器(前緩沖)更高分辨率進(jìn)行渲染:

          假設(shè)當(dāng)前的(前 / 后緩沖)的分辨率是 800 × 600 ,那么可以先將場景渲染到 1600 × 1200 的渲染目標(biāo)上(紋理);

           然后,從高分辨率的渲染目標(biāo)得到低分辨率的場景渲染結(jié)果:

          ????? 此時取每 2 × 2 個像素塊顏色的平均值為最終渲染的像素顏色值。

          2 )優(yōu)點(diǎn):可以顯著地改善鋸齒導(dǎo)致的失真。

          3 )缺點(diǎn):需要更大的緩沖,同時填充緩沖導(dǎo)致性能消耗變大;

          ?????????? 進(jìn)行多個像素的取樣,導(dǎo)致性能下降;

          ?????????? 由于以上缺點(diǎn), D3D 并沒有采用這種抗鋸齒方法。

          2 Multisampling (多取樣):

          1 )方法:

          只需要對像素進(jìn)行一次取樣,而是在每個像素中取 N 個點(diǎn)(取決于具體的取樣模型),該像素的最終顏色 = 該像素原先的顏色 *  多邊形覆蓋的點(diǎn)數(shù)  /  總的取樣點(diǎn)數(shù);

          2 )優(yōu)點(diǎn):可以改善鋸齒帶來的失真的同時而不會增加取樣次數(shù),同時比起 Oversampling 它也不需要更大的后備緩沖。

          3 )缺點(diǎn):原本當(dāng)一個多邊形覆蓋了一個像素的中心點(diǎn)時,該像素的顏色才會由該多邊形決定(在像素管線階段典型的就是尋址到合適的紋理顏色與頂點(diǎn)管線輸出的顏色進(jìn)行調(diào)制),但是 Multisampling 中,如果該多邊形覆蓋了其中一部分取樣點(diǎn)卻未覆蓋像素中心點(diǎn),該像素顏色仍然由此多邊形決定。如此一來,紋理尋址可能出現(xiàn)錯誤,這對于紋理集( atlas )會出現(xiàn)另一種失真效果:多邊形邊緣顏色錯誤!

          3 Centriod Sampling (質(zhì)心采樣):

          1 )方法:

          ???? 為了解決在使用 Multisampling 導(dǎo)致的在紋理集中進(jìn)行紋理尋址帶來的錯誤,不再采用像素中心的顏色作為“該像素原先的顏色”,而是用“該像素中被多邊形覆蓋的那些取樣點(diǎn)的中心點(diǎn)的顏色”。這樣就保證了被渲染的像素點(diǎn)始終是多邊形的內(nèi)部(也就是說紋理地址不會超出多邊形的范圍)。

          2 )如何使用:

          ???????? ①任何有COLOR語義作為輸入的Pixel Shader會自動運(yùn)用質(zhì)心采樣;

          ???? ②在Pixel Shader的輸入?yún)?shù)的語義后中手動加入 _centroid 擴(kuò)展,例如:

          ?? float4 ?TexturePointCentroidPS( float4 TexCoord : TEXCOORD0_centroid ) : COLOR0

          {

          ? return tex2D( PointSampler, TexCoord );

          }

          3 )注意:

          ??? 質(zhì)心采樣主要用于采用紋理集的 Multisampling ,對于一整張紋理對應(yīng)一個的多邊形網(wǎng)格的情況,采用質(zhì)心采樣反而會導(dǎo)致錯誤!

          主站蜘蛛池模板: 托里县| 磴口县| 孝义市| 阜城县| 湟中县| 南华县| 大丰市| 文水县| 济阳县| 皋兰县| 新郑市| 甘肃省| 广河县| 定西市| 济源市| 昌宁县| 商都县| 高台县| 焉耆| 崇阳县| 龙里县| 原平市| 定襄县| 广西| 山丹县| 田阳县| 吴川市| 勃利县| 丰城市| 开平市| 井陉县| 东光县| 宝鸡市| 章丘市| 宁陕县| 尤溪县| 留坝县| 通河县| 古丈县| 金平| 建昌县|