Jak wdrożyć wykrywanie kolizji portali?


12

Na przykład weźmy ten scenariusz (przepraszam za moje okropne umiejętności rysowania): wizerunek

Opiera się to na „portalu”, w którym stickman przechodzi przez niebieski portal (który jest połączony z czerwonym portalem), ale na czerwonym portalu jest ściana. Dlatego nie może przejść całkowicie przez portal.

Moje pytanie brzmi zatem: w jaki sposób przeprowadzam z nimi wykrywanie fizyki / kolizji? Czy kroję odtwarzacz? Czy istnieje sposób na ich połączenie? Czy są jakieś silniki fizyki, które to potwierdzają? Jeśli nie, jak mam to zrobić?


O ile mi wiadomo, wyjaśniają niektóre rzeczy w komentarzu dewelopera do Portalu 1.
— Archy


@ Byte56, dzięki, zaktualizowałem swój post. Myślę, że to powinno wyjaśnić to bardziej :)
— MiJyn

1
Myślę, że sytuacja, którą opisujesz, jest bardzo rzadka w portalu (jeśli to się zdarzy), ponieważ portale nie są swobodnym miejscem docelowym. Są umieszczane na ścianach i tylko na określonych ścianach. Nie przypominam sobie sytuacji, w której mogłem umieścić portal, ale nie byłem w stanie przejść przez niego z powodu przeszkody na drugim końcu portalu. Wyobrażam sobie, że możesz utworzyć tymczasową kopię odtwarzacza w obu lokalizacjach na okres przejściowy.
— MichaelHouse

2
@ Byte56: Nie pamiętasz wiele. Pamiętam, jak to zrobiono w Portalu 1. Wydaje mi się, że przypominam sobie miażdżący obszar, w którym można by użyć portalu, aby uniknąć śmierci. Kolizje z przedmiotami w pobliżu portali są częstym zjawiskiem, a silnik łatwo sobie z nimi radzi.
— Nicol Bolas,

Odpowiedzi:


7

Portal gra ma ładny drogę, którą oni rozwiązać ten problem:

Gracz przebija portal źródłowy (niebieski) i widać, że wystaje z portalu docelowego (pomarańczowy). Gracz zostanie skopiowany do portalu docelowego i przejdzie przez niego. Gra renderuje obraz widziany podczas przeglądania portalu źródłowego za pomocą drugiej kamery i renderowania do tekstury.

Jednak kopia gracza w docelowej lokalizacji nie wchodzi w interakcje z fizyką. Jest tylko do celów renderowania. Zamiast tego tworzą wirtualne obiekty kolizji po drugiej stronie portalu źródłowego i zamiast tego powodują zderzenie odtwarzacza. Dzięki temu fizyka jest prosta.

Potrzebujesz tylko tych wirtualnych obiektów, o ile gracz może dotrzeć, nie wchodząc całkowicie przez portal. Gdy tylko gracz w pełni przejdzie przez portal, sytuacja się odwraca.

Obraz ilustrujący : Portal niebieski to portal źródłowy, portal pomarańczowy - portal docelowy. Przerywana biała ramka to wirtualny obiekt kolizyjny, natomiast rzeczywista ramka to obiekt renderowany. Gracz (z czerwoną kropką) oddziałuje tylko z otaczającymi go obiektami. Obiekty w pomarańczowym portalu są całkowicie ignorowane.

wprowadź opis zdjęcia tutaj


4
„ za pomocą drugiej kamery i renderowania do tekstury ” Komentarz twórców portalu 1 wyraźnie powiedział, że nie używają renderowania do tekstury, ponieważ nie działało to dobrze dla ich potrzeb (szczególnie w przypadku wyświetlania portali z innych portali ). Zamiast tego zasadniczo przekształcają wersję świata na drugą stronę portalu i po prostu ponownie ją renderują.
— Nicol Bolas,

Wow, to odpowiada prawie na wszystko! Zastanawiam się tylko, czy portal działa jako dziura z przedmiotami w środku?
— MiJyn

6

Oto jak spróbuję to zrobić.

Gdy jesteś w portalu, w silniku fizyki byłyby dwie kopie odtwarzacza. Każda kopia ignoruje wszystkie kolizje po przeciwnej stronie portalu, a następnie łączysz wyniki i stosuje wyniki symulacji do obu modeli.

Idealnie byłoby zastosować grawitację osobno dla każdej połowy gracza, ale możesz uciec, stosując ją tylko z boku portalu, na którym znajduje się środek masy gracza.

Aby zignorować te kolizje, musisz ustawić odpowiedni wolumin i sprawdzić, czy w nim jest punkt. Dobrym rozwiązaniem wydaje się cylinder (prawdopodobnie rozciągnięty pionowo). Test jest więc podobnyif (!collisionPoint.InsideCylinder(portal)) ProcessCollision(); else IgnoreCollision();

Wierzę, że większość silników fizyki ma system filtrowania, z czym obiekt może się zderzyć, więc powinno to być możliwe przy użyciu standardowego silnika fizyki. Na przykład http://bulletphysics.org/mediawiki-1.5.8/index.php/Collision_Filtering#Custom_collision_filtering

Aby połączyć wyniki, najprostszą opcją byłoby prawdopodobnie dodanie jakiegoś nieelastycznego ograniczenia między nimi i pozwolenie silnikowi fizyki sobie z tym poradzić.


Hmm, dobrze, jak bym to zrobił? Mam część dotyczącą kopiowania odtwarzacza, ale poza tym nie mam pojęcia. Jak zignorować kolizje z przeciwnej strony? Jak w ogóle połączę wyniki?
— MiJyn

Zredagowałem kilka szczegółów.
— Adam

dzięki, pomyślę o tym i odpowiem później, kiedy tylko będę mógł to ustawić prosto w mojej głowie :)
— MiJyn

Wielkie dzięki, twoja odpowiedź i odpowiedź Virtlink na moje pytanie :) Teraz zdecyduj, która z nich ma ustawić „prawidłową odpowiedź” na ...
— MiJyn

4

Jak obliczyć, jak daleko schodzi gracz?

Dlaczego miałbyś chcieć Nie musisz obliczać, jak daleko gracz idzie w dół; dowiesz się, jak daleko schodzi, gdy obiekt przechodzi przez symulację.

Jak mógłbym nawet połączyć portale?

Portal, z perspektywy samej gry, to niewiele więcej niż skomplikowany teleporter, który miesza się z kolizją, zamieniając kolidujące obiekty w kolidujące. Kiedy obiekt dotyka portalu, zaczyna potencjalnie kolidować z rzeczami po drugiej stronie. Kiedy obiekt mija portal „wystarczająco daleko”, skutecznie teleportujesz go do drugiego, natychmiast zmieniając jego położenie i orientację.

Fizyka po prostu działa normalnie.


When an object touches the portal, it starts potentially colliding with things on the other sidetak, dokładnie. Jak miałbym to zrobić z silnikiem fizyki? To chyba moje pytanie :)
— MiJyn

@MiJyn: Piszesz silnik fizyki, który potrafi to zrobić. Valve musiała zasadniczo zepsuć silnik Source, aby Portal rzeczywiście działał. Żaden komercyjny lub open-source silnik fizyki nie jest w stanie tego zrobić. Jest powód, dla którego pomimo popularności portalu, na rynku nie ma wielu klonów portalu.
— Nicol Bolas,

ciekawe, ponieważ istnieje wiele innych gier, które mają bardzo podobną mechanikę (zobacz nawet mod TARDIS do Minecrafta). Jestem pewien, że musi być jakiś sposób, aby to zrobić z łatwością.
— MiJyn
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.