Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A 3D térben lévő sokszögek úgy jeleníthetők meg, mintha nem lennének coplanárisak, ha mindegyikhez hozzáadunk egy z-torzításokat (vagy mélységi torzításokat).
Ez a módszer gyakran használatos annak biztosítására, hogy a jelenet árnyékai megfelelően jelenjenek meg. Egy fal árnyékának például valószínűleg ugyanaz a mélységi értéke lesz, mint a falnak. Ha egy alkalmazás először egy falat, majd egy árnyékot jelenít meg, előfordulhat, hogy az árnyék nem látható, vagy a mélységi összetevők láthatók.
Az alkalmazások segíthetnek biztosítani a koplanáris sokszögek megfelelő renderelését azáltal, hogy hozzáadják a torzításokat (a DepthBias tagja D3D11_RASTERIZER_DESC1) a z-értékekhez, amelyeket a rendszer a koplanáris sokszögek halmazainak renderelésekor használ. A nagyobb z értékkel rendelkező sokszögek kisebb z értékkel rendelkező sokszögek elé kerülnek.
A mélységi torzítás kiszámításának két lehetősége van.
Ha a kimeneti összevonási fázishoz jelenleg kötött mélységi puffer UNORM formátummal rendelkezik, vagy nincs megkötve a mélységi puffer, a rendszer a torzítás értékét a következőképpen számítja ki:
Bias = (float)DepthBias * r + SlopeScaledDepthBias * MaxDepthSlope;ahol r a minimálisan ábrázolható érték > 0 lebegőpontos32. A DepthBias és SlopeScaledDepthBias értékek D3D11_RASTERIZER_DESC1 struktúratagok. A MaxDepthSlope érték a képpontnál mért mélységi érték vízszintes és függőleges meredeksége.
Ha egy lebegőpontos mélységi puffer a kimeneti összevonási fázishoz van kötve, a torzítás értéke a következőképpen lesz kiszámítva:
Bias = (float)DepthBias * 2**(exponent(max z in primitive) - r) + SlopeScaledDepthBias * MaxDepthSlope;ahol r a lebegőpontos ábrázolás mantissa bitjeinek száma (a rejtett bit kivételével); például 23 lebegőpontos32.
A torzítás értéke ezután a következőképpen lesz rögzítve:
if(DepthBiasClamp > 0)
Bias = min(DepthBiasClamp, Bias)
else if(DepthBiasClamp < 0)
Bias = max(DepthBiasClamp, Bias)
A torzítás értéke ezután a képpontmélység kiszámítására szolgál.
if ( (DepthBias != 0) || (SlopeScaledDepthBias != 0) )
z = z + Bias
A mélységi torzítás a kivágást követően csúcsokon történik, ezért a mélységi torzításnak nincs hatása a geometriai kivágásokra. Az elfogultság értéke egy adott primitív esetében állandó, és az interpolátor beállítása előtt hozzáadódik az egyes csúcsok z értékéhez. Ha 10,0-s vagy újabb funkciószintet használ, az összes torzítás számítása 32 bites lebegőpontos számtani módszerrel történik. A torzítás nem alkalmazható pont- vagy vonalprimitívekre, kivéve a drótváz módban rajzolt vonalakat.
Az árnyékpufferalapú árnyékolású összetevők egyike az árnyék akne, vagy maga a felület árnyékolása az árnyékolóban lévő mélységi számítások és az árnyékpuffer ugyanazon felületének mélysége közötti kisebb különbségek miatt. Ennek egyik módja, ha DepthBias és SlopeScaledDepthBias használ árnyékpuffer renderelésekor. Az a cél, hogy a felületek elég kitolása árnyékpuffer renderelése közben, hogy a z árnyékpuffer és a z árnyékoló közötti összehasonlítási eredmény konzisztens legyen a felszínen, és elkerüljük a helyi önárnyékolást.
A DepthBias és SlopeScaledDepthBias használata azonban új renderelési problémákat okozhat, ha egy rendkívül éles szögben megtekintett sokszög nagyon nagy z értéket eredményez. Ez valójában rendkívül távolra tolja a sokszöget az árnyéktérkép eredeti felületétől. A probléma enyhítésének egyik módja a DepthBiasClamphasználata, amely a kiszámított z torzítás mértékének felső határát (pozitív vagy negatív) adja meg.
Kapcsolódó témakörök