图形学数学基础之Hammersley采样

本文介绍了Hammersley采样在图形学中的重要性,特别是用于光线追踪器中的BRDF和光源采样。Hammersley采样利用二进制的Radical Inverse方法构造均匀分布的2D随机点,保证了采样点的均匀性。通过这种方法,可以创建出用于光线追踪的均匀分布采样集,并通过示例展示了其均匀分布特性。
摘要由CSDN通过智能技术生成

作者:i_dovelemon
日期:2017/08/02
来源:CSDN
主题:hammersley,binary

引言

在图形学里面,用到了很多的采样算法。特别当你在写一个光线追踪器的时候,会使用大量的采样算法来对BRDF,光源等进行采样。这些采样操作,一般是先通过创建一个具有均匀分布的2D随机点集合,然后通过变换,将这些2D随机点变换到具体的采样数据上去,如BRDF的方向等等。关于这部分变换和相应的原理,后面会有相应的章节来讲解,今天我们先来了解一个在实现PBR中,经常被使用到的均匀分布的2D随机采样方式–Hammersley采样。

Hammersley采样

Hammersley采样,听上去好像很深奥的样子,实际上是一个十分简单的操作。

我们知道,在计算机里面大量使用了二进制来表示数据,如下表所示的一些十进制与二进制的对应关系:

十进制 二进制
1 1
2 10
3 11
4 100


而Hammersley采样就是利用计算机使用二进制表示的特性,来构造均匀分布的2D随机采样点。它是通过对一个二进制数进行Radical Inverse方法,来构造出一个值来实现的。它的过程如下表:

十进制 二进制 Radical Inverse
1 1 .1 = 1 * 1/2 0.5
2 10 .01 = 0 * 1/2 + 1 * 1/4 0.25
3 11 .11 = 1 * 1/2 + 1 * 1/4 0.75
4 100 .001 = 0 * 1/2 + 0 * 1/4 + 1 * 1/8 0.125


从上表可以看到,Radical Inverse方法,就是简单的将给定的十进制数的二进制表示方法,反过来放在小数点之后,构造一个在[0,1]之间的值。

在明白了Radical Inverse方法之后,我们就可以构造hammersley的2D随机分布的采样点集合,如下所示:

Hammersley Matlab代码是一种用于生成Hammersley序列的Matlab编程代码。Hammersley序列是一种经典的低差异序列,在数值计算和随机模拟中经常使用。 Hammersley序列是指在单位超立方体中均匀分布的一组点。这些点的坐标是根据简单的算法计算得出的,具有较好的均匀性和耐关于排列操作的优良特性。 Hammersley Matlab代码的主要实现步骤如下: 1. 定义生成Hammersley序列的函数,输入参数为所需点的总数n,返回值为一个n*2的矩阵(每个点的坐标为一行)。 2. 在函数中,首先生成一个长度为n的指数递增序列,表示每个点在序列中的排位。这个序列中的值是从1到n的整数。 3. 将这个指数序列进行二进制转换,得到一个长度为n的二进制序列。这个序列的每一位对应一个点在位数上的排列。 4. 对于二进制序列中的每个位数,将其转换为一个实数,作为点的坐标之一,并与该点的排位一起存储在结果矩阵中。 5. 对于每个点,通过对应位数上的排位进行反转,然后再除以对应位数的幂次,得到另一个实数作为点的另一个坐标,并存储在结果矩阵中。 6. 返回结果矩阵作为生成的Hammersley序列。 Hammersley Matlab代码的优点是简单而高效,可以快速生成大规模的Hammersley序列。通过调用这个代码,用户可以方便地获得高质量的低差异序列,用于各种模拟和计算任务中。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值