Cum ne-am împiedicat să ne frămîntăm de ogre și am început să ne jucăm

Cum ne-am împiedicat să ne frămîntăm de ogre și am început să ne jucăm

În planul tehnologic, după programul de lucru, ne-am concentrat puternic pe jocuri precum Torchlight. Dar sufletul a cerut mai mult, de fapt, odată cu dezvoltarea părții grafice a motorului, a fost o căutare artistică.







Cum ne-am împiedicat să ne frămîntăm de ogre și am început să ne jucăm

Cum ne-am împiedicat să ne frămîntăm de ogre și am început să ne jucăm

Duhul lui Cruzis, cu sutele de becuri, nu ma lăsat să dorm noaptea. Sa hotărât să se pună la dispoziție amortizarea (amânarea sau întârzierea luminii). Atunci când randătorul este întârziat, se formează un set de imagini "finale" fără calcularea umbrelor: imaginea de culoare, imaginea de profunzime și imaginea normalelor. Cunoscând poziția surselor de lumină, adâncimea pixelilor și cea normală, puteți calcula umbrirea.
Comparativ cu redarea în avans, avem câteva chifle:
1) Creșteți FPS datorită faptului că geometria este redată doar o singură dată
2) Abilitatea de a lucra cu mai multe surse de lumină: adăugarea unei noi surse de lumină are un efect redus asupra performanței.
3) Accelerarea anumitor tipuri de postprocesare, implementarea mai eficientă a particulelor moi și posibilitatea de a adăuga o reflecție a ecranului de procesare. Particulele moi, precum și efectele post-procesare (DOF, SSR, SSAO) necesită o hartă de adâncime și normală. Redarea directă nu dă cărțile acestea și trebuie să fie redate separat. Cu iluminare amânată, aceste cărți sunt servite pe un platou de argint.

Am luat în considerare trei opțiuni pentru implementarea iluminării întârziate:

Opțiunea A:

Cum ne-am împiedicat să ne frămîntăm de ogre și am început să ne jucăm

Calcularea iluminatului este împărțită în două etape:
1. În prima etapă este trasată toată geometria opacă în 4 texturi. (difuză, speculară, lucioasă, normală, harta adâncimii și hartă strălucire)
-difuzia, specularitatea, lucioasa sunt luate direct din texturile de geometrie,
-Normalele sunt extrase dintr-o hartă a normalelor care este cuprinsă de geometrie și transformată în coordonate ale camerei.
-Harta de strălucire este obținută prin adăugarea de hărți de auto-luminanță, iluminare RIM, iluminare difuză ambientală + iluminare slabă din partea camerei.
2. Utilizarea hărții normale, adâncimea, difuză și glossiness specular calculate difuze și specular iluminarea fiecărui punct pentru fiecare sursă de lumină, iar valoarea incrementală este adăugată harta emisiilor. În același pas, fiecare punct al ecranului este lovit de hărți umbrite.







Aceasta este o versiune standard a iluminării întârziate, implementată în majoritatea jocurilor.

Opțiunea B:

Cum ne-am împiedicat să ne frămîntăm de ogre și am început să ne jucăm

Calcularea iluminatului este împărțită în 3 etape:
1. În primul rând, toată geometria opacă este redată în 1 textură (face hărți ale normalelor, profunzimea și lucioasă)
2. Hărțile normalelor, profunzimea și luciu conferă două hărți: iluminare difuză și speculară pentru fiecare sursă de lumină.
3. În a treia etapă imaginea finală pronunțată: toate geometria opac este tras din nou, dar cu difuzarea și a reflexiilor și iluminarea fiecărui punct se calculează prin înmulțirea iluminarea difuză asupra lucrărilor harta difuze + iluminat speculară pe hartă speculară jantei de iluminat + + + lumina carte de auto-iluminare din aparat de fotografiat.

Dezavantajul acestei metode este unul până la două ori, întreaga geometrie este redată. Cu toate acestea, pentru a doua oară puteți reda pe z-buffer-ul finalizat, pregătit în prima etapă.

Opțiunea B:

Cum ne-am împiedicat să ne frămîntăm de ogre și am început să ne jucăm

Calcularea iluminatului este împărțită în 3 etape:
1. Prima etapă este desenată în întreaga textură geometrie opacă 4 (difuze, specular, luciului, normală, harta adâncimea luminiscență și harta (ca suma adaosului de auto-iluminare a cartelei, iluminare RIM, iluminare ambientală difuză + iluminare slabă din cameră)).
2. Hărțile normalelor, profunzimea și luciu conferă două hărți: iluminare difuză și speculară pentru fiecare sursă de lumină.
3. În cea de-a treia etapă, imaginea finală este redată: iluminarea fiecărui punct este calculată prin înmulțirea iluminării difuze cu ajutorul unei hărți difuze + produse de iluminare speculară pe o hartă speculară a hărții auto-luminoase ...

Această opțiune este un amestec de primele două opțiuni. În comparație cu versiunea A, obținem o creștere a vitezei datorită particularității variantei B: în loc de patru mostre din textură există doar o singură.

Acum am implementat prima versiune a întâlnirii amânate. Toate canalele care sunt utilizate pentru a desena imaginea finală pot fi trimise în modul de depanare.

Cum ne-am împiedicat să ne frămîntăm de ogre și am început să ne jucăm

După redarea imaginii finale, se face postprocesarea: aici creăm efectul adâncimii câmpului și facem corectarea culorii. În aceeași etapă, se trag reflecții cu ajutorul tehnologiei SSR.

SSR (Screen Space reflecție) - acesta alogoritm crea reflecții realiste în scenă folosind datele care au fost deja redate pe ecran. Pe scurt, de la camera pornește într-fascicul să se intersecteze cu scena. Folosind normalul la punctul de intersecție, este luată în considerare reflectarea. Prin această reflecție a hărții adâncimii ray tracing are loc până înainte de a intra în orice geometrie, ca rezultat punct rezultate luminozitate luate și multiplicate cu specular puncte de reflexie și înregistrate în punctul de luminozitate reflectorizant.
Acum sunt implementați doi algoritmi:
1) Urmărirea are loc în coordonatele camerei - încet, dar dând imaginea corectă.
2) Urmărirea are loc în coordonatele textură - rapidă, dar oferă o eroare la unghiuri mici.

Cum ne-am împiedicat să ne frămîntăm de ogre și am început să ne jucăm

Cum ne-am împiedicat să ne frămîntăm de ogre și am început să ne jucăm

Folosim motorul de joc și de rețea. Motorul grafic - Ogre3D, fizic - Bullet. Scripting: Lua, C # (Mono). În timpul dezvoltării, Ogre3D a trebuit să fie puternic dopat și a depanat pachetul său cu Blender ... Se planifică să se contacteze dezvoltatorii din Ogra și să se propună includerea modificărilor lor în următoarele ansambluri Ogra.

În prezent, adică acum, este cea de-a doua campanie pentru a strânge fonduri la kickstart.

Limbi de programare utilizate: C ++, PHP, Lua, C #, Python, Java, Groovy, Cg, GLSL, HLSL.







Articole similare

Trimiteți-le prietenilor: