star-sf

Set of surface and volume scattering functions
git clone git://git.meso-star.fr/star-sf.git
Log | Files | Refs | README | LICENSE

commit cc9ac6210658e7263edf4e5e1bae3edbafe56dd6
parent 0e4d2f2ddf6fd4801bca635c0e9d5cefe6a803a0
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Fri,  9 Sep 2016 14:47:09 +0200

Fix naming issues

Diffstat:
Msrc/ssf.h | 15++++++++-------
Msrc/ssf_bsdf.c | 18+++++++++---------
Msrc/ssf_bxdf.c | 6+++---
Msrc/ssf_fresnel_dielectric.c | 44+++++++++++++++++++++-----------------------
Msrc/ssf_specular_reflection.c | 2+-
Msrc/test_ssf_bsdf.c | 32++++++++++++++++----------------
Msrc/test_ssf_bxdf.c | 8++++----
Msrc/test_ssf_specular_reflection.c | 26+++++++++++++-------------
8 files changed, 75 insertions(+), 76 deletions(-)

diff --git a/src/ssf.h b/src/ssf.h @@ -48,7 +48,7 @@ struct ssf_bxdf_type { res_T (*init)(struct mem_allocator* allocator, void* bxdf); void (*release)(void* bxdf); - double /* Sampled radiance */ + double /* Sampled reflectivity */ (*sample) (void* bxdf, const double u, /* Canonical random number */ @@ -121,7 +121,7 @@ ssf_bsdf_sample const double w[3], /* Normalized incoming direction */ const double N[3], /* Normalized normal */ double dir[4], /* Sampled direction. The PDF is stored in dir[3] */ - double* radiance); /* Sampled radiance */ + double* reflectivity); /* Sampled reflectivity */ /******************************************************************************* * Fresnel API - Define the equation of the fresnel term @@ -158,15 +158,16 @@ SSF_API res_T ssf_fresnel_dielectric_setup (struct ssf_fresnel* fresnel, /* Refraction id of the medium the incoming ray travels in */ - const double lambda_i, + const double eta_i, /* Refraction id of the medium the outgoing transmission ray travels in */ - const double lambda_t); + const double eta_t); SSF_API res_T ssf_fresnel_conductor_setup (struct ssf_fresnel* fresnel, - const double eta, /* Real part of the refraction id */ - const double k); /* Imaginary part of the refraction id */ + const double eta_i, /* Refraction id of the dielectric medium */ + const double eta_t, /* Real part of the refraction id of the conductor */ + const double k_t); /* Imaginary part of the refraction id of the conductor */ /******************************************************************************* * BxDF API - Bidirecitonal <Reflectance|Transmittance> distribution function. @@ -194,7 +195,7 @@ ssf_bxdf_sample const double w[3], /* Normalized direction. Point inward the surface */ const double N[3], /* Normalized normal */ double dir[4], /* Sampled direction. The PDF is stored in dir[3] */ - double* radiance); /* Sampled radiance */ + double* reflectivity); /* Sampled reflectivity */ /* Retrieve the internal data of the BxDF. Usefull for user defined BxDFs on * which the caller has to retrieve their data to setup the their parameters */ diff --git a/src/ssf_bsdf.c b/src/ssf_bsdf.c @@ -128,10 +128,10 @@ ssf_bsdf_sample const double w[3], const double N[3], double dir[4], - double* radiance) + double* reflectivity) { const size_t PDF = 3; - double radiances[MAX_BxDFs]; + double reflectivities[MAX_BxDFs]; double dirs[MAX_BxDFs][4]; double probas[MAX_BxDFs]; double cumul[MAX_BxDFs]; @@ -139,7 +139,7 @@ ssf_bsdf_sample size_t i, n; res_T res = RES_OK; - if(!bsdf || u<0 || u>=1 || v<0 || v>=1 || !w || !N || !dir || !radiance) { + if(!bsdf || u<0 || u>=1 || v<0 || v>=1 || !w || !N || !dir || !reflectivity) { res = RES_BAD_ARG; goto error; } @@ -154,18 +154,18 @@ ssf_bsdf_sample FOR_EACH(i, 0, bsdf->nbxdfs) { struct ssf_bxdf* bxdf = bsdf->bxdfs[i]; - SSF(bxdf_sample(bxdf, u, v, w, N, dirs[n], radiances+n)); - if(radiances[n] <= 0 || dirs[n][PDF] <= 0) + SSF(bxdf_sample(bxdf, u, v, w, N, dirs[n], reflectivities+n)); + if(reflectivities[n] <= 0 || dirs[n][PDF] <= 0) continue; /* Discard BxDF */ - probas[n] = radiances[n] / dirs[n][PDF]; + probas[n] = reflectivities[n] / dirs[n][PDF]; probas_sum += probas[n]; ++n; } if(!n) { /* No valid BxDF to sample */ d4_splat(dir, 0); - *radiance = 0; + *reflectivity = 0; goto exit; } @@ -180,13 +180,13 @@ ssf_bsdf_sample /* Finally sample the distribution */ FOR_EACH(i, 0, n-1) if(u <= cumul[i]) break; d4_set(dir, dirs[i]); - *radiance = radiances[i]; + *reflectivity = reflectivities[i]; exit: return res; error: if(dir) d4_splat(dir, -DBL_MAX); - if(radiance) *radiance = -DBL_MAX; + if(reflectivity) *reflectivity = -DBL_MAX; goto exit; } diff --git a/src/ssf_bxdf.c b/src/ssf_bxdf.c @@ -119,13 +119,13 @@ ssf_bxdf_sample const double w[3], const double N[3], double dir[4], - double* radiance) + double* reflectivity) { - if(!bxdf || u<0 || u>=1 || v<0 || v>=1 || !w || !N || !dir || !radiance) + if(!bxdf || u<0 || u>=1 || v<0 || v>=1 || !w || !N || !dir || !reflectivity) return RES_BAD_ARG; if(!d3_is_normalized(w) || !d3_is_normalized(N)) return RES_BAD_ARG; - *radiance = bxdf->type.sample(bxdf->data, u, v, w, N, dir); + *reflectivity = bxdf->type.sample(bxdf->data, u, v, w, N, dir); return RES_OK; } diff --git a/src/ssf_fresnel_dielectric.c b/src/ssf_fresnel_dielectric.c @@ -19,8 +19,8 @@ #include <math.h> struct fresnel_dielectric { - double lambda_i; - double lambda_t; + double eta_i; + double eta_t; }; /******************************************************************************* @@ -32,8 +32,8 @@ fresnel_dielectric_init(struct mem_allocator* allocator, void* fresnel) struct fresnel_dielectric* fd = fresnel; (void)allocator; ASSERT(fresnel); - fd->lambda_i = 0.0; - fd->lambda_t = 0.0; + fd->eta_i = 0.0; + fd->eta_t = 0.0; return RES_OK; } @@ -50,32 +50,32 @@ fresnel_dielectric_eval(void* fresnel, const double cos_theta_i) double sin_theta_i; double sin_theta_t; double cos_theta_t; - double R_par; - double R_per; + double Rp; /* Parallel */ + double Rs; /* Orthogonal */ ASSERT(fresnel && cos_theta_i >= 0); /* Use Snell's low to retrieve cos_theta_t: - * lambda_i * sin_theta_i = lambda_t * sin_theta_t */ + * eta_i * sin_theta_i = eta_t * sin_theta_t */ sin_theta_i = sqrt(MMAX(0.0, 1.0 - cos_theta_i*cos_theta_i)); - sin_theta_t = fd->lambda_i * sin_theta_i / fd->lambda_t; + sin_theta_t = fd->eta_i * sin_theta_i / fd->eta_t; if(sin_theta_t >= 1) return 1.0; /* Full reflection */ cos_theta_t = sqrt(1.0 - sin_theta_t*sin_theta_t); /* Compute the reflectance for the light polarized with its electric field * parallel to the plane of incidence */ - R_par = (fd->lambda_i*cos_theta_t - fd->lambda_t*cos_theta_i) - / (fd->lambda_i*cos_theta_t + fd->lambda_t*cos_theta_i); - R_par = fabs(R_par); - R_par = R_par * R_par; + Rp = (fd->eta_i*cos_theta_t - fd->eta_t*cos_theta_i) + / (fd->eta_i*cos_theta_t + fd->eta_t*cos_theta_i); + Rp = fabs(Rp); + Rp = Rp * Rp; /* Compute the reflectance for the light polarized with its electric field * perpendicular to the plane of incidence */ - R_per = (fd->lambda_i*cos_theta_i - fd->lambda_t*cos_theta_t) - / (fd->lambda_i*cos_theta_i + fd->lambda_t*cos_theta_t); - R_per = fabs(R_per); - R_per = R_per * R_per; + Rs = (fd->eta_i*cos_theta_i - fd->eta_t*cos_theta_t) + / (fd->eta_i*cos_theta_i + fd->eta_t*cos_theta_t); + Rs = fabs(Rs); + Rs = Rs * Rs; - return 0.5 * (R_par + R_per); + return 0.5 * (Rp + Rs); } /******************************************************************************* @@ -91,16 +91,14 @@ const struct ssf_fresnel_type ssf_fresnel_dielectric = { res_T ssf_fresnel_dielectric_setup - (struct ssf_fresnel* fresnel, const double lambda_i, const double lambda_t) + (struct ssf_fresnel* fresnel, const double eta_i, const double eta_t) { struct fresnel_dielectric* fd; - - if(!fresnel) return RES_BAD_ARG; - if(!FRESNEL_TYPE_EQ(&fresnel->type, &ssf_fresnel_dielectric)) + if(!fresnel || !FRESNEL_TYPE_EQ(&fresnel->type, &ssf_fresnel_dielectric)) return RES_BAD_ARG; fd = fresnel->data; - fd->lambda_i = lambda_i; - fd->lambda_t = lambda_t; + fd->eta_i = eta_i; + fd->eta_t = eta_t; return RES_OK; } diff --git a/src/ssf_specular_reflection.c b/src/ssf_specular_reflection.c @@ -19,7 +19,7 @@ #include <rsys/double3.h> struct specular_reflection { - double reflectivity; /* W . sr^-1 . m^-2 */ + double reflectivity; }; /******************************************************************************* diff --git a/src/test_ssf_bsdf.c b/src/test_ssf_bsdf.c @@ -27,7 +27,7 @@ main(int argc, char** argv) double w[3]; double N[3]; double dir[4]; - double rad; + double refl; (void)argc, (void)argv; mem_init_proxy_allocator(&allocator, &mem_default_allocator); @@ -53,30 +53,30 @@ main(int argc, char** argv) d3_normalize(w, d3(w, -1, -1, 0)); d3(N, 0.0, 1.0, 0.0); - CHECK(ssf_bsdf_sample(NULL, 0, 0, w, N, dir, &rad), RES_BAD_ARG); - CHECK(ssf_bsdf_sample(bsdf, 0, -1, w, N, dir, &rad), RES_BAD_ARG); - CHECK(ssf_bsdf_sample(bsdf, 1, 0, w, N, dir, &rad), RES_BAD_ARG); - CHECK(ssf_bsdf_sample(bsdf, 0, 0, NULL, N, dir, &rad), RES_BAD_ARG); - CHECK(ssf_bsdf_sample(bsdf, 0, 0, w, NULL, dir, &rad), RES_BAD_ARG); - CHECK(ssf_bsdf_sample(bsdf, 0, 0, w, N, NULL, &rad), RES_BAD_ARG); + CHECK(ssf_bsdf_sample(NULL, 0, 0, w, N, dir, &refl), RES_BAD_ARG); + CHECK(ssf_bsdf_sample(bsdf, 0, -1, w, N, dir, &refl), RES_BAD_ARG); + CHECK(ssf_bsdf_sample(bsdf, 1, 0, w, N, dir, &refl), RES_BAD_ARG); + CHECK(ssf_bsdf_sample(bsdf, 0, 0, NULL, N, dir, &refl), RES_BAD_ARG); + CHECK(ssf_bsdf_sample(bsdf, 0, 0, w, NULL, dir, &refl), RES_BAD_ARG); + CHECK(ssf_bsdf_sample(bsdf, 0, 0, w, N, NULL, &refl), RES_BAD_ARG); CHECK(ssf_bsdf_sample(bsdf, 0, 0, w, N, dir, NULL), RES_BAD_ARG); - CHECK(ssf_bsdf_sample(bsdf, 0, 0, w, N, dir, &rad), RES_OK); - CHECK(rad, 2.0); - CHECK(ssf_bsdf_sample(bsdf, 0.5, 0.5, w, N, dir, &rad), RES_OK); - CHECK(rad, 2.0); + CHECK(ssf_bsdf_sample(bsdf, 0, 0, w, N, dir, &refl), RES_OK); + CHECK(refl, 2.0); + CHECK(ssf_bsdf_sample(bsdf, 0.5, 0.5, w, N, dir, &refl), RES_OK); + CHECK(refl, 2.0); CHECK(ssf_bsdf_clear(NULL), RES_BAD_ARG); CHECK(ssf_bsdf_clear(bsdf), RES_OK); - CHECK(ssf_bsdf_sample(bsdf, 0, 0, w, N, dir, &rad), RES_OK); - CHECK(rad, 0.0); + CHECK(ssf_bsdf_sample(bsdf, 0, 0, w, N, dir, &refl), RES_OK); + CHECK(refl, 0.0); d3(w, -1, -1, 0); - CHECK(ssf_bsdf_sample(bsdf, 0.5, 0.5, w, N, dir, &rad), RES_BAD_ARG); + CHECK(ssf_bsdf_sample(bsdf, 0.5, 0.5, w, N, dir, &refl), RES_BAD_ARG); d3_normalize(w, w); d3(N, 0.0, 2.0, 1.0); - CHECK(ssf_bsdf_sample(bsdf, 0.5, 0.5, w, N, dir, &rad), RES_BAD_ARG); + CHECK(ssf_bsdf_sample(bsdf, 0.5, 0.5, w, N, dir, &refl), RES_BAD_ARG); d3_normalize(N, N); - CHECK(ssf_bsdf_sample(bsdf, 0.5, 0.5, w, N, dir, &rad), RES_OK); + CHECK(ssf_bsdf_sample(bsdf, 0.5, 0.5, w, N, dir, &refl), RES_OK); CHECK(ssf_bsdf_ref_put(bsdf), RES_OK); CHECK(ssf_bxdf_ref_put(bxdf), RES_OK); diff --git a/src/test_ssf_bxdf.c b/src/test_ssf_bxdf.c @@ -27,7 +27,7 @@ struct ALIGN(64) bxdf { double v; double w[3]; double N[3]; - double radiance; + double reflectivity; }; static res_T @@ -65,7 +65,7 @@ bxdf_sample CHECK(d3_eq(BxDF->w, w), 1); CHECK(d3_eq(BxDF->N, N), 1); d4(dir, 1.0, 2.0, 3.0, 4.0); - return BxDF->radiance; + return BxDF->reflectivity; } int @@ -145,7 +145,7 @@ main(int argc, char** argv) d3_set(data->N, N); data->u = 0.0; data->v = 0.0; - data->radiance = 1.234; + data->reflectivity = 1.234; CHECK(ssf_bxdf_sample(NULL, 0, 0, w, N, dir, &rad), RES_BAD_ARG); CHECK(ssf_bxdf_sample(bxdf, 0, -1, w, N, dir, &rad), RES_BAD_ARG); @@ -169,7 +169,7 @@ main(int argc, char** argv) d3_normalize(N, N); d3_set(data->w, w); d3_set(data->N, N); - data->radiance = 3.14; + data->reflectivity = 3.14; CHECK(ssf_bxdf_sample(bxdf, 0.5, 0.5, w, N, dir, &rad), RES_OK); CHECK(rad, 3.14); diff --git a/src/test_ssf_specular_reflection.c b/src/test_ssf_specular_reflection.c @@ -27,7 +27,7 @@ main(int argc, char** argv) double w[3]; double N[3]; double dir[4]; - double rad; + double refl; (void)argc, (void)argv; mem_init_proxy_allocator(&allocator, &mem_default_allocator); @@ -44,33 +44,33 @@ main(int argc, char** argv) d3(N, 0.0, 1.0, 0.0); d3_normalize(w, d3(w, -1.0, -1.0, 0.0)); - CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &rad), RES_OK); - CHECK(rad, 0.0); + CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &refl), RES_OK); + CHECK(refl, 0.0); d3_normalize(w, d3(w, -1.0, -1.0, 0.0)); CHECK(ssf_specular_reflection_setup(brdf, 1.23), RES_OK); - CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &rad), RES_OK); - CHECK(rad, 1.23); + CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &refl), RES_OK); + CHECK(refl, 1.23); CHECK(d3_eq_eps(d3(w, w[0], -w[1], 0.0), dir, 1.e-6), 1); d3(w, 0.0, -1.0, 0.0); - CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &rad), RES_OK); - CHECK(rad, 1.23); + CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &refl), RES_OK); + CHECK(refl, 1.23); CHECK(d3_eq_eps(d3(w, 0.0, 1.0, 0.0), dir, 1.e-6), 1); d3_normalize(w, d3(w, -1.0, 1.0, 0.0)); - CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &rad), RES_OK); - CHECK(rad, 1.23); + CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &refl), RES_OK); + CHECK(refl, 1.23); CHECK(d3_eq_eps(d3(w, w[0], -w[1], 0.0), dir, 1.e-6), 1); d3(w, 0.0, 1.0, 0.0); - CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &rad), RES_OK); - CHECK(rad, 1.23); + CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &refl), RES_OK); + CHECK(refl, 1.23); CHECK(d3_eq_eps(d3(w, 0.0, -1.0, 0.0), dir, 1.e-6), 1); d3(w, -1.0, 0.0, 0.0); - CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &rad), RES_OK); - CHECK(rad, 1.23); + CHECK(ssf_bxdf_sample(brdf, 0, 0, w, N, dir, &refl), RES_OK); + CHECK(refl, 1.23); CHECK(d3_eq_eps(w, dir, 1.e-6), 1); CHECK(ssf_bxdf_ref_put(brdf), RES_OK);