<aside> <img src="/icons/exclamation-mark_gray.svg" alt="/icons/exclamation-mark_gray.svg" width="40px" /> Unity Shader是列優先
</aside>
Shader "Custom/Shader Name" {
Properties {
// 屬性...
}
SubShader {
Pass {
CGPROGRAM
// 聲明vertex shader & fragment shader 的入口
#pragma vertex vert
#pragma fragment frag
float4 vert (float4 v : POSITION) : SV_POSITION {
return UnityObjectToClipPos (v);
}
fixed4 frag () : SV_Target {
return fixed4 (1.0, 1.0, 1.0, 1.0);
}
}
}
Fallback ...
}
在新版Unity(5.6以上)中,會自動修改以下的代碼
return mul (UNITY_MATRIX_MVP, v.vertex);
// 修改為
return UnityObjectToClipPos (v.vertex);
兩個實際在做的事是一樣的,都是將頂點變換到齊次空間中。但實際上UnityObjectToClipPos()
比使用UNITY_MATRIX_MVP
更快。
因為UNITY_MATRIX_MVP
是將MVP三個矩陣相乘在一起的矩陣,而UnityObjectToClipPos()
則是三個矩陣分別的運算。矩陣運算有以下的性質
Unityのシェーダのプロパティを使ってみる | 測度ゼロの抹茶チョコ
uniform 是修飾全局變量時使用的,不能用於shader中的輸入輸出。Unity Shader中的變量默認都為uniform,在Shader中不能修改,只能從外部修改。例如通過API進行修改,或者在Editor中修改。