Re: [问题] 战神 画面问题 (解释"时域反锯齿"副作用)

楼主: cjcat2266 (CJ Cat)   2018-05-09 03:23:32
※ 引述《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超赞的啊!
以上
作者: itsawar99 (7788)   2018-05-09 03:48:00
先推一个免得人家以为我文组的看不懂
作者: nonedude (dude papa around!)   2018-05-09 05:46:00
推CJ
作者: e04su3no (钢铁毛毛虫)   2018-05-09 06:26:00
嗯嗯 原来如此
作者: kimisawa (杨)   2018-05-09 08:06:00
你们家有没有因为战神感到压力啊?XD TLOU2期望很高良性竞争
作者: PTTfaggot (...)   2018-05-09 08:26:00
作者: yanuichou (危桥)   2018-05-09 08:27:00
推 CJ大
作者: zorroptt (毛毛鼠)   2018-05-09 08:28:00
哼哼 和我想的一样 (心虚
楼主: cjcat2266 (CJ Cat)   2018-05-09 08:32:00
玩战神然后说 "哇,那个效果想试试看" 的情况是有的
作者: dklassic (DK)   2018-05-09 08:51:00
推 CJhttps://youtu.be/NbrA4Nxd8Vo 其实 DF 最近刚好有个详细的反锯齿解说影片,应该看这个最简单 XD
作者: moritsune (君をのせて)   2018-05-09 08:53:00
先推一下以免人家发现我看不懂
作者: antony0310 (阿哲)   2018-05-09 09:04:00
也许该看一些电脑图学的书,不然也只是好像懂
作者: itsdelovely (It's De-Lovely)   2018-05-09 09:20:00
作者: MadMagician ( )   2018-05-09 09:38:00
便宜以外还有降低运算负担吧
楼主: cjcat2266 (CJ Cat)   2018-05-09 09:47:00
那就是我所谓便宜的意思等等,我的目标是不会图学也看得懂,还有什么地方需要简化吗?
作者: dklassic (DK)   2018-05-09 09:52:00
应该没问题吧 XD 大概只是“先推以免别人觉得我看不懂”的梗
作者: kincaid520 (吸菸菸)   2018-05-09 10:08:00
谢谢你的解说,想请问传统反锯齿是指FXAA或MXAA吗(不知道我有没有记错名字> <|||
楼主: cjcat2266 (CJ Cat)   2018-05-09 10:39:00
FXAA是后制手法,效能好但效果有限,MSAA是超取样的一种
作者: OROCHI97 (OROCHI97)   2018-05-09 10:44:00
推,写的算好懂啊
作者: evo2001 (空)   2018-05-09 10:46:00
推解说,浅显易懂
作者: kincaid520 (吸菸菸)   2018-05-09 11:11:00
谢谢回答
作者: xul4rmpcl4 (Roney)   2018-05-09 11:20:00
可以懂
作者: kuku321 (halipapon)   2018-05-09 12:45:00
TXAA对于特效也是蛮破坏性的要素 FF15的特效美术师对TXAA造成的破坏很头痛 也因此DQ11没有采取TXAA 和粒子特效等的相性并不是很好 很容易让特效整个糊掉
作者: sarusama (小猴猴)   2018-05-09 12:50:00
看不懂还是要推~ XD
作者: x12118 (雪山飞熊)   2018-05-09 13:11:00
推,回家开战神来试试开眼了吗?XD
作者: jakechen1027 (小杰克)   2018-05-09 13:55:00
推,很清楚
作者: ksng1092 (ron)   2018-05-09 14:03:00
其实搭配慢动作影片(其实动态gif也就够了)会更好懂XD
作者: patrickleeee (派脆)   2018-05-09 14:16:00
CJ的文推就对了
作者: graphict (囧")   2018-05-09 22:38:00
大推啊
作者: PangYen   2018-05-09 23:24:00
推 每次看cj大的文章都可以学到一些东西 感谢分享

Links booklink

Contact Us: admin [ a t ] ucptt.com