[Bf-committers] [Bf-blender-cvs] [8f63581] soc-2013-dingto: Merge branch 'master' into soc-2013-dingto

Sergey Sharybin sergey.vfx at gmail.com
Mon Nov 18 09:05:54 CET 2013


I thought Thomas' branch was fully merged?

If there're still work which Thomas would love to continue working on, what
about not doing it in SoC branch and create more meaningful one?


On Mon, Nov 18, 2013 at 2:03 PM, Brecht Van Lommel
<noreply at git.blender.org>wrote:

> Commit: 8f6358182eaa519d6b17fe61b0f51af7105d5782
> Author: Brecht Van Lommel
> Date:   Mon Nov 18 09:00:30 2013 +0100
> http://developer.blender.org/rB8f6358182eaa519d6b17fe61b0f51af7105d5782
>
> Merge branch 'master' into soc-2013-dingto
>
> Solved conflicts with __device to ccl_device change, was actually quite
> easy.
>
> ===================================================================
>
>
>
> ===================================================================
>
> diff --cc intern/cycles/blender/addon/properties.py
> index 7809491,ac15ace..5e48b33
> --- a/intern/cycles/blender/addon/properties.py
> +++ b/intern/cycles/blender/addon/properties.py
> @@@ -284,14 -272,8 +284,14 @@@ class CyclesRenderSettings(bpy.types.Pr
>                   name="Transmission Bounces",
>                   description="Maximum number of transmission bounces,
> bounded by total maximum",
>                   min=0, max=1024,
> -                 default=128,
> +                 default=12,
>                   )
>  +        cls.scattering_bounces = IntProperty(
>  +                name="Scattering Bounces",
>  +                description="Maximum number of volumetric scattering
> events",
>  +                min=0, max=1024,
>  +                default=128,
>  +                )
>
>           cls.transparent_min_bounces = IntProperty(
>                   name="Transparent Min Bounces",
> diff --cc intern/cycles/kernel/closure/bsdf.h
> index 09fec4c,b3141d1..ff2afd0
> --- a/intern/cycles/kernel/closure/bsdf.h
> +++ b/intern/cycles/kernel/closure/bsdf.h
> @@@ -33,13 -33,9 +33,13 @@@
>   #include "../closure/bssrdf.h"
>   #endif
>
>  +#ifdef __VOLUME__
>  +#include "../closure/volume.h"
>  +#endif
>  +
>   CCL_NAMESPACE_BEGIN
>
> - __device int bsdf_sample(KernelGlobals *kg, const ShaderData *sd, const
> ShaderClosure *sc, float randu, float randv, float3 *eval, float3
> *omega_in, differential3 *domega_in, float *pdf)
> + ccl_device int bsdf_sample(KernelGlobals *kg, const ShaderData *sd,
> const ShaderClosure *sc, float randu, float randv, float3 *eval, float3
> *omega_in, differential3 *domega_in, float *pdf)
>   {
>         int label;
>
> diff --cc intern/cycles/kernel/closure/volume.h
> index dd5a82e,f30b30c..4b4cfd0
> --- a/intern/cycles/kernel/closure/volume.h
> +++ b/intern/cycles/kernel/closure/volume.h
> @@@ -14,119 -14,50 +14,119 @@@
>    * limitations under the License
>    */
>
>  +#ifndef __VOLUME_H__
>  +#define __VOLUME_H__
>  +
>   CCL_NAMESPACE_BEGIN
>
>  -/* note: the interfaces here are just as an example, need to figure
>  - * out the right functions and parameters to use */
>  +/* HENYEY-GREENSTEIN CLOSURE */
>
>  -/* ISOTROPIC VOLUME CLOSURE */
>  +/* Given cosine between rays, return probability density that photon
> bounce to that direction
>  + * g parameter controls how far it difference from uniform sphere. g=0
> uniform diffusion-like, g=1 - very close to sharp single ray. */
>
> - __device float single_peaked_henyey_greenstein(float cos_theta, float
> m_g)
>  -ccl_device int volume_isotropic_setup(ShaderClosure *sc, float density)
> ++ccl_device float single_peaked_henyey_greenstein(float cos_theta, float
> m_g)
>   {
>  -      sc->type = CLOSURE_VOLUME_ISOTROPIC_ID;
>  -      sc->data0 = density;
>  +      float p = (1.0f - m_g * m_g) / pow(1.0f + m_g * m_g - 2.0f * m_g *
> cos_theta, 1.5f) / 4.0f / M_PI_F;
>
>  -      return SD_VOLUME;
>  +      return p;
>  +};
>  +
> - __device int volume_henyey_greenstein_setup(ShaderClosure *sc)
> ++ccl_device int volume_henyey_greenstein_setup(ShaderClosure *sc)
>  +{
>  +      sc->type = CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID;
>  +
>  +      return SD_BSDF|SD_BSDF_HAS_EVAL;
>   }
>
>  -ccl_device float3 volume_isotropic_eval_phase(const ShaderClosure *sc,
> const float3 omega_in, const float3 omega_out)
>  +// just return bsdf at input vector
> - __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)
>   {
>  -      return make_float3(1.0f, 1.0f, 1.0f);
>  +      float m_g = sc->data1;
>  +      const float magic_eps = 0.001f;
>  +
>  +//    WARNING! I point in backward direction!
>  +//    float cos_theta = dot(I, omega_in);
>  +      float cos_theta = dot(-I, omega_in);
>  +
>  +      if(fabsf(m_g) <  magic_eps)
>  +              *pdf = M_1_PI_F * 0.25f; // ?? double check it
>  +      else
>  +              *pdf = single_peaked_henyey_greenstein(cos_theta, m_g);
>  +
>  +      return make_float3(*pdf, *pdf, *pdf);
>  +}
>  +
> - __device int volume_henyey_greenstein_sample(const ShaderClosure *sc,
> float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv,
> ++ccl_device int volume_henyey_greenstein_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)
>  +{
>  +      float m_g = sc->data1;
>  +      const float magic_eps = 0.001f;
>  +
>  +      // WARNING! I point in backward direction!
>  +
>  +      if(fabsf(m_g) <  magic_eps) {
>  +              *omega_in = sample_uniform_sphere(randu, randv);
>  +              *pdf = M_1_PI_F * 0.25f; // ?? double check it
>  +      }
>  +      else {
>  +              float cos_phi, sin_phi, cos_theta;
>  +
>  +              if(fabsf(m_g) <  magic_eps)
>  +                      cos_theta = (1.0f - 2.0f * randu);
>  +              else {
>  +                      float k = (1.0f - m_g * m_g) / (1.0f - m_g + 2.0f
> * m_g * randu);
>  +                      cos_theta = (1.0f + m_g * m_g - k * k) / (2.0f *
> m_g);
>  +              //      float cos_theta = 1.0f / (2.0f * m_g) * (1.0f +
> m_g * m_g - k*k);
>  +              //      float cos_theta = (1.0f - 2.0f * randu);
>  +              //      float cos_theta = randu;
>  +              }
>  +              float sin_theta = sqrt(1 - cos_theta * cos_theta);
>  +
>  +              float3 T, B;
>  +              make_orthonormals(-I, &T, &B);
>  +              float phi = M_2PI_F * randv;
>  +              cos_phi = cosf(phi);
>  +              sin_phi = sinf(phi);
>  +              *omega_in = sin_theta * cos_phi * T + sin_theta * sin_phi
> * B + cos_theta * (-I);
>  +              *pdf = single_peaked_henyey_greenstein(cos_theta, m_g);
>  +      }
>  +
>  +      *eval = make_float3(*pdf, *pdf, *pdf); // perfect importance
> sampling
>  +#ifdef __RAY_DIFFERENTIALS__
>  +              // TODO: find a better approximation for the diffuse bounce
>  +              *domega_in_dx = (2 * dot(Ng, dIdx)) * Ng - dIdx;
>  +              *domega_in_dy = (2 * dot(Ng, dIdy)) * Ng - dIdy;
>  +              *domega_in_dx *= 125.0f;
>  +              *domega_in_dy *= 125.0f;
>  +#endif
>  +      return LABEL_REFLECT|LABEL_DIFFUSE;
>   }
>
>   /* TRANSPARENT VOLUME CLOSURE */
>
> - __device int volume_transparent_setup(ShaderClosure *sc)
>  -ccl_device int volume_transparent_setup(ShaderClosure *sc, float density)
> ++ccl_device int volume_transparent_setup(ShaderClosure *sc)
>   {
>         sc->type = CLOSURE_VOLUME_TRANSPARENT_ID;
>  -      sc->data0 = density;
>
>         return SD_VOLUME;
>   }
>
> - __device float3 volume_transparent_eval_phase(const ShaderClosure *sc,
> const float3 I, float3 omega_in, float *pdf)
>  -ccl_device float3 volume_transparent_eval_phase(const ShaderClosure *sc,
> const float3 omega_in, const float3 omega_out)
> ++ccl_device float3 volume_transparent_eval_phase(const ShaderClosure *sc,
> const float3 I, float3 omega_in, float *pdf)
>   {
>         return make_float3(1.0f, 1.0f, 1.0f);
>   }
>
> - __device int volume_transparent_sample(const ShaderClosure *sc, float3
> Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv,
> ++ccl_device int volume_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)
>  +{
>  +      /* XXX Implement */
>  +      return LABEL_REFLECT|LABEL_DIFFUSE;
>  +}
>  +
>   /* VOLUME CLOSURE */
>
> - __device float3 volume_eval_phase(KernelGlobals *kg, const ShaderClosure
> *sc, const float3 I, float3 omega_in, float *pdf)
>  -ccl_device float3 volume_eval_phase(KernelGlobals *kg, const
> ShaderClosure *sc, const float3 omega_in, const float3 omega_out)
> ++ccl_device float3 volume_eval_phase(KernelGlobals *kg, const
> ShaderClosure *sc, const float3 I, float3 omega_in, float *pdf)
>   {
>  -#ifdef __OSL__
>  -      if(kg->osl && sc->prim)
>  -              return OSLShader::volume_eval_phase(sc, omega_in,
> omega_out);
>  -#endif
>  -
>         float3 eval;
>
>         switch(sc->type) {
> @@@ -144,29 -75,5 +144,29 @@@
>         return eval;
>   }
>
> - __device int volume_sample(KernelGlobals *kg, const ShaderData *sd,
> const ShaderClosure *sc, float randu,
> ++ccl_device int volume_sample(KernelGlobals *kg, 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->Ng, sd->I, sd->dI.dx, sd->dI.dy, randu, randv, eval, omega_in,
> &domega_in->dx, &domega_in->dy, pdf);
>  +                      break;
>  +              case CLOSURE_VOLUME_TRANSPARENT_ID:
>  +                      label = volume_transparent_sample(sc, sd->Ng,
> 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;
>  +      }
>  +
>  +//    *eval *= sd->svm_closure_weight;
>  +
>  +      return label;
>  +}
>  +
>   CCL_NAMESPACE_END
>
>  +#endif
> diff --cc intern/cycles/kernel/kernel_emission.h
> index 4eecdbb,2ce0b75..2a75a3d
> --- a/intern/cycles/kernel/kernel_emission.h
> +++ b/intern/cycles/kernel/kernel_emission.h
> @@@ -70,46 -70,7 +70,46 @@@ ccl_device_noinline float3 direct_emiss
>         return eval;
>   }
>
>  +#ifdef __VOLUME__
>  +/* ToDo: Remove these 2 duplicate functions */
> - __device float sigma_from_value_(float value, float geom_factor)
> ++ccl_device float sigma_from_value_(float value, float geom_factor)
>  +{
>  +#if 0
>  +//    const float att_magic_eps = 1e-7f;
>  +      const float att_magic_eps = 1e-15f;
>  +      float attenuation = 1-value;
>  +      // protect infinity nan from too big density materials
>  +      if( attenuation < att_magic_eps) attenuation = att_magic_eps;
>  +      return (-logf( attenuation )/geom_factor);
>  +#else
>  +      return value * geom_factor;
>  +#endif
>  +}
>  +
> - __device float get_sigma_sample_(KernelGlobals *kg, ShaderData *sd,
> float randv, int path_flag, float3 p)
> ++ccl_device float get_sigma_sample_(KernelGlobals *kg, ShaderData *sd,
> float randv, int path_flag, float3 p)
>  +{
>  +      ShaderData vsd = *sd;
>  +        vsd.P = p;
>  +
>  +#ifdef __MULTI_CLOSURE__
>  +        int sampled = 0;
>  +
>  +        // if(vsd.num_closure > 1)
>  +
>  +        const ShaderClosure *sc = &sd->closure[sampled];
>  +
>  +        shader_eval_volume(kg, &vsd, randv, path_flag,
> SHADER_CONTEXT_MAIN);
>  +      float v = sc->data0;
>  +#else
>  +        shader_eval_volume(kg, &vsd, randv, path_flag,
> SHADER_CONTEXT_MAIN);
>  +      float v = sd->closure.data0;
>  +#endif
>  +
>  +      return sigma_from_value_(v,
> kernel_data.integrator.volume_density_factor);
>  +}
>  +#endif
>  +
> - __device_noinline bool direct_emission(KernelGlobals *kg, ShaderData
> *sd, int lindex,
> + ccl_device_noinline bool direct_emission(KernelGlobals *kg, ShaderData
> *sd, int lindex,
>         float randt, float r
>
> @@ Diff output truncated at 10240 characters. @@
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>



-- 
With best regards, Sergey Sharybin


More information about the Bf-committers mailing list