Epitasis - Colorful Exploration and Puzzle Game

Thank you ! You guys are awesome!!! :slight_smile:

Yeah I’m still playing around with the red forest areas colors, although I recently changed the sky to that greenish colors shown in the last couple of pictures which matches really well with the red. It’s growing on me quite quickly, and is a nice escape from the other places to explore :slight_smile:

As for a devblog, that is something I’ll start working on here soon, along with an actual website for the project as well. I’d like to start doing a more routine update too, possibly each month, while still posting pictures + other media each week. On that same note, should have the portal rendering breakdown posted later today for @MetricZero.

Here’s a new breakdown for portal rendering, as requested by @MetricZero.

A few words though:

This breakdown won’t cover everything, but hopefully it should get people started on the right direction to building their own portals and rendering them correctly. This same rendering method could also be used to build non-euclidian worlds (eg, a hallway that looks long on the inside, but outside looks short!). It could probably (and has been, although not really shared) be done better in C++, but this has been currently accomplished completely in blueprints.
Here is an example of what you can expect:

The first thing we should do is create the following assets:

  • A new blueprint actor class for our portal (BP_Portal)
  • A new blueprint actor class for the portals exit (BP_PortalExitNode)
  • A new material for the portal’s mesh (MAT_Portal_Master). In addition, you’ll need a simple plane mesh (rotated upwards to stand vertically) to apply the portal material to.

Lets begin with going over how the material will work.

We plug in a texture 2d parameter into the emissive color. In our BP_Portal class, we will inject a dynamically created render target into this parameter, and that is why we don’t need an actual render target asset. We also plug in a screen aligned UV’s into the UV input of the parameter, as we want the texture to align to the screen.
This material right here is fairly simple. I also do some effects with the opacity mask to create more of a wormhole effect, which just uses some basic masks and noise textures that rotate and blend together.

The last thing I do, which is still a WIP is fade out the portal material (lerping it with the render target parameter). I don’t like this, and will most likely get rid of it. In most cases, its not necessary either, since in our BP_Portal class we will stop updating our render target if the player is far enough away.

Next up is the BP_PortalExitNode class. This class serves as the “exit” for the player and also where the portal renders to as it contains our scene capture component. There isn’t much going on here except for components, variables, and a function to update our scene capture:

Lastly is the meat of it all, the BP_Portal class. There is a lot of stuff going on in this class and I’m not going to cover it all, but I’ll try to cover the jist of it.

On Begin Play: The big thing here is creating the dynamic render target 2d. I’m using the Victory Plugin courtesy of Rama to create the dynamic render target, but with 4.11 or 4.12 there was a new node added which made it possible without the plugin to do this. The big thing here is when creating it is to get the correct screen aspect ratio. If it’s off, our portal will be distorted and look incorrect. To maintain a decent FPS, we get the player controllers viewport resolution, divide both X and Y by 2 (so half of the current screen resolution) and use those numbers for our render targets. Something to add in the future would be a scalability setting for this. Obviously if we do not divide the resolution we get a clearer result, but it tends to murder FPS.

We then take that returned value of the render target, and plug it into a reference of our BP_PortalExitNode’s scene capture component so it has something to render onto. Next we create a material instance of the MAT_Portal_Master and plug the render target texture into the PortalRenderTarget parameter we created inside of it.
Next is the camera math. With everything else setup correctly, we don’t have to do much to get something realistic now.

Essentially, all we need to do is set the scene capture component’s rotation (from out BP_PortalExitNode reference) to the player camera’s rotation. It’s slightly hacky, but I have to actually modify the rotation by 180 degrees to get the correct results. This is probably an area that could receive some slight improvements in the future.

In addition to this all is also where I call the Update function from the BP_PortalExitNode reference. If this function isn’t called (which it isn’t if we are more than 1000uu away) then the portal doesn’t update. The UpdatePortalCapture event is called on tick every 0.03 seconds. Reducing this number comes with more realistic rendering with the sacrifice of performance. Really, scene captures murder FPS, at least for me.

Last thing we need to do is throw in a BP_Portal into our scene and link a BP_PortalExitNode to the Exit Node Reference!

Final Result:

Other things to do are teleport the player to the exit node reference. The easiest way to do this is to setup a trigger volume on the portal which simply transports the player to the exit node references location. This is easier said then done, which is why I didn’t show my code, as its still a WIP and quite messy. The same thing can be done to transport other objects. Another room to improve is to use custom stencil to the give the effect of objects passing into the portal (same thing should be done if you have first person objects and don’t want them to clip into the portal mesh).

I hope this helps people who are looking to build portals. I know its not a complete guide but hopefully it starts people on the right direction to building their own. Even these systems have a ton of room for improvement and hopefully in the future I can expand on this same tutorial with more knowledge gained on the subject matter.

Much love.

Thanks for the starting point. No idea how I’ll accomplish it but hopefully I can figure out the ‘pop’ one day. Maybe after I get my feet a bit more wet I’ll make a thread of my own dedicated to this subject.

But seriously, you’re awesome. I wish you the best of luck in your project, I’ll be keeping an eye out!

Also not sure what I could ever do but don’t hesitate to ask if you need help with it.

Happy hunting!

Brilliant things here! Thanks for breakdown about the portals - will check it out.

I am also working on game like that (open world first person puzzler) but with different visual style. Something like this (only draft for now):
http://i.imgur.com/GkPp7GVm.png

Nice portal that you have here ! :slight_smile:
An additional trick that I could suggest would be to use a non-planar mesh and with a not 2-sided material. For example something a bit curved inward the portal. This way, when the player goes through the portal, he will not pass through the mesh before being teleported.
That’s what they did in the game “Prey” : Prey - Portal detail - YouTube
And also what I did on my own portal system (but I used a cube instead) in UE4 : Vine

You’re welcome, I hope it works out for you! Let me know if you need any help, I’m continually working on improvements for my portals as well. The toughest challenge so far is getting them to look good when loading other levels - I have something in the works for it but I’m still not sure exactly what I’m going to do. Currently my solution is to use a cubemap texture instead of the render target which is okay, but unfortunately its not dynamic since I’m not using level streaming.

Thanks for the tip on the mesh man, I’ll try that out. I believe we’ve talked on Slack before, your portal still impresses me every time I see it!

If anyone has any suggestions on optimizing the portals please let me know. Lots of render targets really seem to destroy my FPS whenever I’m playing my game in certain areas :. I still need to do a ton of actual optimization too, but I can already see them being a bit of a problem.

I’ll definitely let you know if I ever figure anything out. I’m still trying to decipher your blueprints lol. But that lead me to about 500 other things I don’t know, so it might be awhile… At least there’s no shortage of things to learn.

looks amazing dude !!! it has some witness and no man’s sky vibe here

Better pawn No Man’s sky and make ue4 prouder. Jking.
Nice progress.

Thanks guys! Your kind words and comments mean a lot to me. Glad to see people enjoy the project and its art style.

I finally wrapped up with my classes today so I should have a lot more free time to get started on a lot of things I have waiting to do, like creating a blog and website which I’m going to get started on tomorrow. Hopefully should have something soon for people to check out :wink: I have also been wrapping up some minor effects like lasers and impact, since a lot of the puzzle elements use those. Made some nice functions inside a library to draw lasers and impacts so can easily call that from any blueprint. Was previously using a simple debug line trace, but the new particle effect allows the player to see which direction the energy is flowing on the beam which is pretty neat.

Heres a small sample picture of that, should have some nice media this weekend showing it off a bit more:

Cheers!

I’ve been fairly busy this weekend working on a menu. I’ve been trying to get the game ready for some early testers to get an idea of performance on multiple machines, so my goal was to get a persistent graphics menu and a developer menu that all saved.
The developer menu was so that enabling certain statistics was easier for testers and could help get an idea of FPS in certain areas. I didnt spend as much time in this category as the others, but as the need for certain developer settings arise I can easily add them in to help out testers.

Overall I made a few widgets and a save graphics file and appropriate functions. Now that all the base code is set up, adding in new settings in will be a breeze. I did some other things as well, like added stepping features into the sliders which makes it a bit nicer when you want to limit the amount of options and don’t want a ton of buttons in the players face.

All of these same widgets can also be used inside the menu, which I’ll be doing quite soon as well for the game.

I uploaded a quick video for you guys so you can check it out:

Nothing super exciting, but taking time for the little things like this is enjoyable and feels rewarding, as the game feels more and more polished. Still need to add sounds and other small details to it :slight_smile:

Hey - haven’t had a to post much, mostly because the systems I’m currently working on are a bit boring. I’ve mostly been creating some new menu systems using sequencer (which is awesome), save-load systems, a music manager, and a demo. I’m trying to get the demo completed this week for a small event, but not sure if thats going to be possible to do the necessary amount of work that needs to be completed before then.

I recently however made a blog, and transferred over my two breakdowns I’ve posted so far here on there: http://lucasgovatos.blogspot.com/

I’m currently writing up a new breakdown, this time for a music manager blueprint. The blueprint is a actor class that’s spawned into the level using easy to access commands/macros, and certain “music” actors. Essentially the base manager class allows the user to enter in a series of in’s, loops, out’s, alt loops, transitions, etc and use commands to play everything accordingly. I started out creating this because even when using some of the built in UE4 tools, I found I simply couldn’t get the results I wanted. I’ll have a blog post detailing this entire system quite soon, as its something that I think most people should have in their games for easy to use music management. Along with that, I’ve been working along side composer Ojczenasz, who’s been creating some phenomenal orchestral/electronic ambient work so far for the game. I’ll have to give a small preview to go with it :slight_smile:

Cheers!

I love how the foam of the water shader matches the shore dynamically.

Thanks! This is done with depth fade. You can also control how large the foam gets. It works well, but some parts the illusion can break at certain angles (mostly when you look down from a top down view).

I did a blog post on the music management in Epitasis using blueprints and macros. You can check it out here: Lucas Govatos: Music Management in Epitasis

Other than that, I’ve been hard at work on a demo level for the project. I hope it to be something representation of a level from the actual game (and it’ll probably be included in some way anyway).

Hoping to get some good playtesting in with this demo quite soon as it’s just about completed. Wooh!

I’m totally stunned by the portal effekt :o Tried to archive the same thing for a long time, gave up on it, then retried and failed again. Just tried to rebuild it based on your breakdown but didn’t got it to work :(. I would be glad if you could share some more insight or even a little demo project featuring it :3

About your project: It just looks gorgeous! Brilliant idea btw! Keep it up!

Hey, perhaps when I have some more free time this week I’ll see about uploading an example for you :slight_smile:

I’m slowly finishing up the demo level and also starting on some new areas of the game. Once the demo is out of the way and some other things have been polished up, should go much faster in terms of level design and seeing more stuff in the game. Its a fun project to work on but requires a creative mindset and time to keep coming up with new puzzles using the elements the game provide :slight_smile:

I’ve been super busy lately (working on this, school, work), but I wrote a small blog post on working on the demo for Epitasis. Check it out here!

I learned quite a lot while making it, and most importantly I feel like I have a better understanding of what my game truly is and what is has become. Things have really started to come together, which is quite awesome to see. In addition, the blog post has a bunch of new screenshots in it, so go check it out!

This is looking great, dude! Keep it up!

Thanks man! :slight_smile: