#monte-carlo #noise #blue #sampling #rendering #blue-noise

blue-noise-sampler

本包提供了一个 Rust 版本的 A Low-Discrepancy Sampler,该采样器将蒙特卡洛误差作为屏幕空间的蓝色噪声进行分布的示例代码。

1 个不稳定版本

0.1.0 2019年9月27日

#9#blue

Download history 204/week @ 2024-03-13 31/week @ 2024-03-20 33/week @ 2024-03-27 75/week @ 2024-04-03 76/week @ 2024-04-10 51/week @ 2024-04-17 47/week @ 2024-04-24 36/week @ 2024-05-01 33/week @ 2024-05-08 38/week @ 2024-05-15 42/week @ 2024-05-22 43/week @ 2024-05-29 76/week @ 2024-06-05 54/week @ 2024-06-12 55/week @ 2024-06-19 45/week @ 2024-06-26

237 每月下载量

MIT 许可证

13MB
129K SLoC

blue-noise-sampler

hassle on travis-ci.com Latest version Documentation MIT

本包提供了一个 Rust 版本的 A Low-Discrepancy Sampler that Distributes Monte Carlo Errors as a Blue Noise in Screen Space 示例代码。

用法

基本上,这个包只是暴露了一组可以上传到 GPU 缓冲区的表,然后可以使用以下类似 HLSL 代码进行采样。此代码直接来自论文中提供的采样器代码(与表相同)。

StructuredBuffer<int> g_blueNoiseSobol : register(t6, space0);
StructuredBuffer<int> g_blueNoiseScrambleTile : register(t7, space0);
StructuredBuffer<int> g_blueNoiseRankingTile : register(t8, space0);

float samplerBlueNoise(int pixel_i, int pixel_j, int sampleIndex, int sampleDimension)
{
	// wrap arguments
	pixel_i = pixel_i & 127;
	pixel_j = pixel_j & 127;
	sampleIndex = sampleIndex & 255;
	sampleDimension = sampleDimension & 255;

	// xor index based on optimized ranking
	// jb: 1spp blue noise has all 0 in g_blueNoiseRankingTile so we can skip the load
	int rankedSampleIndex = sampleIndex ^ g_blueNoiseRankingTile[sampleDimension + (pixel_i + pixel_j*128)*8];

	// fetch value in sequence
	int value = g_blueNoiseSobol[sampleDimension + rankedSampleIndex*256];

	// If the dimension is optimized, xor sequence value based on optimized scrambling
	value = value ^ g_blueNoiseScrambleTile[(sampleDimension%8) + (pixel_i + pixel_j*128)*8];

	// convert to float and return
	float v = (0.5f+value)/256.0f;
	return v;
}

有一些观察结果需要注意,每个包中的模块(ssp1spp2 等)包含 3 个全局变量:SOBOLSCRAMBLING_TILERANKING_TILE,它们名称相同,因此您可以在代码中使用 use blue_noise_sampler::spp16::*; 正确的一个,并在需要更多样本时更改它,而无需更新其余部分。

spp1 的情况下,RANKING_TILE 表全部为 0,因此它严格不需要上传到 GPU,并且上述代码可以修改为进行一次更少的加载,作为微优化。

许可证

基于 MIT 许可证(LICENSEhttp://opensource.org/licenses/MIT

贡献

除非您明确声明,否则您提交给本包的任何有意贡献均应按上述方式许可,不得附加任何额外条款或条件。

欢迎贡献;请查看 问题跟踪器 以查看记录的已知改进。

无运行时依赖