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:

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.

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.

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.

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.

Példák a felszíni lefedettség shaderek
Programozási vertex és fragment (pixel) shader