游戏开发论坛

 找回密码
 立即注册
搜索
查看: 12818|回复: 31

2d回合制游戏中的人物动画应该用什么格式?

[复制链接]

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2010-11-18 20:30:00 | 显示全部楼层 |阅读模式
我测试了一下,dx9创建100个纹理(尺寸320×240),如果格式是BMP或DDS需要300毫秒左右,如果是JPG,则要700毫秒左右,而如果是PNG,则需要高达1800多毫秒。

那对于2D回合制游戏,写实版的,如大话西游2这类。游戏中会用到大量的人物待机、行走、奔跑动画,请问这些图像用什么格式比较好??
我想,如果是考虑到磁盘空间,那就是PNG了,省空间,但其创建纹理消耗的CPU太高了。但如果不用PNG,用DDS的话,那就很占磁盘空间,比如一个128×128的80帧行走动画,其DDS格式就高达4M左右。如果是100个人物,那就是400M……
(你还不能压缩,你一压缩,这种带半透明色的图像就会变得很模糊)。

一般用哪个格式?
或者不仅仅这些,还需要自己写解压缩算法?

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2010-11-19 03:08:00 | 显示全部楼层

Re:2d回合制游戏中的人物动画应该用什么格式?

......................
dds是硬件直接解压的
png文件大小!=在内存里的大小,这种格式加载以后是要解压成非压缩32位rgba格式的,绝对比dxt的dds大
dxt1是6:1的压缩,每个像素只要4bit, dxt3和dxt5都是是4:1的压缩,每像素8bit
另外dds文件大小是固定的,dxt5每个4*4的block 16byte,一张128*128的图片就16k多一点jpg
png这些不能硬解的格式,解压后一张就是128*128*4=65536k

你说的创建纹理是什么概念,你用什么函数测试的?嫌慢可以不用d3dx,自己写个loader加载dds文件

另外好多人都建议过lz不要用这种非2次幂的大小,你还真是执着......

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-11-19 09:30:00 | 显示全部楼层

Re: Re:2d回合制游戏中的人物动画应该用什么格式?

clayman: Re:2d回合制游戏中的人物动画应该用什么格式?

......................
dds是硬件直接解压的
png文件大小!=在内存里的大小,这种格式加载以后是要解压成...


那您的意思就是应该使用dds了?
我也问过别人能不能自己加载,而不用D3DXCreateTextureFromFileEx(),但是他们都说自己加载的速度不一定就比D3DXCreateTextureFromFileEx()来的快。
我把一个半透明色的图片转成dxt1和dxt5格式的,结果都变模糊了。是不是我操作有问题?还是尺寸问题?(320×240转dxt1就不会模糊)

另外使用非2的次方尺寸的图像实在是无可奈何,因为从网易游戏里提取出来的所有场景宽都是80的次幂,高都是60的次幂,而且很多分割块都是用320×240的尺寸。
而且,他的所有角色动画几乎全都不是2的次幂,如果我全部调整成2的次幂,文件大小将会急剧膨胀。
这个我也问过很多人,他们说现在大多数硬件都支持任意尺寸的纹理,所以这个问题我才暂时没管他,不过以后肯定会做出更切实际的选择。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2010-11-19 11:48:00 | 显示全部楼层

Re:2d回合制游戏中的人物动画应该用什么格式?

1, 硬件根本就不认识png,jpg,dds这些“文件”格式,对d3d,硬件只认D3DFORMAT或者DXGI中定义的格式,而这些格式里,DTX*/BS*压缩率是最高的“像素”格式

2.加载dds非常简单,sdk里就有示例代码DDSWithoutD3DX,看ddstextureloader.cpp就够了。dds文件格式本身也很简单,128或者148(?)byte的文件头,然后就是纹理数据,打开一个文件流读出纹理,然后
device.CreateTexture()
lock texture()
file data to texture
这种方法还方便复用texture,避免频繁创建,销毁纹理对象

3. dxt1只有1bit alpha,用来表示透明或者不透明,带过渡半透明的用dx3或者5。 另外建议你好好看看dx文档,dxt压缩/解压算法都是基于4*4的block,所以对于不带mipmap的sprite纹理来说,长宽必须是4的n倍。
你怎么对比的模糊?半透明的图片转dxt1,alpha通道都没了....


4. 没玩过网易的游戏,你的资源是用pix或者其他软件在运行时抓出来的,还是解析资源包??? 如果是资源包里解出来的格式,并不一定等于最终在内存里的格式和大小,很多引擎都会在加载资源的时候压缩或者合成sprite sheet。 另外对于sprite sheet,要保证是2的n次幂大小,通常只需要补上很小的一部分就可以了,不会造成多少内存压力

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-11-19 14:09:00 | 显示全部楼层

Re: Re:2d回合制游戏中的人物动画应该用什么格式?

clayman: Re:2d回合制游戏中的人物动画应该用什么格式?

1, 硬件根本就不认识png,jpg,dds这些“文件”格式,对d3d,硬件只认D3DFORMAT或者DXGI中定义的格式,而这...


1:那您的意思是建议自己用CreateTexture()读取纹理,效率更好些?
2:SDK里的DDSWithoutD3DX示例我有看过,但是他的CreateTextureFromDDS()函数用到了DDraw,让我很疑惑,也很不知所措。最后就是看不下来了。
3:带半透明的图片转成dxt5的确是变模糊了。除非我把尺寸调整成2的次幂才不会模糊。
4:网易的素材,用的是别人写的提取工具提取的。尺寸是不会有问题,那他可能就是在加载的时候对图片尺寸做了调整。我是没这个技术,所以,可能姑且就用2的次幂了。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2010-11-19 19:34:00 | 显示全部楼层

Re:2d回合制游戏中的人物动画应该用什么格式?

1.d3dx内部也用的CreateTexture(),自己创建的话,灵活性更好
2.你看的什么版本示例?早期dds文件定义在ddraw下,新版早就不用ddraw,只要包含dds.h就行,而且这个文件也只是定义了2个dds文件头结构和枚举,没什么高深的
3.dxt1,2,3 RGB颜色的通道编码都是一样的,不可能dx1比dx5好。dxt是有损压缩,但也不会太明显的图片模糊

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-11-19 19:58:00 | 显示全部楼层

Re: Re:2d回合制游戏中的人物动画应该用什么格式?

clayman: Re:2d回合制游戏中的人物动画应该用什么格式?

1.d3dx内部也用的CreateTexture(),自己创建的话,灵活性更好
2.你看的什么版本示例?早期dds文件定义在ddr...


1:我的这个示例是Microsoft DirectX SDK (March 2009)里面的,应该是最新版的。里面有个DDSTextureLoader.h文件,开头就是包含了#include <ddraw.h>,然后就是使用到了DDSURFACEDESC2_32BIT结构,就是这个结构让我不知所措
2:带有半透明的图片,转DXT5,怎么转都会模糊,而且不是一般的模糊,我现在把尺寸改成2的次幂才不模糊,这个您试一下就知道了,我不会说错的。

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
发表于 2010-11-19 20:55:00 | 显示全部楼层

Re:2d回合制游戏中的人物动画应该用什么格式?

这位老兄真的比驴还倔!

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-11-19 21:41:00 | 显示全部楼层

Re: Re:2d回合制游戏中的人物动画应该用什么格式?

游戏阿家: Re:2d回合制游戏中的人物动画应该用什么格式?

这位老兄真的比驴还倔!


多谢前辈的提醒,您和卢杭威宇都是我所景仰的。能有前辈的教诲,实乃三生有幸。我以为这个论坛真的荒芜了。
我深知人性这个东西应该如何的认知、发展和调度,我倒不在乎我获得了什么,而在乎获得的过程。
如同一个桃子,同样是吃掉,有的人一口就吞掉了,有的人则需要好几口。然而这些过程皆无分别可言,只是每个人所期望不一,这些取决于他的意念了。
待我做出决定之时,必先内自省而后定论。
“孟子见齐宣王曰:"...左右皆曰贤,未可也;诸大夫皆曰贤,未可也;国人皆曰贤,然后察之;见贤焉,然后用之...."”

PS:我希望我所说的不是一种清谈虚无,而是一种感悟,一种虔诚,一种信仰……

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
发表于 2010-11-21 10:05:00 | 显示全部楼层

Re: 2d回合制游戏中的人物动画应该用什么格式?

人家Clayman都说的这么清楚了,你还是执迷不悟!我写了个程序对比DXT压缩和原图,你自己看一看,最左边的是原图,最右边的是DXT1原缩过的图,中间的图是两图之差乘以16后的结果.注意我不是叫你用DXT,只是希望你真正搞明白DXT是怎么回事再去选择用不用,而不是改几个API参数"试验".
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-29 14:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表