目录
create_cdf —— 根据PDF值创建CDF
create_pdf —— 根据输入的数组值创建PDF
sample_cdf —— 采样CDF
limit_sample_space —— 限制单位值
newsample —— 对nextsample函数初始化采样序列
nextsample
sample_geometry —— 采样几何体并返回shader信息
sample_light —— 采样灯光并运行light shader
sample_photon —— 采样灯光并运行light shader
sample_cauchy —— 采样Cauchy分布
sample_discrete —— 采样整数值
sample_exponential —— 采样指数分布
sample_lognormal —— 采样log-normal分布
sample_lognormal_by_median —— 采样log-normal分布
sample_normal —— 采样normal分布
sampledisk
variance —— 计算平均值和方差
sample_circle_arc —— 生成统一的单位vector2
sample_circle_edge_uniform —— 生成统一的单位vector2
编辑
sample_circle_ring_uniform —— 生成统一的单位vector2
sample_circle_slice —— 生成统一的单位vector2
sample_circle_unifom —— 生成统一的单位vector2
sample_hemisphere —— 生成半球形单位vector
sample_sphere_cone —— 生成单位vector
sample_sphere_uniform —— 生成单位vector
sample_sphere_shell_uniform —— 生成单位vector
sample_hypersphere_cone —— 生成统一的vector4
sample_hypersphere_uniform —— 生成统一的vector4
sample_orientation_cone —— 生成统一的vector4
sample_orientation_uniform —— 生成统一的vector4
create_cdf —— 根据PDF值创建CDF
float [] create_cdf(float pdf[])
create_pdf —— 根据输入的数组值创建PDF
float [] create_pdf(float values[])
sample_cdf —— 采样CDF
int sample_cdf(float cdf[], float uniform_rand)
void sample_cdf(float cdf[], float uniform_rand, int &index, float &x)
void sample_cdf(float cdf[], float uniform_rand, int &index, float &x, float &pdf)
limit_sample_space —— 限制单位值
float limit_sample_space(float minu, float maxu, float u) float limit_sample_space(float maxu, float u)
newsample —— 对nextsample函数初始化采样序列
int newsampler(...) int newsampler(int seed, ...)
nextsample
void nextsample(int &sid, float &sx, float &sy, ...) void nextsample(int &sid, vector &svec, ...)
sample_geometry —— 采样几何体并返回shader信息
int sample_geometry(vector origin, vector sample, float time, ...)
sample_light —— 采样灯光并运行light shader
int sample_light(int lightid, vector pos, vector sam, float time, vector &pos, vector &clr, float &scale, ...)
sample_photon —— 采样灯光并运行light shader
int sample_photon(light lp, vector &pos, vector &dir, float &scale, float time)
sample_cauchy —— 采样Cauchy分布
float sample_cauchy(float u) float sample_cauchy(float scale, float u) vector2 sample_cauchy(float scale, vector2 u) float sample_cauchy(float origscale, float minvalue, float maxvalue, float u)
sample_cauchy(
sample_discrete —— 采样整数值
int sample_discrete(int nvalues, float u) int sample_discrete(float weights[], float u)
- nvalues,返回值范围[0,nvalues-1],如u为0返回0,u为1返回nvalues-1;
- weights,返回值范围[0,len(weights)-1],相对权重总和不必为1;
sample_exponential —— 采样指数分布
float sample_exponential(float u) float sample_exponential(float mean, float u) float sample_exponential(float origmean, float maxvalue, float u)
- 返回值随u单向递增;
sample_lognormal —— 采样log-normal分布
float sample_lognormal(float mu, float sigma, float u) float sample_lognormal(float mu, float sigma, float minvalue, float maxvalue, float u)
sample_lognormal_by_median —— 采样log-normal分布
float sample_lognormal_by_median(float median, float stddev, float u) float sample_lognormal_by_median(float origmedian, float origstddev, float minvalue, float maxvalue, float u)
sample_normal —— 采样normal分布
float sample_normal(float u) float sample_normal(float mean, float stddev, float u) float sample_normal(float origmean, float origstddev, float minvalue, float maxvalue, float u) vector2 sample_normal(vector2 u) vector sample_normal(vector u) vector4 sample_normal(vector4 u)
sampledisk
void sampledisk(float &x, float &y, float sx, float sy)
variance —— 计算平均值和方差
float variance(float variable, float &mean, int &sample_size)
sample_circle_arc —— 生成统一的单位vector2
vector2 sample_circle_arc(vector2 center, float maxangle, float u)
//生成单位圆弧
float u = fit(@ptnum, 0, @numpt, 0, 1);
vector2 ret = sample_circle_arc({0,1}, radians(60), u);
sample_circle_edge_uniform —— 生成统一的单位vector2
vector2 sample_circle_edge_uniform(float u)
- 返回值对应坐标(cos(angle),sin(angle)),对应的角度2*pi*u;
//生成圆环
float u = fit(@ptnum, 0, @numpt, 0, 1);
vector2 ret = sample_circle_edge_uniform(u);
sample_circle_ring_uniform —— 生成统一的单位vector2
vector2 sample_circle_ring_uniform(vector2 u, float alpha)
- 返回值对应坐标scale*(cos(angle),sin(angle)),对应的角度2*pi*u.x,对应scale值sqrt((1-alpha^2)*u.y+alpha^2);
vector2 u;
u.x = fit(@ptnum, 0, @numpt, 0, 1);
u.y = fit(@ptnum, 0, @numpt, 0, 1);
vector2 ret = sample_circle_ring_uniform(u, 0);
sample_circle_slice —— 生成统一的单位vector2
vector2 sample_circle_slice(vector2 center, float maxangle, vector2 u)
vector2 u;
u.x = fit(@ptnum, 0, @numpt, 0, 1);
u.y = fit(@ptnum, 0, @numpt, 0, 1);
vector2 ret = sample_circle_slice({0,1}, radians(180), u);
sample_circle_unifom —— 生成统一的单位vector2
vector2 sample_circle_uniform(vector2 u)
vector2 u;
u.x = fit(@ptnum, 0, @numpt, 0, 1);
u.y = fit(@ptnum, 0, @numpt, 0, 1);
vector2 ret = sample_circle_uniform(u);
sample_hemisphere —— 生成半球形单位vector
vector sample_hemisphere(vector2 u) vector sample_hemisphere(vector center, vector2 u) vector sample_hemisphere(float bias, vector2 u) vector sample_hemisphere(vector center, float bias, vector2 u)
- center,中心方向,不必标准化,如不指定默认为{1,0,0};
- bias,中心方向偏移,值范围(-1,无限大),-1表示强制垂直,0,没有偏移,无限大强制中心方向;
vector2 u = rand(@ptnum+0.5);
vector ret = sample_hemisphere(u);
sample_sphere_cone —— 生成单位vector
vector sample_sphere_cone(vector center, float maxangle, vector u)
vector u = rand(@ptnum);
vector ret = sample_sphere_cone({1,0,0}, radians(180), u);
sample_sphere_uniform —— 生成单位vector
vector sample_sphere_uniform(vector u)
vector u = rand(@ptnum);
vector ret = sample_sphere_uniform(u);
sample_sphere_shell_uniform —— 生成单位vector
vector sample_sphere_shell_uniform(vector u, float alpha)
//当alpha为1时,ret长度都为1
vector u = rand(@ptnum);
vector ret = sample_sphere_shell_uniform(u, 1);
sample_hypersphere_cone —— 生成统一的vector4
vector4 sample_hypersphere_cone(vector4 center, float maxangle, vector4 u)
- center,圆锥中心方向,不必标准化;
- maxangle,最大角度,单位弧度;
sample_hypersphere_uniform —— 生成统一的vector4
vector4 sample_hypersphere_uniform(vector4 u)
sample_orientation_cone —— 生成统一的vector4
vector4 sample_orientation_cone(vector4 center, float maxangle, vector u)
sample_orientation_uniform —— 生成统一的vector4
vector4 sample_orientation_uniform(vector u)