yebis error ---depth of field

前几天在墙外无法登陆cnblogs。。。导致很多blogs就没写了

有几篇比较值得记下来的,但是我已经不记得了,应该和sao有关scalable ambient obscurance  

我似乎回忆起一点来

http://graphics.cs.williams.edu/papers/SAOHPG12/

sao的实现我抄得这里,效率还行,这个跑不起来,因为要基于他自己的G3D的库 大概是这名字。。真不知道这些人怎么想的

我在不能调试的基础上,照着其他ao的流程 把这做出来了,主要遇到两个问题

1。depth 像论文所说要经过对depth的非线性处理 

2。normal数据,这问题坑了我很久。当时我不想用sao算法就是因为他没用normal数据我觉得这样多渣啊,我就自己用了normal数据,结果。。。。就很不对。。。就是这样

就要ddyddx重建才可以

好了进入正题,dof遇到了这样很诡异的问题

我用yebis在ui前后画了两遍

第一遍开了dof第二遍没开,这样 

如果我在一 frame的第二次 yebis render set dof false 就会在release version 打开某个菜单时 出现 unmap gpu page excetion

加断点后没有异常,debug么有异常,razor抓不到什么异常信息

在我各种排除之后,。。。。科学的手段完全无法帮助我,我就去刷知乎了,玩了很久,我觉得 靠直觉来讲也许是msaa 

真的就猜对了。。。定位成功,因为这个error在我多次测试后发现,和某个没有。。。处理的page有关

问题具体来说是这样的,在有msaa的情况下, 当初yebis需要一张depth target作为 source 需要没有resolve的msaa depth target

但phyre会把msaa target 都resolve掉,这其实就是说 换了一块 target

第二次渲染yebis之后 ui又需要resolve之后的target 这就是需要解决的地方 

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

以上测试可以确认这个问题和msaa那两块 resolve前后的 depth targets相关 

最让我感到奇怪的地方是和debug version , release version相关 

debug 没问题 release 有问题,各种测试和核对 代码上来讲 两个版本没有潜在可以导致两者不同的差异

所以怀疑是  时间, 加了延时 确实管用

这东西折腾我到半夜一点

后来联系了silicon他们首先说 什么??!!你们一frame调用两次yebis applyeffects()??! 

表示他们不支持 ,后来他们修了下。。。。解释说

有个buffer在指令还没结束时就写入导致的 双缓冲 

改成4个可以解决 one frame applyEffect twice的问题

原文地址:https://www.cnblogs.com/minggoddess/p/4912051.html