Jump to content
Unity Insider Forum

Render Texture zeitlich versetzt abspielen?


3damass

Recommended Posts

Hallo zusammen,
wir versuchen erfolglos eine render texture versetzt abzuspielen.

Die Idee ist es einen live webcam feed auf einer plane (A) wiederzugeben und eine Kopie davon auf plane (B) zeitlich versetzt zu zeigen.
Wir filmen derzeit mit einer Kamera plane (A) ab, generieren dabei eine render texture und diese wurde dann plane (B) zugewiesen.
Weil das Ganze in real time abläuft schaffen wir es nicht, der render texture einen zetlichen Versatz hinzuzufügen.

Hat jemand eine Idee wie man das Ganze lösen kann?

Vielen dank im Voraus!
Andreas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke ihr müsst die Grafik aus der Rendertexture jedes Frame herausholen und dann entweder im Speicher oder auf Platte abspeichern. Die 2. Plane wird dann über diesen Buffer "animiert" (FIFO-Buffer). Die Rendertextur in Unity ist quasi auch nur ein Memorybuffer der jedes Frame überschrieben wird. Man kann aber aus einer Rendertextur die Texturdaten herausholen und diese dann wie gesagt entweder im Speicher oder auf Platte abspeichern. Beim Vorhalten im Arbeitsspeicher (z.b. in einer FIFO-Queue) kann aber sehr schnell sehr viel Speicher verbraucht werden, da bei einer Rendertextur beispielsweise 2048x2048x4x60 Bytes = 1GByte pro Sekunde (bei 60 Frames) an Daten entstehen können! Daher würde ich die Textur für einen größeren Versatz eher auf die Festplatte herunterschreiben (ggf komprimiert), ich denke wenn es nur um Bruchteile einer Sekunde geht, dann kann man auch versuchen es komplett im Speicher halten. Wenn man die Auflösung der Rendertextur halbiert (1024) und die Textur nur jedes 2. Frame herausholt, dann ist man nur noch bei ca. 125MB pro Sekunde (unkomprimiert).

Hier mal ein Codeschnipsel, wie man eine Rendertextur als PNG-File abspeichern kann:
https://gist.github.com/AlexanderDzhoganov/d795b897005389071e2a

Vermutlich ist es allerdings einfacher den Livecam-Feed als temporäres MP4 zwischenzuspeichern und den MP4 dann auf der 2. Plane abzuspielen. Ich habe aber keine Ahnung, wie ihr den Livecamfeed in ein temporäres MP4 umwandeln könnt (ich weiß ja auch nicht wie ihr den Livecam-Feed einspeist).

Wenn ihr über die Unity Webcam-Api geht liefert, dann liefert euch Unity ja bereits eine MP4-Datei und bei einer MP4-Datei könnt ihr den Abspielzeitpunkt selbst festlegen, da macht die obige Methode überhaupt keinen Sinn. Man würde auf Plane A die Mp4-Datei ab Zeitpunkt X abspielen und auf Plane B ab X-Versatz.
https://docs.unity3d.com/Manual/windowsholographic-videocapture.html

Videoplayer:
https://docs.unity3d.com/Manual/class-VideoPlayer.html

Versatz mit Videoplayer:

// Skip the first 100 frames.
videoPlayer.frame = 100;


 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...