Unity-編寫著色器
Unity 中的著色器可以用三種不同的方式編寫:
表面著色器
如果著色器需要受到光照和陰影的影響,則表面著色器是您的最佳選擇。表面著色器以簡潔的方式使編寫復(fù)雜的著色器變得容易 - 這是與 Unity 光照管線進行交互的更高級別抽象。大多數(shù)表面著色器自動支持前向和延遲光照。您可以用幾行?Cg/HLSL?編寫表面著色器,隨后就能在此基礎(chǔ)上自動生成更多代碼。
如果您的著色器與光照沒有任何關(guān)聯(lián),請不要使用表面著色器。對于后期處理效果或許多特殊效果著色器,表面著色器是次優(yōu)選項,因為它們會無緣無故進行大量光照計算。
頂點和片元著色器
如果您的著色器不需要與光照交互,或者如果您需要無法由表面著色器處理的非常奇特的效果,則需要使用頂點和片元著色器。以這種方式編寫的著色器程序是創(chuàng)建所需效果的最靈活方法(甚至表面著色器也會自動轉(zhuǎn)換為一堆頂點和片元著色器),但這需要付出代價:必須編寫更多的代碼并且更難以讓它與光照互動。這些著色器也是以?Cg/HLSL?編寫。
固定函數(shù)著色器
固定函數(shù)著色器是傳統(tǒng)的著色器語法,用于非常簡單的效果。建議編寫可編程的著色器,因為這樣可以提供更大的靈活性。固定函數(shù)著色器完全用一種名為?ShaderLab?的語言編寫,此語言類似于 Microsoft 的 .FX 文件或 NVIDIA 的 CgFX。在內(nèi)部,所有固定函數(shù)著色器在導(dǎo)入著色器時轉(zhuǎn)換為頂點和片元著色器。
ShaderLab
無論您選擇哪種類型的著色器,實際的著色器代碼始終包含在用于組織著色器結(jié)構(gòu)的 ShaderLab 中。如下所示:
Shader "MyShader" {
?Properties {
? ?_MyTexture ("My Texture", 2D) = "white" { }
? ?// 此處還放置顏色或矢量等其他屬性
?}
?SubShader {
? ?// 此處放置
? ?// - 表面著色器或
? ?// - 頂點和片元著色器或
? ?// - 固定函數(shù)著色器 ? ?
?}
?SubShader{
? ?// 此處放置上述 SubShader 更簡單的 "fallback" 版本
? ?// 此版本能夠在較舊的顯卡上運行
?}
}
我們建議您首先閱讀?ShaderLab 參考中的 ShaderLab 語法的一些基本概念,然后繼續(xù)學(xué)習下面列出的教程。
這些教程包含了大量不同類型著色器的示例。Unity 的后期處理效果允許您使用著色器創(chuàng)建許多有趣的效果。
請繼續(xù)閱讀著色器的介紹,并查看著色器參考!