Unreal Engine 4.26
docs.unrealengine.com
docs.unrealengine.com
I know Google works for these questions, but I'd like to hear opinionated responses if people have experience:
How do you manage / version assets? Git? Git LFS? ...?
How do you import photogrammetry assets? Do you need to process them in other software first, and is there a desired format to put them in? What's the best way to import and version them?
Is networking support for multiple players something that works out of the box? Or do you have to hand roll this and the server code?
Are there tools for integrating sensors like VR tracking and Kinect? What about adding real time point cloud data into the scene?
How do you tweak shaders? Is there a good guide to shader development that is Unreal Engine aware?
How do you delve into raw C++? Is Rust supported?
How might I find people with experience to work with, review my code, or potentially hire?
Git LFS is fine. Many shops use Perforce (although I hate it).
>import photogrammetry assets?
Depends what you have. The standard pipeline is to use a tool like Maya or Blender for model work and import into the engine as obj or fbx files.
Unreal is supposed to have a pretty good out of the box network setup.
Yes every VR platform seems to have an SDK for Unity and Unreal.
Shaders and shader dev are a very deep topic that you should google.
Other systems exist, like Plastic SCM, but their much much harder to use. I had issues with a contractor who couldn't figure it out and it partially lead to us abandoning that version of the project ( on v3 now, had to change direction though).
Unreal is significantly harder than Unity, unless you stick to blueprints. Unreal's C++ is a harder language than Unity's C#.
Plus I find Unity's community to be much more newbie friendly. Unreal tends to heavily tilt towards massive projects. Unity treats mobile as a first class citizen and it's very easy to get started.
Then again, I've been using Unity since 2012 roughly, had I started with Unreal I might have a different opinion.
Yes, it's not too simple, but replication is at very least tried and tested.
> Are there tools for integrating sensors like VR tracking and Kinect? What about adding real time point cloud data into the scene?
Yes, not sure about real time, but Unreal basically has support for everything somewhere.
> How do you tweak shaders? Is there a good guide to shader development that is Unreal Engine aware?
Yes. It uses a custom unreal syntax underneath, so it's not trivial but it can be done. The engine also doesn't really like you managing the shaders yourself, e.g. If you want to dynamically change/replace shaders the RHI does expose the functionality but it's buried under so many layers of abstraction it's quite painful.
> How do you delve into raw C++? Is Rust supported?
It is raw C++. I wouldn't bother trying to integrate Rust because it doesn't really like you doing your own memory management in the first place.
As a final comment, if you want to find out how something works, just read the source they give you. The documentation is genuinely shit, and most people online (including some Epic people who don't touch the core engine) don't seem to be particularly clued in. Some flows are quite well documented, e.g. Animation, but other parts of the engine basically aren't documented at all.
Also, don't implement anything complicated in blueprints. They're written once, read never.
Like in web dev of course we have a million frameworks like Springboot, Rails, Django, Flask, Express, etc, but those aren't used for games like Call of Duty and Destiny and Fortnite etc-- they use something else and we never hear about that stuff at all in the "mainstream" software discussions.
Really interested in what's used there.
We have a commitment to open source. Our core technologies are Python, Erlang, C++, and MySQL.
Epic Games has Epic Games services, which is a set of backend services that includes matchmaking, achievements, peer to peer networking, lobbies, etc. Apparently Fortnite runs on Epic Games services. Consoles and Steam have similar backends.
All of these backend services use variations on standard web stacks that, from what I can tell, don't look radically different than the variance you'd see among startups or big tech. Here is a postmortem of a Fortnite outage that talks about some of their tech stack, for example https://www.epicgames.com/fortnite/en-US/news/postmortem-of-.... They use MongoDB, Java, JAXRS, Redis, AWS, etc. All tech familiar to "mainstream" (web) software engineers.
One thing that is different is game clients (which are obviously real-time 3D engines), and specifically game servers, which are either peers or headless server versions of the game. These run game sessions once matchmaking is resolved and connect to a fixed (usually 4-128) number of players in that given session. Sometimes the backend and game server code is more tightly intertwined, for example in an MMORPG or a Destiny style "shared world" game where matchmaking happens on the fly based on the player's location in the world. There are a variety of services that will help manage hosting game servers (Multiplay, Playfab, etc.) but most of them end up running on "standard" Cloud compute providers (Azure, AWS, GCP). Ultimately the only non "mainstream" thing about running large multiplayer games is the game engine piece.
> How do you manage / version assets? Git? Git LFS? ...?
Recently i started working and planning on a 2D game. However i wanted 3D assets, and so the process was very asset and pipeline heavy. As such i wanted my code to always match concrete versions of asset sources - blender/etc - and so i searched around. Git LFS fit wonderfully, with one issue: It's centralized.
Github's Git LFS support is iffy. Their pricing is harsh (imo, for an indie dev) and i couldn't find ways to prune history to save cost. Likewise the entire design of Git LFS requires a centralized server, something i didn't understand.
So since i have a passion and existing projects in various Content Addressable Stores, i decided to attempt to make my own "Git LFS" with a more natural Git-like behavior. Eg syncs over SSH, not requiring servers, etc. I don't want to link it here (anonymous account), but even if i did i wouldn't advise anyone use it - it's a toy project more than anything.
With that said i found the general workflow of Git LFS to be excellent for this purpose (minus the flaws i mentioned). Tracking binary assets worked wonderfully and allowed my code to always match explicit versions of the asset sources - making my pipeline feel very repeatable.
I am a single dev on the game project so i didn't test the binary [un]locking features though - but i hear good things there.
Running a whole web server just to use _git (lfs)_ seems absurd to me.
The pattern is clearly intended to be used with the big centralized players - and the idea of normal git patterns, like git lfs in a local fs or git lfs over SSH were secondary concerns.
well, not even secondary concerns really - it's not at all supported. To me, this is the core use case for Git. Git LFS is incapable of doing that in the current implementations. Which bothers me.
My main problems with git lfs were more UX problems where certain workloads are not as well supported (e.g. keeping only a portion of the LFS files local).
Perforce!
https://allarsblog.com/2014/09/25/setup-perforce-digital/
I use perforce to track game content and GitHub for code. UE4 has support in the editor so you can checkout and submit changes as well as see other files that are checked out by your team. It is incredibly helpful and 100x better than using GitLFS (which I started with in 2014 and a contractor highly recommended switching to perforce and he was right!)
1. Huge files - a distributed VCS will not handle versioning them in a space-efficient manner without hacks like LFS. Plastic SCM says they handle huge files, but you want to investigate this closely.
2. Locking files - Game assets will usually be binary and non-mergeable so you need to be able to lock them so that only one person is able to edit at a time. PlasticSCM seems to have this handled according to their website.
3. Disk space - Watch the pricing for disk space. 5GB is nowhere near sufficient for a game of reasonable size. Seems reasonable at $20/month up to 100GB, but make sure you understand what you'll get. They allow for a local server, which might be useful for a company (or if you don't mind setting up your own servers).
If you're a solo or small-team indie, you can probably get by using anything. git, plastic, svn or perforce. perforce even has a cloud hosting solution.
There is a reason Perforce is widespread in the gaming industry and it's not because we're a bunch of mouth-breathing morons stuck in 2005.
Last I kicked the tires proper on most SCM solutions Perforce was the only one that could handle repos like that and provide locking so that people won't blow away binary files.
If you’re using UE4 I 1000% recommend learning Perforce because it is what Epic (the developers of UE4) use as well as thousands of other game developers. So it has great editor support and is a skill set you can transfer to other projects.
I use Git LFS. It's a bit of a shit show though. Blueprints are a tricky thing to diff. I generally use the in editor tools to do commits.
> Is networking support for multiple players something that works out of the box? Or do you have to hand roll this and the server code?
I think unreal's multiplayer is quite good personally. All actor's have a checkbox as to whether they should be replicated. Blueprint support for handling RPCs is pretty good too. You can simulate client/server setups in the editor with multiple windows. To actually run online you'll likely want to get either steam's online subsystem working or epic's.
> How might I find people with experience to work with, review my code, or potentially hire?
I would try the unreal slacker's discord featured on the epic launcher.
Edit: for good laughs, here's Tim Sweeney himself tweeting a similar question in 2016 about whether git LFS is a good idea for game dev: https://twitter.com/timsweeneyepic/status/747888067248295937...
Usually the traditional workflow is for everyone use Blueprint graphical language, and a couple of C++ devs create components to be used from Blueprint.
Except for Embark, Rust is no one's radar in the kind of customers that use Unreal and console SDKs.
How do you manage / version assets? Git? Git LFS? ...?
Disclaimer: I'm a git Zealot, and use it for everything BUT version control with UE4 where Perforce is the King.I might sound like someone having Helix shares but I don't :) Here are a few reasons for that:
- Perforce is built from the ground up to handle binary files and UE4 is just about that. So you need a VCS that is blazing fast with them and also allow you to exclusively lock files across the entire server as you cannot merge binary files. While you can do that with Git LFS 2, it still does not beat Perforce for general performance. I don't have recent metrics but Git was significantly much slower than Perforce when handling millions of files, we have dozen of millions in our repo. - Perforce allows you to selectively "clone" parts of the depot, this is super important as it gives you granular control over your work. - Perforce Streams are really fantastic, it is like Git branches but on steroid. You can setup complex Stream Graph setups where down Streams are giving a filtered view on parent Streams allowing you to curate what people see which makes a huge difference when you are an artist and are not concerned about getting 20-30Go of debugging symbols and other developer related files. - Perforce is fully integrated with Unreal itself but all the tooling from Epic Games. This is what they use and support in their own pipeline.
I would recommend reading all the articles from Dan Bloch, starting with "Life on the Edge: Monitoring and Running A Very Large Perforce Installation", https://static.googleusercontent.com/media/research.google.c..., and then "Still All On One Server: Perforce at Scale", https://research.google/pubs/pub39983/.
How do you import photogrammetry assets? Do you need to process them in other software first, and is there a desired format to put them in? What's the best way to import and version them?
Agisoft Metashape, Reality Capture, Zephyr 3D are some of the typical software in use. You usually need an optimisation pass in DCCs such as Maya, 3dsmax, Houdini or Blender. Then, FBX is kind of the geometry standard for UE4, but it also supports Wavefront Obj files, USD to a degree and Alembic caches among other things. Is networking support for multiple players something that works out of the box?
Yes: https://docs.unrealengine.com/en-US/InteractiveExperiences/N... Are there tools for integrating sensors like VR tracking and Kinect? What about adding real time point cloud data into the scene?
VR is really well supported and in the context of Virtual Production you can track a camera with a Vive Puck for example: https://docs.unrealengine.com/en-US/WorkingWithMedia/nDispla... There is also a Lidar Import plugin now: https://docs.unrealengine.com/en-US/WorkingWithContent/Lidar... How do you tweak shaders? Is there a good guide to shader development that is Unreal Engine aware?
UE4 shaders are HLSL and there is a graph, i.e. the Material Editor, where you can author them visually: https://docs.unrealengine.com/en-US/RenderingAndGraphics/Mat... You can also add custom HLSL directly there. There are plenty videos on Youtube and the Unreal Engine channel has a ton of good ones: https://www.youtube.com/channel/UCBobmJyzsJ6Ll7UbfhI4iwQ How do you delve into raw C++? Is Rust supported?
UE4 codebase is massive and will take a very long time to get around. Blueprints help a lot understanding some of the architectural concepts and looking at plugins code with a good IDE, e.g. Visual Studio certainly helps. No official Rust support atm!Cheers,
BitKeeper with it's buildin Binary Asset Manager
The really cool stuff in my opinion is the water system, the sky system (beautiful volumetric clouds!), and the full body solver for ik animation. The last one isn't a new thing for game engines, but the first two far exceed any free nature rendering tools I've ever seen. The hair seems really cool but I get the sense it may be hard to get into.
The accessibility of making high quality looking games is very good these days. That makes a big difference in terms of maintaining a willingness to keep plugging away at a project. Especially if one lacks the artistic skills to make up for it at the beginning.
Think of 4.26.1 as "Unreal Engine 4, version 26, revision 1"
Honestly puts almost all other creative tools, especially the likes of Adobe to shame.
And so it starts.
The problem is that not everyone actually needs Vulkan, and for those middleware seems to be the only way to avoid going into Vulkan low level programming.
Also, there's always this old gem that HN should get giddy about: https://www.st.cs.uni-saarland.de/edu/seminare/2005/advanced...
I just think JC/Abrash/etc have an aura/cult of personality that doesn't seem all that impressive when you get someone who is a powerhouse of tech and business acumen like Sweeney next to them.
It's natural to have a lot of respect for the pioneers because those who come after are building upon what they created.