• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 505  文章 - 1034  trackbacks - 0
            <2008年12月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910


            子曾經(jīng)曰過(guò):編程無(wú)他,唯手熟爾!

            常用鏈接

            留言簿(94)

            隨筆分類(649)

            隨筆檔案(505)

            相冊(cè)

            BCB

            Crytek

            • crymod
            • Crytek's Offical Modding Portal

            Game Industry

            OGRE

            other

            Programmers

            Qt

            WOW Stuff

            搜索

            •  

            積分與排名

            • 積分 - 917335
            • 排名 - 14

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            l       高級(jí)效果之水彩化

             

             

            真正的水彩效果在shader中是比較難實(shí)現(xiàn)的,它需要進(jìn)行中值濾波后累加等一些操作,還需要處理NPR中的筆觸一類的概念。本文繞開(kāi)這些概念,只從視覺(jué)效果上能盡量模擬出水彩的畫(huà)的那種感覺(jué)來(lái)。

             

             

            水彩畫(huà)一個(gè)最大的特點(diǎn)是水彩在紙上流動(dòng)擴(kuò)散后會(huì)和周圍的顏色攪拌在一起,另外一個(gè)特點(diǎn)就是水彩通常會(huì)形成一個(gè)個(gè)的色塊,過(guò)渡不像照片那樣的平滑。針對(duì)這兩個(gè)特點(diǎn)。可以設(shè)計(jì)這樣的一個(gè)算法來(lái)模擬水彩畫(huà)的效果。

             

             

            首先我們模擬擴(kuò)散。簡(jiǎn)單的說(shuō),可以通過(guò)隨機(jī)對(duì)附近的象素點(diǎn)進(jìn)行采樣來(lái)模擬顏色的擴(kuò)散,而這個(gè)隨機(jī)區(qū)域的大小我們可以稱為擴(kuò)散的力度。這在C++代碼里應(yīng)該是非常容易實(shí)現(xiàn)的,讀者只需要使用Random函數(shù)就可以了。但是HLSL并沒(méi)有提供這樣的函數(shù)(似乎有個(gè)noise函數(shù),不過(guò)不能用L)。怎么辦呢?我們可以采用噪聲紋理的方式,既事先計(jì)算好一個(gè)n*n的隨機(jī)數(shù)數(shù)組,作為紋理傳遞給Pixel shader,這樣在Pixel Shader里我們就能獲得隨機(jī)數(shù)了。得到隨機(jī)數(shù)后,我們將隨機(jī)數(shù)映射成紋理坐標(biāo)的偏移值,就能模擬出色彩的擴(kuò)散了。典型的噪聲紋理是這個(gè)樣子的:

                                                    

            圖:噪聲紋理

             

             

            接下來(lái)處理色塊,對(duì)顏色的RGB值分別進(jìn)行量化。把RGB分量由原來(lái)的8bit量化成比特?cái)?shù)更低的值。這樣顏色的過(guò)渡就會(huì)顯得不那么的平滑,而是會(huì)呈現(xiàn)出一定的色塊效果。

             

             

            通過(guò)以上兩步處理后,圖像依然有非常多的細(xì)節(jié),尤其是第一步處理中產(chǎn)生的很多細(xì)節(jié)噪點(diǎn)。通過(guò)平滑模糊的方式來(lái)過(guò)濾掉這些高頻噪聲成分。

             

             

            算法設(shè)計(jì)好了,接下來(lái)看看我們?nèi)绾卧?/span>RenderMonkey里實(shí)現(xiàn)這個(gè)算法。

             

             

            類似上一個(gè)效果,我們需要兩個(gè)pass來(lái)完成這個(gè)算法,第一個(gè)passflow pass,模擬顏色的流動(dòng)和處理顏色的量化。第二個(gè)passGauss pass,也就是前面提到的高斯模糊算法。實(shí)現(xiàn)的重點(diǎn)在第一個(gè)pass

             

             

            在模擬擴(kuò)散的pass中,同樣需要一個(gè)RenderTarget,以把結(jié)果保存在其中以便后續(xù)處理,然后還需要一個(gè)噪聲紋理來(lái)產(chǎn)生隨機(jī)數(shù)。具體代碼如下:

             

             

             


            代碼中的_quatLevel用來(lái)表示對(duì)圖像的量化比特?cái)?shù),值越小,色塊越明顯,比較合理的取值范圍是2-6_waterPower則表示圖像顏色擴(kuò)散范圍,取值范圍在864之間的效果比較好。

             

             

            下面是經(jīng)過(guò)水彩畫(huà)處理后的圖像:

            圖:水彩畫(huà)效果。左圖量化比特?cái)?shù)為6比特,擴(kuò)散范圍為20象素。

             

                             右圖量化比特?cái)?shù)為5比特,擴(kuò)散范圍為40象素

             

             

             

             

            l       總結(jié)

             

             

            GPU進(jìn)行數(shù)字圖像處理,甚至是使用GPU進(jìn)行數(shù)字視頻編輯是目前非常流行的話題,市場(chǎng)是已經(jīng)出現(xiàn)很多商業(yè)的產(chǎn)品,比如Mac公司的iMotion,就是完全采用GPU加速的視頻非編軟件,iMotion作者的對(duì)它的評(píng)價(jià)是:Play  with the images in real-time。可見(jiàn)它的效率之高,本文只是簡(jiǎn)單的介紹了HLSL在圖像處理領(lǐng)域的應(yīng)用,希望能給讀者撥開(kāi)一些云霧。通過(guò)以上介紹的幾種濾鏡效果,讀者應(yīng)該大致掌握了使用HLSL進(jìn)行數(shù)字圖像處理的一些基本步驟和方法了,為了方便起見(jiàn),我們并沒(méi)有把處理完的圖像保存下來(lái)而是僅僅把處理完的圖像顯示在屏幕上,其實(shí)在RendererMonkey中也是可以把處理完的結(jié)果保存起來(lái)的,我們可以創(chuàng)建一個(gè)和圖像等大的RenderTarget。并把我們處理的結(jié)果繪制到這個(gè)RenderTarget中(關(guān)于如何設(shè)置當(dāng)前的RenderTarget,以及如何設(shè)置多個(gè)RenderTarget,留給讀者自己摸索),然后在RenderMonkey的工作區(qū)中選擇那個(gè)RenderTarget,在右鍵菜單中選擇保存到圖像就可以了。

             

             

            C++也好,Basic也好,乃至現(xiàn)在的HLSL/GLSL也好。它們都是語(yǔ)言而已,充分的了解這些語(yǔ)言,熟悉他們的特性都是非常簡(jiǎn)單的。但是如何充分發(fā)揮他們的作用,用它們做一些有意義的事情,就完全在于我們自己的實(shí)踐和在實(shí)踐中的創(chuàng)造性。如果讀者在實(shí)踐中還能創(chuàng)造出更多,更實(shí)用的效果。甚至是應(yīng)用在商業(yè)產(chǎn)品中。

             

             

            最后還得提一下的是,文中出現(xiàn)不少信號(hào)處理和數(shù)學(xué)的知識(shí),可見(jiàn)多花點(diǎn)時(shí)間在數(shù)學(xué)上是非常值得的J

             

             

            注:處于閱讀方便,本文代碼都未經(jīng)過(guò)優(yōu)化。

             

             

            參考資料:

             

             

            高等教育出版社《數(shù)字圖像處理》

             

             

            RenderMonkey官方網(wǎng)站:http://ati.amd.com/developer/rendermonkey/index.html

             

             

             

            作者簡(jiǎn)介:潘李亮,3D游戲引擎開(kāi)發(fā)人員,曾從事過(guò)3D引擎和休閑游戲開(kāi)發(fā),愛(ài)好圖形學(xué),目前在Corel公司從事多媒體軟件開(kāi)發(fā)。

             

            posted on 2007-11-13 01:59 七星重劍 閱讀(942) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Game GraphicsHLSL&ShaderMonkey
            久久青青草原国产精品免费 | 无码精品久久一区二区三区| 91精品婷婷国产综合久久| 91久久香蕉国产熟女线看| 性做久久久久久久久老女人| 99久久国产宗和精品1上映| 9久久9久久精品| 久久一区二区三区99| 精品久久久噜噜噜久久久| 久久中文精品无码中文字幕| 亚洲国产精品无码久久一区二区| 成人国内精品久久久久影院VR| 欧美亚洲国产精品久久久久| www.久久热.com| 狠狠综合久久AV一区二区三区| 国产亚洲精午夜久久久久久| 亚洲精品午夜国产VA久久成人| 久久久久久国产精品无码下载| 国产日产久久高清欧美一区| 人妻久久久一区二区三区| 久久久久免费视频| 精品久久久久久国产免费了| 久久久av波多野一区二区| 亚洲国产欧洲综合997久久| 中文字幕无码久久久| 日本亚洲色大成网站WWW久久| 精品久久久久久久| 久久婷婷久久一区二区三区| 亚洲精品国精品久久99热一| 久久婷婷五月综合国产尤物app| 久久久久一级精品亚洲国产成人综合AV区 | 狠狠88综合久久久久综合网| 久久亚洲日韩看片无码| 久久久久久精品成人免费图片 | 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲人成无码www久久久| 久久久久女教师免费一区| 久久天天躁狠狠躁夜夜av浪潮| 久久精品国产精品亚洲下载| 性高朝久久久久久久久久| 久久WWW免费人成一看片|