使用时空蓝色噪声纹理实时渲染一

描述

蓝色噪波纹理可用于提供每像素随机值以在渲染中生成噪波图案。蓝色噪声纹理比随机数生成器或散列(两者都是白噪声)产生的噪声更难看到,也更容易去除。要使用蓝色噪波纹理,请在屏幕上平铺它,使用最近邻点采样读取纹理,并将其用作随机值。

在本文中,我们将时间轴添加到蓝色噪波纹理中,为每个帧提供高质量的空间蓝色噪波,并使每个像素随时间变为蓝色。与其他蓝色噪声动画方法相比,这提供了更好的收敛性和时间稳定性。我们还将向您展示如何制作非均匀的蓝色噪波纹理,以便进行重要采样。我们将在后续文章 使用时空蓝色噪声纹理实时渲染,第 2 部分 中进行更深入的技术探讨。

虽然 other methods 结合了蓝色噪声和更好的收敛性,但它们首先关注收敛性,其次关注蓝色噪声。我们的工作首先关注蓝色噪声,其次关注收敛,这有助于在采样数最低的情况下获得更好的渲染效果,而蓝色噪声的好处最大。

蓝色噪声纹理的一个显著限制是,它们在低采样数、低维算法中效果最好。对于高采样数或路径跟踪等算法中的高维,您可能希望切换到低差异序列以消除错误,而不是试图用蓝色噪声隐藏错误。

同样值得一提的是,在 TAA 下运动的像素失去了时间上的好处,我们的噪声就如同纯粹的空间蓝色噪声。然而,在一瞬间仍然是偶数的像素获得了时间稳定性和较低的误差,当它们再次运动时,这将由 TAA 携带。在这些情况下,我们的噪声并不比空间蓝色噪声差,因此应始终使用它,以在可用的情况下获得好处,否则不会更糟。

使用随机单次散射,其中自由飞行距离随时间使用一系列蓝色噪声遮罩进行采样。传统的 2D 蓝色噪声遮罩(最左侧)很容易在空间上进行过滤,但随着时间的推移,会显示出白噪声信号,使得基础信号难以在时间上进行过滤。

我们的时空蓝色噪声( STBN )遮罩(大图像右侧)在时间维度上还表现出蓝色噪声,导致信号更容易随时间过滤。在最右边,我们展示了主图像的两种裁剪,以及它们在空间( DFT ( XY ))和时间( DFT ( ZY ))上的相应离散傅里叶变换。 Z 轴是时间。大图像中的插图(右上角和右下角)显示了地面真相。

标量

标量时空蓝色噪波纹理存储每个像素的标量值,对于需要每个像素的随机标量值的渲染算法非常有用,例如随机透明度。通过 在 3D 中运行 void 和 cluster 算法 生成这些纹理,但修改能量函数。

计算两个像素之间的能量时,仅当两个像素来自同一纹理切片(具有相同的 z 值)或在不同时间点是相同的像素(具有相同的 xy 值)时,才返回能量值;否则,它返回零。结果是 N 纹理,在空间上是完全蓝色的,但每个像素在 z 轴(时间)上也是蓝色的。在这些纹理中,( x 、 y )平面是与屏幕像素相对应的空间维度, z 轴是时间维度。在每帧 z 尺寸上前进一步。

图 2 显示了时空蓝色噪波、一组独立的 2D 蓝色噪波纹理和 3D 蓝色噪波的示例纹理以及 XY 和 XZ DFT 。只有我们的噪声在空间( XY )上是蓝色的,在时间( Z )上是蓝色的,正如你可以从中心的变暗中看到的,在那里低频会衰减。

在图 2 中, 3D 蓝色噪声的各个片段在空间和时间上都不好。只有我们的时空蓝色噪声在空间和时间上都是蓝色的。有关为什么 3D 蓝色噪波对设置蓝色噪波动画不有用的更多信息,请参见 3D 蓝色噪音问题 中 Christoph Peters 的精彩解释。

NVIDIA

NVIDIA

图 2 。二维蓝色噪波在空间上是蓝色的,但在时间上不是很好的采样

图 3 显示了在黑色背景上 50% 透明的纹理,使用噪波进行二元 alpha 测试(随机透明度),并使用 temporal anti-aliasing ( TAA )进行过滤。

独立的蓝色噪波纹理是对白色噪波的显著改进,它在每一帧中都有一组均匀分布的幸存像素。与白噪声相比,这种方法对于邻域采样抑制效果更好,白噪声具有残存像素的团块和空洞。时空蓝色噪波通过使每个像素在时间上均匀分布的帧上存活下来而表现得更好,从而获得更收敛、更稳定的结果。

NVIDIA

图 3 。在 TAA 下,使用各种类型的噪声进行 50% 透明度的随机透明度测试

在图 3 中,白噪波(左)非常嘈杂,因为蓝噪波(中)中不存在团块和空洞。我们的时空蓝色噪声通过使像素不仅在空间上而且在时间上均匀地存活而做得更好。

载体

矢量时空蓝色噪波纹理存储每个像素的矢量值,对于需要每个像素的随机矢量的渲染算法非常有用,例如光线跟踪环境光遮挡。您可以通过在 3D 中从 蓝色噪声抖动采样 ( BNDS )运行算法来生成这些纹理。你在那篇论文中对能量函数做了同样的修改,就像你在 void 和 cluster 中对标量做的一样。如果它们来自同一纹理切片,或者它们在不同时间点是同一像素,则仅返回非零能量。

结果还是 N 纹理,在空间上是完全蓝色的,但每个像素在 z 轴上也是蓝色的。可以使用单位向量,这在需要方向向量的情况下很有用,也可以使用非单位向量,这在只需要 N 维随机数(如空间中的点)时很有用。

图 4 显示了向量值时空蓝色噪声的切片,以及它们在空间和时间轴上的频率分量。这表明它们在空间上是蓝色的,在时间上是蓝色的。

NVIDIA

图 4 。 128x128x64 时空蓝色噪声纹理及其频率显示为维度 1 、 2 和 3 的单位向量和非单位向量。

图 5 显示了使用各种类型的单位 vec3 噪声的 4 个逐像素光线跟踪环境遮挡( AO )样本。如果向量朝向法线,则该向量为负值。白噪声、独立的蓝色噪声纹理和时空蓝色噪声之间的质量差异非常明显。

NVIDIA

图 5 。使用均匀分布的光线对每像素 AO 进行四次采样。蓝色噪声比白色噪声好得多,而时空蓝色噪声比蓝色噪声好得多,因为随着时间的推移采样效果更好。

重要性抽样

BNDS 算法从一组白噪声纹理开始,并重复随机交换像素(如果交换改善了能量函数)。但是,没有理由必须将这些纹理初始化为均匀的白噪声向量。

当将它们初始化为非均匀分布时,该算法仍然可以创建蓝色噪波纹理。结果是时空蓝色噪声纹理,它也恰好有一个非均匀直方图,允许进行重要采样。由于需要每个像素的 PDF 进行重要性采样,您可以将 PDF ( x )存储在 alpha 通道中,也可以根据纹理中的值计算 PDF ,例如,如果它是余弦半球加权的,则进行点积,或者除以作为着色器常量传入的规格化值。

图 6 显示了重要性采样、向量值、时空蓝色噪声纹理。

NVIDIA

图 6 。重要采样的时空蓝色噪声切片,其 DFT ,以及它们是重要采样的源图像。纹理的 alpha 通道将 PDF 存储为最小和最大 PDF 之间的百分比。

图 7 显示了再次跟踪 AO 的四个每像素采样光线,但使用了余弦加权半球,重要性采样单位向量。白噪波生成一个单位 vec3 ,将其添加到法线,然后进行规格化。 Blue noise 和 STBN 的纹理中存储了余弦加权半球向量,这些向量使用 TBN 基矩阵转换为切线空间。

查看旋转木马顶部的椭圆显示蓝色噪波比白色噪波效果更好。

查看右上角的窗口帧,您可以看到 STBN 在阴影中的噪波如何比独立的蓝色噪波纹理少。

NVIDIA

图 7 。余弦加权半球形(重要性采样)每像素四个采样环境遮挡。

在图 7 中,噪声之间的差异不如均匀采样时明显,但仍然存在。蓝色噪声中的噪声比白色噪声更难看到,也更容易过滤。 STBN 中的噪声与之相同,但幅度也较低。

结论

蓝色噪波是一种在低采样数下获得外观更好的图像的好方法,就像在实时渲染中发现的那样。蓝色噪波在几乎任何每像素需要一个或多个随机值的情况下都很有用。

关于作者

Alan Wolfe 最初是一名自学成才的游戏编程爱好者,拥有超过 20 年的游戏开发经验,拥有包括《星际争霸 2 》、《风暴英雄》、《高谭市冒名顶替者》、《线骑士》和《疯狂扭曲的阴影星球》在内的多部游戏。 Alan 对蓝色噪音和其他随机渲染方法有着不健康的迷恋。

Nathan Morrical 是博士。犹他大学的学生,来自NVIDIA OpTix 团队的实习生和皮克斯的 RenderMan 集团,以及科学计算和成像研究所( SCI )的现任成员。他的研究兴趣包括高性能光线跟踪框架和计算、科学数据可视化、计算几何和实时光线跟踪。在加入 SCI 之前, Nate 在爱达荷州立大学获得了计算机科学学士学位,在那里他研究了交互式计算机图形学和计算几何。

Tomas Akenine-Moller 是NVIDIA 杰出的研究科学家,目前正在休假,他是隆德大学计算机图形学教授。托马斯与人合著 Real-Time Rendering 、 浸入线性代数 并共同编辑 射线追踪宝石 I 。

Ravi Ramamoorthi 是 Nvidia 的一名研究顾问,他是圣地亚哥加利福尼亚大学的教授,他担任 Ronald L.Graham 计算机科学系的主席,也是 UCSD 视觉计算中心的创始主任。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分