After implementing Transvoxel, I started learning surface nets and have a question regarding definition of chunk boundaries in Dual methods. Let's talk naive surface nets, but I guess in DC/others — will be the same.
Looks like there are two approaches:
Approach 1: Different LOD chunks have generated vertices aligned on the same grid. As a result — SDF sample point positions of different LODs never match.
Approach 2: LOD chunks have SDF sample points aligned on the same grid. Then quads of different LODs never match.
----
Illustrating both approaches
Approach 1 is illustrated by https://github.com/bonsairobo/building-blocks/issues/26#issuecomment-850913644:

Approach 2 is illustrated by https://ngildea.blogspot.com/2014/09/dual-contouring-chunked-terrain.html:

My initial thoughts
Approach 1 seems more intuitive to me. Seams are usually very small to begin with, given the quads are aligned:

And algorithms to "stitch" LODs sound simpler as well. Given the surface points/quads are aligned — the LOD0 can just use exact surface point coordinates from LOD1, where present, and take average between nearby two, where not present.
No separate "stitching geometry" is needed at all — we just slightly move positive chunk boundary vertices a bit. So the stitched LODs just look like this:

Main con is: LOD1 can't re-use SDF values already calculated by LOD0. It samples at totally different positions.
Because to align vertices in a dual algorithm, we need to shift each chunk's sampling points by half an edge in all negative directions in order to have all surface points aligned:

----
Approach 2 seems more logical from data perspective — the LOD1 can use SDF values from LOD0. Because we align SDF sampling positions, instead of aligning vertices/quads.
But I feel it makes LOD stitching a harder task. The actual geometries are never aligned, all seams have variable size and you definitely need a separately built stitching geometry.
So even the original problem to solve seems harder to solve (image from link above) — all seams have different width as no quads are ever aligned at all:

And solving this problem (in any way — there are multiple on the internet) always ends up in a totally different geometry like this, where you clearly see a separate stitching layer which has a totally different algorithm usually:

The benefit is: all different LODs can sample SDFs at the same sampling grid, just LOD0 samples every point of it, LOD1 samples every second point, etc. Like you'd do in transvoxel.
The question
What is a more “canonical” choice: approach 1 or approach 2? What are the considerations / pitfalls / thoughts? Any other pros / cons?
Or maybe I misunderstood everything altogether, since I just started learning dual algorithms. Any advise or related thoughts welcome too.
Thank you!


