diff --git a/include/neural-graphics-primitives/testbed.h b/include/neural-graphics-primitives/testbed.h
index b52f00018da7f302a5330fad93f72bf5379d081e..1fd224bd0506a2dc62d3ad582e25ab5dc42ba0a6 100644
--- a/include/neural-graphics-primitives/testbed.h
+++ b/include/neural-graphics-primitives/testbed.h
@@ -86,6 +86,7 @@ public:
 			bool snap_to_pixel_centers,
 			const BoundingBox& aabb,
 			float floor_y,
+			float near_distance,
 			float plane_z,
 			float aperture_size,
 			const float* envmap_data,
@@ -658,7 +659,6 @@ public:
 		bool render_with_lens_distortion = false;
 		Lens render_lens = {};
 
-		float render_near_distance = 0.00f;
 		float render_min_transmittance = 0.01f;
 
 		float glow_y_cutoff = 0.f;
@@ -787,6 +787,7 @@ public:
 	float m_dlss_sharpening = 0.0f;
 
 	// 3D stuff
+	float m_render_near_distance = 0.0f;
 	float m_slice_plane_z = 0.0f;
 	bool m_floor_enable = false;
 	inline float get_floor_y() const { return m_floor_enable ? m_aabb.min.y()+0.001f : -10000.f; }
diff --git a/src/python_api.cu b/src/python_api.cu
index aff26c79886b684acd8b75d5517b2dad50f4ce6e..d6785ba4056036baf79f93d8306706ef8776303f 100644
--- a/src/python_api.cu
+++ b/src/python_api.cu
@@ -448,6 +448,7 @@ PYBIND11_MODULE(pyngp, m) {
 		.def_readwrite("render_groundtruth", &Testbed::m_render_ground_truth)
 		.def_readwrite("groundtruth_render_mode", &Testbed::m_ground_truth_render_mode)
 		.def_readwrite("render_mode", &Testbed::m_render_mode)
+		.def_readwrite("render_near_distance", &Testbed::m_render_near_distance)
 		.def_readwrite("slice_plane_z", &Testbed::m_slice_plane_z)
 		.def_readwrite("dof", &Testbed::m_aperture_size)
 		.def_readwrite("aperture_size", &Testbed::m_aperture_size)
@@ -539,7 +540,6 @@ PYBIND11_MODULE(pyngp, m) {
 		.def_readwrite("render_lens", &Testbed::Nerf::render_lens)
 		.def_readwrite("rendering_min_transmittance", &Testbed::Nerf::render_min_transmittance)
 		.def_readwrite("render_min_transmittance", &Testbed::Nerf::render_min_transmittance)
-		.def_readwrite("render_near_distance", &Testbed::Nerf::render_near_distance)
 		.def_readwrite("cone_angle_constant", &Testbed::Nerf::cone_angle_constant)
 		.def_readwrite("visualize_cameras", &Testbed::Nerf::visualize_cameras)
 		.def_readwrite("glow_y_cutoff", &Testbed::Nerf::glow_y_cutoff)
diff --git a/src/testbed.cu b/src/testbed.cu
index eb48fcf5c57246845d338fa1201ca2ac6d1e6212..6e1250d72b57f79bc9507483d6095584dd1f0f07 100644
--- a/src/testbed.cu
+++ b/src/testbed.cu
@@ -778,7 +778,6 @@ void Testbed::imgui() {
 				}
 			}
 
-			accum_reset |= ImGui::SliderFloat("Near distance", &m_nerf.render_near_distance, 0.0f, 1.0f, "%.3f", ImGuiSliderFlags_Logarithmic | ImGuiSliderFlags_NoRoundToFormat);
 			accum_reset |= ImGui::SliderFloat("Min transmittance", &m_nerf.render_min_transmittance, 0.0f, 1.0f, "%.3f", ImGuiSliderFlags_Logarithmic | ImGuiSliderFlags_NoRoundToFormat);
 			ImGui::TreePop();
 		}
@@ -919,6 +918,7 @@ void Testbed::imgui() {
 			accum_reset |= ImGui::SliderFloat2("Screen center", &m_screen_center.x(), 0.f, 1.f);
 			accum_reset |= ImGui::SliderFloat2("Parallax shift", &m_parallax_shift.x(), -1.f, 1.f);
 			accum_reset |= ImGui::SliderFloat("Slice / focus depth", &m_slice_plane_z, -m_bounding_radius, m_bounding_radius);
+			accum_reset |= ImGui::SliderFloat("Render near distance", &m_render_near_distance, 0.0f, 1.0f, "%.3f", ImGuiSliderFlags_Logarithmic | ImGuiSliderFlags_NoRoundToFormat);
 			char buf[2048];
 			Vector3f v = view_dir();
 			Vector3f p = look_at();
diff --git a/src/testbed_nerf.cu b/src/testbed_nerf.cu
index 7d7eb659e8ec7289c9b8b2dcb67757987c180d84..1406f9d5d351ac390cf1f0ccfa8cae4ff3dd293b 100644
--- a/src/testbed_nerf.cu
+++ b/src/testbed_nerf.cu
@@ -2274,7 +2274,7 @@ void Testbed::render_nerf(CudaRenderBuffer& render_buffer, const Vector2i& max_r
 		m_snap_to_pixel_centers,
 		m_render_aabb,
 		m_render_aabb_to_local,
-		m_nerf.render_near_distance,
+		m_render_near_distance,
 		plane_z,
 		m_aperture_size,
 		lens,
diff --git a/src/testbed_sdf.cu b/src/testbed_sdf.cu
index 2e42b3f3e429cad4203efbe6f0e72325156d87c6..f7c191222bc85f6e358f025f58f4e402f78b4cd0 100644
--- a/src/testbed_sdf.cu
+++ b/src/testbed_sdf.cu
@@ -503,6 +503,7 @@ __global__ void init_rays_with_payload_kernel_sdf(
 	bool snap_to_pixel_centers,
 	BoundingBox aabb,
 	float floor_y,
+	float near_distance,
 	float plane_z,
 	float aperture_size,
 	const float* __restrict__ envmap_data,
@@ -525,7 +526,7 @@ __global__ void init_rays_with_payload_kernel_sdf(
 		aperture_size = 0.0;
 	}
 
-	Ray ray = pixel_to_ray(sample_index, {x, y}, resolution, focal_length, camera_matrix, screen_center, parallax_shift, snap_to_pixel_centers, 0.0f, plane_z, aperture_size);
+	Ray ray = pixel_to_ray(sample_index, {x, y}, resolution, focal_length, camera_matrix, screen_center, parallax_shift, snap_to_pixel_centers, near_distance, plane_z, aperture_size);
 
 	distances[idx] = 10000.0f;
 
@@ -599,6 +600,7 @@ void Testbed::SphereTracer::init_rays_from_camera(uint32_t sample_index,
 	bool snap_to_pixel_centers,
 	const BoundingBox& aabb,
 	float floor_y,
+	float near_distance,
 	float plane_z,
 	float aperture_size,
 	const float* envmap_data,
@@ -628,6 +630,7 @@ void Testbed::SphereTracer::init_rays_from_camera(uint32_t sample_index,
 		snap_to_pixel_centers,
 		aabb,
 		floor_y,
+		near_distance,
 		plane_z,
 		aperture_size,
 		envmap_data,
@@ -844,6 +847,7 @@ void Testbed::render_sdf(
 		m_snap_to_pixel_centers,
 		sdf_bounding_box,
 		get_floor_y(),
+		m_render_near_distance,
 		plane_z,
 		m_aperture_size,
 		m_envmap.envmap->params_inference(),
diff --git a/src/testbed_volume.cu b/src/testbed_volume.cu
index 36fa3237114c8fdbc5270d41bad9bc276cdf5423..a5b9d7363cdc59161ba52e297e0cd43d84b6c7bd 100644
--- a/src/testbed_volume.cu
+++ b/src/testbed_volume.cu
@@ -215,6 +215,7 @@ __global__ void init_rays_volume(
 	Vector3f parallax_shift,
 	bool snap_to_pixel_centers,
 	BoundingBox aabb,
+	float near_distance,
 	float plane_z,
 	float aperture_size,
 	const float* __restrict__ envmap_data,
@@ -239,7 +240,7 @@ __global__ void init_rays_volume(
 	if (plane_z < 0) {
 		aperture_size = 0.0;
 	}
-	Ray ray = pixel_to_ray(sample_index, {x, y}, resolution, focal_length, camera_matrix, screen_center, parallax_shift, snap_to_pixel_centers, 0.0f, plane_z, aperture_size);
+	Ray ray = pixel_to_ray(sample_index, {x, y}, resolution, focal_length, camera_matrix, screen_center, parallax_shift, snap_to_pixel_centers, near_distance, plane_z, aperture_size);
 	ray.d = ray.d.normalized();
 	auto box_intersection = aabb.ray_intersect(ray.o, ray.d);
 	float t = max(box_intersection.x(), 0.0f);
@@ -423,6 +424,7 @@ void Testbed::render_volume(CudaRenderBuffer& render_buffer,
 		m_parallax_shift,
 		m_snap_to_pixel_centers,
 		m_render_aabb,
+		m_render_near_distance,
 		plane_z,
 		m_aperture_size,
 		m_envmap.envmap->params_inference(),