Does unity have a directional light?

Optimering af Lys og Skygger i Unity til Mobilspil

10/07/2022

Rating: 4.97 (15201 votes)
Indholdsfortegnelse

Lysets Magt i Spiludvikling

Lys er en fundamental komponent i moderne spiludvikling. Det er ikke blot et visuelt element; det er et kraftfuldt værktøj, der former spillernes oplevelse. Effektiv belysning kan etablere stemningen i et spil, guide spilleren gennem komplekse miljøer, fremhæve trusler og definere vigtige mål. En veludført lyssætning kan endda få ellers middelmådige 3D-modeller til at se imponerende ud, mens dårlig belysning kan ødelægge selv de mest detaljerede og vellavede aktiver. For spiludviklere, især dem der sigter mod mobilplatforme, er det afgørende at mestre kunsten at bruge lys effektivt for at opnå både æstetisk appel og optimal ydeevne.

How do I enable shadows in Unity?
To use shadows in Unity, go into quality settings and switch the Shadows option to either 'hard' or 'hard and soft shadows'. This allows Unity to cast shadows from objects and ensures that objects can block light.

Denne guide fokuserer specifikt på at opnå bedre ydeevne for belysning i spil til mobile enheder. Valget af belysningsmetoder har en direkte indvirkning på spillets responsivitet og billedhastighed. Ved at anvende lys på en optimeret måde kan du sikre, at dit spil kører så gnidningsfrit som muligt, hvilket er essentielt for en positiv spilleroplevelse på tværs af et bredt spektrum af enheder.

Bemærk venligst, at dele af denne artikel er baseret på materiale, der er ophavsretligt beskyttet af Arm Limited.

Renderingspipelines og Deres Indflydelse på Ydeevne

Unity tilbyder forskellige tilgange til rendering, hver med sine egne styrker og svagheder, især når det kommer til belysning på mobile platforme. At forstå disse forskelle er nøglen til at træffe informerede beslutninger.

Den Ældre Renderingspipeline

Unitys ældre renderingspipeline inkluderer traditionelle renderingsteknikker som:

  • Direkte Rendering (Forward Rendering): I denne tilgang er realtidslys meget ressourcekrævende. For at mindske omkostningerne er det afgørende at reducere antallet af lys, der påvirker hver pixel. Jo færre lyskilder der skal beregnes per pixel, desto bedre er ydeevnen.
  • Deferred Shading: Denne metode kræver GPU-understøttelse og kan håndtere et stort antal realtidslys med høj visuel kvalitet. Dog er Deferred Shading generelt ikke ideel til mobile GPU'er på grund af deres lavere båndbredde. Det er vigtigt at huske, at et mobilspil skal køre problemfrit på så mange enheder som muligt, hvilket gør Deferred Shading til en mindre attraktiv løsning i dette domæne.

Universal Render Pipeline (URP)

Unity har udviklet Universal Render Pipeline (URP) specifikt med henblik på fleksibilitet og ydeevne på tværs af platforme, herunder mobile enheder. Vi anbefaler kraftigt at anvende URP til dine mobilspil, da den er designet til at levere en god balance mellem visuel kvalitet og ydelse.

Lys-Tilstande: Valg af den Rette Tilgang

Måden, hvorpå lys anvendes i din scene, har stor betydning for spillets ydeevne. Unity tilbyder forskellige lys-tilstande, der hver især har unikke ydelseskarakteristika:

  • Baked Lighting (Forudberegnet Belysning): Dette er den mest ydeevnevenlige løsning til statisk belysning. Lys- og skyggedata for objekter, der ikke ændrer sig under kørsel, forudberegnes og gemmes i teksturer kaldet 'lightmaps'. Da al beregning sker under udviklingsprocessen, er der ingen lys- eller skyggeberegninger i realtid, hvilket eliminerer ydeevnepåvirkningen. Dynamiske skygger er dog ikke mulige med denne metode, hvilket kan være en begrænsning for dynamiske objekter eller scener med bevægelse.
  • Mixed Lighting (Blandet Belysning): Denne tilstand er ideel til faste lyskilder, der skal interagere med bevægelige objekter. For eksempel kan en fakkel, der kaster lys og skygge på en spiller, der bevæger sig. Mixed Lighting genererer både direkte og dynamiske skygger. Lys-data kan inkluderes i lightmaps for statiske objekter, mens dynamiske elementer håndteres i realtid. Intensiteten kan ændres under kørsel, men kun den direkte belysning opdateres. Dette er en dyrere løsning end Baked Lighting.
  • Realtime Lighting (Realtidsbelysning): Bruges til dynamiske eller bevægelige lyskilder, som f.eks. en ildkugle, der stiger op fra jorden. Egenskaberne for både lys og skygger kan ændres under kørsel. Realtidslys er ikke inkluderet i lightmaps og er den mest ressourcekrævende lys-tilstand.

For yderligere detaljer kan du konsultere Unitys dokumentation om 'Lighting Pipeline'.

Prioritering af Statisk Belysning

Generelt gælder det, at statisk belysning bør foretrækkes frem for dynamisk belysning, når det er muligt, især i mobilspil.

Dynamisk belysning beregnes og opdateres i hvert frame. Selvom det er ideelt til at skabe dynamiske interaktioner og stemninger, medfører det en betydelig ydeevneomkostning.

Statisk belysning gemmes derimod i lightmaps. Ved at bruge disse teksturer undgår objekter dyre per-vertex eller per-pixel lysberegninger. Renderingomkostningen for lightmaps er markant lavere end for dynamisk belysning. Derfor anbefales forudberegnet belysning som den primære metode til implementering i mobilspil.

Forudberegning af Lightmaps

Processen med at forudberegne lyseffekter kaldes 'lightmap baking'. Lyseffekten gemmes i en separat tekstur, en lightmap, som derefter kan bruges til at forbedre objekternes udseende. Lightmap baking behøver kun at ske én gang for hver iteration af din scene. Hvis du ændrer scenens geometri eller parametrene for forudberegnet belysning, skal du gen-bage lightmaps.

Udover den indledende overhead af lightmap-teksturen genererer den ingen yderligere ydelsesomkostninger under kørsel. Dette er den bedste startmetode til at implementere belysning på en mobil platform.

Forudberegnet lys påvirkes ikke af dynamiske eller bevægelige elementer i din scene. Dette inkluderer 'Baked Global Illumination', som omfatter indirekte lys, der reflekteres fra andre statiske objekter, samt det direkte lys, der rammer objektet.

Trin til Forudberegning af Lys

  1. Konfigurer Lys som Mixed eller Baked: Sæt Lysets 'Mode' til 'Mixed' eller 'Baked'. For mobilspil er Baked Lighting den mest omkostningseffektive løsning.
  2. Gør Objekter Statiske: Marker alle objekter, der påvirkes af forudberegnet belysning, som 'Static'. Dette giver Unity besked om at inkludere dem i lightmap baking-processen. Husk, at hvis 'Batching Static' er aktiveret, kan statiske objekter ikke flyttes eller animeres.
  3. Udfør Lightmap Baking: Lys kan bages i menuen 'Lighting' under Window > Rendering > Lighting Settings. Dataene gemmes i en mappe med samme navn som scenen. Hvis dit projekt indlæser flere scener samtidigt, skal du bage lys for hver enkelt. Ændringer i scenen kræver gen-bagning.

Optimering af Lightmaps

Efter at have defineret, hvilke lys der skal bages, er det vigtigt at optimere de resulterende lightmaps. Størrelsen af disse teksturer afhænger af deres konfiguration under bagning. Da hukommelsesforbruget er kritisk på mobile enheder, skal lightmap-størrelsen overvåges nøje.

Texels: En texel (texture pixel) er en enkelt pixel i en tekstur. Texels lagrer lysinformationen i en lightmap. Mængden af texels per enhed af plads påvirker lyskvaliteten, bagningstiden, lagerpladsen og VRAM-forbruget.

I Lightmap Settings kan parameteren 'Lightmap Resolution' justeres for at styre antallet af texels per enhed. Højere opløsninger resulterer i mere detaljeret belysning, men øger også filstørrelsen og bagningstiden markant.

Does unity support real-time shadows?
This version of Unity is unsupported. Real-time shadows have quite a high rendering The process of drawing graphics to the screen (or to a render texture). By default, the main camera in Unity renders its view to the screen. More info

Anbefaling: Start med en lav Lightmap Resolution (f.eks. mellem 5 og 10) og skaler op eller ned efter behov for din specifikke scene. Du kan visualisere texel-fordelingen ved at vælge 'Baked Lightmap' i Scene View's 'Draw Mode' dropdown.

'Scale In Lightmap': For objekter, der ikke kræver lige så mange texels, kan du justere parameteren Scale In Lightmap i deres Mesh Renderer-komponent. Dette reducerer antallet af texels, objektet bruger i lightmappen, hvilket sparer hukommelse. Undgå at bruge mange texels på objekter, der ikke er synlige for spilleren, eller som har minimal variation i lyset.

Brug af Falsk Belysning

For at reducere processeringsomkostninger kan du simulere visse lyseffekter. Dette kan give indtryk af avanceret belysning, mens mere effektive metoder anvendes.

Falske Skygger

Realtidsskygger er dyre at beregne. Du kan implementere falske skygger for dynamiske objekter uden at bruge dynamiske lyskilder. Dette opretholder lave renderingomkostninger og kan opnå en lignende visuel effekt.

  • Brug en 3D-mesh (f.eks. et plan) placeret under karakteren med en sløret tekstur.
  • Udvikl en brugerdefineret shader til mere avancerede 'blob shadow'-effekter.

Indbagt Lys i Teksturer

Ved at male lys- og skyggeinformation direkte ind i teksturerne, reduceres den nødvendige processering for yderligere lyskilder. Dette sparer også hukommelse under lightmap baking, da færre data er nødvendige.

Light Probes

Dynamiske objekter, der bruger forudberegnet belysning, kan se ud som om de ikke passer ind i scenen. Light Probes løser dette problem. De lagrer forudberegnede lysdata, der kan anvendes til at belyse bevægelige objekter, hvilket hjælper med at integrere dem visuelt med den forudberegnede belysning.

Light Probes er den bedste metode til at belyse objekter, der bevæger sig i scenen, da de udnytter dine forudberegnede lyskilder og sikrer konsistens. Belysning af dynamiske objekter med Light Probes er mindre ressourcekrævende end brug af realtidslys.

Konfiguration af Mesh Renderer

Uanset hvilken lys-tilstand du bruger, er korrekt konfiguration af Mesh Renderer-komponenten essentiel.

  • Deaktiver Unødvendige Funktioner: Indstillinger som 'Cast Shadows' og 'Receive Shadows' tilføjer en renderingomkostning, selvom de ikke er synlige eller relevante for objektet. I eksemplet med karakteren, hvor der bruges 'blob shadows', er 'Cast Shadows' og 'Receive Shadows' deaktiveret.
  • Blend Probes: Denne indstilling kombinerer lysinformation fra de nærmeste Light Probes, når et objekt bevæger sig gennem scenen.

Realtidslys og Lys-Typer

Selvom vi generelt fraråder brug af dynamisk belysning i mobilspil på grund af dens omkostninger, er det vigtigt at kende de forskellige lys-typer, hvis du absolut skal bruge dem:

  • Directional Light (Retningsbestemt Lys): Denne lyskilde har en ensartet retning og ingen dæmpning. Det er den mindst omkostningstunge realtidslys. Typisk behøver du kun én Directional Light per scene. Unity inkluderer automatisk en standard Directional Light, hvis ingen er til stede, når du bruger Direct Rendering.
  • Spot Light (Spotlys): Kaster lys i en kegleform og ignorerer objekter uden for keglen. Dette gør dem mindre ressourcekrævende end Point Lights. For optimal ydeevne, hold keglens vinkel snæver og fokuseret på de ønskede objekter.
  • Point Light (Punktlys): Kaster lys i alle retninger fra et centralt punkt. Dette er meget dyrt i beregningsmæssig henseende, især når skygger er involveret, da det kræver mange skyggeberegninger.

Hvorfor Ser Jeg Ikke Skygger? En Fejlfindingsguide

Problemer med synlige skygger, især i et top-down perspektiv, kan skyldes flere faktorer. Hvis skygger forsvinder, når du zoomer ud eller bevæger kameraet væk fra objekterne, er det sandsynligt et spørgsmål om Shadow Distance-indstillingerne i dine projektindstillinger.

Shadow Distance

Shadow Distance bestemmer, hvor langt væk fra kameraet skygger skal tegnes. Hvis denne værdi er for lav, vil skygger ikke blive vist, når kameraet er længere væk fra objekterne.

Sådan øger du Shadow Distance:

  1. Gå til Edit > Project Settings.
  2. Vælg 'Quality' i panelet til venstre.
  3. Under 'Per-Platform Settings' for din målplatform (f.eks. Standalone eller Android), find sektionen 'Shadows'.
  4. Juster værdien for 'Shadow Distance'. En højere værdi vil øge afstanden, hvor skygger vises. Vær opmærksom på, at en meget høj værdi kan påvirke ydeevnen negativt.

Kameraindstillinger

Selvom dine kameraindstillinger primært styrer synsfeltet og positionen, kan 'Far Clip Plane' også spille en rolle. Hvis din Shadow Distance er sat til en værdi, der er større end Far Clip Plane, vil skyggerne blive afskåret.

Tjek dine kameraindstillinger for at sikre, at 'Far Clip Plane' er sat til en tilstrækkelig høj værdi, der matcher eller overstiger din Shadow Distance.

Andre Overvejelser

  • Lys-indstillinger: Sørg for, at det lys, der kaster skygger, har 'Cast Shadows' aktiveret.
  • Objektindstillinger: Objekter, der skal kaste eller modtage skygger, skal have de relevante indstillinger aktiveret i deres Mesh Renderer-komponent.
  • Shader-kompatibilitet: Nogle shaders understøtter muligvis ikke skygger, eller kræver specifikke indstillinger.

Ved at justere disse indstillinger og prioritere forudberegnet belysning, kan du opnå imponerende visuelle resultater i dine Unity-mobilspil, samtidig med at du sikrer en flydende og responsiv spilleroplevelse.

Hvis du vil læse andre artikler, der ligner Optimering af Lys og Skygger i Unity til Mobilspil, kan du besøge kategorien Teknologi.

Go up