And there's another annoyance I got poked for:
authorTon Roosendaal <ton@blender.org>
Fri, 28 Dec 2007 18:58:40 +0000 (18:58 +0000)
committerTon Roosendaal <ton@blender.org>
Fri, 28 Dec 2007 18:58:40 +0000 (18:58 +0000)
Image texture "Filter size" was not well usable for making the
appearance soft filtered, this because it multiplied the sample
values, and such values could be extreme small.

Added next to "Filter" buton a new "Min" option, which enforces
a filter size to be a minimum of 'filter' pixels in size.

source/blender/makesdna/DNA_texture_types.h
source/blender/render/intern/source/imagetexture.c
source/blender/src/buttons_shading.c

index 14ece2b31b293804d6148fe17db46df3b0f5cff2..182ac6025fd7bb4b4fdf171209efff49f374ec3d 100644 (file)
@@ -248,6 +248,7 @@ typedef struct TexMapping {
 #define TEX_CALCALPHA  32
 #define TEX_NORMALMAP  2048
 #define TEX_GAUSS_MIP  4096
+#define TEX_FILTER_MIN 8192
 
 /* imaflag unused, only for version check */
 #define TEX_FIELDS_            8
index 23b5e597070c62f51f8e297ede3a47d57e817274..cc0ce57bb99bc3839433134f05b1d6a2b6e722c3 100644 (file)
@@ -702,6 +702,15 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, float *dxt, f
        minx= tex->filtersize*(maxx-minx)/2.0f;
        miny= tex->filtersize*(maxy-miny)/2.0f;
        
+       if(tex->imaflag & TEX_FILTER_MIN) {
+               /* make sure the filtersize is minimal in pixels (normal, ref map can have miniature pixel dx/dy) */
+               float addval= (0.5f * tex->filtersize) / (float) MIN2(ibuf->x, ibuf->y);
+               
+               if(addval > minx)
+                       minx= addval;
+               if(addval > miny)
+                       miny= addval;
+       }
        if(tex->filtersize!=1.0f) {
                dxt[0]*= tex->filtersize;
                dxt[1]*= tex->filtersize;
index 3b597e47fa54fc2981b5b334b22e920ec00c5864..c82aee0155ae361a5dc9eb8d34f2ca22e4d190f4 100644 (file)
@@ -1244,9 +1244,10 @@ static void texture_panel_image_map(Tex *tex, MTex *mtex)
        uiDefButBitS(block, TOG, TEX_USEALPHA, B_TEXPRV, "UseAlpha",    10, 160, 100, 20, &tex->imaflag, 0, 0, 0, 0, "Click to use Image's alpha channel");
        uiDefButBitS(block, TOG, TEX_CALCALPHA, B_TEXPRV, "CalcAlpha",  110, 160, 100, 20, &tex->imaflag, 0, 0, 0, 0, "Click to calculate an alpha channel based on Image RGB values");
        uiDefButBitS(block, TOG, TEX_NEGALPHA, B_TEXPRV, "NegAlpha",    210, 160, 100, 20, &tex->flag, 0, 0, 0, 0, "Click to invert the alpha values");
-       uiBlockEndAlign(block);
 
-       uiDefButF(block, NUM, B_TEXPRV, "Filter :",                                             10,120,150,20, &tex->filtersize, 0.1, 25.0, 10, 3, "Sets the filter size used by mipmap and interpol");
+       uiBlockBeginAlign(block);
+       uiDefButBitS(block, TOG, TEX_FILTER_MIN, B_TEXPRV, "Min",       10, 120, 30, 20, &tex->imaflag, 0, 0, 0, 0, "Use Filtersize as a minimal filter value in pixels");
+       uiDefButF(block, NUM, B_TEXPRV, "Filter: ",                                     40,120,120,20, &tex->filtersize, 0.1, 25.0, 10, 3, "Multiplies the filter size used by mipmap and interpol");
        
        uiBlockBeginAlign(block);
        uiDefButBitS(block, TOG, TEX_NORMALMAP, B_NOP, "Normal Map",    160,120,(mtex)? 75: 150,20, &tex->imaflag,