游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4670|回复: 14

一个人物待机动画占用了我5M的内存,是否正常?

[复制链接]

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2010-11-14 21:05:00 | 显示全部楼层 |阅读模式
这个待机图每帧128×126,共8个方向,每个方向10帧,共80帧,大小约4.4M,把这80帧全部加载到程序中,占用了5M左右的内存,正常么?我感觉有些多了,有没有什么办法可以降低内存占用?

因为,比如像回合制的战斗界面,假如屏幕上有20个人,对方10个,己方10个,光是所有人的待机就占了20*5M==100M,如果
再算上每个人的各种技能动画,甚至是奔跑动画,那就少说也200M了,然而程序中还有GUI之类的很多东西也要占内存,这样下来整个游戏消耗的内存就让人无法接受了……

0

主题

275

帖子

676

积分

高级会员

Rank: 4

积分
676
发表于 2010-11-15 10:53:00 | 显示全部楼层

Re:一个人物待机动画占用了我5M的内存,是否正常?

很正常
也就是2D的?D形太大
才??D??D??

16

主题

154

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2010-11-15 18:25:00 | 显示全部楼层

Re:一个人物待机动画占用了我5M的内存,是否正常?

你没必要都加载到内存吧.

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-11-15 20:52:00 | 显示全部楼层

Re: Re:一个人物待机动画占用了我5M的内存,是否正常?

LoveDelphi: Re:一个人物待机动画占用了我5M的内存,是否正常?

你没必要都加载到内存吧.


那你看回合制的战斗界面,人物的待机动画不能不加载吧?技能动画不能不加载吧?假如有20人,光待机就会有100M了,加上所有人物所有可能放出的技能动画,那少说也150M,加上GUI、DirectX、字体对象,游戏数据,还有其他程序占用的内存,那内存有多大可想而知。

3

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2010-11-15 20:54:00 | 显示全部楼层

Re:一个人物待机动画占用了我5M的内存,是否正常?

你是用未压缩的rgba8888吗?可以用rgba4444或5551,再用DXT5压缩,应该能大幅减少体积。

16

主题

154

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2010-11-15 22:31:00 | 显示全部楼层

Re:一个人物待机动画占用了我5M的内存,是否正常?

你的图好像都是固定的大小的,假如说黑色是透明色,我的做法是把人物最小矩形之外的黑色都切掉.这也可以减小图的大小.然后资源的使用上,比方说人物站立方向是0,那么只加载0方向的那些资源,其他方向用的时候在加载就可以了.

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-11-15 23:47:00 | 显示全部楼层

Re: Re:一个人物待机动画占用了我5M的内存,是否正常?

pspspsps: Re:一个人物待机动画占用了我5M的内存,是否正常?

你是用未压缩的rgba8888吗?可以用rgba4444或5551,再用DXT5压缩,应该能大幅减少体积。


压缩图像不用解压就可以在内存中渲染?这我还没听说过。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

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

Re: Re:一个人物待机动画占用了我5M的内存,是否正常?

LoveDelphi: Re:一个人物待机动画占用了我5M的内存,是否正常?

你的图好像都是固定的大小的,假如说黑色是透明色,我的做法是把人物最小矩形之外的黑色都切掉.这也可以减小图...


1:“你的图好像都是固定的大小的,假如说黑色是透明色,我的做法是把人物最小矩形之外的黑色都切掉.这也可以减小图的大小.”
【reply】
①好像现在的游戏很少是直接用关键色做透明色的吧?很多都是半透明色,比如人物的影子。
①我问的不是如何减少磁盘空间占用,而是如何减少内存占用

2:“然后资源的使用上,比方说人物站立方向是0,那么只加载0方向的那些资源,其他方向用的时候在加载就可以了.”
【reply】
如果不使用多线程,是绝不可能用主线程来动态创建纹理的,因为这严重影响游戏的帧率。创建一个320×240的纹理就要耗掉10毫秒的速度,若是10帧的动画纹理,那就起码也要用60多毫秒,而30FPS的程序,60多毫秒就相当于两帧。
而若使用多线程,则同步方面有些麻烦,而且影响程序的模块化,抽象化。

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2010-11-16 01:43:00 | 显示全部楼层

Re:一个人物待机动画占用了我5M的内存,是否正常?

为了便于GPU处理,硬件会对纹理的尺寸会有一定的要求。
一般情况下,会要求纹理是2的n次幂。
就算现在的新型GPU,对纹理尺寸的要求也没达到随心所欲的程度。
因为这样不方便,所以一些应用层的库,会帮用户把纹理补到合适的尺寸
(驱动也可能做这种事,但我没法确切地告诉你哪些驱动是怎么做的)。
从你给的数据上看,很显然你的128×126的图,到了内存里,被补成了128×128的尺寸。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-11-16 08:15:00 | 显示全部楼层

Re: Re:一个人物待机动画占用了我5M的内存,是否正常?

funcman: Re:一个人物待机动画占用了我5M的内存,是否正常?

为了便于GPU处理,硬件会对纹理的尺寸会有一定的要求。
一般情况下,会要求纹理是2的n次幂。
就算现在的新...


【reply】
1:我没有让DX进行纹理过滤处理,我是这样创建的:
                hr = D3DXCreateTextureFromFileEx(m_pD3DDevice, "Media\\纯阳子待机\\Actor1.png",
                        info.Width,
                        info.Height,
                        D3DFMT_FROM_FILE,
                        0,
                        D3DFMT_A8R8G8B8,
                        D3DPOOL_MANAGED,
                        D3DX_FILTER_NONE,
                        D3DX_DEFAULT,
                        0,
                        NULL,
                        NULL,
                        &m_pTexture);

  另外,我也问过不少人,他们很多人也说现在大多数显卡都支持任意尺寸纹理,只是有些很旧的显卡支持不了。
然而我仍不清楚,我只知道我的笔记本显卡配置很低,玩不了像龙这样的3D游戏(FPS1~5帧)。

2:我单独建了一个测试程序,测试创建80个128×126的纹理,结果内存占用16 040K ~ 16 100K之间
然后测试创建80个128×128的纹理,结果内存占用16 140K ~ 16 190K之间
当然,两个纹理仅尺寸不同,像素全部相同。
这是我反反复复测试的结果。
从测试结果来看,你所说的我无法信服。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-30 11:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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