☕ Arłukowicz.INFO

Historia prac nad drzewem

Spis treści 20191007 Piotr Arłukowicz

  1. Zmiany na stronie
  2. Poprawki w drzewie
  3. Kontrola poprawności
  4. Prace koncepcyjne nad drzewem
  5. Problemy z drzewem w postaci diagramu
  6. Projekt drzewa 3D
  7. Problemy pierwszego drzewa 3D
  8. Renderowanie częściowe
  9. Modelowanie pnia w 3D
  10. Retopologia
  11. Wypiekanie i cieniowanie
  12. Dodanie bluszczu i problemy z liśćmi
  13. Końcowe prace związane z drzewem
  14. Słowa końcowe i podziękowania

Zmiany na stronie 20190813 Piotr Arłukowicz

Przerobiłem stronę informacyjną naszej rodziny. Główna strona została uproszczona. Usunąłem formularze rejestracyjne, bazę danych oraz sporo niepotrzebnego już kodu, który był używany do rejestracji na Zjazd.

Poprawki w drzewie 20190829 Piotr Arłukowicz

Wprowadziłem ostatnie poprawki do drzewa w programie Family Historian, w którym trzymamy całą bazę danych na temat rodziny, oczywiście offline. W bazie tej mamy obecnie ponad 350 osób, w tym kilka gałęzi bocznych, nie należących do rodziny. Na przykład znalazłem informacje genealogiczne na temat żony któregoś z naszych przodków, zatem dodałem je także do drzewa. Jednak połączenie jest tylko przez małżeństwo, i nie mamy wspólnej historii - takie przypadki stanowią po prostu osobne drzewa i zawierają historie innych rodzin, w których nie ma naszego nazwiska. W naszym rodzinnym drzewie takie osoby się nie pojawiają wizualnie, ale są gdzieś w bazie danych.

Kontrola poprawności 20190830 Piotr Arłukowicz

Sprawdziłem poprawność drzewa rodzinnego w serwisie MyHeritage, porównując je z naszą bazą danych. Drzewo w MyHeritage jest naszym głównym rodzinnym archiwum, które dostępne jest cały czas on-line dla każdego z nas. Aby oglądać całe drzewo, należy zarejestrować się w serwisie i otrzymać zaproszenie do wglądu w dane rodziny. Każdy po takim zaproszeniu może tworzyć swoje własne drzewa, oraz dostarczać nowe informacje na temat genealogii, a główny twórca i założyciel drzewa - Krzysztof Arłukowicz może je dodać do drzewa głównego.

Prace koncepcyjne nad drzewem 20190901 Piotr Arłukowicz

Drzewa, które można zamówić w serwisie MyHeritage lub wygenerować w programie Family Historian w obu przypadkach nie są najładniejsze. Generuje je automat i ich koszt jest dość spory. Aby sprawdzić, jak to wychodzi, w programie Family Historian przygotowałem diagram z drzewem rodzinnym, w którym widać wszystkie pokolenia od naszego wspólnego nieznanego przodka z lat dwudziestych osiemnastego wieku. Drzewo to wygenerować dość łatwo, jednak wygląda ono jak długa wstęga o szerokości metra i długości pięciu metrów, po wydrukowaniu w naturalnej wielkości, czytelnej dla człowieka. Kto ma tyle miejsca, aby powiesić na ścianie taki długi plakat? Drzewo w takiej postaci jak na naszym pierwszym Zjeździe miało ponad cztery metry. Postanowiłem, że maksymalny rozmiar plakatu z drzewem nie może przekroczyć dwóch metrów; jednak w takim przypadku miałoby ono w pionie szerokość podobą do kartki papieru. To także nie spełniało swojego zadania - nie było w takim drzewie nic niezwykłego, poza skojarzeniem z kiszką o długości dwóch metrów. Poniżej widać pomniejszony podgląd takiego drzewa.

Pierwotna, domyślna postać postać drzewa, wygenerowana automatycznie przez program Family Historian.

Drzewo należało zatem tak ustawić, aby poszczególne gałęzie kształtowały się bardziej pionowo, a dzięki temu można byłoby uzyskać bardziej optymalny kształt całości. Po kilku godzinach pracy miałem nowy kształt gotowy. Ustawiona została każda gałąź. Postarałem się ustawić poszczególne rody w coś na kształt mniejszych grup, które można kojarzyć z odrostami lub gałęziami głównymi. Dzięki takiemu podejściu drzewo nabrało bardziej prostokątnych kształtów, jednak utraciłem poziome relacje pomiędzy pokoleniami. Trudniej teraz zauważyć kto jest z tego samego pokolenia, ponieważ często przodkowie ustawieni są na równi ze swoimi potomkami. Musiałem jednak tak zrobić aby możliwe było odpowiednie powiększenie znaków. Czytelność liter w nazwiskach i datach wymagała, aby pisane one były odpowiedniej wielkości literami, a te wymuszały odpowiednią skalę powiększenia. Utraciłem zatem czytelność hierarchii, ale zachowałem czytelność w ogóle, zmniejszając jednocześnie poziomy rozmiar drzewa do około dwóch metrów długości, i półtora metra wysokości.

Ostateczny kształt drzewa po ręcznym ustawieniu wszystkich gałęzi.

Problemy z drzewem w postaci diagramu 20190902 Piotr Arłukowicz

Diagram uzyskany z programu Family Historian to rysunek o wielkości 23×12 metra. Niestety, z poziomu tego programu nie można zapisać tak wielkiego obrazka, ze względu na ograniczenia 32-bitowej architektury tego programu. Pierwsze drzewo na nasz Zjazd było robione metodą straszliwie prymitywną i wręcz głupią: drzewo, które miałem w programie powiększyłem, tak aby widzieć jego fragment o odpowiedniej wielkości, a następnie zrobiłem zrzut ekranu. Uzyskany w ten sposób rysunek zawierał fragment drzewa o odpowiedniej wielkości. Następnie w programie przesuwałem podgląd drzewa, i robiłem kolejny zrzut, potem kolejny i tak dalej. W efekcie było z tym bardzo wiele pracy, bo wykonałem ponad 50 takich zrzutów ekranu, z których każdy zawierał fragment drzewa, w dodatku z elementami które trzeba było wyciąć, takimi jak brzeg okna, paski przewijania, itp. Wykonałem te wszystkie operacje przycięcia i edycji na każdym z kilkudziesięciu obrazów, a następnie stworzyłem gigantycznej wielkości obraz końcowy, w którym umieściłem wszystkie poprzednio przygotowane części. Była to żmudna i niewdzięczna praca, bo komputer podczas edycji tak wielkich plików ledwie dawał radę, ale wiedziałem, że wykonać ją muszę raz na Zjazd. Potem jednak - po Zjeździe, gdy obiecałem, że wykonam drzewa na zamówienie dla chętnych, cała ta praca musiała zostać powtórzona, ponieważ drzewo rozbudowało się o nowe osoby.

Family Historian to program, który nie potrafi wprawdzie zapisać wielkich drzew w postaci obrazka, ale umie zapisać je do popularnego formatu PDF, który jest bardzo przenośny. Pierwsze próby nie dały jednak spodziewanych rezultatów - PDF nie działał prawidłowo, ponieważ wynikowe obrazy miały popsute litery. Przykład fragmentu drzewa z tym problemem jest poniżej.

Problemy z czcionkami - niektóre litery były zbyt szerokie po zapisie w PDF.

Po długich staraniach i kombinowaniu co zrobić, i jak naprawić ten problem udało mi się osiągnąć efekt, który był już o wiele lepszy, ale nadal niezadowalający. Litery były ustawione w odpowiedni sposób, natomiast nie każdy ich element był poprawnie rysowany. W tym momencie zaczynałem już powoli rwać włosy z głowy. Tego typu problemy nie wzięły się znikąd. Pracuję na co dzień pod Linuxem, czyli darmowym, otwartym i przyjaznym systemem operacyjnym, który wspaniale zarządza zasobami komputera. Program Family Historian nie działa jednak pod Linux, bo został napisany pod Windows, czyli pod najpopularniejszy domowy system użytkowników. Niestety, nie jest to system doskonały, i pośród jego licznych wad natrafiłem także na problemy z konwersją czcionek. Stąd właśnie wzięły się te, i inne problemy z literami na które natrafiłem. Po prostu PDF generowany przez program windowsowy, uruchomiony w środowisku Linux coś przekłamywał podczas tworzenia pliku i zamiast ładnego obrazka dostawałem śmieci. Poniżej inny przykład błędnych liter, wynikający z niezgodności pomiędzy systemami operacyjnymi i zainstalowanymi w nich czcionkami:

Litery w całym drzewie były uszkodzone i wyglądały, jakby niektórych elementów im zabrakło. Oczywiście tak utworzonego rysunku nie dało się wykorzystać, a jego poprawianie ręczne zajęłoby zbyt wiele czasu.

Wymyśliłem wtedy, że do programu Family Historian można doinstalować odpowiedni sterownik, który umie zapisać cały ogromny obraz w skali 1:1 w dokumencie typu XPS, udając proces zwykłego drukowania. Program zatem myśli, że drukuje strona po stronie, a sterownik przechwytuje drukowane informacje i zapisuje do pliku, bez żadnego faktycznego drukowania. Drukować w ten sposób do pliku można nawet ogromne strony o powierzchni metra kwadratowego. Zapisałem całość drzewa w oryginalnej skali w postaci ponad 30 takich wielkich stron XPS. Każdą z nich następnie skonwertowałem do postaci obrazu, i otrzymałem sytuację podobną jak poprzednio, tylko nie musiałem już tych obrazów poprawiać, bo strony zawierały po prostu fragmenty drzewa bez żadnych niepotrzebnych ramek. Zależnie od formatu papieru, druk można było wykonać i uzyskać nawet 130 stron. Problem jest tylko w ich późniejszym połączeniu, bo każda zawiera fragment drzewa i trzeba je potem składać podobnie jak puzzle. Na szczęście znalazłem sposób na połączenie takich obrazków w sposób automatyczny: wystarczy ustawić je w tablicę w której będzie kilkanaście kolumn i kilka rzędów, podobnie jak się robi gazetkę szkolną, a następnie tak ustawione obrazki można połączyć w jeden wielki obrazek końcowy. Opracowałem odpowiednie polecenia i po kilku próbach udało mi się uzyskać obraz, który zawierał całe drzewo sklejone z mniejszych fragmentów. Zadanie takie robi jeden z programów z pakietu Image Magick. Uruchamia się go w konsoli, wpisując odpowiednie argumenty i parametry, program działa, niczego nie wyświetla i kończy pracę. Znaleźć jednak można po zakończeniu efekty jego pracy w postaci nowych plików, które utworzył. Jedno z poleceń, które należało wpisać pokazuję poniżej w takiej postaci, w jakiej je wpisałem.

time xpstopng -x 0 -y 0 -w 3508 -h 2480 ../ready2-a2.xps && time montage page-* -mode Concatenate -tile 13x10 full2.png

Krótko byłem zadowolony z wyniku - drzewo po dokładnym zbadaniu zawierało minimalne uskoki, jedno-punktowe przesunięcia i coś jakby szczeliny pomiędzy stronami. Okazało się, że po druku, nie każda strona miała ten sam rozmiar! Niektóre z nich były nieco szersze, ponieważ zawierały dodane marginesy. Szybko jednak znalazłem automatyczny sposób na pozbycie się tych marginesów, i w efekcie po powtórzeniu całego procesu tworzenia obrazów pośrednich z wydruków, przycinania ich a potem łączenia w określonym układzie w końcu dostałem wielki obraz z drzewem o prawidłowej formie. Plik z tym drzewem miał rozmiar 50MB, co nie wydaje się wiele, ale przekracza dwukrotnie wielkość maksymalnej wiadomości pocztowej, którą można wysłać np. w serwisie GMail. Obraz, który otrzymałem miał białe tło, które następnie usunąłem w programie do obróbki grafiki 2D - w GIMPie. Gotowy diagram miał postać przezroczystej płaszczyzny w której cienkimi liniami połączone były rozrzucone prostokąty ze zdjęciami i nazwiskami. Gdyby kogoś interesował rozmiar tego obrazka, to miał on wymiary 45591×28800 pikseli. Jest to wielkość ponad 23 razy przekraczająca rozmiar ekranu typowego komputera. Można zatem sobie wyobrazić, jak wielkie było to drzewo, bo gdybym chciał je wyświetlić na monitorze w skali 1:1, musiałbym mieć monitor na całą ścianę o wymiarach 12 metrów. Taka wielkość była jednak potrzebna, aby zachować odpowiednią gęstość wydruku i jakość obrazu.

Projekt drzewa 3D 20190904 Piotr Arłukowicz

Postanowiłem, że wykonam drzewo w programie 3D, aby miało ciekawy wygląd i aby było na co popatrzeć. Rodzina jest tego warta. Wymyśliłem zatem, że zaprojektuję drzewo w Blenderze, moim ulubionym programie do grafiki i animacji, a następnie umieszczę rysunek drzewa, najlepiej z jakimiś liśćmi pod diagramem uzyskanym w poprzednim kroku. Projekt drzewa był prosty - zacząłem od najgrubszego korzenia z naszym przodkiem, a następnie rozciągałem gałęzie na boki, tam gdzie diagram pokazywał kolejne pokolenia naszych przodków. Kształt jaki uzyskałem przypominał łodygi przywiązane do płotu - ich równoległy układ i wzrost w pionie na pewno nie przypominał drzewa. Na rysunku poniżej widać jak wyglądał ten pierwszy projekt.

Drzewo wykonane z rur o zmiennej grubości, pomalowane wstępnie na brązowo.

Problemy pierwszego drzewa 3D 20190905 Piotr Arłukowicz

Drzewo, które zbudowałem zrobione było dość prosto - składało się z elastycznej rury, która na początku przy korzeniu była gruba, a potem w miarę przesuwania się w stronę coraz dalszych gałęzi, robiła się coraz cieńsza. Nie było to jakoś specjalnie trudno wymodelować - po prostu na diagramie przygotowanym wcześniej umieściłem krzywe Beziera, które następnie dostosowałem, przez dodanie im grubości. To podejście, chociaż proste, szybko zemściło się na dalszych etapach pracy. Gałęzie tak otrzymane zostały następnie skonwertowane na obiekt, który w grafice 3D nazywa się mesh (czytaj "mesz"). Wszystkie elementy stały się wtedy jedną całością o skomplikowanym kształcie. Ten kształt należało następnie poprawić ręcznie poprzez czynności podobne do rzeźbienia - tak jakby to była glina. Mogłem zatem ręcznie w niektórych miejscach dodać sęki, szczeliny i różne detale. Taka praca była przyjemna ale trwała dość długo. W trakcie tego procesu okazało się, że rury, które poprzednio połączyłem mają wewnętrzne ściany, które podczas rzeźbienia uszkadzają powierzchnię drzewa, i widać nieprzyjemne dla oka artefakty. Zacząłem zatem poprawiać zauważone problemy, ale pożerało to coraz więcej czasu. W końcu, gdy już miałem wrażenie, że poprawiłem wszystkie błędne połączenia gałęzi, model był na tyle wielki, że komputer ledwo dawał radę utrzymać całość w pamięci. Należało wtedy nałożyć na obiekt materiał przypominający korę, co udało się już po jednym dodatkowym dniu pracy. Dodałem także bluszcz, który rozpościerał się na korze i oplatał całe drzewo. Edycja tego bluszczu była bardzo utrudniona, ponieważ nie dość, ze samo drzewo było bardzo "ciężkie" do strawienia, to jeszcze dodatkowe kilkaset tysięcy liści zwiększało ogólne skomplikowanie sceny. W efekcie cały model i drzewo zbudowane z taką pieczołowitością było tak trudne do dalszego przetwarzania, że na każde poruszenie myszą musiałem czekać po parę sekund.

Pierwszy podgląd drzewa do którego dodałem trochę bluszczu.

Trzeba przyznać, że mój komputer nie jest najnowszy, ale jest to bardzo potężna maszyna, którą sam zbudowałem. Radziła sobie i tak nadzwyczaj dobrze, ale okazało się, że wymagania na następnym etapie są nawet dla niej za wysokie. Aby przygotować końcowy obrazek, należało zbudowany przeze mnie model przeliczyć na końcową postać. Proces ten nazywa się renderowaniem, w jego wyniku otrzymuje się render, czyli końcowy obrazek, i jest to proces dość długi, a z maszyny wyciskane są ostatnie soki. Tak też było z moim komputerem. Uruchomiłem proces renderowania całego drzewa. Szybko okazało się, że to potrwa kilka godzin. Zostawiłem zatem maszynę, aby liczyła przez noc, i następnego dnia rano okazało się, że wszystko się policzyło. Tylko wynik nie był taki jak chciałem! Okazało się, że światła, oraz kolory, które ustawiłem, i które widać było na podglądzie jako bardzo ładne i prawidłowe, z nieznanego mi powodu na końcowym renderze są zupełnie nie takie jak miały być. Było to bardzo dziwne, i długo szukałem błędu w ustawieniach. Nie było żadnego. Mogło zatem być i tak, że natrafiłem na błąd w samym programie, co nie jest takie rzadkie, jakby się wydawało. Używam bowiem najnowszej wersji, pobieranej wprost od programistów w postaci kodu źródłowego, który kompiluję u siebie na komputerze własnoręcznie. Zatem jeżeli ktoś z programistów w Amsterdamie zmienił kod, to już na przykład godzinę potem mogłem mieć zmieniony program u siebie, i korzystać z najnowszych funkcji. To wszystko jest bardzo fajne, ale ma także wady - na przykład jestem podatny na wszystkie nie wykryte jeszcze błędy. Tak było też i tym razem. Ponieważ obraz okazał się nieprawidłowy, należało przebudować scenę. Zrobiłem to, i odświeżeniu rozpocząłem ponownie proces renderowania, który trwał przez pełne 17 godzin. Komputer na początku powiedział, że potrzebuje do tego celu 83 ramu. To bardzo dużo! Poczekałem cierpliwie, i na końcu całego czekania okazało się, że program zakończył się błędem, i nie otrzymałem żadnego renderu! W tym momencie zapisałem sobie rekord zużycia pamięci (poprzedni wynosił 62 ram), i zacząłem się zastanawiać jak wyrenderować obraz, którego wymagania przekraczają możliwości mojego komputera. Wiedziałem, że nikt ze znajomych w okolicy nie ma silniejszej maszyny. Postanowiłem renderować obraz po kawałku.

Renderowanie częściowe 20190915 Piotr Arłukowicz

Częściowy render polega na tym, że w pomniejszonym podglądzie całego obrazu zaznacza się mały obszar, i następnie tylko on jest renderowany. Moje części renderu wybrałem na podstawie gałęzi, które zawierały całe pod-rodziny. Render każdej z nich trwał od 3 do 10 godzin, zależnie od wielkości powierzchni. Na koniec wystarczyło połączyć poszczególne części razem, ale po wyrenderowaniu wszystkich fragmentów przyjrzałem się im uważnie, i zauważyłem niezbyt ładne elementy, które moim zdaniem nie powinny znaleźć się na drzewie, przeznaczonym przecież dla potomności. Poniżej umieściłem trzy przykłady miejsc, w których można się przyczepić do jakości i ogólnego wyglądu. Drzewo wykonane taką metodą pokazuje dokładnie to, co było dokonane podczas jego tworzenia: pośpiech, niewielką staranność i stosowanie metod "na skróty". Niestety, nawet taki render wymagał wiele wysiłku i starań, a efekt był co najwyżej rozczarowujący.

Fragment obrazu, w którym wyraźnie widać, że gałęzie które zwężać miały się na końcach, wyglądają raczej jak jakieś szpony. Dobre do horroru może.

W tym fragmencie widać prześwietlone liście a te, które są w cieniu, nie mają żadnych wyraźnych szczegółów, na których można zawiesić oko.

Liście układają się w bezładne "kupy", często przylegając do siebie. Nie posiadają wyraźnych szczegółów, i wszystkie są do siebie podobne jak krople wody.

Po uważnej analizie obrazu i otrzymanych części doszedłem do wniosku, że nie mogę tego tak zostawić. Praca z takimi wielkimi plikami dała się jednak we znaki, i na każdą operację musiałem czekać dosłownie sekundy. Spróbujcie zrobić cokolwiek przy komputerze, ale pomiędzy każdym kliknięciem myszy policzcie spokojnie do dziesięciu. Tak nie da się pracować, chyba, żebym miał całą wieczność i anielską cierpliwość. Zdecydowałem zatem, że trzeba drzewo zrobić porządnie od początku, zgodnie ze wszystkimi regułami sztuki tworzenia obiektów 3D dla na przykład gier. Zacząłem energicznie, i chcąc nie chcąc, przeszedłem przez wszystkie etapy produkcji assetów 3D, o których tyle nauczałem swoich studentów.

Modelowanie pnia w 3D 20190916 Piotr Arłukowicz

Ta część opisu może być odrobinę techniczna, bo chcę opowiedzieć co dokładnie zrobiłem. Dla osób pracujących w branży nie będzie to nic nowego. Zacząłem od ustawienia w programie 3D w tle całego diagramu z naszym drzewem, w postaci rodzin na gałęziach. Następnie na tym diagramie rozpiąłem punkty w przestrzeni 3D, połączone krawędzią. W ten sposób wyznaczyłem strukturę i przebieg gałęzi. Następnie zmodyfikowałem tak ustawioną krawędź i nadałem jej objętość - w Blenderze robi to modyfikator, który pozwala kontrolować grubość krawędzi. Całe gałęzie drzewa na tym etapie mają przekrój kwadratowy, a drzewo przypomina rozgałęziony kształt z klocków.

Po lewej widać zarys gałęzi zrobiony za pomocą krawędzi (wygląda jak pomarańczowa kreska). Po prawej tej krawędzi wygenerowane są gałęzie o zmiennej grubości i przekroju kwadratowym.

Gałęzie nie są kwadratowe w przekroju, dodałem zatem kolejny modyfikator do wygładzania geometrii, który je zaokrąglił. Spowodowało to znaczny wzrost liczby wierzchołków, co w ogólności staje się problemem tylko wtedy, gdy jest ich naprawdę wiele. Wkrótce pokażę, że proste z początku drzewo, które nie miało więcej jak parę kilkadziesiąt wierzchołków, nagle skomplikowało się tak, że były ich miliony. Po etapie ustalania podstawowego kształtu geometrii nadszedł czas na rzeźbienie, tak jak poprzednio, szczegółów. Tym razem przyłożyłem się bardziej, i spędziłem na rzeźbieniu wiele godzin. W kolejnych dniach zrobiłem jeszcze dodatkowe poprawki. W efekcie, z prostego jak kloc pnia, uzyskałem ładny wygląd starego pnia wiekowego drzewa, który wyglądał naprawdę nieźle.

Nowa, blokowa struktura drzewa nałożona na diagram. Nie wszystkie gałęzie są utworzone ze względu na czytelność. Możesz kliknąć na obrazek, aby zobaczyć powiększenie.

Na obrazku widzisz po lewej stronie blokową postać gałęzi. To pierwszy etap pracy. W środku jest końcowa postać w postaci siatki - zwróć uwagę na gęstość tej struktury. Po prawej uproszczony podgląd powierzchni takiej gałęzi w świetle uwydatniającym szczegóły powierzchni. Możesz kliknąć, aby zobaczyć większy rozmiar.

Rzeźbienie drzewa to proces, w którym rośnie gęstość wierzchołków, a sam model zaczyna coraz bardziej obciążać komputer. W pewnym momencie zakończyłem rzeźbienie, uzyskując kształt o który mi chodziło, ale sytuacja nadmiernego obciążenia powtórzyła się, podobnie jak z poprzednim drzewem. Komputer był w stanie jeszcze trochę reagować podczas rzeźbienia, ale już edycja poszczególnych wierzchołków drzewa była niemożliwa. Drzewo pokazane poniżej liczy sobie ponad 1.2 miliona wierzchołków.

Pełna, ukończona wersja geometrii drzewa. Możesz kliknąć, aby zobaczyć większy rozmiar.

Retopologia 20190920 Piotr Arłukowicz

Posiadając pełną geometrię drzewa można sądzić, że praca jest zakończona. Jednak do końca jest naprawdę długa droga. Drzewo o takiej rozdzielczości do niczego się prawie nie nadaje - nie można np. rozwinąć jego siatki, aby ją potem pomalować, nie daje się go edytować (poza powolnym rzeźbieniem), render trwa koszmarnie długo i wymaga ogromnej pamięci. Jednak taka właśnie jest geometria, którą chciałem mieć. Jak zatem postępować dalej? Jest to typowy przypadek, gdy wygląd obiektu wymaga większych mocy obliczeniowych, niż się posiada. Dlatego należy się uciec do pewnego oszustwa: trzeba zrobić model prosty, który łatwo obrabiać, a następnie na tym prostym modelu umieścić takie cechy, które będą udawały, że jest to model wysokorozdzielczy, ten gęsty, którego nie mogłem już dalej obrabiać. W grach komputerowych także ogranicza się złożoność modeli postaci lub pojazdów, aby komputery, nawet te słabsze, mogły cokolwiek jeszcze zdziałać. Na tym etapie wiedziałem, że chcę z drzewa gęstego, pełnego szczegółów i po prostu pięknie wyrzeźbionego zrobić coś prostego, co będzie odpowiadać kształtem i wyglądem. Najprostsze podejście w takim przypadku polega na tym, że bierze się ten niezwykle skomplikowany model, i na jego powierzchni buduje się jakby pokrywę, czy warstwę, która jest dość prosta geometrycznie, ale przylega ściśle do powierzchni. W przypadku mojego drzewa sprowadzało się to do budowania ręcznego ściany po ścianie na dość złożonych i długich odcinkach. Oczywiście, mogłem to zrobić, ale wiedziałem, że taka praca zajmie mi przynajmniej dwa dodatkowe tygodnie codziennego dłubania. Postanowiłem zatem poszukać szybszych rozwiązań. Kilka z nich znałem, ale na końcu pojawiła się niespodzianka, która mocno mnie zezłościła.

Przykład uproszczenia geometrii. Górny fragment to prawdziwa geometria, bardzo gęsta. Ten fragment posiada ponad 35 tysięcy wierzchołków. Poniżej jest fragment, który składa się "tylko" z dziesięciu tysięcy - 35 razy mniej! Mimo to nadal widać pewne szczegóły, a z takim modelem znacznie łatwiej pracować.

Planowałem wykorzystać świetny dodatek do Blendera (tzw. wtyczkę/plugin), która dodaje nowe możliwości: pozwala szybko zbudować siatkę nowego, nisko-rozdzielczego modelu na modelu oryginalnym, jednak nie działała ona jeszcze w nowszej wersji programu, której używałem. Spróbowałem więc użyć jej w starszej wersji, ale tam ze względów wydajnościowych praca szybko stała się niemożliwa na tak wielkim modelu. Każda operacja trwała coraz dłużej, aż w końcu dochodziło do utraty kontroli, gdy na każdy ruch myszą trzeba było czekać kilkanaście sekund. Spróbowałem następnie przeszukać internet w poszukiwaniu innych rozwiązań, i znalazłem dodatek o nazwie Tesselator, który wirtualnie pokrywał cały model niewielkimi cząstkami, następnie liczył ich równomierny rozkład i budował z tego nową geometrię bardzo zbliżoną kształtem do oryginału, ale uproszczoną. Za pomocą tej wtyczki udało mi się zmniejszyć liczbę ścian z 2.8 miliona do 1.7 miliona. Jednak nadal było to zbyt wiele. Poniżej jest wygląd drzewa o zmniejszonej geometrii - jak widać, nadal zachowany jest kształt i niektóre ważne szczegóły powierzchni.

Geometria uproszczona po działaniu Tesselatora. Widać pojedyncze małe ściany z których zbudowana jest cała gałąź. Ważne, że sęki i różne elementy powierzchni zostały dobrze odwzorowane. Możesz kliknąć, aby zobaczyć powiększenie.

Tego typu retopologia automatyczna ma taką zaletę, że nie trzeba tracić czasu na żmudne ręczne łączenie ścian i wyrównywanie przebiegu krawędzi, jednak nie zawsze automat dobrze sobie radzi ze skomplikowanymi kształtami. W moim przypadku, gdy pozwalałem na automatyczne tworzenie się dużej liczby małych ścian, otrzymywałem całkiem dobry kształt drzewa, jednak jego złożoność była ciągle zbyt wysoka dla późniejszych etapów pracy. Gdy ograniczałem liczbę ścian, automatyka zaczynała zawodzić, i w drzewie pojawiały się uszkodzenia, na które nie mogłem pozwolić. Poniżej widać, jak zachowała się wtyczka gdy spróbowałem obniżyć liczbę ścian do jakichś 600 tysięcy.

Uszkodzenia w gałęziach powstające w miejscach, gdzie gęstość wierzchołków nie pozwalała stworzyć ścian o określonej wielkości, bo grubość gałęzi była w danym miejscu zbyt mała. Możesz kliknąć, aby powiększyć obrazek.

Ponieważ 1.7 miliona ścian to było jeszcze zbyt wiele, znalazłem kolejną wtyczkę, która poradziła sobie świetnie z zadaniem zmniejszenia ilości geometrii, jednocześnie tworząc wszędzie czworokąty. Była to wtyczka o nazwie DynRemesh. Dopiero za jej pomocą, po całych dniach wcześniejszych prób, udało się sensownie zmniejszyć liczbę ścian, jednocześnie zachowując w miarę dokładny kształt. Uzyskanie lekkiej, niezbyt obciążającej komputer geometrii modelu było ważnym krokiem na drodze do dalszych etapów tworzenia drzewa. Ostateczna liczba ścian w modelu nadal zachowującym dobrą geometrię wynosi 141 tysięcy.

Wspomniałem wcześniej, że zezłościła mnie pewna rzecz. Okazało się, że gdy już wszystko zrobiłem, czyli wtedy, gdy drzewo było gotowe, pojawiła się modyfikacja do Blendera o nazwie QuadriFlow Remesher, wbudowana w Blendera na stałe. Jest to bardzo nowa funkcja; pojawiła się dosłownie kilka dni temu (w czasie gdy piszę te słowa). Nowe funkcje, które ta zmiana dodaje pozwalają bez wysiłku, bez problemu i całkowicie idealnie, matematycznie zretopologizować cały model do zadanej rozdzielczości. Siatka, którą się dostaje jest bliska idealnej. Gdybym miał takie narzędzie wtedy, gdy było mi najbardziej potrzebne, oszczędziłbym dwa lub trzy tygodnie pracochłonnego dłubania, a efekt końcowy byłby lepszy! Trochę pech, a trochę i pociecha, że już nie będę musiał tak bardzo dłubać...

Wypiekanie i cieniowanie 20190922 Piotr Arłukowicz

Model niskorozdzielczy, który otrzymałem po całych dniach walki i różnych prób był na tyle dobry, że pozwalał na bezproblemowe przejście do etapu tworzenia faktycznego wyglądu powierzchni, że wszystkimi detalami. Proces polega na tym, że na modelu, który ma niewiele ścian nakłada się specjalny materiał, który przeliczany jest przez komputer w taki sposób, jakby było tam bardzo wiele ścian i drobnych szczegółów. Zwykły pień drzewa posiada korę, która jest bardzo nierówna i porowata. Gdybym chciał wymodelować całe drzewo i posiadać na nim faktycznie geometrię kory, ze wszystkimi rowkami, uskokami i nierównościami, jestem pewien, że nawet komputery w NASA nie dałyby rady tego przeliczyć. Dlatego stosuje się technikę nazywaną wypalaniem lub wypiekaniem, która polega na zakodowaniu różnicy w geometrii pomiędzy modelem wysoko i nisko rozdzielczym, i zapisaniu tych różnic w teksturze, którą następnie nakłada się na model uproszczony. Tak też zrobiłem. Poniżej widać geometrię modelu nisko- i wysokorozdzielczego. Są odsunięte od siebie aby było je dobrze widać, jednak podczas wypalania odpowiednich tekstur były nałożone na siebie. Nie będę opisywał szczegółów tej techniki (zapraszam do siebie na wydział, na studia), dość powiedzieć, że na końcu uzyskałem odpowiednie tekstury, które użyte zostały do pokrycia powierzchni modelu. Dzięki temu model uproszczony wygląda prawie tak samo, jak model wysokorozdzielczy. Dla wtajemniczonych: zastosowałem normal mapy o rozdzielczości 8k zapisane jako full-float 32-bitowy, oraz proceduralny bump-mapping dla wydobycia efektu szorstkości materiału.

Proces wypiekania tekstur pozwala przenieść drobne nierówności z jednego modelu na drugi, bez zwiększania jego złożoności. Tekstura zawiera informacje o drobnych nierównościach powierzchni. (Możesz kliknąć aby powiększyć)

Na modelu namalowałem potem tekstury 3D przypominające korę i słoje drewna. Osobnej warstwy kory już nie malowałem, ponieważ zaczynał gonić mnie czas - chciałem skończyć wszystkie prace jeszcze we wrześniu.

Malowanie drewna w 3D za pomocą narzędzi w Blenderze. Ten proces wymagał przygotowania i wypalenia tekstur proceduralnych, normalmap oraz innych map (np. mapy szorstkości powierzchni), a następnie użycia ich do pokrycia powierzchni. W tym przypadku zrobiłem dwie tekstury proceduralne określające kolor, pomiędzy którymi umieściłem malowaną ręcznie maskę, aby się przenikały tam, gdzie chciałem mieć rysunek na powierzchni bardziej lub mniej skomplikowany.

Dodanie bluszczu i problemy z liśćmi 20190925 Piotr Arłukowicz

Gdy pień był już gotowy, pomalowany i wspaniały, nadeszła pora na dodanie liści. Ponieważ jestem sympatykiem bluszczy, postanowiłem, że sam pień nie będzie miał żadnych liści, które wyrastają bezpośrednio z niego, natomiast będzie obrośnięty i opleciony pnączem, które bardzo efektownie wygląda. Bluszcz pozwalał na dodanie odrobiny chaosu do sceny i bardzo ją urozmaicał. Po jego dodaniu wiedziałem, że będzie na czym oko zawiesić. Pierwsze testy były bardzo obiecujące:

Mała gałązka pnącza z dodanymi automatycznie liśćmi. W końcowym drzewie jest ponad 168 tysięcy liści. (Możesz kliknąć aby powiększyć)

Aby jednak nie skończyć jak z pierwszym drzewem, w którym liście okazały się zbyt jednorodne i pozbawione szczegółów, nazbierałem zdjęć zrobionych telefonem, na których były bluszcze. Po prostu, przemieszczając się po mieście, w miejscach gdzie rosły bluszcze cyknąłem kilka fotek. Wystarczyło następnie wgrać te fotki do komputera, znaleźć liście, które nie były niczym przykryte i nie błyszczały, a potem je wyciąć i przerobić na tekstury do grafiki 3d. Tekstury, które przygotowałem zawierały informacje o kolorze, nabłyszczeniu powierzchni oraz o jej gładkości. Poniżej widać, jakie przygotowałem liście:

Liście bluszczu wycięte i przerobione na mapy (od lewej) wypukłości, koloru, szorstkości. (Możesz kliknąć aby powiększyć)

Duże skupiska liści bluszczu daje się teraz oglądać bez poczucia, że wszystkie są jednakowe. Kliknij, aby powiększyć.

Liście były wygenerowane razem z bluszczem, który "posadziłem" za pomocą specjalnego dodatku, który generuje po prostu bluszcz płożący się na powierzchni obiektów. Można ustawić wielkość liści, grubość pnia, precyzję, ciężar, można nawet zdefiniować ile bluszczu może wspinać się do góry lub na dół, oraz jak ściśle bluszcz przylega do powierzchni. Na początku był tylko jeden rodzaj liści. Zaznaczyłem losowo 15% liści i zmieniłem im wygląd na kolejny liść zrobiony ze zdjęć, a potem znowu zaznaczałem po 15% losowych liści i zmieniałem im wygląd, tak, aby większość przestała być jednorodna. Jeżeli się przypatrzysz drzewu w postaci końcowej, zauważysz, że są tam bardzo różne liście!

Poniżej możesz obejrzeć jak wyglądał proces sadzenia bluszczu na drzewie - rysunek poniżej pokazuje małą "kępkę" bluszczu, podobną do krzaka. Gdy jednak pozwolić bluszczowi rosnąć np. na odcinku pięciu metrów, jest on w stanie pokryć swoimi splotami i girlandami całe drzewo, a zależnie od innych ustawień - wspina się do góry, lub płoży w dolnych partiach. Zmieniając parametry byłem w stanie za pomocą kilku "sadzonek" wygenerować bluszcze, które pokryły całe drzewo swoimi splotami. Dopiero to dało odpowiednią gęstość liści i pnączy, jednak - jak zwykle - nie ma nic za darmo. Takie podejście spowodowało, że bluszcze z różnych sadzonek przenikały przez siebie, i często można zobaczyć pęd przechodzący przez liść na wylot. Możesz to zobaczyć poniżej.

Przenikanie łodyg i liści generowanych przez różne nasady bluszczu. Były nie do uniknięcia, i poprawiałem je przez dwa dni, ale nadal gdzieniegdzie można je znaleźć. Kliknij, aby powiększyć.

Nie można było tego uniknąć, ponieważ podprogram, który generował takie pnącza nie sprawdzał, czy na drodze znajdują się już jakieś liście, i po prostu wstawiał je tam, gdzie mu się podobało. Musiałem większość z widocznych błędów usuwać ręcznie, co przy dużym drzewie pełnym liści odbywało się powoli (bo komputer znowu był porządnie obciążony). Udało się to jednak, i w końcu mogłem się cieszyć w miarę ukończonym drzewem, pełnym bluszczu, i różnych pędów, oraz liści.

Podgląd renderowany drzewa w końcowej postaci. Kliknij, aby powiększyć.

Końcowe prace związane z drzewem 20190928 Piotr Arłukowicz

Drzewo było gotowe, pozostało zatem połączyć wszystkie wątki ze sobą, i skleić je z diagramem, który zawiera dane o rodzinie. Niby nic trudnego, ale życie płata figle, i tutaj też spotkała mnie niespodzianka. Okazało się, że diagram, który miałem przygotowany i który miał nakładać się na drzewo idealnie, nagle nie pasuje. Drzewo jest mniejsze! Trochę tym zaskoczony sprawdziłem co się stało, i wyszło na to, że ustawiłem trochę inną rozdzielczość podczas renderowania. Nie chcąc powtarzać tego procesu, postanowiłem przeskalować diagram do rozmiaru drzewa, licząc na to, że jakość nie będzie aż taka zła. Wypróbowałem kilka algorytmów skalowania, wybrałem najlepszy, który jeszcze pozwalał przeczytać nazwiska i imiona osób z drzewa. Można się jednak przypatrzeć, że czcionki nie są ostre, i jest efekt tej ostatniej zmiany. Możliwe, że gdybym jeszcze raz wygenerował cały diagram, od razu w odpowiedniej skali, to udałoby się nałożyć go na drzewo, i ostrość byłaby lepsza. Wymaga to jednak wielu prób i skomplikowanego przetwarzania wielu 'stron' wydrukowanych jako XPS. Czuję, że teraz muszę chwilę odpocząć - pracowałem nad tym projektem przez ponad miesiąc, i to nie tak, jakbym chodził do pracy i działał tam tylko przez osiem godzin. Pracowałem w domu, zatem wstawałem rano, i od razu po śniadaniu zasiadałem do roboty, potem obiad, i znowu dłubanie, praca, rzeźbienie lub malowanie tekstur, lub poprawianie liści, generalnie aż do późnych godzin wieczornych. W nocy śniło mi się drzewo i przesuwanie wierzchołków. Wrzesień, który chciałem poświęcić na przygotowanie się do roku akademickiego spędziłem nad projektem dla rodziny. Nie żałuję, bo wierzę, że zrobiłem coś cennego dla nas, ale teraz, gdy rok akademicki wystartował, muszę poświęcić czas na swoje obowiązki i nadrobić zaległe przygotowania. Dlatego na razie nie chciałbym przy drzewie niczego zmieniać - niech będzie takie jakie jest - bliskie doskonałości, ale z drobnymi błędami, których - gdybym mógł siedzieć jeszcze przez miesiąc - zapewne by nie było.

Słowa końcowe i podziękowania 20190930 Piotr Arłukowicz

Pozostaje mi podziękować wszystkim, którzy przyczynili się do powstania tego dzieła - mojemu Tacie, który dał przykład cierpliwości podczas czekania aż skończę, rodzinie w postaci różnych osób, które przesłały zdjęcia i informacje na temat urodzin, zgonów i innych szczegółów z życia swoich krewnych. Chciałbym także pogrozić palcem pewnej Marii, która obiecała udostępnić dane swoich krewnych, dzięki czemu mielibyśmy w drzewie więcej osób i dokładniejsze dane o ważnych datach, szczególnie na Litwie. Niestety, nie udało nam się niczego uzyskać, a szkoda, bo dane i wiedza, którą Maria mogła się podzielić znacznie wzbogaciłaby nasze drzewo.