Efficiënt creëren van AAA omgevingen in UE4
Download en Installeer de benodigde software
Maak een Unreal project aan.
Quixel
Wat is Quixel?
Quixel is een extensive online library (opgekocht door Unreal), met photogrammetry en PBR geoptimaliseerde game assets te gebruiken voor film & game. Zowel de internationale games industrie, als de internationale filmindustrie maakt steeds vaker gebruik van fotoscan 3D materiaal (Photogrammetry) om snel en effectief realistische omgevingen te bouwen.��Quixel is een bedrijf dat meerdere ploegen de wereld doorstuurt om deze library van interessante props en materialen steeds meer uit te breiden. Mocht je zelf geïnteresseerd zijn om je eigen Photogrammetry props te ontwikkelen, verdiep je dan in de technologie Photogrammetry
Quixel Bridge installeren en koppelen aan Unreal
Download en installeer Quixel Bridge. Log na het downloaden van Quixel Bridge in met je Epic Games Account. Alleen dan krijg je toegang tot alle quixel assets (gratis) voor implementatie in Unreal.
Quixel Bridge installeren en koppelen aan Unreal
Bij het openen van Bridge zie je dat je op thematisch gebied allerlei assets kan vinden. Deze kun je downloaden en importeren in Unreal.
Quixel Bridge installeren en koppelen aan Unreal
Vul de export settings op de juiste manier in nadat je in Unreal een project hebt aangemaakt. zorg dat alle paths kloppen. Default Project -> je project root, Plugin location Engine/Plugins van je geïnstalleerde Unreal folder. Dan installeer je de plugin. (unreal moet afgesloten zijn)
Quixel Assets Importeren
In de download settings bij een asset (cog) vind je alle instellingen die je vertellen wat je precies download/exporteert naar unreal (inclusief LODs, texture files etc.) Let er bv bij exporteren op dat je slim kiest welke texture resolutie hij mee moet nemen. (4k of 2k)
Quixel Assets Importeren
Als de plugin geïnstalleerd is en je opent vervolgens unreal, krijg je er een groen megascan icoontje bij. Klik deze aan en zorg dat enable Displacement op true staat. (anders pakt hij geen displacement maps mee bij ‘t importeren)
Quixel Assets Importeren
Als je de asset download (door op downloaden te klikken), kun je na downloaden de asset exporteren door op export te klikken. (makkelijk dus…) zorg dat Unreal open staat, dan importeert Bridge de assets automatisch na export in Unreal (in de juiste folder)
Quixel Materials
De assets worden automatisch in een folder gestopt, daarbij zit ook een bijbehorende Unreal material-instance die gebruik maakt van alle textures (inclusief displacement map)
Quixel Default (Parent) Materials
Elke Quixel Material-instance haalt data uit een bijbehorende Parent-Material. Dat is belangrijke informatie, want alle assets die op elkaar lijken maken gebruik van dezelfde (default) material (te vinden in MSPresets). Deze defaultmaterial kun je aanpassen, waardoor alle Quixel Assets die je importeert dezelfde settings (die je aanpast) overneemt.
Quixel Default (Parent) Materials
En alleen van deze parent materials kun je de blueprints aanpassen (door erop te dubbelklikken), aangezien de meegeleverde materials van assets, material-instances zijn van de parent material.
Quixel Default (Parent) Materials
Quixel Parent Materials zijn hoofdzakelijk opgebouwd uit “Material Functions”. Dat wil zeggen, functies die ook elders opgeslagen zijn, en accessible zijn (of aanpasbaar), maar daardoor een overzichtelijker blueprint creëren.
Quixel Default (Parent) Materials
Door in de material te dubbelklikken op zo’n function (bv tiling) kom je in de material function settings terecht. Door op het vergrootglasje te durkken browse je automatisch naar waar deze functie in de folder is opgeslagen. Alle assets die gebruik maken van deze parent-material, maken dus ook gebruik van die material function.
Environment Bouwen in Unreal
Scene-Breakdown - Hoe krijg je dit resultaat?
Een combinatie van meerdere factoren
Landscape (Sculpting using Heightmaps) - Het is vrij makkelijk om een landschap te maken in Unreal. Aan te raden is om dit met heightmaps te doen en daarmee snel en efficiënt je landschap mee op te bouwen.
Landscapes
Maak een default project aan
Landscapes
Verwijder het standaard floor-object.
Landscapes
Via modes->landscape kun je een landscape creëren. Hij wordt aangemaakt wanneer je op create drukt.
Landscapes
Door je directional light (light source) op “Move” te zetten ipv “Static”, zorg je dat je global illumination niet meer hoeft te worden “ gebakken” en is hij “ realtime “. Daardoor verdwijnen ook meteen de rare lijnen op je landscape (baked shadows)
Landscapes
Maak een Heightmap folder aan, download wat goede Heightmaps (van bv google) en zet je brush op alpha (ipv circle). Een stuk terrein (zeker als het natuur is), is nooit helemaal vlak, dus begin altijd door wat reliëf te sculpten door de brush op auto-rotate te zetten en subtiele relief-verschillen ten painten. shift ingedrukt houden, haalt het terrein naar beneden. varieer hiermee.
Landscapes
Zorg dat de player op de juiste plek staat, en kijk of je tevreden bent met je landschap
Landscapes
Zet de strength van je brush op 10 /20 (speel hiermee), kies een juiste heightmap om in 1 klik (dus niet pushen) bergen te plaatsen. Door auto-rotate aan te zetten en te variëren met je brush-size en strength kun je een gevarieerd landschap maken.
Landscapes
Zorg ervoor dat je een mooi gevarieerd landschap maakt, waar nog wel ruimte is voor de speler om te lopen, of voor jou als developer/artist om dingen te plaatsen.
Custom Shader (Quixel Displacement) - Hoewel Quixel Materials geïmporteerd worden met displacement maps (als je die hebt aangevinkt), betekent dat niet persé dat het “ out-of-the-box” meteen werkt. Daarnaast moet je ervoor zorgen dat niet de gehele scene gaat “tessellaten”, voor het behoud van performance.
Displacement & Tessellation
Om te zien wat displacement-maps doen op quixel material, kun je even een ground-material importeren vanuit quixel-bridge. Wanneer je deze sleept in de landscape material (onder de opties van je landscape). Krijg je iig een beeld van wat een quixel-material nu doet. Wat wij effectief hier in slepen is echter een quixel-material instance (van de parent-material die elders staat).
Displacement & Tesselation
De quixel material-instance heeft (omdat de parent-material dat ook heeft) de displacement settings standaard uitstaan. wanneer je deze aanvinkt in de material-instance zie je dat de displacement gewoon werkt.
Displacement & Tesselation
Door de viewport op “Brush Wireframe” te zetten, kun je zien wat de radius van de tesselation van je displacement-map is. Spelen met Distance Offset en Distance Fade zorgt voor het aanpassen van de radius van tessellation tov jou als speler/gebruiker. Dit is kennis die je kan toepassen op de material-instance, wanneer je deze material zou gebruiken op heel je Landscape. (maar dat doen we niet)
Custom Shader (Material Blend) - Via de custom shader kun je materialen met elkaar combineren. De PBR opties voor deze materialen zijn: Colormap, Roughness Map, Normal Map en Displacement Map
Quixel Material Blending
Om een material te maken die de verschillende surfaces van quixel kan combineren moeten we een eigen material maken die dit kan. dit door in de juiste folder (surfaces bv) een material aan te maken. Deze heb ik genoemd: Material_Landscape_autoblend_paintable
Quixel Material Blending
koppel een BreakmaterialAttributes aan de Material output
Quixel Material Blending
Koppel een Layer Blend node aan de BreakmaterialAttributes. Je kunt in de settings aangeven hoeveel lagen je wil gebruiken en hoe ze heten. (verstandig is om de namen open te laten (dus niet als bovenstaand voorbeeld), maar bv laag A, B, C en/of D te noemen.
Quixel Material Blending
Wat we nu willen is van de parent-material van de quixel ground materials (MS_DefaultMaterial_Displacement) een extra material-functie maken per laag, zonder dat we daarvoor deze DefaultMaterial hoeven aan te passen. (zie quixel introductie hoe je terecht komt bij parent-materials, en wat het precies inhoudt.)
Quixel Material Blending
Maak in een logische folder een material function aan. Noem deze LayerA
Quixel Material Blending
Kopieer de nodes van de parent-material. en plak deze in je aangemaakte material function
Quixel Material Blending
Koppel de lijn aan de output van je function.
Quixel Material Blending
Om ervoor te zorgen dat je de attributen ook kan gebruiken als er straks meerdere lagen zijn, moeten we de naam van de nodes binnen de function aanpassen mbt welke laag we gebruiken. (LayerA in dit geval). Dus LayerA_Albedo ipv Albedo, LayerA_Metalness ipv Metalness etc.
Quixel Material Blending
Om het echt netjes af te ronden rename je ook de group naar de juiste benaming.
Quixel Material Blending
Apply de function en sleep de material function in de Material_Landscape material en koppel hem aan je layer Blend node.
Quixel Material Blending
Doe deze stappen voor alle lagen die je wil aanmaken.
Quixel Material Blending
Maak van je Material een material instance. Alleen instances kun je qua waardes aanpassen en toepassen op je Landscape
Quixel Material Blending
In je Material Instance kun je de groepen zien die je hebt aangemaakt. Daarin kun je je Quixel textures importeren. (Deze vind je in de map met je gedownloade grond-material)
Quixel Material Blending
In de material Instance kun je (zoals hierboven) op dezelfde manier ervoor zorgen dat je je tiling per laag aanpasbaar maakt.
Quixel Material Blending
Je kunt de tiling nodes kopiëren (zoeken via het loepje als je in de juiste function zit) en ook renamen naar de juiste lagen zoals hierboven
Quixel Material Blending
Ook hier binnen deze material functions, pakken we de tiling/offset en renamen we deze naar _A. Ook passen we de groep aan van Global naar Global_LayerA.
Quixel Material Blending
Ook dit doe je voor de B, C en D laag.
Quixel Material Blending
Deze material functions moet je dan weer binnen de Layer_A/B/C/D functions vervangen en de lijntjes opnieuw koppelen met de rest.
Quixel Material Blending
Op die manier kun je per laag ook de tiling wijzigen en aanpassen.
Quixel Material Blending
Kopieer de Displacement map functies (zoals de tiling functies) en hernaam en implementeer/vervang ze voor alle lagen zoals hiervoor beschreven in je layer_A/B/C/D material functie.
Quixel Material Blending
wanneer alle slots ook de juiste textures hebben kun je de material Instance vervolgens (als alles klopt) in de Landscape slot slepen.
Quixel Material Blending
Echter zal het resultaat nu nog zwart zijn, omdat de blend node nog niet de informatie heeft, welke material, waar moet.
Quixel Material Blending
Dit kunnen we aangeven in Landscape mode onder de paint modus
Quixel Material Blending
Klik op het plusje en kies Weight Blended Layer (normal). Add deze in een logische folder. Dit is de namelijk de informatie die de materialblend bij elkaar houdt.
Quixel Material Blending
Zodra de informatie is aangemaakt zet de Blend node de data over op je landscape.
Quixel Material Blending
Wanneer je alle lagen hebt toegepast kun je een material klikken en gebruiken als material paintbrush op je Landscape!!
Custom Shader (Automatic Material Blend) - Om het ontwikkelproces van een omgeving te versnellen kun je in Unreal een Automatic Material Blend gebruiken. Deze kan automatisch 2 PBR materials je landschap laten plaatsen aan de hand van slopestijlheid.
Adding Automatic Blending
Om een Autogenerate te combineren met de paintability van je terrain moeten we een material function maken die als extra laag blend met de andere layers. (hierboven theoretisch weergegeven)
Adding Automatic Blending
We maken een nieuwe material function aan voor de auto-generate functie.
Adding Automatic Blending
Maak een BlendMaterialAttributes node aan.
Adding Automatic Blending
Sleep de functions van de 2 lagen die je wil gebruiken om te autoblenden en koppel deze aan je blendmaterialattributes node. (For some strange reason is de B ingang de toplaag, dus bv gras…)
Adding Automatic Blending
Maak een WorldAlignedBlend node aan en koppel de explicit normal aan de alpha van je BlendMaterial Attributes. Deze node zorgt ervoor dat hij aan de hand van blend assen de 2 lagen kan laten interpoleren.
Adding Automatic Blending
Maak 2x een scalarparameter aan
Adding Automatic Blending
Deze scalarparameters noem je “Blend_Sharpness” en koppel je aan de Blend Sharpness input. de default-waarde daarvan zet je op 26. (dit kun je zelf later aanpassen) en de andere noem je “Blend_Height” en koppel je aan de Blend bias input. de default-waarde daarvan zet je op 10.5 (ook deze kun je aanpassen)
Adding Automatic Blending
Maak een BreakMaterialAttributes node aan en maak een SetMaterialAttributes node aan. Koppel de BlendMaterialAttributes node aan de BreakMaterialAttributes node. Hierna moeten we deze attributes gaan koppelen naar de juiste parameters die de functie moet meegeven aan de MasterMaterial: “Material_Landscape_autoblend_paintable”
Adding Automatic Blending
Via de SetMaterialAttributes node settings kun je extra elementen toevoegen. En via het uitklap menu kun je aangeven welke output deze moeten hebben.
Adding Automatic Blending
Maak in de SetMaterialAttributes node een Base Color, Specular, Roughness en Normal input aan. Koppel deze met de BreakMaterialAgttributes Node. Maak ook nog een World Displacement en Tesselation Multiplier aan. Deze koppelen we nu niet, maar hebben we nodig om displacement werkend te krijgen.�Koppel uiteindelijk naar de output van de functie.
Adding Automatic Blending
In principe zou de autoblend functie nu moeten werken en als je in jouw “Material_Landscape_autoblend_paintable” main material kun je bij je Layer Blend node een nieuwe slot aanmaakt (plusje) en deze autogenerate noemt en bovenaan zet...
Adding Automatic Blending
… kun je je autoblend material daaraan koppelen en zou alles moeten werken! Maar… helaas doet de displacement voor de auto-generate layer dan nog niks. Hiervoor moeten we aparte stappen zetten, omdat de displacement een andere output gebruikt van de “WorldAlignBlend” node.
Adding Automatic Blending
We kopieren de BreakMaterialAttributes Node 2x en plaatsen deze onder elkaar.
Adding Automatic Blending
We koppelen LayerA aan de 2e node (zie hierboven) en koppelen daarna LayerD aan de 3e node.
Adding Automatic Blending
Maak vervolgens 2 lerp nodes aan.
Adding Automatic Blending
We koppelen van beiden breakattribute nodes de tesselationmultiplier output aan de A en B input van 1 vd Lerp nodes. (zoals hierboven).
Adding Automatic Blending
Vervolgens koppelen we de WorldDisplacement output van beiden nodes aan de 2e Lerp node (zoals hierboven).
Adding Automatic Blending
Kopieer de Scalarparameters en de WorldAlignBlend nodes zoals boven en plaats ze onder de Lerp nodes
Adding Automatic Blending
Deze scalarparameters geven we echter de _displacement nog achter de namen.
Adding Automatic Blending
De output van deze worldalignedblend node is in dit geval niet de explicit normal, maar de vertex normal (aangezien we mesh willen deformen) en koppelen we aan de alpha van beide lerps.
Adding Automatic Blending
Als laatste koppel je de output van de lerps in de juiste input van de SetMaterialAttributes node. Sla je werk op met control S en Unreal zal de shader compileren.
Adding Automatic Blending
De final output
Adding Automatic Blending
uiteraard moet de nieuwe laag die gekoppeld is aan je material nog de informatie krijgen zoals de lagen A t/m D ook kregen.
Adding Automatic Blending
Het resultaat is een omgeving die automatisch blend tussen je A en D laag.
Adding Automatic Blending
Waar je ook nog eens andere lagen overheen kan painten om het echt te customizen.
Quixel Material (Parent settings) - Belangrijk is om de standaard settings van de parent material voor Quixel assets goed te zetten mbt de lighting settings die jij zelf hebt aangemaakt. vooral de diffuse kleur, specularity settings, texture resoluties en bij planten de scatteringkleur kunnen een heleboel werk schelen om alle assets los nog eens aan te moeten passen.
Settings aanpassen
Met de material die we nu hebben kunnen we ook een aantal stappen nemen om de settings aan te passen zodat je resultaat mooier wordt.
Settings aanpassen
Bijvoorbeeld de base-specularity staat overall op 0.5. Daardoor krijg je een hele lelijke witte sheen eroverheen. Door de specularity-base op 0 te zetten maar de speculairty from albedo op 0.5, pakt hij de red-channel mbt je specularity, waardoor alles wat in je diffuse donker is, minder specular heeft, en alles wat lichter is, meer.
Settings aanpassen
Wat een natuurlijker resultaat geeft.
Settings aanpassen
Tweak bijvoorbeeld ook de tiling grootte (deze heb je aangemaakt in je material en kan je voor elke material aanpassen).
Settings aanpassen
Alsmede bv de algemene albedo brightness (eventueel kun je die ook op laagniveau aanpassen)
Custom Shader (Distance Blend) - zorgt ervoor dat textures een grotere resolutie krijgen naarmate het landschap verder van de camera staat. (tutorial)
Distance Blending
Een probleem met het landschap is dat je wel heel duidelijk in de achtergrond tiling gaat zien. Aanpassen van de resolutie kan, maar daardoor klopt de resolutie van de material waar je staat weer niet. Hiervoor zijn meerdere oplossingen.
Distance Blending
Distance Blending zorgt er effectief voor dat je 2 verschillende resoluties van je materials laat zien. 1 resolutie voor dichtbij, en eentje voor ver weg.
Distance Blending
Het idee achter distance blending (daar heeft Unreal een standaard node voor) is dat de witte laag je materials in een bepaalde resolutie weergeven, en de zwarte laag weer in een andere.
Distance Blending
Voor dit voorbeeld heb ik deze even gekoppeld aan de base-color. de scalar paramters zijn in je material tweakbaar.
Distance Blending
Door te tweaken met 2 (scalar)parameters kun je deze mooi in elkaar over laten lopen.
Distance Blending
Echter moeten we deze distance blend functie niet hier plaatsen (koppel dus base color weer aan base color) en knip deze nodes weg.�Deze plaatsen we in de LayerA tmD functies.
Distance Blending
Het eerste wat we doen is de tiling functies die we eerder hebben aangemaakt kopieren. Deze 4 nieuwe functies noemen we ‘tzelfde alleen zetten we hier _Distance achter. Deze functies geven straks aan wat de tiling moet zijn van de resolutie vd texture in de “distance”.
Distance Blending
Binnen de settings van de functies zorgen we dat de tiling/offset_AtmD ook _Distance erachter krijgt en veranderen we de tiling x&y naar een lagere waarde (0.033). Doe dit voor alle tiling_Distance functies.
Distance Blending
Kopieer in je layer_ functies de Albedo, Metalness, Roughness en Normal nodes. (let op: niet de detail_normal). Plaats deze onder de andere nodes zoals boven. De displacement node hebben we niet nodig, aangezien we niks gaan tesselaten wat je in de distance wil laten zien.
Distance Blending
Plaats (door te slepen) de juiste tilingfunctie_displacement in deze functie en koppel ze aan de nieuwe aangemaakte nodes.
Distance Blending
Maak 4 lerps aan en koppel de output van de nieuwe nodes aan de B kant van de Lerp nodes.
Distance Blending
Koppel vervolgens de output van de originele en juiste nodes aan de A kant van de Lerps (dus die van: base, metal, roughness en normal).
Distance Blending
Maak 4 lerps aan en koppel de output van de nieuwe nodes aan de B kant van de Lerp nodes.
Distance Blending
De Distance Blend combinatie die in het voorbeeld al werd gemaakt maken we nog een keer. (of we plakken hem, als we de vorige hadden weggeknipt). de twee scalar parameters noemen we Blend_Range en Start_Offset. Blend_Range zet je standaard op: 2000 en Start_Offset zet je op: -500.
Distance Blending
De output van de distance blend node zet je in de alpha inputs van alle lerp nodes.
Distance Blending
De output van de Lerps vervangen de output van de originele nodes. Koppel de juiste output aan de juiste input van de map adjustment node.
Distance Blending
Doe voorgaande voor alle layer functies.
Distance Blending
na opslaan zou de distance blend moeten werken.
Custom Shader (Macro Variation) - Door variatie in brightness door je grond materials heen te mengen, zorg je ervoor dat de herhaling van textures minder opvalt. Je kunt hiervoor de tech uit blueprints kopiëren van materialen die in Unreal standaard meegeleverd worden zoals de: M_Metal_Gold (starter content)
Macro Variation
Macro Variation zorgt voor extra lichtdonker verschil over ‘t gehele terrein om nog meer extra variatie toe te voegen.
Macro Variation
Zoek in de StarterContent folder naar de material M_Metal_Gold en open hem.
Macro Variation
Kopieer bovenstaande nodes uit de gold material.
Macro Variation
Plak de gekopieerde nodes in de layer material functions autoblend. multiply deze met de output van de BreakMaterialAttributes Nodes.
Quixel Assets - Gebruik de quixel assets om je omgeving mee op te vullen en rijker te maken. Gebruik zowel vegetatie als rotsformaties, gebruik de juiste assets! (cliffs, boulders voor grote stukken, pebbles, twigs voor kleine stukken.)
Quixel Material (Specular from red channel diffuse) - door ‘t rode kanaal van je colormap te gebruiken voor de specularity (dus niet roughness) krijgen je props een meer natuurlijke reflectie.
Lighting Settings (Skylight & Directional Light) - Zorg ervoor dat je een directional light gebruikt in combinatie met een skylight en fog. De skylight kan je kleuren en zorgt ervoor dat schaduw niet volledig zwart is, maar een reflectieve (scattered) kleur heeft.
Lighting Settings (Exponential Height Fog) - Gebruik de exponential height fog voor het mooiste resultaat mbt dingen die je ver weg ziet. Zorg ervoor dat je de settings zo tweaked, dat de fog niet opvalt, maar wel aanwezig is voor een natuurlijke look.
Quixel Assets (Painting Foliage) - Het gaat allemaal pas echt leven wanneer je je omgeving opvult met planten! Vooral als deze planten een beetje meebewegen met de wind.
Unreal Sky (BP_Sky_Sphere) - Een heel efficiënte oplossing om snel een lucht met wolken te genereren. Deze kun je vinden in de standaard blueprints van Unreal, je kunt de zon, wolken etc. allemaal instellen en koppelen aan je directional light.
Optimisation (LOD) - Quixel assets geïmporteerd vanuit Bridge maken gebruik van een LOD systeem (Level of Detail). Het is goed om te controleren dat zowel billboards de juiste kant wijzen (naar de camera), en ook de settings daarvan goed staan, of goed zijn aangepast.
Lighting Settings (Postprocessing) - Rond de compositie af met de juiste post processing settings. Let ook op de automatische settings die Unreal gebruikt
Gebruikte Bronnen
Option 1 - Brushing Terrain
Werken met Quixel materials in Unreal (Game Development)
Option 2 - Creating Automated Terrain (Game Development)
Polish
Sharing is caring
Optional: Maken van eigen assets (Game Art)