欢迎光临散文网 会员登陆 & 注册

光照模型的量化缺陷和噪声抖动缓解

2022-10-01 14:36 作者:DeadCyber  | 我要投稿

范例一:dot(N,L)的色阶问题

各光照模型都存在dot(N,L)一项。可如果你在低光强场景,大平面上去看这个计算结果,基本上都能看到“阶梯状”的不平滑:

如果不相信我说的,那可以看一下我在shaderToy上展示的范例,最简单的dot(N,L):

https://www.shadertoy.com/view/NldfRl

小图看不出色阶,得全屏,注意看评论

在部分手机和电脑屏幕中,即能看到色阶,全屏shader后会比较明显。(在我的手机上,由于屏幕电路板内置抖动算法,所以不明显)。

根本原因是我们的物理屏幕在2022年还达不到RGB24(即R8,G8,B8,也就是2^8=256色或256^3=16,777,216色)以上的颜色精度(甚至大部分硬件屏幕不严格满足,许多低端硬件因为只有10来位色,所以为了缓解色阶问题,在电路中内置抖动算法)。

阶段总结:

只要是细腻的颜色变化,就会在当代屏幕上产生色阶,这是数据精度>显示精度 造成的。

声明:

为什么我要说这是“光照模型”的缺陷呢?明明是硬件问题。因为任何一个光照模型总归会产生数据,这些数据总归要量化,今天有256色问题,明天就会有512色问题。我认为计算机渲染学科应当将处理手段——噪声抖动,加入到光照模型中,使得学习者能从一开始避免掉这些问题,因为“光照模型”本身就是一个非常经验化的东西。

范例二:GGX高光的跨阶问题

在使用procedural normal map的时候,我发现对于高光部分,只要normalMap对法线稍微“过分”的偏转,从非正面看的时候,就会有明显的"切割感"。对于diffuse比较亮的材质,不明显;当diffuse项贡献低,specular高的时候,这种切割感变得无法接受:

图金1

甚至不需要看这种复杂材质,只要让N = normalize(N+0.1*T)就行了,从-T方向的侧边看去,就会有严重的分割感:

实际上跟到PBR_GGX的公式里看的时候,这个现象是“合理”的。有两种情况的黑色

  1. “黑色”部分就是该金属的diffuse部分,由于眼睛没有正对着光线反射方向,所以没有高光,基本全黑,参考镜子。

  2. normalMap“过分”调偏了N,使得dot(N,V)<=0或者过分小,代入PBR公式变黑,并且边缘power特别明显,带上颜色后基本只能看到硬硬的分界直线。传统光照模型中不存在dot(N,V)项,并且多用H,所以这个现象不明显。可以类比在Unity中把NormalMap的强度过分增强,结果往往是变黑变脏。

对于情况2,可以适当调节normalMap的强度。可是对于情况1,可以参考图金1的蓝色勾和叉部分,其实都是正常的,但是叉部分看着就是比勾部分生硬得多。

怎么解决呢?参考范例一中的噪声抖动,往金属上撒上噪声,也就是N加上噪声,减弱色阶问题,加强整体联系感:

这个黑色“跨阶”问题大不大,其实很大程度上取决于你的大脑主观意识,一但你接受了“它是镜子正常黑”这一正确观点,其实就完全感觉不出来问题;反之,就会总觉得有怪黑色像坏了的normalMap。类似以前很火的裙子黑金还是白蓝问题。

我下面上3张动视角图,读者可以自行去感觉这个黑色问题:

图g3

如果单看图g3,并去掉噪声(于是黑金的边缘便十分硬),也许你会觉得这个黑色区域十分不合理。

看到这,不知读者是否赞同我的观点,噪声抖动应该加到光照模型里面,或者至少应该成为我们学习图形学的必经之路,但可惜国内学习路径里很少看到谈它。

光照模型的量化缺陷和噪声抖动缓解的评论 (共 条)

分享到微博请遵守国家法律