Add setting for near plane distance. (#6395)
authorRob Blanckaert <basicer@basicer.com>
Sat, 7 Oct 2017 13:11:48 +0000 (09:11 -0400)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Sat, 7 Oct 2017 13:11:48 +0000 (15:11 +0200)
* Allow setting the near plane

* - Add near_plane limit of 0.5 to prevent x-ray.
- Add more details to near_plane setting.

builtin/settingtypes.txt
src/camera.cpp
src/defaultsettings.cpp

index 51d34e4b6dd5dd59b40513ce9a29e775ee3368a2..11651c9b245f3a0d8fad60197b1b0a064f80a3a3 100644 (file)
@@ -532,6 +532,12 @@ pause_fps_max (FPS in pause menu) int 20
 #    View distance in nodes.
 viewing_range (Viewing range) int 100 20 4000
 
+#   Camera near plane distance in nodes, between 0 and 0.5
+#   Most users will not need to change this.
+#   Increasing can reduce artifacting on weaker GPUs.
+#   0.1 = Default, 0.25 = Good value for weaker tablets.
+near_plane (Near plane) float 0.1 0 0.5
+
 #    Width component of the initial window size.
 screen_w (Screen width) int 1024
 
index 29ff27f8fefd538e3fa14fc4287c8749aa639bbe..e0028f480f635a06e6f3f547a86beb7facbdbece 100644 (file)
@@ -549,7 +549,9 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
 void Camera::updateViewingRange()
 {
        f32 viewing_range = g_settings->getFloat("viewing_range");
+       f32 near_plane = g_settings->getFloat("near_plane");
        m_draw_control.wanted_range = viewing_range;
+       m_cameranode->setNearValue(rangelim(near_plane, 0.0f, 0.5f) * BS);
        if (m_draw_control.range_all) {
                m_cameranode->setFarValue(100000.0);
                return;
index 3c826dd2eba7412dcded0548aa5a75b4df22caed..58ea0c77a6bd7a2b8dd02399eb19faaeff285f46 100644 (file)
@@ -149,6 +149,7 @@ void set_default_settings(Settings *settings)
        settings->setDefault("fps_max", "60");
        settings->setDefault("pause_fps_max", "20");
        settings->setDefault("viewing_range", "100");
+       settings->setDefault("near_plane", "0.1");
        settings->setDefault("screen_w", "1024");
        settings->setDefault("screen_h", "600");
        settings->setDefault("autosave_screensize", "true");