DEV Community

Cover image for Simple circuits can create complex behaviors
Ashish
Ashish

Posted on

Simple circuits can create complex behaviors

Einfache Schaltkreise, komplexes Sehen: Was HN heute mit AmblyoPunch zu tun hat

Hacker News Top‑Post: „Simple circuits can create complex behaviors“ – 171 Punkte, 57 Kommentare. Die Diskussion dreht sich darum, wie minimalistische neuronale Verdrahtung reiches, komplexes Verhalten hervorbringt.

Unser Transfer: AmblyoPunch nutzt genau dieses Prinzip für Vision Training bei Amblyopie (Schielauge) und binokularen Sehstörungen.

Einfache Spielregeln

  • Gabor‑Pattern‑Münzen boxen (weiche Streifen, optimiert für kontrastempfindliche Zellen)
  • Roten Spikes ausweichen (3 Leben, Neustart bei Verlust)
  • 6 Welten mit steigender Schwierigkeit (Dorf → Stadt → Weltraum → Mond → Mars → Venus)

Komplexes neuronales Ergebnis

4‑stufiges dichoptisches Training, das beide Augen zusammen arbeiten lässt:

  1. Monokulares Warm‑up (nur schwaches Auge)
  2. Suppression brechen (dominantes Auge gedimmt)
  3. Rebalancing (Klarheit zurück)
  4. Fusion (leichte Disparität → 3D‑Perzept via Panums Fusionsbereich)

Performance‑gated: ≥70 % in rollenden 10 Versuchen, ≥80 % bei Schiel‑Profilen. Unter 40 % → Demotion.

Personalisierung

  • Schwaches Auge: Links/Rechts (falsch = Effekt umgekehrt)
  • Schweregrad: Mild/Moderate/Severe (Target‑Größe, Speed, Stufenlänge)
  • Strabismus: Esotropie/Exotropie (Stage‑4 Disparität/Vergence)
  • Automatic Mode (empfohlen) vs. Custom (Experten)

Technische Architektur (für Builder)

Dichoptic Rendering

Zwei virtuelle Kameras rendern dieselbe Szene, aber jeder Kamera ist ein eigenes Post‑Process‑Material zugeordnet. Auf Quest 2/3/Pro läuft das bei 72 Hz (Stand‑alone) bzw. 90 Hz (PC‑Link). Das Material dimmt das dominante Auge (Alpha‑Blend ≈ 0.3), hebt Kontrast für das schwache Auge an (Gain ≈ 1.4) und fügt in Stage 4 eine horizontale Disparität von 2–6 arcmin hinzu – genau im Panums‑Bereich.

// Fragment‑Shader Ausschnitt (vereinigt für beide Augen)
uniform float uEye;          // 0 = links, 1 = rechts
uniform float uDimFactor;    // 0.3 für dominantes Auge
uniform float uContrastGain; // 1.4 für schwaches Auge
uniform float uDisparity;    // Stage‑4 nur
vec4 base = texture(tex, uv);
if (uEye == 1.0) base.rgb *= uDimFactor;
base.rgb = (base.rgb - 0.5) * uContrastGain + 0.5;
uv.x += uEye * uDisparity;
gl_FragColor = base;
Enter fullscreen mode Exit fullscreen mode

Gabor‑Stimuli

Prozeduraler Shader generiert Gabor‑Funktionen:

float gabor(vec2 p, float freq, float ori, float bw) {
  float x =  p.x * cos(ori) + p.y * sin(ori);
  float y = -p.x * sin(ori) + p.y * cos(ori);
  float envelope = exp(-0.5 * (x*x + y*y) / (bw*bw));
  return envelope * cos(2.0 * PI * freq * x);
}
Enter fullscreen mode Exit fullscreen mode

Frequenz, Orientierung und Bandbreite werden zur Laufzeit aus dem Severity‑Profil (Mild = 2 c/deg, Moderate = 4 c/deg, Severe = 6 c/deg) und der aktuellen Stage abgeleitet.

Input Layer

Controller‑ und Hand‑Tracking‑Events werden über ein gemeinsames Interface IInputProvider normalisiert. Der AutomaticModeFSM reagiert nur auf OnTargetHit / OnMiss, sodass die gleiche Logik für beide Eingabemodi gilt.

State Machine – Automatic Mode

Ein deterministischer Finite‑State‑Machine (FSM) steuert die vier Stages. Transition‑Guard:

bool CanPromote(Stage s) => s switch {
  Stage.Warmup   => RollingSuccessRate(10) >= 0.70f,
  Stage.BreakSup => RollingSuccessRate(10) >= 0.70f,
  Stage.Rebal    => RollingSuccessRate(10) >= 0.70f,
  Stage.Fusion   => RollingSuccessRate(10) >= 0.80f,
  _ => false
};
Enter fullscreen mode Exit fullscreen mode

Bei < 40 % Success‑Rate über die letzten 10 Trials erfolgt Demotion zur vorherigen Stage.

Lokal‑First Persistenz

Alle Fortschritte, Kalibrierungen und Einstellungen liegen im Application.persistentDataPath (JSON). Kein Cloud‑Sync, keine Telemetrie – Datenschutz by Design.

Persönliche Notiz

Ich kenne jemanden, der als Kind gepflastert wurde – und es hasste. Heute, 30 Jahre später, setzt er die Quest auf, boxt Gabor‑Coins, will Venus freischalten. Und merkt nebenbei: Der Ball fliegt nicht mehr an ihm vorbei. Die Treppe fühlt sich sicher an.

Kein Medizinprodukt. Keine Heilung. Trainingsspiel, das augenärztliche Betreuung ergänzt. Aber: Compliance durch Wollen, nicht Sollen.

https://www.meta.com/en-gb/experiences/amblyopunch/1239507485902689/

Top comments (0)