Werken met geavanceerde reflecties in UDK

In deze zelfstudie leren we hoe we zowel een dynamisch (realtime) als een statisch reflectiemateriaal in Unreal Development Kit kunnen instellen en een parameterschakelaar kunnen maken om van dynamische naar statische reflecties over te schakelen, of omgekeerd in UDK. Voor de tutorial gebruik ik de februari 2011-versie van UDK.


Download afbeeldingen met hoge resolutie voor deze zelfstudie.



Reflectie in UDK

In UDK zijn Reflections niets anders dan omgevingen die omgekeerd op het oppervlak van objecten worden vastgelegd en geprojecteerd en worden vastgelegd met behulp van Screencapture Actors in UDK. Je moet deze acteur plaatsen om de scène of de omgeving van je kaart vast te leggen en op te slaan in een speciaal texture-formaat Render to Target genoemd, deze structuur hoort in de inhoudbrowser te staan. Het kan een realtime of statische textuur zijn die in een materiaal kan worden gebruikt en dienovereenkomstig kan worden ingesteld om reflecties te krijgen op bepaalde mazen zoals metaal of glas.

Om de Reflect Actor correct te begrijpen en te laten functioneren, hebben we een volledig ontwikkelde Scene of Map nodig, zodat deze de omliggende omgevingsobjecten vangt. Laad UDK en open de "VCTF-Necropolis.udk" -kaart (of een willekeurige kaart van uw keuze), maar zorg ervoor dat uw kaart is geladen met veel objectstructuren en belichting, het zou in de UT3-map moeten zijn in de geïnstalleerde directory van UDK, dat is UDKGame \ Content \ Maps \ UT3. Dus zorg dat je je kaart klaarlegt.


Ga naar Beeld-> Browservenster en dan acteursklassen. Laten we dit Actor Classes-venster samenvoegen met het inhoudsbrowservenster, zodat we rechtstreeks vanuit het inhoudsbrowservenster naar het Actor Classes-venster kunnen gaan. Klik hiervoor in het menu Docking direct naast de menuoptie Bestand en Klik op Gedokt. Zodra u op de gekoppelde optie klikt, moet het venster verdwijnen en kunnen we het rechtstreeks vanuit de Inhoudsbrowser laden.


Ga in het Actor Classes-venster naar Uncategorized-> SceneCaptureCubeMapActor Selecteer en sleep het naar je scene, net zoals op de onderstaande foto. Zorg er wel voor dat je deze acteur precies in het midden van veel objecten met goede belichting plaatst, zodat je een mooie reflectie krijgt. Of anders zie je sommige donkere vlekken op deze acteur, of een eenvoudige zwart gekleurde bol. Deze acteur is niet zichtbaar in het spel wanneer we deze kaart spelen.

Nadat je de acteur hierboven hebt gesleept en in je scène hebt geplaatst, krijg je een zwart of donker gekleurd bolobject in je scène. Het is voor het vastleggen van de omgeving en zal reflecteren als een spiegel. Maar nu is de kleur zwart, omdat deze acteur alle reflectie opslaat in een speciale textuurkaart met de naam Scene Render to Target, die dynamisch is en nog niet is toegewezen. Laten we die dynamische textuur dan maken.


Ga naar de inhoudsbrowser en maak een nieuw pakket met de naam "Advanced_Reflection" (of elke gewenste naam.) Klik met de rechtermuisknop in de inhoudsbrowser en maak een nieuwe TextureRenderTargetCube. Het verschil tussen Target 2d en Target Cube is dat Cube alle assen van de omgeving vastlegt en opslaat in Cubemap-indeling. Waar als doel 2d slechts één zijde van het vlak moet vangen, wat goed is voor een eenzijdig vlak maasoppervlak zoals een maas- of vloergaas.

Nadat u op de nieuwe TextureRenderTargetCube klikt met de rechtermuisknop-opties, krijgt u een venster zoals in de afbeelding om de resolutie van de textuur in te stellen. Zorg ervoor dat je de resolutie zo laag mogelijk instelt, anders kan het veel geheugen kwijtraken als je het voor een realtime scène gebruikt. Maar voorlopig stellen we het op 1024 om de hoge resolutie vast te leggen Statische reflectie textuur en dan zullen we het terugzetten naar 256 later. Vergeet niet deze textuur een naam te geven als "RT_reflection". Druk op OK en sla het pakket op. Nadat u op OK hebt gedrukt, ziet u een groene structuur in de inhoudsbrowser, uw dynamische structuur die RT_reflection heeft genoemd in de inhoudsbrowser.

Nu we onze Dynamic Texture klaar hebben, laten we het toepassen op de Scene capture Cubemap Actor in de scene.


Selecteer die nieuwe dynamische structuur met de naam RT_reflectie uit de inhoudsbrowser en ga nu terug naar je scène en selecteer de SceneCaptureCubeMap-acteur (de zwarte bol) en druk op F4 om zijn eigenschappen te openen. Just Collapse Scene Capture Actor-> Scene Capture-> Capture Properties en wijs het Texture Target toe door op de groene pijl ernaast te klikken. Je krijgt halve reflectie en half zwart op de bol, om alles weer te geven wat je nodig hebt om het bereik in te stellen dat is door de FarPlane-waarde in te stellen 999999 (of zo hoog als je kunt) zoals in de bovenstaande afbeelding. Controleer / selecteer ook Mist en Post inschakelen inschakelen als u in uw scène aanwezig bent, of Controleer / Markeer de waarde van Hoofdscoop na bewerkingsinstellingen gebruiken. Ik heb alle gemarkeerde waarden in de bovenstaande afbeelding ingeschakeld.

Als u nu uw inhoudsbrowser opent, ziet u dat de groene structuur in de inhoudbladeraar enige textuurinformatie bevat en dat textuurinformatie de dynamische weerspiegeling van uw scène is. Met deze textuur kunt u eenvoudig een materiaal instellen en een nieuwe statische structuur maken. Laten we een materiaal instellen, maar we moeten een statisch netwerk hebben om dit materiaal op toe te passen.


Voor deze zelfstudie heb ik twee Simple Geometry-netten gemaakt die een bol en cilinder zijn, zoals hierboven weergegeven. Ik gebruik de cilinder voor dynamische realtime-reflecties en de bol voor statische reflecties. Laten we nu een statische reflectietextuur maken.


Klik met de rechtermuisknop op die dynamische structuur in de inhoudsbrowser en klik vervolgens op Nieuwe statische structuur maken. Er verschijnt een pop-upvenster met de naam van de nieuwe statische structuur die wordt gemaakt. Noem het gewoon alles wat je wilt, maar voor deze tutorial noem ik het "ST_reflection" en zoals hierboven getoond in Grouping Field. Typ eenvoudig 'Texturen', zodat deze de nieuwe textuur in een subcategorie met de naam Textures of Advanced_reflection-pakket plaatst. Na het raken van OK, zal het enige tijd duren om de statische Cubemap-structuur in de inhoudsbrowser te maken, enige tijd te wachten en vervolgens het pakket op te slaan.


Nadat u de statische Cubemap-structuur met de naam ST_reflection hebt gemaakt, moet u ook een paar andere texturen met dezelfde naam hebben, maar verwijder ze niet omdat het een ondersteunende structuur is die alle 6 zijden van de reflectie-informatie bevat. Dat is van minus X tot positief X bijvoorbeeld (suffix als Neg en Pos) gecompileerd in je ST_reflection-textuur. Nu we dynamische en statische structuren hebben die RT_reflectie en ST_reflection zijn, is het tijd om hun materiaal te maken.


Klik met de rechtermuisknop in de Inhoudsbrowser en maak een nieuw materiaal met de naam "Reflectie" (of een andere naam die u wenst).


Dubbelklik op uw nieuw gemaakte materiaal dat het reflectiemateriaal is. Het opbouwen van het reflectiemateriaal in het materiaalbewerkingsvenster is eenvoudig, maar hier stel ik twee soorten reflectie in. Dat is Dynamische en Statische Reflectie, zoals u de opstelling in de bovenstaande afbeelding kunt zien. Dit is handig als u statische reflecties wilt op specifieke muren, plafonds of soms op de grond wanneer u een exemplaarmateriaal of een kind van dit materiaal maakt dat we later zullen gebruiken. Dus laten we het reflectiemateriaal voor zowel statisch als dynamisch instellen.

De volgende methode is slechts de opstelling van de dynamische en statische reflectie met een parameter Switch om het type reflectie dat we in de materiaalinstantie willen in of uit te schakelen. Je kunt het gebruiken met je huidige materiaalconfiguratie of het mengen met je huidige Diffuse metaal, glas of elk ander materiaal dat je leuk vindt.

Dynamische materiaalinstelling: In de bovenstaande afbeelding heeft de Dynamic-instelling drie verbindingen en gaat deze door ReflectionVector> Transforms> RT_reflection. Laten we eerst de dynamische reflectie instellen, de dynamische structuur (RT_reflectie) importeren in het venster Materiaaleditor en zoeken naar de uitdrukkingen Transform en ReflectionVector. Sluit vervolgens het knooppunt Reflectievector aan op het knooppunt Vectortransformatie en sluit uiteindelijk het Vector-transformatieknooppunt aan op de UV's van het textuursteekproefknooppunt, dat is de textuur RT_reflection. Selecteer alle knooppunten en reageer Dyanmic_reflection (klik met de rechtermuisknop en nieuwe opmerking) en maak vervolgens een kopie van deze hele dynamische reflectie-instelling.

Statisch materiaal instellen: De installatie van het statische materiaal is vrijwel hetzelfde, behalve het textuursteekproefknooppunt dat de textuur RT_Reflection is. Vervang deze door de ST_reflection-structuur van de gekopieerde Dynamic_reflection-instelling. Wijzig de opmerking van Dynamic_reflection in Static_reflection, net zoals de instelling in de bovenstaande afbeelding.


Nu hebben we een schakelaar nodig om over te schakelen van dynamisch naar statisch of omgekeerd. Om dat te doen, zoekt u gewoon naar de parameter Statische schakelaar in het venster Materiaalexpressie en sleept u deze naar uw scherm of klikt u met de rechtermuisknop in de materiaaleditor en selecteert u vervolgens FunctionUtility-> Nieuwe statische schakelaar. Koppel de ST_reflection aan False en RT_reflection aan True voor deze schakelaar. Je kunt nu deze switch in het Diffuse of Emissive kanaal pluggen, of je kunt het zelfs mixen met je huidige materiaal setup door het gebruik van Lerp (linear interpolation) expression node.

Statische schakelaarparameter: Deze schakelaar heeft twee ingangen, WAAR en ONWAAR. Hoewel het vanzelfsprekend is, zal het alleen FALSE als standaardwaarde weergeven en wordt de waarde van de True-invoer genegeerd. Dus om dat te veranderen, klik je op de Static Switch-parameter en dan in het eigenschappenvenster hieronder, controleer of activeer de Standaardwaarde, zoals in de afbeelding hierboven en geef het een Parameternaam zoals Statisch / Dynamisch. Sla nu op en sluit het venster met de materiaaleditor.


Ga gewoon naar de inhoudsbrowser en klik met de rechtermuisknop op dit nieuw gemaakte reflectiemateriaal en klik op Create New Material Instance (Constant). Hierna verschijnt een venster om de nieuwe materiaalinstantie een naam te geven. Noem het maar "Static_reflection" en volg het bovenstaande proces opnieuw, maar noem dit keer "Dynamic_reflection" voor de tweede Material Instance.


Nu hebt u twee exemplaren van het materiaal in de inhoudbrowser. Dubbelklik op beide materiaalexemplaren.
Zoals in de afbeelding hierboven, aan de linkerkant is het het statische materiaal en aan de rechterkant is het het dynamische materiaal. Onder Parametergroepen is er een Statisch / Dynamisch aanvinkvakje, zorg er gewoon voor dat het links is aangevinkt voor Statisch Materiaal. En het selectievakje Rechts wordt gecontroleerd op het dynamische materiaal zoals weergegeven in de bovenstaande afbeelding. Deze parameter Statisch / Dynamisch wordt gemaakt alleen vanwege de schakelaar die we eerder in het venster Materiaaleditor hebben gemaakt. Zodra u klaar bent met de instellingen, is het nu tijd om deze materialen toe te wijzen aan onze statische mazen. Dus sluit gewoon die Materialexemplaar-editor-vensters.


Ga naar de inhoudsbrowser en zoek naar een mesh-bol en mesh die ik heb gemaakt voor deze zelfstudie. Breng het Dynamische materiaal aan op de cilinder en het statische materiaal op het Sphere-gaas, zoals weergegeven in de bovenstaande afbeelding. Dat is het! Je bent bijna klaar, plaats deze twee netten nu op je kaart.


Plaats het cilindergaas recht boven de realtime reflectieactor en plaats het bolhek overal waar u maar wilt, of u kunt het naast de cilinder plaatsen, naast elkaar. Test nu het spel in je Editor.


Zoals je kunt zien in de bovenstaande afbeelding. Als je naar de cilinder kijkt, zie je een klein beetje verwrongen weerspiegeling van je karakter, dat komt door de kromming van de cilinder. Hoe gladder het gaas, hoe beter de reflectie, maar geen veranderingen in de reflectie van de bol. Wat er nog steeds echt uitziet, dus het is een goede manier om de reflectie op deze manier te vervalsen en ook te optimaliseren. Dynamische Realtime-reflecties worden zeer zelden gebruikt en er wordt veel GPU- en CPU-kracht gebruikt om elk frame weer te geven. Wees voorzichtig met de realtime-reflectieactor en de bijbehorende instellingen. UDK kan vaak crashen als je constant wijzigingen aanbrengt in de realtime-reflectieactor die acteur is van Scene Capture. Zorg ervoor dat u elke stap opslaat, of met eventuele wijzigingen die u aanbrengt. Test elke keer afspelen in uw viewport en breng wijzigingen aan om het gewenste effect te krijgen.


Conclusie:

Dynamische real-time gebruiken Reflecties op zo'n grote kaart met een groot exterieur of een externe omgeving, zullen je geheugen leegmaken en het kan zelfs veel crashen. Gebruik het dus verstandig en efficiënt. Dynamische reflectie wordt vaak gebruikt in een binnenkaart, die kleine verzamelruimten heeft met veel spiegels die het interieur weerspiegelen (zoals Spiegeldeur en Windows of Chrome Metals.) Maar je kunt die reflectie nog steeds nep maken door een eenvoudige omschakeling naar statische reflecties, die is een slimme en betere manier om het te doen.

Bedankt voor het lezen en een geweldige dag verder!


We hebben een aantal gerelateerde zelfstudies gepubliceerd waarin u mogelijk ook geïnteresseerd bent:

gerelateerde berichten
  • Snelle tip: Optimalisatie van structuren in Unreal Development Kit
  • Snelle tip: een inleiding tot Light-Mapping in UDK
  • Een uitgebreide beginnersgids voor UDK
  • Maya To UDK: Statische mazen importeren met ActorX & FBX
  • Speedtree naar UDK: een palmboom maken in Speedtree en deze importeren in UDK