diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:17:24 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:21:24 +0300 |
commit | e12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch) | |
tree | 8cf3453d12edb177a218ef8009357518ec6cab6a /intern/cycles/kernel/closure/volume.h | |
parent | b3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff) |
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211.
For details on usage and instructions for migrating branches
without conflicts, see:
https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'intern/cycles/kernel/closure/volume.h')
-rw-r--r-- | intern/cycles/kernel/closure/volume.h | 209 |
1 files changed, 121 insertions, 88 deletions
diff --git a/intern/cycles/kernel/closure/volume.h b/intern/cycles/kernel/closure/volume.h index 872d06c936a..473bc0e8a82 100644 --- a/intern/cycles/kernel/closure/volume.h +++ b/intern/cycles/kernel/closure/volume.h @@ -23,21 +23,21 @@ CCL_NAMESPACE_BEGIN ccl_device void volume_extinction_setup(ShaderData *sd, float3 weight) { - if(sd->flag & SD_EXTINCTION) { - sd->closure_transparent_extinction += weight; - } - else { - sd->flag |= SD_EXTINCTION; - sd->closure_transparent_extinction = weight; - } + if (sd->flag & SD_EXTINCTION) { + sd->closure_transparent_extinction += weight; + } + else { + sd->flag |= SD_EXTINCTION; + sd->closure_transparent_extinction = weight; + } } /* HENYEY-GREENSTEIN CLOSURE */ typedef ccl_addr_space struct HenyeyGreensteinVolume { - SHADER_CLOSURE_BASE; + SHADER_CLOSURE_BASE; - float g; + float g; } HenyeyGreensteinVolume; /* Given cosine between rays, return probability density that a photon bounces @@ -45,119 +45,152 @@ typedef ccl_addr_space struct HenyeyGreensteinVolume { * uniform sphere. g=0 uniform diffuse-like, g=1 close to sharp single ray. */ ccl_device float single_peaked_henyey_greenstein(float cos_theta, float g) { - return ((1.0f - g * g) / safe_powf(1.0f + g * g - 2.0f * g * cos_theta, 1.5f)) * (M_1_PI_F * 0.25f); + return ((1.0f - g * g) / safe_powf(1.0f + g * g - 2.0f * g * cos_theta, 1.5f)) * + (M_1_PI_F * 0.25f); }; ccl_device int volume_henyey_greenstein_setup(HenyeyGreensteinVolume *volume) { - volume->type = CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID; + volume->type = CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID; - /* clamp anisotropy to avoid delta function */ - volume->g = signf(volume->g) * min(fabsf(volume->g), 1.0f - 1e-3f); + /* clamp anisotropy to avoid delta function */ + volume->g = signf(volume->g) * min(fabsf(volume->g), 1.0f - 1e-3f); - return SD_SCATTER; + return SD_SCATTER; } ccl_device bool volume_henyey_greenstein_merge(const ShaderClosure *a, const ShaderClosure *b) { - const HenyeyGreensteinVolume *volume_a = (const HenyeyGreensteinVolume*)a; - const HenyeyGreensteinVolume *volume_b = (const HenyeyGreensteinVolume*)b; + const HenyeyGreensteinVolume *volume_a = (const HenyeyGreensteinVolume *)a; + const HenyeyGreensteinVolume *volume_b = (const HenyeyGreensteinVolume *)b; - return (volume_a->g == volume_b->g); + return (volume_a->g == volume_b->g); } -ccl_device float3 volume_henyey_greenstein_eval_phase(const ShaderClosure *sc, const float3 I, float3 omega_in, float *pdf) +ccl_device float3 volume_henyey_greenstein_eval_phase(const ShaderClosure *sc, + const float3 I, + float3 omega_in, + float *pdf) { - const HenyeyGreensteinVolume *volume = (const HenyeyGreensteinVolume*)sc; - float g = volume->g; - - /* note that I points towards the viewer */ - if(fabsf(g) < 1e-3f) { - *pdf = M_1_PI_F * 0.25f; - } - else { - float cos_theta = dot(-I, omega_in); - *pdf = single_peaked_henyey_greenstein(cos_theta, g); - } - - return make_float3(*pdf, *pdf, *pdf); + const HenyeyGreensteinVolume *volume = (const HenyeyGreensteinVolume *)sc; + float g = volume->g; + + /* note that I points towards the viewer */ + if (fabsf(g) < 1e-3f) { + *pdf = M_1_PI_F * 0.25f; + } + else { + float cos_theta = dot(-I, omega_in); + *pdf = single_peaked_henyey_greenstein(cos_theta, g); + } + + return make_float3(*pdf, *pdf, *pdf); } -ccl_device float3 henyey_greenstrein_sample(float3 D, float g, float randu, float randv, float *pdf) +ccl_device float3 +henyey_greenstrein_sample(float3 D, float g, float randu, float randv, float *pdf) { - /* match pdf for small g */ - float cos_theta; - bool isotropic = fabsf(g) < 1e-3f; - - if(isotropic) { - cos_theta = (1.0f - 2.0f * randu); - if(pdf) { - *pdf = M_1_PI_F * 0.25f; - } - } - else { - float k = (1.0f - g * g) / (1.0f - g + 2.0f * g * randu); - cos_theta = (1.0f + g * g - k * k) / (2.0f * g); - if(pdf) { - *pdf = single_peaked_henyey_greenstein(cos_theta, g); - } - } - - float sin_theta = safe_sqrtf(1.0f - cos_theta * cos_theta); - float phi = M_2PI_F * randv; - float3 dir = make_float3(sin_theta * cosf(phi), sin_theta * sinf(phi), cos_theta); - - float3 T, B; - make_orthonormals(D, &T, &B); - dir = dir.x * T + dir.y * B + dir.z * D; - - return dir; + /* match pdf for small g */ + float cos_theta; + bool isotropic = fabsf(g) < 1e-3f; + + if (isotropic) { + cos_theta = (1.0f - 2.0f * randu); + if (pdf) { + *pdf = M_1_PI_F * 0.25f; + } + } + else { + float k = (1.0f - g * g) / (1.0f - g + 2.0f * g * randu); + cos_theta = (1.0f + g * g - k * k) / (2.0f * g); + if (pdf) { + *pdf = single_peaked_henyey_greenstein(cos_theta, g); + } + } + + float sin_theta = safe_sqrtf(1.0f - cos_theta * cos_theta); + float phi = M_2PI_F * randv; + float3 dir = make_float3(sin_theta * cosf(phi), sin_theta * sinf(phi), cos_theta); + + float3 T, B; + make_orthonormals(D, &T, &B); + dir = dir.x * T + dir.y * B + dir.z * D; + + return dir; } -ccl_device int volume_henyey_greenstein_sample(const ShaderClosure *sc, 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 volume_henyey_greenstein_sample(const ShaderClosure *sc, + 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) { - const HenyeyGreensteinVolume *volume = (const HenyeyGreensteinVolume*)sc; - float g = volume->g; + const HenyeyGreensteinVolume *volume = (const HenyeyGreensteinVolume *)sc; + float g = volume->g; - /* note that I points towards the viewer and so is used negated */ - *omega_in = henyey_greenstrein_sample(-I, g, randu, randv, pdf); - *eval = make_float3(*pdf, *pdf, *pdf); /* perfect importance sampling */ + /* note that I points towards the viewer and so is used negated */ + *omega_in = henyey_greenstrein_sample(-I, g, randu, randv, pdf); + *eval = make_float3(*pdf, *pdf, *pdf); /* perfect importance sampling */ #ifdef __RAY_DIFFERENTIALS__ - /* todo: implement ray differential estimation */ - *domega_in_dx = make_float3(0.0f, 0.0f, 0.0f); - *domega_in_dy = make_float3(0.0f, 0.0f, 0.0f); + /* todo: implement ray differential estimation */ + *domega_in_dx = make_float3(0.0f, 0.0f, 0.0f); + *domega_in_dy = make_float3(0.0f, 0.0f, 0.0f); #endif - return LABEL_VOLUME_SCATTER; + return LABEL_VOLUME_SCATTER; } /* VOLUME CLOSURE */ -ccl_device float3 volume_phase_eval(const ShaderData *sd, const ShaderClosure *sc, float3 omega_in, float *pdf) +ccl_device float3 volume_phase_eval(const ShaderData *sd, + const ShaderClosure *sc, + float3 omega_in, + float *pdf) { - kernel_assert(sc->type == CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID); + kernel_assert(sc->type == CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID); - return volume_henyey_greenstein_eval_phase(sc, sd->I, omega_in, pdf); + return volume_henyey_greenstein_eval_phase(sc, sd->I, omega_in, pdf); } -ccl_device int volume_phase_sample(const ShaderData *sd, const ShaderClosure *sc, float randu, - float randv, float3 *eval, float3 *omega_in, differential3 *domega_in, float *pdf) +ccl_device int volume_phase_sample(const ShaderData *sd, + const ShaderClosure *sc, + float randu, + float randv, + float3 *eval, + float3 *omega_in, + differential3 *domega_in, + float *pdf) { - int label; - - switch(sc->type) { - case CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID: - label = volume_henyey_greenstein_sample(sc, sd->I, sd->dI.dx, sd->dI.dy, randu, randv, eval, omega_in, &domega_in->dx, &domega_in->dy, pdf); - break; - default: - *eval = make_float3(0.0f, 0.0f, 0.0f); - label = LABEL_NONE; - break; - } - - return label; + int label; + + switch (sc->type) { + case CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID: + label = volume_henyey_greenstein_sample(sc, + sd->I, + sd->dI.dx, + sd->dI.dy, + randu, + randv, + eval, + omega_in, + &domega_in->dx, + &domega_in->dy, + pdf); + break; + default: + *eval = make_float3(0.0f, 0.0f, 0.0f); + label = LABEL_NONE; + break; + } + + return label; } CCL_NAMESPACE_END |