Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A Rust port of QuadriFlow’s default command-line path exposed two failure paths on one SketchUp-derived house mesh—and produced a counterintuitive solver result: on the author’s larger measured workload, Boost’s Boykov–Kolmogorov implementation substantially outperformed alternatives that looked attractive on paper. These are Felipe Carvajal Brown’s code-inspection findings and measurements, not independent reproductions or claims that every QuadriFlow input is affected.

What the Rust port includes—and leaves out

Carvajal Brown inspected QuadriFlow at upstream commit 810b7a0 and ported the code reached by the default command-line run, quadriflow -i in.obj -o out.obj -f <faces>. The described pipeline constructs a hierarchy, computes orientation and position fields, uses max flow for integer edge offsets, handles flipped faces, extracts quads, repairs valence, and optimizes positions.

This is a port of that default route, not every QuadriFlow feature. Optional sharp-edge, boundary, adaptive-scale, min-cost-flow and SAT paths are out of scope, as are CUDA and TBB. Blender’s QuadriFlow README likewise identifies min-cost flow as an optional -mcf mode and documents optional sharp-edge preservation and SAT flip removal.

What two failure paths did the port uncover?

The reported failures appeared on a cleaned SketchUp-derived house model with many T-junctions and non-manifold incidences. They concern how this input interacted with the inspected code; they do not establish that ordinary manifold inputs, or all QuadriFlow versions, fail in the same way.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Repeated half-edge pairing breaks twin links

In the first path, repeated half-edges around an edge could each be paired with the same opposite half-edge. A later assignment then overwrote the relationship expected by an earlier pairing, leaving twin links that were not mutual. On this house model, the author counted 382 non-mutual twin links among 15,171 half-edges. A later rotation search could consequently fail to find a matching orientation.

An unreachable vertex-splitting path leaves offsets arbitrary

The second issue was in code intended to split non-manifold vertices: an unconditional return made the splitting logic unreachable. As a result, edges were not queued for splitting, fields did not propagate to those vertices, and their offsets remained arbitrary. On the tested input, upstream printed “wrong init” and exited without producing output.

Carvajal Brown reports that he built upstream separately; on this house mesh it remained at “Solve index map” until a 600-second timeout. After changing half-edge pairing and adding the vertex split, his Rust port completed the model in 1.2 seconds. Those timings describe this one test model and the author’s run, not a general speed comparison.

Why did the max-flow alternative lose?

QuadriFlow’s in-house solver sends one unit per breadth-first search. According to the author, upstream uses that solver only when supply is below 20 units and otherwise switches to Boost’s Boykov–Kolmogorov solver. Blender’s README also says the default uses Boykov maximum flow from Boost because it is faster.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Dinic can look attractive from its textbook complexity bounds, but a bound alone does not predict wall-clock performance on a particular flow network. In the author’s tests, the number of repeated searches or phases mattered, and retaining search trees helped Boykov–Kolmogorov on the measured workload. The figures below are the author’s implementation measurements; they have not been independently reproduced.

160,000-triangle torus: Dinic’s phase count was costly

On a torus with 160,000 triangles and a target of 10,000 faces, the Rust port reportedly produced 9,271 quads in 18.4 seconds; upstream produced 8,903 quads in 11.6 seconds. In the author’s max-flow comparison on that torus, Dinic took 11.6 seconds, versus 5.8 seconds for the one-unit solver, after the level search was limited at the sink. A probe required 145 phases to route 174 units. These are different output and solver measurements from one torus workload, not a controlled claim that one algorithm always wins.

662,843-triangle model: Boykov–Kolmogorov sharply reduced runtime

On a separate, heavier model with 662,843 triangles, a 100,000-face budget and a 3,726-unit max-flow round, the author reports the following:

Measurement Author-reported result
In-house max-flow stage 203.5 seconds
Integer stage with the in-house solver 246 seconds
Integer stage with Boykov–Kolmogorov 13.6 seconds
Full run with the in-house solver 441 seconds
Full run with Boykov–Kolmogorov 137 seconds; output was 44,024 quads

The 203.5-second figure is the reported in-house max-flow stage, while 246 seconds is the broader integer stage; they are not interchangeable. The end-to-end reduction from 441 to 137 seconds and the 44,024-quad output belong to this heavy-model run. They do not compare directly with the smaller torus, which is a different workload.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The lesson is workload-specific, not that Boykov–Kolmogorov is universally faster than Dinic or every other solver. In Carvajal Brown’s phrasing, “The better textbook bound lost.” He also writes: “The algorithm upstream actually runs for this workload won, and I only knew because I measured.”

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

What does this say about QuadriFlow input support?

QuadriFlow’s paper presents a scalable automatic quadrangulation method that builds on Instant Meshes and uses a global method to remove singularities from the position field (paper PDF). Blender’s README describes a workflow that takes a manifold triangle mesh and produces a manifold quad mesh, with resolution controlled by the user. That documented expectation does not establish support for arbitrary non-manifold input such as the tested SketchUp-derived model.

The original repository also has a 2018 issue reporting crashes when subdividing open-boundary meshes with SAT enabled (issue #16). It is a historical report tied to that scenario, not evidence that every current version crashes on open boundaries.

What remains unproven by these results?

The author says the architectural test models were routed to a different retopology path, so this work does not yet demonstrate the remesher on an organic model. UV repair for SketchUp-to-Unreal workflows is identified as future work, rather than a feature established by the reported port. The measurements also come from the author’s implementations and selected meshes; no independent benchmark of this Rust port is identified.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.