Tune smooth lighting a bit
authorPerttu Ahola <celeron55@gmail.com>
Sun, 20 May 2012 11:12:17 +0000 (14:12 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Sun, 20 May 2012 11:12:17 +0000 (14:12 +0300)
src/mapblock_mesh.cpp

index 0e26161e2d7aee65776743e46e6a3fe865935a42..658ffe5eea31fae855a9020e4c41b6880fb3e513 100644 (file)
@@ -274,8 +274,16 @@ static u8 getSmoothLight(enum LightBank bank, v3s16 p, MeshMakeData *data)
 
        if(ambient_occlusion > 4)
        {
-               ambient_occlusion -= 4;
-               light = (float)light / ((float)ambient_occlusion * 0.5 + 1.0);
+               //ambient_occlusion -= 4;
+               //light = (float)light / ((float)ambient_occlusion * 0.5 + 1.0);
+               float light_amount = (8 - ambient_occlusion) / 4.0;
+               float light_f = (float)light / 255.0;
+               light_f = pow(light_f, 2.2); // gamma -> linear space
+               light_f = light_f * light_amount;
+               light_f = pow(light_f, 1.0/2.2); // linear -> gamma space
+               if(light_f > 1.0)
+                       light_f = 1.0;
+               light = 255.0 * light_f + 0.5;
        }
 
        return light;