Vertex de iluminat în conjuncție cu lightmap-uri

Acum nu veți fi surprins de prezența LightMap în program. Și cu atât mai mult este prezența iluminării vertexului. Dar, cu toate acestea, nu aruncați imediat acest subiect în coșul de gunoi.







Anterior, iluminatul vertexului nu a putut produce rezultate calitative, deoarece hărțile nu puteau desena un număr suficient de triunghiuri pe cadru, în care iluminarea vertexului avea putere. Prin urmare, sa dovedit ceva de genul:

Vertex de iluminat în conjuncție cu lightmap-uri

În partea stângă a imaginii se poate observa că, datorită numărului mic de triunghiuri, iluminarea nu se desfășoară la fel ca în partea dreaptă. Adică, nu există niciun punct de lumină vizibil, iar numai tranzițiile de culori între fiecare vârf sunt vizibile și există doar patru dintre acestea. Pentru a obține aceeași calitate a luminii ca în partea dreaptă a imaginii, trebuie să utilizați fie un LightMap sau un număr mai mare de triunghiuri.

Acum să încercăm să comparăm ambele metode.

Concluzie: LightMap - calitate, VertexLight - cantitate.

De obicei, oamenii sunt mai interesați de calitate. Mai bine un procesor bun decât zece 486'h. Într-un caz extrem, dacă există o cerere pentru 486 de procesatori, atunci ei vor fi capabili să le producă.

Iată o imagine din exemplul atașat la acest articol:

Vertex de iluminat în conjuncție cu lightmap-uri

În imagine există un ceainic care aruncă o umbră pe scenă. În același timp, lumina nu trece prin ea. Rețineți că umbra este pictată destul de calitativ, iar cel mai important lucru este că nu este LightMapes. Aceasta este iluminarea vertexului.

Numărul de poligoane de pe cazan este destul de ridicat și numai, prin urmare, umbra pe ea arată bine.







Concluzie: atunci când se utilizează obiecte poligonale înalte, este mai bine să se utilizeze iluminarea de vârf. În același timp, LightMap este folosit ca o modalitate de a crea umbre de înaltă calitate.

Acum, în detaliu, vom analiza cea mai importantă funcție din acest exemplu:

Lucrul este că programul este atât de simplu încât chiar și numărul de obiecte din el este fixat. Asta este, atunci când încercați să înlocuiți fișierele de hartă, programul cel mai probabil nu va începe, și dacă acestea vor funcționa, atunci numai primele două obiecte. Probabil că aveți propriile dvs. clase de vectori, avioane, așa că nu am făcut un program super răsucite din exemplul în care piciorul diavolului s-ar rupe. Cred că înlocuirea unui tip de date cu altul nu va fi dificilă.

Prin urmare, în funcția InitVertexLight (), mergem imediat peste fiecare vârf al celui de-al doilea obiect. Și apoi algoritmul este după cum urmează:

1. Am setat culoarea umbrei la 130. În general, acest lucru se poate face cu metode mai avansate, dar acesta se va potrivi de asemenea.

2. Deoarece există o singură sursă de lumină, o verificăm imediat. Dacă distanța de la bec este mai mare decât raza de iluminare, vom sări peste vârf. Deși în acest exemplu nu este vizibil din cauza unei mici scene, este mai bine să nu o sări peste partea de sus, ci să îi atribuim o culoare. Negru sau gri.

3. Aflați despre intersecția razei de la sursa de lumină până la vârf.

4. Apoi găsim din nou distanța de la bulb până la vârf. Pentru optimizare, o puteți face o singură dată.

În continuare, pe formulele care au fost menționate în mod repetat pe multe site-uri, găsim culoarea în vârf pe baza lungimii și a razei. O facem astfel:

- Găsiți distanța de la sursa de lumină spre partea de sus

- Obținem valoarea atenuării (a) din formula: 1 - (d / rad)
în cazul în care,
d este distanța de la sursa de lumină la vârf,
rad este raza sursei de lumină (raza de iluminare)

- Apoi găsim vârfurile RGB după formula: Color * a * b (localizată pentru fiecare componentă RGB)
în cazul în care,
Culoare - culoarea sursei de lumină (R, G sau B)
o - atenuare
b - luminozitate
Dar în exemplul nostru am omis parametrul de luminozitate.

5. Verificam ca numerele sa nu iasa din limite si sa le atribuiti in partea de sus.

Cipul este că parametrii de culoare LightMap trebuie să se potrivească cu culoarea vertexului, deoarece altfel puteți vedea diferența dintre cele două metode, diferența de culoare. Și acest lucru poate afecta grav imaginea în direcția "glitchesiness". Deși uneori nu puteți urma asemănarea parametrilor de culoare ai altor iluminări. De exemplu, avem un zid, iar țevile trec prin el, desigur, pot fi văzute. Deci, puteți da țevilor o apariție suplimentară dacă folosiți iluminatul de pe ele și, din moment ce țevile sunt în perete, iluminarea lor nu va afecta culoarea generală a peretelui. Toate acestea la faptul ca iluminarea vertexului si LightMaps nu sunt la fel in rezultatul final, asa ca trebuie sa va asigurati ca diferitele obiecte aflate sub o singura lampa sunt iluminate in acelasi mod, atat LightMap, cat si iluminatul vertexului.







Articole similare

Trimiteți-le prietenilor: