WPF/Silverlight深度解決方案:(九)HLSL自定義渲染特效之完美攻略(下)
本想只用兩節來完成關於HLSL自定義渲染相關知識的講解,鑒於最近非常的多的朋友對此相當感興趣,想知道最多關於這些特效在實際開發中該如何使用及性能相關問題。那麽本節我將以一個比較完整的遊戲場景為例,向大家講解HLSL自定義渲染特效的綜合應用。
布置一個遊戲場景首先要做的是準備素材,這些素材包括地圖背景、天氣背景、主角、對象及其他的等物體:
素材有了,接下來我們需要定義如何渲染,首當其沖的當然是去背,因為很多素材都是純黑色背景,要在實際遊戲中使用則必須去掉黑色背景色,那麽本節將用到的去背Shader
本場景中的天氣是雷電天氣,烏雲中將不時的釋放出閃電,那麽我們就需要為烏雲添加閃光渲染,並且該閃光是不定時的隨機連續兩次閃爍,這樣設定將更加逼真:
//烏雲
Carrier.Children.Add(new
Source = Super.GetImage("Clouds", "png"),
Effect = lightStreak,
});
BeginShaderAnimation(lightStreak, 0, 1, 0.1, "Attenuation");
int count;
private void storyboard_Completed(object sender, EventArgs e) {
count += 1;
storyboard.BeginTime = count % 2 == 0 ? TimeSpan
storyboard.Begin();
}
最後我們來實現主角的多重渲染(級聯渲染)。
所謂多重渲染即多個渲染用在同一個對象上。例如網絡遊戲中,玩家的武器是發光的,玩家的背景是去背的,同時中毒、冰凍等狀態時還會被渲染成某種單色等。
實現多重渲染的前提是必須將對象分解成多個部分,局部渲染後再整體渲染。那麽本節我將對主角進行色相變化渲染及整體去背渲染,主要實現代碼如下:
MonochromeShader = new PixelShader() {
UriSource = Super.GetUri("Monochrome.ps")
};
Monochrome monochrome = new Monochrome(MonochromeShader);
//精靈
colorKeyAlpha = new ColorKeyAlpha(colorKeyAlphaShader) {
Value = 0.01,
};
spirit = new Spirit() {
Start = 0,
End = 3,
Direction = 3,
BodyWidth = 65,
BodyHeight = 94,
BodyFileName = "Player",
BodyFileType = "png",
Effect = colorKeyAlpha
};
spirit.Body.Effect = monochrome;
BeginShaderAnimation1(monochrome, 0, 255, 2, "FilterARGBcolor");
上面代碼的黃色部分即實現了主角的雙重渲染:
嘿嘿~整個場景設定完成,最後為了達到真實的遊戲場景模擬,我還增加了主角移動等邏輯,最終的在線測試Demo:
不知道大家是否能夠通過本節的案例講解對Silverlight的Shader渲染有更深刻的認識?不管怎樣,我還是想說那句話:非常的期待Silverlight4,我堅信Silverlight的未來會更好更強大!
作者:深藍色右手出處:http://alamiye010.cnblogs.com/
本系列目錄及源碼下載:點擊進入(歡迎加入WPF/Silverlight小組 WPF/Silverlight博客團隊)
本文版權歸作者和博客園共有,歡迎轉載。但未經作者同意必須保留此段聲明,且在文章頁面顯著位置給出原文連接,否則保留追究法律責任的權利。
WPF/Silverlight深度解決方案:(九)HLSL自定義渲染特效之完美攻略(下)