幽靈著色器

2021-07-31 12:27:22 字數 1719 閱讀 3095

如果人物模型變成鬼片中的幽靈是不是很酷,想想就很激動,下面**具體的講解,先上一張圖

對,就類似於這種效果的,**如下:

shader "custom/myghostshader"   //主紋理

_bumpmap("bump map",2d)=

"bump" {} //法線紋理

_rimcolor("rim color",color) = (0.46,0.0,1.0,0.0) //模型邊緣顏色

_rimpower("rim power",range(0.2,2.0)) =

0.5//邊緣強度放大的倍數

_brightness("brightness",range(0.0,3.0)) =

1.0//光強

}subshader

//繪製深度快取區通道

//科普下:

//首先,unity先將渲染佇列中較前的進行渲染,然後再執行zwrite,ztest

//zwrite可以取的值為:on/off,預設值為on,代表是否要將畫素的深度寫入深度快取中(同時還要看ztest是否通過)。

//ztest可以取的值為:greater/gequal/less/lequal/equal/notequal/always/never/off,預設值為lequal,

//代表通過比較深度來更改顏色快取的值。例如當取預設值的情況下,如果將要繪製的新畫素的z值小於等於深度快取中的值,

//則將用新畫素的顏色值更新深度快取中對應畫素的顏色值。需要注意的是,當ztest取值為off時,表示的是關閉深度測試,

//等價於取值為always,而不是never!always指的是直接將當前畫素顏色(不是深度)寫進顏色緩衝區中;

//而never指的是不要將當前畫素顏色寫進顏色緩衝區中,相當於消失。

// 1.當zwrite為on時,ztest通過時,該畫素的深度才能成功寫入深度快取,同時因為ztest通過了,該畫素的顏色值也會寫入顏色快取。

// 2.當zwrite為on時,ztest不通過時,該畫素的深度不能成功寫入深度快取,同時因為ztest不通過,該畫素的顏色值不會寫入顏色快取。

// 3.當zwrite為off時,ztest通過時,該畫素的深度不能成功寫入深度快取,同時因為ztest通過了,該畫素的顏色值會寫入顏色快取。

// 4.當zwrite為off時,ztest不通過時,該畫素的深度不能成功寫入深度快取,同時因為ztest不通過,該畫素的顏色值不會寫入顏色快取。

//可以看到,畫素的深度能否成功寫入深度快取,條件是zwrite為on,ztest通過;

pass

cgprogram

#pragma su***ce surf lambert alpha noambient nodirlightmap novertexlights

struct input;

sampler2d _maintex;

sampler2d _bumpmap;

float4 _rimcolor;

float _rimpower;

float _brightness;

void surf(input in,inout su***ceoutput o)

endcg

}fallback "diffuse"

}

著色器(Shader)之畫素著色器

畫素著色器實際上就是對每乙個畫素進行光柵化的處理期間,在gpu上運算的一段程式。不同與頂點著色器,畫素著色器不會以軟體的形式來模擬畫素著色器。畫素著色器實質上是取代了固定功能流水線中多重紋理的環節,而且賦予了我們訪問單個畫素以及訪問每乙個畫素紋理座標的能力 多重紋理就是我們同時啟用多層紋理,然後規定...

OpenGL ES 著色器 片斷著色器詳解

opengl es 入門 01 opengl es 入門 02 opengl es 入門 03 opengl es 入門 04 opengl es 入門 05 opengl es 入門練習 01 opengl es 入門練習 02 opengl es 入門練習 03 opengl es 入門練習 0...

頂點著色器 片段著色器

一 著色器 著色器只是一種把輸入轉化為輸出的程式。著色器也是一種非常獨立的程式,因為它們之間不能相互通訊 它們之間唯一的溝通只有通過輸入和輸出。在最簡配置下,至少都得有兩個著色器 乙個叫頂點著色器 vertex shader 它將作用於每個頂點上 另乙個叫片段著色器 fragment shader ...