How do I enable realtime global illumination in Unity?

Realtime GI i Unity: Levende Lys i Dine Spil

22/04/2022

Rating: 4.3 (1388 votes)

Belysning er uden tvivl en af de mest afgørende faktorer for at skabe en fordybende og visuelt tiltalende spiloplevelse. Det er ikke kun med til at definere stemningen og atmosfæren i dine scener, men det guider også spillerens øje og fremhæver vigtige elementer. Mens direkte belysning er fundamental, er det den subtile, indirekte belysning – hvordan lyset reflekteres og spreder sig i et miljø – der virkelig giver en scene liv og dybde. Dette fænomen er kendt som Global Illumination (GI), og i Unity har du mulighed for at arbejde med Realtime Global Illumination for at opnå fantastiske, dynamiske lysresultater.

How do I enable realtime global illumination in Unity?
See in Glossary > Lighting) and enable Realtime Global Illumination. To disable the effect of Realtime GI on a specific Light, select the Light GameObject The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more.

Realtime Global Illumination (GI) handler om at simulere, hvordan lys ikke kun rammer en overflade direkte, men også hvordan det hopper af og oplyser andre overflader i scenen. Forestil dig sollys, der skinner ind ad et vindue og oplyser væggen overfor, men også hvordan noget af dette lys reflekteres fra væggen og kaster et blødt skær på loftet eller genstande i rummet. Dette er indirekte belysning i praksis, og når det sker i realtid, kan dine scener reagere dynamisk på ændringer i lyskilder.

Indholdsfortegnelse

Hvad Er Realtime Global Illumination (GI)?

I Unitys kontekst er Realtime Global Illumination en avanceret lysteknik, der gør det muligt for dine Realtime Lights – lyskomponenter, der opdateres hver frame ved kørsel – at bidrage med mere end blot direkte belysning til din scene. Normalt ville et realtidslys kun oplyse de overflader, det direkte rammer. Men med Realtime GI aktiveret begynder disse lys at bidrage med indirekte belysning, hvilket betyder, at lyset 'hopper' rundt i scenen og oplyser områder, der ikke direkte rammes af lyskilden.

Unity anvender middleware kaldet Enlighten fra Geomerics til at facilitere denne Realtime GI. Enlighten er et sofistikeret belysningssystem, der er designet til at håndtere både lightmapping (forudberegnet belysning for statiske objekter) og Realtime Global Illumination. Det simulerer de komplekse lysreflektioner, som vi ser i den virkelige verden, og bringer et hidtil uset niveau af realisme til dine spilmiljøer.

Forskellen mellem Direkte og Indirekte Belysning

For at forstå Realtime GI fuldt ud er det vigtigt at kende forskellen:

  • Direkte belysning: Dette er lys, der kommer direkte fra en lyskilde og rammer en overflade. Tænk på en spotlight, der skinner direkte på en mur. Dette er grundlaget for al belysning.
  • Indirekte belysning: Dette er lys, der er blevet reflekteret fra en eller flere overflader, før det når det punkt, du ser. Det er det lys, der skaber bløde farveblødninger, udfylder skygger og giver scener en følelse af rum og dybde. Uden indirekte belysning ville skygger være kulsorte, og farver ville ikke 'rejse' rundt i miljøet, hvilket resulterer i et fladt og urealistisk udseende.

Realtime GI er særligt kraftfuldt, fordi det gør denne indirekte belysning dynamisk. Hvis du flytter en lyskilde, eller hvis en scene ændrer sig (f.eks. en dør åbnes, og lys strømmer ind), vil den indirekte belysning også opdatere sig i realtid, hvilket skaber en utroligt overbevisende og levende scene.

Hvornår Skal Du Bruge Realtime GI?

Realtime GI er et utroligt effektivt værktøj, men det er vigtigt at bruge det strategisk. Det er bedst egnet til lyskilder, der ændrer sig langsomt og har en høj visuel impact på din scene. Tænk på scenarier som:

  • Solens bevægelse over himlen i et åbent verden-spil, hvor lys og skygger dynamisk skifter i løbet af en dag-nat-cyklus.
  • En langsomt pulserende lyskilde i en lukket korridor, der gradvist belyser rummet og skaber en stemningsfuld atmosfære.
  • Indirekte belysning fra et stort vindue, der reagerer på ændringer i omgivelserne udenfor.

Denne teknologi er ikke beregnet til lys, der ændrer sig hurtigt, eller til specialeffekter som eksplosioner eller lynnedslag. Dette skyldes både ydeevneomkostninger og den indbyggede latenstid, som systemet har for at opdatere de indirekte lysberegninger. For hurtige effekter er traditionelle realtidslys og particlesystemer mere passende.

Målgruppe og Ydeevne

Realtime GI er velegnet til spil, der sigter mod mid-level til high-end pc-systemer og konsoller. Disse platforme har den nødvendige processorkraft og hukommelse til at håndtere de komplekse beregninger. Nogle avancerede mobile enheder kan også være kraftige nok til at udnytte denne funktion, men her skal du være opmærksom på at holde scener små og opløsningen for realtids-lightmaps lav for at spare på systemressourcerne. Ydeevneoptimering er nøglen, når du arbejder med Realtime GI på mobile platforme.

Render Pipeline Kompatibilitet

Før du dykker ned i aktivering af Realtime GI, er det afgørende at vide, hvilken render pipeline dit Unity-projekt bruger, da understøttelsen varierer:

Render PipelineRealtime GI (med Enlighten)
Built-in Render PipelineUnderstøttet
Universal Render Pipeline (URP)Ikke understøttet
High Definition Render Pipeline (HDRP)Ikke understøttet

Dette betyder, at hvis du arbejder med URP eller HDRP, skal du overveje alternative metoder til indirekte belysning, såsom Baked Global Illumination kombineret med Light Probes, eller specifikke løsninger, der er indbygget i disse pipelines (f.eks. Screen Space Global Illumination i HDRP, hvis relevant, selvom det er en anden teknik).

Sådan Aktiverer og Konfigurerer Du Realtime GI

At aktivere Realtime GI i din scene er en ligetil proces:

  1. Åbn Belysningsvinduet (Lighting window) i Unity. Du finder det via menuen: Window > Rendering > Lighting.
  2. I Belysningsvinduet skal du navigere til fanen Scene.
  3. Under afsnittet Realtime Global Illumination skal du markere afkrydsningsfeltet Realtime Global Illumination.

Når dette er aktiveret, vil dine Realtime Lights begynde at bidrage med indirekte belysning til scenen. Du vil straks se en mærkbar forskel i scenens dybde og realisme, da lyset nu reflekteres og spreder sig naturligt.

Deaktivering for Specifikke Lys

Hvis du ønsker at deaktivere effekten af Realtime GI på et specifikt lys, men beholde det aktiveret for resten af scenen, kan du gøre dette:

  1. Vælg det pågældende Light GameObject i din scenehierarki.
  2. I Light-komponenten i Inspektør-vinduet finder du indstillingen Indirect Multiplier.
  3. Sæt værdien for Indirect Multiplier til 0.

Dette betyder, at lyset stadig vil udsende direkte belysning, men det vil ikke længere bidrage med indirekte lys til scenen via Enlighten. Dette kan være nyttigt for lys, der kun skal have direkte effekt, eller for at optimere ydeevnen ved at udelukke mindre vigtige lyskilder fra GI-beregningerne.

Hvordan Fungerer Realtime GI Under Motorhjelmen?

For at forstå, hvorfor Realtime GI har visse ydeevnekarakteristika, er det nyttigt at kende til dens underliggende mekanismer. I Unity Editor opdeler Enlighten scenen i små overfladepletter, ofte kaldet 'patches'. For hver af disse patches bestemmer Enlighten, i hvor høj grad de er synlige for hinanden. Dette er en forudberegningsfase, der sker, mens du arbejder i editoren, og den danner grundlaget for de realtidsberegninger, der udføres ved kørsel.

Ved kørsel (runtime) bruger Enlighten disse forudberegnede synlighedsinformationer til at estimere, hvordan Realtime Lights 'hopper' rundt i scenen. Resultaterne gemmes i et sæt lightmaps, som derefter bruges til at anvende den indirekte belysning på scenen. Da opdatering af disse lightmaps er en beregningsmæssigt intensiv proces, fordeles den over flere frames. Dette betyder, at det tager Enlighten et par frames at sprede ændringer i den indirekte belysning gennem scenen. Dette er den primære årsag til den latens, der kan opleves med Realtime GI, og hvorfor den ikke er ideel til meget hurtigt skiftende lyseffekter.

Lysprober (Light Probes) og Realtime GI

Lysprober (Light Probes) er små punkter i din scene, der indsamler information om belysningen i det omgivende rum. De bruges primært til at belyse dynamiske objekter i din scene (f.eks. spillere eller fjender), som ikke kan bruge lightmaps, da de bevæger sig frit.

Når du aktiverer Realtime GI i en scene, opfører Lysprober sig anderledes end normalt. De begynder at sample belysningen iterativt ved kørsel. Dette betyder, at de reagerer på ændringer i scenens belysning i realtid. Hvis du flytter en lyskilde, der påvirker en Lysprobe, vil objekter, der belyses af den probe, også se deres belysning opdatere sig dynamisk.

Omvendt, når Realtime GI er deaktiveret i en scene, bruger Lysprober kun bagt belysningsdata. De reagerer altså ikke på ændringer i scenens belysning ved kørsel, men viser kun den forudberegnede (baked) belysning.

Skygger og Realtime GI

Skygger er en essentiel del af realistisk belysning. Hvis lyskilden også kaster skygger, vil Unity gengive både dynamiske og statiske GameObjects i lysets skyggekort. Materialeshaderne for både statiske og dynamiske GameObjects sampler derefter dette skyggekort og kaster realtidsskygger på hinanden. Skyggekvalitet kan justeres via indstillingen Shadow Distance (Edit > Project Settings > Quality > Shadows), som kontrollerer den maksimale afstand, hvor skygger begynder at falme ud og forsvinde helt. Dette påvirker både ydeevne og billedkvalitet.

Det er vigtigt at bemærke, at selvom Realtime GI også resulterer i bløde skygger, er de typisk mere grovkornede, end hvad lightmapping kan opnå, medmindre scenen er meget lille. Baked lightmaps kan opnå utroligt detaljerede og bløde skygger, da de er forudberegnede med høj præcision. Realtime GI's fokus er dynamik, ikke nødvendigvis den fineste detalje i skyggerne.

Ydeevneovervejelser og Optimering

Selvom Realtime GI kan forbedre dine scener dramatisk, kommer det med visse ydeevneomkostninger. Det er vigtigt at være opmærksom på disse og vide, hvordan man optimerer systemet:

  • Øget hukommelseskrav: Enlighten bruger et ekstra sæt lightmaps til at gemme de realtids indirekte 'hop', hvilket øger den samlede hukommelsesforbrug i dit spil.
  • Øgede shader-beregninger: Dine materialeshaders skal sample disse yderligere lightmaps og prober, hvilket øger kompleksiteten af shader-beregningerne og dermed GPU-belastningen.

Optimering af Realtime GI

Hvis Realtime GI ikke reagerer hurtigt nok på ændringer i din scenebelysning, eller hvis du oplever ydeevneproblemer, er der flere måder at tackle dette problem på:

  1. Reducer opløsningen af realtids-lightmap: Dette resulterer i færre beregninger ved kørsel, så belysningen konvergerer hurtigere. Du finder denne indstilling i Belysningsvinduet under afsnittet Realtime Global Illumination. En lavere opløsning betyder mindre detaljerede lightmaps, men en markant forbedring i ydeevnen og responstiden.
  2. Forøg CPU Usage-indstillingen for Realtime GI: Denne indstilling findes i vinduet Quality Settings (Edit > Project Settings > Quality). Ved at dedikere mere CPU-tid til Realtime GI kan den indirekte belysning konvergere hurtigere ved kørsel. Afvejningen er, at andre systemer i dit spil (f.eks. fysik, AI, spilmekanik) vil modtage mindre CPU-tid. Om dette er acceptabelt, afhænger af dit specifikke projekt. Dette er en indstilling pr. scene, så du kan dedikere mere eller mindre CPU-tid baseret på kompleksiteten af hver enkelt scene i dit projekt.

Det er altid en balancegang mellem visuel kvalitet og ydeevne. Start med moderate indstillinger og juster gradvist, indtil du finder den optimale balance for dit projekt og dine målgrupper.

Ofte Stillede Spørgsmål (FAQ) om Realtime GI

Q: Kan jeg bruge Realtime GI på mobile enheder?

A: Ja, det er muligt på high-end mobile enheder, men det kræver nøje optimering. Sørg for at holde scener små, reducer realtids-lightmap-opløsningen og overvåg ydeevnen omhyggeligt. Det er ofte mere ressourcekrævende end det er værd på de fleste mobile platforme.

Q: Er Realtime GI kun for statiske objekter?

A: Nej, Realtime GI er designet til at arbejde med Realtime Lights og påvirker, hvordan lyset bouncer mellem alle overflader i scenen, både statiske og dynamiske. Dog vil dynamiske objekter modtage indirekte belysning via Light Probes.

Q: Hvad er Enlighten, og hvorfor bruger Unity det?

A: Enlighten er et tredjeparts middleware-belysningssystem udviklet af Geomerics. Unity har integreret det for at levere avancerede Global Illumination-funktioner, herunder realtids-GI og lightmapping, på en effektiv måde.

Q: Hvorfor reagerer indirekte belysning ikke med det samme, når jeg flytter en lyskilde?

A: Realtime GI-beregningerne er komplekse og fordeles over flere frames for at undgå at fryse spillet. Dette introducerer en lille latenstid, hvilket betyder, at ændringer i den indirekte belysning tager et par frames at sprede sig fuldt ud gennem scenen. Dette er en afvejning for at opnå dynamisk GI.

Q: Er der alternativer til Realtime GI i URP/HDRP?

A: Ja, i URP og HDRP skal du primært stole på Baked Global Illumination for statisk indirekte lys. Du kan også bruge Screen Space Global Illumination (SSGI) i HDRP, som er en skærmpladsbaseret effekt og derfor har andre begrænsninger og fordele. Light Probes er også afgørende for at belyse dynamiske objekter korrekt med baked GI.

Q: Kan jeg blande Realtime GI og Baked GI i samme scene?

A: Ja, absolut! Dette er faktisk en meget almindelig og effektiv strategi. Du kan bage indirekte belysning for statiske objekter, der ikke ændrer sig, og bruge Realtime GI til dynamiske lyskilder (f.eks. solen) for at skabe en hybrid og optimeret belysningsopsætning. Dette giver dig det bedste fra begge verdener: høj kvalitet for statisk lys og dynamik for vigtige realtidslys.

Konklusion

Realtime Global Illumination i Unity er en kraftfuld funktion, der kan løfte dine spil til et nyt niveau af visuel realisme og fordybelse. Ved at forstå, hvordan det fungerer, hvornår det skal bruges, og hvordan man optimerer det, kan du skabe dynamiske og levende scener, der fanger spillernes opmærksomhed. Selvom det kræver en vis ydeevne, er den visuelle forbedring ofte det værd for spil, der sigter mod en højere grafisk kvalitet. Eksperimentér med indstillingerne, og se, hvordan den subtile, men effektfulde, indirekte belysning kan transformere dine virtuelle verdener.

Hvis du vil læse andre artikler, der ligner Realtime GI i Unity: Levende Lys i Dine Spil, kan du besøge kategorien Teknologi.

Go up