17.06.2026 22:39

mPainter: niezależne krzywe nacisku i czyste końce kresek

⏱️ 3 min czytania
Udostępnij:

Niezależne krzywe nacisku — i koniec z „kropkami" na końcach kresek

Tym razem zajrzeliśmy pod maskę silnika pędzla. Trzy rzeczy, które realnie czuć przy rysowaniu piórem: osobne krzywe nacisku dla każdej dynamiki, koniec z przypadkowymi kropkami na końcach pociągnięć oraz lżejsze stemplowanie.

Osobna krzywa dla rozmiaru, krycia i flow

Dotąd wszystkie trzy dynamiki nacisku — rozmiar, krycie i flow — dzieliły jedną wspólną krzywą transferu. W praktyce znaczyło to, że edytując krzywą w oknie „Nacisk → Krycie" zmieniałeś przy okazji odpowiedź rozmiaru. A podgląd w oknie krycia i tak pokazywał zmianę rozmiaru — bo to rozmiar jest domyślnie sterowany naciskiem.

Teraz każda dynamika ma własną, niezależną krzywą:

  • Rozmiar może narastać ostro — cienko przy lekkim dotyku, grubo przy mocnym dociśnięciu,
  • Krycie — łagodnie, dla miękkich przejść,
  • Flow — wedle uznania,

i żadna edycja nie wpływa na pozostałe. Okno „Nacisk → …" edytuje oraz pokazuje w podglądzie wyłącznie swój parametr. Stare presety i zapamiętane ustawienia narzędzi z jedną krzywą migrują automatycznie — wszystkie trzy dziedziczą dotychczasową krzywą, więc nic nie wygląda inaczej, dopóki sam nie rozjedziesz krzywych.

Koniec z „kropkami"

Zdarzało się, że przy rysowaniu — zwłaszcza na początku i końcu kreski — pojawiała się lita kropka, jakby niezależna od rozmiaru pędzla. To była kombinacja dwóch rzeczy:

  • przy znikomym nacisku rozmiar daba zapadał się do podłogi 1px, identycznej dla pędzla 20px i 200px,
  • a krycie nie było obniżane (domyślnie nacisk nie steruje kryciem), więc ten jednopikselowy ślad był w pełni kryjący — lita kropka.

Do tego pióro raportujące dokładnie zerowy nacisk (typowe przy odrywaniu) było traktowane jak pełny nacisk, co zostawiało pełnowymiarową plamę na końcu kreski.

Teraz daby mniejsze niż piksel renderują się na podłodze 1px, ale z proporcjonalnie obniżonym pokryciem — czubek wygasa płynnie zamiast zostawiać kropkę. A prawdziwe zero nacisku z pióra nie jest już podbijane do pełni (rozróżniamy pióro z czujnikiem nacisku od urządzenia bez niego). Końce kresek są czyste.

Lżejsze stemplowanie

Przy okazji uprościliśmy gorącą pętlę rysowania. Stemplowanie daba i scalanie pociągnięcia z warstwą rozwiązywały kafel obrazu osobno dla każdego piksela (wyszukiwanie w mapie + sprawdzenie kopiowania-przy-zapisie). Teraz robią to raz na kafel — tak samo jak wypełnianie prostokąta. Wynik rysowania jest identyczny, ale przy dużych pędzlach i przy zatwierdzaniu pociągnięcia ubywa narzutu CPU.

Co to daje

Pełna kontrola nad tym, jak pióro przekłada się na ślad — osobno dla grubości, krycia i flow, bez wzajemnych zależności. Czyste, wygasające końce kresek bez przypadkowych kropek. I trochę lżejszy silnik pod spodem.

📚 Powiązane posty

14.07.2026 22:19

Silnik gier: od szablonu do grywalnej gry RPG top-down

Startowy szablon silnika gier to teraz kompletny, grywalny wycinek gry RPG top-down: chodzenie po siatce, rozmowy z postaciami, przeciwnik goniący gdy...
Czytaj dalej →
14.07.2026 19:16

Moonlight Animate — system dialogów w grach

Silnik gier 2D w Moonlight Animate ma teraz kompletny system dialogów: kwestie z efektem maszyny do pisania, wybory z warunkami, zmienne fabularne i g...
Czytaj dalej →
14.07.2026 18:40

Moonlight Animate: ruchoma panorama dźwięku także w wyeksportowanym wideo

Dźwięk przejeżdżający z lewego do prawego głośnika brzmiał dobrze w podglądzie, ale eksport przez serwer zamrażał go w miejscu. Ostatnia luka parytetu...
Czytaj dalej →

📧 Bądź na bieżąco!

Zapisz się na listę oczekujących, aby otrzymywać powiadomienia o nowych postach na Dev Blog oraz informacje o starcie platformy Moonlight.