要均匀抽取三角形ABC的样本,可以使用以下公式:
P = (1 - sqrt(r1)) * A + (sqrt(r1)*(1 - r2)) * B + (r2*sqrt(r1)) * C
其中r1和r2是0到1之间的随机数。抽取的样本数量越多,结果越好。但是如果我想获得更好的分布,同时保持样本数量较少怎么办?
例如,如果我有一个正方形,我可以将其隐式地划分为N x N网格,并在小网格中生成随机样本。就像这样:
P = (1 - sqrt(r1)) * A + (sqrt(r1)*(1 - r2)) * B + (r2*sqrt(r1)) * C
其中r1和r2是0到1之间的随机数。抽取的样本数量越多,结果越好。但是如果我想获得更好的分布,同时保持样本数量较少怎么办?
例如,如果我有一个正方形,我可以将其隐式地划分为N x N网格,并在小网格中生成随机样本。就像这样:
float u = (x + rnd(seed)) / width;
float v = (y + rnd(seed)) / height;
重点是我强制采样以较低的采样分辨率涵盖整个网格。
如何使用三角形实现这一目标?我唯一能想到的方法是使用像 Triangle 这样的库将其显式地细分为许多三角形。但是否有一种类似于正方形的隐式方式可以实现这一点,而不必实际分割三角形呢?