程式片段被寫在cgprogram和endcg之間;在程式片段被編譯之前需要個程式加上預編譯(#pragma)。
1、#pragma vertex name:編譯name函式為頂點著色器
2、#pragma fragment name:編譯name函式為片段著色器
3、#pragma geometry name:編譯name函式為dx10的幾何著色器,會自動開啟#pragma target 4.0
4、#pragma hull name:編譯name函式為dx10的殼著色器,會自動開啟#pragma target 5.0
5、#pragma domain name:編譯name函式為dx10的域著色器,會自動開啟#pragma target 5.0
6、#pragma target name: 表明編譯目標
7、#pragma only_renderers space_separated_names:只為指定的渲染平台渲染著色器
8、#pragma exclude_renderers pace_separated_names:排除指定的渲染平台
9、#pragma multi_compile … :根據不同的情況,使用不同的預處理器指令,來多次編譯shader**
10、#pragma enable_d3d11_debug_symbols : 生成d3d11的除錯資訊,可以在vs2012(或以上)使用圖形偵錯程式除錯shader
11、#pragma hardware_tier_variants renderername: 針對所選渲染器的每個硬體層級,生成每個已編譯的shader的多重shader硬體變體
注:編譯指令#pragma su***ce surffunc lightingmodel [optional params](1)上述中space_separated_names包括以下值:
d3d9:direct3d 9
d3d11:direct3d 11/12
glcore:opengl 3.x/4.x
gles:opengl es 2.0
gles:opengl es 3.x
metal:ios&mac metal
d3d11_9x:direct3d 11 9.x特性等級一般用於wsa平台
xbox360:xbox 360
xboxone:xbox one
ps4:playstation 4
psp2:playstation vita
n3ds:nintendo 3ds
wiiu:nintendo wii u
(2)#pragma multi_compile詳解
以下鏈結有詳細介紹:
通常就是名為surf的函式(函式名可以任意)必須指定,其固定格式為:
void surf(input in,inout su***ceoutput o)光照模型函式,必須指定,unity內建了一些光照模型,預設情況下使用的是內建的lambert模型,包括:
standard:基於物理的漫反射模型通過宣告乙個新的光照模型函式我們就能夠建立乙個新的關照模型,函式名的格式為:lighting《任意名字》你可以使用以下三種格式的光照模型函式:standardspecular:基於物理的高光模型
lambert:不基於物理的漫反射模型
blinnphong:不基於物理的高光模型
(1)half4 lightingname(su***ceoutput s,half3 lightdir,half atten){}包含可用的指令型別,包括開啟、關閉一些狀態,設定生成pass型別、指定可選函式,具體在以下部落格中有介紹:該函式用於不需要視角方向的前向著色
(2)half4 lightingname(su***ceoutput s,half3 lightdir,half3 viewdir,half atten){}
該函式用於需要視角方向的前向著色
(3)half4 lightingname_prepass(su***ceoutput s,half4 light){}
該函式用於需要實現延遲著色的專案
Unity Shader預編譯指令
我們在unity中最常見的就是下面前兩種,使用就不必介紹了,這裡會針對其它一些較為常用的編譯指令做一下詳細介紹。1 pragma vertex name 編譯name函式為頂點著色器 2 pragma fragment name 編譯name函式為片段著色器 3 pragma geometry na...
關於編譯指令
自定義條件識別符號 define 下面例子中自定義了條件識別符號 bbbbb 識別符號和定義它的指令都不區分大小寫,但大家一般慣用大寫.begin showmessage 識別符號 bbbbb 已定義 showmessage 識別符號 bbbbb 未定義 end 測試預定義的 debug 和 rel...
編譯指令 pragma optimize
msdn 指令形式 optimize pragma optimize optimization list 僅用於專業和企業版本的特徵 優化只被visual c 專業版和企業版支援。更多的資訊參見microsoft visual c 聯機編輯。該指令指定在函式基中執行的優化。optimize編譯指示必...