{
 "$schema": "../../schema.json",
 "schema": "fundus/1",
 "id": "gaussian-splats",
 "name": "Gaussian Splats (gescannte Räume)",
 "name_en": "3D Gaussian splatting",
 "kurz": "Ein gescannter Raum als 47 000 Gauß-Splats: Kamera fliegt zwischen Standpunkten, der Blick lässt sich ziehen, der Raum baut sich von der Leuchte aus auf.",
 "kategorie": "3D & WebGL",
 "kategorie_slug": "3d-webgl",
 "kategorie_nr": 11,
 "bau_chat": "C5",
 "prioritaet": "B",
 "trendstatus": "aufsteigend",
 "belegstatus": "teilbelegt",
 "website_belege": 1,
 "stimmung": [
  "ruhig",
  "filmisch"
 ],
 "stimmung_roh": [
  "realistisch",
  "immersiv",
  "ruhig"
 ],
 "technik": [
  "three",
  "gaussian-splatting",
  "webgl-shader"
 ],
 "technik_gruppen": [
  "webgl"
 ],
 "leistungskosten": "hoch",
 "steckbrief": {
  "beschreibung": "Ein realer Ort wird mit Fotos oder Video gescannt und als Hunderttausende bis Millionen farbige 3D-Gauß-Ellipsoide (Splats) gespeichert. Im Browser projiziert ein Splat-Renderer jedes Ellipsoid auf den Bildschirm, sortiert alle nach Tiefe und blendet sie mit Alpha übereinander. Das Ergebnis wirkt wie ein Foto, durch das man sich frei bewegen kann. Splats lassen sich in einer three.js-Szene mit normalen Meshes mischen. Die Kamera fährt per Scroll, Knopf oder Ziehen durch den Raum. Per Shader lassen sich Splats einblenden, auflösen oder umfärben.",
  "warum_es_wirkt": "Ein echter Ort wird im Browser begehbar. Das wirkt glaubwürdiger als ein modelliertes 3D-Modell, weil Licht, Material und Unordnung echt sind. Die Technik ist noch neu, der Effekt überrascht.",
  "wann_einsetzen": "Architektur, Immobilien, Gastronomie und Hotels, Museen, Event-Locations, Drehorte, Produktscans.",
  "wann_nicht": "Bei knappem Ladebudget: Rohdateien haben oft 10 bis 100 MB, komprimiert deutlich weniger. Wenn die Gestaltung stilisiert statt realistisch sein soll. Auf Seiten, die vor allem gelesen werden.",
  "varianten": [
   "Kamerafahrt zwischen festen Standpunkten oder per Scroll",
   "Reveal: der Raum baut sich per Shader von einem Punkt aus auf",
   "Splat und Mesh gemischt, etwa ein Produktmodell im gescannten Raum",
   "Stilisiert als Punkte oder Dither"
  ],
  "umsetzung": "Einen fertigen Renderer nehmen, etwa Spark (World Labs) als three.js-Objekt; er liest PLY, SPZ, SOGS, SPLAT und KSPLAT. Komprimierte Formate wie SPZ nutzen und die Splatzahl begrenzen; World Labs liefert 100 000 Splats je Szene. Die Sortierung kostet bei jeder Kamerabewegung Rechenzeit, die Füllrate wächst mit großen, nahen Splats. Die Kamera auf Standpunkte und kleine Schwenks begrenzen, damit niemand in die unscharfen Randbereiche des Scans fliegt. Auf Award-Seiten ist das Muster in dieser Recherche nicht belegt.",
  "mobil": "Splatzahl etwa halbieren und die Pixel Ratio begrenzen. Bei schwachen Geräten ein Video oder Standbild als Ersatz.",
  "reduzierte_bewegung": "Feste Kamerapositionen statt Fahrten, Wechsel als Blende, kein Reveal.",
  "barrierefreiheit": "Den Ort in Text beschreiben. Standpunkte als Knöpfe mit Tastatur bedienbar machen (auch Pfeiltasten), Wechsel per aria-live ansagen. Ziehen ist nur ein Zusatz."
 },
 "messwerte": {
  "easing": "",
  "dauer_ms": "",
  "stagger_ms": "",
  "distanz": "",
  "sonstiges": "Produktion World Labs: 100k Splats pro Szene im .spz-Format, vorab geladen; typ. 0.5–3 Mio. bei Einzelszenen",
  "herkunft": "beobachtet",
  "quelle": "https://www.worldlabs.ai/"
 },
 "kurve": null,
 "gesehen_bei": [
  {
   "seite": "Spark (World Labs)",
   "url": "https://sparkjs.dev/",
   "auszeichnung": "",
   "beobachtung": "Gaussian-Splatting-Renderer für three.js; Splats mit Meshes kombinierbar, programmierbare dynamische Splat-Effekte; Formate PLY, SOGS, SPZ, SPLAT, KSPLAT.",
   "art": "artikel"
  },
  {
   "seite": "Luma WebGL Library",
   "url": "https://lumalabs.ai/luma-web-library",
   "auszeichnung": "",
   "beobachtung": "Luma-Captures direkt in three.js-Projekten; im Three.js-Showcase gelistet.",
   "art": "artikel"
  },
  {
   "seite": "World Labs",
   "url": "https://www.worldlabs.ai/",
   "auszeichnung": "",
   "beobachtung": "Live geprüft 31.10.2026 (HTML/Bundle per curl abgerufen): Startseite lädt Gaussian-Splat-Szenen im .spz-Format per <link rel=preload fetchPriority=high> (rustic-kitchen-100k.spz, grand-salon-100k.spz, floating-castle-100k.spz).",
   "art": "website"
  }
 ],
 "tutorials": [
  {
   "titel": "Spark Dokumentation und Beispiele",
   "url": "https://sparkjs.dev/"
  }
 ],
 "kombinierbar_mit": [
  "scroll-3d-kamerafahrt",
  "ascii-dither-pixel-stil"
 ],
 "urls": {
  "detail": "https://cecodesign.de/lab/fundus/3d-webgl/gaussian-splats/",
  "meta": "https://cecodesign.de/lab/fundus/3d-webgl/gaussian-splats/meta.json",
  "demo": "https://cecodesign.de/lab/fundus/3d-webgl/gaussian-splats/demo"
 },
 "herkunft": {
  "quelldateien": [
   "material3d.json",
   "patch-belege-2.json"
  ],
  "pruefnotizen": [
   "patch-belege-2.json: 1 Produktionsbeleg."
  ]
 },
 "bau": {
  "status": "fertig",
  "kurz": "Ein gescannter Raum als 47 000 Gauß-Splats: Kamera fliegt zwischen Standpunkten, der Blick lässt sich ziehen, der Raum baut sich von der Leuchte aus auf.",
  "demo": true,
  "abhaengigkeiten": [
   "three@0.186.0"
  ],
  "werte": {
   "renderer": "eigener Splat-Renderer in three.js: InstancedBufferGeometry (ein Quad je Splat), Daten in vier RGBA-Float-Texturen (Mittelpunkt + Deckkraft, Farbe, Kovarianz), Abruf per texelFetch",
   "projektion": "EWA wie im 3DGS-Paper: 2D-Kovarianz = J · W · Σ · Wᵀ · Jᵀ, Eigenvektoren als Quad-Achsen, + 0,3 px² Tiefpass gegen Aliasing",
   "quad": "±2,5 σ, Fragment exp(−0,5 · q), verworfen unter 1/255 Deckkraft; Radius höchstens 320 px",
   "blending": "vormultipliziertes Alpha (One, OneMinusSrcAlpha), Tiefentest aus, Sortierung hinten nach vorne",
   "sortierung": "Zählsortierung über 16-bit-Tiefenschlüssel auf der CPU, nur wenn sich die Kamera bewegt hat; Ergebnis als Instanz-Attribut idx",
   "splats": "47 060 Desktop, 26 927 bei Touch oder Breite bis 600 px (Messwert World Labs: 100 000 je Szene als .spz)",
   "splat_form": "auf Flächen geschichtete Stichprobe (Raster mit Zufallsversatz), σ = 0,4 bis 0,72 × Splatabstand, Anisotropie 1 bis 2,2 (Holz 2,2 bis 3 in Faserrichtung), Dicke 8 % von σ, Deckkraft 0,72 bis 0,97",
   "kurve": "cubic-bezier(0.455, 0.03, 0.515, 0.955) für Kamerafahrt und Reveal (easeInOutQuad, Rezept „Bild zuerst“)",
   "fahrt_ms": 2400,
   "fahrt_bogen": "Kamera hebt sich in der Flugmitte um 0,12 m × Flugweite / 3",
   "standpunkte": "Tür (2,15 | 1,58 | 1,45), Tisch (−1,8 | 1,38 | 0,15), Fenster (0,55 | 1,62 | −1,2); FOV 52°, hochkant 72°",
   "ziehen": "Gier ±0,55 rad, Nick ±0,16 rad (Touch nur Gier), 0,004 rad/px, Nachlauf 1 − e^(−6·dt)",
   "atmen": "Eigenbewegung 0,035 m bei 0,07 Hz, nur Variante Kamerafahrt",
   "reveal": "2 600 ms, Kugel um die Leuchte wächst von 0 auf 6,5 m, Aufbaukante 0,9 m: Splats wachsen dort von 0 auf volle Größe und leuchten warm (#fff0d1) auf; Außenbereich erscheint, wenn die Kugel das Fenster erreicht",
   "punkte": "Variante Punkte: isotrope Scheiben 1,3 px × DPR (× 0,8 bis 1,3), weicher Rand, Deckkraft × 1,3",
   "aussenbereich": "Splats hinter dem Fenster (z −9,5 bis −11) nur gezeichnet, wenn der Sehstrahl durchs Fenster geht (spart Füllrate, echte Parallaxe)",
   "pixel_ratio": "höchstens 1,75 Desktop, 1,5 Touch",
   "ui": "200 ms, Canvas-Blende 350 ms, gleiche Kurve",
   "vorfuehrung_takt_ms": "4 200 je Standpunkt (+ 1 200 nach dem ersten Reveal), gedachter Zeiger zieht den Blick einmal je Standpunkt",
   "reduziert_blende_ms": 150,
   "schriften": "Instrument Serif (Name, Titel), Instrument Sans (Text), Fragment Mono 12 px (Zähler, Bildunterschrift, Werte)",
   "farben": "#0e0e0e Grund, #f2f2f2 Text, #8a8a8a Bildunterschrift"
  },
  "ausloeser": "ziehen",
  "touch": "26 927 Splats, Pixel Ratio höchstens 1,5. Wischen quer über die Bühne schwenkt den Blick (nur Gier, senkrechtes Wischen scrollt die Seite). Standpunkte und Varianten über Knöpfe. Hinweis „Wischen zum Umsehen“ statt „Ziehen“.",
  "reduziert": "Kein Reveal, keine Kamerafahrt, keine Eigenbewegung. Standpunkte sind feste Kamerapositionen; der Wechsel ist eine harte Blende (150 ms aus, umsetzen, einblenden). Ziehen schwenkt ohne Nachlauf.",
  "korrekturen": {
   "beschreibung": "Ein realer Ort wird mit Fotos oder Video gescannt und als Hunderttausende bis Millionen farbige 3D-Gauß-Ellipsoide (Splats) gespeichert. Im Browser projiziert ein Splat-Renderer jedes Ellipsoid auf den Bildschirm, sortiert alle nach Tiefe und blendet sie mit Alpha übereinander. Das Ergebnis wirkt wie ein Foto, durch das man sich frei bewegen kann. Splats lassen sich in einer three.js-Szene mit normalen Meshes mischen. Die Kamera fährt per Scroll, Knopf oder Ziehen durch den Raum. Per Shader lassen sich Splats einblenden, auflösen oder umfärben.",
   "warum_es_wirkt": "Ein echter Ort wird im Browser begehbar. Das wirkt glaubwürdiger als ein modelliertes 3D-Modell, weil Licht, Material und Unordnung echt sind. Die Technik ist noch neu, der Effekt überrascht.",
   "wann_einsetzen": "Architektur, Immobilien, Gastronomie und Hotels, Museen, Event-Locations, Drehorte, Produktscans.",
   "wann_nicht": "Bei knappem Ladebudget: Rohdateien haben oft 10 bis 100 MB, komprimiert deutlich weniger. Wenn die Gestaltung stilisiert statt realistisch sein soll. Auf Seiten, die vor allem gelesen werden.",
   "varianten": [
    "Kamerafahrt zwischen festen Standpunkten oder per Scroll",
    "Reveal: der Raum baut sich per Shader von einem Punkt aus auf",
    "Splat und Mesh gemischt, etwa ein Produktmodell im gescannten Raum",
    "Stilisiert als Punkte oder Dither"
   ],
   "umsetzung": "Einen fertigen Renderer nehmen, etwa Spark (World Labs) als three.js-Objekt; er liest PLY, SPZ, SOGS, SPLAT und KSPLAT. Komprimierte Formate wie SPZ nutzen und die Splatzahl begrenzen; World Labs liefert 100 000 Splats je Szene. Die Sortierung kostet bei jeder Kamerabewegung Rechenzeit, die Füllrate wächst mit großen, nahen Splats. Die Kamera auf Standpunkte und kleine Schwenks begrenzen, damit niemand in die unscharfen Randbereiche des Scans fliegt. Auf Award-Seiten ist das Muster in dieser Recherche nicht belegt.",
   "mobil": "Splatzahl etwa halbieren und die Pixel Ratio begrenzen. Bei schwachen Geräten ein Video oder Standbild als Ersatz.",
   "reduzierte_bewegung": "Feste Kamerapositionen statt Fahrten, Wechsel als Blende, kein Reveal.",
   "barrierefreiheit": "Den Ort in Text beschreiben. Standpunkte als Knöpfe mit Tastatur bedienbar machen (auch Pfeiltasten), Wechsel per aria-live ansagen. Ziehen ist nur ein Zusatz."
  },
  "geprueft": "01.11.2026",
  "notiz": "Location-Scout „Halbtotale“ aus Kiel zeigt eine gescannte Wärterstube am Kanal (Rezept „fotograf-film-bild-zuerst“, Film-Variante: dunkle Fläche, Interface in den Ecken, Zähler und Bildunterschrift in Mono). Der Scan ist prozedural erzeugt (kein fremdes Material), gerendert mit einem eigenen, echten 3DGS-Renderer (EWA-Projektion, Tiefensortierung, vormultipliziertes Alpha). Varianten Kamerafahrt, Reveal, Punkte. Echter Einsatz: .spz-Datei mit Spark laden statt erzeugen. Abweichung vom Rezept: Das Rezept bewegt nur die Opazität; hier ist die Kamerabewegung der Effekt selbst, deshalb übernimmt die Demo nur dessen inOut-Kurve. Ohne WebGL2 zeichnet Canvas 2D ein Standbild aus jedem dritten Splat. AD-Review 01.11.2026: Note 5"
 }
}
