Przejdź do treści
Produkty REL8

Zubli dostał nowe ciało: jak maskotka DentalDesk przeszła od brył 3D do animacji piksel w piksel

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.

6 хв читанняREL8

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ń.

Trzy wersje Zubliego obok siebie: dzisiejsza maskotka z brył three.js, pierwsza próba nowej postaci z brył oraz nowy Zubli z renderu i shadera

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.

Po lewej prototyp zbudowany z brył, po prawej nowe ciało Zubliego z renderu

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.

Zestaw sześciu wyrównanych klatek Zubliego w różnych pozach

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.

Cztery warianty oczu Zubliego: neutralne, wesołe, mrugnięcie i serduszka, wszystkie rysowane w czasie rzeczywistym

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ł 3DAnimowany render
Jakość detaluograniczona, „zabawkowa”jak na grafice koncepcyjnej
Zakres ruchunieograniczonyduże gesty z klatek, mikroruch z matematyki
Nowa pozadni modelowaniajedna klatka przez pipeline
Nowa postaćnowy model od zerata sama ścieżka, inna klatka bazowa
Kolor pod markę klinikiprzemalowanie materiałówkolor oczu z palety kliniki
Wydajność na laptopiezależ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.

Schemat procesu: render, wysegmentowana i wyrównana klatka z wymazanym wizjerem, animowana kukiełka

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.

Якщо стаття була корисною, поділіться →

Produkty REL8DentalDeskZubliKliniki stomatologiczneZubli maskotka DentalDeskrecepcja AI dla kliniki stomatologicznejDentalDesk.plmaskotka AI w czacie dla pacjentówanimowana maskotka na stronie klinikichat AI dla gabinetu stomatologicznego

Схожі статті

Хочете впровадити AI у своїй компанії?

Замовте безкоштовну консультацію — визначимо, які процеси варто автоматизувати.