1. 程式人生 > >WPF/Silverlight深度解決方案:(九)HLSL自定義渲染特效之完美攻略(下)

WPF/Silverlight深度解決方案:(九)HLSL自定義渲染特效之完美攻略(下)

source gpu () get edi play 完美 黃色 做的

原文:WPF/Silverlight深度解決方案:(九)HLSL自定義渲染特效之完美攻略(下)

本想只用兩節來完成關於HLSL自定義渲染相關知識的講解,鑒於最近非常的多的朋友對此相當感興趣,想知道最多關於這些特效在實際開發中該如何使用及性能相關問題。那麽本節我將以一個比較完整的遊戲場景為例,向大家講解HLSL自定義渲染特效的綜合應用。

布置一個遊戲場景首先要做的是準備素材,這些素材包括地圖背景、天氣背景、主角、對象及其他的等物體:

技術分享圖片

素材有了,接下來我們需要定義如何渲染,首當其沖的當然是去背,因為很多素材都是純黑色背景,要在實際遊戲中使用則必須去掉黑色背景色,那麽本節將用到的去背Shader

是我在第六節的基礎上增加了一個全局參數新的Shader,這樣可以根據實際黑色深度進行定量去背(關於去背:為什麽很多遊戲那麽麻煩要用黑色背景的jpg圖片+渲染,而不是直接使用透明背景的png圖片?這涉及到圖片格式占用的空間問題,同尺寸的jpg圖片比png圖片小非常多,並且在傳統的網絡遊戲中,顯卡GPU就是拿來渲染用的,不用也白不用;只是目前的Silverlight版本在處理渲染上大量使用的是CPU而非GPU,有些遺憾)。

技術分享圖片

本場景中的天氣是雷電天氣,烏雲中將不時的釋放出閃電,那麽我們就需要為烏雲添加閃光渲染,並且該閃光是不定時的隨機連續兩次閃爍,這樣設定將更加逼真:

//烏雲

Carrier.Children.Add(new

Image() {

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

.FromSeconds(random.Next(8)) : TimeSpan.FromSeconds(0);

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

技術分享圖片

不知道大家是否能夠通過本節的案例講解對SilverlightShader渲染有更深刻的認識?不管怎樣,我還是想說那句話:非常的期待Silverlight4,我堅信Silverlight的未來會更好更強大!

技術分享圖片 作者:深藍色右手
出處:http://alamiye010.cnblogs.com/
本系列目錄及源碼下載:點擊進入(歡迎加入WPF/Silverlight小組 WPF/Silverlight博客團隊)
本文版權歸作者和博客園共有,歡迎轉載。但未經作者同意必須保留此段聲明,且在文章頁面顯著位置給出原文連接,否則保留追究法律責任的權利。

WPF/Silverlight深度解決方案:(九)HLSL自定義渲染特效之完美攻略(下)