Regole di rasterizzazioneRasterization rules

Le regole di rasterizzazione definiscono la modalità di mapping dei dati vettoriali nei dati raster.Rasterization rules define how vector data is mapped into raster data. I dati raster vengono bloccati in posizioni intere che vengono quindi rimosse e ritagliate (per tracciare il numero minimo di pixel) e gli attributi per pixel vengono interpolati (dagli attributi per vertice) prima di essere passati a una pixel shader.The raster data is snapped to integer locations that are then culled and clipped (to draw the minimum number of pixels), and per-pixel attributes are interpolated (from per-vertex attributes) before being passed to a pixel shader.

Esistono diversi tipi di regole, che dipendono dal tipo di primitivo di cui è in corso il mapping, nonché dal fatto che i dati utilizzino il campionamento multiplo per ridurre l'aliasing.There are several types of rules, which depend on the type of primitive that is being mapped, as well as whether or not the data uses multisampling to reduce aliasing. Nelle illustrazioni seguenti viene illustrato come vengono gestiti i casi d'angolo.The following illustrations demonstrate how the corner cases are handled.

Regole di rasterizzazione triangolari (senza campionamento multiplo)Triangle Rasterization Rules (Without Multisampling)

Ogni pixel Center che si trova all'interno di un triangolo viene disegnato; si presuppone che un pixel si trovi all'interno di se passa la regola in alto a sinistra.Any pixel center which falls inside a triangle is drawn; a pixel is assumed to be inside if it passes the top-left rule. La regola in alto a sinistra è la definizione di un pixel Center che si trova all'interno di un triangolo se si trova sul bordo superiore o sul bordo sinistro di un triangolo.The top-left rule is that a pixel center is defined to lie inside of a triangle if it lies on the top edge or the left edge of a triangle.

dove:where:

  • Un bordo superiore è un bordo esattamente orizzontale ed è sopra gli altri bordi.A top edge, is an edge that is exactly horizontal and is above the other edges.
  • Un bordo sinistro è un bordo che non è esattamente orizzontale ed è sul lato sinistro del triangolo un triangolo può avere uno o due bordi A sinistra.A left edge, is an edge that is not exactly horizontal and is on the left side of the triangle A triangle can have one or two left edges.

La regola in alto a sinistra garantisce che i triangoli adiacenti vengano disegnati una sola volta.The top-left rule ensures that adjacent triangles are drawn once.

Questa illustrazione mostra esempi di pixel che vengono disegnati perché si trovano all'interno di un triangolo o seguono la regola in alto a sinistra.This illustration shows examples of pixels that are drawn because they either lie inside a triangle or follow the top-left rule.

esempi di rasterizzazione del triangolo superiore sinistro

Il rivestimento grigio chiaro e scuro dei pixel li Mostra come gruppi di pixel per indicare il triangolo in cui si trovano.The light and dark gray covering of the pixels show them as groups of the pixels to indicate which triangle they are inside.

Regole di rasterizzazione delle righe (con alias, senza campionamento multiplo)Line Rasterization Rules (Aliased, Without Multisampling)

Le regole di rasterizzazione delle righe utilizzano un'area di test di diamanti per determinare se una linea copre un pixel.Line rasterization rules use a diamond test area to determine if a line covers a pixel. Per le righe x-Major (righe con-1 < = Slope < = + 1), l'area di test del diamante include (mostrata Solid) il bordo inferiore sinistro, il bordo inferiore destro e l'angolo inferiore, il rombo esclude (mostrata punteggiata) il bordo superiore sinistro, il bordo superiore destro, il cordino superiore, l'angolo sinistro e l'angolo destro.For x-major lines (lines with -1 <= slope <= +1), the diamond test area includes (shown solid) the lower-left edge, lower-right edge, and bottom corner; the diamond excludes (shown dotted) the upper-left edge, upper-right edge, the top corder, the left corner, and the right corner. Una riga y-Major è una riga che non è una linea x-Major; l'area dei diamanti del test è uguale a quella descritta per la riga x-Major, a eccezione dell'angolo destro.A y-major line is any line that is not an x-major line; the test diamond area is the same as described for the x-major line except the right corner is also included.

Data l'area Diamond, una linea copre un pixel se la riga esce dall'area di test del rombo del pixel quando si viaggia lungo la linea dall'inizio verso la fine.Given the diamond area, a line covers a pixel if the line exits the pixel's diamond test area when traveling along the line from the start towards the end. Una striscia di linea si comporta allo stesso modo, poiché viene disegnata come una sequenza di righe.A line strip behaves the same, as it is drawn as a sequence of lines.

Nella figura seguente vengono illustrati alcuni esempi.The following illustration shows some examples.

esempi di rasterizzazione di righe con alias

Regole di rasterizzazione delle righe (antialiasing, senza campionamento multiplo)Line Rasterization Rules (Antialiased, Without Multisampling)

Una linea con antialias viene rasterizzata come se fosse un rettangolo (con larghezza = 1).An antialiased line is rasterized as if it were a rectangle (with width = 1). Il rettangolo si interseca con una destinazione di rendering che produce valori di code coverage per pixel, moltiplicati in pixel shader componenti alfa di output.The rectangle intersects with a render target producing per-pixel coverage values, which are multiplied into pixel shader output alpha components. Quando si disegnano linee in una destinazione di rendering multicampionata, non è presente alcun anti-aliasing.There is no antialiasing preformed when drawing lines on a multisampled render target.

Si ritiene che non esista un unico modo "migliore" per eseguire il rendering di linee con anti-aliasing.It is deemed that there is no single "best" way to perform antialiased line rendering. Direct3D adotta come linea guida il metodo illustrato nella figura seguente.Direct3D adopts as a guideline the method shown in the following illustration. Questo metodo è stato derivato empiricamente, mostrando un certo numero di proprietà visive ritenute desiderabili.This method was derived empirically, exhibiting a number of visual properties deemed desirable.

L'hardware non deve corrispondere esattamente a questo algoritmo; i test rispetto a questo riferimento avranno tolleranze "ragionevoli", seguiti da alcuni dei principi elencati più avanti, permettendo diverse implementazioni hardware e filtrare le dimensioni del kernel.Hardware need not exactly match this algorithm; tests against this reference shall have "reasonable" tolerances, guided by some of the principles listed further below, permitting various hardware implementations and filter kernel sizes. Nessuna di questa flessibilità consentita nell'implementazione dell'hardware, tuttavia, può essere comunicata attraverso Direct3D alle applicazioni, oltre a disegnare semplicemente linee e osservare/misurare il modo in cui appaiono.None of this flexibility permitted in hardware implementation, however, can be communicated up through Direct3D to applications, beyond simply drawing lines and observing/measuring how they look.

esempi di rasterizzazione di linee con anti-aliasing

Questo algoritmo genera linee relativamente smussate, con intensità uniforme, con bordi o trecce minime.This algorithm generates relatively smooth lines, with uniform intensity, with minimal jagged edges or braiding. La modellazione dell'effetto moiré per le linee di chiusura è ridotta a icona.Moire patterning for close lines is minimized. Esiste una corretta copertura per le giunzioni tra segmenti di linea posizionati end-to-end.There is good coverage for junctions between line segments placed end-to-end.

Il kernel di filtro è un ragionevole compromesso tra la quantità di sfocatura perimetrale e le modifiche di intensità causata da correzioni gamma.The filter kernel is a reasonable tradeoff between the amount of edge blurring and the changes in intensity caused by gamma corrections. Il valore di code coverage viene moltiplicato in pixel shader o0. a (srcAlpha) in base alla formula seguente in base alla fase om (output Fusion):The coverage value is multiplied into pixel shader o0.a (srcAlpha) per the following formula by the Output Merger (OM) stage:

srcColor * srcAlpha + destColor * (1-srcAlpha)srcColor * srcAlpha + destColor * (1-srcAlpha)

Regole di rasterizzazione punti (senza campionamento multiplo)Point Rasterization Rules (Without Multisampling)

Un punto viene interpretato come se fosse costituito da due triangoli in un modello Z, che usano le regole di rasterizzazione dei triangoli.A point is interpreted as though it were composed of two triangles in a Z pattern, which use triangle rasterization rules. La coordinata identifica il centro di un quadrato in larghezza di un pixel.The coordinate identifies the center of a one pixel wide square. Non esiste alcun abbattimento per i punti.There is no culling for points.

Nella figura seguente vengono illustrati alcuni esempi.The following illustration shows some examples.

esempi di rasterizzazione dei punti

Regole di rasterizzazione di anti-aliasing multicampionamentoMultisample Anti-Aliasing Rasterization Rules

L'anti-aliasing di multicampionamento consente di ridurre gli alias di geometria usando il code coverage dei pixel e i test di stencil depth in più percorsi di sottocampionamento.Multisample antialiasing (MSAA) reduces geometry aliasing using pixel coverage and depth-stencil tests at multiple sub-sample locations. Per migliorare le prestazioni, i calcoli per pixel vengono eseguiti una volta per ogni pixel coperto, condividendo gli output dello shader tra i sub-pixel coperti.To improve performance, per-pixel calculations are performed once for each covered pixel, by sharing shader outputs across covered sub-pixels. L'anti-aliasing multicampionamento non riduce l'aliasing della superficie.Multisample antialiasing does not reduce surface aliasing. Le posizioni di esempio e le funzioni di ricostruzione dipendono dall'implementazione dell'hardware.Sample locations and reconstruction functions are dependent on the hardware implementation.

Nella figura seguente vengono illustrati alcuni esempi.The following illustration shows some examples.

esempi di rasterizzazione antialias multicampionamento

Il numero di percorsi di esempio dipende dalla modalità multicampionamento.The number of sample locations is dependent on the multisample mode. Gli attributi dei vertici vengono interpolati in pixel Center, perché si tratta del punto in cui viene richiamata la pixel shader (questo diventa un'estrapolazione se il centro non viene analizzato).Vertex attributes are interpolated at pixel centers, since this is where the pixel shader is invoked (this becomes extrapolation if the center is not covered). Gli attributi possono essere contrassegnati nel pixel shader come centro campionato, che fa sì che i pixel non coperti interpolano l'attributo all'intersezione dell'area del pixel e della primitiva.Attributes can be flagged in the pixel shader to be centroid sampled, which causes non-covered pixels to interpolate the attribute at intersection of the pixel's area and the primitive.

Viene eseguito un pixel shader per ogni area del pixel 2x2 per supportare calcoli derivati (che usano Delta x e y).A pixel shader runs for each 2x2 pixel area to support derivative calculations (which use x and y deltas). Ciò significa che le chiamate dello shader si verificano più di quanto venga visualizzato per compilare il numero minimo di 2x2, che è indipendente dal campionamento multiplo.This means that shader invocations occur more than is shown to fill out the minimum 2x2 quanta (which is independent of multisampling). Il risultato dello shader viene scritto per ogni esempio coperto che supera il test di stencil profondità per campione.The shader result is written out for each covered sample that passes the per-sample depth-stencil test.

Le regole di rasterizzazione per le primitive sono, in generale, invariate dall'anti-aliasing multicampione, tranne:Rasterization rules for primitives are, in general, unchanged by multisample antialiasing, except:

  • Per un triangolo, viene eseguito un test di code coverage per ogni posizione di esempio (non per un pixel Center).For a triangle, a coverage test is performed for each sample location (not for a pixel center). Se viene analizzato più di un percorso di esempio, un pixel shader viene eseguito una volta con gli attributi interpolati al centro pixel.If more than one sample location is covered, a pixel shader runs once with attributes interpolated at the pixel center. Il risultato viene archiviato (replicato) per ogni percorso di esempio coperto nel pixel che supera il test di profondità/stencil.The result is stored (replicated) for each covered sample location in the pixel that passes the depth/stencil test.

    Una linea viene considerata come un rettangolo costituito da due triangoli, con una lunghezza di riga di 1,4.A line is treated as a rectangle made up of two triangles, with a line width of 1.4.

  • Per un punto, viene eseguito un test di code coverage per ogni percorso di esempio (non per un pixel Center).For a point, a coverage test is performed for each sample location (not for a pixel center).

I formati di campionamento multiplo possono essere usati nelle destinazioni di rendering che possono essere letti in shader usando Load, perché non è richiesta alcuna risoluzione per i singoli esempi a cui si accede dallo shader.Multisampling formats can be used in render targets which can be read back into shaders using load, since no resolve is required for individual samples accessed by the shader. I formati di profondità non sono supportati per la risorsa multisample, quindi i formati di profondità sono limitati solo alle destinazioni di rendering.Depth formats are not supported for multisample resource, therefore, depth formats are restricted to render targets only.

I formati di tipo supportano il campionamento multiplo per consentire a una visualizzazione risorse di interpretare i dati in modi diversi.Typeless formats support multisampling to allow a resource view to interpret data in different ways. Ad esempio, è possibile creare una risorsa multisample usando il _ tipo R8G8B8A8, eseguirne il rendering usando una risorsa render-target-View con un _ formato R8G8B8A8 uint, quindi risolvere il contenuto in un'altra risorsa con un _ formato dati R8G8B8A8 UNORM.For instance, you could create a multisample resource using R8G8B8A8_TYPELESS, render to it using a render-target-view resource with a R8G8B8A8_UINT format, then resolve the contents to another resource with a R8G8B8A8_UNORM data format.

Supporto hardwareHardware Support

L'API segnala il supporto hardware per il campionamento multiplo attraverso il numero di livelli qualitativi.The API reports hardware support for multisampling through the number of quality levels. Ad esempio, un livello di qualità 0 indica che l'hardware non supporta il campionamento multiplo (con un formato e un livello di qualità particolari).For example, a 0 quality level means the hardware does not support multisampling (at a particular format and quality level). 3 per i livelli di qualità significa che l'hardware supporta tre diversi layout di esempio e/o Risolvi gli algoritmi.A 3 for quality levels means that the hardware supports three different sample layouts and/or resolve algorithms. È anche possibile presupporre quanto segue:You can also assume the following:

  • Qualsiasi formato che supporta il campionamento multiplo supporta lo stesso numero di livelli di qualità per ogni formato di tale famiglia.Any format that supports multisampling, supports the same number of quality levels for every format in that family.
  • Ogni formato che supporta il campionamento multiplo e presenta i _ formati UNORM, _ sRGB, _ russa o _ float, supporta anche la risoluzione.Every format that supports multisampling, and has the _UNORM, _SRGB, _SNORM or _FLOAT formats, also supports resolving.

Campionamento centrale degli attributi durante l'anti-aliasing di multicampionamentoCentroid Sampling of Attributes when Multisample Antialiasing

Per impostazione predefinita, gli attributi dei vertici vengono interpolati in un centro pixel durante l'anti-aliasing di multicampionamento. Se il pixel Center non viene analizzato, gli attributi vengono estrapolati in un centro pixel.By default, vertex attributes are interpolated to a pixel center during multisample antialiasing; if the pixel center is not covered, attributes are extrapolated to a pixel center. Se un pixel shader input che contiene la semantica del centro (presupponendo che il pixel non è completamente coperto) verrà campionato in un punto all'interno dell'area coperta del pixel, possibilmente in una delle posizioni di esempio coperte.If a pixel shader input that contains the centroid semantic (assuming the pixel is not fully covered) will be sampled somewhere within the covered area of the pixel, possibly at one of the covered sample locations. Una maschera di esempio (specificata dallo stato di rasterizzazione) viene applicata prima del calcolo del baricentro.A sample mask (specified by the rasterizer state) is applied prior to centroid computation. Pertanto, un campione mascherato non verrà usato come posizione centrale.Therefore, a sample that is masked out will not be used as a centroid location.

L'rasterizzatore di riferimento sceglie un percorso di esempio per il campionamento del baricentro simile al seguente:The reference rasterizer chooses a sample location for centroid sampling similar to this:

  • La maschera di esempio consente tutti gli esempi.The sample mask allows all samples. Usare un pixel Center se il pixel è coperto o se nessuno degli esempi è coperto.Use a pixel center if the pixel is covered or if none of the samples are covered. In caso contrario, viene scelto il primo campione incluso, a partire dal centro pixel e spostandosi verso l'esterno.Otherwise, the first covered sample is chosen, starting from the pixel center and moving outward.
  • La maschera di esempio disattiva tutti gli esempi, ma uno (uno scenario comune).The sample mask turns off all samples but one (a common scenario). Un'applicazione può implementare il supercampionamento MultiPASS scorrendo i valori della maschera di esempio a singolo bit ed eseguendo nuovamente il rendering della scena per ogni esempio usando il campionamento del centro.An application can implement multipass supersampling by cycling through single-bit sample-mask values and re-rendering the scene for each sample using centroid sampling. Per questa operazione è necessario che un'applicazione modifichi i derivati per selezionare la texture MIPS più dettagliata in modo appropriato per una maggiore densità di campionamento della trama.This would require that an application adjust derivatives to select appropriately more detailed texture mips for the higher texture sampling density.

Calcoli derivati durante il campionamento multiploDerivative Calculations When Multisampling

I pixel shader vengono sempre eseguiti usando un'area minima di 2x2 pixel per supportare calcoli derivati, che vengono calcolati mediante l'acquisizione di Delta tra dati provenienti da pixel adiacenti (presupponendo che i dati in ogni pixel siano stati campionati con spaziatura tra unità orizzontalmente o verticalmente).Pixel shaders always run using a minimum 2x2 pixel area to support derivative calculations, which are calculated by taking deltas between data from adjacent pixels (making the assumption that the data in each pixel has been sampled with unit spacing horizontally or vertically). Questo non è influenzato dal campionamento multiplo.This is unaffected by multisampling.

Se vengono richiesti derivati su un attributo che è stato utilizzato per il baricentro, il calcolo hardware non viene regolato, che può causare derivati non accurati.If derivatives are requested on an attribute that has been centroid sampled, the hardware calculation is not adjusted, which can cause inaccurate derivatives. Uno shader prevede un vettore di unità nello spazio di destinazione di rendering, ma può ottenere un vettore non di unità in relazione a un altro spazio vettoriale.A shader will expect a unit vector in render-target space but may get a non-unit vector with respect to some other vector space. Pertanto, è responsabilità dell'applicazione prestare attenzione quando si richiedono derivati dagli attributi campionati.Therefore, it is an application's responsibility to exhibit caution when requesting derivatives from attributes that are centroid sampled.

Infatti, è consigliabile non combinare i derivati e il campionamento del centro.In fact, it is recommended that you do not combine derivatives and centroid sampling. Il campionamento centrale può essere utile per situazioni in cui è fondamentale che gli attributi interpolati di una primitiva non vengano estrapolati, ma questo avviene con compromessi come gli attributi che sembrano saltare dove un bordo primitivo interseca un pixel, anziché modificare continuamente, o derivati che non possono essere usati da operazioni di campionamento di trama che derivano da LOD.Centroid sampling can be useful for situations where it is critical that a primitive's interpolated attributes are not extrapolated, but this comes with tradeoffs such as attributes that appear to jump where a primitive edge crosses a pixel (rather than change continuously) or derivatives that cannot be used by texture sampling operations that derive LOD.

Argomenti correlatiRelated topics

AppendiciAppendices

Fase del rasterizzatoreRasterizer (RS) stage