Mapování textur - Texture mapping

1: 3D model bez textur
2: Stejný model s texturami
Mapování dvourozměrné textury na 3D model

Mapování textury je metoda pro definování vysokofrekvenčních detailů , textury povrchu nebo barevných informací na grafice nebo 3D modelu generovaném počítačem . Původní techniku ​​vyvinul Edwin Catmull v roce 1974.

Mapování textury původně odkazovalo na difúzní mapování , metodu, která jednoduše mapovala pixely z textury na 3D povrch („obalení“ obrázku kolem objektu). V posledních desetiletích se objevuje víceprůchodové vykreslování, multitexturování , mipmapy a složitější mapování, jako je výškové mapování , nárazové mapování , normální mapování , posunutí , reflexní mapování , zrcadlové mapování , okluzní mapování a mnoho dalších variací na tuto techniku. (řízeno materiálovým systémem ) umožnilo simulovat téměř fotorealismus v reálném čase výrazným snížením počtu polygonů a výpočtů osvětlení potřebných k vytvoření realistické a funkční 3D scény.

Příklady multitexturování :
1: koule bez textur, 2: mapy textur a nárazů, 3: pouze mapa textur, 4: mapy neprůhlednosti a textury

Texturové mapy

A texturová mapa je obrázek aplikovaný (namapovaný) na povrch obrazce nebomnohoúhelníku. Může to býtbitmapový obrázekneboprocedurální textura. Mohou být uloženy v běžnýchformátech obrazových souborů, na které odkazují3D modelové formátynebodefinice materiálů, a sestaveny dosvazků prostředků.

Mohou mít 1-3 rozměry, ačkoli 2 rozměry jsou nejběžnější pro viditelné povrchy. Pro použití s ​​moderním hardwarem mohou být data mapování textur uložena ve svislých nebo vedle sebe uspořádaných uspořádáních, aby se zlepšila soudržnost mezipaměti . Vykreslovací rozhraní API obvykle spravují prostředky mapy textur (které mohou být umístěny v paměti zařízení ) jako vyrovnávací paměti nebo povrchy a mohou umožňovat „ vykreslení na texturu “ pro další efekty, jako je následné zpracování nebo mapování prostředí .

Obvykle obsahují barevná data RGB (buď uložená jako přímá barva , komprimované formáty nebo indexované barvy ), a někdy další kanál pro míchání alfa ( RGBA ), zejména pro billboardy a textury překryvných obtisků . Je možné použít alfa kanál (což může být výhodné pro uložení ve formátech analyzovaných hardwarem) pro jiná použití, jako je například spekularita .

Několik map textur (nebo kanálů ) lze kombinovat pro kontrolu nad spekularitou , normálkami , posunem nebo rozptylem pod povrchem, např. Pro vykreslování kůže.

Více obrazů textur lze kombinovat v atlasech textur nebo textur pole, aby se omezily změny stavu moderního hardwaru. (Mohou být považovány za moderní evoluci grafiky dlaždic ). Moderní hardware často podporuje mapování kostek s více plochami pro mapování prostředí.

Tvorba

Texturové mapy lze získat skenováním / digitální fotografií , navrženými v softwaru pro manipulaci s obrázky, jako je GIMP , Photoshop , nebo namalovanými na 3D povrchy přímo v nástroji pro 3D malování, jako je Mudbox nebo zbrush .

Aplikace textur

Tento proces je podobný aplikaci vzorovaného papíru na obyčejný bílý rámeček. Každému vrcholu v polygonu je přiřazena souřadnice textury (která je v případě 2d známá také jako souřadnice UV ). To lze provést pomocí explicitního přiřazení vrcholů atributů , ručně upravených v balíčku 3D modelování pomocí nástrojů pro rozbalování UV . Je také možné přiřadit procesní transformaci z 3D prostoru do prostoru textury s materiálem . Toho lze dosáhnout planárním promítáním nebo alternativně válcovým nebo sférickým mapováním. Složitější mapování může brát v úvahu vzdálenost podél povrchu, aby se minimalizovalo zkreslení. Tyto souřadnice jsou interpolovány přes plochy polygonů, aby se při vykreslování vzorkovala mapa textur. Textury lze opakovat nebo zrcadlit, aby se rozšířila konečná obdélníková bitmapa na větší plochu, nebo mohou mít jedinečné „ injektivní “ mapování z každého kusu povrchu (což je důležité pro mapování vykreslování a mapování světla , také známý jako pečení ).

Texturový prostor

Mapování textury mapuje povrch modelu (nebo prostor obrazovky během rastrování) do prostoru textury ; v tomto prostoru je mapa textur viditelná v nezkreslené podobě. Nástroje pro rozbalování ultrafialového záření obvykle poskytují pohled do prostoru textur pro ruční úpravu souřadnic textur. Některé techniky vykreslování, jako je rozptyl pod povrchem, lze provádět přibližně operacemi texturového prostoru.

Multitexturing

Multitexturing je použití více než jedné textury najednou na polygonu. Například světlo mapa textury mohou být použity na světlo povrchu jako alternativa k přepočítávání že osvětlení pokaždé, když je povrch vykreslen. Mikrotextury nebo textury detailů se používají k přidání detailů s vyšší frekvencí a mapy nečistot mohou přidat zvětrávání a variace; to může výrazně snížit zjevnou periodicitu opakujících se textur. Moderní grafika může pro větší věrnost používat více než 10 vrstev, které jsou kombinovány pomocí shaderů . Další technikou multitextury je bump mapping , který umožňuje textuře přímo řídit směr obrácení povrchu pro účely jeho výpočtů osvětlení; může dát velmi dobrý vzhled složitého povrchu (jako je kůra stromů nebo hrubý beton), který kromě obvyklého detailního zbarvení přebírá i detaily osvětlení. Bump mapping se v posledních videohrách stal populárním, protože grafický hardware je dostatečně výkonný, aby jej bylo možné přizpůsobit v reálném čase.

Filtrování textur

Způsob, jakým jsou vzorky (např. Při zobrazení jako pixely na obrazovce) počítány z texelů (pixely textur), se řídí filtrováním textur . Nejlevnější metodou je použít interpolaci nejbližšího souseda , ale bilineární interpolace nebo trilineární interpolace mezi mipmapami jsou dvě běžně používané alternativy, které snižují aliasing nebo jaggies . V případě, že se souřadnice textury nachází mimo texturu, je buď upnutá, nebo zabalená . Anizotropní filtrování lépe eliminuje směrové artefakty při prohlížení textur ze šikmých pozorovacích úhlů.

Streamování textur

Streamování textur je způsob využití datových proudů pro textury, kde je každá textura k dispozici ve dvou nebo více různých rozlišeních, aby se určilo, která textura by měla být načtena do paměti a použita na základě vzdálenosti kreslení od prohlížeče a kolik paměti je k dispozici pro textury. Streamování textur umožňuje vykreslovacímu stroji používat textury s nízkým rozlišením pro objekty daleko od kamery diváka a rozdělit je na podrobnější textury, čtené ze zdroje dat, když se úhel pohledu blíží objektům.

Pečení

Jako optimalizaci je možné vykreslit detaily ze složitého modelu s vysokým rozlišením nebo nákladného procesu (například globálního osvětlení ) do textury povrchu (případně na modelu s nízkým rozlišením). Pečení je také známé jako mapování vykreslování . Tato technika se nejčastěji používá pro světelné mapy , ale lze ji také použít ke generování normálních map a výtlakových map . Některé počítačové hry (např. Messiah ) používaly tuto techniku. Původní softwarový engine Quake používal on-the-fly pečení ke kombinaci světelných a barevných map („ povrchové ukládání do mezipaměti “).

Pečení může být použito jako forma generování detailů , kde lze složitou scénu s mnoha různými prvky a materiály aproximovat jediným prvkem s jedinou texturou, který je pak algoritmicky redukován pro nižší náklady na vykreslování a méně drawcallů . Používá se také k získávání vysoce detailních modelů z 3D sochařského softwaru a skenování mračen bodů a jejich přibližování pomocí sítí vhodnějších pro vykreslování v reálném čase.

Rasterizační algoritmy

V softwarových a hardwarových implementacích se vyvinuly různé techniky. Každý nabízí různé kompromisy v přesnosti, všestrannosti a výkonu.

Mapování textur vpřed

Některé hardwarové systémy, např. Sega Saturn a NV1, procházejí souřadnicemi textur přímo, interpolují promítnutou polohu v prostoru obrazovky prostorem textur a stříkají texely do vyrovnávací paměti rámců . (v případě NV1 byla použita kvadratická interpolace umožňující zakřivené vykreslování). Společnost Sega poskytla nástroje pro pečení vhodných dlaždic s texturami na čtvrtinu z modelů namapovaných UV.

To má tu výhodu, že mapy textur se čtou jednoduchým lineárním způsobem.

Mapování textur vpřed může někdy také přinést přirozenější výsledky než mapování afinních textur, pokud jsou primitivy zarovnány s výraznými směry textur (např. Značení silnic nebo vrstvy cihel). To poskytuje omezenou formu korekce perspektivy. Perspektivní zkreslení je však u primitivů v blízkosti kamery stále viditelné (např. Saturnský port Sega Rally vykazoval artefakty rozbíjející texturu, protože blízké polygony byly téměř oříznuty bez UV souřadnic).

Tato technika se v moderním hardwaru nepoužívá, protože souřadnice UV se ukázaly jako univerzálnější pro modelování a konzistentnější pro ořez .

Inverzní mapování textur

Většina přístupů používá inverzní mapování textur , které prochází primitivy vykreslování v prostoru obrazovky při interpolaci souřadnic textury pro vzorkování. Tato interpolace může být afinní nebo perspektivní . Jednou výhodou je, že každý výstupní pixel je zaručeno, že bude procházen pouze jednou; obecně jsou data zdrojové mapy textur uložena v nějaké nižší bitové hloubce nebo v komprimované podobě, zatímco vyrovnávací paměť rámců používá vyšší bitovou hloubku. Další je větší univerzálnost pro UV mapování . Mezipaměti textura se stává důležité pro ukládání do vyrovnávací paměti čtení, protože přístup vzor paměti v textury prostoru je složitější.

Afinní mapování textur

Protože mapování afinních textur nebere v úvahu informace o hloubce o vrcholech mnohoúhelníku, kde mnohoúhelník není kolmý na diváka, vytváří znatelný defekt.

Afinní mapování textur lineárně interpoluje souřadnice textur na povrchu, a tak je nejrychlejší formou mapování textur. Některý software a hardware (jako původní PlayStation ) projektových vrcholy ve 3D prostoru na obrazovce během renderování a lineárně interpolate texturu souřadnic v prostoru obrazovky mezi nimi ( „inverzní mapování textur“). To lze provést zvýšením UV souřadnic s pevným bodem nebo algoritmem přírůstkové chyby podobným Bresenhamově liniovému algoritmu .

Na rozdíl od kolmých mnohoúhelníků to vede ke znatelnému zkreslení s perspektivními transformacemi (viz obrázek: textura kontrolního rámečku se zdá ohnutá), zejména jako primitivy v blízkosti kamery . Takové zkreslení lze snížit rozdělením polygonu na menší.

Doom engine vykresluje svislé a vodorovné rozpětí s afinním mapováním textur, a proto není schopen kreslit rampované podlahy nebo šikmé stěny.

Perspektivní správnost

Perspektivní správné texturování odpovídá pozicím vrcholů ve 3D prostoru, nikoli pouze interpolací souřadnic v prostoru 2D obrazovky. Tím se dosáhne správného vizuálního efektu, ale jeho výpočet je dražší.

Chcete-li provést opravu perspektivě souřadnic pro mapování textur a s být hloubka složka z pozice diváka pohledu, můžeme využít k tomu, že hodnoty , a jsou lineární v prostoru obrazovky po povrchu je texturou. Na rozdíl od originálu , a , před rozdělením, nejsou lineární v celém povrchu v prostoru obrazovky. Můžeme tedy lineárně interpolovat tyto převrácené hodnoty po povrchu a vypočítat korigované hodnoty pro každý pixel, abychom získali perspektivní správné mapování textury.

Za tímto účelem nejprve vypočítáme převrácené hodnoty v každém vrcholu naší geometrie (3 body za trojúhelník). Pro vrchol máme . Poté lineárně interpolujeme tyto převrácené hodnoty mezi vrcholy (např. Pomocí barycentrických souřadnic ), což má za následek interpolované hodnoty napříč povrchem. V daném bodě to poskytne interpolované a . Všimněte si, že toto zatím nelze použít jako naše souřadnice textur jako naše rozdělení změnou jejich souřadnicového systému.

Pro opravu zpět do prostoru nejprve vypočítáme opravené opětovným převrácením . Poté použijeme toto k opravě našich : a .

Tato oprava umožňuje, aby v částech polygonu, které jsou blíže k divákovi, byl rozdíl mezi pixely mezi pixely mezi souřadnicemi textury menší (roztažením textury širší) a v částech, které jsou dále, byl tento rozdíl větší (komprimace textury) .

Afinní mapování textur přímo interpoluje souřadnici textury mezi dvěma koncovými body a :
kde
Perspektivní správné mapování interpoluje po dělení hloubkou a poté použije své interpolované reciproční k obnovení správné souřadnice:

Hardware pro 3D grafiku obvykle podporuje perspektivní správné texturování.

Pro vykreslování geometrie mapované do textur do obrazů s různým poměrem kvality/přesnosti se vyvinuly různé techniky, které lze aplikovat na software i hardware.

Klasické softwarové mapovače textur obecně prováděly pouze jednoduché mapování s nejvýše jedním světelným efektem (obvykle se používají prostřednictvím vyhledávací tabulky ) a správnost perspektivy byla zhruba 16krát dražší.

Omezené otáčení kamery

Motor Doom omezil svět na svislé stěny a horizontální podlahy/stropy s kamerou, která se mohla otáčet pouze kolem svislé osy. To znamenalo, že stěny budou mít souřadnici konstantní hloubky podél svislé čáry a podlahy/stropy budou mít konstantní hloubku podél vodorovné čáry. Bylo by možné použít rychlé afinní mapování, protože by to bylo správné. Některé pozdější renderery této éry simulovaly malé množství rozteče kamery se střihem, což umožnilo vzhled větší svobody při použití stejné techniky vykreslování.

Některé motory byly schopny poskytnout textury mapovány Heightmaps (např Nova Logic ‚s voxel prostor a motor pro vyvrženec ) přes Bresenham like dílčích algoritmů, produkovat vzhled textury mapovány krajiny bez použití tradičních geometrických primitiv.

Dělení pro korekci perspektivy

Každý trojúhelník lze dále rozdělit do skupin po přibližně 16 pixelech, aby bylo dosaženo dvou cílů. Nejprve zaměstnat aritmetický mlýn po celou dobu. Za druhé, rychlejší aritmetické výsledky.

Rozdělení světového vesmíru

Pro perspektivní mapování textur bez hardwarové podpory je trojúhelník rozdělen na menší trojúhelníky pro vykreslování a je na nich použito afinní mapování. Důvod, proč tato technika funguje, je ten, že na menších polygonech je zkreslení afinního mapování mnohem méně patrné. Sony PlayStation široce využívá, protože to je podporován pouze afinní mapování v hardware, ale měl relativně vysoký trojúhelník propustnost ve srovnání se svými vrstevníky.

Rozdělení prostoru obrazovky

Softwarové vykreslovače obecně upřednostňují rozdělení obrazovky, protože má menší režii. Navíc se pokoušejí provádět lineární interpolaci podél řady pixelů, aby se zjednodušilo nastavení (ve srovnání s 2d afinní interpolací), a tedy opět režie (také afinní mapování textur nezapadá do nízkého počtu registrů procesoru x86 ; 68000 nebo jakýkoli RISC je mnohem vhodnější).

U Quake byl zvolen jiný přístup , který by vypočítával perspektivní správné souřadnice pouze jednou za 16 pixelů skenovací linie a lineárně interpoloval mezi nimi, přičemž by efektivně běžel rychlostí lineární interpolace, protože výpočet správné perspektivy běží paralelně na koprocesoru. Polygony jsou vykreslovány nezávisle, a proto může být možné přepínat mezi poli a sloupci nebo diagonálními směry v závislosti na orientaci normálu mnohoúhelníku, aby bylo dosaženo konstantnější z, ale zdá se, že úsilí nestojí za to.

Techniky dělení prostoru obrazovky. Vlevo nahoře: Zemětřesení, vpravo nahoře: bilineární, vlevo dole: const-z

Jiné techniky

Další technikou bylo aproximace perspektivy pomocí rychlejšího výpočtu, například polynomu. Ještě další technika používá hodnotu 1/z posledních dvou nakreslených pixelů k lineární extrapolaci další hodnoty. Od těchto hodnot se pak dělí, takže je třeba rozdělit pouze malý zbytek, ale vzhledem k množství účetnictví je tato metoda u většiny systémů příliš pomalá.

Nakonec modul Build rozšířil trik konstantní vzdálenosti používaný pro Doom tím, že našel čáru konstantní vzdálenosti pro libovolné polygony a vykreslil ji.

Hardwarové implementace

Hardware pro mapování textur byl původně vyvinut pro simulaci (např. Implementován v generátorech obrázků Evans a Sutherland ESIG) a profesionální grafické pracovní stanice, jako je Silicon Graphics , vysílací digitální video efektové stroje jako Ampex ADO a později se objevily v arkádových skříních , spotřebitelské video herní konzole a počítačové grafické karty v polovině 90. let. V letové simulaci mapování textur poskytovalo důležité podněty pohybu.

Moderní grafické procesorové jednotky (GPU) poskytují specializované pevné funkční jednotky nazývané texturové vzorkovače nebo texturové mapovací jednotky pro provádění mapování textur, obvykle s trilineárním filtrováním nebo lepším anizotropním filtrováním s více klepnutími a hardwarem pro dekódování konkrétních formátů, jako je DXTn . Od roku 2016 je hardware pro mapování textur všudypřítomný, protože většina SOC obsahuje vhodný GPU.

Některý hardware kombinuje mapování textur s určováním skrytého povrchu v odloženém vykreslování založeném na dlaždicích nebo vykreslování skeneru ; takové systémy načítají viditelné texty pouze na úkor použití většího pracovního prostoru pro transformované vrcholy. Většina systémů se ustálila na přístupu ukládání do vyrovnávací paměti Z , který může stále snižovat pracovní zátěž mapování textur při řazení zepředu dozadu .

Aplikace

Kromě 3D vykreslování inspirovala dostupnost hardwaru pro mapování textur jeho použití pro zrychlení dalších úkolů:

Tomografie

Je možné použít textury mapování hardware k urychlení jak rekonstrukci z voxelů datových souborů z tomografických vyšetření a vizualizaci výsledků

Uživatelská rozhraní

Mnoho uživatelských rozhraní pomocí mapování textur, aby urychlila animované přechody obrazovkových prvků, například Exposé v systému Mac OS X .

Viz také

Reference

Software

  • TexRecon -open-source software pro texturování 3D modelů napsaných v C ++

externí odkazy