跳转到内容

photonmap

本页内容* 可变参数 * 示例

vector  photonmap(string mapname, vector position, vector normal, ...)

void  photonmap(string mapname, vector position, vector normal, vector &color, float &area, ...)

可变参数

variadic-arguments

您可以指定额外的关键字-值参数对来设置评估行为。这些参数必须在加载时定义(字面量或参数)。

要指定额外参数,请将关键字作为字符串传递,下一个参数是该关键字的值。例如 ..., "wrap", "clamp", "border", {.1,1,1})

关键字类型
"nphotons"int用于生成最终颜色的最大光子过滤数量。默认值为 50
"type"string如何解释光子。
"diffuse"(默认值)
    根据朗伯余弦定律缩放每个光子。
"irradiance"
    使用每个光子的原始能量而不进行过滤。
"error"float评估中允许的误差量。较大的数值会导致评估精度降低(即扫描贴图的较小区域),而较小的数值会导致扫描贴图的较大区域。渲染时间随着误差容限的降低而增加。默认值为 0.001
"filter"string指定从光子计算辐照度的”过滤器”。在评估光子贡献时,入射辐射度除以光子覆盖的面积(以确定通量)。面积可以通过三种不同方式计算:
sphere(默认值)
    使用所有光子的最小包围球来估计面积。此估计器会导致光子评估看起来柔和模糊。在基元边缘附近可能不准确。
volume
    类似于sphere,但使用最小包围球的体积而不是面积来归一化光子追踪结果。使用体积过滤时,通常需要将光子查找结果除以体积密度,以校正体积中发生的密度加权光子分布。使用体积过滤时,传递给photonmap函数的法线将被忽略。
convex
    使用所有光子的凸包来估计面积。此估计器会导致光子评估的边缘略微”锐利”,并且在基元边缘附近更准确。然而,由于边缘更锐利,此估计器可能产生非常嘈杂的评估。
direct
    此过滤器应用于已预过滤的光子贴图(例如,已由pcfilter实用程序过滤的贴图)。它将导致光子能量在不进行面积估计的情况下取平均值。

示例

examples

Cf = photonmap(map, P, normalize(frontface(N, I)),
"nphotons", 100,
"type", "diffuse",
"error", 0.05,
"filter", "convex);
vector clr;
float area;
photonmap(map, P, normalize(frontface(N, I)), clr, area,
"nphotons", 100,
"type", "diffuse",
"error", 0.05,
"filter", "convex);
Cf = clr;