FANDOM



W artykule: Wstęp do eksportu modeli na samej górze znajdziesz link do pobrania kompletnego pakietu exportera do 3DS MAX oraz opis instalacji.

Podstawowe elementy sceny przygotowanej do exportuEdytuj

WstępEdytuj

Scena składa się z elementów geometrii widocznej, walkmesha, świateł typu AuraBase, drzwi, emiterów.

Pel 1.jpg
Uwaga. Kliknij na obrazku, żeby powiększyć.

Aura BaseEdytuj

Eksportowane są tylko elementy zalinkowane do specjalnego obiektu AuraBase oraz niektóre elementy walkmesha (komponenty znajdujące się na liście modyfikatora Walkmesh Mod). Obiekt AuraBase znajduje się w kategorii helpers.

Pel 2.jpg

Najważniejszym parametrem w AuraBase jest animacja 24 godzinna (Anim24h), która powinna się znaleźć na liście Animations z ustalonym zakresem klatek animacji Start: 0 End: 24. Pole Detail map zawiera nazwę tekstury mapy detali dla całej lokacji.

Dummy lokacjiEdytuj

Scena zawiera również w swojej hierarchii dodatkowy obiekt typu Dummy, do którego podlinkowane są animowane elementy lokacji (np. światła AuroraLight z animowanymi parametrami dla zmieniających się pór dnia). Obiekt ten musi być specjalnie nazwany. Jego nazwa jest identyczna z nazwą AuraBase ale rozszerzona o dodatkową literkę „a” na końcu.

Obiekt „north”Edytuj

Specjalny obiekt typu Dummy o nazwie „north” podlinkowany do Dummy lokacji służy do wyznaczenia kierunku północnego potrzebnego do ukierunkowania mini-mapy w grze. Oś Y w lokalnym układzie współrzędnych obiektu „north” wskazuje północ. Ponadto obiekt typu placeable skybox jest automatycznie obracany w kierunku osi Y obiektu „north”.

Geometria widocznaEdytuj

Może to być każdy obiekt Editable Mesh. Modyfikator AuraPoly zawiera wszelkie dodatkowe parametry, takie jak ustawienia lightmap. Parametry dla lightmap zostały opisane w innym dokumencie. Pozostałe podstawowe parametry dla obiektów geometrii stałej w lokacji:
Pel 3.jpg

DrzwiEdytuj

Drzwiami może zostać każdy obiekt zbliżony kształtem do boxa. Ważną czynnością jest odpowiednie ustawienie osi obrotu, a więc punktu pivot i jego orientacja w lokalnym układzie współrzędnych. Najprostszą zasadą jest takie ustawienie osi punktu pivot aby współrzędna X była skierowana, jak na poniższym rysunku, na zewnątrz ale równolegle do płaszczyzny drzwi. Takie ustawienie osi jest potrzebne do prawidłowej orientacji względem animacji otwierania drzwi, która jest zapisana w pliku zewnętrznym door_x01.mdl. Jest to plik uniwersalny używany przez większość drzwi. Obiekt który ma być drzwiami musi mieć modyfikator Door. Podczas nadawania modyfikatora Door generowany jest unikalny numer ID. Należy wskazać plik z animacją (door_x01.mdl) oraz Template (.utd) potrzebny do edytora D’jini. Potrzebny Template można uzyskać poprzez skopiowanie któregoś z już istniejących i nadanie mu nowej nazwy.

Pel 4.jpg

Jeżeli w scenie znajdują się drzwi to podczas eksportu zostanie utworzony folder nazwalokacji_doors zawierający odpowiednie pliki.

Drzwi w systemie BlendboxEdytuj

Każde drzwi mogą wymuszać znikanie określonego obiektu (fragmentu geometrii wokół drzwi) oraz niwelowanie kolizji dla kamery w celu ułatwienia przechodzenia pomiędzy pomieszczeniami. Do tego celu potrzebny jest dodatkowy obiekt Box o specjalnej nazwie „Blendbox”. Określa on swoją bryłą zakres powyższych zmian. Musi on być zalinkowany do drzwi. Jego działanie objawia się znikaniem (po otwarciu drzwi) obiektów, z którymi ma część wspólną (przecina się). Obiekt, który ma być poddany działaniu Blendboxa, musi mieć to zaznaczone w swoim modyfikatorze AuraPoly. Również trójkąty walkwesha kolizyjnego, które przecinają się z Blendboxem zmienią swoje ID (21) na niekolizyjne po otwarciu drzwi.

Pel 5.jpg

Światła dynamiczneEdytuj

Są to światła służące do oświetlania geometrii, która nie ma przypisanych lightmap, a więc postaci, obiektów Placeable, lokacji typu generic bez lightmap oraz rozświetlania w sposób dynamiczny niektórych obiektów z lightmapą. Mogą one być eksportowane wraz z lokacją. Najczęściej są to światła animowane w cyklu 24h. Animowane parametry to Multiplier oraz Color. Uwaga: wszystkie eksportowane parametry tych świateł ustawiane są na rolecie AuroraLight Parameters.

Pel 6.jpg

MateriałyEdytuj

Wszystkie materiały przypisuje się w edytorze materiałów.

1) Materiały standardowe

Podstawowym typem jest materiał Standard z mapą Diffuse. Przypisana tekstura (w formacie .tga) może mieć kanał przeźroczystości alpha i może (ale nie musi) być przypisana również jako Opacity map w materiale Standard. W przypadku zastosowania materiału Standard z mapą przeźroczystości, na sposób jej wyświetlania ma wpływ ustawienie opcji Render list w modyfikatorze AuraPoly (Opaque, Transparent). Powszechnie stosowany jest multumateriał typu Multi/Sub-Object. Uwaga: z materiału Standard eksportowany jest kolor Diffuse, co powoduje odpowiednie zabarwienie. Aby uzyskać neutralny odcień tekstury należy zmienić kolor Diffuse na biały.

Pel 7.jpg

2) Materiały typu Aurora Material i TestMat

Materiały Aurora Material i TestMat dają możliwośc przypisywania shaderów zapisanych w zewnętrznych plikach tekstowych. Shadery to pliki .mfx i znajdują się one w D:\Witcher\Stable\scripts. Aurora Material i TestMat dają takie same możliwości przypisania shakerów. Różnią się sposobem zapisu i edycji parametrów materiału. Aurora Material korzysta z zewnętrznego pliku tekstowego .mat, w którym są zapisane odpowiednie parametry konfiguracyjne. Znajdują się one w D:\Witcher\Data\Materials\Materials. Daje to możliwość późniejszej edycji materiału bez potrzeby ponownego eksportu sceny.

Pel 8.jpg

Należy zwrócić uwagę na ilość obiektów mających włączone odbicia. Ta opcja jest włączana dla materiału, a nie dla obiektu, więc należy stosować ją bardzo ostrożnie. Rekomendowane jest by tylko jeden obiekt w scenie miał odbicia. Musi to być obiekt całkowicie płaski (tworzyć jedną płaszczyznę). Ściślej mówiąc w scenie może być tylko jedna płaszczyzna odbicia, można ją uzyskać również z kilku obiektów ale muszą one leżeć na jednej płaszczyźnie (w przeciwnym wypadku odbicia będą obliczane tyle razy, ile jest płaszczyzn odbicia, co spowoduje ogromne straty wydajności). TestMat nie korzysta z zewnętrznego pliku konfiguracyjnego. Wszystkie parametry materiału dla wybranego shadera można ustawiać bezpośrednio w edytorze materiałów i są one zapisywane w pliku .max razem ze sceną. Shadery to pliki .mfx i znajdują się one w D:\Witcher\Stable\scripts.

Pel 9.jpg

Texture PaintEdytuj

Texture Paint służy do malowania wierzchołków siatki teksturami. Obiekt przeznaczony do malowania musi być Editable Mesh i mieć przypisany modyfikator Texture Paint. Następnie trzeba mu nadać materiał Multi/Sub Object z przypisanymi teksturami. Tekstury te mają na kanale alpha zapisaną maskę specular i można je rozpoznać po nazwie prefix: trn_ Aby uwidocznić w podglądzie 3dsMax materiał Texture Paint należy w jednym z pod-materiałów materiału Multi/Sub Object włączyć plugin materiał o nazwie Texture Paint Shader. Operacja nadania materiału Multi/Sub Object powoduje, że w modyfikatorze Texture Paint pojawia się lista tekstur/materiałów, którymi można zacząć malować. Kolejność materiałów w materiale Multi/Sub Object odpowiada kolejności na liście modyfikatora Texture Paint. Uwaga: nie należy zmieniać liczby wierzchołków obiektu z modyfikatorem Texture Paint, gdyż zniszczy to informacje o malowaniu na nim. Aby zmodyfikować taki obiekt należy dokonać operacji collapse Texture Painta. Wówczas informacje o malowaniu zostaną utrwalone na poziomie Editable Mesh. W takim wypadku będzie potrzebna korekta(malowanie) jedynie tego obszaru, w którym zmieniono liczbę wierzchołków. Możliwa jest modyfikacja tego obiektu również za pomocą Editable Poly, jednak wówczas nie może być wyświetlany Texture Paint Shader – można chwilowo np. zmienić materiał na inny.

Pel 10.jpg

TrawyEdytuj

Z modyfikatorem Texture Paint powiązana jest funkcja wysiewania traw. Idea wysiewu traw polega na przypisywaniu konkretnych gatunków traw do materiałów terenu pomalowanego za pomocą Texture Paint. Dostępne sety traw można znaleźć w modyfikatorze Grass przypisanym do Aura Base sceny. Modyfikator ten umożliwia przypisanie setów traw do materiałów Texture Paint. Odbywa się to poprzez podwójne klikniecie na liście Grass Sets wybranego setu traw. Przyciski poniżej tej listy odpowiadają przyciskom w modyfikatorze Texture Paint. W każdym zastosowanym Texture Paint w tej scenie będzie przypisana taka sama sekwencja setów traw.

Pel 11.jpg

Rozkład wysiewu traw jest zapisywany na specjalnej teksturze .vgm Jest ona generowana automatycznie podczas rozkładania UVW dla traw. Aby dokonać rozkładu należy przejść do modyfikatora Walkmesh Mod na obiekcie AuraBase sceny. Dla danego obiektu znajdującego się na liście komponentów zaznaczyć pole Has grass. Ta operacja powoduje dodanie modyfikatora BakeWeightMap do AuraBase sceny i umieszczenie danego obiektu na liście Target Objects, a więc na tym obiekcie będzie wysiewana trawa. Modyfikator BakeWeightMap zawiera również listę Source Obiects, do której przypisujemy obiekty z pomalowane Texture Paintem z przypisanymi slotami traw. Na liście Source Objects można umieścić ten sam obiekt co na liście Target Objects, co spowoduje wysianie trawy na nim samym. Z powyższego wynika, że możemy wysiać trawę na dwa sposoby:

  • wysiew na dowolną nierenderowalną powierzchnię Walkmesha ‐ zostaje rzutowany obraz rozkładu trawy z obiektu malowanego Texture Paintem (np. terenu),
  • wysiew bezpośrednio na geometrię lokacji (np. teren) ‐ zostaje rzutowany obraz rozkładu trawy z tego samego obiektu (malowanego Texture Paintem).

Uwaga 1: nie wolno edytować listy Target Objects ręcznie. Odpowiedni obiekt zostanie tam umieszczony automatycznie za pośrednictwem Walkmesh Mod.
Uwaga 2: z powodu znanego błędu w kolejności przypisywania obiektów do listy Source Objects , może się zdarzyć, że nie będzie można przypisać do niej obiektu, który wcześniej znalazł się na liście Target Objects. W takim przypadku rekomendujemy obejście problemu poprzez:

  • chwilowe odznaczenie dla tego obiektu pola Has grass w Walkmesh Mod (co spowoduje zdjęcie go z listy Target Objects),
  • wprowadzanie obiektu na listę Source Objects (teraz już możliwe),
  • ponowne zaznaczenie pola Has grass w Walkmesh Mod.

Jeżeli odznaczenie pola Has grass w Walkmesh Mod powoduje usunięcie modyfikatora BakeWeightMap to, aby temu zapobiec, należy wcześniej tymczasowo dodać jakiś inny obiekt z włączonym polem Has grass.

Pel 12.jpg

Po umieszczeniu wszystkich obiektów na odpowiednich listach należy uruchomić Render, co spowoduje przypisanie modyfikatora BWM UVW Map do wszystkich obiektów z Has grass. Zawiera on dane o rozkładzie UVW na kanale 6 dla traw. Tekstura zostanie wyrenderowana w rozdzielczości regulowanej parametrem Grid Size pod nazwą wskazaną w polu Output File.

WalkmeshEdytuj

Walkmesh składa się z dwóch rodzajów geometrii: kolizyjnej i nawigacyjnej.

Pel 13.jpg

Geometria kolizyjnaEdytuj

Każdy obiekt może spełniać rolę Walkmesha kolizyjnego. Jednak z powodów optymalizacyjnych często stosuje się specjalną geometrię uproszczoną. Aby dany obiekt stał się walkmeshem należy go umieścić w modyfikatorze Walkmesh Mod, który powinien być dodany do AuraBase sceny. Walkmesh Mod zawiera listę Components, do której są dodawane wszystkie obiekty mające być walkmeshem. Mogą się więc na niej znaleźć zarówno obiekty kolizyjne specjalne (niewidoczne) jak i elementy lokacji (widoczne). Specjalna geometria kolizyjna nie powinna być zalinkowana do AuraBase sceny.

Pel 14.jpg

Ważnym parametrem dla geometrii kolizyjnej jest odpowiednie ID materiału dla poszczególnych ścianek tego obiektu. ID określa bowiem rodzaj kolizji oraz dźwięków z nią związanych w tym dźwięków chodzenia po różnych rodzajach podłoża. Jeżeli stosujemy parametr IDs from texture właściwości poszczególnych ID zależą od nazwy katalogu z daną teksturą. Stosujemy następującą strukturę katalogów:

Pel 15.jpg

W przypadku nie używania parametru IDs from texture, zostaną użyte właściwości ID zapisane w pliku zewnętrznym D:\Witcher\Data\2DA\engine\surfacemat.2da
Uwaga: numery ID w 3dsMax są liczone od 0. Więc do danej pozycji z pliku surfacemat.2da należy dodać +1 dla ID w 3dsMax. Np. aby uzyskać właściwości ID 20 CameraCollision należy w 3dsMax użyć numeru ID = 21
Można używać materiału pomocniczego dla lepszej orientacji w 3dsMax ale nie jest on eksportowany.
Fragment pliku surfacemat.2da:

Pel 16.jpg

Najważniejsze właściwości ID:

  • WalkCheck: Do tych ścianek postać będzie dociągana (po tych powierzchniach będzie się poruszać)
  • Walk : nie używane
  • LightCheck: Te ścianki będą używane przy oświetlaniu obiektów od lightmapy walkmesha
  • LineOfSight: Te ścianki są przeszkodą we wzajemnym widzeniu się postaci
  • CameraColl: Z tymi ściankami kamera ma kolizje
  • PhysicsColl: Z tymi ściankami jest kolizja dla pozostałej fizyki (poza kamerą)

Geometria nawigacyjnaEdytuj

Określa zakres chodzenia postaci oraz służy do systemu wyszukiwania ścieżek. Nie jest ona używana bezpośrednio do chodzenia, a jedynie wyznacza ramy poruszania się postaci po geometrii kolizyjnej. W jej budowie najważniejszy jest zasięg w osi X i Y (2D). Oznacza to, że nie jest potrzebne dokładne dopasowanie do powierzchni kolizyjnej na wysokość (tolerancja w osi Z wynosi +/‐ 0,5 metra). Natomiast nie może ona wyznaczać obszaru do chodzenia poza zasięgiem geometrii kolizyjnej (postać nie miałaby po czym chodzić). Nie może też zawierać trójkątów jednych ponad drugimi oraz zbyt stromo wznoszącej się powierzchni. Minimalna szerokość przejść ok. 1,5 m. Aby utworzyć geometrię nawigacyjną należy ją zalinkować do AuraBase sceny oraz przypisać modyfikator RoomPaint. Modyfikator ten zidentyfikuje obiekt jako geometrię nawigacyjną. Podstawową funkcją modyfikatora RoomPaint jest wyznaczenie pokoi w celu optymalnej obsługi wyszukiwania ścieżek. Aby wyświetlić pokoje należy w materiale tego obiektu włączyć RoomPaintShader (na podobnej zasadzie, jak w przypadku materiału Texture Painta). Pokoje można zacząć malować na tych ściankach obiektu, których ID jest w pliku surfacemat.2da określona jako do chodzenia. Użycie modyfikatora RoomPaint powoduje nadanie obiektowi specjalnych ID, których nie należy zmieniać ręcznie. Pokoje nie mogą się powtarzać – każdy ma unikalne ID. Do malowania używamy w zasadzie tylko trzech funkcji RoomPainta: Paint, FloodFill, Find Free. Jeżeli zajdzie potrzeba zmiany geometrii pomalowanego obiektu należy: skasować modyfikator RoomPaint, wyłączyć RoomPaintShader (lub zmienić chwilowo materiał na standardowy), dokonać żądanej edycji siatki, a następnie przywrócić modyfikator i materiał.

Pel 17.jpg

Zasady stosowania podziału na pokojeEdytuj

Odpowiedni podział ma kluczowy wpływ na wydajność i jakość wyszukiwania ścieżek. Podstawowe własności podziału:

  • Dwa pokoje może łączyć TYLKO JEDNA krawędź.



Pel 18a.jpg Pel 18b.jpg

  • Pokój jest obszarem spójnym. Nie musi być wypukły, może też zawierać „dziury”.

Warto próbować tworzyć pokoje wypukłe. Nie ma takiego ograniczenia w silniku, ale warto się tego w większości przypadków trzymać. Jednak bez przesady. Malutkie wgłębienia psujące wypukłość pokoju nie są problemem.

  • Ciasne przejścia należy zaznaczać małymi pokojami



Pel 19.jpg

  • Bardzo ważne jest, by z jednego pokoju istniało przejście do następnego, z którym jest połączony.
  • Nie ma ograniczeń co do wielkości, warto jednak trzymać pewien standard (charakterystyczny dla danego obszaru). Otwarte przestrzenie mogą być wypełnione większymi pokojami, zamknięte pomieszczenia powinny być wypełnione mniejszymi.

Ogólnie – większy pokój to szybkie wyszukiwanie RGS i większa prostota mapy. Mniejszy pokój – dużo szybsze sprawdzenie, że ścieżka „nie istnieje”.

  • Trzeba mniej więcej wiedzieć, jakie będzie rozmieszczenie placeable na mapie. Unikać podziału na pokoje, w których na krawędziach będą umieszczone placeable. Przy natłoku placeable’i lepiej zastosować większe pokoje (np. odpowiadające pokojom rzeczywistym).
  • Warto tereny znajdujące się na różnych wysokościach oznaczać jako różne pokoje. O tym będzie jeszcze dalej.
  • Uważać z tworzeniem małych pokoików. Upewnijmy się, że wiedźmin znajdzie przez nie drogę.

TRIKI:Edytuj

  • 1)

Pochyłości. Jeżeli chcemy by wiedźmin szukał przejść w rodzaju schodów – i brał pod uwagę pochyłości już w fazie przeszukiwania po pokojach – ustawmy krawędź pokoju dokładnie na krawędzi pochyłości.

  • 2)

Wydajność. Na najniższym poziomie wyszukiwania ścieżek, badając przejścia pomiędzy pokojami, pod uwagę bierzemy punkty leżące dokładnie na środku łączących je krawędzi. Możemy otrzymać olbrzymi wzrost wydajności systemu wyszukiwania ścieżek, jeżeli będziemy stosowali właściwą metodologię podziału na pokoje. W miarę możliwości, starajmy się zapewniać, by dla każdego pokoju, istniało bezpośrednie przejście pomiędzy wszystkimi środkami jego krawędzi z innymi pokojami (stąd dobrze tworzyć pokoje wypukłe). Bezpośrednie przejście to takie, które nie wymaga włączania systemu wyszukiwania ścieżek najniższego poziomu, co oznacza, że postać może zostać przeprowadzona bezkolizyjnie w linii prostej pomiędzy danymi punktami.

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Więcej z Fandomu

Losowa wiki