[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13976] trunk/blender/source/blender: Restored code from over a year ago, tests to allow anti-aliased
Joe Eagar
joeedh at gmail.com
Thu Mar 6 13:32:25 CET 2008
Unfortunately DSM's are much MUCH slower then normal shadow buffers.
I'm currently still obsessing over ways to make them faster. . .perhaps
a SIMD macro library (something generic that'd properly detect different
CPU architectures at compile-time) could be written, then I could use it
to speed things up.
I've even considered offloading some of the work onto the GPU, since
GPUs are *miles* ahead of CPUs for the specific type of processing they
do. Unfortunately this could potentially be complex what with different
gfx card configurations, basically if a card wasn't on a "does-work"
list then the GPU code would have to be disabled, reverting to the
slower code. Of course, the speedup might be worth it; the JPatch guys,
for example, did a real-time subsurfer on the GPU that dynamically
calculated subsurf levels based on distance to faces in real time (if I
remember right). And there are actually other examples of real-time GPU
stuff, including other subsurfers (mostly in papers though).
Joe
Ton Roosendaal wrote:
> Revision: 13976
> http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13976
> Author: ton
> Date: 2008-03-05 11:03:31 +0100 (Wed, 05 Mar 2008)
>
> Log Message:
> -----------
> Restored code from over a year ago, tests to allow anti-aliased
> shadowbuffers. At the time the results were not satisfying enough,
> but we now suffer a shadow problem that might well be solved with
> this feature.
>
> Problem:
> Temporal aliasing of shadowbuffers when small details move (like strands).
>
> In this case it doesn't work to simply increase the shadowbuffer size,
> because strands are pixel-sized. Huge shadowbuffers make strand shadows
> almost disappear. So... the shadowbuffer resolution has to be not too high.
>
> Instead of increasing the buffer size, we then create multiple buffers,
> each on different subpixel positions (a bit like "FSA" :).
>
> So! Shadowbuffer sampling then works as follows;
>
> 1) You take multiple samples in the shadowbuffer, on different locations
> inside (or around) the rendered pixel.
> That option was aready available as "Samp" button in Lamps
>
> 2) Set amount of sample buffers. It is default 1, but can be 4 or 9.
>
> The results of setting it to '4' or '9' buffers you can see here:
> http://www.blender.org/bf/filters/index3.html
>
> Actually, deep shadowbuffers could solve it probably too! Anyhoo...
>
> Modified Paths:
> --------------
> trunk/blender/source/blender/render/intern/source/convertblender.c
> trunk/blender/source/blender/src/buttons_shading.c
>
> Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
> ===================================================================
> --- trunk/blender/source/blender/render/intern/source/convertblender.c 2008-03-05 06:11:00 UTC (rev 13975)
> +++ trunk/blender/source/blender/render/intern/source/convertblender.c 2008-03-05 10:03:31 UTC (rev 13976)
> @@ -3339,8 +3339,6 @@
> /* percentage render: keep track of min and max */
> shb->size= (lar->bufsize*re->r.size)/100;
>
> - if(lar->buffers>1) shb->size/= 2;
> -
> if(shb->size<512) shb->size= 512;
> else if(shb->size > lar->bufsize) shb->size= lar->bufsize;
>
>
> Modified: trunk/blender/source/blender/src/buttons_shading.c
> ===================================================================
> --- trunk/blender/source/blender/src/buttons_shading.c 2008-03-05 06:11:00 UTC (rev 13975)
> +++ trunk/blender/source/blender/src/buttons_shading.c 2008-03-05 10:03:31 UTC (rev 13976)
> @@ -2585,7 +2585,7 @@
> float grid=0.0;
>
> block= uiNewBlock(&curarea->uiblocks, "lamp_panel_spot", UI_EMBOSS, UI_HELV, curarea->win);
> - if(uiNewPanel(curarea, block, "Shadow and Spot", "Lamp", 640, 0, 318, 204)==0) return;
> + if(uiNewPanel(curarea, block, "Shadow and Spot", "Lamp", 640, 0, 318, 224)==0) return;
>
> /* hemis and ray shadow dont work at all... */
> /* yafray: ignore photonlight as well */
> @@ -2635,9 +2635,10 @@
> uiDefButS(block, ROW,B_NOP, "Tent", 165,90,65,19, &la->filtertype, 0.0, LA_SHADBUF_TENT, 0, 0, "Apply Tent filter for shadowbuffer samples");
> uiDefButS(block, ROW,B_NOP, "Gauss", 230,90,70,19, &la->filtertype, 0.0, LA_SHADBUF_GAUSS, 0, 0, "Apply Gauss filter for shadowbuffer samples");
>
> - // uiDefButS(block, ROW,B_NOP,"SubSamples: 1", 100,90,140,19, &la->buffers, 1.0, 1.0, 0, 0, "Amount of lampbuffer subsamples, a value of larger than 1 halves the shadowbuffer size");
> - // uiDefButS(block, ROW,B_NOP,"4", 240,90,30,19, &la->buffers, 1.0, 4.0, 0, 0, "Amount of lampbuffer subsamples, this halves the actual shadowbuffer size");
> - // uiDefButS(block, ROW,B_NOP,"9", 270,90,30,19, &la->buffers, 1.0, 9.0, 0, 0, "Amount of lampbuffer subsamples, this halves the shadowbuffer size");
> + uiBlockBeginAlign(block);
> + uiDefButS(block, ROW,B_NOP,"SampleBuffers: 1", 100,-15,140,19, &la->buffers, 1.0, 1.0, 0, 0, "Only one lampbuffer rendered");
> + uiDefButS(block, ROW,B_NOP,"4", 240,-15,30,19, &la->buffers, 1.0, 4.0, 0, 0, "Renders 4 lampbuffers for better AA, this quadruples memory usage");
> + uiDefButS(block, ROW,B_NOP,"9", 270,-15,30,19, &la->buffers, 1.0, 9.0, 0, 0, "Renders 9 lampbuffers for better AA, this uses nine times more memory");
>
> uiBlockBeginAlign(block);
> uiDefButS(block, NUM,B_LAMPREDRAW,"Samples:", 100,60,100,19, &la->samp,1.0,16.0, 0, 0, "Sets the number of shadow map samples");
>
>
> _______________________________________________
> 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