Jump to content
Unity Insider Forum

First Person Shooter - Zoom Umsetzung


Tiwaz

Zoom Umsetzung  

4 Stimmen

  1. 1. Welchen Zoom findest du persönlich besser in einem Spiel?



Recommended Posts

Moin,

kurze Frage: Wie findet ihr (sofern ihr Ego Shooter spielt) das Zoomen besser? In fast allen Spielen (CS:GO, Battlefield, PUBG, ...) wird einfach die Kamera rangezoomed (das fov verringert) und wenn der Zoom relativ groß ist (alles über ~6x Zoom) wird ein Scope Overlay angezeigt, das alles um das Sichtfeld schwarz rendert. 
Eine andere Möglichkeit wäre Dual Rendering also, dass tatsächlich nur das Scope zoomed und man die Szene außenrum ansonsten ganz normal sieht. Spiele wie Red Orchestra, Insurgency und Call of Duty: Ghost benutzen den Ansatz. Dazu wird eine zweite Kamera mit niedrigem fov benutzt und mithilfe einer RenderTexture über die normale Kamera gezeichnet.
Beides hat natürlich seine Vor- und Nachteile.

Vorteile des Dual Renderings gegenüber dem Overlay: 
(- Es ist einfach realistischer) <- Ist ja nicht zwingend besser, in einem halbwegs realistisch angehauchten Shooter aber imho ein Vorteil, daher mal in Klammern
- Man sieht wie gesagt die Szene außenrum ebenfalls noch, wodurch man zum Beispiel von der Seite kommende Gegner sehen kann
- Man kann jedes beliebige Scope nehmen, eine RenderTexture Linse reinschieben und man kann es benutzen

Nachteile des Dual Renderings gegenüber dem Overlay:
- Die zweite Kamera muss zusätzlich gerendert werden, erhöht den Rechenaufwand
- Manche Leute kommen damit nicht zurecht und sind (zumindest anfangs) irgendwie desorientiert beim Zielen
- Man hat einen zusätzlichen Verwaltungsaufwand wegen der Dual Render Kamera (z.B. wenn man weggesteckte Waffen noch auf dem Rücken rendern will, dann darf die Kamera natürlich nicht aktiv sein)

Vorteile des Overlays gegenüber dem Dual Rendering:
- Man spart sich Render Performance, da nur die eine main camera rendern muss
- Es ist recht intuitiv damit zu zielen, da viele andere bekannte Spiele das so machen und "man" sich daran gewöhnt hat

Nachteile des Overlays gegenüber dem Dual Rendering:
- Es ist unrealistisch, dass alles andere auch rangezoomed wird
- Man bekommt auf kompletter Kamerasicht einen Tunnelblick, also sieht man auch nicht mehr was neben einem passiert

@edit: Hier wurde ein Problem beschrieben, das bereits gelöst wurde. Habe es hier entfernt damit es nicht weiter stört, die Posts zum Problem und der Lösung befinden sich trotzdem noch in den folgenden Antworten.

Daher mal eine kleine Umfage:
Welche der beiden Ansätze findet ihr persönlich besser in einem Spiel? 

Vielen Dank :)
Tiwaz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe mal Overlay angekreuzt, weil es realistischer ist, dass man nur durch das Fernrohr sieht. Jeder der schon mal geschossen hat, weiß, dass man nur durch das eine Auge schaut und eben nichts drumherum sieht. Selbst wenn du das 2. Auge offen lässt, würdest du dich auf das eine Zielauge konzentrieren und über das 2. Auge nur verschwommenes Licht bemerken. So wie im Link zu sehen:
https://www.google.de/search?q=battlefield+sniper+view&client=firefox-b&dcr=0&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjM08-23PXZAhXP1qQKHYA6C4cQ_AUICigB&biw=1760&bih=839#imgrc=QpsfCXOPHC0zMM:
Ich würde aber eher zum Overlay tendieren, welches den Außenbereich komplett abdeckt.

Aber eigentlich ist das alles nur ne Designfrage. Beides kann gut oder auch schlecht funktionieren.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zitat

Zum Beispiel, ob es eine Möglichkeit gibt zum Beispiel das oben gezeigte Scope irgendwie von innen durchsichtig zu machen, ohne das Model zu bearbeiten

Ich weiß nicht wie du es aktuell machst, aber ich würde es so wie hier machen (hattest du ja schon gepostet).
Dafür würde ich eine 2. Kamera in eine Rendertextur rendern lassen:
Renderkamera mit https://docs.unity3d.com/550/Documentation/Manual/script-VignettingAndChromaticAberration.html
Spielerkamera mit https://docs.unity3d.com/550/Documentation/Manual/script-DepthOfField.html

Die Rendertextur der 2. Kamera dann als UI-Overlay über dein Modell plazieren. Aus der eckigen Rendertextur kann man übrigens mit:
https://unity3d.com/de/learn/tutorials/topics/user-interface-ui/ui-mask?playlist=17111

Eine runde Textur erzeugen, diese UI-Textur würde ich dann einfach über das Gewehrmodell legen.

Meine Vermutung ist, die Performance der 2. Kamera hängt a ) von den Settings der 2. Kamera ab UND von der Auflösung und dem Typ der eingestellten Rendertextur. Seltsamerweise hat der Depthbuffer lt. meinen Tests keine Auswirkung.

sniper-scope.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 31 Minuten schrieb Zer0Cool:

Ich weiß nicht wie du es aktuell machst, aber ich würde es so wie hier machen (hattest du ja schon gepostet).
Dafür würde ich eine 2. Kamera in eine Rendertextur rendern lassen:
Renderkamera mit https://docs.unity3d.com/550/Documentation/Manual/script-VignettingAndChromaticAberration.html
Spielerkamera mit https://docs.unity3d.com/550/Documentation/Manual/script-DepthOfField.html

Die Rendertextur der 2. Kamera dann als UI-Overlay über dein Modell plazieren. Aus der eckigen Rendertextur kann man übrigens mit:
https://unity3d.com/de/learn/tutorials/topics/user-interface-ui/ui-mask?playlist=17111

Eine runde Textur erzeugen, diese UI-Textur würde ich dann einfach über das Gewehrmodell legen.
 

Ja du beschreibst den Dual Render Ansatz, der funktioniert auch schon sehr gut in meinem Projekt, ich lasse allerdings die RenderTexture auf der Linse im Scope rendern (also über ein Material), dann habe ich das Scope als 3D Objekt, das auch von Licht und Schatten beeinflusst wird + eben die RenderTexture.

Weißt du, oder auch gerne jemand anders, auch wie man das ranzoomen mit der Main Camera richtig umsetzen kann? Vllt suche ich einfach nach den falschen Dingen (oder google zeigt mir alles andere nur nicht mehr an, weil ich schon mal so intensiv nach Dual Rendering gesucht habe ^^) aber mir wird kein Tutorial oder sowas mehr gezeigt, wie man eben einfach durch ein Scope schaut.. Wie in meinem Anfangspost im Screen gezeigt sieht man einfach die komplette Innenseite des Scopes und das weiß schraffierte sollte durchsichtig sein, weiß aber nicht wie ich das machen könnte. Meine Vermutung wäre, dass Spiele wie Battlefield 4 das Scope beim Zoomen austauschen, sodass zwar noch ein Modell angezeigt wird, das aber sehr verzerrt/gestaucht ist, um das oben beschriebene/gezeigte Problem nicht zu haben. 

Habe in Battlefield 4 mal ein Video vom Anvisieren gemacht und meiner Einschätzung nach genau den Frame ausgemacht wo es getauscht wird.
5aaea68cbd094_BF4Scope.thumb.png.24ad3b83e14e28d5871110f44c882697.png
Man sieht die Überblendung zwischen zwei Frames, das noch deutlich besser zu erkennende Scope ist das Scope, das man die ganze Zeit sieht wenn man nicht anvisiert hat. Viel interessanter finde ich aber das Scope, das gerade reinfaded. Wenn man mal die Regler am Scope betrachtet sollte der Regler oben am Scope überhaupt nicht mehr sichtbar sein wenn man sein Auge ans Visier hält, im "neuen" Scope das gerade eingeblendet wird, ist es mehr als deutlich zu erkennen, man kann sogar die Ziffern erkennen. Der Regler rechts an der Seite ist von der normalen Sicht aus ebenfalls nicht zu erkennen und wird erst sichtbar wenn man komplett rangezoomed hat. Auch den dürfte man mit dem Auge direkt am Visier nicht sehen, da er schlichtweg vom Visier selbst verdeckt wird. 
Wie schätzt ihr das ein? 
Was man btw auch sehr schön an den Betonwänden rechts über/neben dem Visier sehen kann ist, dass sich die verschieben, das passiert durch das verringern des FoV bei der Main Camera, also man merkt (wenn man mal darauf achtet) einen deutlichen Zoom der Main Kamera, das ist nicht Dual gerendert. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich vermute mal sie zeigen beim Anvisieren nicht mehr das Modell an, sondern Überblenden das Modell mit einer UI. d.h. das gesamte Gewehr + Zoom ist nun nur noch eine Texture2D. Daher war meine Lösung oben eben auch mit einer UI nicht nicht mit einem 3D-Shader. Damit vermeidet man Clippingeffekte die man sonst bekommen würde, wenn das Modell zu nah an die Kamera gezogen wird ...

Zudem hat es den Vorteil, daß man eine hochauflösende 2D-Textur für Gewehr+Zoom anzeigen kann. Wie du schon sagtest, plötzlich sind die Ziffern oben zu erkennen ...
(Ein kleiner Nachteil ist allerdings, das diese 2D-Textur natürlich nun nicht mehr auf das Umgebungslicht reagiert, man könnte aber eine Abdunklung der Textur anhand des Ambientlights faken https://docs.unity3d.com/ScriptReference/RenderSettings-ambientLight.html)

Btw. dein Gewehr sollte am besten eh über eine 2. Kamera dargestellt werden, dies verhindert, daß das Modell geclippt wird und verhindert auch, daß das Modell durch andere Objekte verdeckt werden kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 22 Minuten schrieb Zer0Cool:

Ich vermute mal sie zeigen beim Anvisieren nicht mehr das Modell an, sondern Überblenden das Modell mit einer UI. 

Btw. dein Gewehr sollte am besten eh über eine 2. Kamera dargestellt werden, dies verhindert, daß das Modell geclippt wird und verhindert auch, daß das Modell durch andere Objekte verdeckt wird.

Ich denke, dass es tatsächlich ein Modell ist und keine UI, da auch das Scope im anvisierten Zustand und die Waffe die man vorne noch sieht von Belichtung beeinflusst wird. Außerdem hat man einen "sway" also wenn man sich dreht zieht sich die Waffe nach und auch beim Recoil verändert sich der Blickwinkel. Da sieht man deutlich, dass es noch 3D ist. Entweder also tatsächlich Modelle oder extrem geschickte UI Effekte aber das denke ich wie gesagt nicht wirklich (wobei ich mich natürlich auch irren kann, intuitiv wäre es für mich jedenfalls mit 3D Modelle leichter umzusetzen). Ich teste das mal später, vielleicht würde es ja z.B. auch reichen das Scope (sollte es sich tatsächlich um ein Modell und nicht um UI handeln) in der z-Achse zu stauchen. Das wäre dann auch ohne Zusatzaufwand mit eigentlich jedem Visier möglich.

Deine zweiten Punkt mit dem Rendern der Waffe mit einer zweiten Kamera hab ich auch schon umgesetzt btw ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 28 Minuten schrieb Tiwaz:

Ich denke, dass es tatsächlich ein Modell ist und keine UI, da auch das Scope im anvisierten Zustand und die Waffe die man vorne noch sieht von Belichtung beeinflusst wird. Außerdem hat man einen "sway" also wenn man sich dreht zieht sich die Waffe nach und auch beim Recoil verändert sich der Blickwinkel. Da sieht man deutlich, dass es noch 3D ist. Entweder also tatsächlich Modelle oder extrem geschickte UI Effekte aber das denke ich wie gesagt nicht wirklich (wobei ich mich natürlich auch irren kann, intuitiv wäre es für mich jedenfalls mit 3D Modelle leichter umzusetzen). Ich teste das mal später, vielleicht würde es ja z.B. auch reichen das Scope (sollte es sich tatsächlich um ein Modell und nicht um UI handeln) in der z-Achse zu stauchen. Das wäre dann auch ohne Zusatzaufwand mit eigentlich jedem Visier möglich.

Deine zweiten Punkt mit dem Rendern der Waffe mit einer zweiten Kamera hab ich auch schon umgesetzt btw ^^

Ja, vielleicht zoomen sie das 3D-Modell auch einfach über die 2. "Waffen-Kamera" ran (FOV der 2. Kamera verkleinern). Ich denke beides ist möglich, aber wenn man eh schon eine 2. Kamera fürs 3D-Modell hat macht es schon Sinn einfach diese für solche Effekte zu verwenden ...

PS:
Ich würde nur einen kleinen Rand um das gezoomte Bild lassen, deine Beispielbilder oben enthalten einen großen schwarzen Rand. Das ist zwar "realistisch" aber für den Spieler wenig von Vorteil und sieht optisch nicht schön aus. Dem Spieler ist mehr geholfen, wenn er mehr vom gezoomten Bild sieht ...
Und wenn du die gezoomte Textur mit "Vignetting" (siehe oben) nach außen abdunkelst hast du auch einen schönen Übergang zum dunklen / schwarzen Rand des Zielfernrohrs.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 28 Minuten schrieb Zer0Cool:

Ja, vielleicht zoomen sie das 3D-Modell auch einfach über die 2. "Waffen-Kamera" ran (FOV der 2. Kamera verkleinern). Ich denke beides ist möglich, aber wenn man eh schon eine 2. Kamera fürs 3D-Modell hat macht es schon Sinn einfach diese für solche Effekte zu verwenden ...


PS:
Ich würde nur einen kleinen Rand um das gezoomte Bild lassen, deine Beispielbilder oben enthalten einen großen schwarzen Rand. Das ist zwar "realistisch" aber für den Spieler wenig von Vorteil und sieht optisch nicht schön aus. Dem Spieler ist mehr geholfen, wenn er mehr vom gezoomten Bild sieht ...
Und wenn du die gezoomte Textur mit "Vignetting" (siehe oben) nach außen abdunkelst hast du auch einen schönen Übergang zum dunklen / schwarzen Rand des Zielfernrohrs.

Hm.. tatsächlich habe ich immer vergessen das FOV der Waffenkamera mit anpassen.. stupid me.. Habe mich schon gefragt warum mir das bisher noch nie aufgefallen ist, damals habe ich aber auch alles mit der Main Camera gerendert, wenn das FOV beider Kameras gleichermaßen angepasst wird passts wieder ;)
 

Was meinst du im PS mit dem großen schwarzen Rand meiner Beispielbilder?
Meinst du das: ?

vor 16 Stunden schrieb Tiwaz:

Scope.png.7cbf2e58d4b9fb8f30787dd056b92551.png

Das ist nämlich eben NICHT Dual Rendering. So sieht es aus, wenn man eben das FOV der Waffenkamera nicht mit anpasst :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jap. Das ist auch nicht so beabsichtigt, deswegen habe ich es gepostet, um Anregungen zu kriegen wie man das verhindern kann :D 

vor 16 Stunden schrieb Tiwaz:

Das weiß schraffierte dürfte von der Kamera aus nicht sichtbar sein.

Ich habe momentan beides implementiert, das Dual Rendering funktioniert sehr gut, das Overlay eher mäßig (der Screenshot ist aus meinem Projekt)

PS: Falls ihr übrigens ein bisschen mehr über den Ansatz mit dem Overlay wisst bzw. der herangezoomten Main Camera, dann lasst es mich gerne wissen.
Zum Beispiel, ob es eine Möglichkeit gibt zum Beispiel das oben gezeigte Scope irgendwie von innen durchsichtig zu machen, ohne das Model zu bearbeiten (hab ich schon versucht, sind aber einige andere Teile im Weg, die man trotzdem sehen würde) oder, ob das überhaupt notwendig ist und man das eigentlich irgendwie anders macht.
Bin sehr gespannt

Das hat sich eben darauf bezogen und wie gesagt, auf dem Screen wird NICHT Dual Rendering benutzt, sondern die Main Camera herangezoomed. Die Lösung zu dem ganzen ist, wie ich jetzt dank deiner Posts rausgefunden habe, dass ich die Waffenkamera auf Original-FOV lasse, also ungezoomed, weswegen es dann extrem gestreckt gerendert wird. Benutze ich bei Main und Waffenkamera dasselbe fov ist das nicht mehr der Fall und es passt alles ^^
Denke damit ist das Thema erledigt und werde das mal aus dem Eingangspost entfernen.


Das hatte allerdings mit der Umfrage selbst nichts zu tun, daher bitte noch abstimmen welchen Ansatz fürs Zooming ihr besser findet, falls noch nicht geschehen. Danke :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...