Render feature: the END OF DIFFUSE BANDING!
authorTon Roosendaal <ton@blender.org>
Fri, 28 Dec 2007 13:11:27 +0000 (13:11 +0000)
committerTon Roosendaal <ton@blender.org>
Fri, 28 Dec 2007 13:11:27 +0000 (13:11 +0000)
http://www.blender.org/development/current-projects/changes-since-244/rendering-features/

Thanks Andy for poking and analysing, and Nathan for feedback!

source/blender/makesdna/DNA_material_types.h
source/blender/render/intern/source/shadeoutput.c
source/blender/src/buttons_shading.c

index f0b06585f27b12a5416f1d7c08a2b2187aec48e4..dd6b2692de6644ca1c8d275ef55e2ef3223462e0 100644 (file)
@@ -79,7 +79,7 @@ typedef struct Material {
        float aniso_gloss_mir;
        float dist_mir;
        short fadeto_mir;
-       short pad1;
+       short shade_flag;               /* like Cubic interpolation */
                
        int mode, mode_l;               /* mode_l is the or-ed result of all layer modes */
        short flarec, starc, linec, ringc;
@@ -201,6 +201,9 @@ typedef struct Material {
 #define MA_RAYMIR_FADETOSKY    0
 #define MA_RAYMIR_FADETOMAT    1
 
+/* shade_flag */
+#define MA_CUBIC                       1
+
 /* diff_shader */
 #define MA_DIFF_LAMBERT                0
 #define MA_DIFF_ORENNAYAR      1
index a08046da0da2d238dc82750abc9b748ba5cc2444..0823ae146f762ec8537f39a78faf2811d5c116a9 100644 (file)
@@ -1297,7 +1297,10 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int
                else is= inp;   // Lambert
        }
        
-       /* i is diffuse */
+       /* 'is' is diffuse */
+       if((ma->shade_flag & MA_CUBIC) && is>0.0f)
+               is= 3.0*is*is - 2.0*is*is*is;   // nicer termination of shades
+
        i= is*phongcorr;
        
        if(i>0.0f) {
index ad1afcc06087c437202259dd531a1e72ca5392f2..3b597e47fa54fc2981b5b334b22e920ec00c5864 100644 (file)
@@ -3791,7 +3791,8 @@ static void material_panel_shading(Material *ma)
                uiDefButBitI(block, TOG, MA_SHADOW, B_MATPRV,   "Shadow",                       245,140,65,19, &(ma->mode), 0, 0, 0, 0, "Makes material receive shadows");
                uiDefButBitI(block, TOG, MA_SHADOW_TRA, B_MATPRV, "TraShadow",          245,120,65,19, &(ma->mode), 0, 0, 0, 0, "Receives transparent shadows based at material color and alpha");
                uiDefButBitI(block, TOG, MA_ONLYSHADOW, B_MATPRV,       "OnlyShad",             245,100,65,20, &(ma->mode), 0, 0, 0, 0, "Renders shadows on material as Alpha value");
-               uiDefButBitI(block, TOG, MA_RAYBIAS, B_MATPRV, "Bias",                          245,80,65,19, &(ma->mode), 0, 0, 0, 0, "Prevents ray traced shadow errors with phong interpolated normals (terminator problem)");
+               uiDefButBitS(block, TOG, MA_CUBIC, B_MATPRV, "Cubic",                           245,80,65,19, &(ma->shade_flag), 0, 0, 0, 0, "Use Cubic interpolation of diffuse values, for smoother transitions)");
+               uiDefButBitI(block, TOG, MA_RAYBIAS, B_MATPRV, "Bias",                          245,60,65,19, &(ma->mode), 0, 0, 0, 0, "Prevents ray traced shadow errors with phong interpolated normals (terminator problem)");
 
                uiBlockBeginAlign(block);
                uiDefIDPoinBut(block, test_grouppoin_but, ID_GR, B_MATPRV, "GR:",       9, 55, 150, 19, &ma->group, "Limit Lighting to Lamps in this Group");