public readonly record struct UvReportEverything measured about an unwrap, which is the answer to "is this good?".
Remarks
Five of these are MeshTailor's and the rest are what a renderer needs. docs/plan/42 § Part 4. The paper's metric set is the best-specified one in the literature — and BoundaryJaggedness in particular is what separates "low distortion" from "an artist would accept this", which nothing else in the field writes down.
⚠ SeamLengthNormalized divides by the square root of the area, not by the area. The paper defines it over area, which is not dimensionless: halve a model's scale and the figure doubles. Both are reported so the number compares across models and the published one is still recoverable.
⚠ PackingEfficiency and EffectiveEfficiency are both here because the first one flatters. Raw used-area-over-atlas-area rewards a packer that leaves no room to bleed into, and the gap between the two is exactly what a margin setting costs.
Fields and properties (13)
public int ChartCountThe headline. Fewer is better at equal distortion.
public float Compactness4πA/P² per island, averaged. Round islands pack and filter better than tendrils.
public float ConvexityA/A(hull) per island, averaged — the other half of shape quality.
public float SeamLengthTotal seam length, in world units.
public float SeamLengthNormalizedSeam length over the square root of surface area, so it is scale-free.
public float BoundaryJaggednessDiscrete curvature over resampled boundary loops.
public UvDistortion DistortionThe four measures.
public float PackingEfficiencyIsland area over atlas area, before margin.
public float EffectiveEfficiencyThe same after margin — what the atlas actually costs.
public UvTexelDensity TexelDensityAchieved density across every chart.
public IReadOnlyList<UvStageTiming> StagesTime and element counts, per stage.
public IReadOnlyList<string> WarningsWhat the caller should know: a chart that had to be split, a rescale, a spill into a second tile.
public bool IsInjectiveWhether the mapping is invertible everywhere, which is the one field that is pass or fail.
Methods (1)
public UvReport(int ChartCount, float Compactness, float Convexity, float SeamLength, float SeamLengthNormalized, float BoundaryJaggedness, UvDistortion Distortion, float PackingEfficiency, float EffectiveEfficiency, UvTexelDensity TexelDensity, IReadOnlyList<UvStageTiming> Stages, IReadOnlyList<string> Warnings)Everything measured about an unwrap, which is the answer to "is this good?".
Used by (32)
- ChartOutcomeVixen.Geometry.Uv
- CharterVixen.Geometry.Uv
- FlattenOutcomeVixen.Geometry.Uv
- FlattenerVixen.Geometry.Uv
- PackOutcomeVixen.Geometry.Uv
- PackerVixen.Geometry.Uv
- UvAllTestsVixen.Geometry.Uv.Tests
- UvChartDeterminismTestsVixen.Geometry.Uv.Tests
- UvChartInvarianceTestsVixen.Geometry.Uv.Tests
- UvChartQualityTestsVixen.Geometry.Uv.Tests
- UvChartTestsVixen.Geometry.Uv.Tests
- UvDensityTestsVixen.Geometry.Uv.Tests
- UvFacetedGroupTestsVixen.Geometry.Uv.Tests
- UvFlattenBijectivityTestsVixen.Geometry.Uv.Tests
- UvFlattenCotangentTestsVixen.Geometry.Uv.Tests
- UvFlattenDeterminismTestsVixen.Geometry.Uv.Tests
- UvFlattenDistortionTestsVixen.Geometry.Uv.Tests
- UvFlattenInvarianceTestsVixen.Geometry.Uv.Tests
- UvFlattenTestsVixen.Geometry.Uv.Tests
- UvFlattenTopologyTestsVixen.Geometry.Uv.Tests
- UvPackDeterminismTestsVixen.Geometry.Uv.Tests
- UvPackEfficiencyTestsVixen.Geometry.Uv.Tests
- UvPackPropertyTestsVixen.Geometry.Uv.Tests
- UvPackingTestsVixen.Geometry.Uv.Tests
- UvStackingTestsVixen.Geometry.Uv.Tests
- UvUdimTestsVixen.Geometry.Uv.Tests
- UvUnwrapVixen.Geometry.Uv
- UvUnwrapDeterminismTestsVixen.Geometry.Uv.Tests
- UvUnwrapPipelinePropertyTestsVixen.Geometry.Uv.Tests
- BlockoutUvPanelVixen.Editor.Blockout
- GeometryRunnerVixen.Cli
- ModelRetopologyVixen.Editor.Assets