Olen parhaillaan selvittämässä, kuinka pakata kaikki fyysisesti perustuvaa lykättyä toimittajaa varten tarvitsemani tiedot G-puskuriin käyttämättä säädytöntä renderikohteiden määrä.
Minulla on toistaiseksi 4 3-osaista vektoria:
- Albedo / Diffuse
- Normaali
- Tangentti
- Asento
Ja 4 yksittäistä komponenttia
- Metallinen
- Karheus
- Korkeus
- Ympäristön tukkeutuminen
Naiivi lähestymistapa on niputtaa yksi yksittäisistä komponenteista alfa (neljänteen) kanavaan yhdellä 3-osaisista vektoreista, mikä on nykyinen tutkimuslinjani. Ottaen kuitenkin huomioon, että neljä 4-kanavaista täystarkkuutta vaihtelevaa liukulukua renderöivää kohdetta ei ole ”pieni”, ymmärrän, että on tavallista käyttää puolitarkkuutta ja vielä pienempiä esityksiä muistitietoisempaan.
Kysyn seuraavaa: mitkä komponentit voin turvallisesti vähentää tarkkuutta menettämättä laatua ja kuinka paljon?
Vastaa
Ensinnäkin, et tarvitse sijaintia G-puskurissa ollenkaan. Pikselin sijainti voidaan rekonstruoida syvyyspuskurista tietäen kameran asetukset ja pikselin näyttötilan xy-sijainti. Voit siis päästä eroon koko puskuri.
Et myöskään tavallisesti tarvitse tangenttivektoreita G-puskurissa. Niitä tarvitaan vain normaalien karttojen muuntamiseen tangenttitilasta ja parallaksikartoitukseen; nämä tehtäisiin G-puskurin täyttöpassin aikana (kun sinulla on tangentteja hahmontamastasi verkosta), ja G-puskuri vain tallentaa normaalit maailman- tai näkymätilaan.
Materiaalien ominaisuudet, kuten värit, karheus ja metalliväri, ovat yleensä vain 8-bittisiä arvoja G-puskurissa, koska ne ovat peräisin 8-bittisistä tekstuureista. Sama AO.
Korkeutta ei myöskään tarvita G-puskurissa, ellet tee jonkinlaista siitä riippuvaa monipäästösekoitusta, mutta jos tarvitset sitä, 8 bittiä on todennäköisesti riittää siihenkin.
Normaalit voivat hyötyä siitä, että ne tallennetaan 16-bittisiksi arvoiksi 8-bittisten sijaan. Puoli kellunta on kunnossa, mutta 16-bittinen kiinteä piste on vielä parempi, koska se antaa sinulle yhdenmukaisemman tarkkuuden kaikissa suunnissa (puoli kelluva on tarkempi akselien lähellä ja menettää tarkkuutta poissa niistä). Lisäksi voit leikata ne kolmesta komponentista kahteen käyttämällä oktaedrista kartoitusta .
Joten päivän päätteeksi pienin G-puskuri saattaa näyttää tältä:
- Materiaalin väri + metallinen: RGBA8
- Kahdeksankulmainen avaruus normaali + karheus + AO: RGBA16
ja se on kaikki! Vain 12 tavua pikseliä kohti.
Vaihtoehtoisesti voit käyttää normaalille RG16-puskuria ja siirtää karheuden + AO erilliseen 8-bittiseen puskuriin. Se antaisi sinulle jonkin verran tilaa kasvaa, jos tarvitset lopulta enemmän joko 8- tai 16-bittisiä G-puskurikomponentteja.
Kommentit
- Myös metallisuus on usein binaarinen arvo, ja olettaen, ettet käytä karkeusgradientteja (jotta pienentyneen tarkkuuden vaikutus näkyisi), voit tallentaa metallisuuden ja karheuden yhteen 8-bittiseen kanavaan (1-bittinen metallille ja 7-karheudelle).