作者jk21234 ()
看板VideoCard
标题[闲聊] 选择3D显示卡记忆体的大小
时间Mon Oct 20 19:18:03 2008
虽然主题是如何选择合适的显示卡记忆体大小.
在这边打算解释解析度,显示记忆体大小,频宽,AA/AF,SLI/CF
之间的互动关系,不过也得先从很基本的观念开始讲起.
萤幕是2D的
彩色萤幕是ㄧ个2D的装置,通常具有X*Y个彩色的点(比如说,1280x1024,
那麽每一行的点就有1280个,上下共有1024行).
因此显示卡,最基本的资料就是要存放这些要输出到萤幕上彩色的点的资料.
用来告诉萤幕"第一行的第一个点是红色...第三十八个点是黑色.......第二行
的第六十四个点是蓝色".等等的资讯..
最简单的做法,就是把这些点的色彩值建立成阵列资料.又通常都用(R,G,B)
三种值的组合来描述色彩.所以只要存放第一个点的(R,G,B),第二个点的(R,G,B).
.......就能表示最後要输出到萤幕上的画面.如果一个点要表达的是"最亮的红色"
实际上存的可能是(255,0,0).如果该点是最亮的白色,那麽(R,G,B)就存成(255,255,
255).
在显示卡记忆体中存放这个资料的阵列称为Frame Buffer.
世界是3D的
在3D显示卡计算出最後要送给萤幕的Frame Buffer资料以前,没有经过处理的
原始场景资料等,这些"3D资料"应该是甚麽样子的 ??所谓3D,当然是指跟我们现实
相同,处在X,Y,Z三个轴的座标系中的物体.
假设我有一个正方形的骰子,刚好其中一个角处在座标系的原点[0.0,0.0,0.0]
若是这个骰子的大小是1单位长度.而且它的八个点刚好在座标系的 :
[0.0,0.0,0.0],[1.0,0.0,0.0],[1.0,1.0,0.0],[1.0,1.0,1.0],
[1.0,0.0,1.0],[0.0,1.0,0.0],[0.0,1.0,1.0],[0.0,0.0,1.0]
用这个方式就可以描述出一个存在3D空间中的正方体骰子.
不过也很容易和其他同样有八个点却不是正方体的东西搞混
当然,骰子有6个正方形的平面,所以也可以用6个正方形的平面表示,
更不会搞混的方法,则是把6个正方形平面拆开,使用12个三角面表示.
因为在空间中,3角形是最基本的单位,任意三个座标点一定会指定出
一个唯一对应的三角形.
但是现实生活中的物体的外观没有那麽规律.用三角形的方法建立
物体的模型是否可以?答案是,不能完全相同但是只要用的三角形够多
就可以越逼近真实的情况.
如果只用几十个三角形描述人的五官或者是四肢,那麽形状多半很糟糕
看起来会像是方块人.
提供一个古老的范例,第一代Virtual Fighter图片
http://www.klaxxx.com/public/sega/virtua-fighter/virtua-fighter-1.jpg

如果采用几十几百倍的三角形数量,那麽就会看起来比较接近於实际的形状.
骨肉有了,皮毛不存 ?
前面用三角形只是把物体的形状建立好而已.但如果我要做的是人,外观上
我会希望有皮肤,做的是可口可乐罐子,会希望它是红色并且有Logo等等.
可是要怎麽描述?描述皮肤表面的毛孔跟每个细胞以构建出足够的物理性质
吗?那是不可能的.最简单的方法就只要是"画出来像"就好了.就像是制作灯笼,
把骨架紮好,然後画个外观图案的表皮,把表皮紮上去.
所以在显示卡上就会做建立一个平面的贴图资料,然後决定要经过何种
的处理後,显示在萤幕上
100x100大小的贴图
------ ---------------------------
| |----------> | |
| | X轴转43度,Y轴转 | |
------ 37度,缩放0.85倍 | | 萤幕上某块
後贴在萤幕上 | ++ |区域为贴图的结果
| ++++ |
| +++ |
---------------------------
知道以上这些最基本存在的东西之後,就可以想像出"显示卡记忆体内
通常存放了甚麽",基本上会有的就是对应2D每个点的各种buffer,不只
之前提到的frame buffer,也包含了Z-buffer等.以及建立3D场景的三角面
资料,物体表面的贴图资料等等...
buffers 贴图/场景资料
|***|+++++++++|
|-----------|
显示卡记忆体 系统记忆体
从AGP显示卡开始(事实上应该是从PCI的nVidia Riva128开始...)
显示卡就可以取用分享主记忆体,实际上因为效率的差别,通常是将
较不常用的贴图资料暂时搬移过去.而各种buffer因为要随时读写.
因此都会处在较快的显示卡记忆体上.
终於进入第一个主题
前面打了这麽多其实是为了导入到第一个主题,我们已经建立好一个简单
描述显示卡记忆体使用的Model,那麽,就实际应用而言,在同一个游戏中,
通常可以让使用者调整的有 :
1.解析度
2.游戏的品质/精细度
3.AA/AF Level .....也有的游戏中这个调整和2合并.
在各种buffer中,基本记录的单位和点有关,所以buffer的大小也就和
解析度成正比,但是并不会跟游戏场景贴图资料的品质成正比.
相对的,游戏的场景资料,贴图的量跟解析度则是没有直接关系,通常
取决於游戏的品质设定,比如说,低品质的时候可能每个角色只有1000
个三角面,每张贴图最大只到256*256,高品质的时候提供每个角色5000
个三角面建立的模型,每张贴图最大到1024*1024等等.
所以刚刚建立的记忆体使用量Model可以扩充表示为 :
低解析度,低品质
buffers 贴图/场景资料
|***|+++++++++|
|-----------|
显示卡记忆体 系统记忆体
高解析度,低品质
buffers 贴图/场景资料
|******|+++++++++|
|-----------|
显示卡记忆体 系统记忆体
低解析度,高品质
buffers 贴图/场景资料
|***|+++++++++++++++|
|-----------|
显示卡记忆体 系统记忆体
高解析度,高品质
buffers 贴图/场景资料
|******|+++++++++++++++|
|-----------|
显示卡记忆体 系统记忆体
由於频宽足够的显示卡记忆体容量有限,因此不论因为解析度提高,
因为游戏的贴图场景资料增加,任何一个原因让显示卡记忆体的用量
开始吃紧後,游戏效能就会大量低落.同时,一般解析度增加後FPS降低.
不纯然因为"总点数增加,计算量成正比增加".也有把显示卡记忆体塞爆
造成的效率暴跌--通常会在某个门槛上跌到差异5~10倍
补充说明的是,解析度和系统内的贴图总数量无关,但是和常用贴图
的容量会有关系.为何?这要从贴图系统的基本开始解释起.
一般贴图在萤幕上,可能的大小会差异几百倍,比如说FPS眼睛紧贴在墙壁上,
那麽墙壁的贴图就会占满萤幕的大部分,但是如果离墙壁很远,它所占用的
面积就只需要很小....那麽为了品质以及效能考虑,通常不会让同一张贴图
去应付这种大小差异可以到几百倍的场合,而是一开始就做好一系列贴图.
由小到大,计算时候依照需要在萤幕上显示的点数,而去读取相应size的贴图.
比如说我们准备一系列的贴图,最小自8x8,最大达到1024x1024.
8x8 (最小)
16x16
..............
1024x1024 (最大)
那最後需要贴图的面积约为5x7的时候,就是取得8x8的那块来缩放.
若最後需要贴图的部分达到800x800大小,就会去取得1024x1024的那块
贴图来贴.......这种做法称为Mip-Map,如果不这样处理,让1024x1024的
贴图缩放到约5x7.或者是让8x8的贴图缩放到800x800大小,不是过度浪费
记忆体频宽就是品质会很差.
因此同一系列的贴图MIP-MAP,总容量虽然是相同的,但是解析度很低的时候
就会偏好选到较小的贴图,解析度高的时候就会偏好选到较大的贴图.
8x8 16x16 32x32 64x64 128x128 256x256 512x512 1024x1024
|------低解析度-----------------------------|
|-------------------高解低度-----------------|
但是同样读取一次,大块的贴图的容量是比小块贴图大很多倍的.所以
虽然贴图总容量不变,可是"常读取"的容量或者是比例却因为解析度不同
而有不同,这是高解析度除了buffer变大以外,另外一个影响显示记忆体
是否足够使用的因素
...........待续
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.78.250
1F:推 GoodFriday:先推再看!! 10/20 19:20
2F:推 ENEP:推推 10/20 19:31
3F:→ levine21:未看先推!!! 10/20 19:31
4F:推 ikbbsj:看板长见识!! 10/20 20:42
5F:→ iuytjhgf:这不是闲聊 这是专业!! 10/20 20:51
6F:→ greg7575:Magic 魂!大容量 DDR2 不死传奇 (误) 10/20 22:33
7F:推 wearebest:推推推 10/21 01:18
8F:推 JonTalbain:感谢好文!! 推!!! 10/21 02:00
9F:推 Luciferspear:推推 10/21 12:56
10F:推 z955018:感谢推!! 10/21 13:47
11F:推 Ayiyaya:推好文!! 写得比电脑杂志好太多了!!! 10/21 14:42
12F:推 sway0000:我只推好文章,长知识 10/21 20:45
13F:推 superbabaya:清新专业 10/21 21:18
14F:推 levine21:话说那张图是 VR快打 结城晶? XDD 10/21 22:18
15F:推 cp296633:推专业文 10/21 23:28
16F:推 Bohm:推! 10/22 16:29
17F:推 davidbright:push 02/27 12:11