Shader的函式公式以及使用的場景

2021-09-20 14:58:24 字數 2957 閱讀 8613

shader 是幹什麼的?

它的作用可以先簡單理解為對螢幕上的物體,進行顏色處理。

而大家都知道,所有計算機,處理顏色的當然是顯示卡,也就是 gpu 。

所以我們寫 shader 的目的就是告訴 gpu ,我需要對物體的顏色,紋理,等方面,怎樣處理,達到我們想要的效果。

unitycg.cginc中一些常用的函式

//攝像機方向(視角方向)

float3 worldspaceviewdir(float4 v) 根據模型空間中的頂點座標 得到 (世界空間)從這個點到攝像機的觀察方向

float3 unityworldspaceviewdir(float4 v) 世界空間中的頂點座標==》世界空間從這個點到攝像機的觀察方向

float3 objspaceviewdir(float4 v) 模型空間中的頂點座標==》模型空間從這個點到攝像機的觀察方向

//光源方向

float3 worldspacelightdir(float4 v) 模型空間中的頂點座標==》世界空間中從這個點到光源的方向

float3 unityworldspacelightdir(float4 v) 世界空間中的頂點座標==》世界空間中從這個點到光源的方向

float3 objspacelightdir(float4 v) 模型空間中的頂點座標==》模型空間中從這個點到光源的方向

//方向轉換

float3 unityobjecttoworldnormal(float3 norm) 把法線方向 模型空間==》世界空間

float3 unityobjecttoworlddir(float3 dir) 把方向 模型空間=》世界空間

float3 unityworldtoobjectdir(float3 dir) 把方向 世界空間=》模型空間

什麼是opengl、directx

shader可以認為是一種渲染命令 ,由opengl 或者dx進行解析,來控制渲染豐富多彩的圖形

opengl 使用glsl 編寫shader

directx 使用hssl 編寫shader

英偉達 cg 編寫shader(跨平台)

unity shader的分類

使用的是shaderlab編寫unity中的shader

1,表面著色器 su***ce shader

2,頂點/片元著色器 vertex/fragment shader

3,固定函式著色器 fixed function shader

unityshader中屬性的型別有哪些

_color(「color」,color)=(1,1,1,1)

_vector(「vector」,vector)=(1,2,3,4)

_int(「int」,int)= 34234

_float(「float」,float) = 4.5

_range(「range」,range(1,11))=6

_2d(「texture」,2d) = 「red」{}

_cube(「cube」,cube) = 「white」{}

_3d(「texure」,3d) = 「black」{}

從應用程式傳遞到頂點函式的語義有哪些a2v

position 頂點座標(模型空間下的)

normal 法線( 模型空間下)

tangent 切線(模型空間)

texcoord0 ~n 紋理座標

color 頂點顏色

從頂點函式傳遞給片元函式的時候可以使用的語義

sv_position 剪裁空間中的頂點座標(一般是系統直接使用)

color0 可以傳遞一組值 4個

color1 可以傳遞一組值 4個

texcoord0~7 傳遞紋理座標

片元函式傳遞給系統

sv_target 顏色值,顯示到螢幕上的顏色

什麼是光照模型

光照模型就是乙個公式,使用這個公式來計算在某個點的光照效果

標準光照模型

在標準光照模型裡面,我們把進入攝像機的光分為下面四個部分

自發光

高光反射

blinn光照模型

specular=直射光 * pow( max(cosθ,0),10) θ:是反射光方向和視野方向的夾角

blinn-phong光照模型

specular=直射光 * pow( max(cosθ,0),10) θ:是法線和x的夾角 x 是平行光和視野方向的平分線

漫反射 diffuse = 直射光顏色 * max(0,cos夾角(光和法線的夾角) ) cosθ = 光方向· 法線方向

環境光tags

只有定義了正確的lightmode才能得到一些unity的內建光照變數

包含unity的內建的檔案,才可以使用unity內建的一些變數

normalize() 用來把乙個向量,單位化(原來方向保持不變,長度變為1)

max() 用來取得函式中最大的乙個

dot 用來取得兩個向量的點積

_worldspacelightpos0 取得平行光的位置

_lightcolor0取得平行光的顏色

unity_matrix_mvp 這個矩陣用來把乙個座標從模型空間轉換到剪裁空間

_world2object 這個矩陣用來把乙個方向從世界空間轉換到模型空間

unity_lightmodel_ambient用來獲取環境光

半蘭伯特光照模型

diffuse = 直射光顏色 *( cosθ *0.5 +0.5 )

蘭伯特光照模型

diffuse = 直射光顏色 * max(0,cos夾角(光和法線的夾角) ) cosθ = 光方向· 法線方向

shader中的各種空間座標

什麼是切線空間

pixel = (normal+1)/2

normal = pixel*2 - 1

Unity全域性光照以及shader的使用方法

unity自帶的shader都是支援光照貼圖的,光照貼圖可以讓unity中的模型在沒有光照的情況下,在物體上產生陰影效果。5.0以後光照貼圖的形式都有一定的改變。而在自己寫的shader中需要對光照貼圖進行相應的設定。光照貼圖準備工作 1.light中baking的模式選為baked,為了檢視效果,...

Excel使用公式和函式

excel使用公式和函式 1 檢查公式的錯誤工具 錯誤檢查。如有錯誤則會彈出錯誤檢查對話方塊,在此對話方塊中將顯示公式錯誤的詳細資訊,使用者使用此對話方塊可以對錯誤資訊進行檢查或處理。2 常見錯誤的型別 如果輸入的公式有錯誤,excel將顯示乙個錯誤值。在excel公式中,一些常見的錯誤值和產生錯誤...

vlookup函式使用 execl公式

目錄我們有一張工資明細表,裡面有好多列內容很複雜,我們僅僅想看看張三和李四的收入,我們不想要其他資訊。我們需要從工資明細表中拿到。那我們應該怎麼做。函式格式 vlookup lookup value,table array,col index num,range lookup 引數解釋 lookup...