Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/kernel_shader.h
| Show First 20 Lines • Show All 701 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| ccl_device_inline int shader_bsdf_sample(KernelGlobals *kg, | ccl_device_inline int shader_bsdf_sample(KernelGlobals *kg, | ||||
| ShaderData *sd, | ShaderData *sd, | ||||
| float randu, float randv, | float randu, float randv, | ||||
| BsdfEval *bsdf_eval, | BsdfEval *bsdf_eval, | ||||
| float3 *omega_in, | float3 *omega_in, | ||||
| differential3 *domega_in, | differential3 *domega_in, | ||||
| float *pdf) | float *pdf, | ||||
| float *bsdf_roughness_sqr) | |||||
| { | { | ||||
| const ShaderClosure *sc = shader_bsdf_pick(sd, &randu); | const ShaderClosure *sc = shader_bsdf_pick(sd, &randu); | ||||
| if(sc == NULL) { | if(sc == NULL) { | ||||
| *pdf = 0.0f; | *pdf = 0.0f; | ||||
| return LABEL_NONE; | return LABEL_NONE; | ||||
| } | } | ||||
| /* BSSRDF should already have been handled elsewhere. */ | /* BSSRDF should already have been handled elsewhere. */ | ||||
| kernel_assert(CLOSURE_IS_BSDF(sc->type)); | kernel_assert(CLOSURE_IS_BSDF(sc->type)); | ||||
| if(bsdf_roughness_sqr) { | |||||
| *bsdf_roughness_sqr = bsdf_get_roughness_sqr(sc); | |||||
| } | |||||
| int label; | int label; | ||||
| float3 eval; | float3 eval; | ||||
| *pdf = 0.0f; | *pdf = 0.0f; | ||||
| label = bsdf_sample(kg, sd, sc, randu, randv, &eval, omega_in, domega_in, pdf); | label = bsdf_sample(kg, sd, sc, randu, randv, &eval, omega_in, domega_in, pdf); | ||||
| if(*pdf != 0.0f) { | if(*pdf != 0.0f) { | ||||
| bsdf_eval_init(bsdf_eval, sc->type, eval*sc->weight, kernel_data.film.use_light_pass); | bsdf_eval_init(bsdf_eval, sc->type, eval*sc->weight, kernel_data.film.use_light_pass); | ||||
| ▲ Show 20 Lines • Show All 514 Lines • Show Last 20 Lines | |||||