Tworzę własną kamerę zabijania

15

Planuję stworzyć własny system Kill Cam dla zestawu narzędzi piaskownicy. Po zastanowieniu się nad mechaniką samej kamery zabójczej jestem jednak całkiem zagubiony. Próbuję odtworzyć te, które często widuje się w grach z wezwaniem do służby, które pokazują, z punktu widzenia zabójcy, faktyczną scenę zabijania.

Moje myśli:

-Nie mogę po prostu zachować pamięci, gdy ludzie zabijają innych, ponieważ nie wiedziałbym, kiedy rozpocząć „proces nagrywania”. Jestem na dobrej drodze, aby dokładnie ustalić, kiedy ktoś „chce” kogoś zabić.

- Moim jedynym prawdziwym pomysłem jest mieć kompletną kopię wszystkiego załadowaną na bok, kopiującą cały ruch z oryginalnego świata, ale z 10-sekundowym opóźnieniem. W ten sposób wszystkie kamery zabijania będą miały 10 sekund, a kamera osób zostanie przeniesiona do drugiego świata zabójcy.

Moje pytania:

Czy istnieje już zaakceptowany sposób? Czy ktoś ma jakieś dobre pomysły na coś takiego? Dzięki, jeśli możesz!

Freesnöw
źródło

Odpowiedzi:

10

Przechowuj ostatnie kilka sekund danych ruchu odpowiednich obiektów dynamicznych .

Dane te powinny być wystarczająco kompletne, aby w razie potrzeby mogły zostać wykorzystane do odtworzenia sceny killcam, ale na tyle niekompletne, aby można było sobie pozwolić na pobieranie i przechowywanie w wystarczająco krótkich odstępach czasu.

Przykłady rzeczy, które możesz chcieć śledzić:

  • W którą stronę porusza się / patrzy widoczny gracz
  • Określa, czy morderca jest powiększony na celowniku

Rzeczy, które prawdopodobnie chcesz zoptymalizować:

  • Dane o graczach, których zabójca nie widzi
  • Rzeczywista moc wyjściowa ekranu
Anko
źródło
W twojej odpowiedzi jest duży problem, zwykle nie możesz przewidzieć śmierci nikogo, a także nie możesz przewidzieć, kto dostanie kolejne zabójstwo. więc optymalizując dane o niektórych graczach, możesz stracić możliwość powtórzenia niektórych zabójstw.
Ali1S232,
2
@Gajet Myślę, że w tym przypadku ma on na celu wyeliminowanie wszystkich istotnych obiektów i przechowywanie tylko tych danych później. Innymi słowy, chciałbyś już mieć jakiś mechanizm przechowywania / aktualizacji, aby śledzić pozycje wszystkiego i ich bytów, ale w ograniczonym czasie. Powiedz, że chcesz tylko ostatnie 10 sekund na kamerę zabijania. Wystarczy struktura danych wystarczająca do przechowywania ostatnich 10 sekund, a wszystko starsze zostanie zastąpione na końcu, na przykład w podwójnie zakończonej kolejce.
ChrisC
Właśnie miałem na myśli potwierdzenie Ricera. Rzeczywiście: jeśli nie możesz przewidzieć przyszłości, przygotuj się na nią. :)
Anko
1
Należy wspomnieć, że gry online w czasie rzeczywistym nigdy nie pokazują graczom, co się naprawdę wydarzyło; gra zawsze zgaduje, jaka może być prawda, ale z powodu opóźnień i innych problemów z siecią gry nie dowiedzą się, jaka była „obiektywna prawda”, dopóki nie będzie to dużo później. Więc jeśli nie masz danych „zabić kamerę”, aby móc odtworzyć czyjś punkt widzenia, nie powinieneś czuć się źle, gdy tworzysz wiarygodne dane zabicia kamery w sytuacjach, w których ich potrzebujesz.
Trevor Powell,
0

Nie mam pojęcia, w jaki sposób jest to normalnie realizowane, ale możesz mieć każdą kulę zapisującą klip od momentu jego wystrzelenia, aż do momentu trafienia w cel. Jeśli strzelanie odbywa się tylko za pomocą hitcan, możesz obliczyć, czy wygenerować nagranie kamery zabójstwa w tym samym cyklu podczas wykonywania hitcan.

RavensKrag
źródło
0

Możesz zapisać transformację obiektu co kilka sekund. Zrób to dla wszystkich odpowiednich obiektów dynamicznych. Rozłóż zapisywanie tak, aby każda klatka zapisywała tylko kilka macierzy. oszczędzaj tyle czasu, ile chcesz.

Podczas odtwarzania faktycznie używasz tych transformacji w silniku renderującym, aby animować scenę, interpolując między transformacjami w czasie dla każdej klatki, jeśli to konieczne.

Nie jest to dokładny duplikat, ale bardzo bardzo blisko i pozwala graczowi na sterowanie kamerą podczas odtwarzania, aby mogli wybrać, z którego miejsca oglądać scenę.

Steve H.
źródło
jest jeden problem z przechowywaniem tylko macierzy transformacji, a nie zapisywaniem niczego innego! na przykład, jeśli zapisujesz tylko matryce transformacji dla graczy, animacje mogą pójść nie tak, nie będziesz w stanie zobaczyć, ile obrażeń wróg przyjął przed zabiciem ciebie i kiedy strzelił z pistoletu. istnieje długa lista szczegółów, za którymi tęsknisz za pomocą metody, które możesz łatwo o nich pomyśleć.
Ali1S232,
Przeczytaj ponownie, Zapisujesz transformacje dla wszystkich odpowiednich obiektów dynamicznych, nie tylko macierzy dla graczy. Łatwo jest również zapisać dane dotyczące zdrowia lub punktów życia oraz inne przedmioty. Chodzi o to, że oszczędzanie zbyt dużej ilości danych pochłania zasoby czasu gry (źle). Oszczędzasz tyle, ile możesz, i pozwalasz swojemu silnikowi renderującemu wykonać tak dużo ciężkiego podnoszenia, interpolując go podczas odtwarzania, jak to możliwe. To kompromis, ale co nie jest?
Steve H
0

możesz zaimplementować funkcję powtórki w swojej grze. za pomocą funkcji powtórki, killcam jest tylko powtórką odtwarzaną z określonego czasu gry i z punktu widzenia gracza. później możesz zapisać powtórki i umożliwić innym przeglądanie gier po ich zakończeniu.

również twój pomysł na uruchomienie tej samej gry z opóźnieniami 10 sekund jest dobrym podejściem, jeśli twoja gra nie zużywa dużej mocy obliczeniowej.

Ali1S232
źródło
0

Co powiesz na to...

Nagrywaj tylko wtedy, gdy istnieje możliwość zabicia.

Pomyśl o tym z perspektywy AIM-BOT. Będzie celował / strzelał tylko wtedy, gdy zabicie jest możliwe. Dlatego powinieneś nagrywać tylko wtedy, gdy wróg znajduje się w zasięgu możliwego do zabicia / widoczności.

waterwizard11
źródło
A co z sytuacjami polegającymi na strzelaniu do obiektu? Tak wiele rzutów promieniami z pewnością będzie wymagało więcej procesora niż niektóre inne wymienione pomysły. Dobry pomysł, ale mogłem uznać to za część rozwiązania.
Freesnöw
0

Ustaw promień wokół odtwarzacza, a jeśli inny promień wejdzie w promień, rozpocznie nagrywanie ekranu dla obu osób. Następnie poczekaj, aby zobaczyć, czy ktoś nie zostanie zabity. Jeśli tak, to znajdź zabójcę i weź ich nagranie i przewiń czas, który upłynął od zabójstwa, oraz długość filmu, który chcesz przewinąć, i przewiń i odtwórz dla zabitego. Jeśli nikt nie zostanie zabity, a nikt nie znajduje się w promieniu wokół postaci, usuń lub zatrzymaj nagrywanie. Jeśli zabójca jest powiększony na lunecie, rzuć promień w miejsce, w które celuje i stwórz kolejny promień wyzwalania. Jeśli ktoś tam jest, rejestruje ekran tego, kto znajduje się w promieniu, w którym celuje celująca postać, oraz celowanej postaci. Jeśli ktoś zginie w wyniku celowania postaci, poświęcasz czas, który upłynął od zabicia plus długość, jaką ma mieć kamera zabijania, a ty przewijasz i grasz dla tego, który został zabity. Jeśli pomniejszą, zatrzymaj nagrywanie. To jest koncepcja, więc nigdy jej nie wypróbowałem.

Ethan Smith
źródło