[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51267] trunk/blender: Cycles: per-BSDF normal input and new Bump node.

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Oct 10 23:49:37 CEST 2012


It doesn't use MiikTspace, the tangent for normal maps is not the same
one that you would want to use for anisotropic shading.

Brecht.

On Wed, Oct 10, 2012 at 10:17 PM, Michael Fox <mfoxdogg at gmail.com> wrote:
> does this use MiikTspace for nomalmaps as it produces far greater normal
> maps results, luxrender uses it, blender uses it in both GLSL and BI
>
> On 11/10/12 02:56, Brecht Van Lommel wrote:
>> Revision: 51267
>>            http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51267
>> Author:   blendix
>> Date:     2012-10-10 15:56:43 +0000 (Wed, 10 Oct 2012)
>> Log Message:
>> -----------
>> Cycles: per-BSDF normal input and new Bump node.
>>
>> Each BSDF node now has a Normal input, which can be used to set a custom normal
>> for the BSDF, for example if you want to have only bump on one of the layers in
>> a multilayer material.
>>
>> The Bump node can be used to generate a normal from a scalar value, the same as
>> what happens when you connect a scalar value to the displacement output.
>>
>> Documentation has been updated with the latest changes:
>> http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes
>>
>> Patch by Agustin Benavidez, some implementation tweaks by me.
>>
>> Modified Paths:
>> --------------
>>      trunk/blender/intern/cycles/blender/blender_shader.cpp
>>      trunk/blender/intern/cycles/kernel/kernel_types.h
>>      trunk/blender/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h
>>      trunk/blender/intern/cycles/kernel/svm/bsdf_diffuse.h
>>      trunk/blender/intern/cycles/kernel/svm/bsdf_microfacet.h
>>      trunk/blender/intern/cycles/kernel/svm/bsdf_oren_nayar.h
>>      trunk/blender/intern/cycles/kernel/svm/bsdf_reflection.h
>>      trunk/blender/intern/cycles/kernel/svm/bsdf_refraction.h
>>      trunk/blender/intern/cycles/kernel/svm/bsdf_ward.h
>>      trunk/blender/intern/cycles/kernel/svm/bsdf_westin.h
>>      trunk/blender/intern/cycles/kernel/svm/svm.h
>>      trunk/blender/intern/cycles/kernel/svm/svm_closure.h
>>      trunk/blender/intern/cycles/kernel/svm/svm_displace.h
>>      trunk/blender/intern/cycles/kernel/svm/svm_types.h
>>      trunk/blender/intern/cycles/render/graph.cpp
>>      trunk/blender/intern/cycles/render/graph.h
>>      trunk/blender/intern/cycles/render/nodes.cpp
>>      trunk/blender/intern/cycles/render/nodes.h
>>      trunk/blender/source/blender/blenkernel/BKE_node.h
>>      trunk/blender/source/blender/blenkernel/intern/node.c
>>      trunk/blender/source/blender/makesrna/intern/rna_nodetree_types.h
>>      trunk/blender/source/blender/nodes/CMakeLists.txt
>>      trunk/blender/source/blender/nodes/NOD_shader.h
>>      trunk/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_anisotropic.c
>>      trunk/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_diffuse.c
>>      trunk/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c
>>      trunk/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c
>>      trunk/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_translucent.c
>>      trunk/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_velvet.c
>>
>> Added Paths:
>> -----------
>>      trunk/blender/source/blender/nodes/shader/nodes/node_shader_bump.c
>>
>> Modified: trunk/blender/intern/cycles/blender/blender_shader.cpp
>> ===================================================================
>> --- trunk/blender/intern/cycles/blender/blender_shader.cpp    2012-10-10 14:28:47 UTC (rev 51266)
>> +++ trunk/blender/intern/cycles/blender/blender_shader.cpp    2012-10-10 15:56:43 UTC (rev 51267)
>> @@ -402,6 +402,10 @@
>>                       node = new ParticleInfoNode();
>>                       break;
>>               }
>> +             case BL::ShaderNode::type_BUMP: {
>> +                     node = new BumpNode();
>> +                     break;
>> +             }
>>               case BL::ShaderNode::type_TEX_IMAGE: {
>>                       BL::ShaderNodeTexImage b_image_node(b_node);
>>                       BL::Image b_image(b_image_node.image());
>>
>> Modified: trunk/blender/intern/cycles/kernel/kernel_types.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/kernel_types.h 2012-10-10 14:28:47 UTC (rev 51266)
>> +++ trunk/blender/intern/cycles/kernel/kernel_types.h 2012-10-10 15:56:43 UTC (rev 51267)
>> @@ -370,6 +370,7 @@
>>   #endif
>>       float data0;
>>       float data1;
>> +     float3 N;
>>
>>   } ShaderClosure;
>>
>>
>> Modified: trunk/blender/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h    2012-10-10 14:28:47 UTC (rev 51266)
>> +++ trunk/blender/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h    2012-10-10 15:56:43 UTC (rev 51267)
>> @@ -58,7 +58,7 @@
>>   __device float3 bsdf_ashikhmin_velvet_eval_reflect(const ShaderData *sd, const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
>>   {
>>       float m_invsigma2 = sc->data0;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       float cosNO = dot(m_N, I);
>>       float cosNI = dot(m_N, omega_in);
>> @@ -106,7 +106,7 @@
>>   __device int bsdf_ashikhmin_velvet_sample(const ShaderData *sd, const ShaderClosure *sc, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf)
>>   {
>>       float m_invsigma2 = sc->data0;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       // we are viewing the surface from above - send a ray out with uniform
>>       // distribution over the hemisphere
>>
>> Modified: trunk/blender/intern/cycles/kernel/svm/bsdf_diffuse.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/svm/bsdf_diffuse.h     2012-10-10 14:28:47 UTC (rev 51266)
>> +++ trunk/blender/intern/cycles/kernel/svm/bsdf_diffuse.h     2012-10-10 15:56:43 UTC (rev 51267)
>> @@ -53,7 +53,7 @@
>>
>>   __device float3 bsdf_diffuse_eval_reflect(const ShaderData *sd, const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
>>   {
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       float cos_pi = fmaxf(dot(m_N, omega_in), 0.0f) * M_1_PI_F;
>>       *pdf = cos_pi;
>> @@ -72,7 +72,7 @@
>>
>>   __device int bsdf_diffuse_sample(const ShaderData *sd, const ShaderClosure *sc, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf)
>>   {
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       // distribution over the hemisphere
>>       sample_cos_hemisphere(m_N, randu, randv, omega_in, pdf);
>> @@ -116,7 +116,7 @@
>>
>>   __device float3 bsdf_translucent_eval_transmit(const ShaderData *sd, const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
>>   {
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       float cos_pi = fmaxf(-dot(m_N, omega_in), 0.0f) * M_1_PI_F;
>>       *pdf = cos_pi;
>> @@ -130,7 +130,7 @@
>>
>>   __device int bsdf_translucent_sample(const ShaderData *sd, const ShaderClosure *sc, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf)
>>   {
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       // we are viewing the surface from the right side - send a ray out with cosine
>>       // distribution over the hemisphere
>>
>> Modified: trunk/blender/intern/cycles/kernel/svm/bsdf_microfacet.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/svm/bsdf_microfacet.h  2012-10-10 14:28:47 UTC (rev 51266)
>> +++ trunk/blender/intern/cycles/kernel/svm/bsdf_microfacet.h  2012-10-10 15:56:43 UTC (rev 51267)
>> @@ -76,7 +76,7 @@
>>       float m_ag = sc->data0;
>>       //float m_eta = sc->data1;
>>       int m_refractive = sc->type == CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       if(m_refractive) return make_float3 (0, 0, 0);
>>       float cosNO = dot(m_N, I);
>> @@ -113,7 +113,7 @@
>>       float m_ag = sc->data0;
>>       float m_eta = sc->data1;
>>       int m_refractive = sc->type == CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       if(!m_refractive) return make_float3 (0, 0, 0);
>>       float cosNO = dot(m_N, I);
>> @@ -154,7 +154,7 @@
>>       float m_ag = sc->data0;
>>       float m_eta = sc->data1;
>>       int m_refractive = sc->type == CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       float cosNO = dot(m_N, sd->I);
>>       if(cosNO > 0) {
>> @@ -302,7 +302,7 @@
>>       float m_ab = sc->data0;
>>       //float m_eta = sc->data1;
>>       int m_refractive = sc->type == CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       if(m_refractive) return make_float3 (0, 0, 0);
>>       float cosNO = dot(m_N, I);
>> @@ -341,7 +341,7 @@
>>       float m_ab = sc->data0;
>>       float m_eta = sc->data1;
>>       int m_refractive = sc->type == CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       if(!m_refractive) return make_float3 (0, 0, 0);
>>       float cosNO = dot(m_N, I);
>> @@ -384,7 +384,7 @@
>>       float m_ab = sc->data0;
>>       float m_eta = sc->data1;
>>       int m_refractive = sc->type == CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       float cosNO = dot(m_N, sd->I);
>>       if(cosNO > 0) {
>>
>> Modified: trunk/blender/intern/cycles/kernel/svm/bsdf_oren_nayar.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/svm/bsdf_oren_nayar.h  2012-10-10 14:28:47 UTC (rev 51266)
>> +++ trunk/blender/intern/cycles/kernel/svm/bsdf_oren_nayar.h  2012-10-10 15:56:43 UTC (rev 51267)
>> @@ -57,9 +57,9 @@
>>
>>   __device float3 bsdf_oren_nayar_eval_reflect(const ShaderData *sd, const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
>>   {
>> -     if (dot(sd->N, omega_in) > 0.0f) {
>> +     if (dot(sc->N, omega_in) > 0.0f) {
>>               *pdf = 0.5f * M_1_PI_F;
>> -             return bsdf_oren_nayar_get_intensity(sc, sd->N, I, omega_in);
>> +             return bsdf_oren_nayar_get_intensity(sc, sc->N, I, omega_in);
>>       }
>>       else {
>>               *pdf = 0.0f;
>> @@ -79,15 +79,15 @@
>>
>>   __device int bsdf_oren_nayar_sample(const ShaderData *sd, const ShaderClosure *sc, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf)
>>   {
>> -     sample_uniform_hemisphere(sd->N, randu, randv, omega_in, pdf);
>> +     sample_uniform_hemisphere(sc->N, randu, randv, omega_in, pdf);
>>
>>       if (dot(sd->Ng, *omega_in) > 0.0f) {
>> -             *eval = bsdf_oren_nayar_get_intensity(sc, sd->N, sd->I, *omega_in);
>> +             *eval = bsdf_oren_nayar_get_intensity(sc, sc->N, sd->I, *omega_in);
>>
>>   #ifdef __RAY_DIFFERENTIALS__
>>               // TODO: find a better approximation for the bounce
>> -             *domega_in_dx = (2.0f * dot(sd->N, sd->dI.dx)) * sd->N - sd->dI.dx;
>> -             *domega_in_dy = (2.0f * dot(sd->N, sd->dI.dy)) * sd->N - sd->dI.dy;
>> +             *domega_in_dx = (2.0f * dot(sc->N, sd->dI.dx)) * sc->N - sd->dI.dx;
>> +             *domega_in_dy = (2.0f * dot(sc->N, sd->dI.dy)) * sc->N - sd->dI.dy;
>>               *domega_in_dx *= 125.0f;
>>               *domega_in_dy *= 125.0f;
>>   #endif
>>
>> Modified: trunk/blender/intern/cycles/kernel/svm/bsdf_reflection.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/svm/bsdf_reflection.h  2012-10-10 14:28:47 UTC (rev 51266)
>> +++ trunk/blender/intern/cycles/kernel/svm/bsdf_reflection.h  2012-10-10 15:56:43 UTC (rev 51267)
>> @@ -69,7 +69,7 @@
>>   __device int bsdf_reflection_sample(const ShaderData *sd, const ShaderClosure *sc, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf)
>>   {
>>       //const BsdfReflectionClosure *self = (const BsdfReflectionClosure*)sc->data;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       // only one direction is possible
>>       float cosNO = dot(m_N, sd->I);
>>
>> Modified: trunk/blender/intern/cycles/kernel/svm/bsdf_refraction.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/svm/bsdf_refraction.h  2012-10-10 14:28:47 UTC (rev 51266)
>> +++ trunk/blender/intern/cycles/kernel/svm/bsdf_refraction.h  2012-10-10 15:56:43 UTC (rev 51267)
>> @@ -71,7 +71,7 @@
>>   __device int bsdf_refraction_sample(const ShaderData *sd, const ShaderClosure *sc, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf)
>>   {
>>       float m_eta = sc->data0;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       float3 R, T;
>>   #ifdef __RAY_DIFFERENTIALS__
>>
>> Modified: trunk/blender/intern/cycles/kernel/svm/bsdf_ward.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/svm/bsdf_ward.h        2012-10-10 14:28:47 UTC (rev 51266)
>> +++ trunk/blender/intern/cycles/kernel/svm/bsdf_ward.h        2012-10-10 15:56:43 UTC (rev 51267)
>> @@ -66,7 +66,7 @@
>>   {
>>       float m_ax = sc->data0;
>>       float m_ay = sc->data1;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>       float3 m_T = sd->T;
>>
>>       float cosNO = dot(m_N, I);
>> @@ -108,7 +108,7 @@
>>   {
>>       float m_ax = sc->data0;
>>       float m_ay = sc->data1;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>       float3 m_T = sd->T;
>>
>>       float cosNO = dot(m_N, sd->I);
>>
>> Modified: trunk/blender/intern/cycles/kernel/svm/bsdf_westin.h
>> ===================================================================
>> --- trunk/blender/intern/cycles/kernel/svm/bsdf_westin.h      2012-10-10 14:28:47 UTC (rev 51266)
>> +++ trunk/blender/intern/cycles/kernel/svm/bsdf_westin.h      2012-10-10 15:56:43 UTC (rev 51267)
>> @@ -62,7 +62,7 @@
>>   __device float3 bsdf_westin_backscatter_eval_reflect(const ShaderData *sd, const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
>>   {
>>       float m_invroughness = sc->data0;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       // pdf is implicitly 0 (no indirect sampling)
>>       float cosNO = dot(m_N, I);
>> @@ -89,7 +89,7 @@
>>   __device int bsdf_westin_backscatter_sample(const ShaderData *sd, const ShaderClosure *sc, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf)
>>   {
>>       float m_invroughness = sc->data0;
>> -     float3 m_N = sd->N;
>> +     float3 m_N = sc->N;
>>
>>       float cosNO = dot(m_N, sd->I);
>>       if(cosNO > 0) {
>>
>> @@ 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
>>
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs


More information about the Bf-committers mailing list