From 147e7b285577650ab025887589c2f0e196f90075 Mon Sep 17 00:00:00 2001 From: kirschm Date: Fri, 23 Sep 2022 22:21:30 -0400 Subject: [PATCH 1/2] move nearplane further out --- src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs b/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs index 364434596c0..badc4ed9aa6 100644 --- a/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; @@ -183,7 +183,7 @@ public class HelixWatch3DViewModel : DefaultWatch3DViewModel private int currentFrameSkipCount; private const double EqualityTolerance = 0.000001; - private double nearPlaneDistanceFactor = 0.001; + private double nearPlaneDistanceFactor = 0.01; internal const double DefaultNearClipDistance = 0.1f; internal const double DefaultFarClipDistance = 100000; From c9902dd950be8ff53f3891d8cebd7521c9b157b2 Mon Sep 17 00:00:00 2001 From: kirschm Date: Mon, 26 Sep 2022 13:40:39 -0400 Subject: [PATCH 2/2] add comments --- .../ViewModels/Watch3D/HelixWatch3DViewModel.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs b/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs index badc4ed9aa6..6513290feb1 100644 --- a/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Watch3D/HelixWatch3DViewModel.cs @@ -183,6 +183,8 @@ public class HelixWatch3DViewModel : DefaultWatch3DViewModel private int currentFrameSkipCount; private const double EqualityTolerance = 0.000001; + //near plane distance also affects depth precision. + //https://developer.nvidia.com/content/depth-precision-visualized private double nearPlaneDistanceFactor = 0.01; internal const double DefaultNearClipDistance = 0.1f; internal const double DefaultFarClipDistance = 100000; @@ -2483,6 +2485,10 @@ internal static void ComputeClipPlaneDistances(Vector3 cameraPosition, Vector3 c // Set the near clip plane to some fraction of the // of the distance to the first point. var closest = distances.First(d => d >= 0); + + //near plane distance disproportionately affects depth (zbuffer) precision. + //keep it as far away as possible. + //https://developer.nvidia.com/content/depth-precision-visualized near = closest.AlmostEqualTo(0, EqualityTolerance) ? DefaultNearClipDistance : Math.Max(DefaultNearClipDistance, closest * nearPlaneDistanceFactor); far = distances.Last() * 2;