Unity - felület shader menedzsment segítségével mozaik DX11

A felület shaderek valamilyen támogatást GPU tessallation DirectX 11. Az ötlet a következő:

  • Tessellation határozza módosító tessellate: FunctionName. Ez a függvény a mozaik tényezők a határon, és a háromszög belsejében.
  • Amikor egy mozaik, miután ez az úgynevezett „vertex módosító” (vertex: FunctionName) állítja elő az egyes vertex shader a tartományban. Itt általában tettek kivetése elmozdulás térképeket.
  • Választható felület shaderek képes számítást phong mozaik számára Simításkorkor a modell, még kivetése nélkül elmozdulás térképeket.

Jelenlegi korlátai támogatja mozaik:

  • Csak egy háromszög alakú terület - nincs quad nincs szintvonal mozaik.
  • Ha mozaik, shader automatikusan felhasználásával összeállított Shader Model 5.0, így csak akkor fog működni alatt DX11.

Nem GPU mozaik, elmozdulás módosító csúcsok

Kezdjük a felület shader, ami a bevezetését elmozdulás térképek nélkül mozaik. Csak mozog a csúcsok mentén normál, alapján leolvasott érték helyettesítési térképen:

Shader A fenti meglehetősen szabványos, érdekes helyek:

  • Vertex módosító DISP teszi kiválasztása a térképről váltások és eltolja a csúcsok mentén merőlegesek.
  • Használt felhasználó szerkezet „vertex adatbevitel” (appdata) az alapértelmezett helyett struktúrák appdata_full. Bár nem kötelező, de a mozaik hatékonyan mérsékli a szerkezet.
  • Mivel a vertex koordinátákat nincs 2. UV koordinátákat, adjuk hozzá nolightmap irányelv kizárja lefedettségi térképek.

Íme néhány egyszerű tárgyak jelennek meg, ha ezzel a shader:

Unity - felület shader menedzsment segítségével mozaik DX11

A fix összegű mozaik

Adjunk hozzá egy fix összeg mozaik, azaz ugyanolyan szintű mozaik az egész testen. Ez a megközelítés akkor hasznos, ha a sokszög a képernyőn a modell az azonos méretű. Aztán néhány kód szintjének megváltoztatásához mozaik alapján a távolság a kamera.

Feature tessallation tessFixed mi shader visszatér négy mozaik tényező formájában egyetlen érték float4: három tényező mindkét oldalán a háromszög, és az egyik tényező a belső háromszög területe. Itt most csak vissza egy állandó érték, ami meg van adva a tulajdonságait az anyag.

Unity - felület shader menedzsment segítségével mozaik DX11

Tessellation távolság alapján

Azt is megváltoztathatja a szintet mozaik, attól függően, hogy a távolság a kamera. Például kijelenthetjük két távolsági értékek a távolság, amelynél a maximális mozaik (mondjuk 10 méter) és a távolság, annál közelebb, ahol a mozaik szint fokozatosan csökken (mondjuk 20 méter).

Itt tessallation függvény három paramétert; vertex adatok három háromszög szögei a mozaik. Meg kell kiszámítani a szintek mozaik, amely függ az aktuális pozícióját csúcs. Mi is a beépített kiegészítő fájl Tessellation.cginc és hívja tőle UnityDistanceBasedTess funkciót végezni a munkát. Ez a funkció kiszámítja a távolságot az egyes vertex kamrába, és letölti a végső mozaik tényezők.

Unity - felület shader menedzsment segítségével mozaik DX11

Tessellation alapú oldalhossz

Tessellation alapjául csak a távolság a jó, ha a méret a háromszög meglehetősen hasonlóak. A megjelenített kép a fenti, akkor előfordulhat, hogy a tárgyak kis háromszögeket mozaik túl erős, míg a tárgyak nagy háromszög mozaikus elég.

Ehelyett a mozaik szintek alapján kell kiszámítani a hossza az oldalán egy háromszög a képernyőn. - a hosszabb oldalon, annál nagyobb kell alkalmazni mozaik tényező.

Itt megint, egyszerűen hívja a funkciót UnityEdgeLengthBasedTess Tessellation.cginc elvégezni a munkát.

Unity - felület shader menedzsment segítségével mozaik DX11

Fenntartani a jó teljesítményt, hanem a fenti funkció ajánlott hívja UnityEdgeLengthBasedTessCull funkciót. amely biztosítja, hogy a vágási szigetek csonka. Ez teszi a shader egy kicsit több erőforrást igényel, de megtartja a nagyszámú GPU források részei a háló, amelyek nem tartoznak az érintett terület a kamera.

Phong mozaik

Phong tessallation megváltoztatja helyzetét felosztva sokszög úgy, hogy a kapott felület enyhén követte normálisai a háló. Ez egy nagyon hatékony módja annak, hogy sima az alacsony poli hálókat.

Felszíni Shaders Unity automatikusan kiszámítja phong tessallation az összeállítás irányelv tessphong: változóNév. Itt egy példa shader:

Itt van egy összehasonlítása normális shader (felső sor), és az egyik, hogy használja phong tessallation (alsó sor). Néha előfordulhat, hogy még ha nincs átfedés elmozdulás feltérképezése, a felület több lekerekített.

Unity - felület shader menedzsment segítségével mozaik DX11

Példák a felszíni lefedettség shaderek

Programozási vertex és fragment (pixel) shader