solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

commit 59c0ad43340860b0bfa03d01972044f545ead57e
parent f90cf44aff92197eba83845d2482978e3fc13cd5
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue, 12 Sep 2017 22:22:54 +0200

Use the ssf_specular_dielectric_dielectric BxDF in the dielectric mtl

Diffstat:
Msrc/ssol_material.c | 31+++++++++++--------------------
1 file changed, 11 insertions(+), 20 deletions(-)

diff --git a/src/ssol_material.c b/src/ssol_material.c @@ -85,9 +85,7 @@ setup_dielectric_bsdf const struct ssol_medium* medium, struct ssf_bsdf* bsdf) { - struct ssf_bxdf* brdf = NULL; - struct ssf_bxdf* btdf = NULL; - struct ssf_fresnel* fresnel = NULL; + struct ssf_bxdf* bxdf = NULL; double eta_i, eta_t; res_T res = RES_OK; ASSERT(mtl && fragment && mtl->type == SSOL_MATERIAL_DIELECTRIC); @@ -103,25 +101,18 @@ setup_dielectric_bsdf eta_i = ssol_data_get_value(&mtl->out_medium.refractive_index, wavelength); eta_t = ssol_data_get_value(&mtl->in_medium.refractive_index, wavelength); - #define CALL(Func) { res = Func; if(res != RES_OK) goto error; } (void)0 - /* Setup the reflective part */ - CALL(ssf_fresnel_create - (mtl->dev->allocator, &ssf_fresnel_dielectric_dielectric, &fresnel)); - CALL(ssf_fresnel_dielectric_dielectric_setup(fresnel, eta_i, eta_t)); - CALL(ssf_bxdf_create(mtl->dev->allocator, &ssf_specular_reflection, &brdf)); - CALL(ssf_specular_reflection_setup(brdf, fresnel)); - /* Setup the transmissive part */ - CALL(ssf_bxdf_create(mtl->dev->allocator, &ssf_specular_transmission, &btdf)); - CALL(ssf_specular_transmission_setup(btdf, eta_i, eta_t)); - /* Setup the scattering function */ - CALL(ssf_bsdf_add(bsdf, brdf, 0.5)); - CALL(ssf_bsdf_add(bsdf, btdf, 0.5)); - #undef CALL + res = ssf_bxdf_create(mtl->dev->allocator, &ssf_specular_reflection, &bxdf); + if(res != RES_OK) goto error; + + res = ssf_specular_dielectric_dielectric_interface_setup + (bxdf, eta_i, eta_t); + if(res != RES_OK) goto error; + + res = ssf_bsdf_add(bsdf, bxdf, 1.0); + if(res != RES_OK) goto error; exit: - if(brdf) SSF(bxdf_ref_put(brdf)); - if(btdf) SSF(bxdf_ref_put(btdf)); - if(fresnel) SSF(fresnel_ref_put(fresnel)); + if(bxdf) SSF(bxdf_ref_put(bxdf)); return res; error: goto exit;