游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5563|回复: 12

关于Direct3D下CPU利用率的问题

[复制链接]

8

主题

28

帖子

43

积分

注册会员

Rank: 2

积分
43
发表于 2006-3-17 00:12:00 | 显示全部楼层 |阅读模式
在3D下编程模型与普通的2D有很大的差别,比如说CustomUI这个简单的例子,即使没有动态的背景,只画UI,CPU利用率都50%以上,因为它不管是不是画面被更新了,只是刷新整个窗口/屏幕,但是在传统的2D下只是更新了的区域被重新画,没有更新的话,CPU利用率0。

对3D不太了解,哪位达人指点下,3D下解决这个问题的有效手段是什么呢?

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2006-3-17 09:21:00 | 显示全部楼层

Re:关于Direct3D下CPU利用率的问题

Sleep(1);

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2006-3-17 11:02:00 | 显示全部楼层

Re:关于Direct3D下CPU利用率的问题

那个例子没有限制刷新率,所以消耗大

8

主题

28

帖子

43

积分

注册会员

Rank: 2

积分
43
 楼主| 发表于 2006-3-17 18:10:00 | 显示全部楼层

Re: 关于Direct3D下CPU利用率的问题

限制刷新率是一个方法,但是如果是85F,1280x1024x32,这样资源消耗也很恐怖啊,如果这个样,vista用3D做桌面根本不可行。
   怎么就没人想过这个问题吗?

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2006-3-17 18:12:00 | 显示全部楼层

Re:关于Direct3D下CPU利用率的问题

一般游戏那里有那么高的刷新率

38

主题

96

帖子

148

积分

注册会员

Rank: 2

积分
148
发表于 2006-3-17 21:51:00 | 显示全部楼层

Re:关于Direct3D下CPU利用率的问题

http://bbs.gameres.com/showthread.asp?postid=199020

8

主题

28

帖子

43

积分

注册会员

Rank: 2

积分
43
 楼主| 发表于 2006-3-18 11:47:00 | 显示全部楼层

Re:关于Direct3D下CPU利用率的问题

控制FPS是针对类游戏的应用而言的,特点就是,如果要更新画面就是全部更新,因为大多数情况下整个窗口/屏幕都变了,这种应用的优化主要是控制FPS和减少不必要的对象的渲染和处理。

SLeep的问题就是如何Update On demand,按需更新。Update On demand 在大部分时间或者大部分内容的屏幕都是不变的3D应用中很重要,仅仅FPs控制是不够的。

可以从两方面来解决:Render场景的时候,只更新变化的区域;present的时候,利用SWAP Chain的DirtRegion ,source rectange 和 destination rectange的参数来控制刷新的区域。

因为对DirectX不太懂,故来求问

6

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2006-3-18 14:35:00 | 显示全部楼层

Re: Re: 关于Direct3D下CPU利用率的问题

DanielWang: Re: 关于Direct3D下CPU利用率的问题

限制刷新率是一个方法,但是如果是85F,1280x1024x32,这样资源消耗也很恐怖啊,如果这个样,vista用3D做桌面根本不可行。
   怎么就没人想过这个问题吗?


一般我们玩游戏来说,30大几侦就非常流畅感了。
平时所说的75、85、100刷新率仅是针对显示而言,并不是多少侦的问题,那是显示对需要显示的内容作的刷新次数。侦决定了游戏的流畅度,高刷新率让我们眼睛看起来不会显烁。拿CS来说,FPS有30的,刷新率上到85的,也就是说一秒钟CS更新屏幕显示数据 30 次, 显示器对这30 次的数据里面共扫描了 85 次显示。
关于只渲染修改过的部份,我很同意你的想法,的确可以让显示减轻不少运算的说,我还没想过这个问题呢。不过还要写一个算法出来计算那些部份需要重新渲染,用Clear清空特定的区域。当游戏是些运动性游戏时,要计算那些地方需要重新渲染的算法会变得异常复杂,也可能需要庞大的计算,让显卡完全渲染从而让CPU获得解放去运算其它的任务会变得更有价值。CPU与GPU运算之间能取到一个平衡点,只是见仁见智罢。
    楼主,加我Q,有空聊聊。我还是个DirectX菜鸟,希望可以共同学习。
   QQ:83297124

6

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2006-3-18 14:38:00 | 显示全部楼层

Re:关于Direct3D下CPU利用率的问题

对了,可以直接判断数据有没有更新的时候再用 Render更新场更就行了 ,也没必要不断Render,可以减轻显卡负担,不过一般是独占的情况下,好像显示得非常多余了。

3

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2006-3-18 15:30:00 | 显示全部楼层

Re: Re:关于Direct3D下CPU利用率的问题

Civilian: Re:关于Direct3D下CPU利用率的问题

那个例子没有限制刷新率,所以消耗大


这个是对的,大致上一个简单的3d屏保,并不会有特别大的计算量,拿现在的硬件条件来说,以反恐精英之类的游戏做屏幕保护基本对是系统是没有特别大的负担的。另外画面流畅要求的桢数是和物体移动速度成正比的。物体如果移动的不快大概几贞就够了,一般正常速度移动的东西十多贞看起来也非常流畅。
部分更新太麻烦了,对做屏保效果也不是特别大。举个例子,假如做一个屏保,流畅状态下运行需要占用4%的cpu时间。那么当花费了大量精力经过山穷水尽 的优化以后其速度提升了50%,那实际上该屏保也还是要占用 2.7%..... 优化前其他程序可用cpu时间是96%,优化后是97.3%....2者其实没啥区别。
另外做屏保的话把优先级调到低就可以了,这样屏保总是会给正常工作的程序让时间。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 23:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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