日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GPU Gems1 - 24 高质量的过滤

發(fā)布時(shí)間:2023/12/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GPU Gems1 - 24 高质量的过滤 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在一些應(yīng)用中,高質(zhì)量的過濾是至關(guān)重要的,可以用像素shader代碼執(zhí)行任何過濾。GPU著色程序不用于CPU的主要之處在于:一般來說,CPU數(shù)學(xué)操作比紋理訪問更快,而在GPU中恰恰相反。圖像過濾的目的很簡單:對于給你的輸入圖像A,我們想要?jiǎng)?chuàng)建新的圖像B。把源圖像A變換到目標(biāo)圖像B的操作就是圖像濾波。最一般的變換是調(diào)整圖像大小,銳化,變化顏色,模糊圖像等。

源像素的圖案和它們對圖像B像素的相對貢獻(xiàn),就稱為過濾核心(kernel)。把核心應(yīng)用到源圖像的過程叫做卷積。如果核心只是把像素簡單的進(jìn)行平均,我們稱這個(gè)模型為盒式濾波器。

我們可以把kernel作為參數(shù)直接代入shader,如下圖所示及代碼所示。

中心在W11的3x3過濾核心

?

float4 convolve3x3PS(vertexOutput IN,uniform sampler2D ColorMap,uniform float W00, uniform float W01, uniform float W02,uniform float W10, uniform float W11, uniform float W12,uniform float W20, uniform float W21, uniform float W22,uniform float Sum,uniform float StepHoriz,uniform float StepVert) : COLOR {float2 ox = float2(StepHoriz, 0.0);float2 oy = float2(0.0, StepVert);float2 PP = IN.UV.xy - oy;float4 C00 = tex2D(ColorMap, PP - ox);float4 C01 = tex2D(ColorMap, PP);float4 C02 = tex2D(ColorMap, PP + ox);PP = IN.UV.xy;float4 C10 = tex2D(ColorMap, PP - ox);float4 C11 = tex2D(ColorMap, PP);float4 C12 = tex2D(ColorMap, PP + ox);PP = IN.UV.xy + oy;float4 C20 = tex2D(ColorMap, PP - ox);float4 C21 = tex2D(ColorMap, PP);float4 C22 = tex2D(ColorMap, PP + ox);float4 Ci = C00 * W00;Ci += C01 * W01;Ci += C02 * W02;Ci += C10 * W10;Ci += C11 * W11;Ci += C12 * W12;Ci += C20 * W20;Ci += C21 * W21;Ci += C22 * W22;return (Ci/Sum); }

通過輔助圖像,我們可以進(jìn)行優(yōu)化。充分利用紋理中的rgba通道,可以調(diào)用一個(gè)tex2D函數(shù)訪問四個(gè)相鄰像素而不必調(diào)整紋理索引?,F(xiàn)在的卷積shader變得很短:

float4 convolve3x3GrayHPS(vertexOutput IN,uniform sampler2D GrayMap,uniform sampler2D NeighborMap,uniform sampler2D CornerMap,uniform float W00, uniform float W01, uniform float W02,uniform float W10, uniform float W11, uniform float W12,uniform float W20, uniform float W21, uniform float W22,uniform float Sum) : COLOR {float gray = tex2D(GrayMap, IN.UV).x;float4 ntex = tex2D(NeighborMap, IN.UV);float4 ctex = tex2D(CornerMap, IN.UV);float Ci = ctex.x * W00;Ci += ntex.z * W01;Ci += ctex.y * W02;Ci += ntex.x * W10;Ci += gray * W11;Ci += ntex.y * W12;Ci += ctex.z * W20;Ci += ntex.w * W21;Ci += ctex.w * W22;return (Ci/Sum).xxxx; }

本文隨后介紹了雙立方過濾等其他過濾技術(shù)以及反走樣的理論,這里就不細(xì)講了。

?

雙立方過濾的核心函數(shù)

可以寫一個(gè)函數(shù)為每個(gè)采樣像素計(jì)算過濾值,但是因?yàn)樵谶^濾范圍中不需要高頻精度,所以查詢表就能工作得很好,可以簡單地把這些數(shù)值寫進(jìn)小的浮點(diǎn)紋理,不但精度適當(dāng),而且查詢速度快(典型的空間換時(shí)間)。

?

?

?

總結(jié)

以上是生活随笔為你收集整理的GPU Gems1 - 24 高质量的过滤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。