Alle Artikel

Einblick in Kansumi: Wie ein Grundriss zum Szenengraphen wird

Ein technischer Einblick in den JSON-Szenengraphen hinter jedem Kansumi-Rendering, und was die Konfidenzwerte wirklich messen.

The Kansumi Team3 min
Auf dieser Seite

Die meisten KI-Interieur-Tools behandeln Ihren Grundriss als Bild. Kansumi behandelt ihn als Daten. Sobald die Extraktion abgeschlossen ist, ist Ihr Plan keine Pixelgrafik mehr, sondern ein versioniertes JSON-Dokument, das wir Szenengraph nennen, und jede Wand, die Sie verschieben, jede Tür, die Sie bewegen, und jedes Rendering, das Sie erzeugen, liest und schreibt dieses Dokument, niemals das Bild.

Dieser Artikel zeigt, wie das funktioniert, und warum es die Renderings vertrauenswürdig macht.

Die Kansumi-Pipeline vom Upload bis zum Rendering, mit dem Szenengraphen als einziger Quelle der Wahrheit
Die Kansumi-Pipeline vom Upload bis zum Rendering, mit dem Szenengraphen als einziger Quelle der Wahrheit

Warum Bilder eine schlechte Quelle der Wahrheit sind

Ein Bild eines Grundrisses weiß nichts. Es kann Ihnen weder die Länge einer Wand nennen, noch ob eine Tür nach innen öffnet, noch ob das gewünschte Sofa überhaupt hineinpasst. Tools, die das Bild bearbeiten, müssen all das bei jeder Änderung neu erraten, und genau so entstehen Renderings, in denen der Raum unbemerkt einen Meter dazugewinnt.

Wenn die Geometrie nirgendwo gespeichert ist, ist jede Bearbeitung ein neuer Akt der Fantasie.

Also speichern wir sie. Und zwar vollständig.

Der Szenengraph, in Millimetern

Jedes Projekt besitzt ein scene.v1.json-Dokument. Alle Koordinaten und Längen sind ganzzahlige, reale Millimeter: nach der Extraktion gibt es nirgendwo mehr Pixeleinheiten. Hier ein gekürzter Ausschnitt einer echten Szene:

scene.v1.json (excerpt)
{
  "schema_version": "v1",
  "units": "mm",
  "scale": {
    "confirmed": true,
    "reference": { "type": "wall_length", "element_id": "wall_a", "value_mm": 4200 }
  },
  "walls": [
    {
      "id": "wall_a",
      "start": { "x": 0, "y": 0 },
      "end": { "x": 4200, "y": 0 },
      "thickness_mm": 120,
      "confidence": 0.94,
      "user_confirmed": true
    }
  ],
  "openings": [
    {
      "id": "door_1",
      "kind": "door",
      "host_wall_id": "wall_a",
      "offset_mm_from_start": 2050,
      "width_mm": 900,
      "swing": "left",
      "swing_direction": "in",
      "confidence": 0.81,
      "user_confirmed": false
    }
  ]
}

Zwei Details in diesem Ausschnitt tragen den Großteil des Gewichts.

Öffnungen sind parametrisch an Wände gebunden

Eine Tür wird nicht als (x, y)-Position gespeichert. Sie wird gespeichert als „auf wall_a, 2050 mm ab ihrem Anfang, 900 mm breit“. Wenn Sie im Editor eine Wand verschieben, teilen oder begradigen, verankert sich die Tür deterministisch neu. Sie kann nicht in die Mitte eines Raums abdriften.

Eine Türöffnung, definiert durch ihre Trägerwand, den Versatz vom Wandanfang und die Breite: alles in Millimetern
Eine Türöffnung, definiert durch ihre Trägerwand, den Versatz vom Wandanfang und die Breite: alles in Millimetern

Der Maßstab als zentrales Element

Die Extraktion schätzt ein vorläufiges Pixel-zu-Millimeter-Verhältnis, doch die Szene hält fest, ob ein Mensch es bestätigt hat, und anhand welcher Referenz: einer bekannten Wandlänge, einem per OCR erkannten Maßlabel oder einer Standard-Türbreite. Bis scale.confirmed auf true steht, zeigt der Editor den Wert ehrlich als Schätzung an.

Was Konfidenzwerte wirklich messen

Jedes extrahierte Element trägt einen confidence-Wert zwischen 0 und 1. Das ist keine Spielerei: der Editor sortiert seine Prüfliste danach, und die Pipeline verweigert das Rendern aus Geometrie, die zugleich wenig verlässlich und ungeprüft ist.

ElementQuelle der KonfidenzUnterhalb des Schwellenwerts…
WändeKonsens des Vision-Modells über mehrere Durchläufemarkieren wir sie im Editor zur Prüfung
ÖffnungenErkennungswert × Konfidenz der Trägerwandbitten wir Sie, Öffnungsrichtung und Breite zu bestätigen
RäumePolygonabschluss + Übereinstimmung mit OCR-Labellassen wir den Raumtyp ungesetzt
MaßeOCR-Qualität des gedruckten Labelsignorieren wir das Label bei der Skalierung

Bearbeiten, ohne die Geometrie zu zerstören

Da der Szenengraph die verbindliche Aufzeichnung ist, sind Editor-Operationen kleine, reine Funktionen darüber. Das Teilen einer Wand etwa verankert jede Öffnung per Arithmetik neu: nicht durch erneute Erkennung:

wall-split (simplified)
function splitWall(scene: SceneV1, wallId: string, at_mm: number): SceneV1 {
  const wall = scene.walls.find((w) => w.id === wallId);
  if (!wall) throw new Error(`unknown wall: ${wallId}`);

  const [left, right] = divideSegment(wall, at_mm);

  const openings = scene.openings.map((o) => {
    if (o.host_wall_id !== wallId) return o;
    // An opening before the cut stays on the left piece with its offset
    // untouched; one after the cut moves to the right piece, offset shifted.
    return o.offset_mm_from_start < at_mm
      ? { ...o, host_wall_id: left.id }
      : { ...o, host_wall_id: right.id, offset_mm_from_start: o.offset_mm_from_start - at_mm };
  });

  return { ...scene, walls: replaceWall(scene.walls, wallId, [left, right]), openings };
}

Undo und Redo ergeben sich dabei von selbst: Jede Bearbeitung erzeugt ein neues Szenendokument, sodass die Historie einfach ein Stapel davon ist.

Renderings sind Belege, keine Vermutungen

Wenn Sie Konzepte generieren, betrachtet der Renderer Ihr hochgeladenes Bild überhaupt nicht. Er erstellt ein Kontrollbild aus dem Szenengraphen. Wände, Öffnungen und Möbel-Grundflächen, projiziert aus der kanonischen Kameraperspektive des Raums, und konditioniert das Diffusionsmodell auf dieses. Das Rendering entspricht Ihren Maßen, weil ihm nie etwas anderes gezeigt wurde.

Deshalb kann der Chat-Editor auch sagen: „das 1,6 m-Sofa passt nicht an die 1,4 m-Wand“: statt stillschweigend einen unmöglichen Raum zu rendern: Ob etwas passt, ist Ganzzahl-Arithmetik in Millimetern, geprüft, bevor auch nur ein einziges Pixel erzeugt wird.

Fazit

  • Geometrie lebt an einem Ort: ein versionierter JSON-Szenengraph, in Millimetern, niemals in Pixeln.
  • Beziehungen sind parametrisch. Öffnungen gehören zu Wänden, Kameras gehören zu Räumen, sodass sich Bearbeitungen sicher kombinieren lassen.
  • Unsicherheit ist explizit. Konfidenzwerte und user_confirmed-Flags steuern, was die Pipeline rendert.
  • Renderings leiten sich aus dem Graphen ab: deshalb stimmen sie mit Ihrem Zollstock überein.

Wenn Sie es noch nicht ausprobiert haben: Laden Sie einen Grundriss hoch und beobachten Sie, wie der Szenengraph vor Ihren Augen entsteht.

Weiterlesen