※ [本文转录自 PlayStation 看板 #1QyVaxKC ]
作者: cjcat2266 (CJ Cat) 看板: PlayStation
标题: Re: [问题] 战神 画面问题
时间: Wed May 9 03:23:32 2018
※ 引述《zongshi (SPIDEY)》之铭言:
: 不知道是不是只有我这样
: 就是这次战神的画面,在用右类比转动人物时
: 很明显可以看到奎爷的模组跟背景的交界处呈现较低画质的现象
: 有点像人物周围被上了一圈马赛克的感觉
: 各位有这个问题吗?
之前我推文提到有可能是"时域反锯齿"的副作用
(temporal anti-antialiasing, TXAA)
当时不确定纯猜测,今天玩GoW的时候突然想到
就靠近萤幕去观察,然后看到原po所谓一圈马赛克的感觉了
现在几乎确定是TXAA的副作用
在此分享一下原理:)
(为了避免用太多术语,有些地方有简化或不甚严谨)
注: 看完本文之后有可能以后会更加注意到TXAA副作用
进而影响游戏体验,不想冒此险者请左转
嗯?还在继续读吗?该给的警告已经给了唷!
在TXAA开始流行之前,传统反锯齿做法是"超取样"
大致概念是使用比实际像素数目还要高的取样数目
每个取样点当作是个像素渲染一次
每个像素对应超过一个取样点
像素最终颜色是多个取样点渲染结果的的加权平均值
基本上可想成是运算较高分辨率的画面
然后把一些像素融合后缩小成实际分辨率
TXAA则是每个frame稍微挪一下摄影机
让摄影机有小于单一像素大小的"微震动"
然后跟上一个frame结合渲染,得到到新frame
如果每个像素只是单纯跟上个frame的同位置像素做加权平均
那效果就只会是单纯的视觉暂留模糊,看起来会更糟!
所以要推测每个像素在上个frame时在哪里
然后用上个frame该位置的像素来做加权平均
这样相当于是用多个frame的时间达到超取样的效果
在算图的时候,不是只算玩家看到的最终颜色结果
中间的运算结果还含像素在空间中的深度、材质参数、速度等资料
速度资料可以用来反推算一个像素在上个frame的位置
就是这个位置的像素颜色被拿来跟当前像素做加权平均
但如果用速度反推算上个frame的像素位置,找不到资料怎么办?
很多情形都会有这种资料不足的状况
例如位置反推算出来之后发现其实在萤幕外面,根本没有被运算
或是上个frame的像素应该出现的位置被其他物件挡住了
后者就是原po提到的问题
画面旋转的时,角色后绕出来的背景部分在上个frame是被遮住的
用像素速度反推算会找不到需要的资料
所以一般的做法就是对没有过去资料的像素做模糊处理带过
这个副作用,有突然出现或消失的物件
或有迅速移动跨过大量像素的物件时,尤其明显
需要跨过数个frame,经过多次加权平均之后才会把旧资料的影响"清掉"
这样就会产生残影(俗称ghosting)
看看这个Unreal Engine 4的Kite demo
https://youtu.be/nwuFd5uK_xQ
在1:22左右的地方可以看到
快速大面积移动的鞋子,在有高频细节加上风吹变形的草皮背景上留下残影
TXAA另外一个副作用
常常出现在有高频率细节加上特殊扭动效果的物件上
例如被风吹动的头发或者草
扭动效果是用动态方式算出变型的
如果没有正确地同时算出速度
那就无法准确反推上个frame的像素位置
有时候使用的变型函数速度计算太复杂而吃效能
又有时候甚至不可能算出正确速度
因为使用的变型函式无法微分而算出速度
这样就只能将就用估算的方式计算速度
结果还是比完全没有速度资料好
但是多少会有诡异的残影
还有一个TXAA常见的副作用
会出现在没有整合到核心渲染流程的元素上
例如某些半透明物件或者某些特效
绘制这些元素的时候用的是经过微震动后的摄影机位置
但是没有经过时域加权平均的流程
所以能看到这些元素没有经过反锯齿处理、且又有微震动
例如GoW中Niflheim一开始桥上的石头大门上的蓝色发光符文
就近观察就可以注意到小于一个像素大小的微振动
既然TXAA有这些副作用,那为什么还这么热门呢?
两个字: 便宜 (运算资源消耗方面)
跟增加取样数量的反锯齿方法比起来
每个frame需要运算的像素数量维持不变
只是增加了用速度反推上个frame像素位置和读取结果的额外运算
就像为什么几乎所有游戏都要用LOD (level of detail)
过远的物件用比较简单的模型替换
替换过程没有处理好,就会让玩家看到视觉不连续性(俗称pop)
原因也是两个字: 便宜
或是像仁王,较远敌人的动作帧率会减半
原因还是这两个字: 便宜
开发游戏有很大心力是花在从众多效能优化手段中取舍
在副作用可接受的范围内,想办法让玩家体验最佳化
能够好好享受游戏是最重要的
我在玩GoW会被的优化副作用干扰到吗?不会
偶然间注意到TXAA副作用时,顶多想说 "啊,是TXAA"
然后照样继续玩,我觉得GoW超赞的啊!
以上