前言:
關於unityshader方面的知識有很多,但真正能讓讀者讀懂並很快上手操作的少之又少,在這裡我簡單介紹下關於shader的一些入門知識,如有出入請大佬們多多指點!
圖形學的基礎知識:
1.unity遊戲物體上需掛載mesh filter元件,mesh filter中儲存乙個mesh網格(用於儲存形成圖形的所有三角面的頂點資訊)。
2.unity遊戲物體上需掛載mesh renderer元件,mesh renderer為渲染元件,通俗來講就是按照mesh網格上的頂點資訊將圖形顯示出來,賦予**、顏色等等。
3.mesh renderer中material(材質)及我們編寫的shader所依賴的,用於實現效果的依託。
shader、opengl、directx之間的關係:
通俗來講,shader是一種渲染命令,由opengl或者directx進行解析進而渲染出豐富多彩的圖形。
其中opengl一般用於移動平台,directx一般用於pc平台。
shader的語言分類:
1.glsl opengl語言
2.hlsl directx語言
3.cg 誇平台語言
4.shaderlab unity中對上述語言的通用封裝
關於shader中的屬性**:
shader"關於shader中的常用語義:mocha/01 myshader
" //
sampler2d(其中white代表當未指定時預設其未一張白色的,也可改為其他顏色)
_cube("
cube
",cube)="
white
"{} //
立方體紋理samplercube(其中white代表當未指定時預設其未一張白色的,也可改為其他顏色)用於天空盒子等
_3d("
texure
",3d) = "
white
"{} //
3d貼圖sampler3d(其中white代表當未指定時預設其未一張白色的,也可改為其他顏色)
}
//subshader可以有很多個,顯示卡執行效果的時候,從第乙個subshader開始,如果裡面的效果全部可以實現,那麼就使用第乙個subshader,如果不支援則進行下乙個
subshader
}//當所有的subshader都不符合的時候,則用此備胎shader效果可自定義備胎shader
fallback "
vertexlit
"}
1.從應用程式傳遞到頂點函式的語義有哪些a2v
position 頂點座標(模型空間下的)
normal 法線( 模型空間下)
tangent 切線(模型空間)
texcoord0 ~n 紋理座標
color 頂點顏色
2.從頂點函式傳遞給片元函式的時候可以使用的語義
sv_position 剪裁空間中的頂點座標(一般是系統直接使用)
color0 可以傳遞一組值 4個
color1 可以傳遞一組值 4個
texcoord0~7 傳遞紋理座標
3.片元函式傳遞給系統
sv_target 顏色值,顯示到螢幕上的顏色
shader "使用結構體進行儲存傳遞資料:mocha/02 secondshader can run
" fixed4 frag() : sv_target
endcg}}
fallback
"vertexlit
"}
shader "mocha/03 use struct";
//使用結構體儲存
struct
v2f;
v2f vert(a2v v)
fixed4 frag(v2f f) : sv_target
endcg}}
fallback
"vertexlit
"}
unity shader 的學習筆記 float4
正在學習關於unity shader,其中我自己總結了一些自己不懂的東西 1 float fixed float 常見的寫法有 float4 和 float3 float3 一般情況下我們指的是向量,例如 float3 normal normal float4 對那些需要操作的頂點用 float4 ...
UnityShader中的數學(矩陣)
ps 本文章摘取自 unityshader入門精要 一書。unity matrix mvp 把模型空間座標轉換為裁剪空間座標 unity matrix mv 把模型空間座標轉換為觀察空間座標 unity matrix v 把世界空間座標轉換為觀察空間座標 unity matrix p 把觀察空間座標...
關於四捨五入
四捨五入 轉http nssoft.showdoc.asp?did 267 delphi的四捨五入函式round,對於 5的情況,整數部分是奇數,那麼會round up,偶數會round down,例如 x round 17.5 x 18 x round 12.5 x 12 請使用下面的函式代替ro...