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

5 comments:

  1. Łał, sprytne, i efekt jest rzeczywiście spory.

    ReplyDelete
  2. Kurde nie wiedziałem o tym. Ogromne dzięki!
    Andrzej

    ReplyDelete
  3. bardzo pomocne.

    ReplyDelete
  4. bardzo przydatny trik. Można go jeszcze używać dla modeli skarp i tym podobnych, żeby się u podnóża zlewały z terenem :)

    ReplyDelete