因為我也是個shader的新手入門著,其實感覺找到門還是挺麻煩的,所以本著自己感覺已經入門了的經驗分享一下,如有不對,請指示:
首先可以把shader看成乙個標準的框架:我對新的那個不熟悉所以分享的是舊版的shader寫法;
框架結構:
一、首先從屬性中先介紹各個屬性的宣告及型別:
拿第乙個為例子
_color("color",color)=(1,1,1,1) _color和括號裡的字串「color」是自己隨意定義的名字_color是在shader內部用的名字;字串是在unity介面顯示的名字(盡量統一方便外部獲取);
=號後面是預設值;fiex4型別宣告
_vector("vector",vector)=(1,2,3,4) float4型別宣告
_int("int",int)= 34234 int型別宣告
_float("float",float) = 4.5 float型別接收
_range("range",range(1,11))=6 float型別宣告
_2d("texture",2d) ="red"{} sampler2d宣告
_cube("cube",cube) ="white"{} samplercube宣告
_3d("texure",3d) ="black"{} sampler3d 宣告
二、subshader的pass塊外面沒有東西了 至少入門是:
pass塊在需要時 需要乙個標籤:tags
只有定義了正確的lightmode才能得到一些unity的內建光照變數
其他的東西暫時還沒用過;
#include"lighting.cginc"
標註了包含
unity
的內建的檔案,才可以使用
unity
內建的一些變數;
這兩個匯入可以使用
_lightcolor0.rgb 第乙個直射光的顏色 0一般只有乙個直射光;
_worldspacelightpos0.xyz;
第乙個直射光的位置
=對於每乙個頂點的光的方向記得標準化:
unity_lightmodel_ambient.rgb 獲取
unity
內建的光照模型的設定環境光;
_worldspacecamerapos.xyz
然後是編譯指示兩個函式,這裡我叫做宣告抽象方法。。。
#pragma vertex vert
這個是頂點操作的方法體(所有的頂點操作盡量放在這裡而且這個函式比下面的畫素函式效率要高一些);
#pragma fragment frag
這個是片元函式;操作一些畫素點的計算量比較大;計算光照反射的顏色渲染都在這裡;
在頂點函式中是可以代替外面的mesh頂點變形直接更改頂點位置的;(畢竟這裡是gpu);
然後我還會定義兩個結構體:乙個是接收系統返回的各項資料;另乙個用來把這些資料轉換到片元函式中;
struct a2v{}:注意這裡需要加分號;結構體的命名雖然可以自己定義但是盡量保持這個因為有的一些巨集設定會呼叫這個名字;
我先介紹一下需要從系統返回的資料型別:
float4 position 頂點座標
float3 normal 模型空間下的法線方向
float4 texcoord0~n 第一套紋理座標
tangent 切線
color 頂點顏色
struct v2f{};上面同理;
我在介紹一下能傳輸變數的資料寫法:
texcoord0~7 傳遞紋理座標
float4/float3 color0 傳遞4個值或者3個值 (一組值)
float4/float3 color1 傳遞4個值或者3個值
完善方法體內容自構:
既然已經宣告了抽象方法就需要實現它:
v2f vert(a2v v)
void frag(v2f f):sv_target(這個是必須寫的是float4的值為顏色值輸出到平面的顏色){
然後按照最初的結構完善,然後直接就能執行了:
貼一段** 現在應該都能看懂了 看不懂的全是規定寫法的定義直接查就好了:
ubuntu新手入門
ubuntu使用設定之介面篇 ubuntu系統裝好了,不過怎麼看上則呢麼醜醜的?好像mr徐的介面和我的不一樣呢,怎麼設定的呢?首先,讓我們來設定工具條。ubuntu預設2條工具條,讓我們來把他設定成和windows下一樣的吧。先讓我們在上面的工具條的空白的地方,選擇刪除面板。然後,讓我們在底下的面板...
XML新手入門
ibm的xml教程 xml是什麼?xml,或稱為可擴充套件標記語言 extensible markup language 是一種您可以用來建立自己的標記的標記語言。它由全球資訊網協會 w3c 建立,用來克服 html 即超文字標記語言 hypertext markup language 它是所有網頁...
SOA新手入門
什麼是soa 我們可能應該回答的第乙個問題也是最基本的問題。什麼是面向服務的體系結構 service oriented architecture,soa 這個問題的答案實際上涉及與開發相關的若干不同方面。soa 是一種 it 體系結構樣式,支援將您的業務作為鏈結服務或可重複業務任務進行整合,可在需要...