Chango的数学Shader世界(十四)细线间断,发光闪烁,TAA削弱处理
目的:
减少游戏中的细线因屏幕分辨率不足和算法采样不足问题,导致的间断,以及相对的自发光闪烁。解决了此问题也附带解决了因TAA导致的细线自发光微弱的问题。
对比视频:https://www.bilibili.com/video/av67438336
参考:
无,原创。外网UE4 AnswerHub有类似问题,但无正确的解决方案。
观察:
方块的边缘线条材质,是根据UV坐标判定的材质,因视效要求,其边是完全"硬"的。也就是说,比如uv.x<0.1,自发光为90;一旦大于0.1,自发光就是0。
这样的材质,边缘线细,自发光高。
会出现如下问题:
1.一旦拉远,线开始间断:
2.一旦拉远,因TAA关系,线条开始闪烁,自发光开始闪烁;线有时变得过分细,自发光被削弱(无AA,FXAA,TAA):
(无AA和FXAA基本一样,只是FXAA边缘更模糊,TAA显得像是没有自发光,并线条闪烁)
当我把材质自发光减少到1(无AA,FXAA,TAA):
(无AA和FXAA基本一样,只是FXAA边缘更模糊,TAA显著改善,但线条闪烁难忍)
分析:
1.为何拉远线条间断?
你可以在任意3维软件(游戏引擎,游戏,拟真软件,GIS系统)中,由近到极远地观察细线。只要线不是完全垂直或水平,你会发现远到一定程度时,线条会先出现明显的锯齿,然后是很奇妙的带周期性的间断,最后消失(一般软件不会让你看到这么远)。
这个问题无法100%解决,处理方法也多种多样。就我最近看到的,《底特律·变人》中,采用了真实镜头景深,这样你远处的线就模糊了。(讲道理,如果我们的眼睛没有景深,岂不是也有锯齿...)
问题发生的实质:采样不足,不符合Nyquist定理
在此案例中,也就是uv采样不足,屏幕分辨率不够细+算法问题。回看文章二中采样不足后发生的奇妙的周期性波形:
是否和采样不足的间断线有些类似呢?
由于线条在视口中急剧减小,间断线的波长会稳步变大。但其因采样不足所导致的周期性是一致的。
要澄清一点,这里的线这么近就开始间断,与uv采样不足也有关系。也就是我们的Shader的那个"硬边",加剧了采样不足。
1.1线条间断问题
下面抽象地分析发生锯齿和间断地原因。图中的方格即是1个像素。
这个锯齿和传统锯齿没啥区别,抗锯齿算法也能基本应付。当采样点实在少了,锯齿实在大了,抗锯齿算法也无能为力。
周期性间断就是锯齿的夸张大采样版。
1.2TAA导致的线条闪烁->自发光闪烁;线条削弱->自发光削弱问题
接上面线条间断,这里能看出为什么TAA的一些优劣。
因为TAA算法本质是在玩家视点微调不同的角度,采样出的像素再平均。
同一条线在屏幕上以不同的斜率被采样过,间断有可能因此减少。
但因不随机断微调视角,结果又不稳定带来的难以忍受的闪烁。
(TAA抖动原理见某乎文章:https://zhuanlan.zhihu.com/p/41642855)
而且有些线条因为微调视角后都采样到的主要是方块内红间,平均下来,把亮边部分的亮度给稀释了,如上图3左下角的线段。
1.3UV采样导致的线条削弱->自发光削弱
即使不用任何AA,由于原材质的硬边,也会导致线条削弱问题。
下面抽象地分析原因。假设亮边部分值为1,方块内为0。
假设当采样步长为0.01,此时的亮边处于正常状态。
当采样步长为0.03(也就是方块离我们远了,现在1个像素代表的世界长度是原来的3倍),问题开始出现了:
p1,p2,p3没问题。p4照理来说应该是“三分之一个亮边”,但因中心点采样到uv.x>0.1,判定为0个亮边。这和实际是相违背的。
这本质上还是一个锯齿问题。。。
我们怎么做?想办法让p4就等于0.3啊。
于是和抗锯齿基本的解决办法—与周围作平均(模糊边缘)一样,我们想办法让亮边函数不再是阶越函数,而是模糊的连续函数。根据具体情况,调整连续函数的参数。
根据我们上面的推导,模糊边虽然近看不符合视效要求,但远看符合真实的效果。
效果对比(无AA,TAA):
其函数的连续性也顺带解决了TAA的抖动问题。
通过对不同距离段调整参数,获得不同的亮边函数,再根据距离判断,插值,能得到最终的解决方案。
解决方法虽然很简单,但知道在哪里画这个圈需要9999美元。
步骤:
由于我是instanced Mesh。所以不可能多个材质切换。只能在一个材质里根据距离切换函数。又发现ue4 instanced mesh中objectWSP-cameraWSP是固定的,但pixelDepth可以获得,所以根据pixelDepth切换。
我简单分了3个LOD。
LOD0是硬边函数,用于近处。
LOD1和LOD2是参数不同的软边。
其中LOD0切到LOD1和LOD1切到LOD0作了基于距离的lerp。因为0切到1距离很近(很近就开始出现锯齿了)。
而LOD1-2之间没有作lerp,因为太远看不清,没必要。
结语:
Chango的数学Shader世界(十四)细线间断,发光闪烁,TAA削弱处理相关推荐
- Chango的数学Shader世界(十五)油画Shader-技术分析,教程纠错
目的: 实现油画后期Shader,探究教程中技术细节,指出错误. 参考: 搜索ue4 paint filter. UE4.21后整合自定义usf 观察: 油画的特点:成块的色块,但又保持清晰的边缘. ...
- Chango的数学Shader世界(八)光盘模拟-各向异性,光栅衍射
目的: 参考<GPU Gems>,在UE4中尝试以重现光盘Shader,并对书中的方法进行解析,改进,批评. 参考: <GPU Gems> 观察: 我越来越意识到观察现实的重要 ...
- Chango的数学Shader世界(七)水波模拟-透明水面,菲涅尔(Fresnel)效应
目的: 解析,改进,批评一个国外免费透明水面Shader,进一步了解Shader背后的物理原理. 参考: 菲涅尔反射 分析: 我将原水面Shader一再简化,从中抽取最主要的部分,忽略细枝末节,并改掉 ...
- Chango的数学Shader世界(九)流体模拟-散度,梯度,二阶导与拉普拉斯
目的: 参考<GPU Gems>,在UE4中尝试重现2D流体模拟. 本节试图结合场论知识粗略理解Navier–Stokes equations. 参考: <GPU Gems> ...
- 数学之美 十四 谈谈数学模型的重要性
数学之美 十四 谈谈数学模型的重要性 [注:一直关注数学之美系列的读者可能已经发现,我们对任何问题总是在找相应的准确的数学模型.为了说明模型的重要性,今年七月份我在 Google 中国内部讲课时用了整 ...
- 零基础带你学习MySQL—数学函数(十四)
零基础带你学习MySQL-数学函数(十四)
- 数学:确定性的丧失---第十四章 数学向何处去
发信人: paradax (秀树*冬眠中...), 信区: Philosophy 标 题: 数学:确定性的丧失(15) 发信站: 北大未名站 (2002年10月23日22:40:41 星期三), 转 ...
- 2022年第十四届“华中杯”大学生数学建模挑战赛
2022年第十三届"华中杯"大学生数学建模挑战赛 为了推广我国高校数学建模实践教学,培养学生的创新意识及运用数学方法和计算机技术解决实际问题的能力,第十四届"华中杯& ...
- 2022年第十四届全国大学生数学竞赛
11.12非延迟地区开赛啦,小编为大家整理了2022年第十四届全国大学生数学竞赛真题加标答 希望帮到大 家 大学竞赛君自做答案90+,延迟地区的小伙伴也可以辅导
最新文章
- 阿里P8架构师谈:大数据架构设计(文章合集)
- 你第一次去丈母娘家时发生了哪些趣事?
- HttpClient发送get post请求和数据解析
- Java面试题之分布式事务篇
- phpStudy启动失败时的解决方法 提示缺vc9运行库
- spring 使用aop 缺少依赖包aspectjweaver.jar 和spring-aop.jar报错
- 人工智能时代的投影融合软件
- DRAM知识整理系列(三):部分时序参数整理
- 动态链表头插法 和 动态尾插法
- 大数据小项目之电视收视率企业项目07
- Geany全黑主题首发教程
- 微信小程序图片(单图多图上传显示)
- 常系数非齐次微分方程特解及其通解求解
- 华三交换机如何进入配置_H3C交换机如何配置登录用户名和密码
- spoolsv.exe占cpu 99%的解决方法
- PVE安装ros系统
- vs用Python爬数据?(一)网页抓取
- android 定时推送提醒,使用workManager实现每日定时推送通知
- 【操作系统笔记(四)】CPU管理的核心:多进程图像
- 066访问二进制文件