Wie kann das bilaterale Upsampling in Echtzeitszenarien verbessert werden?

7

Es ist ein bekannter "Standard", bilaterale Hochskalierung zu verwenden, wenn es darum geht, ein Ziel mit niedriger Auflösung und ein Ziel mit höherer Auflösung zu kombinieren.

Ich persönlich habe festgestellt, dass die Verwendung des Basisalgorithmus (mit Gewichten basierend auf Tiefenunterschieden zwischen hoch- und niedrigauflösenden Tiefenwerten) in Situationen, in denen hochauflösende und niedrigauflösende Werte gemischt werden, beispielsweise ein hochauflösendes Objekt in einem niedrigauflösenden Objekt, alles andere als perfekt ist bewirken.

  • Zackige Kanten sind immer noch erkennbar
  • "Lichthöfe" um Kanten erscheinen, wenn die Objekte / Effekte in niedriger Auflösung einen kleineren Bereich auf dem Ziel einnehmen. Damit meine ich Löcher um die Silouhette.

Mir ist klar, dass es keine Möglichkeit gibt, diese Probleme vollständig zu beseitigen, aber gibt es eine Möglichkeit, das bilaterale Upsampling zu verbessern, um einen der beiden oben genannten Punkte teilweise zu verbessern?

Und als Nebenfrage, gibt es einen gleichwertigen Algorithmus oder eine Variante, die billiger ist?

cifz
quelle
Ich hatte noch nie von bilateralen Stichproben gehört. Haben Sie zufällige Links? Es ist anders als bikubische oder bilineare Probenahme, oder?
Alan Wolfe

Antworten:

6

Die Filterung mit nächster Tiefe ist eine Alternative zur Bilaterialfilterung, die speziell für das Upsampling von transparentem Rendering mit niedriger Auflösung entwickelt wurde. Es ist etwas einfacher als die bilaterale Abtastung, da nur eine Abtastung von Ihrer Textur mit niedriger Auflösung erforderlich ist. Es kann jedoch immer noch Probleme geben, insbesondere bei Hochfrequenzgeometrien, die in Ihrem Tiefenpuffer mit niedriger Auflösung nicht gut dargestellt sind.

Auf der SIGGRAPH 2013 präsentierte Bungie einen neuen Ansatz für den Umgang mit Partikeln mit sehr niedriger Auflösung unter Verwendung einer sogenannten "Varianztiefenkarte". Sie finden die Folien hier im PDF- und PPTX-Format.

Ein interessanter Ansatz, der (zumindest meines Wissens) noch nicht angewendet wurde, wäre die Nutzung von MSAA. Die Idee ist, dass Sie Ihren Tiefenpuffer mit voller Auflösung verwenden und ihn dann als 4xMSAA-Tiefenpuffer mit der halben Breite und Höhe aliasieren (oder konvertieren, wenn die API dies nicht zulässt). Anschließend können Sie Ihre Transparentfolien mit niedriger Auflösung mit 4xMSAA auf einem Renderziel mit halber Auflösung rendern und Ihren Tiefenpuffer "4xMSAA" für Tiefenprüfungen verwenden. Zum Hochskalieren greifen Sie dann für jedes hochauflösende Pixel von Ihrem niedrigauflösenden MSAA-Rendering-Ziel auf das entsprechende Teilmuster zu und mischen es darüber. Dies würde Ihnen Tiefenprüfungen mit voller Auflösung, aber Schattierungen mit halber Auflösung ermöglichen (mit Framebuffer-Bandbreite irgendwo zwischen voller Auflösung und halber Auflösung aufgrund von Komprimierung). Der Haken dabei ist, dass Sie dazu programmierbare MSAA-Abtastpunkte benötigen, da Sie für Ihr Rendering mit niedriger Auflösung anstelle des typischen gedrehten Rastermusters ein geordnetes Rasterabtastmuster verwenden möchten. Neuere GPUs (Maxwell von Nvidia, GCN von AMD) unterstützen dies durch Herstellererweiterungen inD3D11 und OpenGL , und dies kann nativ auf Konsolen durchgeführt werden.

MJP
quelle
Hey mjp wie geht es dir? Ich erinnere mich an dich von gamedev.net. Ich habe eine Frage zur tatsächlichen Verwendung von Kurven in Spielen gestellt und ich erinnere mich, dass Sie einige gute Informationen gegeben haben. Hallo!
Alan Wolfe