DE112022003547T5 - Verschobene Mikronetz-Kompression - Google Patents
Verschobene Mikronetz-Kompression Download PDFInfo
- 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
Links
- 238000007906 compression Methods 0.000 title claims abstract description 71
- 230000006835 compression Effects 0.000 title claims abstract description 69
- 238000000034 method Methods 0.000 claims abstract description 38
- 238000006073 displacement reaction Methods 0.000 claims description 151
- 238000012937 correction Methods 0.000 claims description 128
- 238000009877 rendering Methods 0.000 claims description 14
- 238000012360 testing method Methods 0.000 claims description 12
- 238000003860 storage Methods 0.000 claims description 7
- 238000012935 Averaging Methods 0.000 claims description 5
- 230000001133 acceleration Effects 0.000 claims description 5
- 230000001174 ascending effect Effects 0.000 claims description 4
- 239000000700 radioactive tracer Substances 0.000 claims description 4
- 238000003672 processing method Methods 0.000 claims 5
- 230000004044 response Effects 0.000 claims 1
- 238000004422 calculation algorithm Methods 0.000 abstract description 30
- 238000004891 communication Methods 0.000 abstract description 3
- 238000013507 mapping Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 10
- 230000006399 behavior Effects 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 7
- 230000036961 partial effect Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 5
- 230000000670 limiting effect Effects 0.000 description 5
- 238000005457 optimization Methods 0.000 description 5
- 238000005336 cracking Methods 0.000 description 4
- 238000007667 floating Methods 0.000 description 4
- 230000002452 interceptive effect Effects 0.000 description 4
- 238000006467 substitution reaction Methods 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 3
- 230000007423 decrease Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- BDAGIHXWWSANSR-UHFFFAOYSA-M Formate Chemical compound [O-]C=O BDAGIHXWWSANSR-UHFFFAOYSA-M 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000006837 decompression Effects 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000012800 visualization Methods 0.000 description 2
- BUHVIAUBTBOHAG-FOYDDCNASA-N (2r,3r,4s,5r)-2-[6-[[2-(3,5-dimethoxyphenyl)-2-(2-methylphenyl)ethyl]amino]purin-9-yl]-5-(hydroxymethyl)oxolane-3,4-diol Chemical compound COC1=CC(OC)=CC(C(CNC=2C=3N=CN(C=3N=CN=2)[C@H]2[C@@H]([C@H](O)[C@@H](CO)O2)O)C=2C(=CC=CC=2)C)=C1 BUHVIAUBTBOHAG-FOYDDCNASA-N 0.000 description 1
- 241001465754 Metazoa Species 0.000 description 1
- 206010047571 Visual impairment Diseases 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000000205 computational method Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- JEGUKCSWCFPDGT-UHFFFAOYSA-N h2o hydrate Chemical compound O.O JEGUKCSWCFPDGT-UHFFFAOYSA-N 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010348 incorporation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 230000035899 viability Effects 0.000 description 1
- 208000029257 vision disease Diseases 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 230000004393 visual impairment Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/40—Hidden part removal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
- G06T17/205—Re-meshing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/001—Model-based coding, e.g. wire frame
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/08—Bandwidth reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/21—Collision detection, intersection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/36—Level of detail
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2219/00—Indexing scheme for manipulating 3D models or images for computer graphics
- G06T2219/20—Indexing scheme for editing of 3D models
- G06T2219/2016—Rotation, 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 - 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 - US-Patentanmeldung Nr.
17946221 - 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 und1B zeigen beispielhafte Mikronetze. -
2A und2B 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 und20C 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 und25C 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 und2B 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. Siehe5 . - 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: - 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 und9 . Aus diesem Vergleich ermittelt der Codierer ein Delta (Differenz) oder eine „Korrektur“, die er an den Decoder weitergibt. Der Decoder (siehe10 ) 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 (siehe10A) wie folgt berechnet: - 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.
-
- 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 und13 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 in13 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.
- (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 und18 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 (siehe18 ). 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. Siehe18 . 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. -
- 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 in20B 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
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)
- 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.
- 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.
- Speicher nach
Anspruch 2 , wobei der Vertex-Verschiebungsdatenblock ferner Verschiebungswerte aufweist, die konfiguriert sind, die Korrekturwerte anzupassen. - 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.
- Kompressor nach
Anspruch 4 , bei dem der Komparator die Wrap-Around-Arithmetik nutzt, um die Qualität zu erhöhen. - 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. - 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. - 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.
- Dekompressor nach
Anspruch 8 , der ferner ein Schieberegister aufweist, das die empfangenen Korrekturen um einen Verschiebungsbetrag verschiebt, der durch einen empfangenen Verschiebungswert spezifiziert wird. - Dekompressor nach
Anspruch 8 , der ferner einen rekursiven Unterteiler aufweist, der das Mikronetz rekursiv unterteilt und aussortiert. - 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.
- Grafiksystem nach
Anspruch 11 , wobei die Verschiebungsblöcke Teil einer Beschleunigungsstruktur sind und die Grafikpipeline einen Raytracer aufweist. - Graphiksystem nach
Anspruch 12 , wobei der Raytracer eine Strahlenschnitttestschaltung aufweist, die die korrigierten vorhergesagten Verschiebungswerte vom Dekompressor empfängt. - 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. - Grafiksystem nach
Anspruch 11 , wobei die Grafikpipeline einen Dreieckstexturmapper enthält. - 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. - 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.
- Graphikverarbeitungsverfahren nach
Anspruch 17 , wobei das Rendern das Rendern eines rissfreien Bildes aufweist. - 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. - Graphikverarbeitungsverfahren nach
Anspruch 17 , das ferner das Verschieben der Korrekturfaktoren als Reaktion auf Verschiebungswerte aufweist, die die Blöcken spezifizieren. - 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.
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)
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)
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)
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 |
-
2022
- 2022-09-16 CN CN202280027457.4A patent/CN117157676A/zh active Pending
- 2022-09-16 DE DE112022003721.0T patent/DE112022003721T5/de active Pending
- 2022-09-16 US US17/946,515 patent/US20230081791A1/en active Pending
- 2022-09-16 US US17/946,563 patent/US20230078840A1/en active Pending
- 2022-09-16 CN CN202280027455.5A patent/CN117178297A/zh active Pending
- 2022-09-16 US US17/946,221 patent/US20230084570A1/en active Pending
- 2022-09-16 DE DE112022003547.1T patent/DE112022003547T5/de active Pending
- 2022-09-16 WO PCT/US2022/043841 patent/WO2023044033A1/en active Application Filing
- 2022-09-16 CN CN202280027456.XA patent/CN117280387A/zh active Pending
- 2022-09-16 US US17/946,235 patent/US20230108967A1/en active Pending
- 2022-09-16 WO PCT/US2022/043788 patent/WO2023043993A1/en active Application Filing
- 2022-09-16 US US17/946,828 patent/US20230078932A1/en active Pending
- 2022-09-16 WO PCT/US2022/043835 patent/WO2023044029A1/en active Application Filing
- 2022-09-16 CN CN202280027486.0A patent/CN117136386A/zh active Pending
- 2022-09-16 DE DE112022004435.7T patent/DE112022004435T5/de active Pending
- 2022-09-16 DE DE112022004426.8T patent/DE112022004426T5/de active Pending
- 2022-09-16 WO PCT/US2022/043800 patent/WO2023044001A1/en active Application Filing
Patent Citations (13)
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)
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 |