一個提高GPU模糊算法的速度的方法

一個提高GPU模糊算法的速度的方法

我們知道,模糊算法舍咖,比如高斯模糊是卷積算法的一種應用达箍。計算圖像中一個像素的模糊顏色值需要通過采樣周圍像素的顏色值來計算。
對于GPU應用奢赂,比如OpenGL陪白,在shader中進行紋理采樣是一個比較費時的操作,所以當我們進行模糊運算時膳灶,模糊值越大咱士,需要進行的紋理采樣操作就越多,對速度的影響也就越嚴重轧钓。
網(wǎng)上有很多對從算法上進行模糊速度優(yōu)化的方法序厉,其中Daniel Rákos在他的博文中給出的一種通過利用GPU硬件紋理采樣插值的特性優(yōu)化紋理采樣次數(shù)的方法是一種很棒的優(yōu)化。
但是當我們需要進行大范圍毕箍,高強度的模糊時弛房,特別是在移動設備上時,我們還是很快就會遇到性能瓶頸而柑。本文介紹一種適用于這種情況的簡單好用的方法文捶。

在使用OpenGL的紋理對象時,我們經(jīng)常會使用mipmap媒咳。mipmap可以對紋理進行降分辨率處理粹排,并通過level來訪問同一個紋理的不同分辨率版本。這樣做可以優(yōu)化紋理采樣的速度涩澡,并且在很多情況下可以優(yōu)化紋理采樣的效果顽耳。
具體mipmap的使用如果不太熟悉的話,網(wǎng)上有很多教程可以參考,這里就不再詳細描述了斧抱。

當我們知道m(xù)ipmap的用法時常拓,我們就可以利用mipmap來對模糊算法進行優(yōu)化。mimap會將紋理進行不同等級的縮放辉浦,其中l(wèi)evel1會將紋理尺寸縮小當原尺寸的一半弄抬,所以當我們將level1的紋理放大到原尺寸時,圖像會變得模糊宪郊,而這 同樣是利用GPU對紋理的硬件采樣功能掂恕,這種硬件插值采樣的速度很快。
具體做法時弛槐,當我們進行模糊運算時懊亡,我們可以通過降級紋理分辨率的方式來降低模糊采樣的的次數(shù)。比如乎串,當我們需要進行20個像素的模糊時店枣,我們可以通過對level1的mipmap進行10個像素的模糊,然后把結果放大到原分辨率叹誉,這樣一來鸯两,我們需要計算的像素變成了原來的四分之一,而降低模糊值长豁,同樣大幅度減少了像素采樣的次數(shù)钧唐,同樣能對性能有大幅度提升。
當然匠襟,這種方法的缺點是钝侠,當我們對紋理降低分辨率時,我們同時也失去了圖像的一些細節(jié)酸舍,所以過度的縮放會導致模糊的結果的值和實際結果有差異帅韧。所以我們只推薦在進行高強度縮放時使用這種方法。

另外在具體實施的過程中啃勉,這里有幾點提示

  1. Mipmap的生成
    OpenGL 3.0以前弱匪,OpenGL只運行對寬高為2的次方的紋理生成mipmap,比如寬高為512或者1024璧亮,如果寬高為300或者400之類的紋理是不可以生成mipmap的。這種情況下斥难,我們可以通過繪制多邊形和繪制到紋理的方式來繪制一個尺寸為原尺寸二分之一的紋理枝嘶。
    對應OpenGL 3.0及更新版本,我們可以直接對任何尺寸的紋理生成mipmap哑诊。

  2. 紋理采樣方式的設置
    當我們在生成紋理和生成紋理mipmap時候群扶,我們可以設置紋理的采樣filter。如果我們想要利用GPU的硬件線性紋理采樣,我們需要設置合適的filter竞阐。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

但是要注意缴饭,當我們需要對紋理生成mipmap時,需要設置紋理的filter為支持mipmap的線性采樣模式

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末骆莹,一起剝皮案震驚了整個濱河市颗搂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌幕垦,老刑警劉巖丢氢,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異先改,居然都是意外死亡疚察,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門仇奶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來貌嫡,“玉大人,你說我怎么就攤上這事该溯〉撼” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵朗伶,是天一觀的道長弦撩。 經(jīng)常有香客問我,道長论皆,這世上最難降的妖魔是什么益楼? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮点晴,結果婚禮上感凤,老公的妹妹穿的比我還像新娘。我一直安慰自己粒督,他們只是感情好陪竿,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屠橄,像睡著了一般族跛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锐墙,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天礁哄,我揣著相機與錄音,去河邊找鬼溪北。 笑死桐绒,一個胖子當著我的面吹牛夺脾,可吹牛的內容都是我干的。 我是一名探鬼主播茉继,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼咧叭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烁竭?” 一聲冷哼從身側響起菲茬,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颖变,沒想到半個月后生均,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡腥刹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年马胧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衔峰。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡佩脊,死狀恐怖,靈堂內的尸體忽然破棺而出垫卤,到底是詐尸還是另有隱情威彰,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布穴肘,位于F島的核電站歇盼,受9級特大地震影響,放射性物質發(fā)生泄漏评抚。R本人自食惡果不足惜豹缀,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慨代。 院中可真熱鬧邢笙,春花似錦、人聲如沸侍匙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽想暗。三九已至妇汗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間说莫,已是汗流浹背铛纬。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留唬滑,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像晶密,于是被迫代替她去往敵國和親擒悬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容