Area → occupancy → alpha coverage
4.01 впервые вводит числовую shape-mass evidence, но оставляет её intrinsic: никакого contrast, isolation, scene position или global balance.
Resolved silhouette-support area, convex-hull occupancy, intrinsic alpha density и alpha-weighted coverage mass.
Resolved region topology 3.04, world geometry 3.05, canvas short side и intrinsic paint alpha.
INTRINSIC GEOMETRIC MASS EVIDENCE ONLY.
hullOccupancy. Это доля собственного convex hull, занятая silhouette-support. Это НЕ scene occupancy map темы 5 и НЕ grid occupancy темы 8.Что именно измеряется
4.01 не решает fill-rule и hole identity заново. На вход приходит уже resolved paint-support region.
ResolvedCoverageRegionView
{
regionRef,
components: [{
outerBoundaryRef,
holeBoundaryRefs[]
}],
coverageUnionResolved: true,
measurementDomain,
exactness,
confidence,
provenance
}Support semantics
support =
union(
enabled fill regions,
derived outline bands,
other intrinsic paint support
)
holes removed by resolved topology
alpha is NOT applied yet
when computing geometric area.fillArea + outlineArea двойно считает overlap. 4.01 требует resolved geometric union или возвращает unresolved.Площадь silhouette-support
Area — физический measure painted support до alpha weighting. Для polygonal resolved regions используется exact shoelace; curves могут дать exact integral или bounded fallback.
Simple polygon
Resolved component
Occupancy = заполненность собственного hull
Bounding box выбран не был: axis-aligned bbox меняет площадь при rotation. Convex hull даёт более устойчивый object-internal denominator.
Hull
Affine property
Density factor = intrinsic alpha coverage
Density factor не измеряет темноту, контраст или важность. Это только средняя alpha contribution внутри geometric silhouette-support.
α = 1
density = 1.
α = .4
density = .4.
α = 0
valid density = 0, not N/A, if alpha is explicitly known.
Intrinsic coverage mass
4.01 не калибрует cross-object score. Он выдаёт raw normalized alpha-area evidence, которое 4.04 позже может привести к общей scale.
Что разрешено в density
Alpha относится к intrinsic paint. Контекстный contrast относится уже к 4.02.
| Evidence | 4.01 | Owner |
|---|---|---|
| fill opacity / alpha | YES | intrinsic paint adapter |
| outline opacity / alpha | YES | intrinsic paint adapter |
| gradient alpha field | YES, exact/fallback integration | paint/render adapter |
| contrast against background | NO | 4.02 context |
| isolation / crowding | NO | 4.02 context |
| position / overlap salience | NO | 4.02 context |
| semantic importance | NO | future semantic/hierarchy owner |
Transform behavior
Area и occupancy ведут себя по-разному — это нужно явно хранить, иначе rotation/scale начинают случайно менять mass semantics.
| Transform | Area | Hull occupancy | Density |
|---|---|---|---|
| translation | same | same | same |
| rotation | same | same | same |
| reflection | same | same | same |
| uniform scale s | × s² | same | same* |
| invertible affine T | × |det T| | same | same* |
| singular | N/A / degenerate | N/A | N/A unless explicit rendered 2D support exists |
* если intrinsic alpha field материально трансформируется вместе с объектом и rasterization effects не являются отдельным owner-input.
Full object vs visible clipped mass
Объект может частично уходить за canvas/crop. 4.01 не владеет canvas/free-space, но умеет работать в явно заданном measurement domain.
Unclipped
Вся transformed support geometry.
Visible
Support ∩ supplied visibility/crop domain.
Custom domain
Явно supplied region adapter.
Exact geometry и fallback
Mass evidence должна сообщать метод и confidence. Особенно это важно для curved paths, outline boolean-unions и gradient alpha.
ShapeGeometricMassResult {
objectRef,
measurementDomain,
silhouetteAreaPx2,
silhouetteAreaShortN2,
convexHullAreaPx2,
hullOccupancy,
paintDensityFactor,
alphaAreaPx2,
alphaAreaShortN2,
intrinsicCoverageMassShortN2,
exactness:
"EXACT|BOUNDED_APPROXIMATION",
areaMethod,
alphaMethod,
approximationErrorBound?,
confidence,
status,
provenance
}
Edge cases
Zero, N/A и invalid нельзя смешивать.
| Case | Result |
|---|---|
| valid geometry, explicit alpha=0 | density=0; intrinsicCoverageMass=0 — valid zero |
| alpha missing | density=N/A; intrinsic mass=N/A |
| silhouette area=0 because geometry degenerate | N/A/INVALID, not valid zero mass |
| singular transform | N/A unless renderer supplies explicit 2D painted support |
| hull area≈0 | hullOccupancy=N/A |
| fill/outline union unresolved | UNRESOLVED; do not sum overlapping areas |
| shortSidePx missing/≤0 | normalized area N/A |
| areaShortN2>1 | valid; do not clamp |
Correction routing
4.01 измеряет. Исправления geometry/paint/transform делает owner.
Topology union
→ 3.04 / coverage adapter.
Transform
→ Core / 3.05.
Alpha evidence
→ intrinsic paint/style owner.
Contextual salience
→ 4.02.
GeometricMassCorrectionRequest {
objectRef,
targetOwner,
requestedEffect,
evidenceRefs[],
reason,
provenance
}
Visual Lab
Четыре объекта показывают различие area, hullOccupancy и density. Это descriptors, не ranking.
Reference mass tests
Проверяем area, holes, hull, affine invariance, alpha density, normalization и ownership boundaries.
DATA FOR LAYOUT ENGINE
Machine-readable contract 4.01.
{
"module": "Compo 4.01",
"name": "silhouette_area_occupancy_and_density_factor",
"version": "1.1-corrective",
"scope": "INTRINSIC_GEOMETRIC_AND_ALPHA_COVERAGE_MASS_FOR_RESOLVED_SHAPE_REGIONS",
"consumes": [
"Compo4.00.VisualMassDescriptor / MassEvidenceRef staging contract",
"Compo3.04 resolved fill/outline region topology or compatible ResolvedCoverageRegionView",
"Compo3.05 transformed world geometry view",
"CanvasNormalizationContext.shortSidePx",
"IntrinsicPaintCoverageAdapter (alpha only; no contextual contrast)",
"VisibilityDomainAdapter? for optional clipping/crop domain"
],
"provides": [
"ResolvedCoverageRegionView contract",
"ShapeGeometricMassResult",
"MassEvidenceRef[visualMass.geometry.intrinsicCoverageMassShortN2]",
"visualMass.geometry.silhouetteAreaPx2",
"visualMass.geometry.silhouetteAreaShortN2",
"visualMass.geometry.convexHullAreaPx2",
"visualMass.geometry.hullOccupancy",
"visualMass.geometry.paintDensityFactor",
"visualMass.geometry.alphaAreaPx2",
"visualMass.geometry.alphaAreaShortN2",
"visualMass.geometry.intrinsicCoverageMassShortN2",
"GeometricMassCorrectionRequest[]",
"MassCalibrationInputRef[shape.alphaAreaShortN2.raw]"
],
"owns_metrics": [
"visualMass.geometry.silhouetteAreaPx2",
"visualMass.geometry.silhouetteAreaShortN2",
"visualMass.geometry.convexHullAreaPx2",
"visualMass.geometry.hullOccupancy",
"visualMass.geometry.paintDensityFactor",
"visualMass.geometry.alphaAreaPx2",
"visualMass.geometry.alphaAreaShortN2",
"visualMass.geometry.intrinsicCoverageMassShortN2",
"visualMass.geometry.confidence"
],
"descriptors_only": [
"visualMass.geometry.measurementDomain",
"visualMass.geometry.componentCount",
"visualMass.geometry.holeCount",
"visualMass.geometry.exactness",
"visualMass.geometry.areaMethod",
"visualMass.geometry.alphaMethod",
"visualMass.geometry.approximationErrorBound",
"visualMass.geometry.status"
],
"resolved_region_contract": {
"regionRef": "string",
"components": [
{
"outerBoundaryRef": "resolved simple closed boundary",
"holeBoundaryRefs": "resolved simple closed boundaries[]"
}
],
"coverageUnionResolved": "boolean; required true before summing multiple paint bands/components",
"measurementDomain": "OBJECT_FULL|VISIBLE_CLIPPED|CUSTOM_DOMAIN",
"exactness": "EXACT|BOUNDED_APPROXIMATION",
"confidence": "0..1",
"provenance": "object"
},
"measurement_semantics": {
"silhouetteArea": "geometric measure of the resolved paint-support union before alpha weighting; fill + outline support, holes removed",
"occupancy_canonical_name": "hullOccupancy",
"hullOccupancy": "silhouetteArea / convexHullArea of the same resolved support; object-internal descriptor only",
"paintDensityFactor": "alphaArea / silhouetteArea; intrinsic alpha coverage only, no contrast/luminance/context",
"alphaArea": "integral of intrinsic alpha over silhouette support",
"intrinsicCoverageMassShortN2": "alphaAreaPx2 / shortSidePx^2",
"base_mass_role": "raw intrinsic mass evidence for later 4.04 calibration, not a beauty score",
"sourceMassDomainRef": "shape.alphaAreaShortN2.raw",
"sourceMassDomainNote": "raw source evidence for frozen 4.04 calibration; not automatically the canonical cross-object domain"
},
"normalization": {
"shortSidePx": "must be supplied by CanvasNormalizationContext; 4.01 does not own canvas format",
"areaShortN2": "areaPx2 / shortSidePx^2",
"unit_note": "areaShortN2 is dimensionless relative to short-side squared but may exceed 1; never clamp"
},
"area_algorithms": {
"polygon_simple": "absolute shoelace area",
"resolved_component": "abs(outer area) - sum(abs(hole areas)) after 3.04 has resolved topology",
"multiple_components": "sum only if coverageUnionResolved=true and components are non-overlapping in resolved union representation",
"curves_exact": "use analytic area integration adapter when available",
"curves_fallback": "bounded flattening with declared area error/confidence",
"outline_overlap": "must be boolean-unioned upstream/adapter; naive fillArea+outlineArea is forbidden"
},
"convex_hull_policy": {
"purpose": "denominator for object-internal occupancy only",
"algorithm_polygonal": "deterministic monotonic-chain hull over support boundary samples/vertices",
"curved_exact": "support-function/extrema adapter if available",
"curved_fallback": "bounded contour approximation",
"area_ratio_invariance": "for any invertible affine transform, silhouetteArea and hullArea scale by |det| so hullOccupancy is invariant"
},
"alpha_policy": {
"allowed_intrinsic_inputs": [
"constant fill alpha",
"constant outline alpha",
"resolved piecewise alpha regions",
"analytic alpha coverage function",
"deterministic bounded alpha sampler"
],
"forbidden_context_inputs": [
"contrast against background",
"isolation",
"scene position",
"overlap salience",
"semantic importance"
],
"zero_alpha": "valid densityFactor=0 and intrinsicCoverageMass=0 when support geometry is valid",
"missing_alpha": "N/A/partial evidence, never assume opaque unless explicit style/default contract says so"
},
"transform_invariance": {
"translation": "silhouetteArea, hullArea, hullOccupancy, densityFactor preserved",
"rotation": "silhouetteArea, hullArea, hullOccupancy, densityFactor preserved",
"reflection": "silhouetteArea, hullArea, hullOccupancy, densityFactor preserved",
"uniform_scale": "areas and intrinsicCoverageMass scale by s^2; hullOccupancy/densityFactor preserved",
"general_invertible_affine": "areas scale by |det|; hullOccupancy preserved; alpha density preserved if paint alpha field transforms materially with the object",
"singular_transform": "region area measurement is N/A/degenerate unless an explicit rendered-stroke coverage adapter supplies a valid 2D support"
},
"hard_constraints": [
"resolved fill/hole/outline topology remains owned by Compo3.04",
"world transform remains owned by Core/Compo3.05 adapter",
"canvas short-side normalization context is consumed, not owned",
"hullOccupancy is object-internal and must not be exposed as Topic5 scene occupancy or Topic8 grid occupancy",
"scene occupied/free-space masks remain Topic5",
"silhouetteArea and hullOccupancy are descriptors, not direct aesthetic scores",
"paintDensityFactor uses alpha/paint coverage only; contrast/isolation/position/overlap are forbidden here and belong to Compo4.02",
"do not multiply silhouetteArea by hullOccupancy again to create mass; occupancy is derived from the same area and would double count",
"canonical intrinsic coverage mass is alphaAreaShortN2 = silhouetteAreaShortN2 * paintDensityFactor",
"fill and outline overlapping support must be measured by geometric union; naive area addition is forbidden",
"missing alpha evidence is N/A, not opacity=1",
"singular transforms do not silently become zero mass",
"areaShortN2 must not be clamped to [0,1]",
"no target-aware quality score in 4.01",
"no beautyScore",
"zero-area resolved shape support is DEGENERATE/N_A, not automatically a valid zero mass",
"hole area greater than outer area is INVALID and must not be silently clamped to zero",
"intrinsicCoverageMassShortN2 must pass through the frozen 4.04 calibration profile before cross-object 4.02 comparison unless an explicit identity profile declares the same canonical domain"
],
"initial_heuristics": {
"area_epsilon_px2": {
"value": 1e-08,
"provenance": "IMPLEMENTATION_HEURISTIC"
},
"hull_collinearity_epsilon_px2": {
"value": 1e-10,
"provenance": "IMPLEMENTATION_HEURISTIC"
},
"curve_flatten_area_error_shortN2": {
"value": 1e-06,
"provenance": "INITIAL_HEURISTIC"
},
"alpha_sampling_max_samples": {
"value": 4096,
"provenance": "IMPLEMENTATION_HEURISTIC"
},
"alpha_sampling_target_abs_error": {
"value": 0.005,
"provenance": "IMPLEMENTATION_HEURISTIC"
}
},
"correction_policy": {
"foreign_topology_mutation": "FORBIDDEN",
"unresolved_fill_outline_union": "request Compo3.04/coverage-adapter resolution",
"missing_world_transform": "request Compo3.05/Core adapter",
"missing_short_side": "request CanvasNormalizationContext owner",
"missing_alpha": "request intrinsic paint/style owner evidence",
"singular_transform": "request Core/Compo3.05 correction unless explicit rendered support adapter exists",
"contextual_mass_issue": "route to Compo4.02",
"relation_issue": "route to Compo4.03"
},
"deferred_inputs": [
"Compo4.02 contextual weight",
"Compo4.03 mass relations",
"Compo4.04 calibration/target scoring/regression",
"Topic5 occupied/free-space masks",
"Topic8 grid occupancy",
"global balance/hierarchy/eye-flow"
],
"recompute_when": [
"resolved support geometry changes",
"fill/hole/outline topology changes",
"ObjectTransform determinant/geometry changes",
"intrinsic alpha/paint coverage changes",
"measurement visibility domain changes",
"shortSidePx normalization context changes",
"area/alpha approximation policy changes"
],
"finality": "INTRINSIC_GEOMETRIC_MASS_EVIDENCE_ONLY"
}