使用任意分布对半球进行采样

时间:2013-06-13 09:05:03

标签: graphics random raytracing sampling montecarlo

我正在写一个光线跟踪器,我希望根据某些分布,将光线从 p 点射到该点上方的半球。

1)我已经推导出一种方法,可以在 p Image

上方的立体角(由theta定义)内均匀采样

phi = 2*pi*X_1

alpha = arccos (1-(1-cos(theta))*X_2)

x = sin(alpha)*cos(phi)

y = sin(alpha)*sin*phi

z = -cos(alpha)

X是一个统一的随机数

这很有效,我很高兴。但我的问题是如果我不想要统一分发会发生什么。

我使用了here第27页的算法,我可以从分段任意分布中抽取样本。但是,如果我只是说:

alpha = arccos (1-(1-cos(theta)) B1)

其中B是从arbiatry分布生成的随机数。 它的表现不太好......我做错了什么?提前致谢。我真的需要帮助

其他 也许我在问一个主要问题。退后一步: 有没有办法根据任意分布在半球上生成点。我有一种均匀采样半球的方法和一种用于余弦加权半球采样的方法。 (第663-669页pbrt.org

1 个答案:

答案 0 :(得分:1)

通过均匀分布,您可以平均样本结果并获得正确的结果。这相当于将每个样本结果除以样本概率密度函数(PDF),并且在均匀分布的情况下,它只是1 / sample_count(即对结果求平均值)。

使用任意分布,您仍然可以将样本结果除以样本PDF,但PDF现在取决于您使用的任意分布。我假设你的错误在这里。