2016-07-28 13 views
0

ich ein Glanzeffekte in iOS tun wollen, sieht wie folgt ausschnell Radial Blur in ios

enter image description here

ich einen Radial Blur-Algorithmus in OpenCV gefunden (https://stackoverflow.com/a/13699826/6545468) , und das Ergebnis war nicht sehr zufrieden stellend

enter image description here

Lichtstrahl "diskret", hängt das endgültige Ergebnis auf der Iterations remap (Zoom), das zeitaufwendig. Und ich habe auch einige OpenGL Shader gefunden, nur ähnliche Implementierungen.

Gibt es also eine Möglichkeit, After Effects CC Radial Schnell Blur in iOS App (glatt und schnell) zu implementieren?

Antwort

0

Mit Blick auf das obere Bild würde ich sagen, Sie haben keine Möglichkeit, so schnell auf ein allgemeines Bild auf keinen Fall zu tun. Dies hängt zwar von der Bildgröße und der Definition von "schnell" ab, also sagen wir, dass es eine Herausforderung wäre, dies unter 1 Sekunde auf einem Bild der Größe 1024x1024 zu zeichnen.

Für ein allgemeines Bild erhalten Sie 2 Prozeduren haben:

erste ist das verblasste Bild N mal neu zu ziehen auf der Leinwand, wo N eine Anzahl von Pixeln, die die größte Offset Wirkung hat. Auf dem oberen Bild bedeutet das wahnsinnig 200 Redraws. Wenn Sie ein System von openGL haben, könnten Sie versuchen zu testen, wie lange es dauern würde, um diese vielen Samples zu zeichnen (ohne irgendeinen Effekt, nur zu einer Textur neu zu zeichnen) und wenn Sie das gewünschte Ergebnis erreichen, könnten Sie versuchen, die tatsächliche Logik zu implementieren. .

Die zweite ist das Abrufen der umgebenden relevanten Abtastwerte für jedes Fragment (Pixel), welches die am häufigsten verwendete Prozedur für die Gauß'sche Unschärfe ist. Dieses Verfahren verwendet normalerweise eine Matrix von Pixeln im Bereich von 7 × 7 bis 11 × 11 und ist immer noch eine langsame und schwere Operation, und der Effekt ist bei großen Bildern nicht sehr verschwommen. In Ihrem Fall sehen wir uns wieder etwa 200x200 Proben an, was insgesamt ein NEIN ist, ich würde es nicht mal versuchen.

Die Dinge können interessant werden, wenn Sie versuchen, die beiden Verfahren zu kombinieren. Sie könnten versuchen, das Eingangsbild zuerst mit der zweiten Prozedur zu verwischen, wodurch die Objekte effektiv um ein paar Pixel vergrößert werden. Dann können Sie (nur für den Glanz) das unscharfe Bild mit dem ersten Verfahren mit reduzierter Anzahl an Proben neu zeichnen. Wenn die Größe der Unschärfe beispielsweise etwa 5 Pixel beträgt, können Sie die Anzahl der Neuzeichnungen um das 2-3-fache verringern, was eine erhebliche Leistungssteigerung darstellt. Dieser Vorgang wird nicht so scharf wie auf dem Bild sein, das Sie haben, aber Sie haben hier Glück: Das zweite Bild, das Sie gepostet haben, macht genau das, was Sie brauchen, um das zu testen. Erstellen Sie einfach eine unscharfe Version des Bildes, das Sie bereits verwenden, und testen Sie, wie viele Samples benötigt werden, um ein schönes Ergebnis zu erzielen.

Es gibt noch einige Optimierungen, die die Qualität des Effekts beeinflussen können oder auch nicht. Wenn Sie eine Gaußsche Unschärfe machen, ist es in der Regel sicher, das Bild ein wenig herunterzusampeln. Eine Skala von 2 pro Dimension reduziert die Anzahl der Fragmente um 4 und ist sicherlich etwas zu versuchen.Ich würde versuchen, die folgenden:

  • das Bild Zeichnen auf Downsampling-Puffer direkt eine Gaußsche Unschärfe unter Verwendung eines linearen Modus auf der
  • Textur Anwendung neu zeichnet einige N Proben für den Glanzeffekt auf dem Downsampling-Puffer
  • neuzeichnen das Ergebnis an den upgesampelten Puffer (Originalgröße) wieder etwas Gaußsche Unschärfe Anwendung
  • das Originalbild über dem resultierenden Schatten zeichnen

Wenn Sie eines dieser tun werden machen sur e, um den Überblick über die Leistung zu behalten. Wenn Sie fertig sind, wäre es schön, wenn Sie die Ergebnisse teilen (selbst wenn Sie scheitern).