Unity3D Shader編程 ?原文鏈接:
http://blog.csdn.net/zhmxy555/article/category/2681301
VS Shader插件
今天裝了一個(gè)可以在VS中寫Shader的插件抛虏,有高亮和自動(dòng)提示的功能。唯一不好的就是不能自動(dòng)格式化膏萧,強(qiáng)迫癥患者表示很傷……
下載地址:
http://blog.shuiguzi.com/2014/10/28/Release/index.html
子著色器(SubShader)詳解
在第三篇文章里,對(duì)子著色器的寫法做了很詳細(xì)的講解,用文字的方式列出來結(jié)構(gòu)不明顯,所以我做了一個(gè)結(jié)構(gòu)圖,如下。其中可能有一些不清晰或錯(cuò)的地方,后面可能會(huì)更新购岗。如果大家想更詳細(xì)的了解一下,可以參考上述博客的《【Unity3D Shader編程】之三 光之城堡篇:子著色器门粪、通道與標(biāo)簽的寫法 & 紋理混合》喊积。
第四篇文章概念性的內(nèi)容比較少,就先整理第四騙的概念玄妈,這兩篇的實(shí)戰(zhàn)練習(xí)留到下一篇寫乾吻。
剔除 (Culling) 與深度測試 (Depth Testing)
1.剔除
不繪制被擋住或視角以外的我們看不到的物體。
2.深度測試
深度測試可以簡化復(fù)雜場景的繪制拟蜻,確保只有場景內(nèi)的對(duì)象的最靠近的表面參與繪制绎签。
3.相關(guān)語句
Cull?Back | Front | Off
用于控制幾何體的哪一面會(huì)被剔除(也就是不被繪制) 。其中:
Back:不繪制背離觀察者的幾何面
Front:不繪制面向觀察者的幾何面瞭郑,用于由內(nèi)自外的旋轉(zhuǎn)對(duì)象
Off:顯示所有面辜御。用于特殊效果鸭你。
ZWrite ?On | Off
此語句用于控制是否將來之對(duì)象的像素寫入深度緩沖(默認(rèn)開啟)屈张,如果需要繪制純色物體,便將此項(xiàng)打開袱巨。如果要繪制半透明效果阁谆,關(guān)閉深度緩沖。
ZTest ?Less | Greater | LEqual | GEqual | Equal | NotEqual | Always
此語句用于控制深度測試如何執(zhí)行愉老。缺省值是LEqual (繪制和存在的對(duì)象一致或是在其中的對(duì)象场绿;隱藏其背后的對(duì)象)。
Offset ?Factor ,Units
此語句用兩個(gè)參數(shù)(Facto和Units)來定義深度偏移嫉入。Factor參數(shù)表示 Z縮放的最大斜率的值焰盗。Units參數(shù)表示可分辨的最小深度緩沖區(qū)的值璧尸。
于是,我們就可以強(qiáng)制使位于同一位置上的兩個(gè)集合體中的一個(gè)幾何體繪制在另一個(gè)的上層熬拒。例如偏移量Offset 設(shè)為0, -1(即Factor=0, Units=-1)的值使得靠近攝像機(jī)的幾何體忽略幾何體的斜率爷光,而偏移量為-1,-1(即Factor =-1, Units=-1)時(shí),則會(huì)讓幾何體偏移一個(gè)微小的角度澎粟,讓觀察使看起來更近些蛀序。
Alpha測試(Alpha testing)
在最終渲染出的顏色被計(jì)算出來之后,可選擇通過將顏色的透明度值和一個(gè)固定值比較活烙。如果比較的結(jié)果失敗徐裸,像素將不會(huì)被寫到顯示輸出中。評(píng)論里有人說這段話說的不對(duì)啸盏,不是和透明度比較重贺,而是和深度比較,就像下面那句話一樣回懦。這里讀的時(shí)候確實(shí)感到有點(diǎn)矛盾檬姥,但是目前接觸到的資料比較少,等以后有了更深入的理解再進(jìn)行修正粉怕。
Alpha測試在渲染凹形物體的透明部分時(shí)非常有用健民。顯卡上有著每個(gè)像素寫到屏幕上的深度記錄。如果一個(gè)新的像素比原來的像素的深度深贫贝,那么新的像素就不會(huì)被寫到屏幕中秉犹。
AlphaTest?Off
此語句用于渲染所有像素(缺省)稚晚。
AlphaTest ?comparison AlphaValue
comparison 取值同上面的 ZTest崇堵。
基本霧效(Fog)
霧化是通過混合已生成的像素的顏色和基于到鏡頭的距離來確定的最終的顏色來完成的。霧化不會(huì)改變已經(jīng)混合的像素的透明度值客燕,只是改變RGB值鸳劳。
Fog ?{?FogCommands?}
此語句用于設(shè)定霧命令的內(nèi)容,具體的填在大括號(hào)之中的內(nèi)容見下面的語句也搓。
Mode ?Off | Global | Linear | Exp | Exp2
此語句用于定義霧模式赏廓。缺省是全局的,依據(jù)霧在渲染設(shè)定中是否打開確定可從無變化到平方值傍妒。
Color ?ColorValue
此語句用于設(shè)定霧的顏色值幔摸。
Density ?FloatValue
此語句以指數(shù)的方式設(shè)定霧的密度。
Range ?FloatValue, FloatValue
此語句用于為linear類型的霧設(shè)定遠(yuǎn)近距離值颤练。