您的位置:首页 > 理论基础 > 计算机网络

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

2009-10-03 15:14 495 查看
本想只用两节来完成关于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:

不知道大家是否能够通过本节的案例讲解对Silverlight的Shader渲染有更深刻的认识?不管怎样,我还是想说那句话:非常的期待Silverlight4,我坚信Silverlight的未来会更好更强大!

作者:深蓝色右手
出处:http://blog.csdn.net/alamiye010/
本系列目录及源码下载:点击进入
本文版权归作者和CSDN共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面显著位置给出原文连接,否则保留追究法律责任的权利。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐