WebGL 著色器偏導(dǎo)數(shù)dFdx和dFdy介紹

本文適合對(duì)webgl膛虫、計(jì)算機(jī)圖形學(xué)、前端可視化感興趣的讀者钓猬。

偏導(dǎo)數(shù)函數(shù)(HLSL中的ddx和ddy稍刀,GLSL中的dFdx和dFdy)是片元著色器中的一個(gè)用于計(jì)算任何變量基于屏幕空間坐標(biāo)的變化率的指令(函數(shù))。在WebGL中敞曹,使用的是dFdx和dFdy账月,還有另外一個(gè)函數(shù)fwidth = dFdx + dFdy。

偏導(dǎo)數(shù)計(jì)算

在三角形柵格化期間澳迫,GPU會(huì)同時(shí)跑片元著色器的多個(gè)實(shí)例局齿,但并不是一個(gè)pixel一個(gè)pixel去執(zhí)行的,而是將其組織在2x2的一組pixels塊中并行執(zhí)行橄登。偏導(dǎo)數(shù)就是通過(guò)像素塊中的變量的差值(變化率)而計(jì)算出來(lái)的抓歼。dFdx表示的是像素塊中右邊像素的值減去素塊中左邊像素的值,而dFdy表示的是下面像素的值減去上面像素的值拢锹。如下圖所示谣妻,圖中顯示的是渲染的屏幕像素,圖中紅色區(qū)域是一個(gè)像素塊卒稳,p(x,y)表示在屏幕空間坐標(biāo)系中坐標(biāo)(x蹋半,y)的片元(像素)上的某一個(gè)變量,圖中顯示了dFdx和dFdy的計(jì)算過(guò)程充坑。


偏導(dǎo)數(shù)計(jì)算

偏導(dǎo)數(shù)函數(shù)可以用于片元著色器中的任何變量湃窍。對(duì)于向量和矩陣類型的變量,該函數(shù)會(huì)計(jì)算變量的每一個(gè)元素的偏導(dǎo)數(shù)匪傍。

偏導(dǎo)數(shù)函數(shù)是紋理mipmaps實(shí)現(xiàn)的基礎(chǔ)您市,也能實(shí)現(xiàn)一系列算法和效果,特別是哪些依賴于屏幕空間坐標(biāo)的(比如渲染統(tǒng)一線寬的線框參考我的另外一篇文章:http://www.reibang.com/p/1a0979a2d972)役衡。

偏導(dǎo)數(shù)和mipmaps

Mipmaps用于計(jì)算紋理的一些列的子圖茵休,每個(gè)子圖都比前一個(gè)的尺寸縮小了2倍。 他們用于在紋理縮小(紋理映射到比自身尺寸小的表面)的時(shí)候的去鋸齒榕莺。
Mipmaps 對(duì)于紋理緩存的一致性也很重要俐芯,在遍歷一個(gè)三角形(的片元)的時(shí)候,它會(huì)強(qiáng)制獲取一個(gè)最近的像素比例:這個(gè)比例保證三角形上的一個(gè)像素盡量對(duì)應(yīng)紋理上的一個(gè)像素钉鸯。 Mipmaps是可以同時(shí)可視化效果和性能的少數(shù)技術(shù)之一吧史。
在紋理取樣過(guò)程中使用偏導(dǎo)數(shù)來(lái)選擇最佳的 mipmap 級(jí)數(shù)。紋理坐標(biāo)在屏幕空間中的變化率作為選擇mimmap級(jí)數(shù)的依據(jù)唠雕,變化率越大贸营,mimap級(jí)數(shù)越大,反之越小岩睁。

面的法線向量計(jì)算(flat shader)

偏導(dǎo)數(shù)函數(shù)可以用來(lái)在片元著色器中計(jì)算當(dāng)前面(三角形)的法線向量钞脂。當(dāng)前片元的世界坐標(biāo)系的水平偏導(dǎo)數(shù)和垂直偏導(dǎo)數(shù)是兩個(gè)三角形表面上的兩個(gè)向量,它們的叉乘結(jié)果是一個(gè)垂直于表面的向量捕儒,該向量的歸一化結(jié)果就是面的法線向量冰啃。需要特別注意的是兩個(gè)向量的叉乘的順序。下面是GLSL中通過(guò)鏡頭坐標(biāo)系中坐標(biāo)計(jì)算面法線向量的代碼:

normalize(  cross(dFdx(pos),  dFdy(pos))  );

關(guān)于偏導(dǎo)數(shù)函數(shù)的應(yīng)用之一可以參考 “WebGL 單通道wireframe渲染”刘莹,更多應(yīng)用將在后續(xù)介紹阎毅。

參考文檔
http://www.aclockworkberry.com/shader-derivative-functions/#footnote_3_1104

歡迎關(guān)注公眾號(hào)“ITman彪叔”。彪叔点弯,擁有10多年開(kāi)發(fā)經(jīng)驗(yàn)净薛,現(xiàn)任公司系統(tǒng)架構(gòu)師、技術(shù)總監(jiān)蒲拉、技術(shù)培訓(xùn)師肃拜、職業(yè)規(guī)劃師。熟悉Java雌团、JavaScript燃领。在計(jì)算機(jī)圖形學(xué)、WebGL锦援、前端可視化方面有深入研究猛蔽。對(duì)程序員思維能力訓(xùn)練和培訓(xùn)、程序員職業(yè)規(guī)劃和程序員理財(cái)投資有濃厚興趣灵寺。

ITman彪叔公眾號(hào)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末曼库,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子略板,更是在濱河造成了極大的恐慌毁枯,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叮称,死亡現(xiàn)場(chǎng)離奇詭異种玛,居然都是意外死亡藐鹤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門赂韵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)娱节,“玉大人,你說(shuō)我怎么就攤上這事祭示∫蘼” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵质涛,是天一觀的道長(zhǎng)稠歉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蹂窖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任恩敌,我火速辦了婚禮瞬测,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纠炮。我一直安慰自己月趟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布恢口。 她就那樣靜靜地躺著孝宗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耕肩。 梳的紋絲不亂的頭發(fā)上因妇,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音猿诸,去河邊找鬼婚被。 笑死,一個(gè)胖子當(dāng)著我的面吹牛梳虽,可吹牛的內(nèi)容都是我干的址芯。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼窜觉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谷炸!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起禀挫,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤旬陡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后语婴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體季惩,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡录粱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了画拾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啥繁。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖青抛,靈堂內(nèi)的尸體忽然破棺而出旗闽,到底是詐尸還是另有隱情,我是刑警寧澤蜜另,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布适室,位于F島的核電站,受9級(jí)特大地震影響举瑰,放射性物質(zhì)發(fā)生泄漏捣辆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一此迅、第九天 我趴在偏房一處隱蔽的房頂上張望汽畴。 院中可真熱鬧,春花似錦耸序、人聲如沸忍些。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)罢坝。三九已至,卻和暖如春搅窿,著一層夾襖步出監(jiān)牢的瞬間嘁酿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工男应, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痹仙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓殉了,卻偏偏與公主長(zhǎng)得像开仰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子薪铜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350