Jak stworzyć wysokiej jakości i szybki efekt portalu?

9

EDYCJA: Tak więc efekt wizualny portalu działał bez żadnego pogorszenia wydajności, i mam konfigurację fizyki obiektów ze sztywnymi ciałami płynnie poruszającymi się po portalach oraz obiektów z kontrolerami postaci płynnie poruszającymi się po nim. Jedyne, co próbuję teraz rozgryźć, to połączenie dwóch widoków z kamery, aby uzyskać odpowiedni efekt przejścia z perspektywy pierwszej osoby. Jakieś pomysły na połączenie tych dwóch? Myślę o czymś używającym modułu cieniującego tylko głębokość lub znormalizowanego prostokątu rzutni. Moim głównym problemem jest obliczanie tego w czasie rzeczywistym i pod kątem.

Pracowałem więc nad stworzeniem efektu portalu w Unity3D. Oczywiście wziąłem Portal Valve za wielki wpływ na programowanie tego. Obecnie używam po prostu rendertekstu kamery, aby uzyskać efekt graficzny, a następnie trochę kodu, aby zrobić resztę. Problem dotyczy rozdzielczości 2048 x 2048 i wygląda tak samo dobrze jak portal, ale powoduje znaczną utratę FPS. Aby rozwiązać ten problem, musiałbym albo obniżyć jakość tekstury, albo liczbę jej aktualizacji.

Firma Valve osiągnęła efekt portalu wysokiej jakości, nie powodując utraty dużej liczby klatek na sekundę. Jak mogę zrobić to samo? Czy ktoś ma jakieś dobre pomysły na renderowanie do tekstury w wysokiej rozdzielczości bez powodowania utraty ramki?

Zastanawiam się nad stworzeniem własnego kodu do renderowania tekstur zamiast korzystania z wbudowanego systemu Unity, jest to wykonalne, ale z pewnością byłoby kłopotliwe. Dlatego wszelkie uwagi, pomysły lub sugestie są bardzo mile widziane.

Timothy Williams
źródło
3
Nie mogę znaleźć referencji, ale pamiętam, jak ktoś powiedział, że Portal nie użył do tego renderowania do tekstury.
sprzedać
1
Sprawdź Pseudo Form , grę typu Portal (źródło znajduje się w głównym pliku do pobrania). Istnieją również inne „wdrożenia portalu” w Internecie, ale myślę, że jest to najbardziej znany. Zagraj także w Portal z komentarzami dla programistów. W niektórych z nich mówią o wyzwaniach związanych z wdrażaniem portali.
Vasco Correia
7
Nie mogę pojąć, dlaczego potrzebujesz tekstury 2028 x 2048, aby portal renderowany w rozdzielczości mniejszej niż 1080p wyglądał ostro. Zdecydowanie nie powinieneś przekraczać rozdzielczości ekranu, z której korzystasz w swojej grze. Chciałbym posunąć się do stwierdzenia, że ​​powinieneś obliczyć rozmiar portalu na ekranie i użyć go, aby wybrać rendertexture o odpowiednim rozmiarze (dzięki czemu jest bardzo wydajny, gdy jest daleko, i „cięższy”, gdy portal robi się więcej ekranu -przestrzeń
Stig-Rune Skansgård
1
Jakie podejście zastosowałeś dla efektu wizualnego? Czy wymyśliłeś, jak renderować tylko to, co było widoczne przez portal?
jhocking
1
Powinieneś zachować oryginalne pytanie i zadać nowe pytanie dotyczące nowego problemu.
sprzedać

Odpowiedzi:

5

Po wielu godzinach badań i programowania wymyśliłem, jak prawidłowo uzyskać do tego efekt wizualny. Jeśli chcesz po prostu kupić system portalu, który działa na potrzeby wizualizacji i większość wszystkiego, czego potrzebujesz, sprawdź pakiet Portalizer Unity.

Programuję w C #, a ten pakiet jest w JS, ale logika, która się za nim kryje, jest niezwykle użyteczna i dobrze przemyślana. Generalnie podążałem za jego logicznym myśleniem, wprowadzając kilka drobnych poprawek do mojej gry i kontrolera FPS.

Zasadniczo używasz zmodyfikowanej wersji tego modułu cieniującego / skryptu. Mają dwa lustra na scenie i aparat renderuje to, co widzi w każdym odbiciu do drugiego lustra. Musisz utworzyć zmodyfikowaną macierz transformacji, aby uwzględnić relacje między dwoma portalami. Aby zmniejszyć skuteczność działania, przeczytaj ten artykuł na temat przycinania w pobliżu płaszczyzny. Pomoże Ci to renderować tylko to, co musi być widoczne przez portal.

Mogę stworzyć bardziej szczegółowy samouczek ze zdjęciami i źródłem po tym, jak wymyślę, jak prawidłowo połączyć kamery z teleportacją FPS. W tej chwili jestem zbyt wyczerpany i zajęty, aby napisać pełny samouczek, co powinno wystarczyć, ponieważ daje większość potrzebnego kodu.

Timothy Williams
źródło
Czy możesz opublikować link do repozytorium?
Roma Fedor