diff --git a/include/neural-graphics-primitives/testbed.h b/include/neural-graphics-primitives/testbed.h
index 191753ed3bb938e1f1e1b4766ff403f489a09274..a3c8dc055af58234de025d2e38c5a73fadc46994 100644
--- a/include/neural-graphics-primitives/testbed.h
+++ b/include/neural-graphics-primitives/testbed.h
@@ -432,6 +432,7 @@ public:
 	bool m_include_optimizer_state_in_snapshot = false;
 	bool m_render_ground_truth = false;
 	EGroundTruthRenderMode m_ground_truth_render_mode = EGroundTruthRenderMode::Shade;
+	float m_ground_truth_alpha = 1.0f;
 
 	bool m_train = false;
 	bool m_training_data_available = false;
diff --git a/src/testbed.cu b/src/testbed.cu
index 82577821310f236893e6aac68dd0cc3cb9ab0a53..afb1b5ba8ab4880b4320cdfda559a5ee0dbf912b 100644
--- a/src/testbed.cu
+++ b/src/testbed.cu
@@ -617,6 +617,7 @@ void Testbed::imgui() {
 		accum_reset |= ImGui::Combo("Render mode", (int*)&m_render_mode, RenderModeStr);
 		if (m_testbed_mode == ETestbedMode::Nerf)  {
 			accum_reset |= ImGui::Combo("Groundtruth Render mode", (int*)&m_ground_truth_render_mode, GroundTruthRenderModeStr);
+			accum_reset |= ImGui::SliderFloat("Groundtruth Alpha", &m_ground_truth_alpha, 0.0f, 1.0f, "%.02f", ImGuiSliderFlags_AlwaysClamp);
 		}
 		accum_reset |= ImGui::Combo("Color space", (int*)&m_color_space, ColorSpaceStr);
 		accum_reset |= ImGui::Combo("Tonemap curve", (int*)&m_tonemap_curve, TonemapCurveStr);
@@ -2598,7 +2599,7 @@ void Testbed::render_frame(const Matrix<float, 3, 4>& camera_matrix0, const Matr
 
 	switch (m_testbed_mode) {
 		case ETestbedMode::Nerf:
-			if (!m_render_ground_truth) {
+			if (!m_render_ground_truth || m_ground_truth_alpha < 1.0f) {
 				render_nerf(render_buffer, max_res, focal_length, camera_matrix0, camera_matrix1, nerf_rolling_shutter, screen_center, m_stream.get());
 			}
 			break;
@@ -2751,11 +2752,10 @@ void Testbed::render_frame(const Matrix<float, 3, 4>& camera_matrix0, const Matr
 	if (m_testbed_mode == ETestbedMode::Nerf) {
 		// Overlay the ground truth image if requested
 		if (m_render_ground_truth) {
-			float alpha=1.f;
 			auto const& metadata = m_nerf.training.dataset.metadata[m_nerf.training.view];
 			if(m_ground_truth_render_mode == EGroundTruthRenderMode::Shade) {
 				render_buffer.overlay_image(
-					alpha,
+					m_ground_truth_alpha,
 					Array3f::Constant(m_exposure) + m_nerf.training.cam_exposure[m_nerf.training.view].variable(),
 					m_background_color,
 					to_srgb ? EColorSpace::SRGB : EColorSpace::Linear,
@@ -2770,7 +2770,7 @@ void Testbed::render_frame(const Matrix<float, 3, 4>& camera_matrix0, const Matr
 			}
 			else if(m_ground_truth_render_mode == EGroundTruthRenderMode::Depth && metadata.depth) {
                 render_buffer.overlay_depth(
-                    alpha,
+                    m_ground_truth_alpha,
                     metadata.depth,
 					1.0f/m_nerf.training.dataset.scale,
                     metadata.resolution,