Unity3D shader常用函式和變數

2022-06-18 09:24:13 字數 2835 閱讀 5118

最*在學習unity shader,寫shader的時候總是忘記unity為我們提供的函式、變數怎麼寫的,這裡整理一下,方便自己查閱,也提供給網友,學習shader不易。

1、函式

float3 worldspaceviewdir(float4 v)  //輸入乙個模型空間中的頂點位置,返回世界空間中從該點到攝像機的觀察方向

float3 objspaceviewdir(float4 v) //輸入乙個模型空間中的頂點位置,返回模型空間中從該點到攝像機的觀察方向

float3 worldspacelightdir(float4 v) //僅用於前向渲染中(forwardbase),輸入乙個模型空間中的頂點位置,返回世界空間中從該點到光源的光照方向,沒有被歸一化

float3 unityworldspacelightdir(float4 v) //僅可用於前向渲染中,輸入乙個世界空間的頂點位置,返回世界空間從該點到光源的光照方向,沒有被歸一化

float3 objspacelightdir(float4 v) //僅用於前向渲染中(forwardbase),輸入乙個模型空間中的頂點位置,返回模型空間中從該點到光源的光照方向,沒有被歸一化

float3 unityobjecttoworldnormal(float3 norm) //把法線從模型空間轉換到世界空間中

float3 unityobjecttoworlddir(in float3 dir) //把方向向量從模型空間轉換到世界空間中

float3 unityworldtoobjectdir(float3 dir) //把方向向量從世界空間轉換到模型空間中

float3 shade4pointlights(...) //僅可用於前向渲染中,計算四個點光源的光照,它的引數是已經打包進向量的光照資料。前向渲染通常會使用這個函式來計算逐頂點光照

2、語義

position    //模型空間中的頂點位置,通常是float4型別

normal //頂點法線,通常是float3型別

tangent //頂點法線,通常是float4型別

texcoordn //該頂點的紋理座標,texcoord0表示第一組紋理座標,…,通常是float2或float4型別

color //頂點顏色,通常是fixed4或float4型別

sv_position //裁剪空間中的頂點座標,結構體中必須包含乙個用該語義修飾的變數。等同於directx9中的

position,但是最好是使用sv_position

color0 //輸出第一組頂點顏色

color1 //輸出第二組頂點顏色

texcoord0~texcoord7 //輸出紋理座標

sv_target //輸出值將會儲存到渲染目標(render target)中

3、變數

unity_matrix_mvp    //當前的模型*觀察*投影矩陣,用於將頂點/方向向量從模型空間轉換到裁剪空間

unity_matrix_mv //當前的模型*觀察矩陣,用於將頂點/方向向量從模型空間轉換到觀察空間

unity_matrix_v //當前的觀察矩陣,用於將頂點/方向向量從世界空間轉換到觀察空間

unity_matrix_p //當前的投影矩陣,用於將頂點/方向向量從觀察空間轉換到裁剪空間

unity_matrix_vp //當前的觀察*投影矩陣,用於將頂點/方向向量從世界空間轉換到裁剪空間

unity_matrix_t_mv //unity_matrix_mv的轉置矩陣

unity_matrix_it_mv //unity_matrix_mv的逆轉置矩陣,用於將發現從模型空間轉換到觀察空間,也可以用於得到unity_matrix_mv的逆矩陣

unity_objecttoworld(_object2world) //當前的模型矩陣,用於將頂點/方向向量從模型空間變換到世界空間

unity_worldtoobject(_world2object) //用於將頂點/方向向量從世界空間轉換到模型空間

4、攝像機和螢幕引數

float3  _worldspacecamerapos  //該攝像機在世界空間中的位置

float4 _projectionparams //x=1.0(或-1.0,如果正在使用乙個翻轉的投影矩陣進行渲染),y=near,z=far,w=1.0+1.0/far,其中near和far分別是*裁剪*面和遠裁剪*面到攝像機的距離

float4 _screenparams //x=width,y=height,z=1.0+1.0/width,w=1.0+1.0/height,其中width和height分別是該攝像機的渲染目標(render target)的畫素寬度和高度

float4 _zbufferparams //x=1-far/near,y=far/near,z=x/far,w=y/far,該變數用於線性化z快取中的深度值

float4 unity_orthoparams //x=width,y=height,z沒有定義,w=1.0(該攝像機是正交攝像機)或w=0.0(該攝像機是透視攝像機),其中width和height是正交投影攝像機的寬度和高度

float4x4 unity_cameraprojection //該攝像機的投影矩陣

float4x4 unity_camerainvprojection //該攝像機的投影矩陣的逆矩陣

float4 unity_cameraworldclipplanes[6] //該攝像機的6個裁剪*面在世界空間下的等式,按左、右、下、上、*、遠裁剪*面

Unity3d Shader 運動模糊

攝影常用的一招就是延時攝影,以使運動的物體產生運動模糊。攝影技巧為 1,三角架固定相機 2,調長 時間 3,物件有運動物體和靜止物體參照 用了延時攝影,會產生藝術感,見下圖 2015年1月 拍攝於上海陸家嘴 遊戲方面可喜的是unity3d也可以實現類似效果,先看效果圖 第一張為無運動模糊 第二張為有...

Unity3D Shader 入門學習

unity3d 的所有渲染工作離不開著色器.shader 著色器其實是一小段程式,它負責將輸入的mesh網格.以指定的方式和輸入的貼圖或者顏色等組合作用.然後輸出.繪圖單元可以依據這個輸出來將影象繪製到螢幕上 輸入的貼圖或顏色等,加上對應的shader,以及對shader的特定引數設定,將這些內容 ...

unity3d shader之浮雕效果

浮雕就是對影象上的乙個畫素和它右下的那個畫素的色差的一種處理 非常容易,只需要乙個簡單的演算法 用fragment shader來實現 我們只看實現部分就好 在frag函式中 mc00mc tex2d maintex,i.uv maintex rgb 獲取當前點的顏色 mc11 tex2d main...