圖形渲染Shader常用關(guān)鍵字

在工作中顷啼,因為編寫與瀏覽shader的需要逐虚,經(jīng)常會遇到各種平時不是特別熟悉的關(guān)鍵字刑赶,從而需要一而再的進行查詢克伊,這里嘗試將一些常用的關(guān)鍵字釋義及用法做一個歸納總結(jié)酥郭,方便后面查詢使用。

1. 函數(shù)

函數(shù)是使用頻率最高的“關(guān)鍵字”了愿吹,但是由于名字過于簡化不从,且不是每個函數(shù)都是經(jīng)常使用的,因此還是會經(jīng)常遇到函數(shù)名不知道具體的內(nèi)部實現(xiàn)的情況犁跪,因此這里首先對工作中碰到的一些shader函數(shù)進行查詢

1.1 smoothstep

這是一個三次插值的平滑函數(shù)椿息,使用格式為smoothstep(a, b, x)歹袁,其函數(shù)實現(xiàn)大致如下:

float smoothstep(float a, float b, float x)
{
    float t = saturate((x - a)/(b - a));
    return t*t*(3.0 - (2.0*t));
}

當a < b時,此函數(shù)時一個遞增函數(shù)寝优,當a > b時条舔,此函數(shù)時一個遞減函數(shù)。比如取a,b = 0,1時以及當取a,b = 1, 0時乏矾,對應(yīng)的函數(shù)曲線分別為:

smoothstep(0, 1, x)
smoothstep(1, 0, x)

函數(shù)中的a,b實際上是對應(yīng)于自變量x的取值范圍上下限孟抗,當超出上下限時,函數(shù)取值就被clamp到0/1钻心,這一點在上述曲線中沒有體現(xiàn)出來凄硼,需要注意。

1.2 lerp/mix

這是一個線性插值函數(shù)捷沸,在HLSL中摊沉,此函數(shù)名為lerp,在GLSL中亿胸,此函數(shù)名為mix坯钦,雖然名字不同,但是其用法與函數(shù)曲線是完全相同的侈玄,這個函數(shù)的使用格式為lerp(a, b, x)婉刀,對應(yīng)的函數(shù)實現(xiàn)為:

float lerp(float a, float b, float x)
{
  float t = saturate(x);
  return a + (b - a) * t;
}

這是一個線性函數(shù),當b > a時序仙,函數(shù)遞增突颊,當a > b時,函數(shù)遞減潘悼,對應(yīng)的兩個示例函數(shù)的曲線如下面兩圖所示:

lerp(0, 1, x)
lerp(1, 0, x)

同樣律秃,a,b對應(yīng)了函數(shù)數(shù)值的上下限,當自變量x超出0,1之外治唤,對應(yīng)的函數(shù)取值為上下限的clamp棒动,不過曲線中沒有顯示出來。

1.3 step

step函數(shù)是階躍函數(shù)宾添,其實現(xiàn)邏輯給出如下:

float step(float a, float x)
{
  return x > a ? 1.0 : 0.0;
}

函數(shù)(step(0.5, x))曲線如下圖所示:

step

1.4 floor/ceil

floor函數(shù)是向下取整函數(shù)船惨,與之相對的是向上取整函數(shù)ceil,這兩個函數(shù)的曲線示意圖如下所示:

floor/ceil

1.5 frac

frac函數(shù)是取小數(shù)函數(shù)缕陕,返回的是一個[0, 1)之間的小數(shù)粱锐,對于大于零的浮點數(shù),直接取小數(shù)部分即可扛邑,而對于小于零的浮點數(shù)怜浅,則是取1-frac(abs(x)):

float frac(float x)
{
  return x - floor(x);
}

其對應(yīng)的函數(shù)曲線如下圖所示:

frac(x)

1.6 fmod

fmod(x, d)函數(shù)是取余函數(shù)(需要保證d不等于0济瓢,否則會引發(fā)異常)盹憎,返回值的符號與x保持一致粒竖,且其絕對值小于被除數(shù)d的絕對值忙芒,其實現(xiàn)函數(shù)可以用如下的代碼來表示:

float fmod(float x, fload d)
{
  float remains = frac(x / d);
  return remains * d - d * step(-x * d);
}

對應(yīng)的函數(shù)曲線如下圖所示:

fmod(x, d)

從圖中可以看出哟忍,fmod函數(shù)的結(jié)果與被除數(shù)的符號是沒有關(guān)系的宛篇。

1.7 sign

sign函數(shù)是符號函數(shù)皆愉,當自變量小于零時返回-1证杭,當自變量大于零時返回1沪袭,當自變量等于0時湾宙,返回0,其實現(xiàn)可以用如下代碼來示意:

float sign(x)
{
  if(x < 0.0)
    return -1.0;
  else if(x > 0.0)
    return 1.0;
  else
    return 0.0;
}

函數(shù)曲線如下圖所示(為了清晰的顯示自變量為0時的結(jié)果冈绊,用散點圖表示):

sign(x)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侠鳄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子死宣,更是在濱河造成了極大的恐慌伟恶,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毅该,死亡現(xiàn)場離奇詭異博秫,居然都是意外死亡,警方通過查閱死者的電腦和手機眶掌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門挡育,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朴爬,你說我怎么就攤上這事即寒。” “怎么了召噩?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵母赵,是天一觀的道長。 經(jīng)常有香客問我具滴,道長凹嘲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任构韵,我火速辦了婚禮周蹭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贞绳。我一直安慰自己谷醉,他們只是感情好,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布冈闭。 她就那樣靜靜地躺著俱尼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪萎攒。 梳的紋絲不亂的頭發(fā)上遇八,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天矛绘,我揣著相機與錄音,去河邊找鬼刃永。 笑死货矮,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的斯够。 我是一名探鬼主播囚玫,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼读规!你這毒婦竟也來了抓督?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤束亏,失蹤者是張志新(化名)和其女友劉穎铃在,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碍遍,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡定铜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了怕敬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揣炕。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赖捌,靈堂內(nèi)的尸體忽然破棺而出祝沸,到底是詐尸還是另有隱情,我是刑警寧澤越庇,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布罩锐,位于F島的核電站,受9級特大地震影響卤唉,放射性物質(zhì)發(fā)生泄漏涩惑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一桑驱、第九天 我趴在偏房一處隱蔽的房頂上張望竭恬。 院中可真熱鬧,春花似錦熬的、人聲如沸痊硕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岔绸。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盒揉,已是汗流浹背晋被。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刚盈,地道東北人羡洛。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像藕漱,于是被迫代替她去往敵國和親欲侮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容