04. September 2001

3 Rendermodell


Inhalt


 

3.1 Einleitung

Von SVG-Implementationen wird erwartet, sich so zu verhalten, als würden sie ein Rendermodell bzw. Bildmodell implementieren, wie es in diesem Kapitel beschrieben ist. Eine reale Implementation muss das Modell nicht in dieser Weise unterstützen, aber das Ergebnis auf jedem Gerät, das von der Implemetation unterstützt wird, sollte dem beschriebenen Ergebnis in diesem Kapitel entsprechen.

Der Anhang über Konformitätsanforderungen beschreibt den Umfang, um den eine tatsächliche Implementation von dieser Beschreibung abweichen darf. In der Praxis wird eine tatsächliche Implementation auf Grund von Beschränkungen des Ausgabegeräts leicht abweichen (z.B. wird nur ein bestimmter Farbbereich unterstützt) und weil praktische Beschränkungen in der Implementation eines präzisen mathematischen Modells bestehen (z.B. für realistische Performance werden Kurven durch gerade Linien angenähert, die Annäherung muss nur genügend präzise sein, um die Konformitätsanforderungen zu erfüllen).

3.2 Das Painters-Modell

SVG verwendet ein "Painters-Modell" beim Rendern. Farbe (paint) wird in aufeinander folgenden Operationen am Ausgabegerät in der Weise aufgetragen, dass jede Operation einen Bereich des Ausgabegeräts übermalt. Wenn der Bereich einen bereits bemalten Bereich überlappt, überdeckt die neue Farbe die alte ganz oder teilweise. Wenn die Farbe nicht hundertprozentig deckend ist, wird das Ergebnis auf dem Ausgabegerät durch die (mathematischen) Regeln für die Mischung definiert, die unter Einfaches Alpha Blending beschrieben sind.

3.3 Renderreihenfolge

Elemente in einem SVG-Dokument haben eine implizite Reihenfolge, in der sie gemalt werden. Das erste Element in einem SVG-Dokumentfragment wird als erstes gemalt. Darauffolgende Elemente werden auf die Oberfläche der zuvor gemalten Elemente aufgetragen.

3.4 Wie Gruppen gerendert werden

Gruppierende Elemente wie 'g' (siehe Container-Elemente) produzieren einen temporären eingenständigen Canvas, der in transparentem Schwarz initialisiert wird, auf welchen Kind-Elemente gemalt werden. Nachdem die gesamte Gruppe gemalt ist, werden alle für die Gruppe angegebenen Filtereffekte angewendet, um einen veränderten temporären Canvas zu erzeugen. Der veränderte temporäre Canvas wird unter Berücksichtigung der gruppenbezogenen Einstellungen für das Masking und die Deckfähigkeit dieser Gruppe in den Hintergrund integriert.

3.5 Wie Elemente gerendert werden

Einzelne Grafikelemente werden so gerendert, als sei jedes Grafikelement seine eigene Gruppe; im Klartext bedeutet das, dass für jedes Grafikelement ein eigener temporärer Canvas gebildet wird. Das Element wird zuerst auf den temporären Canvas gemalt (siehe Formen und Text malen und Rasterbilder malen unten). Dann werden alle Filter Effekte angewendet, die für das Grafikelement angegeben sind, um den veränderten temporären Canvas zu erzeugen. Der veränderte temporäre Canvas wird anschließend unter Berücksichtigung aller Einstellungen für Clipping, Masking und die Objektdeckfähigkeit des grafischen Elements in den Hintergrund integriert.

3.6 Grafikelementtypen

SVG unterstützt drei grundlegende Grafikelementtypen, die auf dem Canvas gerendert werden können:

3.6.1 Formen und Text malen

Formen und Text können gefüllt (fill) (z.B. dem Inneren einer Form Farbe geben) und gestrichen (stroke) werden (z.B. einer Aussenlinie einer Form Farbe geben). Eine stroke-Operation ist auf die Außenlinie eines Objekts zentriert; so fällt die eine Hälfte der Farbe auf das innere der Form, die andere Hälfte auf die äußere Seite der Form.

Für bestimmte Formtypen können Markersymbole (die selbst aus einer Kombination von Formen, Text und Bildern bestehen können) auf ausgewählte Scheitelpunkte gemalt werden. Jedes Markersymbol wird so gemalt, als würde sein grafischer Inhalt im SVG-Dokumentenbaum ergänzt, gleich nach dem Formobjekt, welches das gegebene Markersymbol verwendet. Die grafischen Inhalte eines Markersymbols werden nach den gleichen Verfahren gerendert, die auch für Grafikelemente verwendet werden. Markersymbole sind nicht auf Text anwendbar.

Zuerst wird die Operation fill gemalt, dann stroke und schließlich die Markersymbole. Die Markersymbole werden der Reihe nach entlang der Außenlinie der Form gerendert, vom Anfang der Form bis zum Ende der Form.

Jede fill- und jede stroke-Operation hat eigene Angaben für ihren Deckungsgrad; so kann man eine Form mit einer semi-transparent gemalten festen Farbe füllen oder streichen, mit verschiedenen Werten für den Deckungsgrad der fill- und stroke-Operationen.

Die Operationen fill und stroke sind zwei gänzlich unabhängige Operationen; wenn sie also eine Form sowohl füllen als auch streichen, wird die Hälfte des Pinselstrichs (stroke) auf einem Teil der gefüllten Fläche (fill) gemalt.

SVG unterstützt die folgenden integrierten Farbtypen, die in fill- und stroke-Operationen verwendet werden können:

3.6.2 Rasterbilder malen

Wird ein Rasterbild gerendert, werden die originalen Muster mit Standardalgorithmen "resampled", um ein Muster an der erforderlichen Stelle im Ausgabegerät zu erstellen. Die Anforderungen an den Resampling-Vorgang werden unter Konformitätsanforderungen besprochen.

3.7 Gemalte Bereiche filtern

Mit SVG kann jede Maloperation gefiltert werden. (Siehe Filtereffekte.)

In diesem Fall muss das Ergebnis so ausfallen, als seien die Maloperationen auf einem temporären Canvas angewendet worden, der in transparentem Schwarz initialisiert wurde. Die Größe muss anhand der in Filtereffekte gegebenen Regeln ermittelt werden mit einem anschließenden Filtervorgang wie in Filtereffekte beschrieben.

3.8 Ausschneiden, Maskieren und Objektdeckfähigkeit

SVG erlaubt, die Maloperation auf einen begrenzten Bereich innerhalb des Ausgabegeräts mit Hilfe von Ausschneiden und Maskieren zu beschränken. Dies ist beschrieben in Ausschneiden, Maskieren und Zusammenfügen

Ausschneiden verwendet einen Pfad, um einen Bereich des Ausgabegeräts zu definieren, dem Farbe zugefügt werden kann. Die Maloperation, die innerhalb des ausgeschnittenen Bereichs ausgeführt wird, muss so gerendert werden, dass nur die Teile des Gerätes von der Maloperation betroffen werden, die innerhalb des ausgeschnittenen Bereichs fallen. Ein ausgeschnittener Pfad (clipping path) kann so ausfallen wie eine Maske, in der die Pixel außerhalb des ausgeschnittenen Pfads schwarz sind, mit dem Alpha-Wert Null, und die Pixel innerhalb des ausgeschnittenen Pfads weiß sind, mit dem Alpha-Wert eins. "Innerhalb" wird durch die gleichen Regeln definiert, die auch das Innere eines Pfads für den Malvorgang bestimmen. Der ausgeschnittene Pfad wird auf niedrig auflösenden Geräten normalerweise anti-aliased gemalt (siehe 'shape-rendering'). Ausschneiden wird beschrieben in Pfade ausschneiden.

Masking (maskieren) verwendet die Leuchtkraft der Farbkanäle und des Alphakanals in einem referenzierten SVG-Element, um ergänzende Alphawerte zu definieren, die mit den vorhandenen Alphawerten der Grafik, auf welche die Maske angewendet werden soll, multipliziert werden. Maskieren wird in Maskieren beschrieben.

Eine ergänzende Maskierungsoperation kann auch durch die Zuweisung einer "globalen" Deckfähigkeit für eine Reihe von Renderoperationen angegeben werden. In diesem Fall ist die Maske unbegrenzt, die Farbe ist weiß und der Alphakanal entspricht dem gegebenen Wert für die Deckfähigkeit. (Siehe 'opacity'-Eigenschaft.)

In allen Fällen muss sich die SVG-Implementation so verhalten, als seien alle Mal- und Filtervorgänge zuerst auf einen temporären Canvas angewendet worden, der in transparentem Schwarz initialisiert wurde. Dann werden werden die Alphawerte des temporären Canvas mit den impliziten Alphawerten des ausgeschnittenen Pfads, den Alphawerten der Maske und den Alphawerten der 'opacity'-Eigenschaft multipliziert. Der daraus resultierende Canvas wir mit Hilfe einfachen Alpha-Blendings in den Hintergrund eingefügt. Wird demnach ein Bereich im Ausgabegeräts mit einer Gruppendeckfähigkeit von 50% gemalt, und in der Gruppe zunächst deckend rot und dann deckend grün verwendet, so erscheint das Ergebnis, als wäre der Bereich nur mit 50% Grün gemalt worden, da die deckende grüne Farbe die rote Farbe im temporären Canvas vollkommen überdeckt, bevor der tempöräre Canvas als Ganzes im Ausgabegerät gerendert wird.

3.9 Einfügen in Elterndokumente

SVG-Dokumentfragmente können halb-deckend (semi-opaque) sein. In vielen Umgebungen (z.B. in Webbrowsern) gibt es einen abschließenden zusammenführenden Schritt, in dem das Dokument als Ganzes durchsichtig in den Hintergrund-Canvas gemischt wird.