[工作积累] TAA Ghosting 的相关问题
因为TAA要使用上一帧的历史结果,那么在相机移动的时候,颜色就会有残留,出现ghosting(残影)。
由于上一帧历史是累积的,是由上一帧的直接渲染结果和上上帧的结果做了合并,所以ghosting并不是一帧就消失,要累积一段时间才会消失。
处理ghosting有很多方法,比如depth based rejection和velocity weighing, 现在最流行的方法,大概也是最好的方式是用neighbor AABB clip。
1.首先取当前帧,当前像素周围的几个颜色,比如4个颜色,得到最大值和最小值
2.用最大值和最小值构建AABB,(比如RGB空间的包围盒)
3.用这个AABB去clip 上一帧相同位置的像素颜色,把差别比较大的颜色拉得接近
这个做法整体效果不错,但有一个问题非常恶心。就是如果当前帧的颜色比较高频的时候,AABB clip会没有效果。举一个极端的例子:
(0,0,0)
(1,1,1) C (0,0,0)
(1,1,1)
比如当前帧里包含黑白噪声,那么对于一个像素C, 周围的颜色如上图。
得到的AABB,最小值RGB(0,0,0),最大值(1,1,1)
这个AABB已经覆盖了整个RGB空间(LDR),所以拿他对上一帧的历史颜色做clip的时候,所有颜色都在AABB内,颜色都会留下来,结果就是还是有ghosting。
目前还没看到很好的解决方法。去年(2016)SIGGRAPH2016上naughty dog的一个slide提到了一种解决方法:
Temporal Antialiasing in Uncharted 4:http://advances.realtimerendering.com/s2016/s16_Ke.pptx
1.拿stencil 标记这些高频颜色
2.根据stencil,在做TAA的时候跳过这些颜色。这样这块区域就和处理了TAA的区域有明显的差别,边缘有颜色裂缝
3.根据stencil,对这些颜色做模糊。 (因为TAA多少都有模糊,对TAA没有处理的这些区域,单独做模糊可以去掉裂缝)
大概是这个过程。属于比较hack的workaround。看起来还可以,但是,最大的问题是,这种修复方法需要: 见哪儿修哪儿,也就是要靠人肉处理,看到哪个地方有问题,就打标记。缺点如下:
1.人肉工作量可能很大(美术、QA)
2.覆盖度问题。没看到的地方,可能也有问题但是没处理
INSIDE的TAA对ghosting处理的效果要好点,但是整体更加模糊,清晰度没有UE4好。
目前看来TAA效果还可以,但是存在的问题不太好处理,也不支持VR。
MSAA对于deferred管线来说来浪费显存和带宽。
另外也看了UE4的AGAA的ppt,虽然效果不错,但是对渲染管线的侵入和改动太大
[工作积累] TAA Ghosting 的相关问题的更多相关文章
- [工作积累] UE4 TAA ReProjection的精度处理
先贴一个UE4 TAA的slidehttps://de45xmedrsdbp.cloudfront.net/Resources/files/TemporalAA_small-59732822.pdf ...
- TFS工作项数据统计及相关数据库结构分析
今天为客户的质量管理部门人员提供TFS咨询过程中,客户的质量管理专家基于TFS提出了一个比较棘手的数据统计需求.需求是这样,客户的数十个软件项目通过质量管理部按照年度版本计划进行软件产品系统的发布,因 ...
- [工作积累] Google/Amazon平台的各种坑
所谓坑, 就是文档中没有标明的特别需要处理的细节, 工作中会被无故的卡住各种令人恼火的问题. 包括系统级的bug和没有文档化的限制. 继Android的各种坑后, 现在做Amazon平台, 遇到的坑很 ...
- [工作积累] shadow map问题汇总
1.基本问题和相关 Common Techniques to Improve Shadow Depth Maps: https://msdn.microsoft.com/en-us/library/w ...
- [工作积累] 32bit to 64bit: array index underflow
先贴一段C++标准(ISO/IEC 14882:2003): 5.2.1 Subscripting: 1 A postfix expression followed by an expression ...
- [工作积累] bitfield
ISO/IEC 14882:2003: 9.6 Bit-fields [class.bit] A member-declarator of the form identifieropt : const ...
- [工作积累] GCC 4.6 new[] operator内存对齐的BUG
对于用户没有定义dctor(包括其所有成员)的类来说, new CLASS[n] 可能会直接请求sizeof(CLASS)*n的空间. 而带有dctor的 类, 因为delete[]的时候要逐个调用析 ...
- [工作积累] UE4 并行渲染的同步 - Sync between FParallelCommandListSet & FRHICommandListImmediate calls
UE4 的渲染分为两个模式1.编辑器是同步绘制的 2.游戏里是FParallelCommandListSet并行派发的. mesh渲染也分两类,static mesh 使用TStaticMeshDra ...
- [工作积累] D3D10+ 中 Pixel Shader 的input semantic和参数顺序
由于semantic的使用,我们有理由相信 vertex shader的output 和 pixel shader的input是按照semantic来匹配的,而跟传入顺序无关.印象dx9时代是这样. ...
随机推荐
- Win7下“回收站已损坏,是否清空该驱动器上的回收站”解决方法
最近买的移动硬盘,总是不能进行安全删除,有事还会提示“回收站已损坏,是否清空该驱动器上的回收站”,可以通过下面的命令进行解决: 开始–>运行–>cmd 点确定 在cmd窗口输入rd /s ...
- Linux 设备驱动之字符设备
参考转载博客:http://blog.chinaunix.net/uid-26833883-id-4369060.html https://www.cnblogs.com/xiaojiang1025/ ...
- jvm参数及分析工具
-Xmx4G 设置堆的最大内存大小为4GB,也可通过-XX:MaxHeapSize=4GB进行设置 -Xms256m 设置堆的初始内存大小为256兆,如果未设置此选项,则初始大小将设置为新生代和年老代 ...
- spring cloud + spring boot + springmvc+mybatis分布式微服务云架构
做一个微服务架构需要的技术整理: View: H5.Vue.js.Spring Tag.React.angularJs Spring Boot/Spring Cloud:Zuul.Ribbon.Fei ...
- Java中常见的分页算法
在查询数据的时候或者展示数据的时候经常会使用分页,介绍几种简单的分页算法: //总的页数 int total = 30: //每页个数 int pageSize = 6; 1.one int ...
- Java泛型之自限定类型
在<Java编程思想>中关于泛型的讲解中,提到了自限定类型: class SelfBounded<T extends SelfBounded<T>> 作者说道: 这 ...
- Spring4中使用通用Mapper
1. 在Spring4中使用通用Mapper Spring4增加了对泛型注入的支持,这个特性对通用Mapper来说,非常的有用,可以说有了这个特性,可以直接在Service中写Mapper<U ...
- tcp的粘包现象与解决方案
粘包现象: 粘包1:连续的小包,会被优化机制给合并 粘包2:服务端一次性无法完全就收完客户端发送的数据,第二再次接收的时候,会接收到第一次遗留的内容 模拟一个粘包现象 服务端 import socke ...
- 连号区间数(2013年第四届c/c++ b组第10题)
题目描述 标题:连号区间数 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个 ...
- centos安装MySQL5.7
Mysql安装 一.查看是否安装MySQL # rpm -qa | grep mysql 二.查看所有mariadb的软件包 # rpm -qa | grep mariadb 三.删除相关的maria ...