This is my one stop shop for all future mini projects, which I will do to become more adept with UE4. I work as a character rigger and animator during weekdays and have worked a lot with Maya and UE3 prior to UE4. I am aiming to do personal projects with UE4, I do however need to learn the depths of the engine to avoid unpleasant surprises. Do not expect eye candy in this thread. The goal is to learn and understand the engine, not to amaze visitors with jaw dropping art.
Whenever I create something new that I think is useful to remember, or just showing off what I have been up to, I will post it in this thread. My goal is to post something new every week, unless I have been too busy at work or when I finally end up working on a bigger personal project. With some of my findings I may post guides or tutorials to explain it in detail.
For each category, the newest entry is at the bottom.
Change default paths, and share content between projects, the unofficial way
Warning: This is in no way a supported solution by Epic right now. If you use Junctions to share content between projects, be aware that a lot of testing is needed to ensure it is a production ready solution. I have not had problems myself yet, but there could be hidden issues. So tread lightly.
In my first post I want to share a useful way of circumventing some current limitations with UE4 projects. In Windows, Unreal Projects are by default set to “MyDocs\Unreal Projects”. Each project can have a unique path which needs to be set on creation. For The Vault however, you are stuck with a specific path. (…\Unreal Engine\Launcher\VaultCache) This AnswerHub question covers the problem.
So how do we solve this? There actually is an old way of doing this, which is a hidden functionality usually used by sysadmins to administrate servers and workstations. What we need to do is create something called a Junction or Soft Link. (we’ll use Junction) Have you ever created a shortcut to a file or a folder before? As you know, this is not the actual folder or file. Double clicking it will lead you to the real thing.
So what is a Junction then? It is a fancy word for a path that is remapped to a folder on the same or some other harddrive. The main difference from a standard shortcut is that a Junction looks and behaves as if it is the actual folder, even for applications!
You can watch the video to see the whole process. When you know how it works, it takes a few seconds to do in the future for anything you can imagine.
To make it clear, an ordinary shortcut to Unreal Projects would look like this: C:…\Desktop\Unreal Projects.lnk (the shortcut on your desktop) C:…\Documents\Unreal Projects (the actual folder you reach through the shortcut)
For the Junction example, this would be the actual folder on our second harddrive we want to “link”.
If we create a Junction from that folder, it would look like this. C:…\Documents\Unreal Projects (this is now a Junction)
It may seem confusing at first. It looks like the folder is on C:\ when you open it. The path even says you are in C:…\Documents! Don’t let that fool you. Internally you are actually on D:\ drive. If we paste any file inside the C:-drive path, it is actually written in the D:-drive path. Did you know that Junctions can even be used for network paths? Using this method allows you to put your projects on a local server, like a NAS, to work on the same path as your colleagues do. It’s still recommended that you use Perforce or SVN though, too easy to corrupt files otherwise.
So how do we accomplish this? Usually this involves CMD commands inside windows, but there is a free program to do it easily. Install the program below, it may need a restart.
Move the folder Unreal Projects to your second harddrive
Right click and drag your moved folder and drop it back inside C:…\Documents as a Junction.
If you double click the junction it will appear as if Unreal Projects is still in your Documents folder, and it will do that for Unreal Engine as well! If you open the Launcher you will see that everything is still intact. Only difference is that all your project files now end up on your second hard drive. Any program running on your computer will communicate with the operating system to get files and folders. Programs does not understand the difference between a junction and an actual path. All it knows is if it exists or not, and if it is allowed to read it or not.
How to share content between projects then? Create a folder for your shared assets. Then create a junction to that folder in your other project. I do advice you tread carefully when working with a shared folder like this, it is possible that there are project specific caches to keep track of assets and you may get weird behaviours. I have not battle tested this myself, but I would expect there are things that could break.
To be able to prototype ideas quickly in the future I will need prototype content. I have modelled and rigged a generic human male in Maya, which I will use for player and AI purposes. I did not use the A.R.T. plugin. I believe a tool like that should be used after having a fundamental understanding of the underlying system.
The character has a basic skeleton and deformation, with twist bones for shoulders, wrists and legs. I did not create a facial rig because I do not have the time, or the skill, to sculpt a proper face. I have considered doing a generic female too, but I don’t know if I will actually gain anything by doing so. I think it’s better to save that energy for proper projects later.
Here are a couple of screenshots of the rig in action, with some poses in the engine. Animations are coming up later.
**Changing values during simulation can have unexpected side-effects
This is directly related to this post I made on AnswerHub a while back. Note that the initial post is not the source of the problem, see the other comments.
Some animation related aspects, especially State Machines in Animation Blueprints, behaves erratically if default properties are modified during playback / simulation on an actor. If I understand the problem correctly, this is because some components of the actor resets on a default property change, which also causes State Machines to re-evaluate from entry point.
So a headsup to anyone out there, don’t use the details panel for quick debugging of animations on a placed actor. Or at least be aware that you may get odd behavior, You may ask why I was even doing this when I could just work inside the Animation Blueprint? It is because booleans are controlled by another blueprint through the Event Graph, I could not modify the booleans because they would reset back to the other blueprint.
Note to self: Use other means to debug animations. Using simple level blueprint inputs is fine until an actual controller or AI is implemented to drive the values for me.
I spent three-four hours animating some unarmed cycles in Maya. I did the Idle, Walk, Jog and Run without any references, just to get it quickly over with. They’re not perfect, but good enough for prototype use.
I’m using Root Motion in the first video. I am, however, not going to use root motion for most of my animations though… Because it is very limited in UE4 right now. The only way to get root motion is through AnimMontage and it doesn’t allow nifty stuff like 1D Blendspaces. It also doesn’t allow blending except when playing/switching a montage. This makes it hard to jump between animations without hitches.
I do feel like the arms go up too quickly–but maybe that’s because I’m a lazy runner!
I guess, let me put it this way, I feel like the arms would key later on in the blend than the feet–like he’d have to build up a bit more momentum before justifying their raising, I want them to hold off a bit longer. What do you think? Is that a preference/character thing? I’m a noob on animation stuff.
Thanks! A big ‘maybe’ on the release. You see, I have previously released stuff like this for free. I’m kind of tired of doing so. It is a way of devaluing my own work, as if it’s not worth anything. If I am to sell the rig and/or the animations, I would have to spend a lot of work to polish the result to justify a price point, and to increase demand. Consider that there already is the A.R.T. tools released with UE4, people will expect a similar level of features and functionality. Then there is the Adventure Kit, which not only has prototype rigs and animations, but actual gameplay features.
I could release it, as it is, and add a disclaimer that the point of the setup is for prototyping. I guess there could be a market where ‘less is more’. There’s also the question of what outlets to use for selling it. The marketplace is not open yet, there are some third party options, or even running my own.
There is also the aspect of if I want to focus on creating and selling content for other developers, or if I want to finally finish a game by myself before I go to the grave. I have worked with games for quite a while now, but never actually finished a project on my own.
It’s still too early to say really, as I only have one rig and four animations. As it will continue to grow, I guess I will have a better sense of what to do with it. I’m happy for any feedback in this regard.
Thank you! Like you say, it’s a matter of preference or style. If you go and look at how people run and jog, you will see a huge variety of ways of how to run (and how NOT to).
The animations were made individually without reference, so I tried to make them appear as close as possible to the real thing in my head. It’s not the best way to work, but I kind of have a stupid pride of doing things without reference. But then, it’s noticeable that I’m not at the level of a Pixar animator, and I never intend to be, so I will continue to focus on making games than spend time on mastering the art of animation. While flawless animations will add a lot of juiciness to a game, it is usually not worth spending the time needed to perfect a sequence when there is so much else to do. Can the player see that the guy over there is running, or that a person over there got sad or happy for some odd reason during gameplay? Then it’s good enough for me.
As a one man show, I’m following the mantra a friend once told me; “It should be good enough for TV”. When he said it, Full HD TV were still not the norm and a lot of detail disappeared on screen. The point of the expression is to not spend more effort than what’s really needed, most people will be happy with “good enough”, while fellow artists will only be satisfied if you reach the level of a master. I have too long been blinded by the need to satisfy fellow artists and developers, forgetting that the reason why I got into this was to create an experience that others could enjoy. Those others are not primarily developers, so I should stop working myself to the ground to please the wrong audience.
To be honest, most of the projects that I and some others appreciate are the ones who actually gets done and are playable. The best projects for reference, which I can think of, that has a perfect balance of quality vs effort, is what Hourences do. (See Solus for example) Hourences is very skilled at what he does, but he doesn’t spend more time than is actually needed! He works smart, not hard. Look at his Solus videos on Youtube and you will see what I mean. He could definitely add more polish to the stuff he makes, but it is not necessary. Good enough for TV my friend, good enough.
Ranting aside. In regard to the animation blending, where the arms start coming up, it highly relies on each animation and how many animations there are in the blend space. I believe there would need to be an extra animation or two in the blend space to add a proper transition. A linear blend can only go so far, it’s not possible to change the blending of the arms and legs individually unless you change/add animations to the blend space, or do a lot of wizardry in the Animation Blueprint. Which frankly is not worth the effort, unless you’re doing a game which highly relies on locomotion like Mirror’s Edge.
I also think that it’s hard to judge the blend properly unless it is previewed in a gameplay scenario. There are a lot of cases when you must stop staring at the animation for what it is, and rather go with the flow and get a sense for how it feels. This is one of the unintuitive things of game development and animation that some people grasp late, sometimes you have to sacrifice animation quality to get responsiveness. That’s why you can play some third person action games, where each sequence may look a bit funky on its own, but put in a gameplay scenario where the player only sees some sequences in the corner of the eye, it’s perfect!
Also, not to forget, there are no ‘start moving’ and ‘end moving’ animations right now. For example, if you go from stand still to running, you need to accelerate. These animations are a ‘nice to have’, rather than a need, so I will not likely make them for the prototype stage. Unless I feel like experimenting more with locomotion, which I kind of despise to be honest.
Thank you both, again, for the feedback. I really appreciate it.
So today I got curious about how to best approach generic interaction in a level. What would be the best way to just place a button and connect it to any other actor? I didn’t know about Blueprint Interfaces, except their name, but after watching this tutorial I learned how awesome they are. Previously to this, I thought I had to use Event Dispatchers, or Cast To ObjectType + Function Call, to get what I want. This however, is very clean to work with.
I managed to create a generic button, which I could connect to any level actor I want. Then I added a door, an elevator and a cannon which I could interact with. Then all I had to do was connect them to a button after placement in the level. Really nifty.
Small update. I wanted to see how my character looks like in a third person camera. So I modified the existing TPP example and modified the camera. I also added a normalization function to the movement vector so the character doesn’t speed up when running diagonally. It is looking better than I expected.
This is probably the last update for this week. I will hopefully have new stuff to show next weekend.
There are currently two plugins available for doing JSON queries. (JSON Query and VaRest) That is, get JSON data from a web server. I used Stefander’s plugin to get a basic value and apply it to gameplay.
For this test I decided to just give my character a funky hat based on a number, which I get from a locally hosted PHP server. Pretty fun to be honest.
Blending/Overdriving poses using timeline curves (Overgrowth Style)
After seeing the GDC talk by David Rosen a while back, I tried to recreate the way he blends between poses using bouncy easing curves. He overdrivies the pose value, greater than 1 (100%), to add extra bounce. From what I have seen, it is not possible to blend a pose past 100% in UE4 out of the box. I have not looked into the source code of UE4, which makes me uncertain, but I think UE4 uses Quaternions to blend between poses. Which may be the reason it can not overdrive. I bet the overdrive needs to happen directly on the euler rotation values.
I messed with this a little bit a week back, but put it down. After seeing a few threads popping up about this subject on the forums, like this one, I could not resist jumping in and try to implement it properly again. While it looks messy, I think it should be cheap enough to implement as there is mostly additive data being calculated.
In relation to the previous post, I wanted to see how much work there is to implement a generic easing function. Referencing this article I recreated the easeOutElastic effect. Pretty painless to be honest. I’m probably going to recreate a set of easing functions, unless Epic decides to implement one for us.
I get the feeling you’re perhaps planning on a project with melee combat down the road?
Anyhow, looks really good. I especially like the Overgrowth style animation blend, that’s very cool.
One thing I think you could do to make it pop more and to get around the lack of blending past 100% natively is to blend in physics weight using the same bouncy easing (maybe make it so it drives past 100% and the more it’s past there, the more physics weight). That would require setting up a PhAT asset for the character and tuning it to look good though. It’s not too bad (there are tutorials) and I’m sure being an animator helps with that hehe.
Thank you n00854180t. I definitely want to do some game with melee in the future, but it is not on the road map right now. A sword just happened to be the easiest prop to model and pose with.
I’ve worked with PhAT before in UE3 and doing what you suggest may not be as reliable as using easing functions. I think the biggest problem would appear when you want to use physics for other behaviors on the character and it is already occupied by the tweening process. It is a good suggestion though, I have yet to dabble with PhAT in UE4 and I think there are some tricks worth trying out, like blending dying to ragdoll.
I could not resist spending a few hours implementing an easing library. I think I used pretty much every easing resource available on the web for reference. I don’t take credit for the math, only the implementation.
The functions use an input Alpha value, expecting a value between 0.0-1.0. Output is a value that starts/end at 0.0/1.0 with some overdrive as seen in the video. The only exception are the elastic functions which also has a parameter for frequency.