1. 程式人生 > >ShaderLab學習小結(一)最簡化的頂點片斷Shader

ShaderLab學習小結(一)最簡化的頂點片斷Shader

圖片 -o pro alt 使用 其中 fixed vertex 函數

Shader "Custom/SimpleShader" //Shader最外層,""中定義Shader名 { SubShader{ //必要組成部分 pass{ //通道 CGPROGRAM //CG程序開頭 #pragma vertex vert //定義頂點級程序 #pragma fragment frag //定義片斷級程序 #include "unitycg.cginc" //引用unitycg文件,unity自定的結構體和函數等 struct v2f{ //自定義結構體,作為vert函數的返回值 float4 pos:POSITION; //位置,最基本的屬性,屏幕上正確顯示此物體的形狀和位置 }; v2f vert(appdata_base v) //頂點級程序,appdata_base定義在unitycg.cginc中 { v2f o; o.pos=mul(UNITY_MATRIX_MVP, v.vertex); //將原始的物體坐標系坐標轉化至投影坐標系坐標 return o; } fixed4 frag(v2f IN):COLOR { fixed4 col=fixed4(1,1,1,1); //定義顏色為純白rgba return col; } ENDCG //CG程序結尾 } } }

技術分享圖片
如上圖,使用這個最簡Shader材質的Cube只是顯示純白色,和光照什麽的沒有任何關系,也沒有陰影。
在頂點程序vert中,轉換物體坐標至投影坐標系,使物體在顯示屏上能正確顯示(形狀及位置)
將定義好的v2f輸出,在片斷程序frag中輸入來自頂點程序的v2f,定義一個顏色,並輸出。
最終Cube具有正確的形狀和位置,只顯示純白色。

在頂點程序vert中,mul函數是cg函數,作用是矩陣變換。如本例
mul(UNITY_MATRIX_MVP, v.vertex);
將物體原始的自身物體坐標系坐標,四維向量v.vertex用UNITY_MATRIX_MVP轉化至投影(屏幕)坐標系。
UNITY_MATRIX_MVP是內建矩陣,直接使用。

appdata_base定義在unitycg.cginc中,通過#include "unitycg.cginc"已經將文件引用。

struct:結構體
float4:float類型的四維向量 (x,y,z,w)或(r,g,b,a)
fixed4:fixed類型的四維向量 (x,y,z,w)或(r,g,b,a),精度不高,但用於顏色足夠了
fixed4 frag(v2f IN):COLOR,其中:COLOR是語義定義,說明這個程序輸出的是顏色,不定義會報錯。

ShaderLab學習小結(一)最簡化的頂點片斷Shader