Fw: [问题] 请教关于PS4性能到什么程度

楼主: cjcat2266 (CJ Cat)   2014-06-16 09:58:45
※ [本文转录自 PlayStation 看板 #1JdaymVn ]
作者: cjcat2266 (CJ Cat) 看板: PlayStation
标题: Re: [问题] 请教关于PS4性能到什么程度
时间: Mon Jun 16 09:58:05 2014
再怎么好的硬件,没有好好撰写的游戏软件搭配,也是白搭
高档的硬件,也可以因为游戏开发者的没有好好优化
而展现低档次的效能
PC的硬件组合五花八门
其实对PC游戏开发者而言是很辛苦的
(就像Android手机对游戏开发者一样)
唯一能够广为人接受的方式
就是提供各种不同的游戏设定
让玩家调整出最适合自己PC的组态
暴风雪算是很有良心的了
不但针对各种视觉特效提供不同等级的设定
每个项目还有说明文字,告诉玩家各选项是针对什么硬件做调整
他们大可像大部分的游戏一样
简单提供Low, Medium, High三种Graphics Settings选项即可
如同bachelorwhc说的一样
可以把游戏主机当作人家帮你组好的套装机
或许综合性能没有办法比过顶尖的PC
但是由于硬件规格统一
游戏开发者可以针对单一硬件组态而做出最佳的优化选择
主机独占的游戏更不用说
硬件固然重要
但是能够发挥出的效能,完全取决于游戏开发者
DirectX或OpenGL是为了减轻开发者的负担
而设计出的高阶图像API
其中不乏针对硬件指令操作不当的防呆机制
例如还没有绑定shader program就发出绘图指令
DirectX会直接当机加上输出错误讯息
OpenGL则是透过函式回传错误代码
高阶图像API到头来还是需要把高阶的函式呼叫
转换成GPU懂的机器语言代码串流,包成封包喂给GPU
对于开发者固然是方便
但是多了至少一层的抽象层,就是代表效能的损失
顽皮狗不用考虑跨平台,所以可以完全针对PS4的硬件做优化
GPU方面
不使用DirectX或OpenGL这种高阶API
而直接生成GPU的机器语言代码串流封包,喂给GPU
CPU方面
不像PC开发者,无法事先得知总共有几个可用的CPU核心
PS4的CPU核心就是八个,两个被OS占去,所以游戏可用的是六个
顽皮狗的做法是生成六个常驻thread
透过设定CPU核心亲和力,一个thread绑定一个核心
这样可以省去透过OS层来分配thread执行时间的效能损失
每一个thread不停地把工作序列里面的工作提出来执行
这些thread不太会被OS从CPU核心上换掉(因为一个核心就是绑定一个thread)
所以不会有context switch的效能损失
内存方面
对DirectX或OpenGL有经验的人应该知道
如果要建构vertex buffer或texture
需要在main memory先把资料建构好
然后透过高阶API的函式呼叫,把资料复制到video memory
这个两段式的写入,其实是浪费时间,因为写入资料是一模一样的
PC硬件由于可以自行搭配,main memory和video memory通常是分开的
main memory就是大家平常简称的"内存"
video memory则是跟绘图卡绑定的GPU专用内存
PS4是统一规格,所以没有必要把main memory和video memory分开
总共的内存就是8GB,被OS用掉2.5GB,所以游戏可以用5.5GB
这5.5GB是可以CPU和GPU共用的 (unified memory)
CPU建构好vertex buffer或texture之后
只要把指标传给GPU,GPU就可以对这些资料做存取
不像一般PC需要把同样的资料写入两次
PS4相关的硬件组态和其他软件优化重点
可以参考顽皮狗的Jaon Gregory在XXI SINFO的演讲
https://www.youtube.com/watch?v=f8XdvIO8JxE
bachelorwhc也提到了GI (Global Illumination)
我把我所知道的一些GI技术分享一下
如果有学过电脑图学
一开始通常是教phong shading之类的渲染技术
这种渲染方式是所谓的Local Illumination
因为单一个表面,只考虑光源直接对它的照明,而忽略周围环境的影响
所谓的Global Illumination就是把环境的影响也考虑进去
如影子、环境遮蔽、环景反射
说起来容易,但是要在即时运算的速度下运算正确的GI结果是不可能的
连offline render的GI都是用离散的光子模拟的了,更别说即时运算
所以游戏开发者必须用其他方式,做出很像是GI的效果来"骗"玩家
影子基本是必备的GI效果
在low-poly的时代,还可以使用shadow volume这个技术
但是随着现代游戏模型面数的增加,shadow volume也失去了实用性
现在流行的技术是shadow map,比较不会因为模型面数而拖垮效能
然而缺点是影子的品质取决于shadow map的分辨率
分辨率过低的shadow map,就会让玩家看出放大的影子像素
为了避免这个问题,要嘛提高shadow map的分辨率
要嘛对影子进行柔化的后制处理
环境遮蔽(ambient occlusion,简称AO)则是另外一个AAA游戏必备的GI效果
之前也说过了,用离散光子模拟太慢了
现在的主流技术是一开始由Crytech提出的SSAO (Screen-Space AO)
利用Z-buffer周边像素的资讯
来近似每一个像素因环境遮蔽而失去的漫射光量
这是全萤幕的后制特效
所以跟场景上的物件数和面数没有关系
至于环境反射,通常是用一个反射environment map来蒙混过去
拿The Last of Us做例子
大楼的窗户和地上的积水所反射出来的环境并不是真正周遭的环境
而是一个是先准备好的environment map
由于有经过模糊处理,没有仔细观察是不会发现的
有些赛车游戏为了要真的在车身上做出真实环境反射的效果
必须以车身为中心,额外对周围全场景做多次渲染
效能消耗取决于周围环境和模型的复杂度
额外的draw call也是很贵的
最近有一个流行的环境反射"骗术"
是使用含有normal资讯的render target、main render target和Z-buffer
取得每一个像素一次光反射于main render target上的"著弹点"
用这个颜色资讯来模拟一次光反射的效果
这个技术叫做Screen-Space Ray-Traced Reflection,简称SSRR
如同SSAO,此技术为全萤幕后制特效
跟场景上的物件数和面数没有关系
缺点是有时候反光着弹点不在main render target上
这个时候就会出现资料缺乏而反光资讯不完整的瑕疵
但是通常SSRR的反光会做模糊处理,所以玩家不太会注意到
PC版的Assasin's Creed IV就有使用SSRR
嗯...其实我写到后来也忘记我一开始的主题是什么了
就当作是brain dump好了
以上
作者: viceversa56 (姊超猛)   2014-06-16 12:22:00
没读过电脑图学,感觉里面很多知识不错,有空来研究
作者: Kendai (ShouldIStayOrShouldIGo)   2014-06-16 13:13:00
推 memory那段对我非常之重要
作者: Killercat (杀人猫™)   2014-06-16 13:48:00
kernel thread sync是个很大的麻烦就是...\
作者: art1 (人,原来不是人)   2014-06-16 14:01:00
推!
作者: humanfly (laguna@HEADSHOT)   2014-06-16 20:38:00
感谢分享 而且还是中文的XD
作者: a83a83cjcj (马马虎虎)   2014-06-16 22:40:00
这边也推!
作者: a27417332 (等号卡比)   2014-06-17 12:10:00
明显对电脑图学和硬件架构有研究,厉害
作者: cowbaying (是在靠北喔)   2014-06-18 14:48:00
当初会放弃与IBM合作应该是因为AMD的APU能够使用HSA我目前也在等AMD新一代的APU 以后AMD的显卡跟APU应该会占平行运算市场相当大的份额 因为比INTEL的PXI便宜太多PHI
作者: a27417332 (等号卡比)   2014-06-18 15:26:00
一部份也是cell不易开发吧我猜
作者: silveriii (多说无益)   2014-06-20 13:16:00
作者: freelancer (三十亿人的世界)   2014-07-11 01:00:00
AMD的HSA还在喊喊喊的时, IBM 类HSA 的东西早就做完了不过IBM 愿不愿意放出来给Sony 用是另一回事

Links booklink

Contact Us: admin [ a t ] ucptt.com