游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4841|回复: 11

问一个D3D下提高渲染多边形和纹理的效率的问题,高手们

[复制链接]

7

主题

67

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2006-1-15 09:38:00 | 显示全部楼层 |阅读模式
我在用D3D做2D游戏,每帧都要贴N多的纹理,
我只用了一个VB,就4个顶点。然后每贴一个纹理,都要lock一下,然后改变顶点的XY和UV数据。

在贴tile地图的时候,有没有办法,指定N多个纹理到1个VB呢?
TILE地图的中每个tile是128*128的,
我想创建VB的时候,一次把整屏的tile的顶点全部放进一个VB中,然后,贴一个纹理上去,但是这样的前提是,所用到的tile图片,必须在一个纹理中,而且人物在地图上跑动,地图也是在不停移动的,这样就不能在初始化的时候,把tile图片,生成到一个纹理上了。难道每帧都动态创建一个纹理?那样太慢了阿~

我看了资料库里那篇分析Diablo II的文章,说Diablo II 每帧,有5000-9000个多边形。

我翻了以前的老帖子,看见有人说可以一次将所有的顶点送进一个流中,然后调用一次DrawPrimitive就行了。
我就有疑问了~这些顶点是可以一次送进一个流中,但是你贴的图片,不是在一个纹理上阿。

DrawPrimitive即使使用多纹理渲染,最好的显卡,也只能使用8-16个纹理,
那么象tile地图这样的,一屏需要用N多纹理的地图,改怎么处理呢?

循环一个个贴的话,速度也上不去阿。
如果循环一个个贴,象Diablo II这样,一帧那么多的多边形,那速度肯定就慢的象蜗牛了阿~~

请有这方面经验的高手,指点一下~

16

主题

83

帖子

103

积分

注册会员

Rank: 2

积分
103
QQ
发表于 2006-1-15 16:48:00 | 显示全部楼层

Re:问一个D3D下提高渲染多边形和纹理的效率的问题,高手

我以前以遇到过这样的问题,我是先把我的问题说一下,以及我的方法,希望对你有帮助.
我在做人物系统的时候,一个人物有8个部分.比如头,手,等.这样在换装备时切换它的MESH和TEXTURE就可以了,但后来发现这样太慢,人物要是很多就要切换很多次.所有我在每个人物第一次渲染的时候,把它的纹理融合到一个大纹理上.以后就用这个大纹理就可以了.速度就提上来了.
PS.我是参考WOW的方法实现的.具体细节要用到纹理重定位.都不是很难

7

主题

67

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2006-1-15 18:06:00 | 显示全部楼层

Re:问一个D3D下提高渲染多边形和纹理的效率的问题,高手

楼上的,这个办法我想过,但是另外顾及到纹理大小限制的问题,我在游戏中使用的纹理都是256×256的,这样很容易就把这个纹理放满了。这样自己还要在去做多个纹理的调配管理,尤其是图片量相当大的情况下。

你在游戏中用的那个大纹理尺寸有多大?

3

主题

72

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2006-1-15 19:42:00 | 显示全部楼层

Re:问一个D3D下提高渲染多边形和纹理的效率的问题,高手

楼上的一祯中纹理大概要用多少呢?
一祯中你所要画的纹理真的很多的话,那么怎么做,也都会遇到问题。
我觉得切换文理本身并没有太大消耗,应该只是交换一个指针而已。
问题的关键在于引发的操作。
渲染流水线的中断,纹理在显存和内存间的交换,以及像素填充速率的消耗。
所以,具体到你的问题要具体的看情况而定。

说Diablo II 每帧,有5000-9000个多边形。
另一方面讲他的每个三角形对应的纹理是很小的。

顺便把那个dialoo2的帖子的连接给一个,我看一眼。

7

主题

67

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2006-1-15 20:36:00 | 显示全部楼层

Re:问一个D3D下提高渲染多边形和纹理的效率的问题,高手

http://dev.gameres.com/Program/Visual/Other/Diablo2.htm
dialoo2的帖子的连接在这里

7

主题

67

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2006-1-15 20:41:00 | 显示全部楼层

Re:问一个D3D下提高渲染多边形和纹理的效率的问题,高手

我现在的做法是只用一个VB,每次绘制的时候都 LOCK一下,然后把纹理帖上去。
总感觉效率比较低,我的地表tile的大小是128×128的,屏幕大小是1024*768,这样光
地表就48个,然后还有地面上的object、人物、NPC、魔法效果等等,尤其是object最多~~

3

主题

72

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2006-1-16 09:27:00 | 显示全部楼层

Re:问一个D3D下提高渲染多边形和纹理的效率的问题,高手

地表的tile 或者可以排一下texture顺序,然后开的大点的vb,一次的画上去。
其它的东西还要看具体的情况吧。

所谓的纹理融合,和其他的什么,
感觉最重要的就是尽量不要打断流水线。
算是个基本的原则吧。

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
发表于 2006-1-16 12:14:00 | 显示全部楼层

Re: Re:问一个D3D下提高渲染多边形和纹理的效率的问题,

纹理避免平凡切换~
降低色彩模式~
降低particle count~
优化shade运用~
优化你的texture filter~
用多线程render~

7

主题

67

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2006-1-16 14:37:00 | 显示全部楼层

Re:问一个D3D下提高渲染多边形和纹理的效率的问题,高手

to 冰峰传奇:
能详细说说你是如何使用大点的VB,一次渲染的吗?
我也想过这个办法,但是对于2D游戏来说,图片量太大了。光tile就有上万张128*128的图片,
把所有tile放在一个纹理里面不现实阿~~动态生成纹理又太慢。而且还要顾及纹理大小的限制(不超过256*256)。

to PassByYou:
“纹理避免平凡切换~”, 这个对2D游戏来说也不现实阿。
2D主要就是靠帖图,每次帖图都要切换纹理的阿~~

3

主题

72

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2006-1-17 09:29:00 | 显示全部楼层

Re:问一个D3D下提高渲染多边形和纹理的效率的问题,高手

我觉得对于地表,重复的部分比较多,而且层数比较靠下,所以可以先开个vb,然后按照texture的顺序,填充,绘制。

其它的么。。。就比较困难了,开个大的vb,顶多就节省个lock,unlock的时间吧。
可以试下。

不过你的tile纹理也太大了吧?128*128
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 06:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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