我正在写一个光线跟踪器,我希望根据某些分布,将光线从 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)
答案 0 :(得分:1)
通过均匀分布,您可以平均样本结果并获得正确的结果。这相当于将每个样本结果除以样本概率密度函数(PDF),并且在均匀分布的情况下,它只是1 / sample_count(即对结果求平均值)。
使用任意分布,您仍然可以将样本结果除以样本PDF,但PDF现在取决于您使用的任意分布。我假设你的错误在这里。