DE112022003547T5 - Verschobene Mikronetz-Kompression - Google Patents

Verschobene Mikronetz-Kompression Download PDF

Info

Publication number
DE112022003547T5
DE112022003547T5 DE112022003547.1T DE112022003547T DE112022003547T5 DE 112022003547 T5 DE112022003547 T5 DE 112022003547T5 DE 112022003547 T DE112022003547 T DE 112022003547T DE 112022003547 T5 DE112022003547 T5 DE 112022003547T5
Authority
DE
Germany
Prior art keywords
displacement
values
vertex
shift
microvertex
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112022003547.1T
Other languages
English (en)
Inventor
Marco Salvi
Henry Moreton
Neil BICKFORD
Gregory Muthler
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE112022003547T5 publication Critical patent/DE112022003547T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/10Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • G06T17/205Re-meshing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/20Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/001Model-based coding, e.g. wire frame
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/08Bandwidth reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/21Collision detection, intersection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/36Level of detail
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2219/00Indexing scheme for manipulating 3D models or images for computer graphics
    • G06T2219/20Indexing scheme for editing of 3D models
    • G06T2219/2016Rotation, translation, scaling

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Architecture (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Image Generation (AREA)

Abstract

Ein Algorithmus und ein zugehöriger Satz von Regeln ermöglichen es, dass ein gegebener Polygon-Mikronetztyp immer in der Lage ist, einen stärker komprimierten Mikronetztyp darzustellen. Diese Regeln in Verbindung mit zusätzlichen Beschränkungen für die Reihenfolge, in der die verschobenen Mikronetze codiert werden, ermöglichen verlustbehaftete Kompressionstechniken zur effizienten Speicherung geometrischer Verschiebungen als paralleler Algorithmus, bei dem nur wenig Kommunikation zwischen unabhängig komprimierten verschobenen Mikronetzen erforderlich ist, während gleichzeitig qualitativ hochwertige, wasserdichte (rissfreie) Ergebnisse für Vektorverschiebungen, Dreieckstexturen sowie Strahlen- und Pfadverfolgung sichergestellt werden.

Description

  • Querverweis auf verwandte Anwendungen
  • Diese Anmeldung beansprucht Priorität für die am 16. September 2021 eingereichte vorläufige US-Patentanmeldung Nr. 63/245,155 , deren gesamter Inhalt hier durch Bezugnahme aufgenommen ist,
  • Diese Anmeldung steht im Zusammenhang mit den folgenden Patentanmeldungen, die sich im gemeinsamen Besitz befinden und von denen jede durch Bezugnahme für alle Zwecke einbezogen wird, als ob sie hier ausdrücklich aufgeführt wäre:
  • US-Patentanmeldung Nr. 17946235 eingereicht am 16.9.2022 mit dem Titel Micro-Meshes, A Structured Geometry For Computer Graphics (21-SC-1926US02; 6610-126)
  • US-Patentanmeldung Nr. 17946221 , eingereicht am 16.9.2022 mit dem Titel Accelerating Triangle Visibility Tests For Real-Time (22-DU-0175US01; 6610-124)
  • US-Patentanmeldung Nr. xxxxxx eingereicht am 16.9.2022 mit dem Titel Displaced Micro-meshes for Ray and Path Tracing (22-AU-0623US01/6610-125).
  • Gebiet
  • Die vorliegende Technologie betrifft die Kompression von Polygonnetz-Verschiebungsdaten für Computergrafiken, einschließlich, aber nicht beschränkt auf Strahlen- und Pfadverfolgung. Die vorliegende Technologie bietet einen benutzerdefinierten Kompressionsalgorithmus zur Erzeugung qualitativ hochwertiger, rissfreier Verschiebungs-Mikronetze („DMMs“) für Computergrafiken, der gleichzeitig schnell genug ist, um dynamische Inhalte in modernen Echtzeitanwendungen zu verarbeiten
  • Insbesondere betrifft die hier beschriebene Technologie ein Verfahren zur Berechnung einer komprimierten Darstellung von dichten Dreiecksnetzen, z. B. für die Strahlenverfolgung, und zur Verwendung verlustbehafteter Kompressionstechniken, um geometrische Verschiebungen von Polygonnetzen, z. B. für die Strahlen- und Pfadverfolgung, effizienter zu speichern und gleichzeitig die Wasserdichtigkeit zu erhalten.
  • Hintergrund & Zusammenfassung
  • Da die Genauigkeit des Grafik-Renderings zugenommen hat und die Grafikindustrie große Fortschritte bei der Modellierung des Verhaltens von Licht und seiner Interaktion mit Objekten in virtuellen Umgebungen gemacht hat, besteht nun eine große Nachfrage nach sehr detaillierten, realistischeren virtuellen Umgebungen. Dies hat zu einem enormen Anstieg der Menge an Geometrie geführt, die Entwickler modellieren und abbilden möchten. Die Speicherbandbreite ist jedoch nach wie vor ein Engpass, der die Menge der Geometrie begrenzt, die die Grafikhardware für das Rendering aus dem Speicher holen kann.
  • In der Vergangenheit haben Tessellierungs-Shader das Problem der Speicherbandbreite gelöst, indem sie - im laufenden Betrieb - ein Polygonnetz (siehe 1A, 1B) ohne Überlappungen und ohne Lücken zwischen den geometrischen Formen oder Polygonen erzeugten, um eine zu rasternde und zu rendernde Oberfläche mit einem gewünschten Detailgrad abzudecken. Siehe z. B., Lee et al, „Displaced subdivision surfaces", SIGGRAPH ‚00: Proceedings of the 27th annual conference on Computer graphics and interactive techniques July 2000 Pages 85-94 //doi.org/10.1145/344779.344829; Cantlay, „DirectX 11 Terrain Tesselation", Nvidia (Januar 2011); khronos.org/opengl/wiki/Tessellation#Tessellation_control_shader; Moreton et al, (2001); Moreton, Tesselation and Geometry Shaders: Trends CMU 15-869 (Nvidia Corp. 2011); US 10825230 ; US 9437042 ; US 8860742 ; US 8698802 ; US 8570322 ; US 8558833 ; US 8471852 ; US 20110085736 ; US 7324105 ; US 7196703 ; US 6,597,356 ; US 6738062 ; US 6504537 ; Dudash, „My Tesselation Has Cracks!", Game Developer‘s Conference (2012); Sfarti et al, „New 3D Graphics Rendering Engine Architecture for Direct Tessellation of Spline Surfaces", V.S. Sunderam et al. (Eds.): ICCS 2005, LNCS 3515, pp. 224-231 (2005); N. Pietroni et al, „Almost Isometric Mesh Parameterization through Abstract Domains," IEEE Transactions on Visualization and Computer Graphics, vol. 16, no. 4, pp. 621-635, July-Aug. 2010, doi: 10.1 109/TVCG.2009.96. Bereits 2001 wurde im NVIDIA GeForce3 ein Oberflächentesselator in Hardware implementiert, der eine garantiert wasserdichte Tesselierung und unterschiedliche Detaillierungsgrade (LOD) ohne Überlappung ermöglichte.
  • Ein solches tesselliertes Netz wird als „wasserdicht“ bezeichnet, wenn es keine Lücken zwischen den Polygonen gibt. Das Netz ist nicht „wasserdicht“, wenn - unter der Annahme, dass das Netz ein echtes, in Wasser getauchtes Objekt wäre - Wasser durch Nähte oder Löcher zwischen den geometrischen Formen oder Polygonen, die das Netz bilden, eindringen würde. Selbst winzige Lücken zwischen Polygonen können zu fehlenden Pixeln führen, die in einem gerenderten Bild zu sehen sind. Siehe beispielsweise 2A.
  • Eine Ursache für solche Lücken war die Durchführung von Gleitkommaoperationen in unterschiedlicher Reihenfolge, was nicht immer zu den gleichen Ergebnissen führte. Leider kann die Anordnung von Shader-Berechnungen, um sie für benachbarte Patches identisch zu machen, eine Menge Leistung kosten. T-Sprünge - ein weiteres wasserdichtes Tesselierungsproblem - treten auf, wenn ein Patch geteilt wird, obwohl eine oder mehrere seiner Kanten flach sind. Wenn das Feld, das die flachen Kanten teilt, nicht auf die gleiche Weise geteilt wird, entsteht ein Riss. Siehe 2B; und siehe auch Bunnell, Kapitel 7. Adaptive Tessellation of Subdivision Surfaces with Displacement Mapping, GPU Gems 2 (NVidia 2005).
  • Es war bekannt, dass Risse und Pixelausfälle durch unterschiedliche Tesselierungsgrade, durch die Bildung von T-Verbindungen, durch Berechnungsprobleme und aus anderen Gründen entstehen. Da jedes praktische System die Lage eines bestimmten Vertex mit endlicher Genauigkeit darstellt, liegen die Vertices (für die detaillierte Berechnungs- und Verarbeitungshardware) nicht immer genau auf angrenzenden Segmenten zwischen Polygonen. Obwohl dieses Problem durch die geringere Genauigkeit einiger Hardware-Rasterizer und anderer Grafikhardware verschärft werden kann, besteht es bei jeder Darstellung mit endlicher Genauigkeit, einschließlich IEEE-Gleitkomma.
  • Bisherige Ansätze erforderten oft die Lösung eines komplexen globalen Optimierungsproblems, um die Qualität zu maximieren, ohne Risse zu erzeugen.
  • Die einzige Möglichkeit, eine fehlerfreie Darstellung zu gewährleisten, besteht in der präzisen Darstellung der Beziehungen; Eckpunkte, die logisch gleich sind, müssen exakt gleich sein. Siehe Moreton et al. (2001). Darüber hinaus müssen Echtzeit-Grafikanwendungen häufig neu generierte Daten (z. B. die Ausgabe einer Physiksimulation) pro Frame komprimieren, bevor sie gerendert werden können. Um den Anforderungen aktueller Grafiksysteme gerecht zu werden, muss man also sehr vorsichtig und gleichzeitig schnell sein, wenn es um die Verarbeitung von Daten geht, die einer Flut von Informationen gleichkommen.
  • Die Leistung des Raytracing skaliert gut mit zunehmender geometrischer Komplexität, was es zu einem guten Kandidaten für die Visualisierung solcher komplexeren und realistischeren Umgebungen macht. Beispielsweise ist es möglich, mit Raytracing die Menge der Geometrie, die eine Szene modelliert, um den Faktor 100 zu erhöhen, ohne dass sich die Leistung wesentlich verschlechtert (beispielsweise könnte sich die Tracing-Zeit verdoppeln - aber im Allgemeinen nicht annähernd verhundertfachen).
  • Das Problem: Obwohl die Echtzeit- oder echtzeitnahe Verarbeitung einer großen Anzahl von Dreiecken inzwischen praktikabel ist, können die Beschleunigungsdatenstrukturen, die zur Unterstützung der Verfolgung einer derartig komplexen Geometrie erforderlich sind, linear mit der Menge der Geometrie anwachsen, und die Erstellung könnte eine Zeitspanne in Anspruch nehmen, die ebenfalls linear mit der Menge der Geometrie steigt. Komplexe 3D-Szenen, die aus Milliarden von Dreiecken bestehen, lassen sich nur schwer im Speicher speichern und in die Rendering-Hardware übertragen. Ziel ist es, eine drastische Erhöhung der Geometriemenge zu ermöglichen und gleichzeitig einen proportionalen Anstieg der Zeit, die für den Aufbau einer Beschleunigungsdatenstruktur benötigt wird, oder des Platzes, der für die Speicherung der Beschleunigungsdatenstruktur im Speicher benötigt wird, zu vermeiden.
  • In der Vergangenheit wurden bereits Arbeiten zur Kompression von Polygonnetzen für die Strahlen- und Pfadverfolgung durchgeführt. Siehe beispielsweise Thonat et al, Tessellation-free displacement mapping for ray tracing, pp 1-16 ACM Transactions on Graphics Volume 40 Issue 6 No.: 282 (Dezember 2021) doi.org/10.1145/3478513.3480535, //dl.acm.org/doi/abs/10.1145/3478513.3480535; Wang et al, View-dependent displacement mapping, ACM Transactions on Graphics Volume 22 Issue 3, Juli 2003 pp 334-339, doi.org/10.1145/882262.882272; Lier et al, „A high-resolution compression scheme for ray tracing subdivision surfaces with displacement", Proceedings of the ACM on Computer Graphics and Interactive Techniques Volume 1 Issue 2 August 2018 Article No.: 33 pp 1-17, doi.org/10.1145/3233308; Chun et al, „Multiple layer displacement mapping with lossless image compression", International Conference on Technologies for E-Learning and Digital Entertainment Edutainment 2010: Entertainment for Education. Digital Techniques and Systems pp 518-528; Szirmay-Kalos et al, Displacement Mapping on the GPU-State of the Art, Computer Graphics Forum Volume 27, Issue 6 September 2008 Pages 1567-1592.
  • Es gibt jedoch noch viel Raum für Verbesserungen bei der Darstellung von Polygonnetzen für Anwendungen, einschließlich, aber nicht beschränkt auf Strahlen- und Pfadverfolgung, in kompakteren, komprimierten Formen, die „Wasserdichtigkeit“ erreichen. Insbesondere gibt es mehrere Gründe, warum eine konsistente Netzgenerierung und -darstellung nicht einfach ist. Beispielsweise kann es bei der Vorwärtsdifferenzierung zu Rundungsfehlern kommen, wenn eine lange Folge von Vertices eines mosaikartigen Netzes ausgewertet wird. Dieses Problem wird manchmal noch verschärft, wenn der Kompressor und der Dekompressor unterschiedliche Berechnungshardware verwenden. Selbst wenn die Implementierungen identisch wären, könnten die gleichen Eingaben mit unterschiedlichen Rundungsmodi zu ungleichen Ergebnissen führen. Wenn verschiedene Patches unabhängig voneinander verarbeitet werden, ist es einfach nicht möglich, die Dinge während der Arbeit abzugleichen oder kleine Unstimmigkeiten im Nachhinein zu bereinigen - vielmehr sollte eine konsistente Dreiecksnetzdarstellung, Kompression, Dekompression und Verarbeitung von Anfang an als Teil des Entwurfs erfolgen. Es ist wichtig, sich darüber im Klaren zu sein, dass es keine Fehler oder Inkonsistenzen geben darf - nicht einmal ein einziges Bit -, wenn man eine Garantie für ein perfektes, wasserdichtes Rendering haben will. Siehe Moreton et al, Watertight Tessellation using Forward Differencing, EGGH01: SIGGRAPH/Eurographics Workshop on Graphics Hardware (2001).
  • Kurzbeschreibung der Zeichnungen
    • 1A und 1B zeigen beispielhafte Mikronetze.
    • 2A und 2B zeigen beispielhafte Risse in Mikronetzen.
    • 3 zeigt eine beispielhafte Tabelle, die Bits pro Dreieck zeigt.
    • 4 zeigt eine beispielhafte Tabelle mit beispielhaften Tesselierungsstufen.
    • 5 zeigt ein Beispiel eines Spektrums von Tesselierungsstufen von mehr bis weniger komprimiert von links nach rechts.
    • 6 zeigt einen beispielhaften unkomprimierten Verschiebungsblock.
    • 7 zeigt ein Prismatoid-konvexes Hüllenmodell für ein verschobenes Mikronetz.
    • 8 zeigt eine beispielhafte Zusammenfassung für Vorhersage und Korrektur.
    • 9 zeigt einen beispielhaften Codierer-Vorhersage- und Korrekturprozess.
    • 10 zeigt einen beispielhaften Decodierungsprozess.
    • 10A zeigt ein beispielhaftes unterteiltes Teildreieck.
    • 11 zeigt eine beispielhafte Anwendung von vorzeichenbehafteten Korrekturen mit Tesselierungsstufe.
    • 12 zeigt ein beispielhaftes generisches Verschiebungsblockformat.
    • 13 zeigt ein beispielhaftes detailliertes Verschiebungsblockformat.
    • 14 zeigt einen beispielhaften Kompressionsprozess.
    • 15 zeigt einen beispielhaften Zahlenbereich, der ein Korrekturproblem für den Fall p=100, r=1900, s=0, b=7 darstellt.
    • 16 zeigt einen Beispiel-Zahlenbereich, der den Korrekturproblemfall p=100, r=1900, s=6, b=3 darstellt.
    • 17 zeigt eine Beispielverteilung der Differenzen zwischen Referenz- und Vorhersagewerten mod 2048 für ein bestimmtes Teildreieck, eine Korrekturstufe und einen Vertextyp. Da sich die Differenzen um 0 und 2047 ansammeln, kann die Verwendung des Wraparound-Verhaltens hier eine höhere Präzision ermöglichen.
    • 18 zeigt, wie die Auswahl von Verschiebungen, die den gesamten Bereich möglicher Differenzen abdecken, ohne Berücksichtigung des Wrapping zu großen Fehlern führen kann (Abstand zwischen jeder gestrichelt-gepunkteten Linie und der ihr am nächsten liegenden vertikalen durchgezogenen Linie).
    • 19 - Auf den Bereich -1024...1023 umgebrochene Verschiebungsdifferenzen. Die umgebrochenen Werte sammeln sich um 0 an, und ihr Minimum und Maximum ergeben Verschiebungen, so dass die darstellbaren Differenzen aus verschobenen Korrekturen (durchgezogene vertikale Linien) näher an den Differenzen liegen, wenn man die Abstandsmetrik von ℤ/211 ℤ verwendet (wobei zu beachten ist, dass dies nicht die Metrik ist, die letztendlich für die Korrektur verwendet wird), was die Qualität verbessert.
    • 20A, 20B und 20C zeigen verschiedene Situationen, in denen Dreiecke aneinandergrenzen.
    • 21, 21A, 21B zeigen einen beispielhaften Pseudocode.
    • 22 zeigt einen beispielhaften Kompressionsalgorithmus.
    • 23A-23F zeigen eine Flipchart-Animation, die die Unterteilung eines Basisdreiecks zeigt.
    • 24 zeigt ein Beispielsystem.
    • 25A, 25B und 25C zeigen verschiedene Systemkonfigurationen.
    • 26 zeigt eine beispielhafte Raytracer-Hardware-Implementierung.
  • Detaillierte Beschreibung der nicht-einschränkenden Ausführungsformen
  • Die hier vorgestellten Ausführungsformen verwenden ein schnelles Kompressionsverfahren, das die parallele Codierung von Teildreiecken eines Dreiecksnetzes mit minimaler Synchronisierung ermöglicht und gleichzeitig qualitativ hochwertige Ergebnisse liefert, die frei von Rissen sind.
  • Die Einführung von verschobenen Mikronetzen (DMMs) füllt die oben genannte Lücke, indem sie zur Lösung des Problems der Speicherbandbreite beiträgt. Siehe die Mikronetz-Patentanmeldungen. Qualitativ sehr hochwertige, hochauflösende Inhalte sind oft sehr kohärent oder lokal ähnlich. Zur Erzielung drastisch erhöhter geometrischer Mengen können wir ein µ-Netz (auch „Mikronetz“) verwenden - eine strukturierte Darstellung der Geometrie, die die Kohärenz für Kompaktheit (Kompression) und ihre Struktur für effizientes Rendering mit intrinsischem Detailgrad (LOD) und Animation nutzt. Mikronetze sind ein leistungsfähiges Konzept, das zu erheblichen Geschwindigkeits- und Effizienzsteigerungen führen kann. Ein großer Vorteil der Mikronetz-Verfolgung ist beispielsweise die Möglichkeit, große Teile des Netzes schnell und effizient zu entfernen. Die µ-Netzstruktur kann beispielsweise verwendet werden, um einen starken Anstieg der Kosten für die Konstruktion der BegrenzungsvolumenHierarchie (BVH) (Zeit und Raum) zu vermeiden und gleichzeitig eine hohe Effizienz zu gewährleisten. Bei der Rasterisierung kann die dem µ-Netz innewohnende LOD verwendet werden, um Primitive in der richtigen Größe zu rastern.
  • Während die Anwendung einer Verschiebungsabbildung auf Mikronetze eine effiziente Darstellung von hochkomplexen 3D-Objekten ermöglicht, können komprimierte numerische Darstellungen für die Verschiebungskarte bei unvorsichtiger Implementierung Probleme mit der „Wasserdichtigkeit“ verursachen. Insbesondere kann jede verlustbehaftete Kompression, die zur Darstellung von lokalisierten numerischen Darstellungen der Verschiebungskarte verwendet wird, bei unsachgemäßer Handhabung zu Rissen im visualisierten/gerenderten Mikronetz führen.
  • Beispielhafte Ausführungsformen bieten einen benutzerdefinierten Kompressionsalgorithmus zur Erzeugung qualitativ hochwertiger, rissfreier verschobener Mikronetze („DMMs“), der gleichzeitig schnell genug ist, um dynamische Inhalte in modernen Echtzeitanwendungen zu verarbeiten. Mit der hier vorgestellten Technologie gelingt es, ein rissfreies Mikronetz in Form einer strukturierten Darstellung bereitzustellen, die es ermöglicht, es in sehr kompakten, komprimierten Formaten zu speichern. In einigen Beispielimplementierungen wird der durchschnittliche Speicherplatz pro Dreieck von typischerweise ~100 Bits pro Dreieck auf eine Größenordnung von nur 1 oder 2 Bits pro Dreieck reduziert.
  • In einer Ausführungsform wird eine solche Kompression durch ein neuartiges hierarchisches Codierungsschema erreicht, das linear interpolierte Vertex-Verschiebungsbeträge zwischen minimalen und maximalen Dreiecken verwendet, die ein Prisma bilden. Um die oben genannten Anforderungen zu erfüllen, haben wir ein schnelles Kompressionsverfahren entwickelt, das die parallele Codierung von Teildreiecken mit minimaler Synchronisierung ermöglicht und gleichzeitig qualitativ hochwertige, rissfreie Ergebnisse liefert.
  • In einer Ausführungsform können Verschiebungsbeträge in einem flachen, unkomprimierten Format gespeichert werden, so dass beispielsweise auf einen vorzeichenlosen normalisierten Wert (wie UNORM11) für jeden Mikrovertex direkt zugegriffen werden kann. Die Verschiebungsbeträge können auch in einem neuen Kompressionsformat gespeichert werden, das einen Vorhersage- und Korrekturmechanismus verwendet.
  • Eine Ausführungsform unseres Kompressionsalgorithmus schränkt die Korrekturbitbreiten so ein, dass die Menge der mit einem bestimmten µ-Netz-Typ darstellbaren Verschiebungswerte eine strenge Obermenge aller Werte ist, die mit einem stärker komprimierten µ-Netz-Typ darstellbar sind. Indem der Codierer die µ-Netz-Typen von der höchsten zur niedrigsten Kompression ordnet, können wir die Teildreiecke direkt in der Reihenfolge des Kompressionsverhältnisses codieren, indem wir ein Vorhersage- und Korrekturschema (P&C) verwenden, beginnend mit dem am stärksten komprimierten µ-Netz-Typ, bis ein gewünschtes Qualitätsniveau erreicht ist. Dieses Schema ermöglicht eine parallele Codierung bei gleichzeitiger Maximierung des Kompressionsverhältnisses und ohne die Einführung nicht übereinstimmender Verschiebungswerte entlang von Kanten, die von Teildreiecken gemeinsam genutzt werden.
  • Zu den weiteren Aspekten gehören die Bestimmung der Bedingungen, die erfüllt sein müssen, um eine rissfreie Kompression zu gewährleisten, ein schneller Codierungsalgorithmus für ein einzelnes Teildreieck unter Verwendung des Vorhersage- und Korrekturschemas, ein Kompressionsschema für Netze, die eine einheitliche Tessellierungsrate aufweisen (d. h. alle Basisdreiecke enthalten die gleiche Anzahl von µ-Dreiecken), Erweiterungen des Kompressors für adaptiv tessellierte Dreiecksnetze und Techniken, die Wraparound-Berechnungsmethoden zur Steigerung der Kompressionsleistung nutzen.
  • Eine Ausführungsform sieht eine Reihe von Regeln für die DMM-Korrektur und die Bitbreiten für die Verschiebung vor, die es ermöglichen, dass ein bestimmter Mikronetztyp immer in der Lage ist, einen stärker komprimierten Mikronetztyp darzustellen. Diese Regeln ermöglichen in Verbindung mit zusätzlichen Einschränkungen hinsichtlich der Reihenfolge, in der die DMMs codiert werden, ein Kompressionsschema als parallelen Algorithmus, bei dem nur wenig Kommunikation zwischen den unabhängig voneinander komprimierten DMMs erforderlich ist und dennoch qualitativ hochwertige, rissfreie Ergebnisse garantiert werden können. In einer Ausführungsform wandelt die hier beschriebene Technologie eine zuvor globale Optimierung in eine lokale Optimierung um, die eine parallele, rissfreie Kompression von DMMs ermöglicht, wobei zur Kompressionszeit nur sehr wenig Kommunikation zwischen den Dreiecken erforderlich ist.
  • Beim Rendering mit Daten aus einer komprimierten Darstellung müssen wir in der Lage sein, effizient auf die benötigten Daten zuzugreifen. Beim Rendern eines Pixels können wir die zugehörigen Texel direkt adressieren, indem wir die Speicheradresse des komprimierten Blocks berechnen, der die benötigten Texeldaten enthält. Texel-Kompressionsverfahren verwenden eine Kompression mit fester Blockgröße, die eine direkte Adressierung von Texelblöcken ermöglicht. Bei der Kompression von Verschiebungskarten (siehe unten) wird in einer Ausführungsform eine Hierarchie von Blöcken fester Größe mit komprimierten Codierungen darin verwendet.
  • Weitere neue Funktionen sind:
    • • Ein robuster Algorithmus mit konstanter Zeit für die Suche nach der nächstmöglichen Korrektur. Es wird ein Algorithmus verwendet, um die Korrektur zu finden, die den decodierten Wert so nah wie möglich an einen Referenzwert bringt. Dies erweist sich als knifflig, da die vorzeichenerweiterte und verschobene Korrektur zur Vorhersage in der Gruppe der ganzen Zahlen modulo 2048 addiert wird, die Fehler jedoch ohne Umbruch berechnet werden (und visuell erscheinen).
    • • Verbesserung der Berechnung von Verschiebungswerten durch Verwendung von Wrapping. In manchen Fällen können wir die erforderlichen Verschiebungen reduzieren und in Blöcken, in denen sich die Korrekturen um 0 herum gruppieren, effektiv einige zusätzliche Bits an Präzision erhalten.
    • • Verwendung von Verschiebungsbereichen in der Codierungserfolgsmetrik. Wir können jedem Vertex eine Wichtigkeit zuweisen; Regionen mit höherer Wichtigkeit neigen dazu, qualitativ hochwertigere Formate zu verwenden, während Regionen mit geringerer Wichtigkeit dazu neigen, qualitativ schlechtere Formate zu verwenden.
  • Rissfrei-Garantie
  • 2A und 2B zeigen beispielhafte Netze, die Risse aufweisen, d. h. sichtbare Nähte zwischen den Innenkanten des Netzes. Die Vertices benachbarter Dreiecke sollten sich entlang einer gemeinsamen Kante an der gleichen Position befinden, aber manchmal sind sie versetzt, so dass sie sich nicht an der gleichen Position befinden. Zwei benachbarte Dreiecke sollten eine gemeinsame Kante haben, aber die Vertices dieser Kante haben abweichende Daten. Bei der Verwendung herkömmlicher Netze ist in der Regel gewährleistet, dass die inneren Kanten nicht brechen, aber das ist nicht unbedingt der Fall, wenn Mikronetze mit Verschiebungsabbildung verwendet werden. In einem solchen Kontext könnte jede Kante zwischen benachbarten Mikronetzen potenziell brechen.
  • Eine häufig verwendete allgemeine Lösung für Rissbildung besteht darin, sicherzustellen, dass die Hardware oder der Shader dieselben Eingabedaten für gemeinsame Eckpunkte und gemeinsame Kanten verwendet. Es ist jedoch bekannt, dass Verschiebungs-Offsets oder Unterschiede entlang gemeinsamer Kanten leicht unterschiedliche oder variierende Werte erfassen, was zu Rissbildungs-Artefakten führen kann. Dies kann vor allem dann der Fall sein, wenn auf die numerischen Werte der gemeinsam genutzten Vertices und Kanten zugegriffen wird und diese lokal/unabhängig bestimmt werden, z. B. auf einer zufällig angeordneten Basis und nicht gemeinsam und/oder in einer bestimmten Reihenfolge.
  • Die beispielhaften, nicht einschränkenden Ausführungsformen hierin bieten trotz solcher Herausforderungen Garantien für Rissfreiheit und Wasserdichtigkeit.
  • DMM-Kompression
  • Bei der Beschreibung sehr detaillierter Geometrien ist es wichtig, dass die Beschreibung so kompakt wie möglich ist. Die Realisierbarkeit detaillierter Geometrien für Echtzeit-Computergrafiken hängt davon ab, dass sie direkt von einer kompakten Darstellung aus gerendert werden können. Die oben erwähnten mitanhängigen gemeinsamen „Mikronetz“-Patentanmeldungen beschreiben die Einbindung von Verschiebungskarten (DMs) in eine µ-Netzdarstellung. Da es sich bei den DMs um hochwertige µ-Netzkomponenten handelt, können sie unter Ausnutzung der ihnen innewohnenden Kohärenz komprimiert werden. DMs können als Repräsentanten von Daten betrachtet werden, die mit Vertices verbunden sind. Diese Datenklasse kann so verstanden werden, dass sie sowohl verlustfreie als auch verlustbehaftete Kompressionsverfahren erfordert. Während ein verlustfreies Schema eine Eingabe exakt darstellen kann, darf ein verlustbehaftetes Schema eine Eingabe bis auf eine bestimmte Toleranz annähern. Die Tatsache, dass ein System verlustbehaftet ist, bedeutet, dass Daten verloren gehen - was höhere Kompressionsraten und kompaktere Datendarstellungen ermöglichen sollte. Wie bereits erwähnt, besteht das Problem jedoch nicht (nur) darin, sicherzustellen, dass der Dekompressor die komprimierten Daten auf deterministische Weise wiederherstellt - es wird zusätzlich durch die Notwendigkeit kompliziert, dieselben (Bit-für-Bit-)Verschiebungswerte wiederherzustellen, wenn die Eckpunkte auf einer gemeinsamen Mosaikkante zwischen zwei verschiedenen Polygonen liegen.
  • Verlustbehaftete Verfahren können anzeigen, wo eine ungenaue Codierung stattgefunden hat oder welche Proben nicht verlustfrei codiert werden konnten.
  • Verschiebungsblockspeicher
  • In einer Ausführungsform werden die Netzverschiebungsinformationen in einer Reihe verschiedener komprimierter Formate gespeichert, die es ermöglichen, die Mikrodreiecke mit so wenigen Bits wie möglich zu beschreiben.
  • In einer beispielhaften Ausführungsform weist das Mikronetz ein Netz aus Basisdreiecken auf, die an ihren jeweiligen Vertices zusammengenäht oder verbunden sind. Diese Basisdreiecke können als „API“-Basisdreiecke bezeichnet werden, da sie jeweils drei Vertices des Typs definieren, der von einem herkömmlichen Vertex-Shader oder Raytracer verarbeitet werden kann. In einer Ausführungsform wird das Basisdreieck selbst jedoch nicht abgebildet, gerastert oder anderweitig visualisiert und dient stattdessen als Plattform für ein rekursiv unterteilbares verschiebungsabgebildetes Mikronetz. Dieses Mikronetz wird als regelmäßiges Netz von 2n × 2n gebildet (wobei n eine beliebige ganze Zahl ungleich Null ist), wobei jede weitere Mosaikstufe jedes Teildreieck der vorherigen Stufe in vier (4) kleinere Teildreiecke gemäß einem baryzentrischen Gitter und einer Raumfüllkurve unterteilt. Siehe Tabelle der 4. In diesem Beispiel sind auf höheren Tesselierungsstufen mehr Teildreiecke innerhalb des Basisdreiecks definiert und bieten somit einen höheren Detaillierungsgrad. Siehe 5.
  • In Ausführungsbeispielen wird für jeden Mikrovertex des Mikronetzes ein Verschiebungswert gespeichert. Diese Verschiebungswerte werden in Verschiebungsblöcken gespeichert, wie in 6 dargestellt. Die Verschiebungsblöcke, in denen die Verschiebungswerte gespeichert werden, haben eine feste Größe, die vom Speichersubsystem des Grafiksystems und der Größe des Speicherblockverbrauchs der Grafikhardware abhängt. Beispielsweise sind in einer Ausführungsform alle Verschiebungswerte für alle Vertices eines Teildreiecks so konfiguriert, dass sie in eine einzige Cacheline passen (z. B. ist in einem Beispiel eine volle Cacheline 128 Byte und eine halbe Cacheline 64 Byte groß).
  • In einer Ausführungsform ist aufgrund der Art und Weise, wie die Verschiebungswerte konfiguriert sind, keine Kompression erforderlich, um Verschiebungswerte für niedrigere Tesselierungsstufen in eine einzige Cacheline einzupassen. Wie 6 zeigt, sind die unteren Tesselierungsstufen weniger komprimiert - und ihre Verschiebungsblöcke können den vollen Präzisionswert für jeden Vertex enthalten. Siehe zusammenfassende Tabelle unten:
    Basisdreieck U Vertex-Verschiebung 11-Bit UNORM
    Basisdreieck V Vertex-Verschiebung 11-Bit UNORM
    Basisdreieck W Vertex-Verschiebung 11-Bit UNORM
    Stufe 1 Vertex-Verschiebungen 3 zusätzliche 11-Bit-UNORMs
    Stufe 2 Vertex-Verschiebungen 9 zusätzliche 11-Bit-UNORMs
    Stufe 3 Vertex-Verschiebungen 30 zusätzliche 11-Bit-UNORMs
  • Siehe beispielhaften unkomprimierten Verschiebungsblock der 6. Es ist zu beachten, dass dieser Beispiel-Verschiebungsblock alle Verschiebungswerte in der obigen Tabelle für die rekursiven Tesselierungsstufen 0, 1, 2 und 3 im Bereich von ½ Cacheline enthält. Beispielhafte Ausführungsformen speichern Verschiebungswerte für mehrere Tesselierungsstufen 0-3 gleichzeitig, um der Echtzeit-Hardware die Möglichkeit zu geben, Teildreiecke auszuwählen und zwischen verschiedenen Detaillierungsgraden „im Vorübergehen“ zu wählen, ohne dass zusätzlicher Speicherplatz oder Zugriffe erforderlich sind.
  • Verschiebungswerte mit „voller“ Präzision werden als UNORM11 dargestellt
  • 7 ist ein beispielhaftes konvexes Prismatoid-Hüllenmodell, das den Eckpunkten des Polygonnetzes Verschiebungswerte zuweist, die zwischen dem maximalen und dem minimalen Dreieck interpoliert werden, wobei ein Bereich von 0 bis 1 verwendet wird (mit Vorspannung und Skalierung, die auf das gesamte Netz des Basisdreiecks angewendet werden, z. B, um das maximale Dreieck zu definieren, wobei das minimale Dreieck in einer Ausführungsform als die ebene Fläche des Basisdreiecks definiert ist, obwohl das Basisdreieck zwischen dem minimalen und dem maximalen Dreieck oder außerhalb davon liegen oder sogar das minimale und/oder maximale Dreieck schneiden könnte, z. B. wenn die Vorspannungen an verschiedenen Vertices unterschiedliche Vorzeichen haben). Beispielsweise kann der Bereich zwischen dem minimalen und dem maximalen Dreieck mit einer angemessenen Auflösung unter Verwendung von 11 Bits definiert werden, wobei 211 oder 2048 inkrementelle Positionen für die lineare Interpolation zur Verfügung stehen und eine sehr kompakte vorzeichenlose normalisierte UNORM11-Zahlendarstellung möglich ist. „UNORM“ bedeutet, dass die Werte vorzeichenlose Ganzzahlen sind, die in Fließkommazahlen umgewandelt werden. Der maximal mögliche darstellbare Wert wird zu 1,0 und der minimal darstellbare Wert wird zu 0,0. Beispielsweise wird der Binärwert 2047 in einer UNORM11 als 1,0 interpretiert. Andere UNORMs oder andere numerische Darstellungen sind ebenfalls möglich.
  • So können beispielsweise die Verschiebungsbeträge in einem flachen, unkomprimierten Format gespeichert werden, in dem die UNORM11-Verschiebung für jeden µ-Vertex direkt abgerufen werden kann.
  • Mit zunehmender Tesselierungsstufe steigt jedoch auch die Anzahl der Mikrovertices, so dass in einer einzigen Cacheline bald kein Platz mehr ist, um die entsprechenden Verschiebungswerte in UNORM11 zu speichern. Siehe Tabelle in 4. Für höhere Tesselierungsstufen verwenden wir ein komprimiertes Format, das eine Korrektur eines vorhergesagten Wertes codiert und übermittelt, die eine Prädiktorschaltung innerhalb des Decoders basierend auf den ihm bereits vorliegenden Informationen bestimmen kann. Solche Verschiebungsbeträge können also auch in einem Kompressionsformat gespeichert werden, das einen Vorhersage-und Korrekturmechanismus (P&C) verwendet.
  • Verschiebungskompression mit Vorwärtsdifferenzierung („Vorhersage- und Korrektur“)
  • Der P&C-Mechanismus stützt sich in einem Ausführungsbeispiel auf den rekursiven Unterteilungsprozess, der zur Bildung eines µ-Netzes verwendet wird. Für das Basisdreieck wird ein Satz von Basisankerpunkten festgelegt. Auf jeder Unterteilungsstufe werden neue Vertex-Verschiebungswerte gebildet, indem die Verschiebungswerte von zwei benachbarten Vertices in einer höheren Unterteilungsstufe gemittelt werden. Dies ist der Schritt der Vorhersage: Es wird vorhergesagt, dass der Wert der Durchschnitt der beiden benachbarten Vertices ist.
  • Im nächsten Schritt wird diese Vorhersage korrigiert, indem sie nach oben oder unten verschoben wird, um die richtige Position zu erreichen. Wenn diese Bewegungen klein sind oder verlustbehaftet gespeichert werden können, kann die Anzahl der Bits, die zur Korrektur der Vorhersage verwendet werden, kleiner sein als die Anzahl der Bits, die zur direkten Codierung benötigt werden. Die Bitbreite der Korrekturfaktoren ist für jede Stufe variabel.
  • Genauer gesagt wird für die Vorhersage und Korrektur ein Satz von Basisanker-Verschiebungen für das Basisdreieck festgelegt, wie in 6 gezeigt. Bei jedem Unterteilungsschritt zur nächsthöheren Tesselierungsstufe werden die Verschiebungsbeträge für jeden neuen Mikrovertex vorhergesagt, indem die Verschiebungsbeträge der beiden benachbarten (Mikro-)Vertices in der niedrigeren Stufe gemittelt werden. Bei diesem Vorhersageschritt wird der Verschiebungsbetrag als Durchschnitt der beiden (zuvor erhaltenen oder zuvor berechneten) benachbarten Verschiebungsbeträge vorhergesagt: disp _ amount _ prediction = ( disp _ amount _ v 0 + disp _ amount _ v 1 + 1 ) / 2
    Figure DE112022003547T5_0001
  • Es sei darauf hingewiesen, dass der Codierer dem Decoder die Verschiebungen des Basisankers mitteilt und dass der Decoder bei der rekursiven Unterteilung des Basisdreiecks in immer tiefere Unterteilungsstufen (die zu immer höheren Tesselierungsstufen führen) bereits die Verschiebungswerte der benachbarten Mikrovertices berechnet hat, die somit für die Berechnung (durch lineare Interpolation) der Verschiebungswerte für neue Zwischen-Mikrovertices zur Verfügung stehen.
  • Natürlich ist der tatsächliche Verschiebungswert einer Mikrospitze nicht notwendigerweise derselbe wie der ihrer unmittelbaren Nachbarn - das Mikronetz ist in einer Ausführungsform so konfiguriert, dass jedes Mikrodreieck eine unabhängige Ausrichtung haben kann, was bedeutet, dass seine drei Mikrospitzen unabhängig voneinander definierte Verschiebungswerte haben können. Wie in einem typischen Vorwärtsdifferenzierungssystem berechnet der Codierer auch eine skalare Korrektur der Vorhersage und übermittelt sie an den Decoder. Mit anderen Worten: Der Codierer berechnet die Vorhersage und vergleicht sie dann mit dem tatsächlichen Verschiebungswert des Mikrovertex. Siehe 8 und 9. Aus diesem Vergleich ermittelt der Codierer ein Delta (Differenz) oder eine „Korrektur“, die er an den Decoder weitergibt. Der Decoder (siehe 10) berechnet die Vorhersage selbständig aus den ihm bereits vorliegenden Informationen und wendet dann die vom Codierer erhaltene Korrektur an, um den vorhergesagten Wert anzupassen. In diesem Fall werden die Verschiebungswerte für die Vertices d(4) und d(7) des Mikrodreiecks (siehe 10A) wie folgt berechnet: d ( 4 ) = ( d ( 2 ) + d ( 1 ) + 1 ) / 2 + Korrektur ( 4 )
    Figure DE112022003547T5_0002
    d ( 7 ) = ( d ( 5 ) + d ( 3 ) + 1 ) / 2 + Korrektur ( 7 ) .
    Figure DE112022003547T5_0003
  • Der nächste Schritt, der sowohl vom Codierer als auch vom Decoder ausgeführt wird, besteht also darin, den vorhergesagten Verschiebungsbetrag mit einer skalaren Korrektur pro Vertex zu korrigieren, wobei der Verschiebungsbetrag nach oben oder unten verschoben wird, um den endgültigen Verschiebungsbetrag zu erreichen. Wenn diese Bewegungen klein sind oder verlustbehaftet gespeichert werden können, kann die Anzahl der Bits, die zur Korrektur der Vorhersage verwendet werden, kleiner sein als die Anzahl der Bits, die zur direkten Codierung benötigt werden. In der Praxis ist es wahrscheinlich, dass für höhere Unterteilungsstufen aufgrund der Selbstähnlichkeit der Oberfläche kleinere Korrekturen erforderlich sind, so dass die Bitbreiten der Korrekturfaktoren für höhere Ebenen reduziert werden. Siehe 11.
  • Die Basisankerverschiebungen sind vorzeichenlos (UNORM11), während die Korrekturen vorzeichenbehaftet sind (Zweierkomplement). In einer Ausführungsform wird auch ein Verschiebungswert eingeführt, damit die Korrekturen mit einer geringeren als der vollen Breite gespeichert werden können. Die Verschiebungswerte werden pro Unterteilungsstufe in vier Varianten gespeichert (ein unterschiedlicher Verschiebungswert für die Mikrovertices jeder der drei Kanten des Teildreiecks und ein vierter Verschiebungswert für die Mikrovertices im Inneren des Dreiecks), damit die Vertices an jeder der Kanten des Teildreiecks unabhängig voneinander (z. B. unter Verwendung einfacher Schieberegister) und von den Vertices innerhalb des Teildreiecks verschoben werden können.
  • Genauer gesagt wird die Netzoberfläche bei immer tieferen Tesselierungsstufen immer selbstähnlicher, so dass der Codierer immer weniger Bits zur Codierung der vorzeichenbehafteten Korrektur zwischen der tatsächlichen Oberfläche und der vorhergesagten Oberfläche verwenden kann. Das Codierungsschema in einer Ausführungsform bietet eine Codierung mit variabler Länge für die vorzeichenbehaftete Korrektur. Für grobe Korrekturen können mehr Codierbits verwendet werden, für feinere Korrekturen werden weniger Codierbits benötigt. In Ausführungsbeispielen ist diese Codierung der Korrekturwerte mit variabler Länge wie folgt an die Tesselierungsstufe gebunden:
    Tesselierungsstufe Anzahl der Korrekturen Breite der Korrekturen (Bits)
    1 3 11
    2 9 8
    3 30 4
    4 108 2
    5 408 1
  • So kann in einer Ausführungsform, wenn Korrekturen für sehr viele Mikrodreiecke codiert werden, die Anzahl der korrekten Bits pro Mikrodreieck gering sein (z. B. so gering wie ein einziges Bit in einer Ausführungsform).
  • In einer Ausführungsform verwendet das Codierungsschema Block-Gleitkomma, was es ermöglicht, sogar ein Bit Präzision an einer beliebigen Stelle im Bereich zu platzieren, wo sie benötigt oder gewünscht wird. Auf diese Weise ermöglichen „Verschiebungsbits“ die Anpassung der Amplitude von Korrekturen, ähnlich wie bei einem gemeinsamen Exponenten. Die Verschiebungen für die oben genannten Tessellierungsstufen können in einer Ausführungsform wie folgt aussehen:
    Tesselierungsstufe Anzahl der Verschiebungswerte Breite der Verschiebungswerte (Bits)
    1 0
    2 4 2
    3 4 3
    4 4 4
    5 4 4
  • Der Decoder (und der Codierer bei der Wiederherstellung von zuvor komprimierten Verschiebungswerten) kann einen Hardware-Schiebeschaltkreis wie z. B. ein Schieberegister verwenden, um Korrekturwerte um Beträge und in Richtungen zu verschieben, die durch die Verschiebewerte festgelegt sind. Beispielsweise können die 4-Bit-Verschiebungswerte der Stufe 5 den 1-Bit-Korrekturwert an eine beliebige von 16 verschiedenen Verschiebungspositionen verschieben, um einen relativ großen dynamischen Bereich für den 1-Bit-Korrekturwert bereitzustellen.
  • Das Vorsehen unterschiedlicher Verschiebungen für verschiedene Stufen und unterschiedlicher Verschiebungen für jede Kante und die inneren Vertices verhindert „Kettenreaktionen“ oder dominoähnliche Effekte (d. h., wenn das Umstoßen eines Dominosteins dazu führt, dass sich der Impuls auf einen nächsten Dominostein ausbreitet, der ihn wiederum auf einen weiteren Dominostein ausbreitet usw.) und vermeidet die Notwendigkeit einer globalen Optimierung des Netzes. Durch die Entkopplung der Verschiebungswerte, die zur Codierung/Decodierung der inneren Vertices verwendet werden, von den Kanten-Vertices können die Kanten-Vertices mit ihren Gegenstücken auf benachbarten Mikronetzen, die dieselben Kanten teilen, übereinstimmen, ohne dass die Beschränkungen für ihre Werte auf die inneren Vertices übertragen werden. Wenn dies nicht möglich ist, können solche Beschränkungen lokal auftreten und sich über das gesamte Netz ausbreiten und zu globalen Beschränkungen werden. Wie weiter unten erläutert wird, kann die Breite der Verschiebungs- und Korrekturwerte nicht beliebig sein, sondern muss Beschränkungen folgen, um eine Bit-für-Bit-Übereinstimmung zwischen den Kompressionsstufen zu gewährleisten.
  • Die Vorhersage-und-Korrektur-Operation in dem folgenden Beispiel Formel 1 unten, in Pseudocode geschrieben: disp _ amount _ prediction = ( disp _ amount _ v 0 + disp _ amount _ v 1 + 1 ) / 2
    Figure DE112022003547T5_0004
    disp _ correction = signextend ( correction ) < < shift [ level ] [ type ]
    Figure DE112022003547T5_0005
    disp _ final = disp _ amount _ prediction + disp _ correction
    Figure DE112022003547T5_0006
  • Jeder endgültige Verschiebungsbetrag dient dann als Quelle für die Vorhersage der nächsttieferen Stufe. Beachten Sie, dass jede Vorhersage einen zusätzlichen „+ 1“-Term enthält, der das Runden gegenüber dem Abschneiden ermöglicht, da die Division hier die abschneidende Division der Korrektur ist. Dies entspricht prediction = round((v0 + v1)/2) in exakter Präzisionsarithmetik, wobei Halbzahlen auf die nächste ganze Zahl aufgerundet werden.
  • Wie aus der nachstehenden Erörterung hervorgeht, besteht ein primäres Entwurfsziel für diesen Kompressionsalgorithmus darin, die Korrekturbitbreiten so einzuschränken, dass die Menge der mit einem bestimmten µ-Netz-Typ darstellbaren Verschiebungswerte eine strenge Obermenge aller Werte ist, die mit einem stärker komprimierten µ-Netz-Typ darstellbar sind. Die obigen Breiten der Korrektur- und Verschiebungswerte erfüllen diese Bedingung.
  • In einer anderen Ausführungsform kann die Verschiebungskarte unter Verwendung der oben beschriebenen Prädiktions- und Kontrolltechnik (P&C) erzeugt und codiert werden, und es wird der Konstant-Zeit-Algorithmus zum Auffinden der nächstliegenden Korrektur verwendet. In einer Ausführungsform werden, wie oben beschrieben, die P&C-Technik und der Algorithmus zum Auffinden der nächstgelegenen Korrektur in Verbindung mit dem schnellen Kompressionsschema verwendet, das darauf abzielt, die Korrekturbitbreiten in Verschiebungscodierungen zu beschränken.
  • Verschiebungsspeicher
  • Verschiebungsbeträge werden in 64B- oder 128B-Granularblöcken gespeichert, die als Verschiebungsblöcke bezeichnet werden. Die Sammlung von Verschiebungsblöcken für ein einzelnes Basisdreieck wird als Verschiebungsblocksatz bezeichnet. Ein Verschiebungsblock codiert Verschiebungsbeträge für entweder 8×8 (64), 16×16 (256) oder 32×32 (1024) µ-Dreiecke.
  • In einer bestimmten, nicht einschränkenden Implementierung wird der Verschiebungssatz mit dem größte Speicherbedarf einheitliche, unkomprimierte Verschiebungsblöcke aufweisen, die 8×8 (64) µ-Dreiecke in 64 Byte abdecken. Der kleinste Speicherbedarf würde sich aus einheitlich komprimierten Verschiebungsblöcken ergeben, die 32×32 in 64 Byte abdecken, was ~0,5 Bit pro µ-Dreieck bedeutet. Der Unterschied zwischen den beiden ist ungefähr ein Faktor 16. Der tatsächlich erreichte Speicherbedarf wird irgendwo in diesem Bereich liegen. Die Größe eines Verschiebungsblocks im Speicher (64B oder 128B) gepaart mit der Anzahl der µ-Dreiecke, die er darstellen kann (64, 256 oder 1024), definiert einen µ-Netztyp. Wir können die µ-Netz-Typen von der höchsten bis zur niedrigsten Kompression ordnen, was eine „Reihenfolge der Kompressionsverhältnisse“ ergibt, die bei der wasserdichten Kompression verwendet wird - siehe 5.
  • Wie die Tabelle in 3 zeigt, können für Tesselierungsstufen oberhalb von Stufe 3 mehrere unkomprimierte 8x8 (64B) Verschiebungsblöcke pro Basisdreieck (oder alternativ die maximal mögliche Anzahl von Verschiebungsblöcken für eine bestimmte Tesselierungsstufe) wie folgt verwendet werden:
    Tesselierungsstufe Anzahl der Verschiebungsblöcke
    4 4
    5 16
    6 64
    7 256
    8 1024
    9 4096
    10 16384
    11 65536
    12 262144
    13 1048576
  • Während die Anzahl der Verschiebungsblöcke in der obigen Tabelle mit einer größeren Anzahl von Dreiecken geometrisch ansteigt, wird die Selbstauslese auf der Seite des Decoders/der Grafikerzeugung oft oder normalerweise (z. B. beim Raytracing) sicherstellen, dass nur ein oder eine kleine Anzahl der Verschiebungsblöcke tatsächlich aus dem Speicher abgerufen wird.
  • 12 und 13 zeigen beispielhafte detaillierte komprimierte Verschiebungsblockformate, die der Codierer verwendet, um dem Decoder komprimierte Verschiebungswerte zu übermitteln. Wie bereits erwähnt, können komprimierte Verschiebungsblöcke in einer Ausführungsform entweder 64B oder 128B groß sein und werden für 16x16 oder 32x32 Teildreiecke verwendet. Diese Blöcke spezifizieren die Ankerverschiebungen in UNORM11, Korrekturen pro Mikrovertex für jede Unterteilungsstufe im Zweierkomplement und vier vorzeichenlose Verschiebungsvarianten pro Stufe über der Unterteilungsstufe 1. Es ist zu beachten, dass die Bitbreiten sowohl für die Korrekturen als auch für die Verschiebungen von der Auflösung des Teildreiecks sowie von der Unterteilungsstufe abhängen. Darüber hinaus können in einer Ausführungsform die Mikrovertex-Verschiebungsinformationen für dieselbe Unterteilungsstufe in mehr oder weniger komprimierten Formaten codiert werden (vergleichen Sie beispielsweise in 13 die Bitbreiten der 16x16-Korrekturen auf 256-Mikrodreieckebene für volle Cacheline-Blöcke mit 128B gegenüber 64B-Verschiebungsblöcken mit halber Cacheline).
  • In einigen Ausführungsformen sind die Basisankerpunkte vorzeichenlos (UNORM11), während die Korrekturen vorzeichenbehaftet sind (Zweierkomplement). Ein Verschiebungswert ermöglicht die Speicherung von Korrekturen mit weniger als der vollen Breite. Die Verschiebungswerte werden pro Stufe in vier Varianten gespeichert, damit die Vertices an jeder der Netzkanten des Teildreiecks unabhängig voneinander und von den Vertices innerhalb des Teildreiecks verschoben werden können. Jeder decodierte Wert wird zu einer Quelle der Vorhersage für die nächsttiefere Stufe.
  • Kompressor - Teildreieck-Codierer
  • Bei einigen Ausführungsformen wird ein 2-Pass-Ansatz verwendet, um ein Teildreieck mit einem bestimmten µ-Netztyp zu codieren. Siehe 14.
  • Im ersten Durchgang wird das oben beschriebene P&C-Schema verwendet, um verlustfreie Korrekturen für eine Unterteilungsstufe zu berechnen, wobei der gesamte Wertebereich der Korrekturen im Auge behalten wird. Anschließend wird der optimale Verschiebungswert bestimmt, der für jede Kante und für die internen Vertices verwendet werden kann (insgesamt 4 Verschiebungswerte in einer Ausführungsform), um die gesamten Bereiche mit der Anzahl der verfügbaren Korrekturbits abzudecken. Dieser Prozess wird unabhängig für die Eckpunkte auf den drei Kanten des Teildreiecks und für die inneren Eckpunkte des Teildreiecks durchgeführt, so dass insgesamt 4 Verschiebungswerte pro Unterteilungsstufe zur Verfügung stehen. Die Unabhängigkeit dieses Prozesses für jede Kante ist erforderlich, um die Bedingungen für eine rissfreie Kompression zu erfüllen.
  • Der zweite Durchgang codiert das Teildreieck erneut mit dem P&C-Schema, aber diesmal mit verlustbehafteten Korrekturen und Verschiebungswerten, die im ersten Durchgang berechnet wurden. Der zweite Durchlauf verwendet die Ergebnisse des ersten Durchlaufs (und insbesondere den maximalen Korrekturbereich und die Anzahl der für die Korrektur verfügbaren Bits), um die verlustbehafteten Korrektur- und Verschiebungswerte zu strukturieren - letztere ermöglichen es, größere Zahlen darzustellen, als dies ohne Verschiebung möglich wäre. Das Ergebnis dieser beiden Durchgänge kann unverändert verwendet werden oder als Ausgangspunkt für Optimierungsalgorithmen dienen, mit denen die Qualität und/oder das Kompressionsverhältnis weiter verbessert werden kann.
  • Eine Hardware-Implementierung des P&C-Schemas kann im Falle eines (ganzzahligen) Über- oder Unterlaufs ein „wrapping around“-Verhalten aufweisen. Diese Eigenschaft kann im 2. Durchgang ausgenutzt werden, um Korrekturwerte durch „wrapping around“ darzustellen, die angesichts der begrenzten Anzahl verfügbarer Bits sonst nicht erreichbar wären. Dies bedeutet auch, dass die Berechnung von Verschiebungswerten, die auf dem Korrekturbereich basieren, das Wrapping ausnutzen kann, um qualitativ hochwertigere Ergebnisse zu erhalten (siehe „Verbesserung der Berechnung von Verschiebungswerten durch Nutzung des Wrappings“ unten).
  • Es sei darauf hingewiesen, dass das Codierungsverfahren an sich nie scheitern kann und dass für einen bestimmten µ-Netztyp immer ein Teildreieck codiert werden kann. Dennoch kann der Kompressor das Ergebnis dieses Kompressionsschritts analysieren und unter Verwendung einer Reihe von Metriken und/oder Heuristiken entscheiden, dass die resultierende Qualität nicht ausreicht. (Siehe „Verwendung der Längen der Verschiebungsrichtung in der Erfolgsmetrik der Codierung“ weiter unten).
  • In diesem Fall kann der Kompressor versuchen, das Teildreieck mit weniger komprimierten µ-Netztypen zu codieren, bis die erwartete Qualität erreicht ist. Dieser iterative Prozess kann dazu führen, dass versucht wird, ein Teildreieck mit einem µ-Netz-Typ zu codieren, der nicht alle seine µ-Dreiecke darstellen kann. In diesem Fall wird das Teildreieck rekursiv in vier Teildreiecke aufgeteilt, bis es codiert werden kann. In einer Ausführungsform wird der anfängliche Teilungsschritt nur dann durchgeführt, wenn das aktuelle Teildreieck mehr Dreiecke enthält, als mit dem aktuellen Mikronetztyp codiert werden können (daher die Notwendigkeit einer rekursiven Teilung, bis die Anzahl der Mikrodreiecke im Teildreieck der Anzahl der Dreiecke entspricht, die mit dem aktuellen Mikronetztyp codiert werden können).
  • Ausnutzung der Mod 2048 Arithmetik
  • In den obigen Ausdrücken zur Berechnung der Vorhersage versucht der Kompressor, die Korrektur basierend auf der Vorhersage, der Verschiebung und dem unkomprimierten Wert zu berechnen. In einer Ausführungsform kann diese Korrekturberechnung jedoch etwas knifflig sein, wenn die Berechnung unter Verwendung der Wrapping-Arithmetik (z. B. 0, 1, 2, .... 2046, 2047, 0, 1, 2 ...) für die Mod-2048-Arithmetik durchgeführt wird - was in einer Ausführungsform von der Decoder-Hardware verwendet wird, wenn die Vorhersage zur Korrektur basierend auf vorzeichenlosen UNORM11-Werten hinzugefügt wird. Während es sich bei der Mittelwertbildung um eine typische Mittelwertbildung handelt, wird die decodierte Position nach den Regeln der vorzeichenlosen Arithmetik umgewandelt, wenn die Korrektur zur Vorhersage addiert wird. Die Fehlermetrik basiert in einer Ausführungsform nicht auf der Umschlagarithmetik. Daher ist es Sache des Software-Codierers, entweder einen auf gespeicherten Werten basierenden Umbruch zu vermeiden oder das Ergebnis des Umbruchs sinnvoll zu gestalten. Nachfolgend wird ein Algorithmus beschrieben, mit dem der Codierer dieses Wrapping nutzen und zur Qualitätsverbesserung ausschöpfen kann. Eine alternative Ausführungsform könnte die zusätzlichen Ergebnisse festhalten und den Umbruch verhindern (wodurch effektiv Informationen verworfen würden), würde dann aber die Möglichkeit verlieren, die Kompressionsergebnisse durch Ausnutzung des Umbruchverhaltens zu verbessern. In einer Ausführungsform kann die Ausnutzung des Wrap-Around-Verhaltens den Fehler um den Faktor 3 verringern.
  • Verschiebungskompression - Ein robuster Konstantzeit-Algorithmus zur Ermittlung der nächstliegenden Korrektur
  • Wie oben beschrieben, sind Korrekturen von der Unterteilungsstufe n bis zur Unterteilungsstufe n+1 vorzeichenbehaftete Ganzzahlen mit einer festen Anzahl von Bits b (gegeben durch das Format des Teildreiecks und die Unterteilungsstufe) und werden gemäß der obigen Formel angewendet. Obwohl ein Codierer Korrekturen auf verschiedene Arten berechnen kann, besteht ein allgemeines Problem für einen Codierer darin, den b-Bit-Wert von c (Korrektur) zu finden, der die absolute Differenz zwischen dem d (decodierten) und einem Referenzwert r (unkomprimiert) in der Formel in 15 minimiert, wobei p (Vorhersage) und s (shift[level][type]) gegeben sind.
  • Dies wird dadurch erschwert, dass die ganzzahlige Arithmetik umläuft (sie entspricht der Gruppenoperation in der abelschen Gruppe ℤ/211 Z), aber die Fehlermetrik wird ohne Umlaufen berechnet (es ist nicht die euklidische Metrik in ℤ/211 Z). Anhand eines Beispiels soll gezeigt werden, dass es sich hierbei um ein nicht triviales Problem handelt.
  • Betrachten wir den Fall p=100, r=1900, s=0 und b=7, wie in 15 dargestellt. Die hervorgehobene vertikale Linie p nahe der linken Seite des Diagramms zeigt den vorhergesagten Verschiebungswert, und die vertikale Linie r zeigt den Referenzwert der Verschiebung, dem der decodierte Wert nahe kommen sollte. Beachten Sie, dass die beiden Linien nahe an den entgegengesetzten Extremen des dargestellten 11-Bit-Bereichs liegen. Dies kann relativ häufig vorkommen, wenn zur Definition der Verschiebungswerte eine prismatische konvexe Dreieckshülle mit Maximum und Minimum verwendet wird.
  • Dargestellt ist die Zahlenreihe aller UNORM11-Werte von 0 bis 2047, die Lage des vorhergesagten Werts p in der dicken Linie und des Referenzwerts r in einer punktgestrichelten Linie, und in der helleren Schattierung um die dicke Linie von p alle möglichen Werte von d für alle möglichen Korrekturen (da b=7, sind die möglichen Korrekturen die vorzeichenbehafteten ganzen Zahlen von -26 = -64 bis einschließlich 26 -1 = 63).
  • In diesem Beispiel gibt es eine Verschiebung von 0 und einen möglichen Korrekturbereich von -64 bis +63, wie die vertikalen Linien links und rechts der mit p bezeichneten Vorhersagelinie zeigen. Dies scheint die äußerste rechte vertikale Linie bei +63 zu sein. Wendet man jedoch die Wrap-Around-Arithmetik an, so ist die Linie, die der Referenzlinie r am nächsten liegt, nicht die äußerste rechte Linie, sondern die äußerste linke Linie bei -64, da diese äußerste linke Linie bei Anwendung der Wrap-Around-Arithmetik den geringsten Abstand von der Referenzlinie r hat.
  • In diesem Fall besteht die Lösung darin, die Korrektur c=63 zu wählen, was einen decodierten Wert von d=163 und einen Fehler von abs(r-d) = 1737 ergibt. Wäre die Abstandsmetrik ℤ/211 Z, wäre die Lösung stattdessen c=-64, was einen decodierten Wert von d=36 und einen Fehler von 183 ergeben würde (Wrapping Around). Obwohl die Verwendung der Fehlermetrik ℤ/211 Z einfacher zu berechnen ist, führt sie zu einer Korrektur mit dem entgegengesetzten Vorzeichen der korrekten Lösung, was zu unangenehmen visuellen Artefakten wie Pockennarben führt.
  • Betrachten wir als nächstes den Fall p=100, r=1900, s=6 und b=3, der in 16 dargestellt ist. Hier sind weniger Bits und eine Verschiebung ungleich Null zu sehen. Die Linien um p und r haben einen Abstand von 2s = 32 und umschließen die Enden des Bereichs. Die Verschiebung ist mit 6 angegeben, und es stehen nur drei Bits für die Korrektur zur Verfügung, so dass die Korrekturwerte einen Abstand von 64 haben. Die möglichen Korrekturen sind die ganzen Zahlen von -8 bis einschließlich 7, wie durch die vertikalen Linien angezeigt.
  • In diesem Fall besteht die Lösung darin, die Korrektur von c=-4 zu wählen, was zu einem decodierten Wert von d=1892 und einem Fehler von abs(r-d) = 8 führt. Das Wrap-Around-Verhalten kann hier ausgenutzt werden, um ein gutes Ergebnis zu erzielen, aber dabei zeigt sich, dass eine Verschiebung ungleich Null einen geringeren Fehler als im vorherigen Fall ergeben kann, sogar mit weniger Bits.
  • Andere Szenarien sind möglich. Das vorherige Szenario betraf einen arithmetischen Unterlauf; Fälle, die einen arithmetischen Überlauf erfordern, sind ebenso möglich wie Fälle, in denen kein Über- oder Unterlauf vorliegt, und Fälle, in denen eine Korrektur einen Nullfehler ergibt.
  • Im Folgenden wird ein Pseudocode für einen Algorithmus vorgestellt, der bei vorzeichenlosen ganzen Zahlen 0 ≤ p < 2048 , 0 ≤ r < 2048, einer vorzeichenlosen ganzzahligen Verschiebung 0 ≤ s < 11 und einer vorzeichenlosen ganzzahligen Bitbreite 0 ≤ b ≤ 11 innerhalb einer endlichen Anzahl von Operationen (unabhängig von der Anzahl der b-Bit-Möglichkeiten für c) immer den bestmöglichen ganzzahligen Wert von c (zwischen -2b und (2b)-1 einschließlich, wenn b > 0, oder gleich 0, wenn b = 0) zurückgibt. Im unten abgebildeten Pseudocode für die Schritte 1-8 des sequentiellen Algorithmus stellen nichtmathematische kursive Texte in Klammern Kommentare dar, und Modulo-Operationen (mod) werden als positive Werte angesehen.
    Figure DE112022003547T5_0007
    Figure DE112022003547T5_0008
    • (Berechnung des Fehlers für iLo) Setze eLo auf die absolute Differenz von r und das Ergebnis der Substitution correction = iLo in die obige Formel 1 ein.
    • (Fehler für iHi berechnen) Setze eHi auf die absolute Differenz von r, und das Ergebnis der Substitution correction = iHi in Formel 1 einsetzen.
    • (Wähle die Option mit dem geringeren Fehler) If eLo ≤ eHi ist, gib iLo zurück. Andernfalls wird iHi zurückgegeben.
  • Grundsätzlich erkennt der Pseudocode-Algorithmus, dass die Bezugslinie r immer zwischen zwei Korrekturwertlinien innerhalb des darstellbaren Bereichs liegen oder genau mit einer Korrekturwertlinie innerhalb des Bereichs übereinstimmen muss. Der Algorithmus wechselt zwischen zwei verschiedenen Fällen (der Referenzwert liegt zwischen den beiden extremen Korrekturen oder der Referenzwert liegt zwischen zwei darstellbaren Werten) und wählt den Fall mit dem geringeren Fehler. Grundsätzlich bietet der Wrap-Around-Fall eine „Abkürzung“ für Situationen, in denen die vorhergesagten und die Referenzwerte in einer Ausführungsform nahe an den entgegengesetzten Enden des bitbegrenzten Verschiebungswertbereichs liegen.
  • Kompressor - Verbesserung der Berechnung von Verschiebungswerten durch Verwendung von Wrapping
  • Eine Minimierung der Größe der Verschiebung auf jeder Stufe für jeden Vertextyp kann die Kompressionsqualität verbessern. Der Abstand zwischen den darstellbaren Korrekturen (siehe die in den 17 und 18 dargestellten möglichen decodierten Werte) ist proportional zu 2 hoch der Verschiebung für diese Stufe und diesen Vertextyp. Eine Verringerung der Verschiebung um 1 verdoppelt die Dichte der darstellbaren Werte, halbiert aber auch die Länge der Spanne, die durch die minimalen und maximalen Korrekturen dargestellt wird. Da die Algorithmen zur Berechnung der Korrekturen das Wrap-Around-Verhalten nutzen können, kann die Berücksichtigung des Wrap-Around-Verhaltens bei der Berechnung der Mindestverschiebung, die erforderlich ist, um alle Korrekturen für eine Stufe und einen Vertextyp abzudecken, die Qualität verbessern.
  • Betrachten wir beispielsweise eine Korrekturebene und einen VertexTyp, bei denen die Differenzen mod 2048 zwischen jedem Referenz- und vorhergesagten Wert wie in 17 verteilt sind. Im ersten Beispiel gibt es große Verschiebungen und eine endliche Anzahl von Bits (z. B. 4 Bits in diesem Beispiel - was 16 mögliche verschobene Korrekturwerte ergibt), die großen Verschiebungen führen zu einer großen Differenz zwischen den möglichen verschobenen Korrekturwerten, was bedeutet, dass es nicht viel Präzision zwischen den verschobenen möglichen Korrekturwerten gibt. Wird der Betrag der Verschiebung verringert, wird der Abstand zwischen den möglichen verschobenen Korrekturwerten kleiner und die Genauigkeit nimmt zu (siehe 18). Durch eine gute Wahl der Verschiebungswerte wird also die Kompression verbessert, da die verschobenen Korrekturwerte näher am Referenzwert liegen.
  • In 17 sind die verlustfreien Korrekturen als d0, d1, d2 (in diesem Beispiel +50, +100 bzw. +1900 (-148)) dargestellt. Basierend auf diesen Werten scheint es, dass Verschiebungswerte erforderlich sind, die den gesamten Bereich zwischen +100 und -148 abdecken, was auf große (aber ungenaue) Verschiebungswerte hindeutet, die zu höheren Fehlern aufgrund der Quantisierung führen werden. Daher könnte ein Algorithmus, der das Wrapping nicht berücksichtigt, zu dem Schluss kommen, dass er die maximal mögliche Verschiebung benötigt, um alle diese Unterschiede zu überbrücken. Siehe 18. Da die Korrekturen jedoch auch negativ sein können und sich umdrehen können, kann eine kleinere Verschiebung zu qualitativ besseren Ergebnissen führen.
  • Ein möglicher Algorithmus könnte folgendermaßen aussehen. Subtrahieren Sie 2048 von (Differenzen mod 2048), die größer als 1024 sind, so dass alle umhüllten Differenzen wi innerhalb des Bereichs der ganzen Zahlen - 1024...1023 einschließlich liegen. Siehe 18. Auf diese Weise werden alle Werte innerhalb einer Teilmenge des ursprünglichen Bereichs platziert - und Werte, die vorher weit voneinander entfernt waren, werden so umgewandelt, dass sie nun nahe beieinander liegen. Die sich daraus ergebenden wesentlich kleineren Verschiebungen kommen dem Referenzwert sehr viel näher.
  • Berechnen Sie dann die Verschiebung s bei der Pegel-Bitbreite b als die minimale Zahl s, bei der 2 s ( 2 b 1 ) max  ( w i )
    Figure DE112022003547T5_0009
    und 2 s ( 2 b ) min  ( w i ) .
    Figure DE112022003547T5_0010
  • Beispielsweise kann diese Transformation als Teil von „Durchgang eins“ eines Codierers zur Berechnung verlustfreier Korrekturen einbezogen werden (siehe 14). In Durchgang eins wird also der Verlust für jeden Vertex und Vertextyp verfolgt, die verlustfreien Korrekturen werden berechnet, die Transformation in eine Teilmenge des Bereichs durchgeführt und die minimalen und maximalen verlustfreien Korrekturen über diese Teilmenge des Bereichs verfolgt. Der optimale Verschiebungswert wird basierend auf den minimalen und maximalen verlustfreien Korrekturen berechnet. Im zweiten Durchgang werden die verlustbehafteten Korrekturen aus den vorhergesagten Werten, den Verschiebungswerten und den verlustfreien Korrekturen berechnet. Diese verlustbehafteten Korrekturen und die Verschiebungen werden zusammengepackt und in den komprimierten Block geschrieben.
  • Kompressor - Verwendung von Verschiebungsbereichen in der Codierungserfolgsmetrik
  • Es wird ein Verfahren zur Interpretation von Skalierungsinformationen als ein Wichtigkeitssignal pro Vertex und ein Verfahren zur Verwendung der Wichtigkeit pro Vertex zur Änderung der Fehlermetrik des Verschiebungs-Codierers beschrieben. Dadurch wird die Qualität dort verbessert, wo sie benötigt wird, und die Größe dort reduziert, wo die Qualität nicht so wichtig ist.
  • Wie oben beschrieben, hat jeder Vertex einen Bereich, über den er verschoben werden kann und der durch die Spezifikation der Verschiebungskarte gegeben ist. Bei der Prismatoid-Spezifikation beispielsweise skaliert die Länge dieses Bereichs mit der Länge des interpolierten Richtungsvektors und der interpolierten Skala. Die decodierte Eingabe und Ausgabe des codierten Formats hat dagegen einen festen Bereich und eine feste Genauigkeit (UNORM11-Werte), wie oben beschrieben. Dies bedeutet, dass die Minimal- und Maximalwerte zu unterschiedlichen absoluten Verschiebungen in verschiedenen Bereichen eines Netzes führen können - und daher kann ein UNORM11-Fehler einer bestimmten Größe für einen Teil eines Netzes zu einer mehr oder weniger starken visuellen Beeinträchtigung im Vergleich zu einem anderen führen.
  • In einer Ausführungsform kann dem Codierer eine Wichtigkeit pro Netz-Vertex (z. B. eine „Salienz“) zur Verfügung gestellt werden, z. B. über die Fehlermetrik. Eine Möglichkeit ist, dass es sich dabei um den möglichen Verschiebungsbereich jedes Vertex im Objektraum handelt (z. B. Abstand x Skala in der Prismatoid-Darstellung - was ein Maß für die Unterschiede und somit für den berechneten Fehler im Objektraum ist); dies könnte jedoch auch die Ausgabe eines anderen Prozesses sein oder von einem Benutzer gesteuert werden. Beispielsweise könnte ein Künstler angeben, welche Vertices eine höhere „Wichtigkeit“ haben, um bessere Abbildungsergebnisse zu erzielen, z. B. um das Gesicht und die Hände einer Figur herum eine höhere Qualität zu erzielen als um ihre Kleidung.
  • Die Wichtigkeit der Netz-Vertices wird linear interpoliert, um einen „Wichtigkeitsgrad“ für jeden µ-Netz-Vertex zu erhalten. Dann wird innerhalb der Fehlermetrik der komprimierte gegenüber dem unkomprimierten Fehler für jedes Element der Fehlermetrik mit einer „Wichtigkeit“ der Fehlermetrik gewichtet, die sich aus dem „Wichtigkeitsgrad“ der µ-Netz-Vertices des Elements ergibt. Diese werden dann akkumuliert und der daraus resultierende akkumulierte Fehler - der nun basierend auf der „Wichtigkeit“ gewichtet ist - wird mit der/den Fehlerbedingung(en) verglichen. Auf diese Weise wählt der Kompressor häufig stärker komprimierte Formate für Regionen des Netzes mit geringerer „Wichtigkeit“ und weniger komprimierte Formate für Regionen des Netzes mit höherer „Wichtigkeit“.
  • Kompressor - Einschränkungen für rissfreie Kompression
  • Die obigen Ausführungen erklären, wie ein Kompressor ein durch ein Basisdreieck definiertes Mikronetz komprimieren kann. Durch die Anordnung der µ-Netz-Typen vom am stärksten komprimierten bis zum am wenigsten komprimierten, wie in 5 dargestellt, können die Ausführungsformen mit der direkten Codierung von Teildreiecken in der „Reihenfolge des Kompressionsverhältnisses“ unter Verwendung des oben beschriebenen P&C-Schemas fortfahren, beginnend mit dem am stärksten komprimierten µ-Netz-Typ, bis ein gewünschtes Qualitätsniveau erreicht ist. Dieses Schema ermöglicht eine parallele Codierung bei maximaler Kompression und ohne die Einführung nicht übereinstimmender Verschiebungswerte entlang der von den Teildreiecken gemeinsam genutzten Kanten.
  • 20A veranschaulicht den Fall, dass zwei Teildreiecke eine gemeinsame Kante haben. Beide Teildreiecke werden mit der gleichen Rate tesseliert, aber mit unterschiedlichen µ-Netz-Typen codiert. In der Fig. dient der Abstand zwischen den beiden Dreiecken nur der besseren Veranschaulichung.
  • Im gezeigten Beispiel werden die Mikrospitzen mit einem Bezeichner wie „S1“ versehen. Dabei steht der Buchstabe „S“ für „Subdivision“ und die nachfolgende Zahl für die Nummer der Subdivision. Man sieht also, dass die „S0“-Vertices oben und unten an der gemeinsamen Kante für jedes Teildreieck auf der Unterteilungsstufe Null gespeichert werden - und zwar im unkomprimierten Format. Eine erste Unterteilung erzeugt die „S1“-Vertices auf Unterteilungsstufe 1, und eine zweite Unterteilung erzeugt die „S2“-Vertices auf Unterteilungsstufe 2.
  • Um Risse entlang der gemeinsamen Kante zu vermeiden, müssen die decodierten Verschiebungswerte der beiden Dreiecke übereinstimmen. S0-Vertices stimmen überein, da sie immer unkomprimiert codiert werden. S1- und S2-Vertices stimmen nur dann überein, wenn (1) das Teildreieck in der Reihenfolge des Kompressionsverhältnisses codiert ist und (2) die mit einem stärker komprimierten µ-Netz-Typ codierten Verschiebungswerte immer durch weniger komprimierte µ-Netz-Typen dargestellt werden können. Die zweite Bedingung besagt, dass für eine bestimmte Unterteilungsstufe ein weniger komprimierter µ-Netz-Typ niemals weniger Bits verwenden sollte als ein stärker komprimierter µ-Netz-Typ. Wenn beispielsweise das rechte Teildreieck einen kompakteren µ-Netz-Typ verwendet als das linke Teildreieck, wird das rechte Teildreieck zuerst codiert. Außerdem werden die Verschiebungswerte der Kante des rechten Teildreiecks (d. h. die Kante, die mit dem rechten Teildreieck gemeinsam genutzt wird) nach der Codierung kopiert, um die Verschiebungswerte des linken Teildreiecks zu ersetzen. Eigenschaft (2) stellt sicher, dass die Verschiebungswerte entlang der Kante des linken Teildreiecks nach der Kompression verlustfrei codiert werden, wodurch eine perfekte Übereinstimmung entlang der gemeinsamen Kante entsteht.
  • In diesem Beispiel werden diese beiden Teildreiecke mit unterschiedlichen Mikronetztypen codiert (angenommen beispielsweise, das linke Teildreieck ist stärker komprimiert als das rechte). Wie oben beschrieben, arbeitet der Kompressor in einer Ausführungsform von stärker komprimierten zu weniger komprimierten Formaten, so dass in diesem Fall die Verschiebungen für das linke Teildreieck zuerst codiert werden. Nehmen wir also an, dass die Verschiebungen für das linke Teildreieck bereits erfolgreich codiert wurden und ein Prozessor nun versucht, die Verschiebungen für das rechte Teildreieck zu codieren - und insbesondere die Verschiebungen für die Mikroecken des rechten Dreiecks, die auf der gemeinsamen Kante der beiden Dreiecke liegen. Die Verschiebungswerte, die für die Mikrovertices der gemeinsamen Kante des rechtsseitigen Teildreiecks codiert werden sollen, müssen Bit für Bit mit den bereits codierten Verschiebungswerten für die Vertices der gemeinsamen Kante des linksseitigen Teildreiecks übereinstimmen. Wenn sie nicht genau übereinstimmen, kann es zu Rissen kommen.
  • Wenn die Vertices der gemeinsamen Kante des rechten Teildreiecks Bit für Bit mit den Vertices der gemeinsamen Kante des linken Teildreiecks übereinstimmen sollen, muss die Anzahl der Bits, die zur Darstellung der Verschiebung für das rechte Teildreieck verwendet werden, gleich oder größer sein als die Anzahl der Bits, die zur Darstellung der Verschiebung für das linke Teildreieck verwendet werden. Aus diesem Grund haben die Vertices, die sich auf der gemeinsamen Kante des linken und rechten Teildreiecks gegenüberliegen, die gleiche Unterteilungsstufe - beispielsweise passt ein linker S0-Vertex zu einem rechten S0-Vertex, ein linker S1-Vertex zu einem rechten S1-Vertex, ein linker S2-Vertex zu einem rechten S2-Vertex und so weiter. Daher kann ein weniger komprimiertes Verschiebungsformat bei Kanten, die von Teildreiecken gemeinsam genutzt werden, niemals weniger Bits für eine bestimmte Unterteilungsstufe verwenden als ein gegenüberliegendes, stärker komprimiertes Verschiebungsformat. Stellt man sich beispielsweise die Aufzeichnung auf einer horizontalen Linie wie in einer Tabellenkalkulation vor, so bildet die Anzahl der Bits, die zur Darstellung der Vertices für eine bestimmte Unterteilungsstufe zugewiesen werden, für alle verschiedenen Mikronetztypen, sortiert von stärker komprimiert bis weniger komprimiert, eine monotone Folge, die zunimmt oder sich nicht ändert und nicht abnehmen kann. Mit anderen Worten: Es kann niemals weniger Bits für eine bestimmte Unterteilungsstufe im weniger komprimierten Typ geben als im stärker komprimierten Typ. In Beispielen wird diese Einschränkung dem Codierungsschema auferlegt, um die Wasserdichtigkeit zu garantieren, wobei davon ausgegangen wird, dass der Codierungsalgorithmus deterministisch ist (er enthält keine stochastischen Komponenten).
  • 20B ist etwas komplizierter, da die Tesselierungsraten der Teildreiecke links und rechts nun unterschiedlich sind. 20B veranschaulicht insbesondere den Fall einer gemeinsamen Kante zwischen Dreiecken mit unterschiedlichen Tessellierungsraten (2x Unterschied), die aber mit demselben µ-Netztyp codiert sind. Um sicherzustellen, dass die decodierten Verschiebungen auf beiden Seiten der gemeinsamen Kante übereinstimmen, müssen die auf einer bestimmten Stufe codierten Werte auch auf der nächsten Unterteilungsstufe darstellbar sein (siehe z. B. S1-S2 und S0-S1 Vertex-Paare). Es gibt zwar viele Möglichkeiten, dies zu erreichen, aber in einer bestimmten Ausführungsform kann dies nur erreicht werden, wenn (1) Teildreiecke mit niedrigerer Tesselierungsrate vor Teildreiecken mit höherer Tesselierungsrate codiert werden und (2) für einen bestimmten µ-Netztyp die Korrekturbitbreite für die Unterteilungsstufe N gleich oder kleiner ist als für die Stufe N-1. Mit anderen Worten, die letztgenannte Eigenschaft diktiert, dass für einen µ-Netz-Typ die Anzahl der Bits, sortiert nach Unterteilungsstufe, eine monoton abnehmende Folge bilden sollte. So wird beispielsweise das linke Dreieck in 20B zuerst codiert, und seine Verschiebungswerte werden nach der Decodierung in die Vertices kopiert, die von den drei Dreiecken auf der rechten Seite gemeinsam genutzt werden, bevor mit ihrer Codierung fortgefahren wird.
  • In diesem Beispiel sehen wir also 2x mehr Vertices auf der rechten Seite als auf der linken Seite. Einige Kanten-Vertices, die von den Teildreiecken auf der linken und rechten Seite gemeinsam genutzt werden, gehören nicht zur selben Unterteilungsstufe. Beispielsweise stehen „S2“-Vertices auf dem linken Teildreieck S1-Vertices auf dem rechten Teildreieck gegenüber, und S1-Vertices auf dem linken Teildreieck stehen S0-Vertices auf dem rechten Teildreieck gegenüber. Daher ist die Anzahl der Bits, die zur Codierung derselben gemeinsamen Vertices für das linke und das rechte Teildreieck zugewiesen werden, nicht unbedingt dieselbe.
  • Insbesondere werden in einer Ausführungsform den höheren Unterteilungsstufen (Tessellierungsrate) weniger Bits pro Vertex für die Verschiebungscodierung zugewiesen, so dass die Anzahl der für die Codierung von beispielsweise S1 verfügbaren Bits wahrscheinlich höher ist als die Anzahl der für die Codierung von beispielsweise S2 verfügbaren Bits. Wie bereits erwähnt, ist es jedoch bei der Verarbeitung von Teildreiecken mit unterschiedlichen Tessellierungsraten in einigen Ausführungsformen vorzuziehen, Teildreiecke mit niedrigerer Tessellierungsrate zu codieren, bevor angrenzende Dreiecke mit höherer Tessellierungsrate codiert werden, um zu gewährleisten, dass die mit dem angrenzenden Teildreieck verbundenen Informationen Bit für Bit übereinstimmen können. Da für die Codierung des rechten Teildreiecks mit höherer Tessellierungsrate weniger Bits zur Verfügung stehen, kann nicht garantiert werden, dass die Vertex-Codierung des rechten Teildreiecks mit höherer Tessellierungsrate mit der des linken Teildreiecks mit niedrigerer Tessellierungsrate vergleichbar ist. Die erste Codierung des Teildreiecks mit der niedrigeren Tessellierungsrate auf der linken Seite stellt sicher, dass das Teildreieck mit der höheren Tessellierungsrate auf der rechten Seite dieselben Vertex-Informationen darstellen kann, solange innerhalb eines Mikronetztyps die Anzahl der Bits zur Codierung der Verschiebung für immer tiefere/rekursive Unterteilungsstufen nicht zunimmt:
    • # Bits für Unterteilungsstufe k ≤ Bits für Unterteilungsstufe j wobei j eine beliebige Stufe ist, die weniger unterteilt ist (geringeres Mosaikverhältnis) als k.
  • Zusammenfassend lässt sich sagen, dass bei der Codierung eines Dreiecksnetzes gemäß einigen hochleistungsfähigen Ausführungsformen die folgenden Ordnungsbeschränkungen angenommen werden, um Risse im Netz zu vermeiden:
    • • Teildreiecke werden in aufsteigender Reihenfolge der Tesselierungsrate codiert (angrenzende Teildreiecke mit der niedrigeren Tesselierungsrate zuerst codieren); und
    • • Teildreiecke mit der gleichen Tesselierungsrate werden in absteigender Reihenfolge der Kompressionsrate codiert (beginnend mit der höchsten gewünschten Kompressionsrate).
  • Daher gelten in einigen Ausführungsformen die folgenden Einschränkungen für die Konfigurationen der Korrekturbitbreiten:
    • • Bei einem gegebenen µ-Netz-Typ verwendet eine Unterteilungsstufe nie weniger Bits als die nächste (komprimiertere) Stufe; und
    • • Bei einem gegebenen Unterteilungsstufe verwendet ein µ-Netz-Typ niemals weniger Bits als ein komprimierterer Typ.
  • Die obige Regel berücksichtigt Netztypen, die die gleiche Anzahl von Mikrodreiecken (d. h. die gleiche Anzahl von Unterteilungen) darstellen, aber unterschiedliche Speicheranforderungen haben (z. B. 1024 Mikrodreiecke in 128B oder 64B).
  • In einer Ausführungsform wird die effektive Anzahl der Bits, die zur Darstellung eines Verschiebungswertes verwendet werden, durch die Summe der Korrektur- und Verschiebungsbitbreiten bestimmt. Im Beispiel von 20B wird den Vertices auf einer Kante eines Teildreiecks, die mit einem anderen Teildreieck des Netzes geteilt wird, eine Nullkorrektur zugewiesen - ihre Verschiebungswerte sind das reine Ergebnis der Vorhersage, d. h. der Interpolation oder des Durchschnitts der Verschiebungswerte ihrer benachbarten Vertices auf der Kante. Darüber hinaus kann in einer Ausführungsform eine Technik, die wir „Dezimierung“ nennen (bei der die Hardware bei der Erstellung von 3D-Darstellungen von Mikrodreiecken für Strahlenschnittprüfungen Vertices löscht), verwendet werden, um die Topologie von Teildreiecken mit angrenzenden Kanten zu ändern, um T-Kreuzungen zu vermeiden.
  • 20C zeigt eine weitere Beispielsituation, in der zwei benachbarte Teildreiecke unterschiedliche Unterteilungs-Tessellierungsraten haben und auch mit unterschiedlichen Mikronetztypen codiert wurden. Gemäß den obigen Beispielbedingungen wird das linke Teildreieck vor dem rechten Teildreieck codiert, da es eine geringere Auflösung und einen komprimierteren Mikronetztyp hat. Die codierten Werte des linken Teildreiecks entlang der gemeinsamen Kante werden dann auf das rechte Teildreieck kopiert, um das rechte Teildreieck zu codieren. Es wird sich jedoch zeigen, dass das rechte Teildreieck mehr Vertices aufweist als das linke Teildreieck. In diesem speziellen Fall, in dem die Mikronetztypen der beiden Teildreiecke nicht identisch sind, setzen Ausführungsbeispiele eine Markierung an der rechten Dreieckskante, die den Codierer auffordert, die codierten Vertices des rechten Teildreiecks zu inspizieren und zu überprüfen, um sicherzustellen, dass sie ohne Fehler codiert wurden. Zur Verdeutlichung: Die Vertices im rechten Dreieck, die fehlerfrei codiert werden müssen, sind diejenigen, die auch im linken Dreieck vorhanden sind (übereinstimmen), d. h. die bei 2 und 2 und 1 und 1. Wird ein Verlust festgestellt, markiert der Codierer das Teildreieck als nicht erfolgreich codiert, und der Codierer versucht es erneut mit einem weniger komprimierten Mikronetztyp, wie im oben genannten Beispiel. Es ist anzumerken, dass der Codierer in einem Beispiel den Codierungsprozess mit einem Format wiederholen könnte, das mehr Bits pro Vertex-Verschiebung bereitstellt (z. B. ein volles Cacheline-Format im Gegensatz zu einem halben Cacheline-Format). Die Anzahl der Unterteilungen konstant zu halten, während die Anzahl der Bits/Speicher geändert wird, ist gleichbedeutend mit einer Änderung des Mikronetztyps, d. h. in einer Ausführungsform wird ein Mikronetztyp durch die Anzahl der Unterteilungsstufen UND den zugehörigen Speicherplatz bestimmt. Um sicherzustellen, dass die Ausgabe des Codierers konform und kompatibel mit Hardware-Decodern ist, die nur mit vorgegebenen Codierformaten arbeiten, kann dies den Codierer in einigen Fällen dazu zwingen, einen anderen Mikronetztyp für das Teildreieck auf der rechten Seite zu wählen, so dass es den gleichen Mikronetztyp wie das Teildreieck auf der linken Seite hat.
  • Diese Beispielbeschränkungen ermöglichen es, dass verschiedene Teildreiecke im Netz unabhängig voneinander (sowohl bei der Codierung als auch bei der anschließenden Decodierung) durch eine hochleistungsfähige, asynchrone Parallelverarbeitung verarbeitet werden können, während gleichzeitig sichergestellt wird, dass diese Prozesse unabhängig voneinander dieselben Verschiebungswerte für Vertices ableiten, die zwischen benachbarten Teildreiecken bei der Codierung des Netzes gemeinsam genutzt werden, und dass Situationen vermieden werden, in denen eine Datenrepräsentation mit höherer Präzision in eine geringere Anzahl von Bits gequetscht wird, was zu einem Verlust an numerischer Auflösung führen würde und somit eine Bit-für-Bit-Übereinstimmung der Verschiebungswerte an den Schnittpunkten von Vertices verschiedener Teildreiecke unmöglich machen würde. Es ist ein bisschen so, als würde man verschiedene Augenzeugen eines wichtigen Ereignisses unabhängig voneinander in verschiedenen Räumen befragen, ohne sie miteinander sprechen zu lassen, und jeder Zeuge würde genau denselben Ablauf der Ereignisse bestätigen.
  • Kompressor - Netz-Codierer (einheitlich)
  • Der nachstehende, in 21, 21A, 21B dargestellte Pseudocode veranschaulicht, wie die Codierung eines gleichmäßig tesselierten Netzes gemäß einigen Ausführungsformen funktioniert:
  für jede Mikronetztyp (von der höchsten zur niedrigsten Kompression):
      foreach nicht verschlüsseltes Teildreieck:
      codiere Teildreieck
           if erfolgreich, then markiere Teildreieck als codiert
                foreach teilweise codierte Kante
                aktualisiere Referenzverschiebungen in noch nicht
 codierten Teildreiecken.
  • Zu beachten ist, dass jedes Teildreieck einen Satz von Referenzverschiebungswerten enthält, die die Zielwerte für die Kompression sind. Eine Kante, die von einem codierten Teildreieck und einem oder mehreren noch nicht codierten Teildreiecken geteilt wird, gilt als „teilweise codiert“. Um eine rissfreie Kompression zu gewährleisten, werden die dekomprimierten Verschiebungswerte an die noch nicht codierten Teildreiecke weitergegeben, wo sie deren Referenzwerte ersetzen.
  • Das Flussdiagramm in 22 und die Flipchart-Animationssequenz der Dreiecks-Tesselierungsstufen in den 23A-23F zeigen eine Beispielimplementierung des obigen Pseudocodes. Ein Beispielalgorithmus beginnt mit der am stärksten komprimierten Implementierung für den gewünschten Detaillierungsgrad - in diesem Fall ein Dreieck der Stufe 6, das so tesseliert ist, dass es 4096 Mikrodreiecke hat. Wie 22 zeigt, verwendet der Builder die obigen Algorithmen zur Erstellung von Verschiebungsblöcken und prüft dann, ob die Qualität akzeptabel ist oder nicht (dieser Test kann auf der Grundlage einer Reihe verschiedener Heuristiken, Metriken künstlicher Intelligenz, tiefer neuronaler Netze oder anderer Tests durchgeführt werden). Wenn die Qualität akzeptabel ist, schreibt der Builder die Verschiebungsblöcke aus und ist damit fertig. Ist die Qualität inakzeptabel, verringert der Builder das Kompressionsverhältnis und versucht es erneut. Eine solche Verringerung der Kompression kann bedeuten, dass mehr unterteilt wird oder ein anderer Speicher für die gleiche Anzahl von Mikrodreiecken/Unterteilungen verwendet wird (siehe 23B).
  • In diesem Fall hat der Builder das Teildreieck in 23A in vier Dreiecke der Stufe 5 unterteilt, die jeweils 1024 Mikrodreiecke definieren. Wie 22 zeigt, wird der Vorgang wiederholt, um die Informationen des Verschiebungsblocks zu erstellen und zu testen. Nehmen wir nun an, dass die drei unteren Teildreiecke eine akzeptable Qualität auf der Tesselierungsstufe 5 liefern, das obere Dreieck jedoch nicht. Das bedeutet, dass der Builder das obere Dreieck auf Tesselierungsstufe 4 unterteilen muss (siehe 23B). In der Situation von 23C unterscheidet sich jedoch der Kompressionsverhältnis des oberen Dreiecks vom Kompressionsverhältnis der unteren Dreiecke.
  • Hier macht sich der Algorithmus die Einschränkung zunutze, dass die weniger komprimierten Vertex-Formate der oberen Teildreiecke in der Lage sein müssen, die stärker komprimierten Vertex-Formate der unteren Teildreiecke darzustellen. Dies mag wie eine überflüssige Anforderung klingen - wird ein weniger komprimiertes Format nicht immer in der Lage sein, die Werte eines stärker komprimierten Formats darzustellen? Nicht unbedingt - wenn beide Formate verlustbehaftete Kompression verwenden, besteht die Möglichkeit, dass ein weniger komprimiertes Format bestimmte Werte nicht darstellen kann, die ein stärker komprimiertes Format darstellen kann. Wenn eine solche Situation eintreten würde, wären Risse im Netz die Folge. In Ausführungsbeispielen wird daher eine Beschränkung eingeführt, um dies zu verhindern - nämlich, dass ein weniger komprimierter Typ immer alle Werte eines stärker komprimierten Typs darstellen kann.
  • Aber selbst diese Einschränkung reicht nicht aus, um zu garantieren, dass keine Risse entstehen. Denn die Verschiebungswerte, die der Dekompressor von den untersten Teildreiecken an der gemeinsamen Kante mit dem obersten Teildreieck zurückgewinnt, sind nicht die ursprünglichen Verschiebungen des Netzes, sondern haben einen verlustbehafteten Kompressionsprozess durchlaufen. Dementsprechend stellen wir in einer Ausführungsform die Bit-für-Bit-Anpassung über die Präzision und übertragen die erfolgreich komprimierten und dann wiederhergestellten Werte von den Vertices der unteren Teildreiecke auf die gemeinsame Kante mit dem obersten Teildreieck, wobei die übertragenen Werte die eigenen Vertex-Verschiebungen des obersten Teildreiecks ersetzen. Durch die Weitergabe dieser Verschiebungswerte, die aus der Dekompression der Vertices des unteren Teildreiecks zurückgewonnen wurden, an das weniger komprimierte oberste Teildreieck - und mit der Einschränkung, dass das weniger komprimierte Format des obersten Teildreiecks genau diese weitergegebenen Werte aus einem stärker komprimierten Format darstellen kann - kann nun garantiert werden, dass die Vertex-Verschiebungen, die der Decoder für das oberste Teildreieck zurückgewinnt, Bit für Bit identisch mit den entsprechenden Vertex-Verschiebungen sind, die der Decoder für die untersten Teildreiecke entlang der gemeinsamen Kante zurückgewinnt - ohne dass der Decoder beide gleichzeitig decodieren muss oder weiß, dass es eine gemeinsame Kante gibt.
  • Der Algorithmus versucht dann, die vier unterteilten oberen Teildreiecke erneut zu komprimieren, wie in 23D gezeigt, wobei die oben beschriebenen propagierten Werte verwendet werden. Nehmen wir nun an, dass, wie in 23E gezeigt, alle Dreiecke bis auf das mittlere Dreieck eine akzeptable Qualität aufweisen, dass aber das mittlere Dreieck mit einer noch niedrigeren Tesselierungsrate neu komprimiert werden muss.
  • Wie 23E zeigt, werden alle drei Kanten des mittleren Dreiecks mit anderen Teildreiecken geteilt. In diesem Fall werden die wiederhergestellten Verschiebungen für alle Vertices des mittleren Teildreiecks von den bereits komprimierten umliegenden Teildreiecken übernommen, um eine Bit-für-Bit-Übereinstimmung mit den Vertices an gemeinsamen Kanten sicherzustellen. 23F zeigt, dass das mittlere Dreieck weiter in Teildreiecke der Stufe 3 unterteilt ist, die möglicherweise überhaupt nicht komprimiert werden, sondern einfach die dekomprimierten Verschiebungswerte von den gemeinsamen Kanten in unkomprimierter Form wiedergeben.
  • Kompressor - Netz-Codierer (adaptiv)
  • Wie unten gezeigt, wird bei der Codierung von adaptiv tesselierten Netzen eine zusätzliche äußere Schleife verwendet, um die Teildreiecke in aufsteigender Reihenfolge der Tesselierungsrate zu verarbeiten:
  •   foreach Auflösung des Basisdreiecks (von niedriger zu höherer
     Auflösung):
           foreach Netztyp (von der höchsten zur niedrigsten
     Kompression):
                foreach nicht codiertes Dreieck:
                codiere Teildreieck
                     if erfolgreich, then markiere Teildreieck als codiert
                foreach teilweise codierte Kante:
           aktualisiere Referenzverschiebungen in noch nicht codierten
     Teildreiecken.
  • Die hier beschriebene Kompressionstechnik geht nicht davon aus, ob das zu komprimierende Netz vielfältig ist oder nicht, und daher können wir auch nicht-vielfältige Netze problemlos komprimieren. Diese Eigenschaft kann sehr wichtig sein (oft sind Assets aus Spielen nicht mannigfaltig) und macht die Beispielverkörperung robuster.
  • Man beachte, dass bei der Aktualisierung der Referenzverschiebungen für Kanten, die mit Teildreiecken geteilt werden, die eine 2x höhere Tesselierungsrate verwenden, nur jeder zweite Vertex betroffen ist (siehe 20B), während in einer Ausführungsform die verbleibenden Vertices gezwungen sind, Nullkorrekturen zu verwenden, um die Verschiebungsneigung an der gemeinsamen Kante des Teildreiecks mit niedrigerer Auflösung anzupassen. Außerdem ist nicht gewährleistet, dass Teildreiecke mit höherer Auflösung, die aktualisierte Verschiebungswerte von Teildreiecken mit niedrigerer Auflösung „empfangen“, diese Werte auch darstellen können. Diese Fälle sind zwar eher selten, aber um Risse zu vermeiden, können die aktualisierten Referenzwerte verlustfrei codiert werden, damit sie immer mit ihrem Gegenstück an der Kante des Teildreiecks mit geringerer Auflösung übereinstimmen. Ist eine solche verlustfreie Codierung nicht möglich, scheitert die Codierung des Teildreiecks und es wird ein neuer Versuch mit einem weniger komprimierten µ-Netz-Typ unternommen.
  • Beispielhafte Implementierungen
  • 24 zeigt ein Beispielsystem, das die hier beschriebene, nicht beschränkende Technologie implementiert. In dem gezeigten Beispiel wird die Druckvorlage 100 in geeigneter Form von mindestens einem Prozessor empfangen, der die Algorithmen des Builders ausführt, wie in den 9, 14 und 22 gezeigt (Block 102). Der Builder codiert/komprimiert die Vorlage in ein Mikronetz, wie oben beschrieben, und speichert das codierte Mikronetz in einem nicht-übertragbaren Speicher als Beschleunigungsdatenstruktur, die eine Begrenzungsvolumenhierarchie 104 aufweist, die ein Datenformat wie in den 6, 12 und 13 zeigt. Das codierte Mikronetz 104 wird (z. B. über ein Netzwerk, auf einem Speichermedium usw.) an einen Decoder/Dekompressor 106 übermittelt. Der Decoder/Dekompressor 106 kann Hardwareschaltungen und/oder mindestens einen Prozessor aufweisen, der die oben im Zusammenhang mit 10 erörterten Algorithmen ausführt, um die komprimierten Verschiebungswerte wiederherzustellen und sie einer GPU mit einer Grafikpipeline 108 für die Darstellung von Bildern auf einem Display 110 zur Verfügung zu stellen.
  • 25A zeigt, dass die Grafikpipeline Vertex-Shader 204 und Textur-Mapper 205 aufweist, die Vertex- und Verschiebungsdatenblöcke 202 in Cacheline-Größe aus einem Cache-Speicher über eine Speicherschnittstellenschaltung empfangen und Informationen an Rasterizer 206 weitergeben, die ihrerseits Fragmente unter Verwendung von Fragment-Shadern 208 erzeugen, die zur Bilddarstellung gemischt werden.
  • 25B zeigt eine alternative Grafikpipeline, bei der die Vertexdaten 202 einem Raytracing-Shader 202 und auch der Raytracing-Hardware 214 zugeführt werden, die die Strahlen- und Pfadverfolgung zur Erzeugung der Anzeige 110 verwenden. 26 zeigt ein beispielhaftes Blockdiagramm eines Teils der Raytracing-Hardware 214, die den Dekompressor 106 enthält, der Verschiebungsblöcke aus dem Speichersystem empfängt und dekomprimierte Verschiebungswerte an eine Schnittpunkt-Testschaltung zum Testen gegen Strahlen liefert.
  • 25C zeigt eine kombinierte Grafikpipeline, die eine Mischung aus verschobenen mikronetz-basierten Ausgaben verwendet, die von Vertex-Shadern 204, Texture Mappern 205 und Ray Tracer 214 erzeugt werden, um Bilder zu erzeugen.
  • Bilder, die unter Anwendung einer oder mehrerer der hier offenbarten Techniken erzeugt wurden, können auf einem Monitor oder einem anderen Anzeigegerät angezeigt werden. In einigen Ausführungsformen kann das Anzeigegerät direkt mit dem System oder Prozessor gekoppelt sein, das die Bilder erzeugt oder wiedergibt. In anderen Ausführungsformen kann die Anzeigevorrichtung indirekt mit dem System oder Prozessor gekoppelt sein, beispielsweise über ein Netzwerk. Beispiele für solche Netzwerke sind das Internet, mobile Telekommunikationsnetzwerke, ein WIFI-Netzwerk sowie jedes andere drahtgebundene und/oder drahtlose Netzwerksystem. Wenn das Anzeigegerät indirekt gekoppelt ist, können die vom System oder Prozessor erzeugten Bilder über das Netzwerk an das Anzeigegerät gestreamt werden. Ein solches Streaming ermöglicht es beispielsweise, dass Videospiele oder andere Anwendungen, die Bilder rendern, auf einem Server oder in einem Datenzentrum ausgeführt werden und die gerenderten Bilder auf ein oder mehrere Benutzergeräte (wie einen Computer, eine Videospielkonsole, ein Smartphone, ein anderes mobiles Gerät usw.) übertragen und angezeigt werden, die physisch von dem Server oder Datenzentrum getrennt sind. Daher können die hier offenbart Techniken angewendet werden, um die gestreamten Bilder zu verbessern und um Dienste zu verbessern, die Bilder streamen, wie NVIDIA GeForce Now (GFN), Google Stadia und dergleichen.
  • Darüber hinaus können Bilder, die unter Anwendung einer oder mehrerer der hier offenbarten Techniken erzeugt wurden, zum Trainieren, Testen oder Zertifizieren von tiefen neuronalen Netzen (DNNs) verwendet werden, die zur Erkennung von Objekten und Umgebungen in der realen Welt eingesetzt werden. Solche Bilder können Szenen von Straßen, Fabriken, Gebäuden, städtischen Umgebungen, ländlichen Umgebungen, Menschen, Tieren und anderen physischen Objekten oder realen Umgebungen umfassen. Solche Bilder können zum Trainieren, Testen oder Zertifizieren von DNNs verwendet werden, die in Maschinen oder Robotern eingesetzt werden, um physische Objekte in der realen Welt zu manipulieren, zu handhaben oder zu verändern. Darüber hinaus können solche Bilder verwendet werden, um DNNs zu trainieren, zu testen oder zu zertifizieren, die in autonomen Fahrzeugen eingesetzt werden, um die Fahrzeuge durch die reale Welt zu navigieren und zu bewegen. Darüber hinaus können Bilder, die unter Anwendung einer oder mehrerer der hier offengelegten Techniken erzeugt wurden, verwendet werden, um den Benutzern solcher Maschinen, Roboter und Fahrzeuge Informationen zu vermitteln.
  • Darüber hinaus können Bilder, die unter Anwendung einer oder mehrerer der hier offengelegten Techniken erzeugt wurden, verwendet werden, um Informationen über eine virtuelle Umgebung wie das Metaverse, das Omniverse oder einen digitalen Zwilling einer realen Umgebung anzuzeigen oder zu vermitteln. Darüber hinaus können Bilder, die unter Anwendung einer oder mehrerer der hier offengelegten Techniken erzeugt wurden, dazu verwendet werden, Informationen auf einer Vielzahl von Geräten anzuzeigen oder zu übermitteln, einschließlich eines PCs (z. B. eines Laptops), eines Internet of Things (IoT)-Geräts, eines Handheld-Geräts (z. B. eines Smartphones), eines Fahrzeugs, eines Roboters oder eines beliebigen Geräts, das ein Display enthält.
  • Alle hierin zitierten Patente, Patentanmeldungen und Veröffentlichungen sind für alle Zwecke so einbezogen, als ob sie ausdrücklich aufgeführt wären.
  • Alle oben zitierten Patente und Veröffentlichungen werden durch Bezugnahme einbezogen, als ob sie ausdrücklich aufgeführt wären. Während die Erfindung im Zusammenhang mit dem, was derzeit als die meisten praktischen und bevorzugten Ausführungsformen beschrieben wurde, ist es zu verstehen, dass die Erfindung nicht auf die offenbart Ausführungsformen beschränkt werden, sondern im Gegenteil, soll verschiedene Modifikationen und gleichwertige Anordnungen innerhalb des Geistes und Umfangs der beigefügten Ansprüche enthalten.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 63245155 [0001]
    • US 17946235 [0003]
    • US 17946221 [0004]
    • US 10825230 [0009]
    • US 9437042 [0009]
    • US 8860742 [0009]
    • US 8698802 [0009]
    • US 8570322 [0009]
    • US 8558833 [0009]
    • US 8471852 [0009]
    • US 20110085736 [0009]
    • US 7324105 [0009]
    • US 7196703 [0009]
    • US 6597356 [0009]
    • US 6738062 [0009]
    • US 6504537 [0009]
  • Zitierte Nicht-Patentliteratur
    • Lee et al, „Displaced subdivision surfaces“, SIGGRAPH ‚00: Proceedings of the 27th annual conference on Computer graphics and interactive techniques July 2000 Pages 85-94 //doi.org/10.1145/344779.344829 [0009]
    • Cantlay, „DirectX 11 Terrain Tesselation“, Nvidia (Januar 2011); khronos.org/opengl/wiki/Tessellation#Tessellation_control_shader; Moreton et al, (2001); Moreton, Tesselation and Geometry Shaders: Trends CMU 15-869 [0009]
    • Dudash, „My Tesselation Has Cracks!“, Game Developer‘s Conference (2012); Sfarti et al, „New 3D Graphics Rendering Engine Architecture for Direct Tessellation of Spline Surfaces“, V.S. Sunderam et al. (Eds.): ICCS 2005, LNCS 3515, pp. 224-231 (2005) [0009]
    • N. Pietroni et al, „Almost Isometric Mesh Parameterization through Abstract Domains,“ IEEE Transactions on Visualization and Computer Graphics, vol. 16, no. 4, pp. 621-635, July-Aug. 2010, doi: 10.1 109/TVCG.2009.96 [0009]
    • Thonat et al, Tessellation-free displacement mapping for ray tracing, pp 1-16 ACM Transactions on Graphics Volume 40 Issue 6 No.: 282 (Dezember 2021) doi.org/10.1145/3478513.3480535 [0017]
    • Wang et al, View-dependent displacement mapping, ACM Transactions on Graphics Volume 22 Issue 3, Juli 2003 pp 334-339, doi.org/10.1145/882262.882272 [0017]
    • Lier et al, „A high-resolution compression scheme for ray tracing subdivision surfaces with displacement“, Proceedings of the ACM on Computer Graphics and Interactive Techniques Volume 1 Issue 2 August 2018 Article No.: 33 pp 1-17, doi.org/10.1145/3233308 [0017]
    • Chun et al, „Multiple layer displacement mapping with lossless image compression“, International Conference on Technologies for E-Learning and Digital Entertainment Edutainment 2010: Entertainment for Education. Digital Techniques and Systems pp 518-528 [0017]
    • Szirmay-Kalos et al, Displacement Mapping on the GPU-State of the Art, Computer Graphics Forum Volume 27, Issue 6 September 2008 Pages 1567-1592 [0017]

    Claims (21)

    1. Vertex-Verschiebungs-Codierungsverfahren, das aufweist: (a) Codieren von Teildreiecken in aufsteigender Reihenfolge der Tesselierungsrate; (b) Codieren von Teildreiecken mit der gleichen Tesselierungsrate in absteigender Reihenfolge der Kompressionsrate; und (c) für einen bestimmten Mikronetztyp, Verwenden mindestens derselben Anzahl von Bits für eine Unterteilungsstufe wie für die nächste, stärker unterteilte Stufe.
    2. Nichtflüchtiger Speicher, der konfiguriert ist, einen Vertex-Verschiebungsdatenblock zu speichern, der aufweist: einen ersten UNORM-Verschiebungswert für einen ersten Basisdreieck-Vertex; einen zweiten UNORM-Verschiebungswert für einen zweiten Basisdreieck-Vertex; einen dritten UNORM-Verschiebungswert für einen dritten Basisdreieck-Vertex; und Korrekturwerte, die konfiguriert sind, Vertex-Verschiebungswerte zu korrigieren, die zumindest teilweise auf den ersten, zweiten und dritten UNORM-Verschiebungswerten basieren.
    3. Speicher nach Anspruch 2, wobei der Vertex-Verschiebungsdatenblock ferner Verschiebungswerte aufweist, die konfiguriert sind, die Korrekturwerte anzupassen.
    4. Kompressor, der aufweist: ein Prädiktor, der eine Mittelwertbildung verwendet, um Vertex-Verschiebungswerte vorzusagen; einen Komparator, der die vorhergesagten Vertex-Verschiebungswerte mit vorgegebenen Vertex-Verschiebungswerten vergleicht und Korrekturen bestimmt; und einen Qualitätstester, der die durch die Qualitätskorrekturen korrigierten vorausgesagten Vertex-Verschiebungswerte prüft.
    5. Kompressor nach Anspruch 4, bei dem der Komparator die Wrap-Around-Arithmetik nutzt, um die Qualität zu erhöhen.
    6. Kompressor nach Anspruch 4, wobei der Komparator Verschiebungswerte zur Anwendung auf die bestimmten Korrekturen berechnet und wiederhergestellte dekomprimierte Vertex-Verschiebungswerte anstelle von Mikrovertex-Eingangsverschiebungswerten zur Verwendung bei der Vorhersage von Vertex-Verschiebungswerten für Polygonkanten ersetzt, die von Teildreiecken mit unterschiedlichen Tesselierungsraten gemeinsam genutzt werden.
    7. Kompressor nach Anspruch 4, wobei der Kompressor konfiguriert ist, Teildreiecke in aufsteigender Reihenfolge der Tesselierungsrate zu codieren, Teildreiecke mit der gleichen Tesselierungsrate in absteigender Reihenfolge der Kompressionsrate zu codieren und für einen gegebenen Mikronetztyp mindestens die gleiche Anzahl von Bits für eine Unterteilungsstufe zu verwenden wie für die nächste, stärker unterteilte Stufe.
    8. Dekompressor, der aufweist: einen Prädiktor, der basierend auf zuvor empfangenen und/oder berechneten Mikrovertex-Verschiebungswerten Mikrovertex-Verschiebungswerte für ein Mikronetz vorhersagt; einen Korrektor, der die vorhergesagten Mikrovertex-Verschiebungswerte basierend auf den empfangenen Korrekturen korrigiert.
    9. Dekompressor nach Anspruch 8, der ferner ein Schieberegister aufweist, das die empfangenen Korrekturen um einen Verschiebungsbetrag verschiebt, der durch einen empfangenen Verschiebungswert spezifiziert wird.
    10. Dekompressor nach Anspruch 8, der ferner einen rekursiven Unterteiler aufweist, der das Mikronetz rekursiv unterteilt und aussortiert.
    11. Grafiksystem, das aufweist: eine Speicherschnittstellenschaltung, die Mikrovertex-Verschiebungsblöcke in Cacheline-Größe aus einem Cache-Speicher empfängt; einen Dekompressor, der Verschiebungswerte zumindest teilweise basierend auf dem Inhalt der Mikrovertex-Verschiebungsblöcke vorhersagt und die vorhergesagten Verschiebungswerte korrigiert; und eine Grafikpipeline, die ein Bild zumindest teilweise basierend auf den korrigierten, vorhergesagten Verschiebungswerten rendert.
    12. Grafiksystem nach Anspruch 11, wobei die Verschiebungsblöcke Teil einer Beschleunigungsstruktur sind und die Grafikpipeline einen Raytracer aufweist.
    13. Graphiksystem nach Anspruch 12, wobei der Raytracer eine Strahlenschnitttestschaltung aufweist, die die korrigierten vorhergesagten Verschiebungswerte vom Dekompressor empfängt.
    14. Grafiksystem nach Anspruch 13, wobei der Dekompressor ein Schieberegister aufweist, das die empfangenen Korrekturwerte basierend auf Verschiebungsbeträgen verschiebt, die die Mikrovertex-Verschiebungsblöcke spezifizieren.
    15. Grafiksystem nach Anspruch 11, wobei die Grafikpipeline einen Dreieckstexturmapper enthält.
    16. Graphiksystem nach Anspruch 11, wobei der Dekompressor Bit-für-Bit-Übereinstimmungen der korrigierten Verschiebungswerte für Vertices unterschiedlicher Teildreiecke bereitstellt, die zu unterschiedlichen Zeiten dekomprimiert wurden.
    17. Graphikverarbeitungsverfahren, das aufweist: Empfangen von Mikrovertex-Verschiebungsblöcken aus einem Cache-Speicher, wobei die Blöcke so bemessen sind, dass sie in eine Cacheline passen; Vorhersagen von Mikrovertex-Verschiebungen, zumindest teilweise auf dem Inhalt der Mikrovertex-Verschiebungsblöcke basierend; Korrigieren der vorhergesagten Mikrovertex-Verschiebungen basierend auf Korrekturfaktoren, die von den Blöcken spezifiziert werden; und Rendern eines Bildes, zumindest teilweise auf den korrigierten, vorhergesagten Mikrovertex-Verschiebungen basierend.
    18. Graphikverarbeitungsverfahren nach Anspruch 17, wobei das Rendern das Rendern eines rissfreien Bildes aufweist.
    19. Graphikverarbeitungsverfahren nach Anspruch 17, wobei das Rendern das Testen eines Strahls auf einen Schnitt mit einer Geometrie aufweist, die durch die korrigierten, vorhergesagten Mikrovertex-Verschiebungen spezifiziert ist.
    20. Graphikverarbeitungsverfahren nach Anspruch 17, das ferner das Verschieben der Korrekturfaktoren als Reaktion auf Verschiebungswerte aufweist, die die Blöcken spezifizieren.
    21. Graphikverarbeitungsverfahren nach Anspruch 17, das ferner das Komprimieren eines Netzes aufweist, ohne dass eine Annahme darüber getroffen wird, ob das Netz vielfältig ist oder nicht.
    DE112022003547.1T 2021-09-16 2022-09-16 Verschobene Mikronetz-Kompression Pending DE112022003547T5 (de)

    Applications Claiming Priority (3)

    Application Number Priority Date Filing Date Title
    US202163245155P 2021-09-16 2021-09-16
    US63/245,155 2021-09-16
    PCT/US2022/043800 WO2023044001A1 (en) 2021-09-16 2022-09-16 Displaced micromesh compression

    Publications (1)

    Publication Number Publication Date
    DE112022003547T5 true DE112022003547T5 (de) 2024-05-29

    Family

    ID=83558134

    Family Applications (4)

    Application Number Title Priority Date Filing Date
    DE112022003721.0T Pending DE112022003721T5 (de) 2021-09-16 2022-09-16 Mikro-netze, eine strukturierte geometrie für computergrafik
    DE112022003547.1T Pending DE112022003547T5 (de) 2021-09-16 2022-09-16 Verschobene Mikronetz-Kompression
    DE112022004435.7T Pending DE112022004435T5 (de) 2021-09-16 2022-09-16 Beschleunigung von Dreieckssichtbarkeitstests für Echtzeit-Strahlenverfolgung
    DE112022004426.8T Pending DE112022004426T5 (de) 2021-09-16 2022-09-16 Verschobene Mikronetze für Ray- und Pathtracing

    Family Applications Before (1)

    Application Number Title Priority Date Filing Date
    DE112022003721.0T Pending DE112022003721T5 (de) 2021-09-16 2022-09-16 Mikro-netze, eine strukturierte geometrie für computergrafik

    Family Applications After (2)

    Application Number Title Priority Date Filing Date
    DE112022004435.7T Pending DE112022004435T5 (de) 2021-09-16 2022-09-16 Beschleunigung von Dreieckssichtbarkeitstests für Echtzeit-Strahlenverfolgung
    DE112022004426.8T Pending DE112022004426T5 (de) 2021-09-16 2022-09-16 Verschobene Mikronetze für Ray- und Pathtracing

    Country Status (4)

    Country Link
    US (5) US20230081791A1 (de)
    CN (4) CN117157676A (de)
    DE (4) DE112022003721T5 (de)
    WO (4) WO2023044033A1 (de)

    Families Citing this family (12)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US11995854B2 (en) * 2018-12-19 2024-05-28 Nvidia Corporation Mesh reconstruction using data-driven priors
    US12002190B2 (en) * 2020-12-29 2024-06-04 Apple Inc. Primitive testing for ray intersection at multiple precisions
    US11908063B2 (en) * 2021-07-01 2024-02-20 Adobe Inc. Displacement-centric acceleration for ray tracing
    US20240013399A1 (en) * 2022-07-05 2024-01-11 Alibaba (China) Co., Ltd. Pyramid architecture for multi-scale processing in point cloud segmentation
    US20240104844A1 (en) * 2022-09-28 2024-03-28 Advanced Micro Devices, Inc. Multi-resolution geometric representation using bounding volume hierarchy for ray tracing
    US20240144597A1 (en) * 2022-10-31 2024-05-02 Electronic Arts Inc. Systems and methods for storing triangulations of polygonal mesh faces
    US11727640B1 (en) * 2022-12-12 2023-08-15 Illuscio, Inc. Systems and methods for the continuous presentation of point clouds
    US11704769B1 (en) * 2023-01-25 2023-07-18 Illuscio, Inc. Systems and methods for image regularization based on a curve derived from the image data
    US20240312066A1 (en) * 2023-03-17 2024-09-19 Tencent America LLC Method to generate displacement for symmetry mesh
    CN118694979A (zh) * 2023-03-23 2024-09-24 维沃移动通信有限公司 三维网格位移信息编码方法、解码方法、装置及终端
    CN117115239B (zh) * 2023-06-07 2024-02-23 中国人民解放军91977部队 用于远区电磁散射强度估计的入射线交点获取方法
    CN118429595B (zh) * 2024-07-04 2024-10-11 山东捷瑞数字科技股份有限公司 一种基于三维引擎的运动模糊实现的方法

    Citations (13)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US6504537B1 (en) 2000-09-05 2003-01-07 Nvidia Corporation System, method and article of manufacture for fractional tessellation during graphics processing
    US6597356B1 (en) 2000-08-31 2003-07-22 Nvidia Corporation Integrated tessellator in a graphics processing unit
    US6738062B1 (en) 2001-01-10 2004-05-18 Nvidia Corporation Displaced subdivision surface representation
    US7196703B1 (en) 2003-04-14 2007-03-27 Nvidia Corporation Primitive extension
    US7324105B1 (en) 2003-04-10 2008-01-29 Nvidia Corporation Neighbor and edge indexing
    US20110085736A1 (en) 2009-10-12 2011-04-14 Nvidia Corporation Method for watertight evaluation of an approximate catmull-clark surface
    US8471852B1 (en) 2003-05-30 2013-06-25 Nvidia Corporation Method and system for tessellation of subdivision surfaces
    US8558833B1 (en) 2009-10-14 2013-10-15 Nvidia Corporation System and method for symmetric parameterization of independently tessellated patches
    US8570322B2 (en) 2009-05-12 2013-10-29 Nvidia Corporation Method, system, and computer program product for efficient ray tracing of micropolygon geometry
    US8698802B2 (en) 2009-10-07 2014-04-15 Nvidia Corporation Hermite gregory patch for watertight tessellation
    US8860742B2 (en) 2011-05-02 2014-10-14 Nvidia Corporation Coverage caching
    US9437042B1 (en) 2011-10-20 2016-09-06 Nvidia Corporation System, method, and computer program product for performing dicing on a primitive
    US10825230B2 (en) 2018-08-10 2020-11-03 Nvidia Corporation Watertight ray triangle intersection

    Family Cites Families (48)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US6610129B1 (en) 2000-04-05 2003-08-26 Hewlett-Packard Development Company Ink-jet inks which prevent kogation and prolong resistor life in ink-jet pens
    US8411088B2 (en) 2000-06-19 2013-04-02 Nvidia Corporation Accelerated ray tracing
    US7773088B2 (en) * 2000-06-19 2010-08-10 Mental Images Gmbh Simultaneous simulation of markov chains using quasi-monte carlo techniques
    US7154507B1 (en) 2000-10-02 2006-12-26 Nvidia Corporation System, method and computer program product for texture shading
    US6828980B1 (en) 2000-10-02 2004-12-07 Nvidia Corporation System, method and computer program product for z-texture mapping
    US6610126B2 (en) 2001-06-06 2003-08-26 Donaldson Company, Inc. Filter element having sealing members and methods
    US6721815B1 (en) 2001-09-27 2004-04-13 Intel Corporation Method and apparatus for iTD scheduling
    US6610125B2 (en) 2001-10-23 2003-08-26 University Of Maine System Board Of Trustees Selective filtration and concentration of toxic nerve agents
    US6610124B1 (en) 2002-03-12 2003-08-26 Engelhard Corporation Heavy hydrocarbon recovery from pressure swing adsorption unit tail gas
    US7009608B2 (en) * 2002-06-06 2006-03-07 Nvidia Corporation System and method of using multiple representations per object in computer graphics
    US7385604B1 (en) 2004-11-04 2008-06-10 Nvidia Corporation Fragment scattering
    US7447873B1 (en) 2005-11-29 2008-11-04 Nvidia Corporation Multithreaded SIMD parallel processor with loading of groups of threads
    US7965291B1 (en) 2006-11-03 2011-06-21 Nvidia Corporation Isosurface extraction utilizing a graphics processing unit
    US7692654B1 (en) 2006-12-08 2010-04-06 Nvidia Corporation Nondeterministic pixel location and identification in a raster unit of a graphics pipeline
    US7808512B1 (en) 2006-12-19 2010-10-05 Nvidia Corporation Bounding region accumulation for graphics rendering
    US7724254B1 (en) 2007-03-12 2010-05-25 Nvidia Corporation ISO-surface tesselation of a volumetric description
    US7868885B2 (en) * 2007-06-22 2011-01-11 Microsoft Corporation Direct manipulation of subdivision surfaces using a graphics processing unit
    US8773422B1 (en) 2007-12-04 2014-07-08 Nvidia Corporation System, method, and computer program product for grouping linearly ordered primitives
    US8120607B1 (en) 2008-05-30 2012-02-21 Nvidia Corporation Boundary transition region stitching for tessellation
    US10109103B2 (en) * 2010-06-30 2018-10-23 Barry L. Jenkins Method of determining occluded ingress and egress routes using nav-cell to nav-cell visibility pre-computation
    US9396512B2 (en) 2012-03-09 2016-07-19 Nvidia Corporation Fully parallel construction of k-d trees, octrees, and quadtrees in a graphics processing unit
    US9153209B2 (en) 2012-08-06 2015-10-06 Nvidia Corporation Method and system for generating a displacement map from a normal map
    US9355492B2 (en) 2013-05-15 2016-05-31 Nvidia Corporation System, method, and computer program product for utilizing a wavefront path tracer
    US10235338B2 (en) 2014-09-04 2019-03-19 Nvidia Corporation Short stack traversal of tree data structures
    US9552664B2 (en) 2014-09-04 2017-01-24 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy
    US10242485B2 (en) 2014-09-04 2019-03-26 Nvidia Corporation Beam tracing
    US10074212B2 (en) 2015-07-30 2018-09-11 Nvidia Corporation Decorrelation of low discrepancy sequences for progressive rendering
    US10388059B2 (en) * 2016-10-03 2019-08-20 Nvidia Corporation Stable ray tracing
    US10909739B2 (en) 2018-01-26 2021-02-02 Nvidia Corporation Techniques for representing and processing geometry within an expanded graphics processing pipeline
    US11113790B2 (en) 2018-04-12 2021-09-07 Nvidia Corporation Adding greater realism to a computer-generated image by smoothing jagged edges
    US10740952B2 (en) 2018-08-10 2020-08-11 Nvidia Corporation Method for handling of out-of-order opaque and alpha ray/primitive intersections
    US10810785B2 (en) 2018-08-10 2020-10-20 Nvidia Corporation Method for forward progress tree traversal mechanisms in hardware
    US10885698B2 (en) 2018-08-10 2021-01-05 Nvidia Corporation Method for programmable timeouts of tree traversal mechanisms in hardware
    US10580196B1 (en) 2018-08-10 2020-03-03 Nvidia Corporation Method for continued bounding volume hierarchy traversal on intersection without shader intervention
    US10867429B2 (en) 2018-08-10 2020-12-15 Nvidia Corporation Query-specific behavioral modification of tree traversal
    US11157414B2 (en) 2018-08-10 2021-10-26 Nvidia Corporation Method for efficient grouping of cache requests for datapath scheduling
    US11138009B2 (en) 2018-08-10 2021-10-05 Nvidia Corporation Robust, efficient multiprocessor-coprocessor interface
    US11145105B2 (en) * 2019-03-15 2021-10-12 Intel Corporation Multi-tile graphics processor rendering
    US11087522B1 (en) * 2020-03-15 2021-08-10 Intel Corporation Apparatus and method for asynchronous ray tracing
    US20210287431A1 (en) * 2020-03-15 2021-09-16 Intel Corporation Apparatus and method for displaced mesh compression
    US11295508B2 (en) 2020-06-10 2022-04-05 Nvidia Corporation Hardware-based techniques applicable for ray tracing for efficiently representing and processing an arbitrary bounding volume
    US11302056B2 (en) 2020-06-10 2022-04-12 Nvidia Corporation Techniques for traversing data employed in ray tracing
    US11282261B2 (en) 2020-06-10 2022-03-22 Nvidia Corporation Ray tracing hardware acceleration with alternative world space transforms
    US11380041B2 (en) 2020-06-11 2022-07-05 Nvidia Corporation Enhanced techniques for traversing ray tracing acceleration structures
    US11373358B2 (en) 2020-06-15 2022-06-28 Nvidia Corporation Ray tracing hardware acceleration for supporting motion blur and moving/deforming geometry
    US11620724B2 (en) * 2020-09-25 2023-04-04 Ati Technologies Ulc Cache replacement policy for ray tracing
    US11270507B1 (en) * 2020-11-20 2022-03-08 Adobe Inc. Rendering textures utilizing sharp displacement mapping
    US11908063B2 (en) * 2021-07-01 2024-02-20 Adobe Inc. Displacement-centric acceleration for ray tracing

    Patent Citations (13)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US6597356B1 (en) 2000-08-31 2003-07-22 Nvidia Corporation Integrated tessellator in a graphics processing unit
    US6504537B1 (en) 2000-09-05 2003-01-07 Nvidia Corporation System, method and article of manufacture for fractional tessellation during graphics processing
    US6738062B1 (en) 2001-01-10 2004-05-18 Nvidia Corporation Displaced subdivision surface representation
    US7324105B1 (en) 2003-04-10 2008-01-29 Nvidia Corporation Neighbor and edge indexing
    US7196703B1 (en) 2003-04-14 2007-03-27 Nvidia Corporation Primitive extension
    US8471852B1 (en) 2003-05-30 2013-06-25 Nvidia Corporation Method and system for tessellation of subdivision surfaces
    US8570322B2 (en) 2009-05-12 2013-10-29 Nvidia Corporation Method, system, and computer program product for efficient ray tracing of micropolygon geometry
    US8698802B2 (en) 2009-10-07 2014-04-15 Nvidia Corporation Hermite gregory patch for watertight tessellation
    US20110085736A1 (en) 2009-10-12 2011-04-14 Nvidia Corporation Method for watertight evaluation of an approximate catmull-clark surface
    US8558833B1 (en) 2009-10-14 2013-10-15 Nvidia Corporation System and method for symmetric parameterization of independently tessellated patches
    US8860742B2 (en) 2011-05-02 2014-10-14 Nvidia Corporation Coverage caching
    US9437042B1 (en) 2011-10-20 2016-09-06 Nvidia Corporation System, method, and computer program product for performing dicing on a primitive
    US10825230B2 (en) 2018-08-10 2020-11-03 Nvidia Corporation Watertight ray triangle intersection

    Non-Patent Citations (9)

    * Cited by examiner, † Cited by third party
    Title
    Cantlay, „DirectX 11 Terrain Tesselation", Nvidia (Januar 2011); khronos.org/opengl/wiki/Tessellation#Tessellation_control_shader; Moreton et al, (2001); Moreton, Tesselation and Geometry Shaders: Trends CMU 15-869
    Chun et al, „Multiple layer displacement mapping with lossless image compression", International Conference on Technologies for E-Learning and Digital Entertainment Edutainment 2010: Entertainment for Education. Digital Techniques and Systems pp 518-528
    Dudash, „My Tesselation Has Cracks!", Game Developer‘s Conference (2012); Sfarti et al, „New 3D Graphics Rendering Engine Architecture for Direct Tessellation of Spline Surfaces", V.S. Sunderam et al. (Eds.): ICCS 2005, LNCS 3515, pp. 224-231 (2005)
    Lee et al, „Displaced subdivision surfaces", SIGGRAPH ‚00: Proceedings of the 27th annual conference on Computer graphics and interactive techniques July 2000 Pages 85-94 //doi.org/10.1145/344779.344829
    Lier et al, „A high-resolution compression scheme for ray tracing subdivision surfaces with displacement", Proceedings of the ACM on Computer Graphics and Interactive Techniques Volume 1 Issue 2 August 2018 Article No.: 33 pp 1-17, doi.org/10.1145/3233308
    N. Pietroni et al, „Almost Isometric Mesh Parameterization through Abstract Domains," IEEE Transactions on Visualization and Computer Graphics, vol. 16, no. 4, pp. 621-635, July-Aug. 2010, doi: 10.1 109/TVCG.2009.96
    Szirmay-Kalos et al, Displacement Mapping on the GPU-State of the Art, Computer Graphics Forum Volume 27, Issue 6 September 2008 Pages 1567-1592
    Thonat et al, Tessellation-free displacement mapping for ray tracing, pp 1-16 ACM Transactions on Graphics Volume 40 Issue 6 No.: 282 (Dezember 2021) doi.org/10.1145/3478513.3480535
    Wang et al, View-dependent displacement mapping, ACM Transactions on Graphics Volume 22 Issue 3, Juli 2003 pp 334-339, doi.org/10.1145/882262.882272

    Also Published As

    Publication number Publication date
    DE112022004426T5 (de) 2024-06-27
    WO2023044033A1 (en) 2023-03-23
    WO2023044029A1 (en) 2023-03-23
    DE112022004435T5 (de) 2024-07-11
    US20230078932A1 (en) 2023-03-16
    US20230078840A1 (en) 2023-03-16
    CN117136386A (zh) 2023-11-28
    WO2023044001A1 (en) 2023-03-23
    CN117280387A (zh) 2023-12-22
    US20230084570A1 (en) 2023-03-16
    US20230108967A1 (en) 2023-04-06
    WO2023043993A1 (en) 2023-03-23
    US20230081791A1 (en) 2023-03-16
    CN117157676A (zh) 2023-12-01
    CN117178297A (zh) 2023-12-05
    DE112022003721T5 (de) 2024-05-16

    Similar Documents

    Publication Publication Date Title
    DE112022003547T5 (de) Verschobene Mikronetz-Kompression
    DE69725480T2 (de) Gitternetzvereinfachung und Konstruktion von Gitternetzen
    DE112012001132B4 (de) Kompression einer tessellierten Primitivindexliste in einem kachelbasierten Rendering-System
    Gobbetti et al. C‐BDAM–compressed batched dynamic adaptive meshes for terrain rendering
    DE69636599T2 (de) Verfahren und system zur wiedergabe von grafischen objekten durch teilung in bildstücke und zusammensetzen von bildlagen zu einem wiedergabebild
    Pajarola et al. Survey of semi-regular multiresolution models for interactive terrain rendering
    US8022951B2 (en) Node structure for representing 3-dimensional objects using depth image
    DE69632157T2 (de) Kompression und -kodierung eines 3D Maschennetzes
    US6668091B1 (en) 3D mesh coding/decoding method
    DE102010046891B4 (de) Hierarchische Netzquantisierung für speichereffizientes Raytracing
    EP1321893B1 (de) Knotenstruktur zur Darstellung von dreidimensionalen Objekten mit Tiefenbildern
    US6445389B1 (en) Compression of polygonal models with low latency decompression
    DE69723550T2 (de) Kodierung und dekodierung von grafischen symbolen
    DE602005002781T2 (de) Geländewiedergabe mit geschachtelten regelmässigen Gittern
    DE112018005149T5 (de) Punktwolkenkomprimierung
    DE102013114373A1 (de) Konsistente Vertex-Einrastung für Rendering mit variabler Auflösung
    Labsik et al. Progressive transmission of subdivision surfaces
    Maglo et al. POMAR: Compression of progressive oriented meshes accessible randomly
    DE102022119422A1 (de) Verfahren zum Erzeugen einer hierarchischen Datenstruktur, hierarchische Datenstruktur sowie Verfahren zum Streamen von dreidimensionalen Objekten
    Olanda et al. Terrain data compression using wavelet-tiled pyramids for online 3D terrain visualization
    DE69904843T2 (de) Kompression- und kodierungsverfahren eines 3d maschennetzwerks
    Campoalegre et al. Interactive visualization of medical volume models in mobile devices
    WO2009018820A2 (de) Verfahren und computersystem zur dreidimensionalen darstellung einer landschaft in echtzeit, insbesondere auf einem grafischen bildschirm
    DE69818558T2 (de) Verfahren und Vorrichtung zur geometrischen Komprimierung von dreimensionalen Grafiken
    DE60002580T2 (de) 3d maschenkompression und -kodierung

    Legal Events

    Date Code Title Description
    R012 Request for examination validly filed