游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5089|回复: 10

急求基于OpenGL的引擎优化方法

[复制链接]

14

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
发表于 2006-1-28 01:05:00 | 显示全部楼层 |阅读模式
小弟是OpenGL编程新手,自行设计的游戏引擎,100*100的空间中才显示100多个1000面以上的模型(每个模型用512*512 *32的帖图两张)FPS就跌到60 ~ 70了,最低值竟然低到了60FPS以下!理论值是能显示1000个这样的模型也没什么大问题的啊,所以来请较下各位达人应该如何优化场景。先谢谢了。

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
发表于 2006-1-31 19:26:00 | 显示全部楼层

Re:急求基于OpenGL的引擎优化方法

100*1000=100000 mesh,10万mesh同屏显完的话~太高了~费CPU,费显卡

纹理传递方式,是内存与显卡的块方式吗?512*512*32的tex算下来大概有500kb左右,100*500,=50000kb,5*2GB体积,市面的A+N卡你肯定是用不上的,你用的什么卡?跑60fps,汗。。

model有运动吗?

scene的优化~说起来很容易,其实要求很专业~一般来说,可以从以下入手~texture shader,texture filter,static model texture,animated model frame,mesh,texture engine,顺带再考虑一下你的引擎的OOP结构~

14

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
 楼主| 发表于 2006-1-31 23:35:00 | 显示全部楼层

Re: Re:急求基于OpenGL的引擎优化方法

PassByYou: Re:急求基于OpenGL的引擎优化方法

100*1000=100000 mesh,10万mesh同屏显完的话~太高了~费CPU,费显卡

纹理传递方式,是内存与显卡的块方式...


我的是杂牌的GeforceFX 5200 ,128M 128 bit,双剑的。不过一堆1000面的模型而已,因为是根据游戏定制的引擎,所以没什么大碍的话应该还吃得住。也没办法啊,美工没有中用的,建一个人物模型就得2000面至5000面。纹理画得还超垃圾。。。

模型可以运动,不过现在的运动方案使用起来还有点繁锁。 [em7]有时间还得重新设计一套方案。。。外加一大堆相关工具。。。一想到这个就旋晕中。。。

能否简单的讲一下你说的优化实现原理?懒得去查资料,还是根据原理自设计实现算法来得快。顺带问一下:OpenGL默认情况下是不是不显背面的啊?怎么有时还能看到背面呢?.

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
发表于 2006-2-1 09:38:00 | 显示全部楼层

Re:急求基于OpenGL的引擎优化方法

我说说我的方法,我主要是针对引擎结构的优化,~很多小纹理我都用算法拼接成了一个几十兆的巨纹理~然后load到显存~~模型全贴uvw坐标~这样速度会提高很多~不过这样不只能针对静态的scene render~如果是你做的引擎是连续世界的话~那这种方法就不行了~~主要显存不够用~

另外就是代码优化了~代码优化也是最烦的~~涉及到很多你的引擎的基础构架~script engine,sys api,model database engine,map database,很多很多~~以前因为某些原因~我在优化引擎时~几乎重写了一个整个的驱动引擎~~几万行~汗~

代码优化上~我的做法是,只要数据块小于10M,比如那些stream,list之类~统统往内存放~然后尽可能多用martix结构来处理类似链表filter的那些高频率循环~虽然matrix很消耗内存,一个2位链表要消耗64KB的地址空间,一个4位链就要32M才行~但这样会省很多的cpu~然后把这些cpu用在graphic上~

总之优化是很麻烦的~~先优化一下图形的存放/传递过程~~然后再优化那些高频率使用的函数~最后再优化数据~

你说的是图型双面吗?一个正面和一个反面?修改mesh参数,你用3d编辑时把纹理设置成双面,然后保存,然后它的mesh会多一个反面的出来


14

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
 楼主| 发表于 2006-2-1 13:01:00 | 显示全部楼层

Re: Re:急求基于OpenGL的引擎优化方法

PassByYou: Re:急求基于OpenGL的引擎优化方法

我说说我的方法,我主要是针对引擎结构的优化,~很多小纹理我都用算法拼接成了一个几十兆的巨纹理~然后load...


我的引擎用的是构件库来操作,资源按树形关系存放。将所有现行使用的资源加载至组件库当中备用,组件库管理类即时演算出同类资源并自动合并以节约空间。其余资源与硬盘文件一一对应存放。用时即时加载。

引擎共分三层,最顶层为用户层。最低层为系统层。中间为接口层。用户仅能通过接口层中的接口类与系统层打交道。所以优化时不是很麻烦, [em2]。

因为主要做的是动作类游戏,所以FPS很关键。又由于人手不足,所以引擎不是很复杂。

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-2-1 18:27:00 | 显示全部楼层

Re:急求基于OpenGL的引擎优化方法

3D图像引擎最主要的性能优化一般都在可见性判别和渲染队列管理上面。
可见性判别就是一个非常深入的题目,首先要划分为静态场景和动态对象。针对不同的场景类型有不同的优化方法。室内场景最常用的的就是BSP(quake3就用这个技术),或者portol。室外场景有LOD方法,grid方法。然后动态对象的优化方法则和游戏逻辑有关,主要判断那些对象有被显示的可能,在对象数量少的时候也不是很重要,我也不是很熟悉,就不误导楼主了。
渲染队列的管理主要是将对象按照透明,不透明分组,按照材质分组,按照优先级分组等等,管理渲染队列来达到最高渲染效率。

这些话题都不是一两句能说清楚地,每个话题和技术都可以写一本书。建议楼主上网去搜索一下下。

14

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
 楼主| 发表于 2006-2-1 22:34:00 | 显示全部楼层

Re: Re:急求基于OpenGL的引擎优化方法

justlikethewind: Re:急求基于OpenGL的引擎优化方法

3D图像引擎最主要的性能优化一般都在可见性判别和渲染队列管理上面。
可见性判别就是一个非常深入的题目,...


BSP Tree有了解,但还没使用。因为我是用工具直接生成场景文件的,最好是另搞一套算法出来。渲染队列,以前的D3D引擎有专用类来管理,自动将同类渲染进行合并。因为D3D中Set Render States是非常费资源的操作,所以很有必要进行合并。(据说UnReal的这部分做的就超不理想,每次的隆余操作很多).不过OpenGL是否也这样并不是很清楚。所以这部分就做的不是很好了。

我现在用的是自已的算法来实现可见性判别的。本打算拿来对付一下的东东,竟然花了四天时间才搞定。。。5555。。。。不过性能还算马马虎虎。刚刚测了下,没有跑满85FPS的原因已找到,原来是测试时没关听歌用的播放器。 (我用的是那种占资源25%以上的播放器,并且设成高优先级外加我的CPU不支持超线程。。。)[em7]

顺带问一下楼上的二位达人,关于抗锯齿的问题。OpenGL要如何抗锯齿?我找到的源码里有些函数用不了,虽然我有自已的抗锯齿算法,不过总不能直接拿CPU来算这些东东吧?.


7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-2-2 13:14:00 | 显示全部楼层

Re:急求基于OpenGL的引擎优化方法

OpenGL的渲染队列也必须自己管理,除非你用现成的引擎来管理。同样的,OpenGL切换材质也很费时间,虽然有工作集的概念,不过大小有限制。

关于抗锯齿,推荐去
http://www.opengl.org/documentation/red_book_1.0/
下载programming guide,其中第六章有详细论述。

14

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
 楼主| 发表于 2006-2-2 17:53:00 | 显示全部楼层

Re: Re:急求基于OpenGL的引擎优化方法

justlikethewind: Re:急求基于OpenGL的引擎优化方法

OpenGL的渲染队列也必须自己管理,除非你用现成的引擎来管理。同样的,OpenGL切换材质也很费时间,虽然有工...


谢了。这就去看一下。不过好在渲染队列管理还不算复杂,只是还得去翻N年前的旧代码。。。 [em7]

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
发表于 2006-2-4 07:00:00 | 显示全部楼层

Re:急求基于OpenGL的引擎优化方法

平滑处理不用搞太复杂~做个接口~用shader就ok了

~我在做ARPG/RTS~在处理大型world上很费精神~汗~~做builder工具就花了好几个月~

游戏行业那些策划~年纪比我轻~明明什么都不懂~偏偏要装老练~~绝对衰人~
我的游戏自己弄~我们的区别在于你是职业~我是业余~汗~

你加我一下~qq562043~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 09:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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