Verschiebungszuordnung (Direct3D 9)

Verschiebungszuordnungen ähneln Texturzuordnungen, werden jedoch von der Scheitelpunkt-Engine aufgerufen.

Blockdiagramm

Im frühen Teil der Scheitelpunktpipe ist eine zusätzliche Samplerphase vorhanden, wie im folgenden Diagramm dargestellt, mit der eine Verschiebungszuordnung entnommen werden kann, um Vertexverschiebungsdaten zu liefern.

Diagramm der Samplerphase in der Scheitelpunktpipe

Der Zustand des Verschiebungszuordnungs-Samplers kann durch SetSamplerState mithilfe der Phase 256 festgelegt werden, bei der es sich um eine neue Phasennummer handelt. Die Verschiebungszuordnungstextur wird von SetTexture festgelegt.

Die Karte kann vorab vorgefertigt werden. Dies bedeutet, dass sie so geordnet werden kann, dass die Verschiebungswerte ohne Filterung nachschlagen können.

  • Verschiebungszuordnungen sind analog zu Texturzuordnungen, aber der Zugriff erfolgt über die Scheitelpunkt-Engine.
  • Im frühen Teil der Vertexpipe ist eine zusätzliche Samplerphase vorhanden, mit der eine Verschiebungskarte entnommen werden kann. Auf diese Phase wird von der üblichen SetSamplerState-API zugegriffen, aber die Phasennummer ist D3DDMAPSAMPLER = 256.
  • Der Zustand des Verschiebungszuordnungs-Samplers kann durch SetSamplerState(D3DDMAPSAMPLER, ...) festgelegt werden. API.
  • Die Verschiebungszuordnungstextur wird von der SetTexture(D3DDMAPSAMPLER, texture)-API festgelegt.
  • Die Zuordnung kann vorab entnommen werden oder nicht. Dies bedeutet, dass sie auf eine bestimmte Weise geordnet werden kann, die das Suchen der Verschiebungswerte ohne Filterung ermöglicht.
  • Die Änderungen in der Deklarationsstruktur ermöglichen die Angabe der Texturkoordinate, die zum Suchen der Texturzuordnung verwendet wird. Beispiel: Stream0, Offset, FLOAT2, LOOKUP, _ Verschiebungswert. Dies weist den Mosaikator an, den 2D-Gleitkommavektor in stream0 an einem bestimmten Offset als Texturkoordinate zu verwenden, um die Verschiebungskarte zu suchen und ihr die Semantik der Verschiebungswertverwendung zu _ zuordnen. Die Vertex-Shaderdeklaration würde eine Zeile ähnlich {dcl texture0, v0} enthalten, die angibt, dass die Texture0-Semantik dem v0-Eingaberegister zugeordnet werden _ soll. Der nach durchdrungene Verschiebungswert wird in das Eingaberegister v0 kopiert.
  • Es gibt eine besondere Art von Verschiebungszuordnung, wenn die Texturkarte vorab entnommen wird. Der sequenzielle Index generierter Scheitelungen wird als Texturkoordinate für eine Texturkarte verwendet. Beispiel: 0,0,(D3DDECLTYPE)0,D3DDECLMETHOD _ LOOKUPPRESAMPLED, Usage, UsageIndex.
  • Die Ausgabe der Suche ist 4 gleitkomma.
  • Die Zuordnung von Verschiebungen wird nur mit N-Patches unterstützt.
  • Treiber müssen D3DDMAPSAMPLER in SetTextureStageState ignorieren, wenn sie keine Verschiebungszuordnungen verarbeiten.
  • Der D3DTEXF _ ANISOTROPIC-Filtermodus wird nicht unterstützt.
  • Wenn D3DSAMP MIPFILTER im Sampler für die Verschiebungszuordnung nicht D3DTEXF NONE ist, wird die Detailebene wie folgt berechnet (beachten Sie, dass der adaptive Mosaikzustand auch dann verwendet wird, wenn _ _ D3DRS _ ENABLEADAPTIVETESSELLATION FALSE ist): Tmax = Renderzustand D3DRS _ MAXTESSELLATIONLEVEL
  • Compute tessellation level Te for a vertex Vi: (Xi, Soll, Zi) auf die gleiche Weise wie im Abschnitt "Adaptives Mosaik" beschrieben. Detailstufe L = log2(Tmax) - log2 (Te).
  • Texturfilterungs- und Samplingvorgänge folgen den gleichen Regeln wie die Pixelpipeline (LoD-Bias (Level of Detail) wird angewendet usw.).
  • Nicht alle Formate können als Verschiebungszuordnungen verwendet werden, sondern nur solche, die D3DUSAGE _ DMAP unterstützen. Die Anwendung kann diese mit checkDeviceFormat CheckDeviceFormat abfragen.
  • D3DUSAGE _ DMAP muss in CreateTexture angegeben werden, um den Treiber zu benachrichtigen, dass diese Textur als Verschiebungszuordnung verwendet werden soll.
  • D3DUSAGE _ DMAP kann nur mit Texturen verwendet werden. Sie kann nicht mit Cubezuordnungen oder Volumes verwendet werden.
  • Texturen und Renderziele, die mit D3DUSAGE DMAP erstellt wurden, können in regulären _ Samplerphasen und als Renderziele festgelegt werden.
  • Die Renderzustände zum Festlegen des Umbruchmodus für die Texturkoordinaten werden in der Verschiebungszuordnung ignoriert. Im Allgemeinen gibt es keine Wrap-Modi für die Mosaik-Engine.
  • Ein Verschiebungszuordnungs-Sampler hat das gleiche Verhalten wie die Pixeltextur-Sampler. Wenn eine Textur mit weniger als vier Kanälen (z. B. R32f) nachschlagen wird, werden die nachschlagenen Werte an die entsprechenden Kanäle des Zielregisters (das Vertex-Shader-Eingaberegister, das mit der Beispielsemantik gekennzeichnet ist) und die anderen Kanäle standardmäßig _ (1, 1, 1) verwendet. Bei der Suche wird D3DFMT L8 in die Kanäle R, G, B übertragen, und _ A wird standardmäßig auf 1 festgelegt. Der Referenzraster verfügt über die vollständigen Implementierungsdetails.

Zuordnung vorab entnommener Verschiebungen

  • Es wird ein neuer Samplerzustand eingeführt: D3DSAMP DMAPOFFSET (DWORD) – Offset (in Scheitelten) in einer vorab entnommenen _ Verschiebungskarte.
  • Es wird eine neue Deklarationsmethode eingeführt: D3DDECLMETHOD _ LOOKUPPRESAMPLED.
  • Adaptive Mosaik sollte deaktiviert werden.
  • Texturfiltereinstellungen werden ignoriert. Punktstichproben werden durchgeführt. Es wird davon ausgegangen, dass der MIP-Texturfilter D3DTEXF _ NONE ist. Alle anderen Texturfiltermodi werden als D3DTEXF _ POINT angenommen.
  • Texturkoordinaten werden berechnet wie: U = (Index % TextureWidthInPixeles) / (float)(TextureWidthInPixeles) V = (Index /TextureWidthInPixeles) / (float)(TextureHeightInPixeles), wobei Index ein sequenzieller Index generierter Scheitelpunkte plus TSS [ D3DSAMP _ DMAPOFFSET ] ist. Der sequenzielle Index wird am Anfang jedes Primitiven auf 0 (null) festgelegt und erhöht, nachdem ein Scheitelpunkt generiert wurde.

Dies sind die API-Änderungen, die die Zuordnung von Verschiebungen unterstützen.

  • Ein hinzugefügtes Einzelkanalformat, D3DFMT _ L16.
  • Ein neues Verwendungsflag, D3DUSAGE _ DMAP.
  • Eine spezielle Texturstufe, die zum Festlegen einer Verschiebungszuordnungstextur verwendet wird, D3DDMAPSAMPLER.
  • Es wurden neue Hardware-Caps hinzugefügt: D3DDEVCAPS2 _ DMAPNPATCH und D3DDEVCAPS2 _ PRESAMPLEDDMAPNPATCH. Siehe D3DDEVCAPS2.

Vertexpipeline