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...