Zelené paprsky světla

V minulém článku jsem tak trochu nakousl problém osvětlení povrchu objektu a případným zájemcům o hlubší studium nabízím odkaz na stránku s trochou té matematické teorie... Jasné, že? :-)
Tak teď bych tedy vysvětlil, jak se to má s tou velikostí normál. Je to prostě tak, že na velikosti záleží... Ale vlastně ani ne. Čím delší normála je, tím jasněji je sice příslušný bod osvětlen, ale pokud jsme svůj model vytvořili pečlivě a promyšleně, nebudou žádné normály dělat potíže. Při kalkulaci se totiž vypočtou podle velikosti ploch jednotlivých fasetů, vpodstatě stejně velké. Osvětlení (a tím i stínování) bude dáno ne jejich velikostí, ale úhlem jejich natočení vzhledem k povrchu. Potíž je v tom, že v místech, kde je samotná polygonální mřížka (mesh) profilovaná a povrch se ohýbá pod určitým úhlem (MaxAngle), mohou vzniknout nepravidelnosti ve stínování povrchu (tzv. tmavé body).
mesh1
A protože ty vznikají nejčastěji v místech, kde se mesh zalamuje pod ostřejším úhlem, je nasnadě řešení - ostrá hrana (pos. 1 na obrázku níže). Ta se ale nehodí všude (např. z důvodu náročnosti na antialiasing ve hře), proto ji využíváme opravdu jen tam, kde to odpovídá skutečnosti. V ostatních případech raději využijeme několikanásobné hrany (nástroj Modify - Submesh - Chamfer), která sice zvyšují počet polygonů modelu, ale při rozumném použití to vyváží plynulostí tvarů a hladkými přechody - pos. 2).
mesh2
U dobře udělaného modelu () si vystačíme s nástrojem Calculate normals a když už jsme extra vysazení na správné odlesky, tak ještě Normals tuner. Pro úplnost a pro opravdu speciální případy ještě doplním ostatní možnosti - ty jsou ale bohužel rozesety po různých položkách v menu nástrojů:
- Modify - Flip (obrátí normály naruby)
- Modify - Rotate - Rotate Normals (rotuje normálami podle přednastavených os)
- Modify - Scale - Scale Normals (mění velikost normál a tím i nasvětlení příslušných vertexů)
- Surface - Normals - Calculate (vypočte normály vzhledem k povrchu objektu)
- Surface - Normals - Normalize (vypočte normály vzhledem k nulovému bodu scény)
- Surface - Normals - Projection (vypočte normály vzhledem k pozici pivot helperu)
- Surface - Normals - Smooth (zjemní přechod světla na ostré hraně, aby nebyla patrná)

Komentáře