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