Darkness detection: Reduce chance of false positives darkening the skybox
authorLars Hofhansl <larsh@apache.org>
Sat, 22 Jul 2017 19:44:15 +0000 (12:44 -0700)
committerparamat <mat.gregory@virginmedia.com>
Sun, 30 Jul 2017 17:28:16 +0000 (18:28 +0100)
The getBackgroundBrightness() function detects darkness in the view direction
to decide when to make the skybox dark. The volume checked was too narrow and
missed the left and right edges of the view, too easily causing a dark skybox.

Widen the checked volume to match a FOV of 72 degrees and a 16:9 aspect ratio
game window.

src/clientmap.cpp

index 7027d07e42ba0f7ed3a9a73758d3ade3de9f179e..c443773b66461beaf7391066193001e97c295e1f 100644 (file)
@@ -596,11 +596,12 @@ int ClientMap::getBackgroundBrightness(float max_d, u32 daylight_factor,
        };
        if(z_directions[0].X < -99){
                for(u32 i=0; i<sizeof(z_directions)/sizeof(*z_directions); i++){
+                       // Assumes FOV of 72 and 16/9 aspect ratio
                        z_directions[i] = v3f(
-                               0.01 * myrand_range(-100, 100),
+                               0.02 * myrand_range(-100, 100),
                                1.0,
                                0.01 * myrand_range(-100, 100)
-                       );
+                       ).normalize();
                        z_offsets[i] = 0.01 * myrand_range(0,100);
                }
        }
@@ -613,7 +614,6 @@ int ClientMap::getBackgroundBrightness(float max_d, u32 daylight_factor,
        std::vector<int> values;
        for(u32 i=0; i<sizeof(z_directions)/sizeof(*z_directions); i++){
                v3f z_dir = z_directions[i];
-               z_dir.normalize();
                core::CMatrix4<f32> a;
                a.buildRotateFromTo(v3f(0,1,0), z_dir);
                v3f dir = m_camera_direction;