2017-02-24 1 views
1

Ich entwickle Spiel für Google Daydream und Kameras, die dort verwendet werden, sind wirklich verwirrend - alle ihre Parameter sind auf den gleichen Wert gesetzt, wenn die Szene startet. Anfangs hatte ich ein Problem damit, dass sich weitere Objektnetze gegenseitig durchschnitten. Ich habe herausgefunden, dass die Lösung darin besteht, nearClippingPlane auf einen höheren Wert zu setzen. Dies verursachte das nächste Problem, dass das Cockpit meines Schiffes nicht komplett gerendert wurde, da nearClippingPlane zu weit entfernt war. Ich habe versucht, eine andere Kamera zu erstellen, die nur das Cockpit rendert, aber aufgrund dessen, was ich vorher erwähnt habe, funktioniert es nicht (die Kameras verhalten sich komisch), und wenn ich es durch ein Skript setze, funktioniert es auch nicht richtig.Wie kann man Objekt/Layer in der Nähe von Clipping-Ebenen ignorieren?

Aus diesem Grund muss ich eine Eigenschaft des Objekts ändern, nicht die Kamera. Ich fand this, aber es funktioniert nur für farClippingPlane (sonst wäre es perfekt). Weißt du, wie kann ich nearClippingPlane für ein Objekt/Ebene ignorieren, ohne zweite Kamera hinzufügen?

+0

Ich glaube nicht, was Sie beschreiben, ist möglich. Camera.layerCullDistances lässt ein Objekt vollständig verschwinden, anstatt es abzuschneiden, wenn es zu nah/zu weit kommt. Ich denke, was du suchst, ist eine Kameramusikmaske. Auf diese Weise können Sie nur Objekte in bestimmten Ebenen auf einer bestimmten Kamera rendern. – Jespertheend

+0

@Jespertheend 'Camera.layerCullDistances' erlaubt dir, 'farClipPlane' für bestimmte Laer einzustellen und es wäre perfekt, wenn ich das gleiche mit' nearClipPlane' machen könnte. Ich kann es auch nicht mit der Culling-Maske machen, weil es zwei Kameras benötigt, um zu funktionieren, und aufgrund dessen, was ich vorher geschrieben habe, wird es nicht funktionieren. –

+0

Ich glaube nicht, dass das funktionieren würde, selbst wenn die Einheit eine Möglichkeit hätte, in der Nähe befindliche Objekte auszusortieren. So weit ich weiß, werden mit "Camera.layerCullDistances" nur ganze Objekte ausgeblendet und danach die Ausschnittsbereiche angewendet. Selbst wenn Sie in der Lage wären, die Nahkampfentfernung Ihres Cockpits einzustellen, würde es dies immer noch nicht tun.Ich denke, Ihre beste Wette ist, entweder die nah und fern Clipping-Bereiche zu etwas, das am besten funktioniert, oder versuchen, ein Setup mit mehreren Kameras zu arbeiten. – Jespertheend

Antwort

2

Bezüglich weiterer Gegenstand kämmt clipping, dies wahrscheinlich aufgrund z Bekämpfung geschieht: https://en.wikipedia.org/wiki/Z-fighting

Man beachte, dass standardmäßig Daydream in Unity eine 16-Bit-Tiefenpuffer verwendet wird. Dies ist über die Player-Einstellungen -> andere Einstellungen -> Virtual Reality SDKs -> Daydream.

Wechsel zu einem 32-Bit-Tiefenpuffer könnte können Sie sowohl die Objekte im Cockpit machen und die Objekte weit entfernt einen kleinen nearClippingPlane-Wert. Dies ist jedoch meist eine Milderung, und Sie könnten immer noch Clipping-Probleme bekommen, wenn auch viel kleinere. Außerdem wirkt sich dies auf die Leistung aus, da Sie den von Ihrem Tiefenpuffer verwendeten Speicher und die Bandbreite verdoppeln.

Sie sollten mehrere Kameras verwenden können, wie Sie es versucht haben. Erstellen Sie eine "Cockpit" - und "Environment" -Kamera, wobei die Cockpit-Kamera mit der Depth-Eigenschaft der Kamera als zweites rendert. Dadurch wird die Umgebung zuerst angezeigt und Sie können alle Objekte im Cockpit ignorieren. Dies hat den Vorteil, dass Sie die nahe Ebene ziemlich weit hinausschieben können.

Als nächstes stellen Sie die Cockpit-Kamera so ein, dass sie nur die Tiefe freigibt. Sie können die Cockpit-Kamera so einstellen, dass nur Objekte eingeschlossen werden, die sich möglicherweise in Ihrem Cockpit befinden. Jetzt speichert der Renderer die Umgebung, erlaubt Ihnen jedoch, zwei verschiedene Tiefenbereiche zu verwenden. Beachten Sie, dass dies auch Auswirkungen auf die Leistung von Mobilgeräten hat, da bei mehreren Render-Durchgängen eine zusätzliche Speicherübertragung erforderlich ist. Außerdem müssen Sie den Tiefenpuffer während des Renderns löschen.

Sie möchten möglicherweise separate Layer für Ihre Objekte erstellen, z. "cockpit" und "environment", um zu verhindern, dass Dinge doppelt gerendert werden.

Sample scene with two cameras, note the difference in near/far values

Verwandte Themen