Efekty TurfFX: krótki poradnik

W dzisiejszym artykule pragnę krótko opowiedzieć o tym, jak konfigurować efekty TurfFX w TRS19 i nowszych na naszych trasach. Czym właściwie są efekty? Najlepiej wyjaśnić to na przykładzie. W starszych wersjach Trainza jedyne, co mogliśmy robić z gruntem, to modelować jego kształt oraz nanosić zwykłe tekstury terenu. O ile z daleka taki np. pomalowany na zielono grunt sprawiał jeszcze wrażenie trawiastego terenu, to z bliska już niekoniecznie. Dlatego musieliśmy go dekorować obiektami roślin i kłaść krzywe spline z krzewami, trawami itd.

Znasz już zasady TurfFX i szukasz tylko inspiracji?
Zielone tabelki na końcu artykułu wskażą Ci nasze inspiracje, namiary i numery kuid!

Warstwy efektów prezentują zupełnie inne podejście do tematu. Malujemy je podobnie, jak zwykłe tekstury, możemy też zmieniać różne ich parametry “pod siebie”. Istnieje też kilka typów efektów wykorzystywanych do różnych celów:

  • TurfFX – malowanie trawy
  • Clutter – malowanie efektów takich, jak kwiaty, kamienie, gałęzie
  • Water – nowe podejście do zbiorników wodnych. Ten efekt pojawił się w TRS19 SP4, ale twórcy nie zalecają w tej wersji jeszcze korzystania z niego ze względu na dość eksperymentalny charakter.
  • Tint – dostępny w Trainz Plus, pojawi się w przyszłej wersji Trainza z myślą o Terenie HD.

My skupimy się w tym artykule właśnie na TurfFX. Dlaczego warto stosować TurfFX? Jest kilka powodów:

  • technologia wykorzystywana w wielu grach, trawa renderowana bezpośrednio przez GPU
  • sezonowość – trawy potrafią zmieniać się w zależności od pory roku, falowanie na wietrze
  • obsługa Level of Detail: trawa daleko od kamery ma mniej szczegółów, blisko kamery – więcej,
  • możliwość edycji np. kształu ździbeł, ich wysokości itd.
  • po odpowiednim skonfigurowaniu tworzenie roślinności na mapie przebiega po prostu szybciej
  • efekty będą coraz mocniej wykorzystywane w kolejnych wersjach Trainza, dlatego tym bardziej warto je poznać.

A tak to wygląda w praktyce:

Uwaga techniczna: w artykule celowo posługuję się angielską wersją Trainza. Wynika to z tego, że polskie tłumaczenie zostało zrobione maszynowo i w oknie edycji TurfFX nie nadaje się ono do użytku. Stworzyłem niedawno bardziej sensowne tłumaczenie poprzez platformę Crowdin, ale potrzeba trochę czasu, zanim pojawi się ono w grze.

Gdzie znaleźć efekty TurfFX?

W klasycznym Geodecie (TRS19 / TRS22):

  1. w lewym górnym rogu wchodzimy do Menu edycji
  2. wybieramy Edit Effect Layers / Edytuj warstwy efektów

W Geodecie 2.0 (Trainz Plus / przyszłe wersje Trainz) wszystkie efekty wyświetlają się bezpośrednio w okienku informacyjnym “Layers”, tak więc jest do nich bardzo łatwy dostęp:

Tworzenie efektu TurfFX

Zobaczmy, jak wygląda menu efektów:

  1. Ikonka PLUS – tu klikamy, kiedy chcemy dodać nowy efekt
  2. Ta wajcha przełącza nas na edytor konfiguracji efektu

Gdy tworzymy nowy efekt, musimy wpisać jego nazwę oraz wybrać rodzaj – TurfFX. I możemy rozpocząć zabawę!

UWAGA: ostrzeżenie na dole jest ważne. Gra może wyświetlać efekty TurfFX w maksymalnie jednym oknie naraz. Jeśli zatem otworzymy edytor efektów, wszystkie efekty naniesione na planszę na chwilę znikną, bo gra będzie zajęta wyświetlaniem podglądu tego, co właśnie edytujemy. Bez obaw. Gdy zamkniesz edytor, efekty wrócą.

Konfiguracja TurfFX: budżet efektów

Gdy wejdziemy w edytor konfiguracji TurfFX, naszym oczom ukaże się dość rozbudowany formularz. Ilość opcji może na początku przytłaczać, ale bez obaw. To wszystko to rozmaite ustawienia pozwalające nam zrobić taki efekt trawy, jaki chcemy. Zaraz sobie wszystko omówimy po kolei.

Poniżej zobaczymy wygląd tego okna w TRS22. Okno w standardowej, “pudełkowej” wersji TRS19 pozbawione jest czterech ostatnich opcji.

Do rozpoczęcia zabawy efektami musimy poznać bardzo ważne pojęcie, jakim jest budżet efektów. W komunikatach wersji angielskiej używane jest dość techniczne pojęcie “data binding limit”, natomiast myślę, że taka polska nazwa bardzo dobrze oddaje użytkowe znaczenie. Z budżetem efektów wiąże się jedna zła i dwie dobre wiadomości:

  • zła: liczba efektów, które możemy mieć na trasie, jest ograniczona
  • dobra 1: budżet jest stały, nie zależy ani od wielkości trasy, ani od tego ile pomalujemy.
  • dobra 2: to my decydujemy, jak wydać ten budżet i czy wykorzystać go w całości.

Każdy efekt to dodatkowa porcja danych, które Trainz musi zapamiętać dla każdego segmentu naszej trasy oraz które musi wysłać do karty graficznej przy renderowaniu. Ten budżet ma zapewnić, że po prostu nie przeciążymy Trainza i że wynikowy rozmiar trasy nie urośnie zbyt bardzo. Natomiast sama liczba efektów skonfigurowanych w ramach budżetu – czy zrobimy jeden czy dziesięć – ma minimalny wpływ na wydajność renderowania. Dla karty graficznej nie ma to specjalnie znaczenia, co w jego ramach wyświetla.

Na to, ile budżetu zużywa dany efekt, mają wpływ cztery pola przy opcjach “Density Binding” oraz “Height Scale Binding”. Górna opcja określa, jak precyzyjnie chcemy kontrolować wielkość pędzla (gęstość malowania), dolna – jak precyzyjnie chcemy kontrolować wysokość malowanych traw.

W polu po prawej wybieramy rozmiar siatki. Im jest on mniejszy, tym bardziej dokładnie możemy malować efektem np. przy torach lub drogach. Siatka o rozmiarach 10×10 metrów będzie robić placki właśnie takiej wielkości, zatem będzie się ona nadawać bardziej do malowania odległych łąk czy trawy w leśnych ostępach. Z kolei aby precyzyjnie wyrównać trawę np. przy drogach lub torach, musimy użyć siatki o rozmiarze 2,5 albo nawet 1,25 metra.

Do czego służy zaś pole lewe? Dzięki niemu kontrolujemy liczbę “poziomów” malowania. Jeśli mamy dwa poziomy, np. 0 – 1, to albo trawy nie ma, albo jest. Jeśli mamy cztery poziomy, to 0 i 3 oznacza odpowiednio brak trawy i pełną gęstość/maksymalną wysokość, a poziomy 1 i 2 – wartości pośrednie. Im więcej poziomów dopuszcza dane ustawienie, tym więcej bitów informacji gra musi zapamiętać dla każdego punktu siatki. Oto tabelka, która przedstawia wszystkie możliwości:

OpcjaLiczba bitówLiczba poziomów
Zero0Stała wartość dla całego segmentu
Int110 – 1
Int220 – 3
Int330 – 7
Int440 – 15
Float1616około 65 000
Float3232miliardy i więcej

Ogólnie jeśli chcesz mieć więcej efektów, stosuj raczej ustawienia z małą liczbą poziomów, zwłaszcza przy bardzo gęstej siatce typu 1,25 m. Inaczej błyskawicznie zużyjesz cały budżet. Osobiście Float16 stosuję tylko dla efektu wody, w którym używam siatki ponad 40x40m.

Na swoich trasach nie korzystam też z “Height Scale” – ustawiam tam wartość “Zero” i stałą bazową wysokość dla całej trawy.

Konfiguracja TurfFX: tryb malowania

Jeśli korzystamy z TRS19, efekty TurfFX możemy malować wyłącznie pędzlem i w dostępnym budżecie możemy zmieścić przeważnie – w zależności od ustawień – od 3 do 5 sensownych efektów. Jednak w standardowej, “pudełkowej” wersji TRS22 (oraz w TRS19 przy aktywnej subskrypcji Trainz Plus) doszła dodatkowa opcja: maski efektów.

Pozwalają one zmieścić więcej interesujących efektów w ramach dostępnego budżetu dzięki pewnej sztuczce. Mianowicie zamiast malować dany efekt ręcznie, możemy powiedzieć grze, aby malowała go automatycznie np. na określonych teksturach, albo gdy teren nachylony jest pod odpowiednim kątem. Sztuczka polega na tym, aby takim efektom dodatkowo ustawić gęstość i wysokość na “Zero”. Dzięki temu prawie nie zużywają one w ogóle budżetu. I jest to bardzo sprytne i mądre. Jest kilka typów terenu, których nie musimy w ogóle malować ręcznie:

  • pole pszenicy – ustawiamy, by zboże malowało się na teksturze PBR Crop Field 4 czy 5 i gotowe, po co to malować ręcznie?
  • szuwary nad wodą – wybieramy jakąś teksturę, którą będziemy malować na zarośniętych brzegach rzek, dodatkowo ustawiamy, że dotyczy to tylko terenu nachylonego od 15 do 50 stopni i wszystkie brzegi same zarosną nam trawą przy zerowym koszcie.

Możemy też połączyć maski z efektami malowanymi normalnie pędzlem, by np. trawa nie malowała się pod wodą lub na podsypce nawet, gdybyśmy sobie przypadkiem tam “maźnęli”.

Opcje konfiguracji TurfFX

Popatrzmy jeszcze raz sobie na okno konfiguracji efektu:

Oto znaczenie poszczególnych opcji:

  1. Name – nazwa naszego efektu
  2. Asset – bazowy typ trawy, jaki chcemy malować
  3. Density Binding – precyzja gęstości malowania omówiona wyżej.
  4. Height scale binding – precyzja skali wysokości omówiona wyżej. Im większa precyzja, tym bardziej różnorodną wysokość może mieć nasza trawa. 
  5. Default value – domyślna wartość precyzji gęstości/skali wysokości w miejscach, gdzie nic nie pomalowaliśmy. 0 = domyślnie efekt nie jest pomalowany nigdzie.
  6. Constant value – stała wartość precyzji gęstości lub skali wysokości. Ta opcja pojawia się, gdy w ustawieniach precyzji wybraliśmy wartość “Zero”, czyli zerowy koszt.
  7. Geometry scale – skala geometrii, albo po prostu… wysokość naszej trawy w metrach :). O ile nie chcemy trawy o wysokości 1000 metrów, lepiej wpisywać tu dość małe wartości.
  8. Blade width – szerokość pojedynczego źdźbła, także w metrach. Tu wartości powinny być jeszcze mniejsze, np. 0.01 albo 0.02 (1 lub 2 centymetry)
  9. Blade width noise – wariacja szerokości źdźbła. Jeśli w poprzednim polu wpisaliśmy np. 0.02, a tu mamy 0.01, to będziemy mieć źdźbła o szerokościach od 0.01 do 0.03 metra.
  10. Blade height noise – tak samo wariacja, ale wysokości źdźbła (czyli tego, co mamy w “Geometry scale”).
  11. Width scale near – skalowanie szerokości w pobliżu, albo po prostu… kształt ździbeł od dołu do góry, gdy kamera jest blisko. Każde źdźbło składa się z czterech wierzchołków. Jak wszędzie wpiszemy jedynki, wyjdzie nam taki prostokącik. Jak w ostatnim polu wpiszemy 0, to źdźbło zwęzi się ku górze, jak wpiszemy 0-1-1-0, to wyjdzie nam źdźbło zaokrąglone u dołu i u góry.
  12. Width scale far – jak wyżej, tylko dla ździbeł daleko od kamery.
  13. Bending scale – skala giętkości, czyli jak bardzo nasza trawa jest podatna na wiatr. 0 – trawa całkowicie sztywna, 1 – maksymalna giętkość.
  14. Blade dispersal – czyli rozproszenie ździbeł. Karta zaczyna malowanie trawy od tzw. punktów wysiewu. Ten parametr określa promień rozrzutu ździbeł wokół tych punktów wysiewu. Wartości bliskie zeru dają trawę wyrastającą bardziej z pojedynczego punktu, większe wartości – ździbła są bardziej rozrzucone wokół punktu wysiewu.
  15. Blade bunching – to orientacja ździbeł. Wartość 0 – źdźbła obrócone są w kompletnie losowych kierunkach, 1 – źdźbła są ładnie obrócone w kierunku “od” punktu wysiewu.
  16. Expansion Constant – kontroluje bazową liczbę ździbeł w punkcie wysiewu.
  17. Expansion Multiplier – kontroluje liczbę dodatkowych ździbeł dodawanych, gdy zwiększamy gęstość.
  18. Number of seeds multiplier – mnożnik punktów wysiewu.

I teraz możemy to pogrupować:

  • opcje 3 – 6 określają, jak precyzyjnie będziemy mogli malować trawę na trasie
  • opcje 7 – 10 regulują wysokość i szerokość ździbeł
  • opcje 11 i 12 regulują ich kształt
  • opcje 13 – 15 regulują rozmieszczenie ździbeł
  • opcje 16 – 18 regulują bazową gęstość naszej trawy

Jeśli mamy pudełkową wersję TRS22 lub TRS19 przy aktywnej subskrypcji Trainz Plus, zobaczymy jeszcze cztery dodatkowe opcje do konfigurowania masek efektów, które omówiliśmy wcześniej:

  1. Avoid water – jeśli ustawimy na “true”, gra nie będzie malować danej trawy, jeśli ta miałaby znaleźć się pod wodą.
  2. Attitude range – czyli zakres wysokości. Tu określamy, na jakich wysokościach nad (i pod) poziomem morza w metrach dany efekt będzie malowany. Na terenie o wysokości spoza tego zakresu efekt nie będzie malowany.
  3. Terrain gradient cutoff – czyli maska nachylenia terenu. Efekt będzie malowany tylko wtedy, kiedy nachylenie terenu będzie mieściło się w podanym zakresie. Dzięki temu możemy np. dać inną trawę na zboczu, a inną na równinie.
  4. Ground texture mask – maska tekstury gruntu: tu możemy wybrać tekstury, na jakich może, a na jakich nie może malować się dana trawa.

Przykładowe ustawienia

Wiemy już, co poszczególne opcje robią, teraz nauczmy się z nich korzystać, aby zrobić coś fajnego. Na wcześniejszych obrazkach widzieliśmy skonfigurowany jeden z efektów z mojej trasy: takie fajne kępki trawy, które maluję w pobliżu torów. Efekt ten ma dużą dokładność, dzięki czemu mogę dobrze kontrolować, by trawa np. za bardzo nie weszła na tory lub na drogę. Jest to też efekt do malowania pędzlem i wiemy, że takich efektów można mieć tylko parę.

A teraz pokażę efekt TurfFX korzystający z masek efektów, który praktycznie nie zużywa budżetu. Jest to zboże na polu:

Widzimy, że w “Density Binding” i “Height Scale Binding” ustawiłem wszędzie “Zero”. Jak wiemy, to sprawia, że efekt pomalowałby się przez to na całej mapie bez możliwości kontroli… gdyby nie maski. Na dole ustawiłem, aby zboże malowało się na teksturach PBR Crop Field 4 i PBR Crop Field 5. Możemy teraz pomalować kawałek terenu jedną z tych dwóch tekstur. Zobaczymy, że automatycznie pojawi się na nich żółciutkie zboże. 

Kilka porad

Zacznijmy od podstawowego tematu, czyli wydajności. TurfFX renderowany jest w całości przez kartę graficzną i jest wydajny, o ile nie mamy starej karty, albo karty entry-level o bardzo niskich możliwościach. Jednak gdyby tak się stało, to efekty TurfFX można po prostu wyłączyć w opcjach Trainza i wtedy w ogóle nie obciążają one komputera.

Rzecz numer dwa, jakie zabrać się za tworzenie efektów? Opcji jest sporo i potrzeba chwili czasu, aby znaleźć odpowiadające nam ustawienia. Polecam skonfigurować sobie bazowe efekty na samym początku tworzenia trasy i poeksperymentować. Wynika to z tego, że manipulacja niektórymi ustawieniami później jest bardzo destrukcyjna. Przede wszystkim nie baw się ustawieniami precyzji malowania, gdy już pomalowałeś sporą część trasy, bo najczęściej skończy się to utratą danych o efekcie i koniecznością namalowania go od nowa (zresztą, edytor ostrzega przed tym).

Zestaw efektów zyxista

Oto mój zestaw efektów zoptymalizowany pod TRS22, którego używam:

  • S Grass Short: bazowa, bardzo drobna i niska trawa o wysokości 9 cm. Precyzja “Zero”, malowana z automatu na wszystkich teksturach trawiastych. Dzięki temu, że jest niziutka, nie wystaje ponad asfalt czy chodniki.
  • S Wheat: pokazane wcześniej zboże.
  • C Near Track: takie bardziej gęste kępki trawy malowane pędzlem. Density Binding = Int2, 2.5 m, Height Scale Binding = Zero. Kępki mają jednakową wysokość, a precyzja gęstości malowania zapewnia możliwość dość dokładnego malowania przy drogach czy torach.
  • C Grass Med 1 – wyższa, zielona trawa o wysokości do 70 cm. Density Binding = Int2, 2.5m, Height Scale Binding = Zero
  • C Grass Med 2 – wyższa, brązowa trawa o wysokości do 70 cm, Density Binding = Int2, 5 m.

Co mi to daje? Cały teren jest pokryty taką niską trawą, do tego mam fajne kępki trawy malowane tam, gdzie chcę. Na łąkach, lasach i ogólnie bardziej dzikich terenach mogę malować dwie ostatnie trawy w barwach zielonej i takiej brązowej dla różnorodności. Do tego automatyczne zboże na polach. Myślę też nad dodaniem jeszcze jednego efektu do automatycznego malowania szuwarów na brzegach rzek. W tym celu wybiorę jedną dedykowaną teksturę, której będę używać właśnie na brzegach, a dodatkowo użyję maski nachylenia terenu, aby faktycznie zarosło głównie punkt styku wody i lądu. Literki “C” i “S” w nazwach pomagają mi odróżnić efekty malowane automatycznie od tych, które maluję pędzlem. Czemu akurat C i S? Szczerze to nie pamiętam :).

Z powyższymi ustawieniami mieszczę się w budżecie danych i jeszcze starcza na dodanie jednego efektu Clutter oraz efektu wody, obu malowanych pędzlem.

Gdzie znaleźć trawy wykorzystane przez Zyxista?
Są to wbudowane trawy TurfFX dla TRS2019+! Nie musisz nic pobierać 😉

Zestaw efektów KGrid’a oraz ZiuT’a (CEM)

Tematykę tych dwóch osób połączyliśmy (jako TrainzMaps) w jedno ze względu na bliźniacze ustawienia oraz efekty. Są to ustawienia dla fanów jednostajnej, jednokolorowej trawy w odcieniach zbliżonych do nasyconego zielonego (oczywiście w sezonie letnim).

Zestaw traw użyty w mapie Central Europe Mini opiera się na sezonowych trawach:

  • NBS+ Wild Grass 2 – trawa wysoka, około 50-60cm, idealna dla dalszego efektu buszu.
  • NBS + Yard Grass 2 – niska trawa, wysokości około 15cm, idealna dla bliskiego otoczenia toru, albo na efekt zatrawionego toru.

KGrid w swoim najnowszym projekcie, który jest realizowany wzbogacił owe trawy o:

  • TurFX – wlad 1 grass – wysoka na około 70cm trawa sezonowa, w okresie letnim w odcieniu oliwki, miło kontrastująca do powyżej wskazanej zieleniny NBS+,
  • CDE Grass 01 – 40cm trawa żółta, imitująca wyschniętą (lecz nie do końca trawę).

Efekty wymieszania tych czterech traw, w ustawieniach które pokazane są poniżej, są następujące:

Ustawienia dla poszczególnych traw (w przypadku mapy CEM – dla NBS+, dla pozostałych – w wykonaniu KGrid’a)

kliknięcie na screen’a powiększy go 😉

KGrid i ZiuT proponują trawy dostępne na DLS!
Poniżej pełna tabela kuidów oraz nazw wykorzystanych traw (w CMP wybierz typ: TurfFX).
NBS+ TFX Wild Grass 2 – Truly Seasonalkuid:388413:463001
NBS+ TFX Yard Grass 2 – Truly Seasonalkuid:388413:463002
TFX – CDE Grass 01 Seasonalkuid:647907:101501
TurFX – wlad1 grass – Seasonalkuid:806431:564423

Zakończenie

Mam nadzieję, że ten artykuł rozjaśnił Wam tajniki konfigurowania efektów TurfFX. Na koniec jeszcze raz zachęcam, by przed radosnym dodaniem ich na własną trasę pobawić się nimi na sucho i poeksperymentować z ustawieniami. 

Autor: zyxist, Uzupełnienie: KGrid – 13.02.2023 r.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *