Zubli, maskotka DentalDesk, to twarz naszej recepcji AI dla klinik stomatologicznych. Pacjent spotyka go w rogu strony kliniki późnym wieczorem, gdy recepcja dawno zamknięta, i pyta o cenę, wolny termin albo o to, czy ból zęba może poczekać do jutra.
Postać, z którą ludzie rozmawiają o 23:00, ma jedno zadanie: sprawić, żeby rozmowa w pierwszych dwóch sekundach wydawała się bezpieczna i przyjazna.
W tym tygodniu zbudowaliśmy ciało Zubliego od zera. Nie osobowość, nie logikę rozmowy, tylko ciało. Najciekawszy nie jest efekt, lecz zakręt, który musieliśmy wziąć w połowie drogi. Jeśli prowadzisz klinikę, ta historia mówi też sporo o tym, jak pracujemy nad DentalDesk.pl na co dzień.

Szybka odpowiedź: po co klinice maskotka w czacie?
Bo pacjent nie pisze do „systemu”. Pisze do kogoś. Maskotka obniża próg pierwszej wiadomości, zwłaszcza u osób, które boją się dentysty albo wstydzą się zapytać o cenę. Zubli nie diagnozuje i nie udaje lekarza. Odpowiada tylko na podstawie danych zatwierdzonych przez klinikę, a rano recepcja dostaje gotową kartę zgłoszenia z zapisem rozmowy.
Nowe ciało nie zmienia tych zasad. Zmienia to, czy pacjent w ogóle zechce zacząć rozmowę.
Próba pierwsza: robot z brył
Pierwszy Zubli był „prawdziwym” 3D. Postać składała się w przeglądarce z kilkudziesięciu prostych brył: zaokrąglonych pudełek, kul, kapsuł i torusów. Każda miała własny materiał, całość oświetlał mały studyjny zestaw świateł, a animacja działała w pętli klatka po klatce. Z tego podejścia wyszły trzy prototypy: wesoły żółty robot ze stokrotką, wyluzowany w dzianinowej bluzie i dentystyczny „Doc” w czepku, z lupami i tabletem.
Poruszały się pięknie. Głowa śledziła kursor, robot machał, podskakiwał, mrugał, a miny rysowały się na żywo na teksturze. A jednak obok grafiki koncepcyjnej wyglądały jak zabawki obok fotografii. Faktura dzianiny, lakierowane odblaski na czarnym wizjerze, szwy bluzy, sznurówki sneakersów: każdy taki detal współczesny model graficzny renderuje w sekundy, a ręczne modelowanie zajmuje tydzień. Sufit tej metody czuć w chwili, gdy postawisz oba obrazki obok siebie.

Próba druga: zostawić piksele, dodać ruch
Odwróciliśmy więc problem. Zamiast budować robota, który próbuje wyglądać jak obrazek, wzięliśmy obrazek i nauczyliśmy go się ruszać. Działają na to trzy warstwy.
1. Klatki są źródłem prawdy
Wygenerowaliśmy tę samą postać w sześciu pozach: machanie, kciuk w górę, telefon w dłoni, wskazywanie, ręka na słuchawkach, dłonie w kieszeni bluzy. Wszystkie w identycznym kadrze, oświetleniu i na płaskim szarym tle. Mały skrypt w Pythonie usuwa tło siecią segmentacyjną, odnajduje świecące oczy jako symetryczną parę jasnych plam na ciemnym wizjerze, wymazuje je i wyrównuje każdą klatkę na dwóch kotwicach: punkcie między oczami i linii stóp. Po tym kroku głowa i buty w każdej pozie są dokładnie w tym samym miejscu, więc zmiana pozy to płynne przenikanie, a nie skok.

2. Kukiełka, nie film
Każda klatka to tekstura na siatce z około pięciu tysięcy wierzchołków. Shader wierzchołków dzieli sylwetkę na miękko ważone strefy: głowa obraca się wokół szyi, tułów oddycha od stóp, rękawy zginają się w barkach, a cała postać kołysze się, podskakuje i spłaszcza przy lądowaniu. To ten sam pomysł, który napędza postacie Live2D w grach: deformuj obraz zamiast renderować model. Nie ma szwów, bo nic nie jest pocięte na warstwy, a w spoczynku obraz jest identyczny z plikiem, bo kamera ortograficzna mapuje piksel na piksel.
3. Oczy rysowane na żywo
Skoro oryginalne oczy zostały wymazane, wizjer jest czystą czarną powierzchnią. Oczy rysujemy na małym płótnie i nakładamy je w shaderze fragmentów wewnątrz prostokąta wizjera. Ponieważ dzieje się to na tej samej siatce, oczy obracają się razem z głową. Daje to mruganie, spojrzenie podążające za kursorem, uśmiech, mrugnięcie okiem, serduszka, a nawet linie CRT z pierwotnego renderu. Każdy piksel bluzy, słuchawek i butów nadal pochodzi wprost z grafiki.

Dwa detale, które przesądziły o wyniku
Przenikanie póz o różnych sylwetkach dawało szare obwódki, dopóki nie zrobiliśmy miksu w alfie premultiplikowanej. A jeden filtr CSS z cieniem na animowanym płótnie po cichu zabierał połowę klatek: po jego usunięciu scena przyspieszyła z 29 do 60 klatek na sekundę na zintegrowanej karcie graficznej. To ważne, bo Zubli działa na stronach klinik, nie na stacjach graficznych.
Bryły 3D czy animowany render? Porównanie
| Robot z brył 3D | Animowany render | |
|---|---|---|
| Jakość detalu | ograniczona, „zabawkowa” | jak na grafice koncepcyjnej |
| Zakres ruchu | nieograniczony | duże gesty z klatek, mikroruch z matematyki |
| Nowa poza | dni modelowania | jedna klatka przez pipeline |
| Nowa postać | nowy model od zera | ta sama ścieżka, inna klatka bazowa |
| Kolor pod markę kliniki | przemalowanie materiałów | kolor oczu z palety kliniki |
| Wydajność na laptopie | zależna od liczby brył | 60 klatek na sekundę po optymalizacji |
Stary Zubli miał nieograniczony ruch i ograniczoną urodę. Nowy ma urodę renderu i ruch w dwóch skalach. Dodanie pozy to wygenerowanie jednej klatki i przepuszczenie jej przez pipeline. Dodanie całej nowej postaci to ten sam pipeline z inną klatką bazową; kod komponentu się nie zmienia.

Jak to powstało
To była praca wielu agentów. Agent Claude zaprojektował pipeline, shader i runtime; agent GPT wygenerował klatki póz z jednego obrazu referencyjnego. Oba rozmawiały ze sobą przez herdr, nasz multiplekser terminali dla agentów kodujących, a przeglądarka bez interfejsu sprawdzała każdy gest zrzutami ekranu, zanim spojrzał na nie człowiek. Tak samo pracujemy nad resztą DentalDesk: szybko, z twardą weryfikacją i bez tygodni ustaleń.
Co możesz wdrożyć już dziś
- Zobacz, jak Zubli odpowiada pacjentom, na DentalDesk.pl. Demo pokazuje realną rozmowę, w tym rozpoznawanie pilnych przypadków i cennik.
- Sprawdź, czy Twoja strona odpowiada pacjentowi po 18:00. Jeśli jedyną opcją jest formularz, tracisz zgłoszenia, o których nigdy się nie dowiesz.
- Ustal listę informacji, które klinika zatwierdza do rozmowy: cennik, godziny, dojazd, zasady pilnych wizyt. To jest paliwo dla recepcji AI, a nie wiedza „z internetu”.
- Jeśli masz własną identyfikację, przygotuj kolor marki. Oczy Zubliego mogą go przyjąć, więc ta sama postać nosi inną osobowość na każdej stronie kliniki.
Ile możesz na tym zyskać
Nie obiecujemy liczb, których nie zmierzyliśmy u Ciebie. Mechanika jest prosta: każda rozmowa po godzinach, która dziś kończy się zamkniętym oknem przeglądarki, w DentalDesk kończy się kartą zgłoszenia z kontaktem do pacjenta. Rano recepcja oddzwania, zamiast czekać, aż pacjent wróci. Nowe ciało Zubliego służy dokładnie temu: żeby pacjent w ogóle zaczął pisać.
Zubli w nowej wersji trafia właśnie do demonstracji DentalDesk.pl dla klinik. Jeśli prowadzisz gabinet i chcesz zobaczyć, kto odpowiada Twoim pacjentom po godzinach, napisz do nas.