內(nèi)置函數(shù)的總結(jié)

image

為了把頂點(diǎn)或方向矢量從觀察空間變換到模型空間


// 方法一坦刀, 使用transpose 函數(shù)對(duì)UNITY_MATRIX_IT_MV 進(jìn)行轉(zhuǎn)置,
// 得到UNITY_MATRIX_MV 的逆矩陣鲤遥,然后進(jìn)行列矩陣乘法沐寺,
// 把觀察空間中的點(diǎn)或方向矢量變換到模型空間中
float4 modelPos = mul(transpose(UNITY_MATRIX_ IT_MV), viewPos);
 
// 方法二盖奈, 不直接使用轉(zhuǎn)置函數(shù)transpose 混坞,而是交換mul 參數(shù)的位置钢坦,使用行矩陣乘法
// 本質(zhì)和方法一是完全一樣的
float4 modelPos = mul(viewPos, UNITY_MATRIX_IT_MV);
TIM截圖20190319215436.png

TIM截圖20190319215502.png

TRANSFORM_TEX(v.texcoord, _MainTex);
TRANSFORM_TEX方法比較簡(jiǎn)單,就是將模型頂點(diǎn)的uv和Tiling爹凹、Offset兩個(gè)變量進(jìn)行運(yùn)算厨诸,計(jì)算出實(shí)際顯示用的定點(diǎn)uv逛万。

該方法可以在UnityCG.cginc文件中找到,內(nèi)容也很簡(jiǎn)單:
// Transforms 2D UV by scale/bias property

define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)

配合使用時(shí)的代碼:
o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);

其中
v是appdata_base類(lèi)型宇植,v.texcoord就是模型頂點(diǎn)的uv數(shù)據(jù)。
_MainTex是使用的圖片指郁。
name##_ST實(shí)際上就是_MainTex_ST。
name##_ST.xy就是Tiling的xy值闲坎。
name##_ST.zw就是Offset的xy值。


tex2D(_MainTex, i.uv); 對(duì)圖片進(jìn)行采樣 參數(shù)1 是采樣圖片
// Use the refract dir in world space to access the cubemap
fixed3 refraction = texCUBE(_Cubemap, i.worldRefr).rgb * _RefractColor.rgb; 這是一個(gè)立方體的采樣腰懂,

//CG 的refract函數(shù)來(lái)計(jì)算折射方向 參數(shù)1 入射光線方向(必須歸一),2:表現(xiàn)法線,法線方向歸一项秉,3:入射光線所在介質(zhì)的折射率和折射光線所在介質(zhì)的折射率之間的比值
o.worldRefr = refract(-normalize(o.worldViewDir), normalize(o.worldNormal), _RefractRatio);

image

以上這些函數(shù)都沒(méi)有歸一化
WorldSpaceLightDir、UnityWorldSpaceLightDir 和ObjSpaceLightDir娄蔼,稍微復(fù)雜一些,這是因?yàn)椋?Unity 幫我們處理了不同種類(lèi)光源的情況岁诉。需要注意的是,這3 個(gè)函數(shù)僅可用于前向渲染(關(guān)于什么是前向渲染會(huì)在9.1 節(jié)中講到)涕癣。這是因?yàn)橹挥性谇跋蜾秩緯r(shí),這3 個(gè)函數(shù)里使用的內(nèi)置變量 _WorldSpaceLightPos0 等才會(huì)被正確賦值。

光照 陰影使用的函數(shù)
SHADOW_ COORDS 恬叹、TRANSFER_SHADOW 和SHADOW_ATTENUATION 是計(jì)算陰影時(shí)的“三劍客”。這些內(nèi)置宏幫助我們?cè)诒匾獣r(shí)計(jì)算光源的陰影
在前向渲染中绽昼, 宏
SHADOW_COORDS
實(shí)際上就是聲明了一個(gè)名為** _ShadowCoord的陰影紋理坐標(biāo)變量唯鸭。而TRANSFER_SHADOW的實(shí)現(xiàn)會(huì)根據(jù)平臺(tái)不同而有所差異硅确。如果當(dāng)前平臺(tái)可以使用屏幕空間的陰影映射技術(shù)(通過(guò)判斷是否定義了UNITY_NO_SCREENSPACE_SHADOWS來(lái)得到) , TRANSFER_SHADOW 會(huì)調(diào)用內(nèi)置的ComputeScreenPos 函數(shù)來(lái)計(jì)算
_ShadowCoord** ;如果該平臺(tái)不支持屏幕空間的陰影映射技術(shù), 就會(huì)使用傳統(tǒng)的陰影映射技術(shù)菱农,TRANSFER_SHADOW 會(huì)把頂點(diǎn)坐標(biāo)從模型空間變換到光源空間后存儲(chǔ)到ShadowCoord 中缭付。然后循未,** SHADOW_ATTENUATION** 負(fù)責(zé)使用ShadowCoord 對(duì)相關(guān)的紋理進(jìn)行采樣,得到陰影信息的妖。

參考:https://blog.csdn.net/laverfever/article/details/23962411
官方 shader API:https://docs.unity3d.com/Manual/SL-BuiltinFunctions.html
https://docs.unity3d.com/ScriptReference/Shader.html

TANGENT_SPACE_ROTATION 宏 相當(dāng)于嵌入如下兩行代碼:
  float3 binormal = cross( v.normal, v.tangent.xyz ) * v.tangent.w;
  float3x3 rotation = float3x3( v.tangent.xyz, binormal, v.normal );
也就是構(gòu)造出 tangent space 的坐標(biāo)系, 定義轉(zhuǎn)換world space的向量到tangent space的rotation 矩陣嫂粟。

Hidden Shader的

表示是內(nèi)置shader娇未,不能在材質(zhì)球的下拉列表里看到星虹。一般你要覆蓋內(nèi)置shader的時(shí)候才會(huì)這么寫(xiě),一般是覆蓋默認(rèn)地形shader 相關(guān)的 地面 草 廣告牌 等…

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宽涌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子卸亮,更是在濱河造成了極大的恐慌褥芒,老刑警劉巖嫡良,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異寝受,居然都是意外死亡坷牛,警方通過(guò)查閱死者的電腦和手機(jī)很澄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)颜及,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人俏站,你說(shuō)我怎么就攤上這事∪粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵犯祠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我酌呆,道長(zhǎng),這世上最難降的妖魔是什么隙袁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮菩收,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坛梁。我一直安慰自己而姐,他們只是感情好划咐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布钧萍。 她就那樣靜靜地躺著褐缠,像睡著了一般风瘦。 火紅的嫁衣襯著肌膚如雪队魏。 梳的紋絲不亂的頭發(fā)上万搔,一...
    開(kāi)封第一講書(shū)人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音瞬雹,去河邊找鬼昧谊。 笑死酗捌,一個(gè)胖子當(dāng)著我的面吹牛呢诬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尚镰,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼狗唉!你這毒婦竟也來(lái)了初烘?” 一聲冷哼從身側(cè)響起敞曹,我...
    開(kāi)封第一講書(shū)人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澳迫,沒(méi)想到半個(gè)月后局齿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體橄登,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年拢锹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卒稳。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖充坑,靈堂內(nèi)的尸體忽然破棺而出减江,到底是詐尸還是另有隱情捻爷,我是刑警寧澤辈灼,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布也榄,位于F島的核電站巡莹,受9級(jí)特大地震影響甜紫,放射性物質(zhì)發(fā)生泄漏降宅。R本人自食惡果不足惜囚霸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邮辽。 院中可真熱鬧唠雕,春花似錦、人聲如沸岩睁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冰啃。三九已至刘莹,卻和暖如春阎毅,著一層夾襖步出監(jiān)牢的瞬間点弯,已是汗流浹背扇调。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工抢肛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狼钮,地道東北人捡絮。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓熬芜,卻偏偏與公主長(zhǎng)得像福稳,于是被迫代替她去往敵國(guó)和親涎拉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子的圆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355