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:
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.) :
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.
Tutaj dla porównania screen ze Stalkera – wygląda na to że normalne były tu zmodyfikowane:
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.
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.
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).
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.
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.
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.
Po zmodyfikowaniu normalnych - tak żeby były skierowane „na zewnątrz” bryły – trudniej jest rozpoznać że to tylko kilka płaskich poligonów:
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:
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..
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”.
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).
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.
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
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.
Po zmodyfikowaniu normalnych - tak żeby były skierowane „na zewnątrz” bryły – trudniej jest rozpoznać że to tylko kilka płaskich poligonów:
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:
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..
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”.