[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15781] branches/soc-2007-joeedh/source/ blender: fixed slowdown in strands, though note strand renderer by its nature\n will be slower then with it disabled .

joe joeedh at gmail.com
Sat Jul 26 19:29:13 CEST 2008


Well, that's the last time I try committing through the command line without
writing the log in a text editor.

On Sat, Jul 26, 2008 at 10:27 AM, Joseph Eagar <joeedh at gmail.com> wrote:

> Revision: 15781
>
> http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15781
> Author:   joeedh
> Date:     2008-07-26 19:27:50 +0200 (Sat, 26 Jul 2008)
>
> Log Message:
> -----------
> fixed slowdown in strands, though note strand renderer by its nature\n will
> be slower then with it disabled.  I might make a minimum strand angle limit
> for shadows,\n since I'm not sure if people care about strands looking
> perfectly smooth in shadows.
>
> Modified Paths:
> --------------
>    branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h
>    branches/soc-2007-joeedh/source/blender/blenkernel/BKE_tile.h
>
>  branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_bucketbuffer.c
>    branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_cache.c
>
>  branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h
>    branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c
>    branches/soc-2007-joeedh/source/blender/render/intern/source/strand.c
>    branches/soc-2007-joeedh/source/blender/render/intern/source/zbuf.c
>
> Modified: branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h
> ===================================================================
> --- branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h
>  2008-07-26 15:38:05 UTC (rev 15780)
> +++ branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h
>  2008-07-26 17:27:50 UTC (rev 15781)
> @@ -102,6 +102,10 @@
>
>  #define DSM_SAMPLEMERGE_LIMIT  (0x7FFFFFFF) //20000000
>
> +//angle limit of strands.  is in degrees, so
> +//code has to convert.ss
> +#define DSM_STRAND_MAX_ADAPTCOS 25.0
> +
>  #define DSM_LINEAR     1
>  #define DSM_SOFT       0
>  //#define DOQMCDEBUG
>
> Modified: branches/soc-2007-joeedh/source/blender/blenkernel/BKE_tile.h
> ===================================================================
> --- branches/soc-2007-joeedh/source/blender/blenkernel/BKE_tile.h
> 2008-07-26 15:38:05 UTC (rev 15780)
> +++ branches/soc-2007-joeedh/source/blender/blenkernel/BKE_tile.h
> 2008-07-26 17:27:50 UTC (rev 15781)
> @@ -152,10 +152,6 @@
>
>  /*TCS_TilePool->flag*/
>
> - /*the tile size is fixed, so the pool may safely
> -   reuse tiles.*/
> - #define TCS_POOL_TSIZEFIXED   1
> -
>  typedef struct TCS_TileBuffer {
>        struct TCS_TileBuffer *next, *prev;
>        struct TCS_TileBuffer *(*newBuffer)(TCS_TilePool *pool, int
> tilesizex, int tilesizey,
> @@ -171,16 +167,11 @@
>        int (*getSizeX)(struct TCS_TileBuffer *self);
>        int (*getSizeY)(struct TCS_TileBuffer *self);
>        unsigned int flag;
> -
> +
>        /*should be set by TCS_MakePool, not the newBuffer function*/
>        TCS_TilePool *pool;
>  } TCS_TileBuffer;
>
> -/* TCS_TileBuffer->flags */
> - /*Read only buffer means once a tile is written once, we
> -  never have to write it to disk again.*/
> -#define TCS_READONLY   1
> -
>  /*utility macro to check if a tile is cached.*/
>  #define TCS_ISTILECACHED(tile) (((TCS_Tile*)tile)->is_compressed)
>
> @@ -217,7 +208,7 @@
>  void TCS_AddToPool(TCS_TilePool *pool, void *vtile);
>
>  /*this function removes a tile from a tile pool.
> -  this is automatically called by TCS_FreeTile.*/
> +  this is automatically called by TCS_UnlinkTile.*/
>  void TCS_RemFromPool(void *vtile);
>
>  TCS_TileBuffer *TCS_MakeBuffer(TCS_TilePool *pool, TCS_TileBuffer *type,
> int tilesizex, int tilesizey,
> @@ -252,13 +243,17 @@
>
>  /*This function frees generic data associated with a tile, removes it from
> its pool, etc,
>   but it doesn't actually free the client tile data itself.*/
> -void TCS_FreeTile(void *vtile);
> +void TCS_UnlinkTile(void *vtile);
>
>  /*hrm, not sure if this next one will be needed, its possible it can
>   all be done from within TCS_GetTile(), perhaps even progressively*/
>  void TCS_RunCacher(TCS_TilePool *pool);
>  void TCS_SetCacheLimit(TCS_TilePool *pool, unsigned long max_mem_bytes);
>
> +/*makes a fixed-tilesize-pool.  note that tilesize is the on-disk size of
> the
> +  part of the tile that's saved on disk.*/
> +TCS_TilePool *TCS_MakeFixedPool(unsigned long max_mem_bytes, char *name,
> int tilesize);
> +
>  /******************* File wrapper to support both memory and real files.
> ************************/
>  /*this should all probably become part of blenlib*/
>
> @@ -290,4 +285,14 @@
>  #define BASSERT(eval)  if (!(eval)) printf("\nassert \"%s\" in file:\n%s\n
> on line %d failed.\n\n", #eval, __FILE__, __LINE__)
>  //#define BASSERT(eval)
>
> +/* TCS_TileBuffer->flag */
> + /*Read only buffer means once a tile is written once, we
> +  never have to write it to disk again.*/
> +#define TCS_READONLY   1
> +
> +/*TCS_TilePool>flag*/
> +/*the tile size is fixed, so the pool may safely
> +  reuse tiles.*/
> +#define TCS_POOL_TSIZEFIXED    1
> +
>  #endif /* BKE_TILE_H */
>
> Modified:
> branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_bucketbuffer.c
> ===================================================================
> ---
> branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_bucketbuffer.c
>        2008-07-26 15:38:05 UTC (rev 15780)
> +++
> branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_bucketbuffer.c
>        2008-07-26 17:27:50 UTC (rev 15781)
> @@ -41,7 +41,7 @@
>  extern TCS_TileBuffer TCS_BucketBuffer;
>  TCS_TilePool *re_bucket_pool = NULL;
>
> -#define POOLMAXMEM     75*1024*1024
> +#define POOLMAXMEM     40*1024*1024
>
>  RE_BucketBuffer *RE_Bucket_New(int sizex, int sizey, int tsizex, int
> tsizey) {
>        if (re_bucket_pool == NULL) re_bucket_pool =
> TCS_MakePool(POOLMAXMEM, "bucketpool");
> @@ -172,7 +172,8 @@
>        for (x=0; x<buf->tilex; x++) {
>                for (y=0; y<buf->tiley; y++) {
>                        tile = &buf->tilerect[y*buf->tilex+x];
> -
> +                       TCS_UnlinkTile(tile);
> +
>                        /*we don't use the BLI stuff since we're dealing
>                          with a singly-linked list, not a doubly-linked
> list*/
>                        for (entry=tile->ventries; entry; entry=next) {
>
> Modified:
> branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_cache.c
> ===================================================================
> --- branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_cache.c
>     2008-07-26 15:38:05 UTC (rev 15780)
> +++ branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_cache.c
>     2008-07-26 17:27:50 UTC (rev 15781)
> @@ -50,7 +50,7 @@
>  {
>        TCS_TilePool *pool = MEM_callocN(sizeof(TCS_TilePool), "tilepool");
>
> -       strncpy(pool->name, name, 32);
> +       strncpy(pool->name, name, 31);
>
>        /*sadly, strncpy does *not* do this. . .*/
>        pool->name[31] = 0;
> @@ -59,7 +59,7 @@
>        pool->maxmem = max_mem_bytes;
>
>        /*this is to group cache runs so they process no less then 5 megs at
> a time.*/
> -       pool->grace_period = 1024*1024*5;
> +       pool->grace_period = 5*1024*1024;
>
>        return pool;
>  }
> @@ -147,7 +147,7 @@
>        MEM_freeN(pool);
>  }
>
> -void TCS_FreeTile(void *vtile)
> +void TCS_UnlinkTile(void *vtile)
>  {
>        TCS_Tile *tile = vtile;
>
> @@ -553,6 +553,17 @@
>
>                        TCS_fwrite(&tile->compressed_memfile->length,
> sizeof(unsigned long), 1, tile->file);
>                        TCS_fwrite(tile->compressed_memfile->ptr,
> tile->compressed_memfile->length, 1, tile->file);
> +
> +                       /*if TCS_POOL_TSIZEFIXED is set, then we have to
> ensure the entire uncompressed
> +                         tile region on the disk is reserved, even if it's
> not used.*/
> +                       if (pool->flag & TCS_POOL_TSIZEFIXED) {
> +                               int diff = pool->tilesize -
> tile->compressed_memfile->length;
> +                               int i, zero=0;
> +                               for (i=0; i<diff; i++) {
> +                                       TCS_fwrite(&zero, sizeof(int), 1,
> tile->file);
> +                               }
> +                       }
> +
>                        TCS_fflush(tile->file);
>                }
>
>
> Modified:
> branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h
> ===================================================================
> ---
> branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h
>        2008-07-26 15:38:05 UTC (rev 15780)
> +++
> branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h
>        2008-07-26 17:27:50 UTC (rev 15781)
> @@ -267,6 +267,7 @@
>        struct VertTableNode *vertnodes;
>        struct VlakTableNode *vlaknodes;
>        struct StrandTableNode *strandnodes;
> +
>        struct HaloRen **bloha;
>        struct StrandBuffer *strandbuf;
>
>
> Modified:
> branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c
> ===================================================================
> --- branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c
>  2008-07-26 15:38:05 UTC (rev 15780)
> +++ branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c
>  2008-07-26 17:27:50 UTC (rev 15781)
> @@ -97,7 +97,7 @@
>        int i;
>
>        for (i=0; i<dbuf->tilex*dbuf->tiley; i++) {
> -               TCS_FreeTile(&dbuf->vfunc_rect[i]);
> +               TCS_UnlinkTile(&dbuf->vfunc_rect[i]);
>                if (dbuf->vfunc_rect[i].arena)
> BLI_memarena_free(dbuf->vfunc_rect[i].arena);
>                if (dbuf->vfunc_rect[i].funcarray)
> MEM_freeN(dbuf->vfunc_rect[i].funcarray);
>        }
> @@ -207,7 +207,8 @@
>        StrandRen *strand= NULL;
>        StrandVert *svert;
>        ObjectRen *obr;
> -       float imat[3][3], mat[3][3], viewinv[4][4];
> +       ObjectInstanceRen *obi;
> +       float imat[3][3], mat[3][3], mat4[4][4], mat3[3][3], viewinv[4][4];
>        int i, j, a;
>
>        if (mode == 0) {
> @@ -217,7 +218,19 @@
>        MTC_Mat4Invert(viewinv, oldview);
>        Mat3CpyMat4(imat, viewinv);
>        Mat3CpyMat4(mat, newview);
> +
> +       for (obi=re->instancetable.first; obi; obi=obi->next) {
> +               if(obi->flag & R_DUPLI_TRANSFORMED || obi->flag &
> R_TRANSFORMED) {
> +                       Mat4CpyMat4(mat4, obi->mat);
> +                       MTC_Mat4MulMat4(mat4, obi->mat, viewinv);
> +                       MTC_Mat4MulMat4(obi->mat, mat4, newview);
>
> +                       Mat3CpyMat4(mat3, obi->mat);
> +                       Mat3Inv(obi->nmat, mat3);
> +                       Mat3Transp(obi->nmat);
> +               }
> +       }
> +
>        for(i=0, obr=re->objecttable.first; obr; i++, obr=obr->next) {
>                for (j=0; j<obr->totvert; j++) {
>                        vert = RE_findOrAddVert(obr, j);
> @@ -384,7 +397,7 @@
>        }
>
>        bucketbuf = RE_BucketData(re, projmat, shb->size, shb->size,
> -                                     tilesize, tilesize, shb->soft,
> shb->soft, lay);
> +                                     tilesize, tilesize, shb->soft+25,
> shb->soft+25, lay);
>
>        dbuf->vfunc_rect =
> MEM_mapallocN(sizeof(DSMTile)*dbuf->tilex*dbuf->tiley, "dsm tiles");
>
> @@ -537,7 +550,7 @@
>                                re->i.infostr= NULL;
>                        }
>                        lastdone = done;
> -                       PIL_sleep_ms(300);
> +                       PIL_sleep_ms(30);
>                }
>
>                BLI_end_threads(&threads);
>
> Modified:
> branches/soc-2007-joeedh/source/blender/render/intern/source/strand.c
> ===================================================================
> --- branches/soc-2007-joeedh/source/blender/render/intern/source/strand.c
>     2008-07-26 15:38:05 UTC (rev 15780)
> +++ branches/soc-2007-joeedh/source/blender/render/intern/source/strand.c
>     2008-07-26 17:27:50 UTC (rev 15781)
> @@ -45,6 +45,7 @@
>  #include "BKE_DerivedMesh.h"
>  #include "BKE_key.h"
>  #include "BKE_utildefines.h"
> +#include "BKE_global.h"
>
>  #include "render_types.h"
>  #include "initrender.h"
> @@ -661,13 +662,22 @@
>                projectvert(p2->co, winmat, hoco2);
>
>                for(a=0; a<totzspan; a++) {
> -#if 0
> -                       /* render both strand and single pixel wire to
> counter aliasing */
> -                       zbufclip4(re, &zspan[a], obi, index, p1->hoco2,
> p1->hoco1, p2->hoco1, p2->hoco2, p1->clip2, p1->clip1, p2->clip1,
> p2->clip2);
> -#endif
> -                       /* only render a line for now, which makes the
> shadow map more
> -                          similiar across frames, and so reduces flicker
> */
> -                       zbufsinglewire(&zspan[a], obi, index, hoco1,
> hoco2);
> +                       if (G.rt != 17) {
> +                               projectvert(p1->co1, winmat, p1->hoco1);
> +                               projectvert(p1->co2, winmat, p1->hoco2);
> +
> +                               projectvert(p2->co1, winmat, p2->hoco1);
> +                               projectvert(p2->co2, winmat, p2->hoco2);
> +
> +                               zbufclip4(re, &zspan[a], obi, index,
> p1->hoco2, p1->hoco1, p2->hoco1, p2->hoco2, p1->clip2, p1->clip1, p2->clip1,
> p2->clip2);
> +                               //zbufclip(re, &zspan[a], obi, index,
> p1->hoco2, p1->hoco1, p2->hoco1, p1->clip2, p1->clip1, p2->clip1);
> +                               //zbufclip(re, &zspan[a], obi, index,
> p1->hoco2, p2->hoco1, p2->hoco2, p1->clip2, p2->clip1, p2->clip2);
> +                       } else {
> +                               /* (DISABLED for now):
> +                                  only render a line for now, which makes
> the shadow map more
>
> @@ 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.blender.org/pipermail/bf-blender-cvs/attachments/20080726/43f9b985/attachment.html>


More information about the Bf-blender-cvs mailing list