madVR 概述

(madVR的开发者,德国人Madshi)对于madVR渲染器,使用PC视频播放器的用户不会陌生。说它是PC电脑上的最强渲染器一点都不为过。有了它,PC播放的画质超过顶级蓝光播放器不再是”不可能的任务“。即使是这个神一般的工具,使用起来依然与大多数PC软件一样 - 设置选项繁多而且复杂。再加上这是一个由德国人开发的软件,菜单统统是英文的,对于大多数用户来说并不是很友好。

即使看到过几篇关于使用电脑播放器+madVR播放的文章,感觉作者也只是人云亦云,一知半解。以为自己安装了madVR就万事OK了。殊不知,madVR的强大远远超出了人们的想象。

幸好,一名叫做“萬年冷凍庫”的朋友(应该是台湾人),在Blogspot发布一篇大约3万字的madVR使用指南。详细到每一项设置该如何调整,最终测试效果如何。相信读完这篇文章,大家都能成为PC视频播放的高手。原文在此:萬年冷凍庫: 系列之3─最強渲染器-madVR

由于一些不可抗力的原因,原文页面无法被大多数人访问,因此一烧体验馆将此文章搬运过来,分2篇进行连载。

上篇 最强渲染器 madVR - 使用指南(上篇)

下篇开始 (以下约一万字,请收藏文章后阅读)

=================

Scaling algorithms

简单介绍

接下来要进入重头戏,关于scaling算法的设置,这部分是影响效能最大也是影响画质表现最明显的地方,也是madVR的最大特色,我们可以看到有四个地方需要设置算法,分别是chroma upscaling、image downscaling、image upscaling和upscaling refinement

简单解释一下这四者的意义:

  1. chroma upscaling是指色度升频,通常我们常见的YCbCr 4:2:0的图像文件就是经过色度抽样的,人眼对色度的改变不及亮度敏感,所以用较多的信息储存亮度信息(Y),较少的信息储存色度信息(CbCr)以节省带宽,以YCbCr 4:2:0而言,水平方向及垂直方向的色度分辨率都只有YCbCr 4:4:4的一半。举例来说,一个分辨率1920*1080的影片,在4:4:4的情况下,亮度分辨率是1920*1080,色度分辨率也是1920*1080,但是在4:2:0的情况下,亮度分辨率一样是1920*1080,色度信息水平和垂直都只取一半,也就是说色度分辨率是960*540。常见的影视内容多半是抽样成4:2:0储存,因此我们播放一个YCbCr 4:2:0的图像文件时,首先要将其色度信息升频到原始分辨率,也就是YCbCr 4:4:4,这时就会用到色度升频的算法。关于色度取样的相关知识也可参考维基百科:色度抽样 - 维基百科,自由的百科全书 (wikipedia.org)

  2. image downscaling就是指影像降频,也就是影像缩小,只要目标分辨率小于原始分辨率就会用到这部分的算法。

  3. image upscaling就是指影像升频,也就是影像放大,只要目标分辨率大于原始分辨率就会用到这部分的算法。

  4. upscaling refinement这部分是锐化算法,跟前面的iamgeenhancements不同,其目的在于改善放大演算后造成的模糊,作用在放大演算之后,属于post-processing。如果是1:1无放大的影像,这部分勾选了也不会有作用。

chroma upscaling

通常一个图像文件播放,到渲染器这步骤时,渲染器会先对其做色度升频,然后再将其原始分辨率依需要做影像升降频到目标分辨率,也就是说,一个1080p YCbCr 4:2:0的档案,就算在分辨率1920*1080的屏幕播放,它不需要做任何影像升降频演算,但还是需要做色度升频的演算。

chroma upscaling里面指定的的算法,在完成原始分辨率YCbCr 4:2:0→RGB 4:4:4的升频后即完成任务,之后影像要放大缩小都跟其无关。后续的resize需要的亮度和色度升降频由image upscaling或是image downscaling所指定的算法来负责。

在对视觉感受的影响上,影像升降频算法的影响比色度升频演算的影响要大得多。换句话说,改变影像升降频的算法,你比较容易感觉的到差别,改变色度升频的算法比较难感受到差别。

接下来我们来看看算法内容,右上角有个表格,每种算法有不同的数值,通常绿色是优点(sharpness = 锐利度),越高越好,红色部分是失真,缺陷(aliasing = 锯齿、ringing = 振铃效应),越低越好。

再来以各算法的消耗效能来说,Nearest Neighbor、bilinear、DXVA2这几种消耗的效能最低(DXVA2在此处是指DXVA-scaling,这项演算优劣直接受显卡影响,因卡而异,有些类似bilinear,有些则类似Bicubic或Lanczos的水平),再来是Cubic(Mitchell-Netravali、Catmull-Rom、Bicubic、Softcubic)这几种,消耗效能其次,再来是Lanczos、Spline,消耗效能又高一点,再来是Jinc和super-xbr,消耗效能更高,不过效果也比前面几种都好,再来是NGU系列,NGU-low消耗跟 Jinc差不多;NGU-med以上消耗比Jinc多,但效果也更好。

此外,勾选"activate anti-ringing filter"(以下简称AR)能够有效的抑制算法本身产生的振铃效应,相对的也会增加一点点效能消耗。

看到chroma upscaling这页,上面也提过chroma upscaling的提升对整体画面的影响比较难察觉,通常只会影响一些颜色边缘、色块,在一些对比高的场景才会看得到一点点差别(红底黑字或黑底红字之类),故不用投资太多效能在这里。

几个建议的设置是super-xbr 100以上+ AR、NGU Anti-Alias(以下简称NGU AA)low、med、high(chroma upscaling这边设到very high没必要)、Bilateral(soft或sharp)或Reconstruction(soft)。

NGU-Sharp则在锐利度的表现不错,其锐利度仅次于Reconstructionsharp和placebo,但有些地方会有点锐化过头,个人不是很喜欢。另外就是抑制artifacts的能力,这边我没有做太多测试,doom9上有几位认为这一项super-xbr + AR或Reconstruction soft又比NGU-Sharp好一点,仅供参考。

super-xbr + AR、NGU-low或med、Bilateralsoft、Reconstruction soft这几个效能消耗都差不多。

上面几个跑不动的话,再退一步则是Cubic(Bicubic 75)+AR,或不开AR,还是跑不动的话才用Bilinear。

根据madshi说法NGU在这边还非最终版本,以后还会像Bilateral一样加入luma channel做为参照,所以也许NGU的一些不足之处还有进步空间,可以期待一下。

这边提一下Bilateral,它是以亮度频道(luma channel)做为色度的参考,但是其结果比较极端,受片源影响很大,有些片源它的色度升频效果明显比NNEDI3和super-xbr甚至目前的NGU还要好,但有些却又比较糟糕。

Bilateral有三个版本,old是原始版本,消耗的资源很少,大概跟Bicubic差不多,但上面提到的受片源影响最明显,soft和sharp则是改良版本,资源消耗跟super-xbr差不多,sharp比soft锐利一些。

Bilateral soft或sharp拿来当常驻选项也是一个不错的选择,个人喜欢soft多于sharp

而Reconstruction算是基于Bilateral的改造版本,也有三个版本,soft比较泛用,不会那么极端,但相对优点就没那么明显,sharp跟placebo则强化了锐利度(另外两个是各加了AR滤镜),但有时候会让人觉得锐化过头了,而且效能消耗比soft高太多,个人不是很建议,不过请自行判断,也许有人喜欢。

Reconstruction系列中个人认为比较适合当常驻的是Reconstruction soft

下面AR滤镜基本上能开就开,至于要不要开SuperRes则见仁见智,个人是不喜欢开(这边的SuperRes跟后面upscaling refinement里面的SuperRes并没有关系,是各自独立的选项,但一样都是额外做锐化处理)

在我个人的测试中Bilateral soft是我最喜欢的选项,锐利度跟抑制artifacts效果都很棒很平衡,其次是NGU-AA high,但我不是很确定Bilateral soft会不会有表现比较糟的片源,所以这个仅供参考。super-xbr100或125 + AR和Reconstruction soft则是doom9上比较多人推荐的选项,但我个人觉得有点不够锐利就是了。

另外值得注意的是,不同分辨率/帧率的片源对于chroma upscaling的效能消耗也不同,像4K>>1080>480,这方面的差别,需要透过设置profile才能达到最大限度的显卡资源应用。

image downscaling

在image downscaling的部分,SSIM是目前表现最好的算法,在缩小画面的同时很好的保留了原分辨率的细节跟锐利度,不过效能消耗也比较大。1D是以Bicubic为基础,2D则是以Jinc为基础,在4K→FHD的场合,某些场景中2D比1D稍微好一点点,但是效能消耗大很多,请斟酌使用。(以GTX 960来说,4K@60p→FHD屏幕,只能开到1D,2D会负荷不了)后面的强度%数越高画面越锐利,但相对的可能会让画面有些刺刺的,哪个强度比较适合自己请自行测试。另外建议勾选"activate anti-ringing filter"(以下简称AR)跟"scalein linear light"(以下简称LL)。

AR滤镜后面有一个strict(soft)跟relaxed,前者是AR滤镜预设强度,后者是降低AR滤镜强度,换得一些锐利度的提升(但ringing也会比较多),relaxed个人认为一些本身就比较柔和的算法比较适合,像Catmull-Rom,不过这个没有绝对,自己试试看比较重要。

至于"activate anti-bloating filter"(以下简称AB),它会强化高频讯号并移除低频讯号,用在SSIM上面,效果很类似直接把强度%数降低,不过madshi认为某些场景用AB滤镜效果比直接降低%数好,需不需要用这个滤镜,要用的话要开多强,也是请各位自行测试,每个人喜好跟观赏环境不一样。

如果显卡跑不动SSIM的话,次一级的选项是Cubic(Bicubic 150)+AR+LL,再次一级是Cubic(Catmull-Rom)+AR+LL,如果还是跑不动再依次把LL跟AR拿掉,还是跑不动的话最后再去考虑bilinear或DXVA2

值得注意的是,降频演算跟升频演算一样,各种算法的差异也是倍率差越多越明显,例如在4K→1080的场合,有些场景我可以观察到SSIM 2D跟SSIM 1D的差别,但如果是1440→1080的场合,就很难看出差别了,而如果是升频再降频的场合,例如720→1440→1080,由于升频上去的影像本来细节就比原生高分辨率的影像少,因此这时候SSIM 1D和Bicubic 150的差别也很小了。如何对各种不同分辨率的影片作最适合的设置以达到最好的效能利用,就要靠profile设置了。

备注:madVR v0.91.4之后,"升频再降频"所使用的降频算法不在image downscaling里设定,而是在image upscaling里的子选项"if any(more) scaling needs to be done:"里设定

image upscaling

接下来看到image upscaling,Bilinear和DXVA2,是对于一些比较弱的显卡或内显,效能无法负担其他任何算法时的选择,但其效果远不如其他算法。

Cubic系列(image upscaling这边一般使用下拉式选单里的Bicubic,后面数字越高锐化越高,但超过100的不建议)Lanczos、Spline这几种,效能消耗在伯仲之间(Lanczos、Spline比Cubic略高),而效果互有利弊,可参考右上角图表,一般来说Lanczos比Spline和Bicubic好一点。而Jinc,效能消耗比上面三种高一点,锐利度稍低于Lanczos,但对于artifacts的抑制做得很好,综合表现在上面三种之上。使用这几种算法时,下面的"activate anti-ringing filter"(AR滤镜)都建议勾选,至于"scalein sigmoidal light"这个选项,照madshi的说法它在有些场景可以稍微降低一些锯齿(aliasing),但某些场景可能又糟一些些,故各位自行测试决定要不要勾。

至于super-xbr和NGU系列,比较特别一点,它只能做2的次方倍的放大(2倍、2倍再2倍=4倍),不过NGU-(Sharp、Standard、Soft)可以做4倍的直接放大。就效果而言,这几种算法(尤其是NGU系列)跟其他几种完全不是同一等级,提升非常明显,当然效能消耗也会比较大。同时,很多情形下2的次方倍放大不会刚好等于目标分辨率,所以还会需要其他的升降频算法辅助把画面scale到目标分辨率。

NGU系列下面第一个下拉式选单里,algorithmquality–luma doubling,即亮度分辨率的翻倍,选择luma的运算强度,有四个等级,very high(非常高)、high(高)、med(一般)、low(低),越高运算越精密,消耗的效能也越多,low 的效能消耗大概跟Jinc差不多。在锐利度上四者有一点点差别但不是差很大那种,very high在线条的聚焦上会稍微好一点点,最主要是差在artifacts的抑制程度,越高抑制效果越好。

第二个下拉式选单,luma quadrupling,这项选择"let madVR decide"的话,会自动根据luma doubling里的翻倍强度设定来决定二次翻倍是否启用和强度。NGU Anti-Alias(以下简称NGU-AA) luma doubling选low~med,"let madVR decide"不会启用二次翻倍,lumadoubling选high~very high则"let madVR decide"二次翻倍会使用med。

选择"disable"则是不启用二次翻倍。

另外NGU-(Sharp、Standard、Soft)可以自行指定四倍放大时是使用"翻倍后再翻倍"的再次翻倍double again模式,或是直接四倍放大direct quadruple模式(NGU-(Sharp、Standard、Soft)限定,AA没有)。纯以锐利度来说double again会比direct quadruple高一点,但direct quadruple效能消耗会比double again低很多,而且对于噪声抑制和整体自然感而言direct quadruple都比较好,个人推荐direct quadruple,NGU-(Sharp、Standard、Soft)选择"let madVR decide"的话预设也就是用directquadruple。

第三个下拉式选单,chroma,影响色度升频到目标分辨率所使用的算法,选择"let madVR decide"时,luma doubling选择low~high,会使用Bicubic60+AR;luma doubling选择very high,会使用NGU-med。

  • normal = Bicubic60+AR

  • high = NGU-low

  • very high = NGU-med (此项如果luma doubling设定high时会跳回high)

第四个下拉式选单,activate doubling,是设定翻倍的启用条件,达到条件才会启用NGU进行翻倍。

  • NGU-AA的选项:

选择"let madVR decide"时,默认是目标分辨率宽或高大于或等于原始分辨率1.2倍时启用,没达到1.2倍启用条件的话则会使用Jinc+AR替代。

  • NGU-(Sharp、Standard、Soft)的选项:

选择"let madVR decide"时,默认是目标分辨率宽或高大于或等于原始分辨率1.2倍时启用,没达到1.2倍启用条件的话则会使用Jinc+AR替代。

  • 其他选项:

    • …only if scaling factor is 2.0x (orbigger) 当目标分辨率宽或高大于或等于原始分辨率2倍时启用

    • …only if scaling factor is 1.5x (orbigger) 当目标分辨率宽或高大于或等于原始分辨率1.5倍时启用

    • …only if scaling factor is 1.2x (orbigger) 当目标分辨率宽或高大于或等于原始分辨率1.2倍时启用

    • …only if any upscaling is needed 只要目标分辨率宽或高大于原始分辨率就启用

    • …always - supersampling 强制启用,即一般所谓的"超取样"

关于超取样,选择此项的话即使在1:1播放时(例如1920*1080影片在1920*1080屏幕上播放),也会启用翻倍算法(看选的是super-xbr还是NGU),强制升频后再降频回来,这个使用在super-xbr或NGU-AA时一般是搭配upscaling refinement里面的锐化算法一起用来取得锐利度的强化,当独使用并没什么效果。或是使用在NGU-Sharp时,可以受惠于它自带的deringing效果。不过这个选项并不是很建议,除非你的显卡效能非常强非常够用,而且实际使用上也真的看的出1:1播放强制升频再降频的画面区别才去用它,千万不要盲目的认为用了画质一定会变好。

第五个下拉式选单,activate quadrupling,是设定二次翻倍的启用条件,达到条件才会启用NGU进行二次翻倍。

  • NGU-AA的选项:

选择"let madVR decide"时,默认是目标分辨率宽或高大于或等于原始分辨率2.4倍时启用。(但如果前项手动设定成1.5倍启用的话这边会变成3倍启用;如果前项手动设定成2倍启用的话这边会变成4倍启用)

  • NGU-(Sharp、Standard、Soft)的选项(第二个选单选择doubleagain时):

选择"let madVR decide"时,默认是目标分辨率宽或高大于或等于原始分辨率2.4倍时启用。(但如果前项手动设定成1.5倍启用的话这边会变成3倍启用;如果前项手动设定成2倍启用的话这边会变成4倍启用)

  • NGU-(Sharp、Standard、Soft)的选项(第二个选单选择directquadruple时):

选择"let madVR decide"时,默认是目标分辨率宽或高大于或等于原始分辨率2.00001倍时启用。(直接四倍消耗比再次翻倍小很多,所以自动启用判定很宽松)

  • 其他选项:

    • …only if scaling factor is 4.0x (orbigger) 当目标分辨率宽或高大于或等于原始分辨率4倍时启用

    • …only if scaling factor is 3.0x (orbigger) 当目标分辨率宽或高大于或等于原始分辨率3倍时启用

    • …only if scaling factor is 2.4x (orbigger) 当目标分辨率宽或高大于或等于原始分辨率2.4倍时启用

    • …only if any upscaling is needed 只要目标分辨率宽或高大于原始分辨率就启用

第六个下拉式选单,if any(more) scaling needs to be done – upscaling algo,则是当翻倍或二次翻倍后,可能还小于目标分辨率,必须再升频到目标分辨率,这个选项影响此时使用的升频算法,选择"let madVR decide"时,luma doubling选择NGU-low~high,会使用Bicubic60+AR;luma doubling选择NGU-very high,会使用Jinc+AR。也可以直接指定想用的算法。

第七个下拉式选单,if any(more) scaling needs to be done – downscaling algo,则是当翻倍或二次翻倍后,可能大于目标分辨率,必须再降频一次到目标分辨率,这个选项影响此时使用的降频算法,选择"let madVR decide"时,Luma选择NGU-low~high,会使用Bicubic150+AR;Luma选择NGU-very high,会使用SSIM1D100+AR。

如果不想用上面两种算法,可以选择"use image downscaling settings",沿用imagedownscaling里面的设定。或也可直接指定选单里任何一种你想用的算法。(doom9有很多使用者认为升频再降频用的算法不需要加LL,当然这个主要还是看个人喜好)

现在的madVR版本,使用NGU系列时其实几乎只要指定luma (doubling和quadrupling)的强度就好,其它交给"let madVR decide"就自动帮你选择好了,其实非常方便,对于新手来说友善多了,也避免了一些无谓浪费效能的设定。

另外关于super-xbr,个人认为它可以被NGU取代,不过有些人还是会想要使用它(可能因为效能消耗够低,约等于Jinc+AR的程度,或是其它原因等等),这部分选项上跟NNEDI3和NGU大同小异,第一个下拉选单是选择锐化程度,一般选择100左右,可依自己喜好调整。第二个下拉式选单是选择是否要二次翻倍及二次翻倍锐化程度。

第四个下拉式选单,选择"let madVR decide"时,默认是目标分辨率宽或高大于或等于原始分辨率1.2倍时启用,没达到1.2倍启用条件的话则会使用Jinc+AR替代。

第五个下拉式选单,选择"let madVR decide"时,默认是目标分辨率宽或高大于或等于原始分辨率3倍时启用(但如果前项手动设定成2倍启用的话这边会变成4倍启用)。

而第六个下拉式选单(upscaling algo),选择"let madVR decide",会使用Bicubic60+AR;第七个下拉式选单(downscalingalgo),选择"let madVR decide",会使用Bicubic150+AR。

以下举几个例子来说明整个流程,设定如上图,屏幕分辨率是1920*1080,

当我要播放一个1280*720的影片时,首先:

YCbCr 1280*720 4:2:0 → RGB1280*720 4:4:4 (chroma upscaling算法)

RGB再转回YCbCr 并把Y(亮度频道)跟CbCr(色度频道) 拆开处理

1280*720亮度分辨率升为2560*1440 (符合1.2倍条件,NGU Sharp翻倍启用,强度high)

1280*720色度分辨率升为1920*1080 (chroma选项决定,此例会使用Bicubic60+AR)

亮度分辨率2560*1440 → 1920*1080 (downscaling algo选项决定,此例会使用Bicubic150+AR)

合并色度信息和亮度信息,转换为RGB输出1920*1080到屏幕上

设定如上图,当我要播放一个640*360的影片时,首先:

YCbCr 640*360 4:2:0 → RGB 640*3604:4:4 (chroma upscaling算法)

RGB再转回YCbCr 并把Y(亮度频道)跟CbCr(色度频道) 拆开处理

640*360亮度分辨率升为2560*1440 (符合2.00001倍条件,NGU Sharp直接四倍启用,强度veryhigh)

640*360色度分辨率升为2560*1440 (chroma选项决定,此例会使用NGU-med直接四倍)

色度和亮度分辨率2560*1440降为1920*1080 (downscale algo选项决定,此例会使用SSIM1D100+AR)

合并色度和亮度信息,转换为RGB输出1920*1080到屏幕上

对于各种算法的选择,实际上还是要依显卡等级,各种不同的片源及对各种算法的主观感受去调整,找出能够顺畅播放而且自己看了也喜欢的组合,强烈建议设置profile,可以编写切换逻辑或设置热键方便快速切换,这方面需要经过一定时间的测试才能找出最适合自己计算机的设定。

另外要如何判断显卡负荷不负荷的了此种算法呢?第一个当然是看画面会不会很顿,再来看看GPU使用率是否高达9X%快破表,再来也可以在播放时按Ctrl+J叫出OSD,看看有没有掉帧(dropped frames),render queue是否一直很低,rendering time是否超过movie frame interval,如果都没有那就恭喜啦,可以放心看片!

现在我们来谈谈关于NGU系列,在此之前不得不先谈到NNEDI3,NNEDI3这个算法原本是在转文件编码时用来升频及去交错等等处理的算法,因为其消耗资源过大,速度不够快到可以拿来做实时演算(real-time),因此一直没被拿来用在影片播放时使用的升频演算。直到Doom9上有高手重新编写了这个算法的OpenCL版本,madshi将之修改之后加入到早先的madVR版本之中实现了此算法的实时演算(现今版本已经拿掉),即使如此,这个算法消耗的显卡资源仍然相当惊人,但它带来的升频效果也是同样惊人,可以打趴一堆高阶蓝光机和高阶电视号称的4K影像升频,绝不夸张。

我们可以看到madshi自己对这个算法的说明和范例图片:

madVR - high quality video renderer (GPU assisted) - Page 1080 - Doom9’s Forum

基本上除了2^N倍的限制之外,这个算法升频出来的影像,锐利度和噪声抑制程度相比Jinc+AR,都有着可说是跳跃性的进步,它有让影片看起来不像是升频上来的影片的实力,但是这个算法也并非完美,它在某些场合中可能会出现一些莫名其妙的artifacts(原因似乎是因为它"太聪明"),madshi的范例里就有这个现象,这些是在使用Jinc时不会出现的,提高运算强度的话可以减低这些artifacts的出现,但消耗的效能也是倍数成长。

这边也提供一个简单测试比较:

原始分辨率640*360 (点图放大)

目标分辨率1440*810 (点图放大) NNEDI3 64

目标分辨率1440*810 (点图放大) Jinc+AR

How amazing!! right?

不过其实Jinc+AR比较"忠于原味",NNEDI3则把锯齿状线条都拉成直的还不失锐利度,整体观感会比较讨喜,当然这只是一个小例子,真要比较必须要用大量的影片来比较才会比较中肯。以实测的结果来说,NNEDI3对于低解析影片,多反差线条(游戏或动画的影片),锯齿边缘明显的改善最为明显且巨大,对于真人影片比较没那么神奇的效果,虽然仍就有非常优异的表现,但跟Jinc+AR的差别就没上面那个例子那么大了。所以由此可见,影片的内容也是选择算法的重要因素。

接下来谈谈NGU吧,这是madVR v0.91之后加入的新算法,全名是"Next Generation Upscaling",是madshi自己写的算法,据他的说法也花了不少时间研究、参考好几篇论文加上他自己的idea才做出来的东西,就实测效果来看颇令人惊艳,在很多地方可以说已经超越了NNEDI3。NGU有四个版本(AA、Soft、Standard、Sharp),其中Sharp几乎就是最原始的NGU版本,其目的是尽可能把低分辨率影像还原到接近高分辨率"母片"的程度,在不增加artifacts的前提下。下面两个连结是madshi自己po的测试图,里面的NG1就是NGU之前暂定的名称

madVR - high quality video renderer (GPU assisted) - Page 2002 - Doom9’s Forum

madVR - high quality video renderer (GPU assisted) - Page 2006 - Doom9’s Forum

可以发现,NGU的锐利度胜过NNEDI3不少,接近NNEDI3 256+SuperRes 4,而画面又比NNEDI3 256+SuperRes 4更接近原图,仅次于waifu2x(但waifu2x是对照用,运算太复杂不可能在实时演算使用)

不过高度还原这点虽然是优点但有些情形下也可能变成缺点,在我个人的测试中,NGU-Sharp的确非常适合真人类的影片,其他算法没有一个锐利度比它好而artifacts更少的,包括NNEDI3,NNEDI3要达到NGU-Sharp的锐利度至少要搭配SuperRes 4,但这个组合artifacts又比NGU严重一点,效能消耗也高很多。但对于动画类而言,NGU-Sharp虽然也有很惊人的效果,但提前是片源必须够"干净",如果片源本身有很多artifacts或锯齿的话,这些也会被NGU-Sharp当成细节如实的放大,出来的结果就有点残念了,偏偏动画类,尤其是低分辨率或是高压缩比的,这种情况还不少。NNEDI3,如同我前面提过的,对治这种片源缺陷的能力特别强大,而锐利度不足的地方则可以透过锐化算法补齐,达到跟NGU-Sharp接近的锐利度。

在0.91.6版发布时,madshi加入了NGU的另一个修改版本─ NGU-AA,这个版本跟原始NGU(NGU-Sharp)大不相同,不过度的强调细节还原,而是如同其字面意义Anti-Alias,强化消除线条锯齿和画面的artifacts等缺陷的能力,也就是说,跟NNEDI3非常的类似,但却可以比NNEDI3花费更少的效能就做出相同甚至超越的结果。在我个人的测试中,某些画面它消除锯齿的能力比NNEDI3还要好,而线条也比NNEDI3更为聚焦,其它的画面至少也跟NNEDI3差不多,而doom9上大部分使用者也认同画面上NGU-AA略胜或不输NNEDI3。因此最后madshi决定把NNEDI3自madVR中移除,把NGU系列作为madVR的招牌升频算法。

目前对于低分辨率或是高压缩比动画类我个人会视情形,如果锯齿不是很严重的话,我会使用NGU Sharp+RCA算法,RCA对artifacts有很好的抑制效果,再配上NGU Sharp的高还原度可谓天作之合。如果是干净的片源则单独使用NGU-Sharp。如果是锯齿严重的片源,则使用NGU-AA,当然NGU-AA可以再搭配锐化算法使用,效果比单独使用NGU-AA更好。

另外关于NGU-Soft和NGU-Standard,跟NGU-Sharp的基本调性是一样的,只是降低锐化的程度,有些画面用NGU-Sharp放大的结果可能会显得太过锐利或刺眼,那它可能就比较适合用NGU-Standard。至于NGU-Soft,个人认为它的锐利度降得有点低(比NGU-AA还低),可能适用的场合并不多,不过还是以各位亲自测试为准。NGU-Soft和NGU-Standard两个并不像NGU-AA带有消锯齿的功能,所以跟NGU-Sharp一样比较适用在干净的片源,或是搭配RCA使用。

另外就是NGU-(Sharp、Standard、Soft)已经内建有deringing的效果,所以不要跟artifact removal底下的reduce ringing artifects(deringing)一起开,不然可能损害画质。

下面看看几张范例:

640*480→1440*1080(点图放大)

一般的老动画DVD放大到FHD的情形,注意衣服上的噪声以及眼睛和头发的部分

Jinc+AR

NGU Sharp very high (direct 4X)

NGU Sharp very high(direct 4X) + RCA 6

NGU AA very high 2X > very high 2X

NGU AA very high 2X > very high 2X + RCA6 (high)

NGU AA very high 2X > very high 2X + RCA6 (high) + crispen edges 2.0 + thin edges 1.0 + AR (crispen edges和thin edges皆为upscalingrefinement)

可发现这边NGU Sharp very high(direct 4X) + RCA 6的组合可得到最理想的还原效果,噪声也得到充分抑制,最后一张所使用的组合NGU AA very high 2X > very high 2X + RCA 6 (high) + crispen edges2.0 + thin edges 1.0 + AR虽然也有接近的效果,但还原细节仍差了一点点,重点是消耗的效能高太多了,因此这类动画最适合NGU Sharp + RCA的组合。

720*480→1920*1080(点图放大)

注意衣服跟皮肤的细节,及线条边缘轮廓

Jinc+AR

NGU Sharp very high (direct 4X)

NGU AA very high 2X > very high 2X

NGU AA very high 2X > very high 2X +SuperRes 4

可以发现锐利度NGU AA very high 2X > very high 2X + SuperRes 4可能稍微高一点点,但artifacts也比较多,而NGU Sharpvery high (direct 4X)则把画面细节还原的很好,artifacts也比较少,重点是这边NGU Sharp very high (direct 4X)消耗的效能要少得多。

另外一个是上面用过的初音范例,再比较一次,可以看出NGU Sharp在低分辨率动画类并带严重锯齿的状况可能遇到的问题

640*360→1920*1080(点图放大)

Jinc+AR

NGU Sharp very high(direct 4X)

NGU Sharp very high(direct 4X) + RCA 6

NGU AA very high 2X > very high 2X

NGU AA very high 2X > very high 2X + RCA7(high) + deringing + crispen edges 2.0 + thin edges 1.0 + AR (crispen edges和thin edges皆为upscalingrefinement)

可以发现这个例子NGU Sharp就不太适合,即使它是很忠实的还原了原图上的细节跟锯齿,但那可能不是我要的,NGU AA消锯齿效果良好但锐利度差了些,而NGU-AA再加上噪声修饰跟锐化算法结果就不错,不过效能消耗也比较高。

另外doom9上也有网友收集了各种madVR的升降频算法以及artifact removal算法的效果对比图片,可至下列网址把图片点开参考:

Image Gallery of madVR Image Processing Settings - Doom9’s Forum

如果不想搞太复杂,只想要一组设定打天下,那就这样设定吧,显卡不够强就自己换成med或low,显卡够力可换成very high,片源不够干净再加个RCA即可。但有心的话自己可以慢慢去做不同组别的设定来对应不同的分辨率/帧率/片源,madVR的profile功能,让我们可以用各种不同的设置去应付各种不同的状况,最大限度去利用有限的显卡效能,这部分我在另一篇文章皆有说明。

upscaling refinement

接下来看到upscaling refinement的部分,这边可将其视为改善放大算法专用的锐化演算,跟前面image enhancements相较,这边处理过后的影像差距不会太巨大,但锐化造成的副作用也会小很多**,这边我的习惯仍然是第一组profile常驻的不启用任何锐化算法,其它几组设置热键视情况切换。**开启锐化算法也会增加显卡负担,务必注意。另外原则上,可以同时开1~3种算法,只要注意互补性,不要过度重迭,不要锐化过度就好,但是image enhancements跟upscaling refinement最好不要同时开,很容易会锐化过头。(锐化过头画面会变的尖尖的、刺刺的、失去立体感、或是充满油画感)

特别要注意的是使用NGU-(Sharp、Standard、Soft)的时候,除了其专属搭配的两个算法外不建议再开其他任何锐化算法,因为NGU-Sharp本身就已经非常锐利了,再开其他的就锐化过头了。

这边简单介绍一下各个锐化算法

  • sharpen edges:针对边缘线条锐化,不锐化纹理内容,适合开启AR和AB滤镜使用

  • crispen edges:FineSharp的改良版本,有不错的整体细节锐化效- 果,新版本里也抑制了噪声被锐化的程度,madshi认为它有最自然的锐化效果

  • thin edges:把边缘线条变细,适合低分辨率的动画类放大时使用

  • enhance detail:针对纹理内容锐化,例如皮肤跟衣服之类的细节,不过也有噪声被锐化的可能

  • soften edges:柔化线条边缘,是NGU-Sharp专属搭配使用的,NGU-Sharp可能造成线条边缘过于锐利,这个选项可稍加修饰。至于要不要开以及开多少,则视个人口味跟片源而定,例如有人认为SD片源→FHD的升频,本身锐利度已经不足了,不太适合再柔化,而FHD片源→UHD的升频就比较有需要。当然这只是一种个人看法而已…

    不过madVR在v0.91.8之后加入NGU-(Standard和Soft),想要低一点的锐化程度选择这两个就好,所以这个选项个人认为已经没有必要

  • add grain:在纹理内容上面加上颗粒,也是NGU-(Sharp、Standard、Soft)专属搭配使用的,NGU-Sharp虽然能把低分辨率内容的线条提升到接近原生高分辨率的锐利度,但纹理内容缺失的部分并无法完美的还原,加上颗粒让影像比较有真实感。这边建议开1~2,但这选项只适合真人影像,不适合动画类(动画开了看起来会像噪声)

  • LumaSharpen:整体锐化,强化线条跟适度的细节提升,并避免强化噪声,强烈建议开启AR和AB滤镜使用,开了后效果很类似crispen edges

  • AdaptiveSharpen:整体锐化,特别注重强化中等锐利程度的线条,但会避开全平面区域跟高锐利的线条,强烈建议开启AR和AB滤镜使用,AR+AB有开没开差很多,开了后效果很类似crispen edges

  • SuperRes:包含一整套的后处理过程,得到的也是整体性的锐化效果,后面的LL、AR滤镜则不建议开启(LL可能有副作用而且增加的效能消耗太大,SuperRes本身不太产生ringing所以不需要AR),后面的数字代表跑几次SuperRes流程,数字越高锐化效果越强,但锯齿跟artifacts也会更明显,效能消耗也越大SuperRes跟非NGU的升频算法一起用有不错改善效果。跟NGU-AA一起用也可以增加不少锐利度。但并不适合跟NGU-(Sharp、Standard、Soft)一起用,SuperRes并无法让NGU-Sharp效果再改善或提升锐利度,反而可以造成锯齿和artifacts再次被凸显出来

    个人测试的结果认为SuperRes很适合在真人影片中使用(如果使用NGU-(Sharp、Standard、Soft)以外的算法的话),但极度不建议在动画类使用(包括2D和3D动画),只要一开锯齿跑出来了,破坏非常明显,强度只开 1也一样…

  • refine the image after every ~2X upscalingstep

  • refine the image only once after upscalingis complete

前者是每放大两倍就锐化一次,后者是不管放大多少倍总共只锐化一次,这个选项只对极大倍率(4倍以上)的放大会有影响,理论上每放大两倍就锐化一次最能维持锐化效果,但是对显卡的效能消耗也是倍增,还是要视自己显卡能力而定

以下是个人使用的两组upscaling refinement设定,分别是真人影片(FHD片源升频4K)跟动画类(仅限需要消锯齿的片源)使用,用热键控制切换,供各位参考

需要消锯齿的动画片源(配合image upsclaing里的NGU-AA使用)

真人影片类FHD的片源升频4K(配合image upscaling里的NGU-Sharp或Standard使用)

要不要开锐化?要用哪几种算法?强度开多少?这个是要由观赏的片源,跟使用的屏幕,显卡的负荷能力,亲自去做测试才能得出结论,不必要盲从,别人的设定不一定是适合自己的设定

========================================================================

Rendering

general setting

接下来继续往下设定,到"general setting"这页,我的建议设定(win7适用)如下图:

  1. "delay playback start until renderqueue is full"建议勾选,可减少开启影片时的掉帧现象,下面的"delay playback start after seeking"不建议勾选,勾了拉时间轴会变慢
  2. "enable windowed overlay"N卡跟I卡可勾可不勾,这功能A卡并不支持勾了也没用,优缺点下面总结会解释。
  3. "enable automatic fullscreen exclusivemode"建议勾选,这个选项勾了会在进入全屏幕时使用独占模式(FSE),优缺点下面总结会解释。
  4. "disable desktop composition (Vistaand newer)“跟底下的"only when media player is in fullscreen mode”,如果有使用全屏幕独占模式的话,就两个都一起勾选;如果没使用全屏幕独占模式的话,就不要勾选(这个选项是播放时或者全屏幕时把win7的AERO关掉,win8以上的系统则没有影响)
  5. use Direct3D 11 for presentation,勾了会使用D3D11模式,必须显卡跟操作系统支持才能用,而madVR的10bit输出也必须在D3D11跟FSE模式底下才能达成,此外D3D 11模式下从窗口切换到FSE模式速度比较快一些,效率较好。D3D 11模式必须使用AERO,故这里勾选的话"disable desktop composition (Vista and newer)"会自动失效。下面的"presenta frame for every VSync"建议勾选,可减少presentation glitches的增加,反之若不勾则能节省一点点效能但有可能presentation glitches会变多。
  6. "use a separate device forpresentation (Vista and newer)"建议勾选,不过如果N卡勾了发生问题的话可以取消勾选看看有没有改善,另N卡驱动为 301.42 版以前的话不要勾选。
  7. “use a separate device for DXVAprocessing (Vista and newer)”,勾或不勾都可。(此项只有在用到DXVA的场合,如硬件去交错或硬件译码时才有影响)

6.、7.这两项主要会影响renderingtimes,而rendering times是越低越好,太高的话会掉帧,可自行测试勾选或不勾选的差别。我的建议设定是使用AMD HD7750显卡驱动13.12 测试,这样设定在fullscreen exclusive mode下的rendering times最低,而N卡使用者也可自行测试这两项勾或不勾哪种组合较好。

CPU queue跟GPU queue,是决定播放时占用的RAM的大小,我喜欢用自来水跟水塔的概念来举例,queue的总量就像是水塔大小,不管大水塔或小水塔,目的都是确保水龙头打开能够源源不绝的出水不会没水用(掉帧),queue设小的话(小水塔)它很快就会装满,对硬件负担也小,但是一个稍大的变动可能就让它暂存的容量不及应付而降成0,就会掉帧了。queue设太大的话则是吃比较多的RAM,开影像会稍微变慢(如果有勾选"delay playback start until render queue is full",要等它装满),但相对就比较不会掉帧,这方面要自己多测试取舍。需注意硬件不是太强的话也有queue开太大反而播放不顺的情形发生。

我的建议是如果没有使用smooth motion功能的话,这部分维持预设即可,如果有使用smooth motion的话,这边可以设到CPU queue 20跟GPU queue 12,甚至要更大也可以(在我以前的测试中,使用smooth motion时如果queue不够大有时候会有不顺畅或顿顿的情形发生)。

另外win8/8.1或win10的话,建议设定如下图:

“enable automatic fullscreen exclusivemode”,勾选后如果没遇到异常状况(全屏幕时严重LAG、rendering time暴增或无画面)的话也是可以使用。

windows mode settings

到"windows mode settings"这页,如下设置:

勾选"present several frames in advance",会使用0.87.10版加入的新窗口模式,有接近FSE(全屏幕独占)模式的效能跟稳定性,如果你不喜欢FSE模式的话全屏幕播放可直接使用这个新窗口模式。

如果播放出现问题的话则取消勾选"present several frames in advance",会改回使用0.87.10之前版本的旧窗口模式。

如果使用新窗口模式的话,下面的"'how many video frames shall be presented in advance"数字依GPU能力去设置,一般在6-12之间,更大也可以,如果有掉帧情形就调整看看,使用smooth motion的话这项最好开大一点。

欲使用全屏幕"新"窗口模式的话还必须如下设置,取消勾选这两项:

exclusive mode settings

到"exclusive mode settings"这页,如下设置:

"delay switch to exclusive mode by 3seconds"这项勾选的话会在切换成全屏幕3秒后才进入独占模式,自己决定要不要勾选,像我喜欢它马上进入独占模式所以就不勾选。

下面的"'how many video frames shall be presented in advance"数字依GPU能力去设置,一般在6-12之间,更大也可以,如果有掉帧情形就调整看看,使用smooth motion的话这项最好开大一点。

这边小总结一下,在非全屏幕时,可以使用的模式及设定方法:

  • 旧窗口模式 windowed mode(old path)
  • 新窗口模式 windowed mode(new path)
  • overlay窗口模式 overlay mode

勾选"enable windowed overlay"会使用overlay窗口模式(N卡跟I内显限定),不勾选则使用其他两种窗口模式,新跟旧窗口模式的选择方法如上面的说明。

在全屏幕时,可以使用的模式:

  • 旧窗口全屏幕模式 fullscreen windowed mode(oldpath)
  • 新窗口全屏幕模式 fullscreen windowed mode(newpath)
  • overlay全屏幕模式 fullscreen overlay mode
  • 全屏幕独占模式 fullscreen exclusive mode

勾选"enable automatic fullscreen exclusive mode"会强制使用全屏幕独占模式,不勾选则使用其他三种模式,有勾选"enable windowed overlay"会使用overlay全屏幕模式(N卡跟I内显限定),不勾选则使用其他两种窗口全屏幕模式,新跟旧窗口全屏幕模式的选择方法如上面的说明。

下面整理一下各种模式的优缺点,"+“表示优点,”-"表示缺点,主要来自madshi本人的回复

Problem with MadVR using full screen exclusive mode

  • 旧窗口模式

    • + 可使用在非全屏幕及全屏幕模式

    • + 切换全屏幕时不会有额外的延迟

    • - 有时会出现画面撕裂(没有打开AERO的情形下)

    • - 有时会有播放不顺畅、顿顿的情形(特别容易发生在使用smoothmotion FRC时),对于描绘时 间的容忍度较低

    • - 在老旧的机器上效率低落(比较容易掉帧)

  • overlay模式

    • + 可使用在非全屏幕及全屏幕模式

    • + 不会有画面撕裂情形

    • + 常保播放顺畅

    • + 效率高,比较不容易掉帧

    • - A卡不能使用

  • 全屏幕独占模式(FSE)

    • + 不会有画面撕裂情形

    • + 常保播放顺畅

    • + 效率最高

    • + 即使GPU短期间处在比较忙碌的状态也能有效防止掉帧,是最稳定的播放模式

    • + N卡只有此模式下能够输出10bit

    • - 只有全屏幕时能使用

    • - 切换全屏幕时会有延迟现象

    • - 播放器自己的控制接口无法运作

    • - 叫出播放器选单时(例如点右键)会强制跳出FSE模式

  • 新窗口模式

    • + 有FSE模式一切优点,但没有其缺点(运行机制跟FSE只差在没有进 入Direct 3D模式)

    • - 必须搭配AERO才能使用(在win7下AERO的compositionrate是以主屏幕为准,这在使用多屏幕 时会成为麻烦,因为不能让它对应当下屏幕的更新率,win8之后则无此问题)

    • - 在某些系统有兼容性问题,导致播放不顺

    • - win10以外的系统无法输出10bit (win10除N卡外可在全屏幕窗口模式输出10bit)

stereo 3D

到"stereo 3D"这页,madVR在v0.90之后加入对3D影片的支持,这一页的设定在有播放3D影片的需求时才有需要勾选,当然要播3D还必要达成其他几个条件:

要有支持3D的显示器跟眼镜

操作系统要win8.1以上

桌面右键>屏幕分辨率>进阶,里面有一个3D选项要勾

使用LAV 0.68之后的版本 (3D原盘OK,但如果是mkv格式封装则必须是MVC编码)

3D输出目前仅限制在1080p23模式

smooth motion

到"smooth motion"这页

这是madVR v0.86.0加入的功能"smoothmotion frame rate conversion".,详见官方论坛:

madVR - high quality video renderer (GPU assisted) - Page 876 - Doom9’s Forum

这个功能相当好用,解决了帧率跟屏幕更新率不同步所产生的judder问题(详细可参考我在reclock那篇所提到的内容),开发者madshi提到这功能有两大优点:

1.能够让任何帧率去对应任何屏幕更新率,并保持影像的流畅

2.如果硬件能够应付,在完整的播放中不会有任何的帧drop或repeat,且不需要依靠reclock来达 成。

两个缺点:

1.稍微增加一点GPU的负担

2.会损失一点锐利度,影片帧率小于屏幕更新率的话损失较少,例如24fps的影片在60Hz屏幕使用这功能播放的锐利度损失是不太容易看出来的:而影片帧率等于屏幕更新率的话,使用这功能锐利度损失就较多而且很容易看出来。

Reclock难以处理的非整数倍的同步问题,像最常见的24fps(23.976)影片在60Hz屏幕上播放,就很适合让madVR的smoothmotion FRC功能来解决,把这功能打开会发现影像的judder都消失了,就有如同步播放时的那种流畅感。

madVR的smooth motion FRC功能是透过Blending来达成的而非补帧,当然也没有补帧带来的副作用像soap opera effect和一堆artifacts。madshi有提到Blending是"30% of frame A and 70% of frame B to calculate the outputframe (pixelC = pixelA * 0.3 + pixelB * 0.7)"。

我不是很确定它运行的方式,不过猜想可能是接近以下的情形:

1 1 1 2 2 3 3 3 4 4 (24fps@60Hz屏幕,不做任何处理的呈现方式,是一个3:2的pattern,每个帧停留时间不一样,造成judder)

1 1 1+2 2 2 3 3 3+4 4 4 (24fps@60Hz屏幕,经过Blending处理的呈现方式,每个帧停留时间相同,接近2.5/60秒)

透过Blending来达成的同步,没有像补帧那种顺到不可思议的流畅感,但是影像相对比较自然,比较接近原汁原味。至于喜欢哪种就交由各位自己决定。以下介绍设置方法:

到"smoothmotion"这个分页,如图设置,下面三个选项是判断要不要启用smooth motion FRC的方法,

第一个选项判定的基准似乎是帧率跟屏幕更新率差超过0.5时会启用,反之不启用。

第二个选项是屏幕更新率为帧率的精确整数倍时不启用,反之启用

第三个选项是强制启用

另外也可以设置热键手动控制这个功能的开关

使用SVP或AMD的Fluid Motion或其他补帧软件的话,这个功能就取消勾选不要启用

screenshots

到"screenshots"这页,这边的设定主要是搭配播放器的截图功能(例如MPC-BE的截图热键是"F5",截下来的图片会在"本机">"图片"文件夹中)

  • “create screenshots with a custom zoomfacter”,这项不勾选的话,截图就是看目前播放器放出来的目标分辨率多少就直接截那个分辨率,有勾选的话就可以自己指定,看是要影片原分辨率50%、100%、200%、300%、400%、800%,或是指定720p、1080p、2160p这些常见分辨率。举例来说,没有4K屏幕,但想看看某些算法升频到4K的效果,就可以善用这个选项。

    • 至于edcoded video size,指的是影片压制编码出来的原始分辨率,但是跟100%的不同之处在于,有些影片原始分辨率跟它100%播放时的分辨率不一定一样,影片串流中会夹带一个Display aspect ratio(DAR,显示宽高比例 )的标签,100%播放时会依DAR所指定的比例去拉伸,举例来说,日本电视台录制下来的档案就常见这种形式,其原始分辨率是1440x1080,但夹带一个16:9的DAR,因此100%播放时会拉伸成1920x1080去播放,这个例子如果选100%去截图,图片会是1920x1080,如果选edcoded video size去截图,则图片会是1440x1080。
  • “use high quality scaling algos -image upscaling:”,这项勾选的话可以直接指定截图要套用的升频算法,有NGU Sharp、NGU Standard和NGU AA三种,以及这三种各自再搭配add grain,总共六种

  • “don’t draw OSD”,勾选的话,截图一律不显示OSD

  • “don’t perform color & gammaprocessing, calibration etc”,勾选的话,截图会忽略color & gamma和calibration里面套用的设定

  • “don’t draw subtitles”,勾选的话,则截图就不会把字幕挂上去

  • “don’t perform artifact removalprocessing”,勾选的话,截图会忽略artifact removal里面套用的算法

  • “don’t perform image enhencementprocessing”,勾选的话,截图会忽略image enhencement 里面套用的锐化算法

  • “don’t perform upscaling refinementprocessing”,勾选的话,截图会忽略upscaling refinement里面套用的锐化算法

  • “don’t execute custom shaders”,勾选的话,截图会忽略套用的自定义shaders效果

dithering

到"dithering"这页

关于error diffusion和ordered dithering,是0.87版后新加入的dither方法。madVR在输出8bit的讯号时,是把内部用16bit高精度处理完的讯号以dithered 8bit RGB的形式输出,在色彩阶调上跟10bit输出是不会有差别的,差别在于画面上会多了一些"噪点",我前面有个连结也解释过dither的原理,是以噪点来模拟更多的色阶数,某些场景下你也许会看到这些噪点,并将其视为画面的负面因素。madVR过去一直使用的是random dithering的演算方法,在大部分画面都会制造噪点使得其比较容易被查觉,而新的error diffusion算法只在必要的地方制造噪点,也就是说它可以维持同样的色彩阶调,但是大幅降低画面的"底噪"。至于ordered dithering则是madVR在v0.87.5之后做为默认取代random dithering的算法,其效能消耗跟random dithering差不多低,但是有接近error diffusion的低噪点表现。我的建议是你如果有一个不算小的屏幕(40吋以上),去使用error diffusion才会比较察觉得出效果,一般计算机屏幕尺寸太小可能很难感觉到它带来的差别,维持预设ordered dithering即可。error diffusion的话会增加一些显卡消耗(开启smooth motion FRC会再增加一些,因为其消耗是跟最终输出的帧数成正比)如果显卡效能许可的话要将error diffusion做为常驻选项也是可以。

error diffusion是用DirectCompute写的,由于DirectCompute是DirectX 11的一部分,必需要显卡及操作系统支持DX11才能使用。

下面两个选项,"use colored noise"勾选的话是使用多色噪点,不勾的话是使用单色噪点;"change dither for every frame"勾选的话是使用动态噪点,不勾的话是使用静态噪点,静态噪点在主观上会让你觉得噪点数量较少,但是一些噪点的排列纹路可能会比较容易被查觉到。

也就是说,不考虑random dithering的话,我们目前有三种dither算法,ordered dithering、error diffusion-option 1和errordiffusion-option 2,以及两个控制选项,总共12种不同排列组合的设置可以去使用,这边请各位有兴趣自行去测试,每个人喜欢的画面重点可能不太一样,很多情况下其实差别很小,但都优于random dithering就是了。

至于有兴趣测试者,由于在8bit输出的情况下不太容易看得出差别,我们可到前面屏幕设定那边去选用较低的bit数,如此一来可更明显看出各种dither算法和选项的差别。例如我们如果选择3bit的话,则RGB三色每一色都只有2^3=8个色阶数,三色总共只有8*8*8=512个色阶数可用(跟8bit的1670万个色阶数比起来是"非常"低),dither算法变得极为重要而且任何选项的改变差别都非常明显,以下我们可以看到简易比较图:

8bit ed-op1 两选项皆勾(点图放大)

3bit ed-op1 两选项皆勾(点图放大)

3bit none(无dither) (点图放大)

以上只是简单让各位看一下dither用低色阶数输出高色阶的强大效果,这边各种算法的差异请自行测试。测试完毕别忘了再到屏幕设定那边改回8bit。

再次声明,madVR的8bit输出,使用error diffusion或ordered dithering作为dither算法的话,跟10bit输出几乎是没有差别的,肉眼几乎不太可能察觉到那些噪点的存在,虽然madVR有支持10bit输出,我们不必追求一定要用10bit输出,事实上10bit输出反而比较容易遇到问题(不管是显卡方面或是显示器方面)。

trade quality for performanc

到"trade quality for performance"这页,**这页的选项都是降低质量以换取效能,如果显卡效能够高的话尽可能都不要勾选,**如果显卡负荷不了的话就从最上面开始勾选。有时候你使用某些算法在播放循序式影像或是软解时没问题,播放交错式影像开启硬件去交错时或是硬解时显卡却负荷不了,这时就可以勾选那几个DXVA(deinterlacing or decoding)的选项,如此显卡就只有在用到DXVA运算时才会降低质量,总之这边的选项低阶显卡可以依需要勾选。

这边的选项由上到下依序来看的话:

第1项是跟外挂字幕渲染器xy-SubFilter相关,有使用才有影响。

第2项是使用硬解(DXVA)时,同时使用DXVA的chroma upscaling算法

第3项是使用硬件去交错时,同时使用DXVA的chroma upscaling算法

第4项是跟播放器的自定义pixel sharder功能相关,有使用才有影响。

第5项勾选的话dithering演算会用gamma light取代linear light(gamma light在0.87.7之前的版本是预设使用),取消勾选的话就是使用linearlight,linear light能提供较好的色彩还原度。

第6项跟第7项是跟debanding的运作有关,勾选的话会取消一些侦测机制。

第8项是如果能节省效能的话把色度升降频分开处理,里面唯一一个我觉得中高阶卡也可以勾选的,这个选项的效果,举例来说,一个4K 4:2:0的影片要在FHD屏幕播放,一般来讲要先把色度分量(1920*1080)升频到4K再跟亮度分量一起降频到FHD,勾选这个选项的话,色度分量直接维持1920*1080不动,而亮度分量3840*2160直接降频到1920*1080,对4K影片来说,少了这个色度升频动作节省的效能非常多,对画面质量影响却不多。

第9项是色调映射和色域转换使用较低精度

第10项是去掉影片的BTB(比黑更黑指015这段)和WTW(比白更白指236255这段)的黑位范围信息

第11项是跟smooth motion有关。

第12项跟第13项跟madVR本身的处理精度有关。

第14项跟放器的自定义pixel sharder功能相关,一样有使用才有影响。

第15项是跟DXVA deinterlacing有关,勾了就不会把60i去交错倍帧成60p而是变成30p

第16项也跟DXVA有关

========================================================================

User interface

keyboard shortcuts

到"keyboard shortcuts"这项,可以依自己喜好设置热键

另外附上madVR预设设定已有的热键一览表:

  • create freeze report - Ctrl+Alt+Shift+Break

  • open settings dialog - Ctrl+S (打开选单)

  • Enable OSD - Ctrl+J (打开OSD)

  • Reset OSD Statistics - Ctrl+R (OSD统计归零)

  • Source Primaries - Ctrl+Alt+Shift+P

  • Source Decoding Matrix - Ctrl+Alt+Shift+M

  • Source Levels - Ctrl+Alt+Shift+I

  • Output Levels - Ctrl+Alt+Shift+Y

  • Deinterlacing - Ctrl+Alt+Shift+D (强制开关去交错)

  • Deinterlacing Field Order -Ctrl+Alt+Shift+F

  • Deinterlacing Mode - Ctrl+Alt+Shift+T (切换去交错模式video/film)

  • 顺时钟转90度 -Ctrl+Alt+Shift+Right

  • 逆时钟转90度 -Ctrl+Alt+Shift+Left

  • 3dlut开关 - Ctrl+Shift+3

  • 3dlut分割展示 - Ctrl+Alt+Shift+3

  • desired display gamma value - increase - Ctrl+Alt+Shift+G (配合"enablegamma processing"的设定)

  • desired display gamma value - decrease - Ctrl+Alt+Shift+B (配合"enable gamma processing"的设定)

建议设置热键的项目:

  • debanding - toggle (切换off-low-med-high)

  • deringing - toggle (开关deringing)

  • deblocking strength - increase (RCA强度增加)

  • deblocking strength - decrease (RCA强度降低)

粗体是我认为比较实用的几个,这边要特别提一下Deinterlacing Mode的切换,我们知道图像文件基本上有循序式(或称逐行扫描)跟交错式(或称隔行扫描)两种,循序式(Progressive)如480p、720p、1080p这种后面有个"p"的都是,交错式(Interlaced)如480i、1080i这种后面有个"i"的都是。遇到交错式影像,必须要进行去交错处理(Deinterlacing),否则会有明显的横向扫描线,而交错式影像基本上又可分成两大类─Video跟Film,Video通常指原生的交错式影像,为摄影机以60i模式拍摄,一秒60个场(field),场是指半个画面,也就是半个帧(frame),这种没办法还原成一个完整的图像,只能靠各种去交错算法去仿真出完整的画面,让其变成30p或60p。

而Film是指原生为循序式影像,把每个图像经过拆场并重新排列让其变成一秒60场(60i)的交错式影像,这个过程称为Telecine,常见于电影或动画(原生24p的影像)经过2:3 pulldown的处理后变成60i的交错式影像,这种影像可以完美的还原为24p的循序式影像,只需将每两个场交迭并去掉多余的场即可,这种方法称为Inverse Telecine(IVTC 即反向Telecine)。

而madVR侦测到交错式影像,就会呼叫显卡去做硬件去交错(DXVA deinterlacing),不过madVR目前并不会判断它是video还是film,而一律视为video并呼叫DXVA deinterlacing,就算我们播的是film内容的交错式影像。有时候显卡自己的去交错算法并不能正确的执行IVTC,或是显卡经过IVTC后,一样是用3:2的pattern输出给60Hz屏幕,一样有judder问题,这时候我们就需要手动使用Ctrl+Alt+Shift+T这个指令将其切换为film,这时madVR就会用CPU执行它自身的IVTC算法,而我们就会得到完美的原生24P影像,如果再同时使用smooth motion FRC,就能在60Hz屏幕上得到无judder的播放。

不过译码器使用DXVA(native)的时候无法切换成film模式,如果要搭配硬解使用必须使用DXVA(copy-back),须注意

以我的经验来说,这个功能用在一些标准DVD格式的电影最为好用(标准DVD输出皆为交错式影像)。

另外电视台录制下来的电影跟动画(常见的为TS檔 60i),也可以使用IVTC算法将其实时还原为24p。

另外关于"Debanding custom settings"这个热键,其实是madVR隐藏起来的dabanding自定义参数功能,可以像测试版时期那样手动更改各项参数,左右键切换项目(被选择到的会变大写),上下键增减数值,至于各个参数的定义有兴趣请自行到Doom9上找,这功能我懒得玩了,默认值就很好用了。

接下来介绍在影像播放时按Ctrl+J叫出的OSD上面一些数据的意义,配合图上的标记解说:

  1. 目前的屏幕更新率。
  2. 影片帧率(音频时钟)与屏幕更新率(影像时钟)的偏移率,此数值越小表示越同步。
  3. 显示smooth motion FRC功能是否启用。
  4. 显示目前为D3D9或是D3D11模式;窗口模式、全屏幕窗口模式(fullscreen windowed mode)、或是全屏幕独占模式(fullscreenexclusive mode)或overlay模式;8bit或是10bit输出。
  5. 来源档案的编码、bit depth和色度信息以及译码器译码完传给madVR的色彩空间、bit depth和色度信息。
  6. 影片的帧数。(由源滤镜提供的信息判断)
  7. 每隔多久会掉1格,这与影片帧数和屏幕更新率的同步程度有关,另一篇会提到的Reclock有一个作用就是提高同步程度。
  8. 影片的原始分辨率及画面比例。
  9. 目标分辨率,有四组数字,分别是"left, top, right, bottom",必须把第三组减第一组 第四组减第二组才是目标分辨率的"width,height"。
  10. chroma(色度升频)和luma(影像亮度升频)和chroma(影像色度升频)所使用的算法
  11. 每一个帧容许的绘制时间,这个值跟影片的帧数有关,例如我看24p的影片时,这个时˙间就是1/24=0.04167s=41.67 ms,也就是说每一帧都有41.67ms的时间让显卡去处理;如果是60i的影片,去交错后是60p,这个时间就是1/60=16.67 ms,由此可见帧数越高,可以处理的时间变短了,对显卡的处理能力要求的也就越高,也就是说越容易掉帧。
  12. 影片进行YUV<>RGB转换使用的系数标准,由影像流的信息判断或是madVR自行判断。
  13. 影片的色彩定义标准(色域),由影像流的信息判断或是madVR自行判断。
  14. 影片的黑位范围,由影像流的信息判断或是madVR自行判断。
  15. on表示有开DXVADeinterlacing ,off表示没开,若madVR把循序式影像跟交错式影像判断错误的话请自行用热键Ctrl+Alt+Shift+D开关。若切换为film mode的话会在下方显示film mode,和侦测到的pulldown的形式。
  16. 各个queue是否充满通常能反应硬件是否能负荷,例如decoder queue很低的话表示CPU负荷不了了,render queue很低的话表示显卡负荷不了了。
  17. dropped frames跟delayedframes为掉帧计数器,若数字一直增加表示硬件无法负荷,请降低设定或找出原因。
  18. 平均绘制时间,通常也可观察GPU负荷情形,越好的算法跟较重的负荷通常会让绘制时间变多,多到超过movie frame interval的时间就会掉帧。
  19. 5秒区间内的最多绘制时间,观察GPU负荷的另一种方式,多到超过movieframe interval的时间就会掉帧。

========================================================================

显卡设置

最后,为了避免不必要的负面影响及显卡效能的多余消耗,请进显卡控制接口把一些跟影像播放有关的处理通通关掉只留下去交错的部分,当然madVR本来就会绕过这些后处理,但是有使用到DXVA-deinterlacing跟DXVA-scaling的时候还是会被影响(DXVA译码则没有影响,因为那跟渲染器无关),所以保险一点还是全部关掉。

以下以A卡的CCC为范例:

以Nvidia控制接口为范例,默认都是"使用视讯播放器设定",这个不用去改它:

如果屏幕接HDMI的话,建议使用RGB输出,不要用YCbCr输出,用YCbCr输出的话会在显卡层多一道色彩空间转换,造成画质损失,而且YCbCr都是输出16-235,只有RGB输出才能选择输出0-255或是16-235

N卡旧驱动有些接HDMI输出RGB也会强制输出16-235,但如果屏幕支持0-255的话,可以用madVR文件夹里的一个小程序"madLevelsTweaker.exe"强制让它输出0-255,如下图勾选并套用后重开机即可。

而N卡347.09之后的驱动,可以直接选择0~255输出不用透过madLevelsTweaker.exe修改

353.06之后位置改到这边

另外还有一个很重要的地方,最近的显卡驱动默认值都以省电为主,但是却会造成运行madVR时显卡不会用全力跑,造成效能比预期低落,以NV为例,必须到控制面板选取播放器执行文件(图中范例为mpc-be64.exe),把电源管理模式设定为"自适应"或"惯用的最大效能"(广域设定默认值是"最佳电源",一切的元凶…),如此才能让显卡全力运行madVR。而AMD的控制接口也有电源管理的相关选项要关掉,不然也是可能会降频跑。

到此整个设置就算大功告成,enjoy it!

关于madVR到底需要多少显卡效能的议题,这边也简单做个结论,第一当然就是跟你的设置息息相关,你启用了哪些功能,那些功能吃掉了多少效能?第二就是跟你看的影片种类有关,看的影片跟屏幕分辨率相同时消耗的效能最少,因为只需要做chroma upscaling(但影片本身分辨率越大,例如4K影片,光做chroma upscaling消耗的效能也不少)。而当影片分辨率跟屏幕分辨率不一样时,是放大还是缩小?再来就是影片的帧率,60p的影片稳定播放需要的效能会远大于24p的影片,再来就是interlaced跟progressive的差别,interlaced需要做去交错,所以一个60i的影片消耗的效能又比60p更大…这些不同种类的影片,我们可能都需要不同的设置去对应,因此madVR加入了profile的功能,提供最大的自定义弹性,这部分我将在另一篇文中介绍。

另外介绍madTestPatternSource filter用法,这是一个madVR用的测试工具,首先去下载

http://madshi.net/madTestPatternSource.zip

解压缩后点击里面的install.bat安装,方法跟安装madVR一模一样

然后打开播放软件,将文件夹里面的.ytp文件拖到播放软件上放开就会自动播放。

不过请注意.ytp檔只能在32bit的播放器上运行,如果使用x64播放器的话请另外抓x86版才能玩这个东西…

里面各种ytp档可测试各种不同的播放条件,下图为SmoothMotion的测试档,可自行测试不同帧率在自己屏幕上播放,有开跟没开SmoothMotion FRC的差别。

档名tag使用教学

其实这是早在v0.85.4版就加入的功能,还蛮实用的,特别提一下,当然随着版本更新陆续有一些新的tag加入。

madVR可以辨识一些在影音档的档名中加入的tag(标签),而在开启档案时套用tag上的设定,

这样一些需要特别设定的档案就不用每次都在那边手动调整

以下为所有的tag:

  • tag"matrix=709|601|NTSC|PAL|YCgCo|240M|2020"

  • tag"primaries=709|SmpteC|EBU|sRGB|NTSC|PAL|470M|240M|170M|2020|DCI"

  • tag"levels=PC|TV|fullrange|limited|doubleExp|tripleExp"

  • tag “deint=On|Off|Video|Film”

  • tag “blacklevel=%value%”, valuerange [-50, +50]

  • tag “whitelevel=%value%”, valuerange [-50, +50]

  • tag “contrast=%value%”, valuerange [-100, +100]

  • tag “brightness=%value%”, valuerange [-100, +100]

  • tag “saturation=%value%”, valuerange [-100, +100]

  • tag “hue=%value%”, value range[-180, +180]

  • tag “frameRate=%value%”, e.g.23.976, 24.000, 23, 24, …

  • tag “refreshRate=%value%”, e.g.23.976, 24.000, 23, 24, …

  • tag “deband=off|low|medium|high”

  • tag “profile=‘profile name’”

  • tag"dering(ing)=on|off|half|full"

举例来说,一个普通的档案,开启时会按照自动侦测的结果套用预设的设定。

以下以去交错方法为例子来说明,虽然是原生24p的电影,但因为电视录下来是60i的档案,开启时自动使用了显卡硬件去交错

文件名中加入标签"deint=Film",于是开启时自动使用了IVTC,不用再手动切换

以上只是简单的例子,基本上档案需要特别设置的色域、色阶、去交错方法、亮度、对比、饱和度、色相等等,都可以透过这种加tag方式来减少手动调整的麻烦

madVR Profile设置实战

萬年冷凍庫: 系列番外篇之2─madVR Profile設置實戰

这篇文章常年来随着版本更新增加删减不少内容,虽然我改完会大致看一遍但是难免会有所遗漏,如果你看了觉得哪里有前后矛盾或是文意不顺、文章内容跟现有madVR版本兜不上或是任何难以理解的地方,欢迎留言提问或指教,感谢!