MME編寫入門(三)一個最簡單的著色
從一個最簡單的著色器入手。
第一次看的話想必會有不少的疑問。不過耐下心來細細地去拆解就明白了,如果有c語言或者c++的學習經(jīng)歷,那么會更容易許多。
一個完整的效果文件,它是由 UI配置項、轉換矩陣、結構體、頂點著色器、像素著色器、technique-pass繪制構成。其中,UI配置項可以有也可以沒有,有的目的只是為了好修改其中的一些參數(shù)。
首先是這里,定義了一個四維向量outColor,他的值為0,0,0,1,分別對應著R\G\B\A,A是透明度,這里就顯示為黑色。1,0,0,1就是紅色,其他同理。
對于向量類型,最多有四個元素,可以通過xyzw(位置向量)或rgba(顏色向量)來訪問,這兩種訪問方式是等效的,但是不能混著用。
然后是轉換矩陣,這里只用到了這個WORLDVIEWPROJECTION。
前邊的WorldViewProjMatrix可以隨便起名字,但冒號后邊的語義不可以亂寫。

然后是結構體。
結構體就是把散亂的數(shù)據(jù)整理到一起,便于管理和使用。
我們需要物體的齊次坐標。
這個特殊的冒號語法表示一個語義,冒號后面的標志符用來指定變量的用途。
POSITION標志符表明該變量表示頂點位置,另外還有諸如COLOR、NORMAL等很多表示其他意義的標志符。
語義是附加到著色器輸入或輸出的字符串,用于傳達有關參數(shù)預期使用的信息。 著色器階段之間傳遞的所有變量都需要語義。

接著,頂點著色器 從結構體中得到需要的數(shù)據(jù)。
VS_OUTPUT Out = (VS_OUTPUT)0;
這一行的作用初始化定義Out輸出。
也可以這么寫 VS_OUTPUT Out;
Out.Pos = mul(Pos,WorldViewProjMatrix);
對我們的頂點坐標和WVPMatrix相乘,完成頂點的世界觀察投影變換。
return Out;
輸出變換后的頂點信息。
接下來是像素著色器。
return outColor,在此之前我們已經(jīng)定義過顏色。
接下來的是繪制。

最后一行是我額外加上去的。完成之后,就得到了一個全黑的miku!

關于對象繪制有兩種,舞力介入P在basic.fx ver2.0中是分為兩種。
一種是セルフシャドウOFF,自陰影OFF。
一種是セルフシャドウON,自陰影ON。

自陰影就是模型的這里。
如果單純的用一次pass,而且這個pass沒有_ss,模型還開啟了本影,那么就繪制不了。

比如這里,我把_ss刪掉了。全黑miku沒有了……

有的模型存在輪廓線,可以選擇改變大小和顏色,大小為0的時候就關閉了輪廓線。
(注意,要在模型的模式下才能選擇輪廓線)

如果刪掉這一指令
technique EdgeTec < string MMDPass = "edge"; > {
}
那么輪廓線就無法正常繪制。就會變成這樣。


這么寫相當于不繪制輪廓線。
也可以這么寫。
關于MME,我還只是初學者,慢慢學習吧。