网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月27日漏签0天
gpu吧 关注:7,538贴子:81,453
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 16回复贴,共1页
<<返回gpu吧
>0< 加载中...

转帖 主机游戏技术普及2

  • 只看楼主
  • 收藏

  • 回复
  • Nexus帰来
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一楼度娘 顺便为楼主的懒癌默哀orz......


  • Nexus帰来
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
PS Vita屏幕的分辨率是544p,PSP游戏的分辨率是272p,长宽都是两倍,像素的数量是四倍。大家可以想象一下,vita屏幕上每个2X2的色块,都会对应psp游戏的一个像素,对不对?
如何决定这些2X2的色块的颜色值呢?我们需要一种插值方法。
假如我们不勾选双重线性过滤,那vita就会进行Nearest-neighbor interpolation。
在这个情况下,每个2X2的色块(含四个像素),它们最邻近的像素就是那个对应的psp游戏的像素。因为是选取最邻近像素的颜色,所以屏幕上每个2X2的色块都是同一个颜色。
打个直观的比喻,就好像是一个像素生出了好几个相同的像素。这就是最邻近方法的核心思想。
假如我们勾选了双重线性过滤,那vita就会进行更多的计算了。
这时候,针对vita屏幕上的每个像素,GPU会去找离它最近的四个psp游戏的像素。有了这四个像素之后,再分别根据自己与它们之间的距离,做加权平均值(Weighted average)。距离越近,权重就越大。
简单的说,每一个新像素都会受到几个旧像素的染色,最后会出现一个比较平滑过渡的结果。

以上就是过滤(filtering)最基本的思想。无论是单纯的把小图像放大,还是应用到纹理上,大致都是这样一个思路。
最后提一下,双重线性过滤在视频播放器和模拟器中应用的很多,它是把分辨率低的图像放大的常用方法。
关心更多细节的玩家,可以参考这篇:https://msdn.microsoft.com/en-us/library/windows/desktop/bb172357(v=vs.85).aspxus/library/windows/desktop/bb172357%28v=vs.85%29.aspx
好,今天的内容就结束啦~
最开始我们提到过,N64的GPU支持三重线性纹理过滤(Trilinear texture filtering)。那么,三重是什么?纹理过滤又有什么不一样呢?大家明天见!


2025-07-27 14:13:25
广告
不感兴趣
开通SVIP免广告
  • Nexus帰来
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
第二天 Mipmap和三重线性纹理过滤(Trilinear texture filtering)
我们先来回答昨天留下的一个问题:纹理过滤和普通的过滤技术有什么不同?
答案是,纹理过滤要牵涉到Mipmap。
于是,我们便遇到了第一个我查不到中文翻译的词汇:Mipmap。
Mipmap可以作为名词,于是就有了复数形式Mipmaps。它也可以作为动词,应用到Mipmap的技术,就被我们叫做Mipmapping。
下图中的纹理(Texture)就有Mipmap:

纹理里面有很多相同的人造卫星,但是它们的太小都不同。我们称做不同的细节程度(Level of detail)。
那么,我们为什么要存这么多个相同的图案呢?难道不浪费空间吗?
其实,它确实很占用空间!不过,它也非常有用,因此被使用的非常广泛。
当物体很远的时候,或者只是侧面面对镜头的时候,这个物体在屏幕上将会占用非常少的像素。这时候,如果我们使用分辨率很高的纹理,效果肯定是不理想的。
有了Mipmap技术之后,显卡就有挑选的余地了。我们可以告诉显卡,在什么情况下使用什么的细节程度,显卡就可以挑选合适大小的纹理了。
如果大家玩基于虚幻引擎3的游戏比较多的话,肯定能注意到一个现象。有时候,最开始纹理是模糊的,然后慢慢变得细致。
最开始的那个纹理,就是最低细节度的Mipmap。这是虚幻3减少游戏读取时间的方法。
在了解了Mipmap之后,我们再来想象一下这样的情形:
当镜头离物体忽远忽近的时候,纹理的细节度会发生什么呢?
分辨率高的Mipmap和分辨率低的Mipmap会来回的切换。
我们把这种现象叫做Texture Popping。要拿最近的游戏来说,这个现象在ID software的狂怒(Rage)里面就很常见。应该是Mipmap的控制没有做到最好的原因。
为了解决这个问题,一个早期的解决方案就诞生了!那就是三重线性纹理过滤(Trilinear texture filtering).
顾名思义,这个东西是在双重线性纹理过滤的基础上,加了一层计算。
它会在两个临近细节度的Mipmap中,取一个中间值。这样一来,纹理的细节度就不会突然变化了,而是会缓慢的过渡。
相比较最邻近像素的插值方法,Mipmap+三重线性纹理过滤可以很好的解决纹理马赛克的问题。但是也有两个缺点:
1.纹理的体积会膨胀。
2.纹理会变得模糊,失去锐利度(Sharpness)。
尤其是第二个问题,我个人是非常讨厌的。
在火箭鸟2的开发过程中,我们使用了4K乘以4K的高清晰纹理。这个分辨率应付1080P的游戏绰绰有余了~
可是,由于Mipmap的存在,导致纹理有些模糊,从而失去了很多细节。后来我只好禁用了一部分Mipmap,这样整体图像的细节丰富程度才比较让人满意。
Mipmap本身也不是那么容易控制的,就连id software也不能完全杜绝Texture Popping这种现象。
今天的内容就结束了。大家复习一下,三重线性纹理过滤是怎么工作的?
大家明天见!


  • Nexus帰来
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
第五天 抗锯齿基础
这两天一直生病请假,跟大家说一声对不起。
在介绍吴小林之前,我们先来看一下,游戏画面为什么会产生锯齿(Jaggies)。
锯齿这个词非常有意思,英文原文通常叫做Jaggies。大家能猜出这词的单数形式吗?
答案是,一般不用单数形式。
这词的词源是Jagged,形容锯齿状。名词形式Jaggies,直到视频游戏流行之后才出现。可以说是美国人活用(或者说是乱用)英文单词的典型例子了。
产生锯齿的现象,还有一种比较学术的说法,叫做Aliasing。这是抗锯齿(Anti-aliasing)一词的词源。
锯齿出现的根本原因是:游戏的分辨率不够。
大家看下面的图片就明白了。

大家想象一下,如果显示设备和游戏的分辨率是4K、8K、甚至16K,上面的直线就不需要任何抗锯齿技术了,肉眼完全看不到边缘。
如果分辨率是有限的,就必须进行昨天(其实是五天前了。。。)讲解的栅格化。如果不使用任何硬件或者软件的抗锯齿(Anti-aliasing)技术,锯齿的产生就不可避免了。
上图的画直线的算法叫做Bresenham's line algorithm,是效率最高的画直线的方法,也是大多数显卡的默认显示方法。
下面介绍一种早期的抗锯齿技术,叫做吴小林直线算法(Xiaolin Wu's line algorithm)。
这个算法的运行效率也非常高。当然,速度肯定不如上面的那个算法。
它的基本思想也很简单,大家看图就知道了:

直线所通过的像素都会着色,但是颜色则不是纯色,而是取决于跟直接的距离,距离越远颜色就越淡。离远了看,可以达到边缘柔化的效果。
吴小林直线算法也有一些局限性,它也不能控制反锯齿的程度。
N64的显卡,从硬件层面上支持吴小林直线算法,因此N64游戏的抗锯齿是很普遍的事情。
到了今天,这种抗锯齿技术已经不是主流了。PC上普遍使用的是多重取样的MSAA,而在PS360世代的主机游戏的研发中,很多依赖post effects的抗锯齿算法被创造出来了。这些都是后话了。
今天的话题就说到这里,大家明天见!


  • Nexus帰来
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
第七天 高速缓存(Cache)
高速缓存有很多种,我们今天讲的是其中的一种,叫做Cache。
这里我不得不提一件往事,是关于当年我毕业之后的第一份工作。
有一天我跟我前老板聊天,我说我必须要利用什么什么Cache的机制,那货很生气的说:什么?你是在找我要现金吗?
这个故事告诉我们两个道理:
1. 满脑子是钱的老板,以及完全不懂技术的老板,绝对是个灾难!
2. Cache和Cash同音。
Cache就是附属于CPU或者GPU的高速缓存。它是处理器性能的关键因素之一。
它存在的意义很简单:处理器访问Cache的延迟,比起处理器访问内存的延迟,要小很多倍。如果数据是装在Cache里面的,那么处理器拿到数据的速度就能提升很多倍。
很多人就要问了:那如果数据不在Cache里面怎么办呢?
因为Cache协议的种类实在是非常多,我在这里挑一种最普遍的情况来举例说明。
我们假设一个最初始的情况:数据全部在内存里,Cache是空的。
这时候,CPU需要拿一个字节的数据来计算一个东西,于是它就向Cache申请访问了。
Cache会告诉CPU:我这里没有这个数据。这种情况叫做Cache Miss。
于是CPU只好向内存申请访问了。慢就慢点吧,咱也没办法啊。
最后内存告诉CPU:我有这个数据。于是内存会给CPU这一个字节的数据。
注意,重点来了:与此同时,内存还会把邻近的一排数据都放到Cache里面存起来。
Cache里面的每一排数据,叫做一个Cache Line。一个Cache Line的大小通常是几个KB。
因此,我们还知道了一个结论:在Cache Miss的情况下,读取一个数据需要耗费双倍的内存带宽。
接下来,CPU又想拿同一个数据来计算了,于是它又向Cache申请。
这回Cache里面有这个数据了,所以CPU可以以非常小的延迟拿到这个数据,同时不消耗任何带宽。
这种情况叫做Cache Hit,命中了!
然后,CPU想拿下一个数据来计算了,于是它再一次向Cache申请。
我们上面已经学过,Cache一次性会拿一整排的数据,所以邻近的数据都是在Cache里面的。又是一个Cache Hit!
所以说,Cache对处理器性能的提速是建立在两个事实之上的:
1. 处理器的运算能力远远超过内存的读写速度。
2. 处理器经常拿重复或者邻近的数据。这种特性叫做局域行为(Locality)。
游戏任务更是如此,所以Cache对游戏性能的提升是非常重要的。
Cache的成本非常高,所以它们通常都很小。
在现代的处理器中,我们通常会设置多级缓存,即一级缓存(L1 Cache)和二级缓存(L2 Cache)。
L1 Cache的速度最快,但是非常小;L2 Cache的速度慢一点,容量也可以大一些。
Cache还可以进一步分类成I-Cache和D-Cache。
I-Cache专门用来装机器码指令,即Instruction Cache。D-Cache则是专门用来装数据,即D-Cache。
有了上面的知识,我们就可以来看看N64了。
N64用来装纹理的Cache只有4K,可想而知,它是装不了任何清晰的纹理的。
因此,GPU在读取大纹理的时候,会出现大量的Cache Miss。我们上面说过,Cache Miss的成本非常高,会消耗两倍的带宽,也利用不到Cache的低延迟。
很多N64游戏不得不牺牲纹理的大小,导致贴图模糊。
这就是N64另一个硬件设计上的败笔。
以上就是Cache大致的工作原理。有兴趣的玩家可以继续读下面的内容。
上面说的都是CPU读取数据的情况,那么Cache是怎么帮助写入数据的呢?
同理,我还是拿最常见的写入协议来讲解,这个协议叫做Write-Back。
当CPU写入数据的时候,如果数据不在Cache里面,会先申请读取一个Cache Line。
然后,CPU只写入Cache,真正内存里的内容不会更新,直到那个数据被读取为止。
这样就可以避免CPU反复写入内存的情况了。
我们也因此知道,在Write-Back协议下,即便是写入内存,也是会有读取内存的操作来占用带宽的。
这个协议比较适合CPU的读写和计算,因为Cache Locality非常普遍。
而GPU方面更普遍的写入情况就是大块内存的写入(Framebuffer之类的),这时候Write-Combining协议的效率就更高了。WC是会无视Cache而进行内存写入的。
根据这篇论文的结论,WC的速度是WB的1倍至10倍不等:
http://download.intel.com/design/pentiumii/applnots/24442201.pdf
今天的引申内容比较难,大家不要勉强。明天见!


  • Nexus帰来
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
第八天 高氏着色
高氏着色并不复杂,但是要理解它,就必须理解我们之前讲解过的很多概念。所以,今天也是一个很好的复习机会。
接着昨天的话题:因为Cache的限制,导致N64不能高效的处理高分辨率的纹理。所以N64游戏的材质往往看起来比较模糊。
但是,也有一些游戏就没有这个情况,比如下图中的马尿64:

图像的锐利度并不低,这是怎么做到的呢?
因为根本没有用到纹理!
希望大家还记得我们以前讲过的一个东西:插值方法。
当有纹理的时候,N64的硬件支持三重线性纹理过滤。那么,没有纹理的时候怎么办呢?
N64还支持另一种插值方法:高氏着色(Gouraud shading)。上面图片里面的大多数像素都是用高氏着色的。
接着还需要大家复习一下光照的基础:要想进行光照的处理,我们必须要有每个三角形顶点的法线数据,以及光线的方向。
有了以上的数据,我们就可以计算出每个顶点的光照强度了。
如果有纹理,像素的颜色就是在纹理颜色乘以光照的强度。因为高氏着色没有纹理,所以只需要指定一个单色,再乘以光照的强度。
接下来,高氏着色是怎么决定顶点之间的线和线和线之间像素的颜色值的呢?
答案很简单:就是线性插值。
大家再次复习一下,线性插值的基本概念。
应用在这里的线性插值,就是指一个像素会同时受到周围顶点的染色,染色的程度是跟距离相关的。
最后出来的结果就是平滑的颜色过渡了。

前两天讲的内容相对比较难,今天正好有机会调整一下节奏。
我可是非常认真的在安排内容和顺序,如果觉得哪里卡住了,我就强烈推荐大家借这个机会复习一下相关内容。
当然,如果以前都有认真读,今天的内容就真的是超简单的了!
距离我们的SS vs PS vs N64大对决已经不远了,大家明天见!
最后再来张图:D


  • Nexus帰来
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
第九天 微程序
今天的中国生活在一个“微”时代。微博、微信,就连抄袭也改头换面立牌坊,叫做“微创新”。
这就是所谓的物是人非。小时候我们把电脑叫“微机”(微型计算机),于是也有了微机课和微机房。那时候,同样是一个“微”字,却代表了超大规模集成电路的技术进步:我们终于可以把计算机缩小到可以放上桌子了。
就像当我小学四年级开始在APPLE-II型电脑上玩LOGO语言并开始接触汇编的时候,我怎么也想不到,今天的苹果会制造出那种数码泡沫产业。不以科技推动和人类真实需求出发的产业,自然是泡沫产业,也自然有消失的那一天。
我们今天讲的微程序(Micro-code)也代表着技术的进步,以及一种新思维。
N64可以使用微程序对GPU进行编程。可惜它非常难用,跟统一内存架构一样,是一次失败的尝试。
微程序后来被PS2和GameCube所继承,并获得了很大的成功。直到Xbox出现之后 ,才被Shader取代。
不得不说的是,PS3的CELL处理器里面的协处理器(SPU),可以说是微程序思维的多线程版本,并且跟Shader同时存在于PS3中。最后,它也即将退出主机游戏的历史舞台。
那么,微程序到底能用来做什么呢?
首先,我们需要提一下N64的GPU的细节。
N64的图像处理器和音频处理器是在一起的,它叫做Reality Co-Processor。(因此,音频可能会影响图像性能,这也是N64另一个设计上的问题。)
然后,我们来复习一下,GPU所做的工作是什么?
它取得所有的顶点,将它们转换,以便显示在屏幕上,然后进行栅格化,变成像素,再进行插值运算,决定每个像素的颜色值。
我们之前也说过,GPU的这整套流程分成顶点处理和像素处理两部分。它们的分界线是栅格化。
于是我们可以发现,整个顶点处理和像素处理的方式,都是比较固定的。
顶点处理就是进行坐标系的变换;像素处理也是固定的,只是有一些有限的选择:你可以选择做三重线性纹理过滤,或者进行高氏着色等等。
如果你想有更多的控制和更复杂的特效,GPU就必须支持编程(Programmable)。
我们今天要讲的微程序(Micro-code)就是在N64、PS2、Gamecube等主机中使用的,一种比较早期的,同时也是比较复杂的GPU编程方式。
N64的GPU默认运行的微程序是任天堂事先编写好的,它做的任务就是我们上面所说的固定的顶点处理和像素处理。
游戏开发者也可以自己编写一套不同的微程序,这样就可以做到与众不同的效果或者优化了。
举例来说。。。前几天我们说过,因为纹理Cache和统一内存架构的原因,N64的像素填充率会受到很大的限制。
解决这个问题的方式之一,就是使用微程序来替换掉原有的Mipmap和深度缓冲机制。
纹理的格式可以自定义,让它们尽量占用最小的空间。
深度缓冲也不是所有场合都需要的,有选择性的使用它可以提高像素填充的速度。
N64可以做到这种比较底层、也非常困难的技巧,这也是Rare等厂商发挥N64机能的不二法门。
细心的玩家肯定已经发现了:这种方式是不是跟顽皮狗发掘PS3的机能很类似?
没错!但问题是任天堂提供的工具非常难用,很多人甚至怀疑任天堂的动机,是不是不想让第三方掌握这种技术。
因此,可以比较好利用N64机能的游戏非常少,其中最重要的原因之一就在这里。
好了,现在我们应该把很多基础的概念讲解的很清楚了。明天我们会对SS、PS和N64的机能做一个总结和比较,也会迎来本文第二期的结束。
大家明天见!


  • Nexus帰来
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
转载自A9VG论坛,游戏开发者o_sharp《主机游戏技术普及》系列,第二期原帖地址:http://bbs.a9vg.com/thread-3554871-1-3.html


2025-07-27 14:07:25
广告
不感兴趣
开通SVIP免广告
  • 贴吧用户_0MND5RW
  • 意见领袖
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
本吧貌似有人转过


  • 还是那个小新
  • 人气楷模
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
终于有第二期了


  • 还是那个小新
  • 人气楷模
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有些地方还是说的抽象了点,不过是好文
LZ多转一些这样的好帖,吧里好帖太少


  • i411015
  • 人气楷模
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好贴顶


  • 蓝色samson
  • 核心吧友
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好帖 涨姿势了


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 16回复贴,共1页
<<返回gpu吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示