Showing posts with label tutorial. Show all posts
Showing posts with label tutorial. Show all posts

Sunday, 21 February 2010

Vertex Normal tutorial

Użycie Normalnych przy tworzeniu roślinności.

Modyfikowanie vertex normals jest chyba niezbyt często spotykaną techniką – sam dowiedziałem się o tym sposobie przypadkiem z jakiejś wzmianki w sieci.
Jest to sposób który nic – pod względem szybkościowo-obliczeniowym – nie kosztuje, a może sprawić że modele roślinności będą wyglądały 2x lepiej przy dosyć małym nakładzie pracy.
Należy tylko upewnić się że eksportery/silnik gry nie resetują vertex normals.
Dodatkowym problemem jest - w przypadku 3ds max – dość zbugowany i przeraźliwie prymitywny modyfikator Edit Normals.

Vertex normals – to te niebieskie linie:

Kula z widocznymi vertex normals

Normalne pokazują kierunek w jakim powierzchnia obiektu jest skierowana w danym vertexie. Są niezależne od tego jak ukształtowane są poligony. Na przykład skierujmy wszystkie normalne w jednym kierunku – obiekt będzie jednolicie (płasko) oświetlony (zmodyfikowane normalne w 3dmaxie zmieniają się z niebieskiego na zielony btw.) :

Kula z normalnymi skierowanymi w jednym kierunku

Edytując vertex normals można „uniezależnić” oświetlenie obiektu od jego kształtu:


Po co to wszystko? Większość roślinności (pomijając technologie używające billboardów jak np. Speedtree) jest tworzona za pomocą płaskich poligonów – które np. w przypadku trawy – składa się w „krzyż” - żeby obiekt był widoczny z każdej strony. Tekstura to zwykle alfa 1-bitowa.
Przykładowy obiekt:


Przykładowy obiekt trawy

Jak widać poszczególne powierzchnie są oświetlone w różny sposób.
Kolor trawy i podłoża jest teoretycznie ten sam, mimo to oświetlenie sprawia że łatwo zobaczyć poligony.
Dodatkowo światło umieszczone nisko nad ziemią inaczej oświetla grunt i trawę.
Tutaj screen z Arma2 – jak widać trawa nie wygląda najlepiej, nie ma wyedytowanych normalnych.

Arma 2

Tutaj dla porównania screen ze Stalkera – wygląda na to że normalne były tu zmodyfikowane:

Stalker: Shadow of Chernobyl

Żeby osiągnąć podobny efekt ustawię normalne vertexów stykających się z podłożem zgodnie z normalnymi podłoża (do góry), górne normalne ustawię lekko „chaotycznie” i na zewnątrz - żeby oświetlenie czubków trawy było zróżnicowane.

Normalne ustawione domyślnie

Normalne obrócone do góry


Teraz nie da się rozpoznać w którym miejscu trawa styka się z podłożem – dlatego że obiekt trawy na dole jest TAK SAMO oświetlony jak poligony ziemi (normalne są skierowane do góry).

Niewidoczne przejście między trawą a gruntem

Zwróćcie uwagę na to jak potraktowałem vertexy górne – normalne są odchylone na zewnątrz (po to żeby obiekt oświetlony z boku rzeczywiście przyjmował boczne światło). Dodatkowo normalne są wychylone do tyłu – w ten sposób chwytają światło „z tyłu” poligona – to pozwala na coś w rodzaju efektu „translucency”- światła przenikającego przez cienkie powierzchnie.

Sposób obrócenia normalnych

Tutaj przykład z większą ilością trawy:

I porównanie jak to wygląda ze światłem – to jest dokładnie ta sama scena/te same obiekty – jedyna różnica to właśnie zmodyfikowane normalne trawy.


Trawa ze zmodyfikowanymi normalnymi

Trawa bez zmodyfikowanych normalnych


Różnica jest znaczna – a ta technika pomaga także przy drzewach:

W przypadku gałęzi/ krzaków mamy najczęściej do czynienia z bryłą bardzo podobną do trawy z poprzedniego przykładu.


"Gałąź" z domyślnymi ustawieniami normalnych

Po zmodyfikowaniu normalnych - tak żeby były skierowane „na zewnątrz” bryły – trudniej jest rozpoznać że to tylko kilka płaskich poligonów:

"Gałąź" ze zmodyfikowanymi normalnymi


Normalne w środku bryły są skierowane do góry – żeby wnętrze gałęzi było ciemniejsze użyłem vertex color. Oto porównanie pierwszej wersji i tego samego obiektu po zmodyfikowaniu normalnych i vc – łatwo można zobaczyć z której strony jest światło, obiekt jest lepiej cieniowany:

"Gałąź" z domyślnymi ustawieniami normalnych

"Gałąź" ze zmodyfikowanymi normalnymi

To jest drzewo które składa się z kilku gałęzi pokazanych wyżej. Polycount to 236tri. Jak widać niezmodyfikowana wersja wygląda nie najlepiej w porównaniu do zmodyfikowanej. Pozycja światła jest ta sama na obu obrazkach – z prawej – zwróćcie uwagę na to że niezmodyfikowana wersja wydaje się być oświetlona z lewej..


Drzewo bez modyfikacji normalnych

Drzewo ze zmodyfikowanymi normalnymi

Ważne jest to żeby generalny kierunek normalnych był ustawiony bardziej „na zewnątrz” drzewa – w ten sposób nie tylko poszczególne gałęzie, ale też cała korona wygląda bardziej „kuliście”.