Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/closure/bsdf.h
| Show First 20 Lines • Show All 122 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| /* For curves use the smooth normal, particularly for ribbons the geometric | /* For curves use the smooth normal, particularly for ribbons the geometric | ||||
| * normal gives too much darkening otherwise. */ | * normal gives too much darkening otherwise. */ | ||||
| int label; | int label; | ||||
| const float3 Ng = (sd->type & PRIMITIVE_ALL_CURVE) ? sc->N : sd->Ng; | const float3 Ng = (sd->type & PRIMITIVE_ALL_CURVE) ? sc->N : sd->Ng; | ||||
| switch (sc->type) { | switch (sc->type) { | ||||
| case CLOSURE_BSDF_DIFFUSE_ID: | case CLOSURE_BSDF_DIFFUSE_ID: | ||||
| case CLOSURE_BSDF_BSSRDF_ID: | |||||
| label = bsdf_diffuse_sample(sc, | label = bsdf_diffuse_sample(sc, | ||||
| Ng, | Ng, | ||||
| sd->I, | sd->I, | ||||
| sd->dI.dx, | sd->dI.dx, | ||||
| sd->dI.dy, | sd->dI.dy, | ||||
| randu, | randu, | ||||
| randv, | randv, | ||||
| eval, | eval, | ||||
| ▲ Show 20 Lines • Show All 256 Lines • ▼ Show 20 Lines | case CLOSURE_BSDF_HAIR_TRANSMISSION_ID: | ||||
| pdf); | pdf); | ||||
| break; | break; | ||||
| case CLOSURE_BSDF_HAIR_PRINCIPLED_ID: | case CLOSURE_BSDF_HAIR_PRINCIPLED_ID: | ||||
| label = bsdf_principled_hair_sample( | label = bsdf_principled_hair_sample( | ||||
| kg, sc, sd, randu, randv, eval, omega_in, &domega_in->dx, &domega_in->dy, pdf); | kg, sc, sd, randu, randv, eval, omega_in, &domega_in->dx, &domega_in->dy, pdf); | ||||
| break; | break; | ||||
| # ifdef __PRINCIPLED__ | # ifdef __PRINCIPLED__ | ||||
| case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID: | case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID: | ||||
| case CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID: | |||||
| label = bsdf_principled_diffuse_sample(sc, | label = bsdf_principled_diffuse_sample(sc, | ||||
| Ng, | Ng, | ||||
| sd->I, | sd->I, | ||||
| sd->dI.dx, | sd->dI.dx, | ||||
| sd->dI.dy, | sd->dI.dy, | ||||
| randu, | randu, | ||||
| randv, | randv, | ||||
| eval, | eval, | ||||
| ▲ Show 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | bsdf_eval(const KernelGlobals *kg, | ||||
| const bool is_transmission, | const bool is_transmission, | ||||
| float *pdf) | float *pdf) | ||||
| { | { | ||||
| float3 eval = zero_float3(); | float3 eval = zero_float3(); | ||||
| if (!is_transmission) { | if (!is_transmission) { | ||||
| switch (sc->type) { | switch (sc->type) { | ||||
| case CLOSURE_BSDF_DIFFUSE_ID: | case CLOSURE_BSDF_DIFFUSE_ID: | ||||
| case CLOSURE_BSDF_BSSRDF_ID: | |||||
| eval = bsdf_diffuse_eval_reflect(sc, sd->I, omega_in, pdf); | eval = bsdf_diffuse_eval_reflect(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| #ifdef __SVM__ | #ifdef __SVM__ | ||||
| case CLOSURE_BSDF_OREN_NAYAR_ID: | case CLOSURE_BSDF_OREN_NAYAR_ID: | ||||
| eval = bsdf_oren_nayar_eval_reflect(sc, sd->I, omega_in, pdf); | eval = bsdf_oren_nayar_eval_reflect(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| # ifdef __OSL__ | # ifdef __OSL__ | ||||
| case CLOSURE_BSDF_PHONG_RAMP_ID: | case CLOSURE_BSDF_PHONG_RAMP_ID: | ||||
| ▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | # endif | ||||
| case CLOSURE_BSDF_HAIR_REFLECTION_ID: | case CLOSURE_BSDF_HAIR_REFLECTION_ID: | ||||
| eval = bsdf_hair_reflection_eval_reflect(sc, sd->I, omega_in, pdf); | eval = bsdf_hair_reflection_eval_reflect(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| case CLOSURE_BSDF_HAIR_TRANSMISSION_ID: | case CLOSURE_BSDF_HAIR_TRANSMISSION_ID: | ||||
| eval = bsdf_hair_transmission_eval_reflect(sc, sd->I, omega_in, pdf); | eval = bsdf_hair_transmission_eval_reflect(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| # ifdef __PRINCIPLED__ | # ifdef __PRINCIPLED__ | ||||
| case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID: | case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID: | ||||
| case CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID: | |||||
| eval = bsdf_principled_diffuse_eval_reflect(sc, sd->I, omega_in, pdf); | eval = bsdf_principled_diffuse_eval_reflect(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| case CLOSURE_BSDF_PRINCIPLED_SHEEN_ID: | case CLOSURE_BSDF_PRINCIPLED_SHEEN_ID: | ||||
| eval = bsdf_principled_sheen_eval_reflect(sc, sd->I, omega_in, pdf); | eval = bsdf_principled_sheen_eval_reflect(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| # endif /* __PRINCIPLED__ */ | # endif /* __PRINCIPLED__ */ | ||||
| #endif | #endif | ||||
| default: | default: | ||||
| Show All 9 Lines | const float frequency_multiplier = | ||||
| kernel_tex_fetch(__objects, sd->object).shadow_terminator_shading_offset; | kernel_tex_fetch(__objects, sd->object).shadow_terminator_shading_offset; | ||||
| if (frequency_multiplier > 1.0f) { | if (frequency_multiplier > 1.0f) { | ||||
| eval *= shift_cos_in(dot(omega_in, sc->N), frequency_multiplier); | eval *= shift_cos_in(dot(omega_in, sc->N), frequency_multiplier); | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| switch (sc->type) { | switch (sc->type) { | ||||
| case CLOSURE_BSDF_DIFFUSE_ID: | case CLOSURE_BSDF_DIFFUSE_ID: | ||||
| case CLOSURE_BSDF_BSSRDF_ID: | |||||
| eval = bsdf_diffuse_eval_transmit(sc, sd->I, omega_in, pdf); | eval = bsdf_diffuse_eval_transmit(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| #ifdef __SVM__ | #ifdef __SVM__ | ||||
| case CLOSURE_BSDF_OREN_NAYAR_ID: | case CLOSURE_BSDF_OREN_NAYAR_ID: | ||||
| eval = bsdf_oren_nayar_eval_transmit(sc, sd->I, omega_in, pdf); | eval = bsdf_oren_nayar_eval_transmit(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| case CLOSURE_BSDF_TRANSLUCENT_ID: | case CLOSURE_BSDF_TRANSLUCENT_ID: | ||||
| eval = bsdf_translucent_eval_transmit(sc, sd->I, omega_in, pdf); | eval = bsdf_translucent_eval_transmit(sc, sd->I, omega_in, pdf); | ||||
| ▲ Show 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | #ifdef __SVM__ | ||||
| case CLOSURE_BSDF_HAIR_REFLECTION_ID: | case CLOSURE_BSDF_HAIR_REFLECTION_ID: | ||||
| eval = bsdf_hair_reflection_eval_transmit(sc, sd->I, omega_in, pdf); | eval = bsdf_hair_reflection_eval_transmit(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| case CLOSURE_BSDF_HAIR_TRANSMISSION_ID: | case CLOSURE_BSDF_HAIR_TRANSMISSION_ID: | ||||
| eval = bsdf_hair_transmission_eval_transmit(sc, sd->I, omega_in, pdf); | eval = bsdf_hair_transmission_eval_transmit(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| # ifdef __PRINCIPLED__ | # ifdef __PRINCIPLED__ | ||||
| case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID: | case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID: | ||||
| case CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID: | |||||
| eval = bsdf_principled_diffuse_eval_transmit(sc, sd->I, omega_in, pdf); | eval = bsdf_principled_diffuse_eval_transmit(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| case CLOSURE_BSDF_PRINCIPLED_SHEEN_ID: | case CLOSURE_BSDF_PRINCIPLED_SHEEN_ID: | ||||
| eval = bsdf_principled_sheen_eval_transmit(sc, sd->I, omega_in, pdf); | eval = bsdf_principled_sheen_eval_transmit(sc, sd->I, omega_in, pdf); | ||||
| break; | break; | ||||
| # endif /* __PRINCIPLED__ */ | # endif /* __PRINCIPLED__ */ | ||||
| #endif | #endif | ||||
| default: | default: | ||||
| ▲ Show 20 Lines • Show All 46 Lines • Show Last 20 Lines | |||||