嘗試入門Shader
本文僅為邊學(xué)邊記錄的流水賬。
想優(yōu)先驗(yàn)證一下自己的想法的可行性,能不能在Unity中自行繪制一些數(shù)據(jù)。
大概是要用到Shader,找到《Unity Shader 入門精要》,里面應(yīng)該會(huì)有我想要的東西。
快速刷到3.1章,就可以上手嘗試了。
在Unity中我們需要配合使用材質(zhì)(Material)和Unity Shader才能達(dá)到需要的效果。
一個(gè)最常見的流程是:
(1)創(chuàng)建一個(gè)材質(zhì);
(2)創(chuàng)建一個(gè)Unity Shader,并把它賦給上一步中創(chuàng)建的材質(zhì);
(3)把材質(zhì)賦給要渲染的對象;
(4)在材質(zhì)面板中調(diào)整Unity Shader的屬性,以得到滿意的效果。
跟著1234走一遍。
創(chuàng)建shader的時(shí)候有4個(gè)模版,分別表示:
Standard Surface Shader會(huì)產(chǎn)生一個(gè)包含了標(biāo)準(zhǔn)光照模型的表面著色器模板,
Unlit Shader則會(huì)產(chǎn)生一個(gè)不包含光照(但包含霧效)的基本的頂點(diǎn)/片元著色器,
Image Effect Shader則為我們實(shí)現(xiàn)各種屏幕后處理效果提供了一個(gè)基本模板。
Compute Shader會(huì)產(chǎn)生一種特殊的Shader文件,這類Shader旨在利用GPU的并行性來進(jìn)行一些與常規(guī)渲染流水線無關(guān)的計(jì)算。
Unity Shader是Unity為開發(fā)者提供的高層級(jí)的渲染抽象層。ShaderLab是Unity提供的編寫Unity Shader的一種說明性語言。
一個(gè)典型的ShaderLab語義塊如下

- 表面著色器寫在SubShader里面,是對頂點(diǎn)/片元著色器的抽象,并處理了光照細(xì)節(jié)。

- 頂點(diǎn)/片元著色器是寫在Pass里面的,更復(fù)雜也更靈活

頂點(diǎn)/片元著色器的代碼也需要定義在CGPROGRAM和ENDCG之間,也是使用CG/HLSL編寫的
可以使用GLSL來寫嗎?
當(dāng)然可以。這意味著你可以發(fā)布的目標(biāo)平臺(tái)就只有Mac OS X、OpenGL ES 2.0或者Linux,而對于PC、Xbox 360這樣的僅支持DirectX的平臺(tái)來說,你就放棄它們了。
你可以怎么寫呢?
和CG/HLSL需要嵌套在CGPROGRAM和ENDCG之間類似,GLSL的代碼需要嵌套在GLSLPROGRAM和ENDGLSL之間。