[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12407] trunk/blender/source/blender: nodes from eechlo

Chris Burt desoto at exenex.com
Fri Oct 26 18:57:08 CEST 2007


Are there any docs on these anywhere aside from the one demo image in
the bug tracker?

Thanks!

--Chris

On 10/26/07, Campbell Barton <cbarton at metavr.com> wrote:
> Revision: 12407
>           http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12407
> Author:   campbellbarton
> Date:     2007-10-26 17:32:36 +0200 (Fri, 26 Oct 2007)
>
> Log Message:
> -----------
> nodes from eechlo
> * glare
> * tonemap
> * lense distort
> * fast gauss blur
>
> http://projects.blender.org/tracker/?func=detail&atid=127&aid=7505&group_id=9
>
> made fast gauss blur an option for the blur node rather then a separate node.
>
> Modified Paths:
> --------------
>     trunk/blender/source/blender/blenkernel/BKE_node.h
>     trunk/blender/source/blender/blenkernel/intern/node.c
>     trunk/blender/source/blender/imbuf/intern/radiance_hdr.c
>     trunk/blender/source/blender/makesdna/DNA_node_types.h
>     trunk/blender/source/blender/makesdna/DNA_scene_types.h
>     trunk/blender/source/blender/nodes/CMP_node.h
>     trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_blur.c
>     trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_defocus.c
>     trunk/blender/source/blender/nodes/intern/CMP_util.c
>     trunk/blender/source/blender/nodes/intern/CMP_util.h
>     trunk/blender/source/blender/src/drawnode.c
>
> Added Paths:
> -----------
>     trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_glare.c
>     trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_lensdist.c
>     trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_tonemap.c
>
> Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/BKE_node.h  2007-10-26 15:13:50 UTC (rev 12406)
> +++ trunk/blender/source/blender/blenkernel/BKE_node.h  2007-10-26 15:32:36 UTC (rev 12407)
> @@ -303,6 +303,10 @@
>  #define CMP_NODE_INVERT                251
>  #define CMP_NODE_NORMALIZE      252
>
> +#define CMP_NODE_GLARE         301
> +#define CMP_NODE_TONEMAP       302
> +#define CMP_NODE_LENSDIST      303
> +
>  /* channel toggles */
>  #define CMP_CHAN_RGB           1
>  #define CMP_CHAN_A                     2
>
> Modified: trunk/blender/source/blender/blenkernel/intern/node.c
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/intern/node.c       2007-10-26 15:13:50 UTC (rev 12406)
> +++ trunk/blender/source/blender/blenkernel/intern/node.c       2007-10-26 15:32:36 UTC (rev 12407)
> @@ -2365,6 +2365,10 @@
>         nodeRegisterType(ntypelist, &cmp_node_flip);
>         nodeRegisterType(ntypelist, &cmp_node_displace);
>         nodeRegisterType(ntypelist, &cmp_node_mapuv);
> +
> +       nodeRegisterType(ntypelist, &cmp_node_glare);
> +       nodeRegisterType(ntypelist, &cmp_node_tonemap);
> +       nodeRegisterType(ntypelist, &cmp_node_lensdist);
>  }
>
>  static void registerShaderNodes(ListBase *ntypelist)
>
> Modified: trunk/blender/source/blender/imbuf/intern/radiance_hdr.c
> ===================================================================
> --- trunk/blender/source/blender/imbuf/intern/radiance_hdr.c    2007-10-26 15:13:50 UTC (rev 12406)
> +++ trunk/blender/source/blender/imbuf/intern/radiance_hdr.c    2007-10-26 15:32:36 UTC (rev 12407)
> @@ -161,8 +161,10 @@
>
>  int imb_is_a_hdr(void *buf)
>  {
> -       /* For recognition, Blender only loades first 32 bytes, so use #?RADIANCE id instead */
> -       if (strstr((char*)buf, "#?RADIANCE")) return 1;
> +       // For recognition, Blender only loads first 32 bytes, so use #?RADIANCE id instead
> +       // update: actually, the 'RADIANCE' part is just an optional program name, the magic word is really only the '#?' part
> +       //if (strstr((char*)buf, "#?RADIANCE")) return 1;
> +       if (strstr((char*)buf, "#?")) return 1;
>         // if (strstr((char*)buf, "32-bit_rle_rgbe")) return 1;
>         return 0;
>  }
> @@ -176,7 +178,6 @@
>         int found=0;
>         int width=0, height=0;
>         int x, y;
> -       int ir, ig, ib;
>         unsigned char* ptr;
>         unsigned char* rect;
>         char oriY[80], oriX[80];
> @@ -225,18 +226,14 @@
>                                         *rect_float++ = fcol[GRN];
>                                         *rect_float++ = fcol[BLU];
>                                         *rect_float++ = 1.0f;
> -
>                                         /* Also old oldstyle for the rest of blender which is not using floats yet */
> -/* very weird mapping! (ton) */
> -                                       fcol[RED] = 1.f-exp(fcol[RED]*-1.414213562f);
> -                                       fcol[GRN] = 1.f-exp(fcol[GRN]*-1.414213562f);
> -                                       fcol[BLU] = 1.f-exp(fcol[BLU]*-1.414213562f);
> -                                       ir = (int)(255.f*pow(fcol[RED], 0.45454545f));
> -                                       ig = (int)(255.f*pow(fcol[GRN], 0.45454545f));
> -                                       ib = (int)(255.f*pow(fcol[BLU], 0.45454545f));
> -                                       *rect++ = (unsigned char)((ir<0) ? 0 : ((ir>255) ? 255 : ir));
> -                                       *rect++ = (unsigned char)((ig<0) ? 0 : ((ig>255) ? 255 : ig));
> -                                       *rect++ = (unsigned char)((ib<0) ? 0 : ((ib>255) ? 255 : ib));
> +                                       // e: changed to simpler tonemapping, previous code was rather slow (is this actually still relevant at all?)
> +                                       fcol[RED] = fcol[RED]/(1.f + fcol[RED]);
> +                                       fcol[GRN] = fcol[GRN]/(1.f + fcol[GRN]);
> +                                       fcol[BLU] = fcol[BLU]/(1.f + fcol[BLU]);
> +                                       *rect++ = (unsigned char)((fcol[RED] < 0.f) ? 0 : ((fcol[RED] > 1.f) ? 255 : (255.f*fcol[RED])));
> +                                       *rect++ = (unsigned char)((fcol[GRN] < 0.f) ? 0 : ((fcol[GRN] > 1.f) ? 255 : (255.f*fcol[GRN])));
> +                                       *rect++ = (unsigned char)((fcol[BLU] < 0.f) ? 0 : ((fcol[BLU] > 1.f) ? 255 : (255.f*fcol[BLU])));
>                                         *rect++ = 255;
>                                 }
>                         }
> @@ -328,11 +325,11 @@
>         fputc(10, file);
>         fprintf(file, "# %s", "Created with Blender");
>         fputc(10, file);
> -       fprintf(file, "FORMAT=32-bit_rle_rgbe");
> -       fputc(10, file);
>         fprintf(file, "EXPOSURE=%25.13f", 1.0);
>         fputc(10, file);
> +       fprintf(file, "FORMAT=32-bit_rle_rgbe");
>         fputc(10, file);
> +       fputc(10, file);
>         fprintf(file, "-Y %d +X %d", height, width);
>         fputc(10, file);
>  }
>
> Modified: trunk/blender/source/blender/makesdna/DNA_node_types.h
> ===================================================================
> --- trunk/blender/source/blender/makesdna/DNA_node_types.h      2007-10-26 15:13:50 UTC (rev 12406)
> +++ trunk/blender/source/blender/makesdna/DNA_node_types.h      2007-10-26 15:32:36 UTC (rev 12407)
> @@ -230,4 +230,24 @@
>         float fstop, maxblur, bthresh, scale;
>  } NodeDefocus;
>
> +
> +/* qdn: glare node */
> +typedef struct NodeGlare {
> +       char quality, type, iter;
> +       char angle, angle_ofs, size, pad[2];
> +       float colmod, mix, threshold, fade;
> +} NodeGlare;
> +
> +/* qdn: tonemap node */
> +typedef struct NodeTonemap {
> +       float key, offset, gamma;
> +       float f, m, a, c;
> +       int type;
> +} NodeTonemap;
> +
> +/* qdn: lens distortion node */
> +typedef struct NodeLensDist {
> +       short jit, proj, fit, pad;
> +} NodeLensDist;
> +
>  #endif
>
> Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
> ===================================================================
> --- trunk/blender/source/blender/makesdna/DNA_scene_types.h     2007-10-26 15:13:50 UTC (rev 12406)
> +++ trunk/blender/source/blender/makesdna/DNA_scene_types.h     2007-10-26 15:32:36 UTC (rev 12407)
> @@ -507,6 +507,7 @@
>  #define R_FILTER_CATROM        4
>  #define R_FILTER_GAUSS 5
>  #define R_FILTER_MITCH 6
> +#define R_FILTER_FAST_GAUSS    7 /* note, this is only used for nodes at the moment */
>
>  /* yafray: renderer flag (not only exclusive to yafray) */
>  #define R_INTERN       0
>
> Modified: trunk/blender/source/blender/nodes/CMP_node.h
> ===================================================================
> --- trunk/blender/source/blender/nodes/CMP_node.h       2007-10-26 15:13:50 UTC (rev 12406)
> +++ trunk/blender/source/blender/nodes/CMP_node.h       2007-10-26 15:32:36 UTC (rev 12407)
> @@ -97,6 +97,8 @@
>  extern bNodeType cmp_node_displace;
>  extern bNodeType cmp_node_mapuv;
>
> +extern bNodeType cmp_node_glare;
> +extern bNodeType cmp_node_tonemap;
> +extern bNodeType cmp_node_lensdist;
> +
>  #endif
> -
> -
>
> Modified: trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_blur.c
> ===================================================================
> --- trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_blur.c      2007-10-26 15:13:50 UTC (rev 12406)
> +++ trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_blur.c      2007-10-26 15:32:36 UTC (rev 12407)
> @@ -28,9 +28,8 @@
>   */
>
>  #include "../CMP_util.h"
> +#include "qdutil.h" /* use for fast gauss only */
>
> -
> -
>  /* **************** BLUR ******************** */
>  static bNodeSocketType cmp_node_blur_in[]= {
>         {       SOCK_RGBA, 1, "Image",                  0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
> @@ -555,8 +554,6 @@
>                 free_compbuf(ref_use);
>  }
>
> -
> -
>  static void node_composit_exec_blur(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
>  {
>         CompBuf *new, *img= in[0]->data;
> @@ -564,35 +561,48 @@
>         if(img==NULL || out[0]->hasoutput==0)
>                 return;
>
> -       if(img->type==CB_VEC2 || img->type==CB_VEC3) {
> -               img= typecheck_compbuf(in[0]->data, CB_RGBA);
> -       }
> +       if (((NodeBlurData *)node->storage)->filtertype == R_FILTER_FAST_GAUSS) {
> +               CompBuf *new, *img = in[0]->data;
> +               /*from eeshlo's original patch, removed to fit in with the existing blur node */
> +               /*const float sx = in[1]->vec[0], sy = in[2]->vec[0];*/
>
> -       /* if fac input, we do it different */
> -       if(in[1]->data) {
> +               NodeBlurData *nbd= node->storage;
> +               const float sx = ((float)nbd->sizex)/2.0f, sy = ((float)nbd->sizey)/2.0f;
> +               int c;
> +
> +               if ((img==NULL) || (out[0]->hasoutput==0)) return;
> +
> +               if (img->type == CB_VEC2)
> +                       new = typecheck_compbuf(img, CB_VAL);
> +               else if (img->type == CB_VEC3)
> +                       new = typecheck_compbuf(img, CB_RGBA);
> +               else
> +                       new = dupalloc_compbuf(img);
> +
> +               if ((sx == sy) && (sx > 0.f)) {
> +                       for (c=0; c<new->type; ++c)
> +                               IIR_gauss(new, sx, c, 3);
> +               }
> +               else {
> +                       if (sx > 0.f) {
> +                               for (c=0; c<new->type; ++c)
> +                                       IIR_gauss(new, sx, c, 1);
> +                       }
> +                       if (sy > 0.f) {
> +                               for (c=0; c<new->type; ++c)
> +                                       IIR_gauss(new, sy, c, 2);
> +                       }
> +               }
> +               out[0]->data = new;
>
> -               /* make output size of input image */
> -               new= alloc_compbuf(img->x, img->y, img->type, 1); /* allocs */
> -
> -               /* accept image offsets from other nodes */
> -               new->xof = img->xof;
> -               new->yof = img->yof;
> -
> -               blur_with_reference(node, new, img, in[1]->data);
> -               if(node->exec & NODE_BREAK) {
> -                       free_compbuf(new);
> -                       new= NULL;
> +       } else {
> +               /* All non fast gauss blur methods */
> +               if(img->type==CB_VEC2 || img->type==CB_VEC3) {
> +                       img= typecheck_compbuf(in[0]->data, CB_RGBA);
>                 }
> -               out[0]->data= new;
> -       }
> -       else {
>
> -               if(in[1]->vec[0]<=0.001f) {     /* time node inputs can be a tiny value */
> -                       new= pass_on_compbuf(img);
> -               }
> -               else {
> -                       NodeBlurData *nbd= node->storage;
> -                       CompBuf *gammabuf;
> +               /* if fac input, we do it different */
> +               if(in[1]->data) {
>
>                         /* make output size of input image */
>                         new= alloc_compbuf(img->x, img->y, img->type, 1); /* allocs */
> @@ -600,33 +610,57 @@
>                         /* accept image offsets from other nodes */
>                         new->xof = img->xof;
>                         new->yof = img->yof;
> -
> -                       if(nbd->gamma) {
> -                               gammabuf= dupalloc_compbuf(img);
> -                               gamma_correct_compbuf(gammabuf, 0);
> -                       }
> -                       else gammabuf= img;
>
> -                       if(nbd->bokeh)
> -                               bokeh_single_image(node, new, gammabuf, in[1]->vec[0]);
> -                       else if(1)
> -                               blur_single_image(node, new, gammabuf, in[1]->vec[0]);
> -                       else    /* bloom experimental... */
> -                               bloom_with_reference(new, gammabuf, NULL, in[1]->vec[0], nbd);
> -
> -                       if(nbd->gamma) {
> -                               gamma_correct_compbuf(new, 1);
> -                               free_compbuf(gammabuf);
> -                       }
> +                       blur_with_reference(node, new, img, in[1]->data);
>                         if(node->exec & NODE_BREAK) {
>                                 free_compbuf(new);
>                                 new= NULL;
>                         }
> +                       out[0]->data= new;
>                 }
> -               out[0]->data= new;
> +               else {
> +
> +                       if(in[1]->vec[0]<=0.001f) {     /* time node inputs can be a tiny value */
> +                               new= pass_on_compbuf(img);
> +                       }
> +                       else {
> +                               NodeBlurData *nbd= node->storage;
> +                               CompBuf *gammabuf;
> +
> +                               /* make output size of input image */
> +                               new= alloc_compbuf(img->x, img->y, img->type, 1); /* allocs */
> +
> +                               /* accept image offsets from other nodes */
> +                               new->xof = img->xof;
> +                               new->yof = img->yof;
> +
> +                               if(nbd->gamma) {
> +                                       gammabuf= dupalloc_compbuf(img);
> +                                       gamma_correct_compbuf(gammabuf, 0);
> +                               }
> +                               else gammabuf= img;
> +
> +                               if(nbd->bokeh)
> +                                       bokeh_single_image(node, new, gammabuf, in[1]->vec[0]);
> +                               else if(1)
> +                                       blur_single_image(node, new, gammabuf, in[1]->vec[0]);
> +                               else    /* bloom experimental... */
> +                                       bloom_with_reference(new, gammabuf, NULL, in[1]->vec[0], nbd);
> +
>
> @@ 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
>


More information about the Bf-committers mailing list