POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
楼主: fish2fish
打印 上一主题 下一主题

找个动画片测了下A卡和N卡播放视频时画面的区别

[复制链接]
81#
发表于 2008-8-2 22:46 | 只看该作者
看下来,还是第3张差点
回复 支持 反对

使用道具 举报

82#
发表于 2008-8-2 22:53 | 只看该作者
关于这个问题我来说一下,对于A卡来说,驱动中有bug,Overlay下,default size播放视频的时候,两个chroma channel采用point resize,导致楼主说的A卡下字幕的问题,因为红色占据大量的V信号,但是overlay在拖动到任意非default size的情况下,对chroma channel的resize又开始起作用,看到的画面又会比较好,但是overlay本身不论是luma,还是chroma channel的resize都非常锐,导致在小画面拉伸到比较大的size的时候会出现网格(grid)。关于这个问题我多次向ATI反映过,他们第一次踢皮球,第二次索性不理。
目前用VMR9比较多,VMR9下,ATI的驱动对chroma channel默认统统做point resize,所以楼主的问题不会随拖动size大小而解决。我在nVidia的8400GS和8500GT上发现nVidia的VMR9的Chroma channel拉伸做得非常完美,这也是楼主看到的效果比ATI效果要的原因。但是nVidia的问题在于使用169WHQL驱动的情况下,对SD和HD都使用limited range,即16-235,不能拉伸到Full Range。幸亏VMR9还有shader,网络上有16-235->0-255的shader,不过我认为这种做法太简单,我自己写了一个,仅作参考:
ampler s0 : register(s0);
float4 p0 : register(c0);
float4 p1 : register(c1);

#define width (p0[0])
#define height (p0[1])
#define counter (p0[2])
#define clock (p0[3])
#define one_over_width (p1[0])
#define one_over_height (p1[1])

#define PI acos(-1)

static float4x4 RGB2YCbCr601 =
{
        65.473689369329, 128.426245019123, 25.1000656115476, 0.0,
        -37.8187503388942, -74.1812496611058, 112.0, 0.0,
        112.0, -93.6890841905523, -18.3109158094477, 0.0,
        0.0, 0.0, 0.0, 0.0
};

static float4x4 YCbCr6012RGB =
{
        0.0045662100456621, 0.0, 0.0062592266238858, 0.0,
        0.0045662100456621, -0.00154502886195404, -0.0031910507046555, 0.0,
        0.0045662100456621, 0.00790524846658726, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0
};

static float4x4 RGB2YCbCr709 =
{
        46.5679422858608, 156.621940650139, 15.8101170640007, 0.0,
        -25.6686477724839, -86.3313522275161, 112.0, 0.0,
        112.0, -101.730835816484, -10.2691641835164, 0.0,
        0.0, 0.0, 0.0, 0.0
};

static float4x4 YCbCr7092RGB =
{
        0.0045662100456621, 0.0 , 0.00703000887614723, 0.0,
        0.0045662100456621, -0.000836223613994593, -0.00209021192212653, 0.0,
        0.0045662100456621, 0.00828399718427916, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0
};

float4 main(float2 tex : TEXCOORD0) : COLOR
{
        float4 c0 = tex2D(s0, tex);
        float4 yuvc0 = {0, 0, 0, 0};

        if (height < 720)
        {
                yuvc0 = mul(RGB2YCbCr601, c0) + float4(16, 128, 128, 0);
                yuvc0.r = (yuvc0.r-16) / 219 * 255;
                yuvc0.g = (yuvc0.g-16) / 224 * 255;
                yuvc0.b = (yuvc0.b-16) / 224 * 255;

                c0 = mul(YCbCr6012RGB , yuvc0-float4(16, 128, 128, 0));
        }
        else
        {
                yuvc0 = mul(RGB2YCbCr709, c0) + float4(16, 128, 128, 0);
                yuvc0.r = (yuvc0.r-16) / 219 * 255;
                yuvc0.g = (yuvc0.g-16) / 224 * 255;
                yuvc0.b = (yuvc0.b-16) / 224 * 255;

                c0 = mul(YCbCr7092RGB , yuvc0-float4(16, 128, 128, 0));
        }

        return c0;
}
如果有问题欢迎指正。这样n卡使用这个shader也可以达到full range,不过这里界定SD和HD的我是依靠Hight,也有看Width的,这个没有固定的说法。

待续。。。
回复 支持 反对

使用道具 举报

83#
发表于 2008-8-2 22:54 | 只看该作者
关于ATI的问题,我自己就用ATI的卡,2600Pro,被这个问题搞的头疼,不过自己写了一个work around的办法,在shader中加入两个,一个是UV Blur,然后在UV Sharpen,使用最简单的高斯Kernel:
UV Blur:
sampler s0 : register(s0);
float4 p0 : register(c0);
float4 p1 : register(c1);

#define width (p0[0])
#define height (p0[1])
#define counter (p0[2])
#define clock (p0[3])
#define one_over_width (p1[0])
#define one_over_height (p1[1])

#define PI acos(-1)

static float4x4 RGB2YUV709Matrix =
{
        0.21263900587151, 0.715168678767756, 0.0721923153607337, 0.0,
        -0.21263900587151, -0.715168678767756, 0.927807684639266, 0.0,
        0.78736099412849, -0.715168678767756, -0.0721923153607337, 0.0,
        0.0, 0.0, 0.0, 0.0
};

static float4x4 YUV7092RGBMatrix =
{
        1.0, -0.00000000000000005288, 1.0, 0.0,
        1.0, -0.100944458984308, -0.297327067284168, 0.0,
        1.0, 1.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0
};

static float4x4 RGB2YUV601Matrix =
{
        0.29896661812479, 0.586421210132983, 0.114612171742227, 0.0,
        -0.29896661812479, -0.586421210132983, 0.885387828257773, 0.0,
        0.70103338187521, -0.586421210132983, -0.114612171742227, 0.0,
        0.0, 0.0, 0.0, 0.0
};

static float4x4 YUV6012RGBMatrix =
{
        1.0, 0.0000000000000000198, 1.0, 0.0,
        1.0, -0.195443428310234, -0.509815492616635, 0.0,
        1.0, 1.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0
};

float4 main(float2 tex : TEXCOORD0) : COLOR
{
        float4 c0 = tex2D(s0, tex);
        float4 yuvc0 = {0, 0, 0, 0};

        if (height>=720)
        {
                yuvc0 = mul(RGB2YUV709Matrix, c0);
                yuvc0.g = (      ( mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(0, 1/height)))).g*2 + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(0, -1/height)))).g*2
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, 0)))).g*2 + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, 0)))).g*2
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, 1/height)))).g + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, -1/height)))).g
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, 1/height)))).g + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, -1/height)))).g
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(0, 0)))).g*4)/16.0;


                yuvc0.b = (      ( mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(0, 1/height)))).b*2 + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(0, -1/height)))).b*2
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, 0)))).b*2 + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, 0)))).b*2
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, 1/height)))).b + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, -1/height)))).b
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, 1/height)))).b + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, -1/height)))).b
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(0, 0)))).b*4)/16.0;

                c0 = mul(YUV7092RGBMatrix, yuvc0);
        }
        else
        {
                yuvc0 = mul(RGB2YUV601Matrix, c0);
                yuvc0.g = (      ( mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(0, 1/height)))).g*2 + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(0, -1/height)))).g*2
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, 0)))).g*2 + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, 0)))).g*2
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, 1/height)))).g + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, -1/height)))).g
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, 1/height)))).g + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, -1/height)))).g
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(0, 0)))).g*4)/16.0;


                yuvc0.b = (      ( mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(0, 1/height)))).b*2 + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(0, -1/height)))).b*2
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, 0)))).b*2 + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, 0)))).b*2
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, 1/height)))).b + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, -1/height)))).b
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, 1/height)))).b + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, -1/height)))).b
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(0, 0)))).b*4)/16.0;

                c0 = mul(YUV6012RGBMatrix, yuvc0);               
        }

        return c0;
}

UV Sharpen:
sampler s0 : register(s0);
float4 p0 : register(c0);
float4 p1 : register(c1);

#define width (p0[0])
#define height (p0[1])
#define counter (p0[2])
#define clock (p0[3])
#define one_over_width (p1[0])
#define one_over_height (p1[1])

#define PI acos(-1)

static float4x4 RGB2YUV709Matrix =
{
        0.21263900587151, 0.715168678767756, 0.0721923153607337, 0.0,
        -0.21263900587151, -0.715168678767756, 0.927807684639266, 0.0,
        0.78736099412849, -0.715168678767756, -0.0721923153607337, 0.0,
        0.0, 0.0, 0.0, 0.0
};

static float4x4 YUV7092RGBMatrix =
{
        1.0, -0.00000000000000005288, 1.0, 0.0,
        1.0, -0.100944458984308, -0.297327067284168, 0.0,
        1.0, 1.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0
};

static float4x4 RGB2YUV601Matrix =
{
        0.29896661812479, 0.586421210132983, 0.114612171742227, 0.0,
        -0.29896661812479, -0.586421210132983, 0.885387828257773, 0.0,
        0.70103338187521, -0.586421210132983, -0.114612171742227, 0.0,
        0.0, 0.0, 0.0, 0.0
};

static float4x4 YUV6012RGBMatrix =
{
        1.0, 0.0000000000000000198, 1.0, 0.0,
        1.0, -0.195443428310234, -0.509815492616635, 0.0,
        1.0, 1.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.0
};

float4 main(float2 tex : TEXCOORD0) : COLOR
{
        float4 c0 = tex2D(s0, tex);
        float4 yuvc0 = {0, 0, 0, 0};

        if (height >= 720)
        {
                yuvc0 = mul(RGB2YUV709Matrix, c0);
                yuvc0.g = -(      (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(0, 1/height)))).g + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(0, -1/height)))).g
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, 0)))).g + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, 0)))).g
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, 1/height)))).g + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, -1/height)))).g
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, 1/height)))).g + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, -1/height)))).g)/8.0 + 2* (mul(RGB2YUV709Matrix, tex2D(s0, tex))).g;

                yuvc0.b = -(      (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(0, 1/height)))).b + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(0, -1/height)))).b
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, 0)))).b + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, 0)))).b
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, 1/height)))).b + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, -1/height)))).b
                                        +(mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(-1/width, 1/height)))).b + (mul(RGB2YUV709Matrix, tex2D(s0, tex+float2(1/width, -1/height)))).b)/8.0 + 2* (mul(RGB2YUV709Matrix, tex2D(s0, tex))).b;
                c0 = mul(YUV7092RGBMatrix, yuvc0);

                return c0;
        }
        else
        {
                yuvc0 = mul(RGB2YUV601Matrix, c0);
                yuvc0.g = -(      (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(0, 1/height)))).g + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(0, -1/height)))).g
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, 0)))).g + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, 0)))).g
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, 1/height)))).g + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, -1/height)))).g
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, 1/height)))).g + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, -1/height)))).g)/8.0 + 2* (mul(RGB2YUV601Matrix, tex2D(s0, tex))).g;

                yuvc0.b = -(      (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(0, 1/height)))).b + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(0, -1/height)))).b
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, 0)))).b + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, 0)))).b
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, 1/height)))).b + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, -1/height)))).b
                                        +(mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(-1/width, 1/height)))).b + (mul(RGB2YUV601Matrix, tex2D(s0, tex+float2(1/width, -1/height)))).b)/8.0 + 2* (mul(RGB2YUV601Matrix, tex2D(s0, tex))).b;
                c0 = mul(YUV6012RGBMatrix, yuvc0);

                return c0;               
        }
}

用MPC的combine shader来达成,注意顺序就可以了,当然ATI最好在注册表中打开UseBT601CSC=1的功能,这样在SD和HD下默认拉伸到0-255,在这种情况下nVidia和ATI的画面差别微乎其微,在用SMPTE监测的时候有细微的差别,应该是Convert Matrix系数的细微差别了。

以上仅供大家参考。
回复 支持 反对

使用道具 举报

haiou123 该用户已被删除
84#
发表于 2008-8-2 23:15 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

85#
发表于 2008-8-2 23:15 | 只看该作者
我自己用丽台的7900GS和我的蓝宝X1600PRO 在一台机器上对比 7900GS画面差太多了 总得来说就是苍白
回复 支持 反对

使用道具 举报

haiou123 该用户已被删除
86#
发表于 2008-8-2 23:16 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

haiou123 该用户已被删除
87#
发表于 2008-8-2 23:18 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

88#
发表于 2008-8-2 23:35 | 只看该作者
我是群众,实在看不出前两副的区别,可能眼神较差{shocked:]
这个测试应该不说是哪个卡,就放2个图,看看有几个分的出来的
回复 支持 反对

使用道具 举报

头像被屏蔽
89#
发表于 2008-8-2 23:47 | 只看该作者
96楼,你别跟我们说看个动画也要抗锯齿吧?A卡字幕为什么显得锯齿多?那是因为A卡显示效果细腻,该表现的都表现,N卡字幕是没锯齿,因为模糊了,少渲染了很多像素。
一直以来N卡都是以少渲染像素来加快速度的,所以画面比A卡淡,没层次感
回复 支持 反对

使用道具 举报

90#
发表于 2008-8-2 23:48 | 只看该作者
我觉得这没必要做比较吧,完全是个人感觉上的问题。很多时候不单单是显卡有异,显示器也有关系的。就好象用同样是N卡或A卡,用在AOC的屏幕上和用在SHARP的屏幕上会一样吗?我敢说同样的卡用再SHARP上,不单字体会清晰很多,颜色也会有分别。这是我个人的亲身体会。但我的一个做平面广告的朋友就认为还是G550用在钻石珑上面的颜色最真,其他的都靠边站。所谓我觉得画面还是自己喜欢就可以了,不要听人家左右为好..
回复 支持 反对

使用道具 举报

91#
发表于 2008-8-2 23:50 | 只看该作者
原帖由 bfg9000 于 2008-8-2 22:38 发表


第一张图下面的字边缘不平滑,但颜色最鲜艳

另外N卡的默认设置是0-255么?

默认是第三张图的16-235:rolleyes:
回复 支持 反对

使用道具 举报

92#
发表于 2008-8-3 00:07 | 只看该作者
原帖由 zq318 于 2008-8-2 23:47 发表
96楼,你别跟我们说看个动画也要抗锯齿吧?A卡字幕为什么显得锯齿多?那是因为A卡显示效果细腻,该表现的都表现,N卡字幕是没锯齿,因为模糊了,少渲染了很多像素。
一直以来N卡都是以少渲染像素来加快速度的,所以 ...

恩,有锯齿是渲染细腻是该表现的,色彩偏黄那是艳丽,很好很强大。

[ 本帖最后由 julian110 于 2008-8-3 00:09 编辑 ]
回复 支持 反对

使用道具 举报

93#
发表于 2008-8-3 00:10 | 只看该作者
原帖由 huge_nebula 于 2008-8-2 23:33 发表
下载下来对比没有任何区别

这个平面截图不可能有任何区别,即使你调过画面设置

因为截图和显卡无关,只是一种位图记录

很好很强大
你知道自己在说什么吗?[titter>[titter>
回复 支持 反对

使用道具 举报

94#
发表于 2008-8-3 00:16 | 只看该作者
感觉画面没有任何差别,字幕的话,A卡稍微锐利一点,但是不明显
回复 支持 反对

使用道具 举报

95#
发表于 2008-8-3 01:00 | 只看该作者
……LZ居然是用本组的MKV在测试……
回复 支持 反对

使用道具 举报

96#
发表于 2008-8-3 01:02 | 只看该作者
{titter:] a卡难道没发朦么?,我怎么觉得n卡更透亮啊

难道a卡的天空可以模拟crysis的very high效果:sweatingbullets:

上个P卡vmr9 2d看看哪个更接近{titter:]
回复 支持 反对

使用道具 举报

97#
发表于 2008-8-3 01:06 | 只看该作者
大家都是写轮眼。。。。看个动画片还要放大十倍的字幕。。。
回复 支持 反对

使用道具 举报

98#
发表于 2008-8-3 02:06 | 只看该作者
画面有区别,其中第2个,n卡效果最好。

ati本来就是个挺不要脸的公司。不过比起以下几位粉丝。。呵呵 呵呵

ktv123
"A 显得饱满 N 显得苍白"

lptt3
我来教你看。我不fan a也不fan n,只是根据事实说话。
好了,你现在得坐远一点点,如果眼睛离得屏幕太近,反而不用以分辨。
1.先看人物的袖子。。。看出来区别没有?白色的部分,第一个画面最白,第二各画面有点偏米黄,3最差是肯定的了。
2.看袖子上灰色的阴影,是不是觉得第二个画面的灰色有点偏色,第三个最差。
3.看下方的"际“字,一的最白,二次之,三最差。。。

Gartour
"1、2之间对比,A卡白色更白,裙子更红。不过差别很小"


自己把图片拖到photoshop里,用取色笔看看画面。1,2张袖子上最白的地方都是240,240,240左右。裙子上最红的地方都是140, 72,75左右。

[ 本帖最后由 正宗兔巴哥 于 2008-8-3 02:09 编辑 ]
回复 支持 反对

使用道具 举报

99#
发表于 2008-8-3 06:09 | 只看该作者
老家伙 钻石珑显像管儿 Qudro 3450 SDI 输出 没看出什么区别 液晶除了艺卓 其他我看还是不要提颜色了 呵呵 再有 经过压缩的东西就不要拿出来玩儿了 颜色都已经偏了 比个鸟啊

[ 本帖最后由 mayalan 于 2008-8-3 06:14 编辑 ]
回复 支持 反对

使用道具 举报

100#
发表于 2008-8-3 06:21 | 只看该作者
n卡0-255和a卡差不多的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2024-5-6 01:21

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表