Starten met Programmeren van een 3D omgeving in Unreal Engine – Lighting en Polish pass

print
Deze handleiding maakt deel uit van het programmeertraject:


Inhoud


Wat vooraf ging


Inleiding

In de Lighting Pass wordt de belichting geöptimaliseerd. Belichting is belangrijk voor de algehele sfeer van de omgeving.

De Polishing Pass is de eigenlijke afwerking, het finetunen van de omgeving. Dit bevat toevoeging van reflecties, geluid, decals, post processing effecten, het optimaliseren van de programmeercode en de AI (artificiële intelligentie),… De Polishing Pass beslaat zoveel dat het niet in één handleiding kan omvat worden, het beslaat eigenlijk de rest van de opleiding.

Ook Lighting is een studie op zich waar u gerust een hele cursus mee kunt vullen. In deze handleiding geef ik een introductie in Lighting, later, in het tweede jaar van de opleiding gaan we ons verder verdiepen in de belichting van de omgeving.


Lighting Pass

Soorten lichten

Er zijn 4 standaard soorten lichten (een 5de Rect Light is later toegevoegd) die u kunt plaatsen.

U vindt deze onder ModesLights.

We gaan ze één voor één aanhalen, werp al eens een blik op de eigenschappen.

Directional Light

Directional Light – Het licht schijnt in een specifieke richting en komt van een bron “oneindig” ver weg waardoor alle schaduwen parallel zijn. Directional Light wordt meestal gebruikt voor zonlicht.

The Directional Light simulates light that is being emitted from a source that is infinitely far away. This means that all shadows cast by this light will be parallel, making this the ideal choice for simulating sunlight.

Point Light

Point Light – licht straal in alle richtingen. Denk aan een klassieke lamp.

Point Lights work much like a real world light bulb, emitting light in all directions from the light bulb’s tungsten filament. However, for the sake of performance, Point Lights are simplified down emitting light equally in all directions from just a single point in space.

Spot Light

Spot Light – te vergelijken met een Point Light maar het licht straal enkel in één richting in een trechter (cone). Merk op hoe in bovenstaande afbeeldingen Spot Lights gebruikt worden om binnenvallend licht te simuleren.

A Spot Light emits light from a single point in a cone shape.

Rect Light

Rect Light – het recent toegevoegd Rect Light maakt het mogelijke een rechthoekig licht uit te stralen (denk aan een TV scherm). Dit werkt enkel goed in combinatie met RTX.

The Rect Light emits light into the scene from a rectangular plane with a defined width and height. You can use them to simulate any kind of light sources that have rectangular areas, such as televisions or monitor screens, overhead lighting fixtures, or wall sconces.

Sky Light

Sky Light – het “hemellicht” meestal bepaald door een Cubemap of geCaptured uit het level zelf via SLS Captured Scene.

The Sky Light captures the distant parts of your level and applies that to the scene as a light.

Mobility

Er zijn 3 soorten Mobility zowel voor actors (objecten geplaatst in een level) als voor lichten.

  • Static (Baking)
  • Movable (Real-Time)
  • Stationary (een combinatie van Static en Movable)

Let op, een level zal vaak combinaties van deze drie soorten bevatten, tenzij het de bedoeling is, zoals in het populaire spel Fortnite, waar alles vernietigbaar en dus Movable is, zullen de 3 soorten vaak gecombineerd worden met het oog op kwaliteit maar ook met het oog op performance.

Static

Static – de belichting, schaduwen worden vooraf gerenderd en opgeslagen in Lightmaps en kunnen nadien, tijdens het spelen, niet meer veranderen. Dit wordt baking genoemd, het licht wordt vooraf gebakken en is nadien onveranderbaar.

Dit heeft tot gevolg dat het vooraf renderen langer zal duren maar de belichting tijdens het spelen minder belastend is voor de prestaties, een betere performance dus.

De kwaliteit van de belichting is hoog maar wanneer u een object met een Static belichting toch zou bewegen, bv. als u het verplaatst in de editor, zal u merken dat de schaduw achter blijft en daar blijft tot u het licht opnieuw Build.

Static Lights worden vooral gebruikt op mobiele toestellen, die niet de real time renderkracht hebben van een pc, of zijn ook ideaal voor het ontwerpen van statische omgevingen.

De Sky Light is standaard Static.

Movable

Movable – de belichting is volledig dynamisch tijdens het spelen en wordt dus niet vooraf gerenderd.

Als een object zich verplaatst zal dus ook zijn schaduw mee verplaatsen.

Zoals u wellicht al vermoed heeft dit een hogere impact op de performance van het spel dan Static lighting. Om deze impact op te vangen is de kwaliteit van een Movable Light lager, zo worden er geen weerkaatsingen (Bouncing/Indirect Lighting) berekend.

In spelen zoals Fortnite, waarin alles vernietigd kan worden, kunt u enkel werken met Movable Lights (en Actors). U zou toch niet willen dat de schaduw van de muur te zien is nadat deze ingestort is?

Beweegbare lichten, bv. de lichten van een auto moeten altijd Movable zijn. Lampen die u aan en uit doet zijn het best ook Movable.

Geen enkel licht is standaard Movable.

Stationary

Stationary – is bedoeld voor lichten die zelf niet bewegen (statisch zoals bv. spots) maar verder wel dynamisch (movable) zijn. Het Stationary Light kan zelf niet bewegen, is statisch, maar andere eigenschappen zoals intensiteit en lichtkleur kunnen wel veranderen (wat bij een Static Light niet kan). Dit levert u het beste van beide werelden op.

Dat Stationary, als gulden middenweg, vaak een goede keuze is bewijst het feit dat alle lichten, behalve Sky Light, standaard Stationary zijn.

Schaduw

Een licht genereert schaduwen. Het zijn de schaduwen die belastend zijn voor de performantie.

Schaduwen komen in verschillende types, geoptimaliseerd voor een typische manier van rendering. Een gedetailleerde schaduw van dichtbij vraagt een andere rendering, een ander type schaduw, dan de schaduw van een gebouw in de verte.

Net zoals bij de lichten wordt een onderscheid gemaakt tussen Static, gegenereerd door een Static Light, en Dynamic, gegenereerd door een Movable/Dynamic Light.

Static Light en Schaduwen

Schaduwen worden gebakken en kan realistische zachte schaduwen leveren.

Onderstaande afbeelding toont een vaas belicht door een Static Light. 

Indien u de vaas verplaatst ziet u dat de schaduw achterblijft en dat u het licht moet Rebuilden.

Als u een voorwerp zou verplaatsen blijft de schaduw achter. U zal het level opnieuw moeten Builden, de lichten en schaduwen opnieuw “bakken” om deze  achtergebleven schaduw te verwijderen uit het level.

Lighting Quality

U kunt de Lighting Quality voor Static en Stationary Lights bepalen onder Build.

Production levert de beste kwaliteit maar ook een langere, soms wel heel lange (een uur of langer) Build tijd.

Gebruik Production dus enkel voor de finale rendering of wanneer u veel tijd hebt om de Build te laten lopen. Tijdens het werken gebruik ik meestal Medium.

Attenuation Radius

De Attenuation Radius is de straal waarin het licht invloed heeft. Hoe groter deze Attenuation Radius hoe groter het gebied waarin het licht invloed heeft en hoe complexer de Lightmap wat de baking/building negatief beïnvloedt.

De blauwe cirkel duidt de Attenuation Radius aan, de gele cirkel de Source Radius (de straal van de lichtbron zelf). Een grotere Source Radius levert een zachtere schaduw op.

De eigenschap Attenuation Radius bepaalt:

  • het bereik van het licht.
  • welke objecten beïnvloed worden door het licht.

Weet dat een grote Attenuation Radius voor problemen kan zorgen bij Static en Stationary Lights en ook een negatief effect heeft op de performance (bij dynamic lighting) of de baking/building tijd bij Static en Stationary Lights.

Hierboven ziet u de invloed van een Attenuation Radius van respectievelijk 200, 400 en 800.

Een nadeel van Stationary Lights is dat er slechts een beperkt aantal (3) mogen overlappen. Is er meer overlapping dan valt dat specifieke licht terug op Movable. Dit moet u vermijden. Pas dus indien nodig de Attenuation Radius aan om overlapping te voorkomen.

Onderstaande video is een bijdrage van de cursist Thomas Van Sande.

Onderstaande video is een korte samenvatting.


Lighting – Blueprint Classes

Licht maakt vaak onderdeel uit van een Blueprint Class in combinatie met andere objecten.

Als voorbeeld maak ik een eenvoudige lichtschakelaar aan die meerdere lampen bedient.

  • Maak een nieuw ThirdPerson project aan met StarterContent.
  • Ik ga gebruik maken van de Blueprint_WallSconce die u vindt in de StarterContent. De Blueprint_WallSconce bevat reeds een PointLight2 die we gaan aansturen vanuit onze lichtschakelaar.

We maken een nieuwe Blueprint Class aan voor de Lichtschakelaar.

  • In de Content Browser, klik op Add NewBlueprint Class (of klik met de rechtermuisknop in de folder waar u uw Blueprints plaatst en klik op Blueprint Class).

  • Kies de Parent Class Actor.

  • Geef de gewenste naam, bv. Lichtschakelaar, en dubbelklik om te openen.
  • Voeg een Static Mesh (Schakelaar, een eenvoudige Cube)), een Box Collision (voor de Overlap Events) en een TekstRender toe.

De lichtschakelaar moet meerdere, en weten niet precies hoeveel, lichten, van het type Blueprint_WallSconce kunnen aandoen. We hebben dus een Array, een lijst, van het type Blueprint_WallSconce nodig.

  • Voeg een Array, met bv. de naam Lampen, toe van het type Blueprint_WallSconce. Maak deze Array Instance Editable zodat we gemakkelijk elementen kunnen toevoegen vanuit de Level Editor.

  • Bij het starten moet de tekst onzichtbaar zijn en de lampen uit. Om zeker te zijn dat ik er geen vergeet, en voor het gemak, programmeer ik dit in de Construction Script van de Lichtschakelaar. Doorloop de Array (For Each Loop) van alle Lampen en zet voor iedere Lamp de Intensity op 0.

  • De Overlap Events maken de TextRender (on)zichtbaar en Enabled of Disabled de Input.

  • Bij het drukken op de F-toets schakelen alle lichten aan of uit. Gebruik een Flip Flop voor de ene keer aan en de andere keer uit. Doorloop de Array (For Each Loop) van alle Lampen en zet voor iedere Lamp de Intensity.

  • De Blueprint Lichtschakelaar is klaar, Compile en Save.
  • Voeg tenslotte de Lichtschakelaar(s) en de nodige Blueprint_WallSconces toe aan het Level. Vergeet niet de Blueprint_WallSconces toe te kennen aan de gewenste lichtschakelaar.

  • Druk op Play, het zou moeten werken.

In bovenstaand voorbeeld heb ik een te hoge, onrealistische waarde gegeven, enkel opdat het gebruik meteen zou opvallen. Een meer realistische waarde voor een Point Light ligt rond de 2000 tot 4000.

Videotutorials

Onderstaande videotutorials bevatten een aantal zaken die nog niet in de les besproken zijn (zoals Materials en Particles). Maar in de laatste handleiding van de module Eenvoudige functionaliteiten mag het al eens iets meer zijn, om u warm te maken voor het vervolg.


Project Level Creation – Lighting and polishing

De Lighting pass en Polishing pass zijn de twee laatste fasen in het ontwerpen van een level. Hoewel deze twee fasen hier in slechts één video worden samengenomen zijn ze zeker niet minder belangrijk en worden ze ook vaak door specialisten uitgevoerd. Maar wij houden het nog eenvoudig.

Adding props and lighting

Zo, dit was het laatste deel in deze reeks van tutorials die de nadruk legde op het bouwen van een level.


Masterclasses

Als herhaling, en/of overzicht, raad ik aan onderstaande video te bekijken.


Behandelde Basiscompetenties uit de module ICT Programmeren – Specifieke ontwikkelomgeving: eenvoudige functionaliteiten

  • IC BC236 – kan eenvoudige wijzigingen aan een programma aanbrengen
  • IC BC241 – kan een programma in een specifieke ontwikkelomgeving maken
  • IC BC247 – kan de bouwstenen van een specifieke ontwikkelomgeving gebruiken
  • IC BC249 – kan de instellingen van een specifieke ontwikkelomgeving wijzigen

Geef een reactie

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

  • Abonneer je op deze website d.m.v. e-mail

    Voer je e-mailadres in om je in te schrijven op deze website en e-mailmeldingen te ontvangen van nieuwe berichten.