colorkey,避免COLORKEY使游戏特效渲染更细腻

关于RO的文件格式,现在不能在网上找到资料的,就只有*.str(特效文件)了。没办法了,自己动手,差不多把它逆向出来了,里面涉及一些动画技术,比如关键帧,空白帧,层等东西。等完善后再把文件格式公布,到时候可以配合着写一点游戏的Animation技术。
不说废话了,切入正题。本来我以为逆向文件格式很难,分析出来后,发现使用D3D逼真地把图片渲染出来更费脑筋,今天自己试验出了一个融合技术,在图片文件没有Alpha通道的情况下,能没有锯齿地将图片渲染出来,这个技术肯定有在使用,但是网上找不到资料,所以我就分享下。
我们先来看看一个特效的某一帧:(RO里的怒雷技能)
thundercolorkey,避免COLORKEY使游戏特效渲染更细腻
再看看它都使用的某些图片:
light_bthundercolorkey,避免COLORKEY使游戏特效渲染更细腻thunder_ball_0006light_bthundercolorkey,避免COLORKEY使游戏特效渲染更细腻shockwave_dthunder_ball_0006light_bthundercolorkey,避免COLORKEY使游戏特效渲染更细腻
为了节省空间,其他图片略去。.str文件的作用就是告诉你该怎样把这些图片组合起来形成每一帧。这个不是这篇日志的重点,跳过继续。
那么,图片的黑色怎么去掉?。
如果你的第一反应是COLORKEY,那就错了,COLORKEY我觉得完全是2D时代遗留下来的,用D3D的话,完全可以用AlphaBlend达到和COLOREY一样的效果,但是前提是,你的图片要提供Alpha通道,你可以用工具转换,也可以叫美工保存Alpha通道。但是都有一个共同点:麻烦,需要很细致的抠图功底。
如果没有Alpha通道呢?那就只有COLORKEY了?我刚开始也一直这么认为,可是怎么渲染都不对,你会发现整个图片有很多锯齿,因为素材原图都很细致。
怎么可能,明明RO客户端可以很好的显示出来,我怎么不行?我百思不得其解,也Google不到任何资料。最后终于自己试验出方法。诀窍就是AlphaBlend的一个状态:
DXUTGetD3D9Device()-> SetRenderState(D3DRS_DESTBLEND,D3DBLEND_DESTALPHA);
D3DBLEND_DESTALPHA?不是D3DBLEND_INVSRCALPHA吗?。。。如果你Google,你根本找不到使用D3DBLEND_DESTALPHA状态的例子,关于AlphaBlend状态,几乎都用的D3DBLEND_INVSRCALPHA。
为什么用D3DBLEND_DESTALPHA,你会发现其实图片的黑色背景其实是比较特别的,它和背景缓冲的颜色相同。这样的话,当AlphaBlend开启时,所有黑色都被去除,而且这里的去除就直接是在缓冲区里去除了,不会有锯齿。
但是这个解决方法有一个弊端,最终像素受目标像素影响较大,比如下面2个图:
1shockwave_dthunder_ball_0006light_bthundercolorkey,避免COLORKEY使游戏特效渲染更细腻21shockwave_dthunder_ball_0006light_bthundercolorkey,避免COLORKEY使游戏特效渲染更细腻
你会看到,背景越浅,效果也越浅,但是这样也合乎情理,在越暗的地方,施放的技能也就越绚。
一个折中办法是,如果某个技能图片不是很细致,可以把这个图片设置成分红255,0,255,再使用COLORKEY来渲染这个图片,比如下图:
lexdivina_angel21shockwave_dthunder_ball_0006light_bthundercolorkey,避免COLORKEY使游戏特效渲染更细腻
这个天使貌似很痛苦,而且如果她的颜色变浅,那就看不清楚了,正好她和背景区分比较明显,对她可以用COLORKEY渲染。

OVER,又是一篇泛泛而谈的文章,希望读者参考后自己查阅详细资料效果更好,另,其实至于为什么设置D3DBLEND_DESTALPHA后融合会是那种效果,我尝试用融合方程推导,无解。有谁知道的忘告知~
最后,OpenRO进度还不错。。。现在又希望项目改名,不用RO的名字,做一个独立游戏出来。这样的话,图片素材得修改,地图也得修改。动画编辑器和地图编辑器都有,但是没有美工。有谁有兴趣的提前联系我,策划也行。。打算做出DEMO再找人的。。。
Tags:  细腻的反义词 文件无法渲染 渲染离别 特效渲染 colorkey

延伸阅读

最新评论

发表评论