半像素引起的那些坑

来源:互联网 发布:网络带来的弊端 编辑:程序博客网 时间:2024/05/14 17:47

DX9下面的半像素偏移估计坑了不少人,经常不小心半像素偏移搞错就会引起很奇怪的原因,最后查了半天才发现是这么小一个问题,实在令人有些恼火,所以在DX10之后这个东西被当做垃圾直接给扔了,在DX9下面还不得不继续被其迫害。大概想了一下我被这个问题坑了好几回了,有些已经想不起来了,只能把想起来的先记下来:

1.UE3早期版本的AutoBrightness有个很诡异的问题,AutoBrightness大多时候的确起作用,但是美术报了个bug说有时候不起作用,重现了几次都是可以正常工作啊,后来让美术一起来测,后来终于在测了10分钟后发现了规律,当太阳在屏幕中心的右边是的确起作用,一切正常,当太阳移到屏幕左边时发现完全不起作用啊,赶紧PIX抓下来一步步分析,果然在AutoBrightness最后downsample到1x1的rt时不对了,点开mesh详细比较了一下,问题就在于半像素偏移,前面的downsample虽然也没处理半像素偏移但是因为不是1x1的rt,所以还能大致正确,到了最后一个downsample的时候只有1个像素,这时候半像素就是很大的问题了,速度改之,验证通过:)

2.ssao曾经在业界风靡一时,当然现在还依然狂热,是个游戏都有ssao,没ssao都不好意思跟人家讲,实际上个人很不喜欢ssao,噪声太明显,让画面闪烁变得很明显,为了降低噪声UE用了ASSAO,这虽然解决了噪声,但是因为需要ReProjection,对于动态物体ReProjection其实是错的位置,所以需要将动态物体标出来,而且有个积分的过程会对ao带来所谓的ghost也就是拖尾;另外如果调的不是很明显就看不出来了,所以很多游戏都调的很夸张,让脚底下或者墙面下变得很黑,让人觉得画面很脏。当时也尝试了这个风骚的技术,但是cast出来的ray导致的结果非常奇怪,很多地方camera所谓移动就有非常不稳定的结果出现也就是说会突然有突然没,查了好久最后才发现采Depth的时候没考虑半像素偏移,这个depth在屏幕空间虽然只有半个像素,但是depth会反算到世界坐标是让后才cast ray的,屏幕空间半个像素到世界坐标系可能就是几米几十米,这样导致结果就很不稳定了,因为反算到的中心位置其实是个错的。

3.前段时间打算提高一下树叶的aa,做了个尝试,在debug的时候发现了个诡异现象,我只是copy一个分辨率一样的贴图到rt,没有任何缩放,但是画出来的结果却变的很模糊,查了下renderstate发现用了linear,即便是Linear也不该有问题啊,果断PIX,罪魁祸首又是半像素,原因是没有考虑半像素偏移的话再加上Linear相当于输出的像素是采了周围四个像素做了个平均,所以就模糊了


关于半像素还有些问题一时没记起来,等下次记起来再补上吧。

0 0
原创粉丝点击