diff options
Diffstat (limited to 'intern/cycles/kernel/closure/bsdf_transparent.h')
-rw-r--r-- | intern/cycles/kernel/closure/bsdf_transparent.h | 116 |
1 files changed, 67 insertions, 49 deletions
diff --git a/intern/cycles/kernel/closure/bsdf_transparent.h b/intern/cycles/kernel/closure/bsdf_transparent.h index 060dff69f52..4e5513499e8 100644 --- a/intern/cycles/kernel/closure/bsdf_transparent.h +++ b/intern/cycles/kernel/closure/bsdf_transparent.h @@ -37,73 +37,91 @@ CCL_NAMESPACE_BEGIN ccl_device void bsdf_transparent_setup(ShaderData *sd, const float3 weight, int path_flag) { - /* Check cutoff weight. */ - float sample_weight = fabsf(average(weight)); - if(!(sample_weight >= CLOSURE_WEIGHT_CUTOFF)) { - return; - } + /* Check cutoff weight. */ + float sample_weight = fabsf(average(weight)); + if (!(sample_weight >= CLOSURE_WEIGHT_CUTOFF)) { + return; + } - if(sd->flag & SD_TRANSPARENT) { - sd->closure_transparent_extinction += weight; + if (sd->flag & SD_TRANSPARENT) { + sd->closure_transparent_extinction += weight; - /* Add weight to existing transparent BSDF. */ - for(int i = 0; i < sd->num_closure; i++) { - ShaderClosure *sc = &sd->closure[i]; + /* Add weight to existing transparent BSDF. */ + for (int i = 0; i < sd->num_closure; i++) { + ShaderClosure *sc = &sd->closure[i]; - if(sc->type == CLOSURE_BSDF_TRANSPARENT_ID) { - sc->weight += weight; - sc->sample_weight += sample_weight; - break; - } - } - } - else { - sd->flag |= SD_BSDF|SD_TRANSPARENT; - sd->closure_transparent_extinction = weight; + if (sc->type == CLOSURE_BSDF_TRANSPARENT_ID) { + sc->weight += weight; + sc->sample_weight += sample_weight; + break; + } + } + } + else { + sd->flag |= SD_BSDF | SD_TRANSPARENT; + sd->closure_transparent_extinction = weight; - if(path_flag & PATH_RAY_TERMINATE) { - /* In this case the number of closures is set to zero to disable - * all others, but we still want to get transparency so increase - * the number just for this. */ - sd->num_closure_left = 1; - } + if (path_flag & PATH_RAY_TERMINATE) { + /* In this case the number of closures is set to zero to disable + * all others, but we still want to get transparency so increase + * the number just for this. */ + sd->num_closure_left = 1; + } - /* Create new transparent BSDF. */ - ShaderClosure *bsdf = closure_alloc(sd, sizeof(ShaderClosure), CLOSURE_BSDF_TRANSPARENT_ID, weight); + /* Create new transparent BSDF. */ + ShaderClosure *bsdf = closure_alloc( + sd, sizeof(ShaderClosure), CLOSURE_BSDF_TRANSPARENT_ID, weight); - if(bsdf) { - bsdf->sample_weight = sample_weight; - bsdf->N = sd->N; - } - else if(path_flag & PATH_RAY_TERMINATE) { - sd->num_closure_left = 0; - } - } + if (bsdf) { + bsdf->sample_weight = sample_weight; + bsdf->N = sd->N; + } + else if (path_flag & PATH_RAY_TERMINATE) { + sd->num_closure_left = 0; + } + } } -ccl_device float3 bsdf_transparent_eval_reflect(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf) +ccl_device float3 bsdf_transparent_eval_reflect(const ShaderClosure *sc, + const float3 I, + const float3 omega_in, + float *pdf) { - return make_float3(0.0f, 0.0f, 0.0f); + return make_float3(0.0f, 0.0f, 0.0f); } -ccl_device float3 bsdf_transparent_eval_transmit(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf) +ccl_device float3 bsdf_transparent_eval_transmit(const ShaderClosure *sc, + const float3 I, + const float3 omega_in, + float *pdf) { - return make_float3(0.0f, 0.0f, 0.0f); + return make_float3(0.0f, 0.0f, 0.0f); } -ccl_device int bsdf_transparent_sample(const ShaderClosure *sc, float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf) +ccl_device int bsdf_transparent_sample(const ShaderClosure *sc, + float3 Ng, + float3 I, + float3 dIdx, + float3 dIdy, + float randu, + float randv, + float3 *eval, + float3 *omega_in, + float3 *domega_in_dx, + float3 *domega_in_dy, + float *pdf) { - // only one direction is possible - *omega_in = -I; + // only one direction is possible + *omega_in = -I; #ifdef __RAY_DIFFERENTIALS__ - *domega_in_dx = -dIdx; - *domega_in_dy = -dIdy; + *domega_in_dx = -dIdx; + *domega_in_dy = -dIdy; #endif - *pdf = 1; - *eval = make_float3(1, 1, 1); - return LABEL_TRANSMIT|LABEL_TRANSPARENT; + *pdf = 1; + *eval = make_float3(1, 1, 1); + return LABEL_TRANSMIT | LABEL_TRANSPARENT; } CCL_NAMESPACE_END -#endif /* __BSDF_TRANSPARENT_H__ */ +#endif /* __BSDF_TRANSPARENT_H__ */ |