Megosztás a következőn keresztül:


AZ UVAtlas használata (Direct3D 9)

Jegyzet

Az UVAtlas eredetileg az elavult D3DX9 utilty könyvtárban lett szállítva. A legújabb verzió a(z) UV Atlas Command-Line eszköznél (uvatlas.exe)érhető el.

Számos megjelenítési és tartalomgenerálási technika megköveteli egy 2D jel (például textúra) egyedi, nem átfedésmentes térképét a hálóra. Ilyen technikák a következők:

  • Normál-/elmozdulási leképezés
  • Textúratérbeli PRT-szimulációk és fénytérképek
  • Felületfestés
  • Textúratér megvilágítás

Az egyedi UV-leképezés manuális létrehozása gyakran időigényes és fárasztó; ez különösen igaz, ha a bemeneti geometria összetett, és hatékony/alacsony torzítású textúra-tér kihasználtságra van szükség. Az alábbi ábrán egy példarács és annak megfelelő textúraatlasz látható.

Egy példahálót és annak megfelelő anyagmintázatot jelenít meg.

Ez a példa egy hálót (a bal oldalon) és a megfelelő UV-tér normál térképet mutat (jobb oldalon). Figyelje meg, hogy a textúra-atlasz több adatcsoportot vagy -fürtöt tartalmaz; minden fürtöt diagramnak nevezünk, és a fenti példában a megjelenítések a háló egy részének normál adatait tartalmazzák.

A D3DX UVAtlas API-k automatikusan létrehoznak egy optimális, nem átfedésmentes textúraatlaszt. Az API-k olyan bemeneti paramétereket biztosítanak, amelyek lehetővé teszik a következőt:

  • Minimalizálja a textúra nyúlását, torzítását és alulméretezését.
  • Maximalizálja a textúra-tér csomagolási sűrűségét a memória hatékony használatához.
  • Egyenletes mintavételezést biztosít a hálón, minimalizálva a mintavételezési gyakoriság megszakításait.

Az UVAtlas működése

Az UVAtlas API-k (lásd UVAtlas Functions) egy felület diagramokba particionálásával és a diagramok anyagminta-atlaszba való csomagolásával létrehoznak egy anyagminta-atlaszot. A D3DXUVAtlasPartition és D3DXUVAtlasPack használatával külön hajthatja végre ezeket a lépéseket; vagy használja a D3DXUVAtlasCreate egyetlen hívás particionálására, paraméterezésére és csomagolására.

Mesh particionálása és paraméterezése

Először a hálót diagramokra particionáltuk, majd minden diagramot a saját [0,1] UV-térbe paraméterezünk. A hengerek paraméterezhetők egy diagrammal; egy gömbnek viszont két diagramra van szüksége, ahogyan az az alábbi ábrán is látható.

két diagramra particionált gömb illusztrációja

Az egyetlen diagrammal paraméterezhető hálót a rendszer "homeomorfikus lemeznek" minősíti, ami azt jelenti, hogy egy végtelenül rugalmas, végtelenül nyúló lemezt oszthat szét a diagramon, és tökéletesen lefedheti a geometriát. Ez a nyúlás, az úgynevezett homeomorfizmus, egy kétirányú függvény; ami azt jelenti, hogy az egyik paraméterezésről a másikra válthat anélkül, hogy elveszítené az információkat.

Nagyon kevés valós háló paraméterezhető két dimenzióba anélkül, hogy a hálót fürtökre vagy diagramokra kellene szétválasztani. Az alábbi ábra egy másik mintahálót és annak megfelelő anyagmintázatát mutatja be.

Különböző alakzatokkal és a hozzá tartozó anyagminta-atlaszokkal rendelkező mintahálót jelenít meg.

A létrehozott diagramok számát két paraméter határozza meg:

  • Az atlaszhoz engedélyezett diagramok maximális száma
  • Az egyes diagramok maximálisan megengedett nyúlása

A nyújtás mennyisége határozza meg a létrehozott diagramok számát és a mintavételezés általános minőségét. A nyújtás 0,0-tól 1,0-ig (bármilyen mértékű nyújtás) terjed. A D3DXUVAtlasCreate és a D3DXUVAtlasPartition visszaadja az algoritmus által létrehozott maximális nyúlást. Az alábbi ábra egy másik mintahálót és annak megfelelő anyagmintázatát mutatja be.

a mintaháló és a hozzá tartozó textúra atlasz illusztrációja

Integrálható metrika-tenzorok használata a paraméterezés szabályozásához

A textúra-tér rangsorolása háromszögenként adható meg. Az integrált metrika-tenzorok segítségével szabályozható, hogy a háromszögek hogyan legyenek feszítve az eredményül kapott textúra-tér atlaszban. Az IMT-ek közvetlenül vagy egy bemeneti jel alapján, a D3DX IMT számítási függvények használatával határozhatók meg. Az integrált metrika-tenzor (vagy IMT) egy szimmetrikus, 2x2-es mátrix, amely leírja, hogyan nyúlik meg egy háromszög az atlaszon. Az egyes IMT-eket 3 lebegőpontos szám határozza meg, nevezzük őket (a,b,c). Ezek egy szimmetrikus 2x2 mátrixba rendezhetők, mint a következő:

a b
b c

Ezután az IMT segítségével megtalálhatja a két vektor közötti távolságot. Adott két vektor v1 és v2, ahol:

vector v1
vector v2 = v1 + (s,t)

A v1 és a v2 közötti távolság a következőképpen számítható ki:

sqrt((s, t) * M * (s, t)^T)

Más szóval a vektor (s,t) az u-v térben tetszőleges irányban megadott nyújtás nagysága lehet. Ebben az esetben az s vektor az elsőtől a második csúcsig tartó irány, a t pedig a normál és az s keresztterméke. Például:

(1,1) * (1,1) = (2,2)
        (1,1)
IMT(1,1,1) scales by 2
(1,-1) * (1,1) = (0,0)
         (1,1)
IMT(2,0,2) scales by 2 with no shearing

Az IMT-ek közvetlenül vagy egy bemeneti jel alapján határozhatók meg a D3DX IMT számítási függvények használatával: D3DXComputeIMTFromPerVertexSignal, D3DXComputeIMTFromPerTexelSignal, D3DXComputeIMTFromSignal és D3DXComputeIMTFromTexture_graphics.

Adja meg közvetlenül az IMT-adatokat, ha szeretné szabályozni, hogy a textúra-tér hogyan legyen lefoglalva az egyes háromszögekhez. Ezzel több területet oszthat ki az atlaszban a háló fontos területeire (például egy karakter arcára vagy mellkasi emblémájára, vagy egy jelenet régióira a játékos sétaútvonala közelében). Az identitásmátrix többszöröseit tartalmazó IMT-ek megadásával az eredményül kapott háromszögek egységesen lesznek skálázva a textúratérben.

Ha például nagy felbontású normál térképet használ, az IMT-t úgy is kiszámíthatja, hogy a normál térképen több anyagminta-helyet biztosítson a nagyobb gyakoriságú jel területeinek. A "sima" háromszögek (amelyek az eredeti normál térkép állandó régióira vannak leképezve) kevesebb anyagterületet kapnak. A nagy mennyiségű normál térképrészletet tartalmazó háromszögek a végeredményben több textúraterületet kapnak. Ezt követően a normál térképet egy kisebb textúrába leskálázhatja, miközben megőrizheti a részleteket, vagy újraszámíthatja a normál térképet az optimálisabb UV-leképezéssel.

Szomszédsági adatok használata a felhasználó által megadott gyűrődésekhez

A felhasználó által definiált szomszédos információk a particionálási függvény számára a hálóban előre definiált gyűrődések leírására szolgálnak, és így a szomszédos arcok közötti diagramhatárt határozzák meg. Ez egy egyszerű módja annak, hogy a felhasználó saját diagramparticionálást adjon meg az algoritmus bemeneteként, amely tovább finomítja a diagramokat, hogy a nyúlás a megengedett maximális érték alá kerüljön.

Példa

Ez a példa bemutatja, hogyan használhatja az UVAtlas API-kat és a DirectX Viewert (Dxviewer.exe) a modell olyan megszakításainak megkereséséhez és javításához, amelyek jelentősen befolyásolhatják a textúraatlasz méretét. A Dxviewer.exe a DirectX SDK-ból szerezheti be és ismerheti meg. Dxviewer.exe a 2009. augusztusi verzió után eltávolították a DirectX SDK-ból, így legalább a 2009. augusztusi DirectX SDK-ra lesz szüksége. További információ a DirectX SDK-ról: Hol található a DirectX SDK?.

Tegyük fel, hogy a kedvenc tartalomgeneráló szoftverében kezdett el használni néhány modellt (ez a példa egy Mayában létrehozott törpe fejmodellt használ). Exportálja a textúramodellt egy .x fájlba, és hozzon létre egy textúraatlaszt a D3DXUVAtlasCreate használatával. Az eredményként kapott anyagminta-atlasz az alábbi ábrához hasonlóan fog kinézni.

egy atlasz illusztrációja egy törpe modellhez

Az atlasz 22 térképet tartalmaz, és legnagyobb nyúlása 0,994.

Most tekintse meg a textúramodellt, hogy lássa, milyen jól megfelel a geometriának a textúra atlasza. Ehhez töltse be a modellt a megtekintő eszközbe:

  • Nyissa meg a megtekintő eszközt a DirectX segédprogramokból.
  • A Megnyitás gombra kattintva töltse be az .x fájlt.
  • A gyűrődés megtekintési lehetőségének engedélyezéséhez kattintson a nézet gombra, és válassza a Gyűrések lehetőséget az előugró ablakból.

Az alábbi ábrán látható, hogy mit kell látnia a megtekintő eszközben.

anyagmintás háló illusztrációja a megtekintő eszközben

Minden vonal egy gyűrődés, amely a textúra atlasz két diagramja közötti szomszédos él. Az algoritmus által létrehozott diagramok számát kisebb eltérések okozzák, talán a normálértékek megszakításai miatt. Ezek a kis különbségek csökkenthetők az adatok hegesztésével, vagyis a közel egyenlő adatok kényszerítésével. A normál és a bőrvastagságok hegesztéséhez:

  • Futtassa a DirectX Ops (dxops.exe) eszközt a hálón az alábbi parancssorral (a "modelName.x" helyére írja be a modell nevét):
    Dxops.exe -s "load 'modelName.x'; Optimize n:2.01 w:2.01 uv0:0.01;  save 'newModelName.x';"
    

Ez összehasonlítja a normál értékeket és a bőrsúlyokat, és ahol 2,01-nél kisebb értékkel térnek el egymástól, az adatok egyenlővé lesznek. Az alábbi ábrák a szem közelképét mutatják, hogy láthatóvá váljanak a gyűrődések a hegesztés előtt (a bal oldalon) és a gyűrődések a hegesztés után (a jobb oldalon):

gyűrődések illusztrációja hegesztés előtt hegesztés utáni gyűrődések illusztrációja

7. ábra: A gyűrődések eltávolítása hegesztéssel

Ebben a példában a hegesztés 86 csúcspontot távolított el a bemeneti hálóból. Ha kevesebb gyűrődés van a hálóban, az atlasz újragenerálható, ahogy az alábbi ábrán is látható.

új atlasz illusztrációja a gyűrődések eltávolításával

Az atlasznak csak 7 diagramja van, és maximális kiterjedése körülbelül 0,0776. Az új atlasz most egy kisebb textúrába illeszkedik (ebben a példában körülbelül 30 egységnyivel kisebb%).

Diagramok csomagolása atlaszba

Miután egy hálót külön-paraméteres diagramokra particionáltak, a diagramokat hatékonyan kell egyetlen anyagminta-térképbe csomagolni. Ez a D3DXUVAtlasCreate második lépéseként történik, vagy kifejezetten meghívható a D3DXUVAtlasPack meghívásával.

A sűrűn elhelyezett diagramokat a felhasználó által meghatározott köz szélessége választja el egymástól. A vályúszélesség a grafikonok közötti távolság, és lehetővé teszi a bilineáris interpolációt és mip-leképezést, hogy elkerüljük a renderelési hibákat a grafikonok határainál. A D3DX felületet biztosít az ereszcsatornák automatikus kitöltéséhez – további információért lásd ID3DXTextureGutterHelper.

Az UVAtlas integrálása a munkafolyamatba

Amellett, hogy a textúrafestés előtt a művész által használtak, ezek a függvények integrálhatók egy automatizált művészeti rendszerbe. Egy UVAtlas-hívás például automatikusan kibocsátható egy objektum frissítése után, prT-szimuláció vagy normál leképezési bérlet végrehajtása előtt. Így nem kell manuálisan javítani az objektum UV-leképezését, ha a háló topológiáját módosították.

Lásd például az UV Atlas Command-Line eszköz (uvatlas.exe) használatát az UVAtlas függvényeknél.

Speciális témakörök