Materiał z dwóch tekstur obok siebie.

Shadery i tematy z nimi związane.

Materiał z dwóch tekstur obok siebie.

Postprzez danger » 09 Kwi 2014, 14:56

Witam,

wie ktoś może jak stworzyć materiał zbudowany z dwóch tekstur umiejscowionych obok siebie ? Dokładniej mówiąc: W inspektorze mam dwa sloty na tekstury (lub więcej) , w momencie gdy przerzucam tam więcej niż jedną teksturę, kolejne ustawiają się obok niej tworząc jakby jedną dużą teksturę. Magik od shaderów ze mnie żaden także łopatologicznie prosiłbym ;)
Pomogłem ? Jak chcesz możesz mi podziękować udostępniając jedną z moich głupich gier na swoim facebooku.
https://www.facebook.com/pages/Smart-Te ... 4410318807

lub ocenić na Google Play
https://play.google.com/store/apps/deve ... Smart+Tech
danger
 
Posty: 42
Rejestracja: 18 Mar 2014, 17:52
Has thanked: 0 time
Been thanked: 0 time

Re: Materiał z dwóch tekstur obok siebie.

Postprzez Sawik » 09 Kwi 2014, 20:25

Nie lepiej zrobić to po prostu UV mapą?
Poniżej podaję przykład jak można edytować UV w trakcie gry jeśli jest to konieczne in-game, lub jeśli wolisz trochę pomyśleć nad shaderem niż robić UV do każdego modelu (o ile potrzebujesz kilku takich wariantów).
Kod: Zaznacz wszystko
mesh.uv= [Vector2 (0, 0), Vector2 (1, 0), Vector2 (0, 1), Vector2 (1, 1)];

W powyższym przykładzie zakładam że "mesh" odnosi się do płaszczyzny o czterech wierzchołkach.

Ogólnie, widzę kilka problemów z używaniem czegoś takiego. Możesz jakoś bardziej przybliżyć o co Ci chodzi?
Sawik
 
Posty: 254
Rejestracja: 11 Maj 2012, 16:04
Miejscowość: Bradford
Has thanked: 0 time
Been thanked: 0 time

Re: Materiał z dwóch tekstur obok siebie.

Postprzez danger » 10 Kwi 2014, 08:07

Zrobiłem mechanizm wczytywania i wyświetlania BitmapFontów ,który działa na zasadzie - jeden mesh do którego dodaje wierzchołki określające płaszczyzny liter (4 wierzchołki na literę, zwykły quad) , później wczytuje z danych o czcionce pozycje znaków na teksturze i przekształcam je na UVs , następnie tworze trójkąty dla każdej litery łącząc wierzchołki. Czyli wyświetlany tekst to jeden mesh z jednym materiałem (altas ze znakami) , wszystko wyświetlane w jednym drawcallu. Problem pojawia się w momencie gdy chce użyć więcej niż jednego atlasu ze znakami, przekazując do MeshRenderera tablicę materiałów (każdy ze swoim atlasem znaków) uzyskuję miks wszystkich znaków , tzn materiały wyświetlane są na sobie. Wymyśliłem więc żeby zrobić to w ten sposób, że mam jeden materiał, który używa shadera ustawiającego tekstury jedna obok drugiej i później po prostu uwzględniać przesunięcie przy tworzeniu UV dla poszczególnego znaku. No chyba że jest jakaś lepsza metoda np. żeby przypisać do UV materiał na którym ma się mapować.
Pomogłem ? Jak chcesz możesz mi podziękować udostępniając jedną z moich głupich gier na swoim facebooku.
https://www.facebook.com/pages/Smart-Te ... 4410318807

lub ocenić na Google Play
https://play.google.com/store/apps/deve ... Smart+Tech
danger
 
Posty: 42
Rejestracja: 18 Mar 2014, 17:52
Has thanked: 0 time
Been thanked: 0 time

Re: Materiał z dwóch tekstur obok siebie.

Postprzez Sawik » 10 Kwi 2014, 09:16

Kod: Zaznacz wszystko
mesh.material = ...; 

Nie dziala?

Oraz, myslales o uzyciu GUI? Albo dodawania osobnych quadów dla kazdej litery?
Sawik
 
Posty: 254
Rejestracja: 11 Maj 2012, 16:04
Miejscowość: Bradford
Has thanked: 0 time
Been thanked: 0 time

Re: Materiał z dwóch tekstur obok siebie.

Postprzez danger » 10 Kwi 2014, 09:28

Nie w tym problem. Materiał się przypisuje dobrze, tyle że znaki są rozrzucone pomiędzy materiałami a przypisanie wszystkich materiałów do jednego mesha skutkuje wymieszaniem tekstur na meshu. Wszystko działa na 100% jak mamy jeden materiał z jednym atlasem znaków.
Każda litera ma swój osobny quad tyle że w obrębie jednego mesha, tworzenie całego mesha pod jeden znak i później użycie Combine to niepotrzebne tracenie zasobów robota dla GC.GUI odpada bo ten font ma być zorientowany w przestrzeni.
Pomogłem ? Jak chcesz możesz mi podziękować udostępniając jedną z moich głupich gier na swoim facebooku.
https://www.facebook.com/pages/Smart-Te ... 4410318807

lub ocenić na Google Play
https://play.google.com/store/apps/deve ... Smart+Tech
danger
 
Posty: 42
Rejestracja: 18 Mar 2014, 17:52
Has thanked: 0 time
Been thanked: 0 time

Re: Materiał z dwóch tekstur obok siebie.

Postprzez EvilArev » 10 Kwi 2014, 16:41

Wymieszanie tekstur spowodowane jest tym, że mesh składający się z jednego sub-mesha zostaje narysowany po jednym razie na każdym materiał w MeshRendererze. Zamiast stosować
Kod: Zaznacz wszystko
mesh.triangles = int[]

możesz użyć metody
Kod: Zaznacz wszystko
mesh.SetTriangles()

której parametrem jest index sub-mesha, odpowiadający materiałowi, którym ma zostać narysowany. Ważne przy tym jest, by ilość sub-meshy odpowiadała ilości materiałów. Jeśli sub-meshy będzie więcej - nadwyżkowe się nie narysują. Jeśli odwrotnie - któreś zostaną narysowane kilkukrotnie.
EvilArev
 
Posty: 354
Rejestracja: 14 Kwi 2013, 15:32
Has thanked: 0 time
Been thanked: 0 time

Re: Materiał z dwóch tekstur obok siebie.

Postprzez danger » 10 Kwi 2014, 20:50

EvilArev! Chętnie bym Ci flaszkę postawił! Nie sądziłem że ta metoda robi coś innego niż mesh.triangles = int[] . Nauczka na przyszłość dla mnie i ogromne podziękowania dla Ciebie! Jedna metoda i teraz wszystko działa, bez kombinowania! Dzięki!
Pomogłem ? Jak chcesz możesz mi podziękować udostępniając jedną z moich głupich gier na swoim facebooku.
https://www.facebook.com/pages/Smart-Te ... 4410318807

lub ocenić na Google Play
https://play.google.com/store/apps/deve ... Smart+Tech
danger
 
Posty: 42
Rejestracja: 18 Mar 2014, 17:52
Has thanked: 0 time
Been thanked: 0 time

Re: Materiał z dwóch tekstur obok siebie.

Postprzez EvilArev » 11 Kwi 2014, 18:33

Obejdzie się bez flaszki ;-) Dobrze, że udało się rozwiązać twój problem.
EvilArev
 
Posty: 354
Rejestracja: 14 Kwi 2013, 15:32
Has thanked: 0 time
Been thanked: 0 time


Wróć do Shader Lab

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 1 gość