Version Control Fundamentals | Live from HQ | Inside Unreal

Version Control Fundamentals | Live from HQ | Inside Unreal


>>Hey everyone, and welcome
to Inside Unreal, our weekly show where we learn,
explore, and celebrate everything Unreal together. I’m your host Victor Brodin,
and with me today, I have Developer Relations
Technical Artist, Arran Langmead.
Welcome to the studio.>>Arran: Hello.>>Victor: And we’re going to
cover some version control.>>Arran: We are, yeah.>>Victor: And it’s version
control, not source control, is what I learned
through my research.>>Arran: Yeah. I mean, you can call it
whatever you want really, but ->>Victor: I guess so but source
specifically pertains to like source files,
which is text-based. We have the ability
to merge them relatively easily and you can work with them a little bit differently
than you can with say, a binary file
like a UAsset and such. But I think without further ado,
I mean, it’s your first time
on the stream, so, welcome.>>Arran: Thank you very much.>>Victor: Yeah, it’s great
to have you here.>>Arran: It’s great to be here.
>>Victor: Visiting from the UK which is actually where
you’re located, right?>>Arran: Yes.>>Victor: So if you guys
have any questions and you’re over in the UK, try to find Arron
and any of the Meetups. I think you go
to a couple of them.>>Arran: I try to if I can.
I’ve changed jobs recently, so I’m actually
the evangelists for the UK.>>Victor: You did tell me that.
>>Arran: So yeah, if you’re kind of – I’m going to be trying to
reach out to more people soon, kind of start talking
to the indies and trying to help them out
as much as I can, just trying to build
that stuff up.>>Victor: Yeah, that’s great. All right, I think
let’s go ahead and talk a little bit
about version control.>>Arran: Awesome. Okay. First off, we had lots of fun
coming up with kind of sub-names or sub-titles for this talk,
but we did go with Don’t be a Git, use the (Per)force, in the end,
which I quite like. It’s good. So yeah, we’re going to be
talking about a few different setups today.
We’re going to be talking about kind of setting up
something on a cloud server, setting up something
for more kind of personal, internal use on a local host. And then we’re going to be
kind of diving into the Engine and talking about ways that you can kind of
break up your project or just be able to better manage
all of your Assets so that you’re not
running into checkout issues, which is what we find
that a lot of teams, especially as
they start scaling up, tend to find they run into.
So we’ll go through that stuff and then we’ll finish off
with a quick summary and then I guess Q and A.>>Victor: Sounds good.
>>Arran: Lots of fun. So this slide is wrong,
which is great.>>Victor: Good start.
>>Arran: Because yeah, you’ve got to start off
with a wrong slide. There’s actually four different
methods of version control that we have as of 4.24,
I think. So we’ve recently added Plastic, which is kind of a newer version
of version control, which a lot of people
are finding really useful. We are going to be going over
two key ones today, which is Subversion and Perforce
and we’ll talk a little bit about why we’re not going
to be going over Git. So, kind of pros and cons
of each of those tools. Git is absolutely amazing
for programmers. It’s kind of what most coders
are going to want to use. But for artists,
it really sucks. The main reasons for that is
you’ll often run into file size limits or size limits
for Assets, things like that. So if you’re an artist, you’re often working with kind
of reasonably large files, especially even inside
the Engine if you’re kind of working
on the UAsset, those files can still get
pretty big and the maps can
get big as well. So we tend to find, especially on the free
or very low cost signups for any Git accounts that you’ll very
quickly run into just a data cap that you have to pay to get past
or you can’t get through. And the second big reason that
Git can suck for artists and designers,
people working inside the Engine is that you can’t check out
any Assets, right? So if you aren’t used to
working in a version control tool generally you want
to be able to check out Assets because you want to stop
other people from being able to work on them
while you’re working on them. Because you don’t want to have
two different versions of the same Texture
or model or Asset that you then
have to try and decide whose should get kind of pushed
through to the main build.>>Victor: You have
to sort of manage that outside of
the version control tool. And that can lead to->>Arran: To lots of issues
because unlike code, you can’t merge those things. So the things back in, so one of
the things that Git is good at is being able
to merge code together. So if you have two people
working on kind of the same kind of blocks
of code or same areas of code, it’s a lot easier for them
to bring that work back together whereas you can’t do that
for binary files. It’s like if you’re working
on a Texture and you just had two people
working on it and then at the end you had to
just alpha blend out the bits that you wanted
to keep from one artist and the bits from the other,
it just doesn’t work. So, we have two other versions,
Subversion and Perforce. Subversion is great because
it’s cheap or it’s free. So there’s no kind of limits
on how many users you can have. You just can download Subversion
kind of manager like Tortoise and then all you have to do
is pay for hosting if you want to do that kind of
online on a cloud somewhere or you can host it locally
on a NAS or on your computer or you know, kind of anything that can set up
a Subversion host. The downsides to that are that
we have no tie to a Subversion
build of the Engine. So unlike with Git where you can kind of grab
a copy of the Engine and the different versions
of the Engine that we have and kind of change
those, iterate them. You can even send us code
if you found a bug that we can then
pull back into our main build. With Subversion,
we don’t have that. So your Engine build
and your game build, you either need to separate them by having a Git repo
for the Engine and Subversion repo
for the actual game that you’re building. Or just kind of create
a copy of the Engine, bring that into
your Subversion folder and then you’d have
to manage that yourself, and then when you
want it to upgrade, you’d have to again manage
that yourself. Also it looks like something
that Zero Cool would use, which is, if you haven’t seen
the film Hackers, just leave the stream right now. Go and watch that film, because
it’s absolutely awesome and yes, that is Angelina Jolie
if you haven’t seen it before, so, yeah, go and watch Hackers. Just a little side note.
Then we have Perforce. Perforce is pretty much
the industry standard. I don’t know any studios
that are using Subversion. Mainly just because Perforce
is kind of, it’s a more cleaned up package,
it’s more complete. It’s got a kind of different
level of support and hosting and it’s just a bit more
fully featured. But for small groups,
for single users Subversion is absolutely great. It’s fine.
There’s nothing wrong with it. But Perforce is the kind of
the standard tool that industry is using.
So if you are a student and you’re wanting to get into
the games industry, having an understanding
of how Perforce works is a really useful skill to be able to
kind of be able to just say, yeah, I know how to do that. You won’t be doing any catch up
when you join a studio. So yeah, it’s great,
it supports checkout, which is one of the kind
of the key things that we’re looking for
as in-Engine users. It does tie to the Engine. There is a kind of
a small caveat with that, which is that you do have
to be a custom licensee in order to get access
to the Perforce version of the Engine
builds that we supply. It has a very clean interface,
so it’s nice and easy to use. It’s built up.
It’s very good. And then on the con side
of that, no chance of looking like
Zero Cool unfortunately, because you’re not
really going to be in any kind of a command line
for most of it. It’s potentially
expensive at scale, so it’s free
for up to five users I think.>>Victor: Yeah, that’s great.>>Arran: So as soon as you kind
of get past the five users, then you will have to start
looking at licensing it through Perforce. So yeah, and then obviously
the downside con, which is that it ties to Engine, but again, that’s only
with a custom license. So we’re going to very quickly
run through two methods of setting up
Subversion on a NAS. So kind of just a network
storage device that you can buy,
they’re really, really cheap. It’s really useful because it’s
kind of like a one off cost. So whereas with kind of if you
wanted to do any cloud hosting, you’re looking at paying
a set price every single month. So for some people,
that might not be useful if you’re kind of
just a hobbyist or you just wanting somewhere
to store your art projects that you’re working on
in your free time or something like that. So this can be a really,
really useful way of doing that. Just another caveat as well
with these two setups, we have done these in advance. The reason being that when
you’re setting your Subversion, your Perforce server up,
they are very, very open to attack
until you’ve secured them. So if we did this live,
there is a very good chance that we could have people kind of messing
it up on the stream because they love
having that fun. There is a good chance
that we could get it even with what we have at the moment.
And if we do, I feel like that’s just a good lesson
for everyone on network security and just making
sure you’re set up. So we’ll be going through
most of these just through PowerPoint, but the actual in-Engine stuff,
we’ll do live and crazy. So first off this is
the kind of the NAS that I used to set up with.
You’re free to use other forms. I chose this one because it has
a SVN Subversion application built in
to the actual NAS itself. So it’s got a really nice
user interface. It’s very, very quick
and easy to set up. So yeah, you can go on Synology they’ve got multi
bay station setups as well. So you plug in more
than one hard drive and then it will run off one,
but it will mirror, which gives you kind
of a redundancy in case anything goes wrong. So again, it’s really useful
just for making sure you’re not actually going
to lose any data. I’m sure most of you
will have lost data at some point or something.
So having something like this where you’ve got
an actual backup and then if you do double disks, then you can
have multiple backups. So even if that hard
drive backup fails, you’ve got an exact copy
waiting right next to it that you can just switch into.
So this is the user interface. So again, it’s really simple
to set up. You buy your NAS,
you plug it in, you plug it
into your Ethernet port, and then you just have to log in
as all these- It’s very easy instructions
on how to actually log into it. One thing I will say about this
is that this is going to be local only on your
internet connection, right? So on your local Wi-Fi
or whatever. If you want to be able to access this
outside of your local space, you’ll have to get a static IP
or something similar that allows you to access this.
You can get like a DDNS or there’s actually a thing
that’s built into the Synology, which is like a quick link, but I’m not sure if that works
with the SVN server. So, you’d have to check that. If you are really interested
in doing game Dev or if you’ve got a small studio, you should have
a static IP anyway if you’re interested in doing
console development because there is a requirement
to have a static IP for console development. So you go onto the
package center, you download the SVN kind of app
that’s kind of built in. And then once
you’ve installed it, it’s really,
really easy to do it. You just open it up,
you add to create a new repo. I’ve added one here
called my first SVN. You edit that repo
and you go to user and then you add all the users
you want. So I’ve added myself
and I’ve added Victor so he can help me out
on some project stuff. I like to be able to put Victor
to work. It’s good. You do good stuff. It’s useful.>>Victor: I’m here.
>>Arran: Yeah, exactly. I will be putting you
to work later on in the show. So yeah, it’s going to be good.
So you add your users, you add the passwords
and then you are done. Like your actual server
is up and running. You have SVN, so now all you
need to do is access it. And for that most people use
Tortoise SVN, which is the ugliest, most nineties looking
application I’ve ever seen.>>Victor: But it works.
>>Arran: But it works so well that I think people have
just been like, well, it works. So there’s no point in doing
anything that looks prettier. So yeah, download
and install SVN. And then inside your desktop, you create a new folder
wherever you like, you can put it
in the Unreal projects folder, you can put it at this
of the kind of core C drive. If you’ve got a data drive
it doesn’t matter. Open it up and then
right click inside there if you’ve installed Tortoise->>Victor: With the default
settings, I believe.>>Arran: Just with the
default settings, yeah, you just let it install. And then if you right click,
you’ll get two new tabs, open up SVN checkout
and Tortoise SVN, if you go into that
and press import, it will then give you a little tab.
Again, we’ve hidden the IP here. But you basically put in
your tab as SVN:// IP address. And then it’s the port
that you need to be able to access it through.
Again, if you have a static IP and you want to be able
to access it, you’ll need
to port forward 3690, which is the standard SVN port
for the Synology NAS. And then backslash my first SVN. And it will then find that
and you’ll have access to it. So you’ll be able to do
all your content addition, checking out, any of that stuff. Anything that you put
in that folder, you’ll be able to
mark it for ads, you’ll be able to push it, you’ll be able
to pull new content and that will all get managed
inside Tortoise. And then you’ll be able
to set up that link inside Unreal as well. So we’ll go over the Unreal link
on the Perforce side. Cause it’s, it’s, it’s pretty
much exactly the same. And that’s it. So if you want like just
a little really nice and easy, it’s like a hundred,
200 quid to buy a NAS and then you’ve got it
as a backup, you’re done. So, again, it’s really good for
if you just want a little personal project space
where you can push stuff to it that’s not on
your actual main desktop that you just want to be able
to have that kind of the power
of version control but on a small setup,
then this is a really nice quick and easy way of
just getting that done. So we good on that? Do you want
to do some quick questions or should we just move on
to the Perforce?>>Victor: I’m going to paste a
link to the documentation as well because we do have some official
documentation regarding SVN and the use
of the of the Engine. From what I remember
using Tortoise, it is very straight forward.>>Arran: It’s so simple.
>>Victor: We are going to go over some of the fundamental concepts
now using Perforce, sort of how you actually work
with source control. And that’s pretty much agnostic.
There will be different menus but the terms are very similar.
And you should be able to apply that even if you’re using
Tortoise.>>Arran: Yep. Okay.
So setting up Perforce. So this is just a really nice
and simple. I tried to keep both of these
as simple as possible. This is based off
the very well-known Allar who’s a friend of the show.
Is he a friend of the show? Of course he’s a friend
of the show.>>Victor: He’s a moderator.
>>Arran: We love Allar. So yeah, this is based on his
tutorial, it’s almost identical. I’ve updated a few things because this one’s
a little bit old now, so it’s just referencing
some old files that don’t work anymore. I think he’s got
a pull request on that. Allar, if you’re watching,
take that pull request. But yeah, so just one thing
with this, if you are wanting to set up
a Perforce server, you want to use Digital Ocean,
go onto Allar’s blog. I’ve got the link in here.
If you use his link, then he gets like
a reference discount. So it gives him some credit
for his Digital Ocean account. So he’s done all
the hard work on here. So go on his website,
make sure you use his link for the Digital Ocean thing.
Give him a few free credits. It doesn’t cost you anything.
It’s a nice thing to do. So what you need to do is
you need to go to Digital Ocean. This is just
a hosting service website. Set up your account. You can do it with Google,
you can do it with Github. You can make whatever you want. Once you’ve done that,
go create a new project. Choose Ubuntu. This is where
the projects may change. So we’re currently on 18.04.3
So you need to make sure that if you’re watching this
somewhere down the line and we’re on Ubuntu
24 point whatever, you’ll need to make sure
that the Perforce version that you’re grabbing
is matching that number because otherwise,
you’ll run into issues. So you can choose
a standard plan. And then you pick
the monthly cap that you want to be working to.
I’ve been kind of- so this is the setup that I use
for a lot of my personal stuff. I very rarely go over $9
a month of just me
working inside the Engine. So I’m careful with what stuff
I’m pushing up there because I want to keep it
reasonably cheap. But it’s not- depending on
how big your project is and how much stuff
you’re moving back and forth, it can be really cheap
to have it on. So pick the kind of the,
it’s got CPU lists, it’s got SSD size, it’s got transfer speeds
and things like that. So just pick the one that’s
going to work for your project. You can change this as you go.
So it’s nice and easy to do. So once you’ve got that,
that’s your server set up. But the server’s
currently empty, right? There’s nothing that’s in it, so you can’t really
do much with it. So what we need now
is we need a thing called PuTTY. This lets you access the server through kind of
like a command line. So, you’ll need this in order
to be able to talk to the server and tell it to do things, tell it to install
particular files. So if you just search for PuTTY, I’ll be the first thing
that comes up. We can add a link as well
I’m sure later on at some point. So download that,
install it, open it up. And then what it’ll do
when you when you open it, it’ll ask you to enter
in the host. And at that point you need
to put in the server that you’ve created. You’ll get an email which will
have the server IP address and the password
that you can use. You log in as root and then you enter the password
that it’s given you. As soon as it gives you that
password and you’ve entered it, it’ll ask you
to put in a new one. So you’ll need to change
that password straight away. And then we’ve managed
to get the actual code down to these four lines of code. So once you’ve logged in
and your password’s been changed and it’s waiting for commands,
all you need to do is copy and paste each of these lines one by one
into your PuTTY command line and it will set up all of
the Perforce stuff for you. So it’s foolproof because
I’ve been able to do it. And if I can do it,
then anyone can.>>Victor: Yeah, I think it
took me like 20 minutes.>>Arran: Yeah, it’s so quick. Just to give you a very brief
overview of what each line of code is doing
if you’re not very code centric. So the first one is
just telling the server update which you’ll need to do because some of the command
stuff that we get it to do inside that wget,
it isn’t able to do. So you need to update
the server first. So you run that command,
then you get, all that it’s doing is it’s retrieving the content
at that repo address. So we’ve got-
I’ve made a copy of- again, this is all from Allar’s stuff. He’s the smart guy here
who’s done this, not me. I take no credit. All I’ve done is I’ve just
updated the Perforce version that it needs
to get to set up the server. So you grab that. Again, please don’t just blindly
download random stuff like. Look through the code first
and check it before you do it. Don’t trust me
or don’t trust anyone. Just as a general rule,
but you should look through the code first just to make sure
that you’re happy with it and it’s not doing anything
that you’re not happy with. The chmod is just navigating
to the particular address and then the sudo
install Perforce is actually installing
the Perforce server. Once you set it going,
it will run, it will ask you to set up
another password. This is for a sub account.
This is because you don’t want to be working off
your root login. That’s just a standard
kind of security thing. That’s a good idea to do. So it will create
a secondary login that’s called Perforce, I think. Set up a password
for that, press enter and then it will carry on and then it will
all be finished. And then at that point
you have your very own Perforce server ready to go which you can access
from anywhere, right? As long as you’ve got
an internet connection.>>Victor: Yes,
internet is important.>>Arran: With an
internet connection. Yeah. So at that point, all you need
is the software for you to be able
to interact with that. So at that point
go onto Perforce’s website, you want to go to P4V. You’ll need to do
some registration stuff for that because obviously it does have
the five user limit. Once you’ve done that,
you choose your family, your format,
your platform, download and then you’ll be able
to install the P4V. So it’s a suite of apps. These are the three ones
that you’ll use. It can also install with command
line that you can access as well if you are comfortable
using a command line, because some people aren’t,
some people are. You don’t have to install it.
You can just leave it off. But if you like
using command line, if you prefer that over
using visual interfaces then you can install
that one as well. But we get P4Admin,
P4Merge and P4V. So P4Admin is where you will be
setting up your depots, adding your users and managing the all
of the repositories as a whole. P4V is where you’ll be doing
most of your pushing, pulling, syncing, you know, kind of shelving,
branching, all of that stuff. And then P4Merge is a specialist
tool that you’ll be using if you do want to start
merging content together. So that’s what we
talked about before, if you branch two versions off, then you want to bring
those two together, it’s got kind of
a specialist tool that makes
that stuff a bit easier to do.>>Victor: We’re going to talk
a little bit more about merging.>>Arran: Yeah, we’re going
to talk a little bit, we’ve seen quite a lot
of questions about branching and merging. So we’ll try and tackle
those a little bit later on. So this is on the admin page. And again, this is why we
haven’t just set this up live. So once you have your
connection, you set up your Perforce server,
you need to access it. So you do that
by adding your IP address. And then it’s the 1666 which is
your other port for Perforce. So that’s the standard port
that it uses for it. And then you’ll press
the new button. And this is the thing that
anyone who has this IP address can add themselves as a user because the Perforce server,
when it gets first installed, it’s not secured
with any password requirement with any user lockdown level. So literally anyone
who has this IP can then go and make a new user.
Feel free to go and try and make a user
with that now if you want. But it should be locked down. So yeah,
you want to set this up, make a new user,
add yourself to it. When you first log in, it will
set you up as the super user and then you’ll be able
to add new users and add the security level to it so that random people
can’t just access your content.>>Victor: We were
talking about doing it live on the stream, and then we realized that if
someone’s quick on the keyboard and knows what they’re doing,
we might start seeing some strange things
being pushed to our server.>>Arran: I kind of wanted
to let that happen as well because I thought it’d be funny to just have like
just a community driven, but God, that would’ve
just gone so wrong so quickly. So it’s not going to happen.>>Victor: There are a couple of
things that could happen there.>>Arran: So, yeah,
you add your IP address, create your new user, and then this will
give you access to P4Admin. So here we can add on the users. So we have a thing
called users in groups. So we can add all of our-
kind of, I’ve added Victor to this
so he can access it. And then we also want to do
a bit of security stuff as well. So under administration
we can go in and we can change
the password security levels. So by default it’s set to zero. Seems like just
a really bad idea. So password’s not required. I recommend setting this up
as high as you’re able to go. Again, we don’t want to provide
too much stuff on security advice
just you know->>Victor: Do your research.
>>Arran: Just, yeah, you should look
into this stuff yourself. You should figure out
what level of security you’re comfortable with.
But yeah, it’s up to you. But yeah, we go quite high
on what we want. If you can get
two factor authentication, it’s always a good idea. So set your password
security level up. So kind of a password
is always required to get access
into P4 and P4Admin. And then what we want to do is stop anyone
from being able to make a user. So this is the one bit of – well, there’s another
bit of command line, but this is the main bit
of command line that you’ll need to use. So it’s just this
little strip here. P4 configure
set dm.user.noautocreate=This basically just means
that Perforce will stop anyone from being able
to make a new user unless that’s being done
inside P4Admin. So at that point, only your
admins can make new users which->>Victor: Is a good thing.
>>Arran: It’s a good way to go. Yeah, let’s,
we should just do it that way. You should get this bit
of code afterwards, once you press enter. That’s how you know that
it’s set up and it’s working and you’ve locked that down. So the next thing that we need
to do is add our depot. So we have – you can have as many
different depots as you want. These are basically
your base directories for any of your projects
that you’re working on. We’ve got two different key
types that you can have that I’m going to be talking about.
Local and stream. So local is a nice
and simple one. It’s basically just here’s
my game kind of super game 55 or whatever and that’s all
that this thing has got in it. It’s just a repository
for that games content. Then you have streams which are
a little bit more complex. And basically what they are
is multiple projects within a single depot. But those things can have
dependency on one another. So inside most of the Engine
stuff that we have, we’ll have the Engine and then
inside the actual Engine, we’ll have all of the games
and samples and various bits that we need. And then those will be
each set up as a stream. And what’s quite nice about that is you can set up
interdependency. So you can say, oh, I just want
this particular project and it will pull
just that project. But it will also pull anything
that it needs in order for that project to work. So this is quite useful
if you have content that you need to share across
multiple projects like the Engine build, if you’re doing a custom build
of the Engine and that way you can have your Engine build
all your different projects, but when you pull that content, you don’t have to pull
everything or manually specify the things
that you want to pull. You can just pick a particular
stream, work in that stream and then and then switch
between them as you need. So if you’re kind of just
starting out on this stuff, just stick with local.
It’s nice and easy. Just kind of make it
for your game project. If you’re if you’re
more advanced, you probably already
know about this already, but maybe take
a look at streams, especially if you want to set up
your own Engine build. So that is it. We have now got a Perforce
server as well as a Subversion.>>Victor: Easy-peasy.
>>Arran: Nice and easy.>>Victor: And this has been
cooking all night.>>Arran: Yeah.
And now compile shaders. So now we’re going to go over
kind of adding that project and we’re going to do this, well we’ll try to do this live
and see how that goes. So we have a little example
project here. So this is based off
the vehicle game. So we’re going to go
through kind of setting up a workspace in P4V. So I’ll just open up P4V,
bring that down. So this is kind of what
you’ll be working in day to day. You have basically your depot
and your workspaces, right? So the depot, this is the server
versions of these files. So this is what you’ve got
on your server and then your workspace is
the local saved version of that. So you’re pulling that stuff
down, downloading it
and storing it locally so that you can work on it
and edit it.>>Victor: And I guess it
might be good to mention sort of the difference between, just iterate a little bit
on the difference between your local copy
of everything that exists and what exists on the server,
the depot, right? And how you can pretty much do
anything you want on your end, in your workspace. But it’s only when you decide
to actually push it back to the server that anyone else
will get either yay, you’re now bug fixes
or nay no bugs.>>Arran: Yeah. You can
go through and you can do whatever you want to this.
You can check stuff out. You don’t even need
to technically check stuff out. You can manually overwrite it. So one of the really
useful things about Perforce is when you set this up, it will manually set
almost everything to read only. And that way you can’t edit
the files by default. You can only view
and access them. And then when
you check those out, it’s manually switching that
over so you can start editing it so it tries to keep it so that you’re only
working on the content that you’ve actually pulled
and you’ve marked out as yours. And then the really useful thing
about that is, if you want to work on the AI,
the Behavior Tree for the little character
that we’ve made, right? You can then check that out and then I can’t go in
and start editing that. It will notify me
if I try and check it out that you’ve already got it. There’s a little icon
that comes up that lets you know and who’s got it checked out. So I can either let you get on
with your work or it can go and shout at you
to be like, put it back in
because I need it. I’m more important than you. So I need to work on it more
and then you can, you can do it.>>Victor: I think we
should also mention sort of the setup of which files you are actually supposed
to push to the server. Because in your project folder, you do have a couple of folders
that should only exist locally. And we do have documentation
on this as well. I will go ahead and link that and put it
in the forum afterwards. But if you want to go through
which ones that might be?>>Arran: Yeah, we’ll do those.
So, what you will set up, and we’ll go through setup
for this as well, is a .P4ignore file. And what this is, if you’ve used
any version control stuff, you’ve probably come
across this before. But basically what it does is it
marks any Assets and file types and folders to be ignored
by the version control system. So when you make your project, so I’ll just open up
the project file here, it builds a load of content
that you don’t want to be pushing to the server because it’s just local content
that you’re building. So these are the intermediate
and saved folders. You don’t necessarily
want to be deleting them. But you definitely don’t want to
be pushing them back up to that. The one reason is that
those files can get huge, like if you’re currently
working on bug fixing and you’re generating
a lot of logs those logs, if you’ve got like an error
that’s happening, every single tick,
that’s creating a file and those files can get massive so you can end up with
really bloated Perforce servers that have just got a load
of ancillary content that it doesn’t need. And you just don’t need
to be accessing this. So what you need to do
is just set up a .P4ignore, we’ll go over this
in a little bit more detail in a bit and just mark saved
and intermediate to be ignored. And once you’ve got
this set up correctly, if you try and push this content
or mark it for add then it will come up
with an error saying that it’s part
of the ignore file or there’s no content
that can be added from here. And that’s just a nice,
easy way of doing it. So you can mark folders
just by typing in the name and then with – I think you might need
a backslash; you might not. And then if you want to ignore
particular file types as well you just put in *.
and then the particular files. I generally exclude anything
that’s not really UAsset, I tend to not to put in there.
So things like FBX files or .PNGs or you know, kind of
any of these kind of core files because I want to keep those
separately somewhere else. Especially with this, kind of if it’s a service
that you’re paying for. You can keep all of this stuff- If you do want to push FBX files
and PNGs, you absolutely can. But it’s just a way
of excluding some content. So you can mark
particular types, you can
mark particular directories and you can mark specific
sub-directories in there as well
if you want to ignore that. So it’s just a really useful way of kind of marking
that content out.>>Victor: There were a
few questions sort of how if artists should be using
version control for their Assets and maybe in this regard
you’re iterating on the FBX and eventually
you’re just pushing the final Static Mesh Asset. However, if you are two artists
both working on the FBX, then you want it
to be able to be up on the server as well, right?>>Arran: Yeah.
I mean you can do it, it’s->>Victor: Would you prefer to
export it out of the Engine then and iterate on it that way?>>Arran: I mean, it depends on how they’re working
on the Asset, right? Because- and at what point
do you decide what gets pushed to the server
and what doesn’t? And that is completely up
to you on, on how valuable you think having
multiple stored versions of those projects
on the server is going to be. The problem with having
that kind of content on there is that content
can be huge, right? You imagine a PNG
is probably fine, a PSD, which has got a thousand layers
of various bits and is kind of 8K,
as big as it can go, right, is going to be a huge file
that you’re going to be pushing and pulling all the time. And you might not want
that content going onto your Perforce server, but it’s your server
at the end of the day. It’s kind of up to you.
Again with model files. Right? Do, do you put
the Zbrush sculpt data up there if you’re doing sculpt work? Because again, those files
can get pretty hefty. You know, here’s
my 8 billion triangle high poly mesh
that I’ve been working on. Let’s version control that. I mean I tend to have
my working files in something like Google Drive, because it can store
simple versions and backups of things
if you overwrite files and I can offline stuff and work
on it online if I want to. But yeah, it’s up to you.
You can- there’s, I know lots of people
who have an Assets folder that kind of sits alongside
their Unreal project and that has all
of their mesh files, all of their all
of their Texture files that they’re working on
and they can go through and they can check those out
and edit them.>>Victor: Something that
might be good to know, I don’t know
when I discovered, but you can add your own folders
inside the project folder and that won’t screw with
your project in any way, right?>>Arran: Yeah.>>Victor: So I tend to have
a folder that’s like builds and that’s actually
where I package and push all the builds to.
And if I need to share that, then I will push that build
onto the Perforce if we’re doing something
like multiplayer testing.>>Arran: Yeah, absolutely. As long as it’s not
going into the content folder.>>Victor: Not into the
content, yeah.>>Arran: It won’t try
and automatically read it and pull that content in. You can have other stuff
that sits out here. You could make another depot
that’s just kind of, that’s raw Assets
or something like that.>>Victor: And that might be good
in case someone was like, oh, I pushed three different
test builds overnight and then you go pull, and half an hour to an hour
later, you’re able to work. Right.
>>Arran: Yeah. So yeah, it’s up to you.
There’s ups and downs. And a lot of it can be
about cost as well, right? Like if you’re a big company
and you’ve got plenty of cash and you know, at that point you’ve probably got your own
server set up anyway, you know? Yeah. You’re going to want
to be pushing everything because you want versions, you want to be able
to back it up. You want to make sure
that you’ve got that content. A lot of people link up
their version submissions as a way of logging
how they’re working and the Assets that they’re
doing and things like that, because again, Perforce can tie into loads
of different other projects where you can link it
with things like job lists and things
that you need to get done. So, yeah, it’s up to you on
how you want to do it. So we’ve got a depot, I’ve
already made a few depots here. You can have a blank one.
These automatically get added. So if we’re in P4Admin
and we make a new one, this will just appear in here. We might need to press
the refresh button, but apart from that,
it will just come up. What we need to do is we need
to make a new workspace. By default, you won’t have this. So I’m going to make
a new one now. We’ll probably stick
with our original one just so we’re not pulling
content live. That’s going to be in the wrong-
I do that every time. So we get this
new window pop up. We name the workspace. So I’m just going to
call it EpicSpace2. We mark the directory
that we’re putting it in. It’s generally good practice
to put this stuff as high up
in the directory as you can, just to keep the path name
as short as possible. So, most of the time you want
to put it at the root drive, so inside C or if you’ve got
a working hard drive that you want to keep it
separate on, you can do that. I’m going to be really lazy and
just put it inside the desktop just so we’ve got a nice
and quick access, I’m going to call this P42.
We’re just going to select that. Then I’m going to click
this little button here. This just converts it from
this weird directory reading to a nice clean interface
that’s a bit easier to use. By default, it will just mark
these as depots that I can have access to. But for now I’m just
going to leave it as blank and just press okay.
Then once we have that, we’re going to get
this empty workspace. Once we have that, we just need
to stop pushing content over from our depot
to this workspace. So you can see I’ve got it
selected here, EpicSpace2. I’m going to go to racer,
which is the current, little game
that we’ve been working on and I’m going to go down
to map to workspace view. You can see that it’s kind of
come through in the directory again here. Once I press okay,
it’s going to come up with a, do you want to get
that content now? We’re going to get latest
and you can see it’s kind of working away
in the bottom right. One of the things with Perforce
that I’ve noticed is it’s not always great at telling you it’s thinking
and doing stuff. So always check that bottom
right little loader bar. Because sometimes it can be
a little bit rubbish at telling you that, hey, I’m working here,
I am still pushing content or I am still pulling content
so don’t screw with anything. And you can see that
once we pull this content, we have none of that saved
intermediate folder stuff. That’s the P4ignore file
doing its job. Some people like to mark the P4
to be ignored. I always like having it pulled
with it, that way, anyone who’s pulling the content
isn’t going to accidentally push all of the saved directory
stuff with them when they do it.>>Victor: It’s a nice safety
measure as the admin of the->>Arran: Yeah,
I just leave that file in there or we can see all
version control belong to us. I believe that was
your contribution.>>Victor: That was my
contribution.>>Arran: Thank you for that.
Yeah, that’s really useful. So you can see that
that pulled pretty quickly. We have a pretty good internet
connection here, so, yeah. So once we’ve got that, we have
now got our content directory. If you have, if it’s your
first time making a depot, the depot will be empty, at which point you still need
to map it, but then you need to add
some content to it. I always add just
a little text file, right? So I’ll just make a text file,
put a little bit of random text into it, save it out
so that the file’s not nothing. Just as a – I think it’s more
just me than anything else. I think it would probably
work fine as an empty one.>>Victor: It’s also good
to test, right? If it’s the first time
you’re setting it up, just pushing something simple.>>Arran: Yeah. Just make sure
that it’s all working. What you can do
once you’ve made that, it will appear inside here. We right click
and we just do mark for add. So I can’t do this with this
because this is a new one. Let’s just do that now.
So I’m going to go to Racer because that’s the directory
that this depot is working in. If we pulled this one,
we would get a folder called third person
that sits next to Racer. So that’s how your content
is still separated out. So I’m just going to
go in and add. This is it. That’s the one. Just going to add
a new text document just so you can see – refresh this, you can see
the new text document gets put there, pardon me.
And then press mark for add. Once we do that, we’ll get
a little pending change list. So I’m just going to pop
that as okay. And then we can submit.
And that’s basically going to push this new Asset
to our server. So I’m just going to do that now
because we might as well. We need to write a change list. The change lists are super,
super important. Do not be lazy with
your change list description. This is how people know what you have done
with that particular part. So it’s really useful
for being able to search through and find where particular parts
of the Engine have been added or particular parts of the game
have been put in or modified. So make sure that
when you’re working, keep track of everything
you’re checking out and what you’re doing to it so you can add it
to that change list later because you are going to want to make sure that you’re
keeping on top of that. Pushed.>>Victor: Yeah, chat is
saying always commit messages because you never know what kind
of problems you might come into. And we haven’t touched
on that yet, but you know, storing it and having a backup
of your work is one thing. But one of the power
of version control is that
in case something happens, you don’t have to lose weeks since the last time
someone put it on a hard drive. And that’s what you need
to bring back.>>Arran: Even if you’re working
just with yourself, right? Like one of the really
useful things for students with version control
is that it deals with a lot of your documentation
that you have to do, right? A lot of the time
if you’re a student, you’re working
on an art project, you have to demonstrate the
development of the art project that you’re working on.
If you’re using version control, you can just look back
in your history and you can actually revert back
to that particular thing without destroying
any of the other content. Grab a few screenshots because
you forgot to do that area and then go back in. And then you look really
organized even if you’re not. So I’m just going to put
push demo text file, submit. And then that has been
pushed through. If we go back over
to our depot section, you can see that new
text document has been added to the service. So that’s now held
on the server as well. So if Victor was
to go onto Perforce, he’d be able to see that that new text document
had been added. And if he pressed
the get latest button, he’d then be able to pull
that text file, add to it, do whatever he wanted to,
are you adding to it? Okay. Yeah. and then he’d be
able to send that back up. Send that back up.>>Victor: I’m working on it. I have to write it
in a commit message.>>Arran: Go write
that commit message. And then once it gets pulled, I can pull it
and I can see the change that’s been made
on my workspace. So, very useful stuff there.
You’ve done it?>>Victor: There we go. Yeah.
>>Arran: Oh yeah, there we go. So, we’ve got a little triangle
that’s appeared over there. You can see, get latest
has now not grayed out anymore. So we can get that. And if I open up
this text document, oops, I did it again. That’s been added to it
and I can see that you know, if I open up the history->>Victor: Show them how to open
the history window, it’s not on by
default, I wish it was. View and then history.
>>Arran: Yeah. Thank you.>>Victor: That’s one of the
first things you should do. The history, the history tab
is super useful cause you can just see through and you can see
the descriptions here listed. So I changed dummy text file
for Arran’s amusement. Yes. Excellent. So again, you can do this
for individual files. So being able to see
what you’re doing kind of for each individual Asset
is very useful. So at this point
we’ve got the workspace set up. All that we need to do now
is actually link up Unreal project with Perforce because by default
it’s going to be off, right? So this is our source
control button. It’s nice and big. By default, it’s going to have
a little red circle with a cross through it to mark
that it’s not there. I’m just going to go to
change source control settings. So what we have
is we have a provider. These are the different options.
As you can see, we’ve got the Plastic SCM
that’s been recently added, so you pick the version
that you want to use. So if we look at Subversion, you can see we’ve got
basically the repo names. So again, that’s just
the IP address with the port number
and the directory name, the username that you’re using, and then the password to
access it if you’re using that. So we don’t want to do that
obviously. We want to be using Perforce
for this one. You can see we’ve got our lovely
IP address listed there. We’ve got my username,
which I’m using and then we’ve got the workspace
that we’re doing. If we open this up->>Victor: And if it’s working.>>Arran: It should automatically
pick it up, if not,
you can manually type this in. And then if you press
accept settings, it should figure it out
and go through and realize it. If not,
you’ve done something wrong. And then we’ve
got this tab here. And this is,
I’m not going to open this, but this is where you can put
in your password. So this means that you won’t
have to open Perforce, the P4V project
when you want to work in-Engine because you don’t need
to have Perforce open. At this point you just need to
make sure that you’re logged in under these source
control settings. Press accept, it’ll say connection
to source control successful. And then you probably won’t see
any particular change straight away. But this is now set up
with Perforce. So if I get,
let’s do a quick demo. Victor, could you check out
just any file? Just pick one for me
and check one out. And we’ll just have a quickly
go over what those individual things
look like and, and being able to identify that.>>Victor: So I checked out
the LandscapeMaster.>>Arran: The LandscapeMaster.
Okay.>>Victor: Master.>>Arran: So if you go to landscape,
we can see LandscapeMaster, you should be able to see here, I’m just going to increase
the size of this so that you can see it.
We’ve got this little blue check with
a little padlock next to it. If we hover over it, you can see
checked out by Victor. So this is telling us
that we can’t work on this file. So if I try and do this now,
just give it a sec. What’s it doing? There we go.
Source control. So you can see we’ve got
the little source control tab right at the bottom. We can kind of refresh this,
but if I try and work on it now, so I’m just going to disconnect
this thing and save.>>Victor: I could’ve picked
a smaller Material.>>Arran: It’s fine,
let’s see what it does. We should get some
conflict come up saying
that the Asset’s checked out so that we can’t
do anything with it. And at that point
you’ll get the option- this doesn’t want to run-
to make it writeable right? So at that point you’re basically forcing
your ability to save it. But that Asset has
not been checked out. Right? So here we go. Okay. Don’t know why
that took a while. We can’t check this stuff out. You can see if I click
on the particular thing that I want to do,
it says who it’s checked out by and the checkout selected
is grayed out, right? So I can’t push this content
back up to the server. I can make it writeable, which means
that I can work on it locally. But that’s not going to be able
to get pushed back, right? Because I’ll need to then pull
your content once you release it and then I can push mine. But at that point,
we’ll get some issues. So I’m just going to – ask me later.
>>Victor: I can revert it.>>Arran: I’m just going
to cancel that. Yep. Nope. Don’t want to save. So yeah,
we can have a look and see.>>Victor: I reverted it.
>>Arran: The content is now reverted. So now I can go in and I
can start editing this stuff and modifying it. Again, it should probably
shouldn’t have done this with [inaudible] It’s fine.
There’s not that much to it. It should be. Okay.
It’s only a bit of a grumble.>>Victor: It’s making
real sure that->>Arran: Yeah, it’s really
double-checking that we’ve got the correct permissions
to access this stuff.>>Victor: We’re definitely
getting a lot of questions. Some of them are really good.>>Arran: We can go through those
while this loading bar is going from zero to a hundred.>>Victor: Alright.
So, we’re pretty much- So how do we version control
Blueprints, and by version control, I mean diff and other things
like peer review says they are binary files
and that makes us cry.>>Arran: Yeah.
So, we’re going to go over some methods
of breaking up your Blueprints. But yeah, this is the kind of, the key problem with working
with binary files, right? Is that you can only have one
at a time. One person having it
checked out at a time, you can’t merge them
back together if you’ve kind of got
multiple different versions.>>Victor: Not automatically.
>>Arran: Not automatically, no. And we have this big problem
with Blueprints where it is code that we’re working on, but you can’t diff those things
or well, you can diff them, but you can’t merge them. So generally what we say
for checking quality is, we have a thing called
shelving inside Perforce, inside Subversion as well.
So you can do the same in that. So if we open up our repo,
you can press, I think it’s control G. So this allows you to shelve-
oh no, sorry. This allows you to find
a shelved file, right? So what we can do is we can
shelve anything that we want while we’re working on it. And what this will do is it will
allow other people to access it. So it does get stored
inside the server, but it doesn’t replace or update
the files for everyone. So if you’re working
on a Blueprint and you want to send it
to your boss first or you wanted to send it
to a friend to check over, but you don’t want it
going into the main project for everyone to be able to pull,
you can shelve that and then once you’ve shelved it,
you press control G and this will give you
a change list number, which you can then send- sorry, the person who needs to check it
can enter that in, that will give them
the access to that shelf, and then they can then pull it
and check it. That’s kind of the way that you can kind of have
your Assets checked over without having it pushed
straight into the source, which again, if you’re working
on like a game mode or something and you’re like, hmm, if I’ve screwed
this up in some way, and I push this, I’m breaking
the entire game for everyone, so let’s not do that. So you can kind of shelve
that content first and then send it over. Again, one of the things
as well is Perforce
has a pretty comprehensive, docs page as well. So if you are looking for
particular ways of setting this stuff up,
you can look it up on there. That looks like
it’s gone through. Okay. So now we have our project,
it’s stored on the server assuming that we’ve pushed
that content over to it. And we’ve got
our local repository and now
we’ve got our little game here. So this is the Advanced
Vehicle Blueprint, but I’ve added just
a few little extra bits so that we can talk about how
you can break up your project. So we’ve got these
little things here that will run away from you.
If you drive too close to them, you can run them over
and squash them. And yeah, they’re fine. They get back up,
they don’t die or anything.>>Victor: There’s no violence.
>>Arran: There’s no violence. Just chasing them down
and running them over and then pop back up again.
So that one tried to attack me, I haven’t
programmed you to do that. So yeah, what I want to do now
is just go over various ways that you can break up
your project to make it less likely that
you’ll run into checkout issues. So regardless of what we do
today you are always, unless you’re working
by yourself, going to run into problems with checkout contention
and just – in fact, even if you’re working on
your own, you’ll run into issues because when I was doing
my own projects I would often check
something out on a PC and then I wouldn’t be able
to access it on my laptop because I’ve checked it out. So you can even run into
checkout issues with yourself. So this will always happen. But there’s
several things inside Unreal that will let you break up your projects
into just smaller chunks. And that way you’ll be able
to have multiple people working on multiple elements
of the same kind.>>Victor: And there are other
reasons why that’s a good thing. It’s not only for collaboration
or the possibility to. Even doing it yourself
can safeguard you for the future if you want to reuse Assets.
There are many reasons why.>>Arran: Yeah, I mean
one particular one is at the behavior
tree level, right? So what you can do is you can swap in and out
Behavior Trees as you go. So instead of having
one massive Behavior Tree that’s doing all these checks, so let’s open up base
just so we can see. So if you don’t know
how Behavior Trees work, they operate going down the tree
from left to right. So whenever we go through this, we have a condition here
that sets to squashed. Just because squashed isn’t true
doesn’t mean that we’re not always checking to see
if squashed is true. Right? So with this
particular condition, we’re checking to see
if we’ve been squashed, right? And we have an abort on both. And what this will do
is when this value changes, it will abort itself. And when these, it detects
a value change on this, it will abort these as well. And that way I can have
this logic be overridden by this logic if I want to. But every time I run
through this, my default state, which is going to just be
kind of wait a bit, wander round,
wait a bit, wander round, right? All this logic is still
being checked, right? Because it needs to check
whether I’m being aborted out. And this is a very simple
Behavior Tree. But you could potentially get
really complex behaviors and at that point you could have
lots and lots and lots of things checking to see if they’re true
or if an enum has been changed or if a particular actor
has been set and all of these things. So you might want to split off
your Behavior Tree into different logic
where you know I’m in this particular
type of behavior, so I only want to run this
particular logic. Right? Sure we could talk
about this another time. I think Wes did
a really good talk on this.>>Victor: He did.
He did a great livestream on Behavior Trees,
but it seems like maybe you’ll have to come back
and do that as well.>>Arran: Well we’ll see. So this content is really good
to be able to break up. Same with Materials as well. Material functions don’t,
as far as I’m aware, don’t actually cost any more
than having the same logic that is just running
on a massive, massive web. So this is our Landscape
Material here. And we’ve got kind of
the Rock Material function and the Dirt Material function
and basically it’s just allowing us
to paint this dirt path. So if I just go in, I’m going to need to
check out as well, I think. This is the other thing
that you should do. Try not to change the content
and then check it out, check out first
and then change the content. It’s quite a difficult mindset
to get into because for a while
you probably thinking, I just work on
a particular thing that I need. So we just refresh it,
then check it out. And that way, we know that we’re not going
to waste any time, right? If I start fiddling
with this terrain and then I go to save it,
that’s the point where it’s going to be like
you can’t save it because Victor’s
got it checked out. So we need to be able to check
that first before you start wasting a load of time
kind of adding content in. So I’ve got this
little dirt path and I can kind of paint it in
and paint it out. So we’ve got some kind of
little bits like that, right? So you can kind of just going
like this and I’ve got a little bit
of extra Texture detail in there that’s allowing us
to control that stuff. So if we go back into our
landscape, master landscape, there we go. All of the logic
that’s happening inside here even though there’s not much,
it’s quite simple, and inside here.
This is kind of exactly the same as if we were to have copied
and pasted that and then done that traditional
landscape layer blend and then we add the particular
things that we need. It’s just cleaner. Right? So that’s the other benefit
as well. Especially when you’re working
with Materials. I see a lot of people when they’re building
mainly Landscape Materials, they use this method
of doing it. So they have their
landscape layer blend and then they have like
five different versions of it for the base color,
for the roughness, for the metal, for the normal,
for the height or for whatever. And really kind of
the Material Functions are so much better for that
because one, they allow you to separate out
each of those Material types. Two, they allow you
to just make it so much cleaner. So you can imagine that instead
of having all of this mess, we would be able to kind of
break it up nice and easy. So yeah.
So I think that covers that.>>Victor: There are
a few more things. We can mention
Actor components. It’s another good way
to encapsulate logic within an object that you can check out
and work on separately. I think the first time I ever
saw that in really large scale was in Conan Exiles
and their player pawn was almost entirely consisted
of Actor components. And that was so that
they had each part of whatever was logic back
and forth to the server. A lot of it is saved data,
sort of what gear you have. And they were all encapsulated into their own Actor components, which allows a developer
to work on stats, another one to work on gear. Another one to work
on the save system.>>Arran: It’s the same. So we’ve
got Blueprint Function Libraries and Blueprint Macro Libraries. They’re kind of,
they have a multipurpose use, so they’re really useful
for sharing logic across multiple Blueprints. So, if you shouldn’t have
to remake the same macro or the same
Blueprint functionality for each individual Blueprint
Asset you’re working on. You can use these in order to
kind of share that logic across, but you can also use it to
reduce your checkout contention because if I need
to work on something, but the thing that I need
to work on is just a function
that I can access through here, I can open it up in the function
library and then work on that. And then the actual core stuff
that’s using it can still be checked out by the people and worked on
and all of that good stuff. Same with Blueprint interfaces. Same with the Gameplay
Ability System actually. That’s another really good one
that just lets you break up that content a little bit more so that you can work
on particular effects or particular actions
as its own standalone thing, which can be checked out rather than
having one massive Blueprint that kind of got control over
all these particular things. We’ve got a few others as well. So inside,
let’s go to the vehicle, inside our Anim component
as well, we also have sub animations
as well. So this has been in the Engine
for a while. It’s a little bit different
from the Anim Blueprint linking, which has been added in 4.24
I think it is. So this is our base
Vehicle Blueprint. You can see it’s got a lot,
a lot of components which is kind of
making up the logic for kind of all of the
hinge components and spring components. But I’ve added this extra sub
Blueprint called overcompensate. And what this will do
is it will just increase the size of the antenna
on the vehicle itself, so we can increase that,
whack it up and get a nice and a nice big antenna
if we want to. Or if we’re not bothered about
that kind of thing, we can set it down
to something a bit smaller. And this is its own independent AnimGraph where again,
I’m just doing a very simple transform of the root
of the antenna here. But you can do
a lot more inside that. And again, this allows you
to have multiple people working on different
elements of the AnimGraph without having any issues
of checkout contention because the person who’s working
on this core one, he’s not having to worry about, or they’re not having to worry
about you know, kind of anything that’s
going on in here. It’s just got the link. So they can carry on
working on any of these Assets. And then whoever’s working
on the sub anim element can carry on
working on the sub anim and that’s absolutely fine. No problems there.
Same with that. So Behavior Trees, we’ve done
a little bit of before. They’re great because they focus
very much on little bits
of byte-sized logic, right? So we have tasks,
decorators and services, and then we have
the trees themselves. The trees can be broken up either by you calling them
inside another tree. So, this one has
a little bit of logic here, so it checks if it’s squashed
as we said before. But it also checks if it needs
to run away from the car or try to and if that becomes true,
then we run behavior. So this is just another option,
right? We can run behavior. This allows us to pick a whole
other tree that we can access. And then that is a completely
different tree that we can go in and we can edit
and we can work on.>>Victor: I didn’t actually know that.
>>Arran: Awesome. Good. Well, I’ve taught
one person something, so yeah,
I’m going to take that as a win.>>Victor: Presentation successful.
>>Arran: So we have this bit of logic here that can run. The great thing about
having this inside here as well is that all of these decorators
are still running and still checking.
So, even though I’m technically working
in a different Behavior Tree, this check to see if the
little critter’s been squashed, is still being run. So it’s still going,
am I being squashed? Or it still has priority over
this secondary Behavior Tree. And then we can also run the Behavior Tree
independently as well. So there’s nothing that stops us
from saying actually little critter
just do this. So it will just always try
and run away, always be running away from it. And it has no other logic
outside of that. Yeah, Behavior Trees
are really cool, they take a little bit
of getting your head around, but yeah, they’re really good. But all of these things,
if I just- let’s just double click on that.
All of these things here. So the decorators,
the services and the tasks are all individual
Blueprint elements, right? So this is the service
that’s basically just doing a distance check
from the player, right? So when it gets activated,
it gets player controller zero and gets the pawn. You know, kind of not
great reusabilitywise, you might run into some issues
with this, but you know, whatever.
Kind of the base, get the character,
get the main player. And then on the tick
which is a controlled tick. So it’s not running
every single frame. It’s running
at a controlled rate. So every single time
this is called, we get the distance
from the pawn to the player and then we’ll just compare that against the minimum value
that we’re setting. If that value is exceeded,
we set our little critter to run and then it starts legging it.
Nice easy logic. That service
is getting called in here. So when this gets activated
that’s running, at the moment
it runs every 0.5 seconds with a random deviation of 0.1.
So it’s much more optimized than actually running
on the event tick. But this is a nice individual
bit of code. So I can be working
on this Behavior Tree, you could be working
on that service and we would have
no issues whatsoever because the two things
are independent, they’re just referencing
one another. Finally, I think
we might have some more. We also have levels as well. So this level is broken up into
just a few different chunks that I’ve done. You can do a lot more. And depending on
how you want to work, you can break up your level but we can have persistently loaded
sub levels inside our Assets. So this is marked,
always loaded. So it’s always in there.
All I’ve done is I’ve separated out
the track from the main level. This means that you can go in
and you can open up- If we go to, I think it’s here,
you can go to track. It’s probably not
going to be lit. So we’ll just go
to unlit for now. You can go to that track
and you can work on this and check it out
and do whatever you want. And I can be happily inside
the master for this getting on with whatever particular area
I need to be getting on with. Generally,
we split by disciplines, right? So game logic, lighting, even particle effects
and kind of effects.>>Victor: Audio.>>Arran: Audio, yeah,
that’s a great one. You split up those so that people
who have different disciplines, different skill sets aren’t
interfering with one another. We also have world composition, which I haven’t got a set up
on here for today. But again, that’s automatically
kind of chunking up your world into different sections
of the world. So you can work on individual
kind of areas and components of that without getting in the way
of one another. And then finally on the levels
thing, we also have, even though it’s kind of
originally intended as an enterprise thing,
we have the server-based Editor. So this is really cool
because it allows you to have one version
of the Editor, which can still have
version control, can still do all of that stuff but multiple people
can access it and then they can
collaboratively work on the same level
at the same time.>>Victor: We did a stream on that,
and if you go back on the->>Arran: Yeah, there’s a
stream on it, check the stream. And then you also had a stream
with Ryan Brucks on it recently where he talked
about some of the plans that we’ve got for how we want to develop
open world and levels generally. What this will do again, go back
and have a look at that stream because every time
he does stuff it’s just like->>Victor: Yeah, wizard.>>Arran: Yeah. But he talks about how
changing world composition to be a lot more freeform
and to allow a lot more people to work on Assets
together with greater ease. I’m trying to think
if we’ve got anything else. I think those are the key
components of different ways that you can, that you can
break up your project. Obviously,
the main thing is just, communication with your team and just keeping on top of it. Just being careful about
how you’re doing it. One of the big things
with Unreal is it will try and check out files
or mark files as dirty that need to be saved and then checked out
when it doesn’t need to. So if you find that you’ve got
a level open for quite a long period of time, it will think, even though
you haven’t done anything to it, this needs to be saved. And at that point
it will be like, you need to check this out, even though you haven’t done
anything to it. So make sure
that you aren’t doing, aren’t just checking it out
just to keep it happy, just revert it
or ignore it or just->>Victor: Uncheck it is usually
what I do. And then the next time
it comes up, you just need to click save
for whatever you want. Anything that was unchecked
will not get saved, and it won’t try to
check it out for you.>>Arran: Yeah. And then on the
checkout contention and merging, we are looking at trying to get
more Assets where it makes sense to be able to actually diff
between those things. At the moment,
we’re still way off having anything like
that implemented. But it’s something
that we’re looking to do and we’re hoping
that we can get->>Victor: I guess we
could show just quickly, the Blueprint diff tool.>>Arran: Yes. yeah. Let’s just-
we’re going to be good. I’m not sure if we’ve got
enough things to diff against, but we’ll try.
This should have it. Okay, cool. So, one of the things
you can do, even though you can’t
actually merge these, you can look at the changes
that you’re creating. One thing that you can also do,
actually I forgot to mention is, you can copy and paste
all Blueprint to text files, right? You can technically merge those.
It’s more of a gimmicky thing than it is actually
anything useful, but because they all detect
literally anything like a node movement change
and things like that. So this is our diff tool.
It doesn’t have much to it because we haven’t got
any differences detected because I built this all
in pretty much one go so we haven’t got a lot to show. But you can see the event system you can also see
the actual graph as well. So you can go through
and you can visually look at the differences
between the two Assets. So yeah, it’s useful tool
for being able to decide. Hopefully you will work in a way
where you won’t need to use it.>>Victor: And this is actually
when I previously had been doing Blueprint reviews.
We would use the diff tool so we would do
what we talked about earlier. So you’ll show the Asset. I’ll do control G in P4V
you’ll tell me what the [inaudible] because you clearly need
to tell me that, I need to review it. I’ll download that and then I’ll
open up the Blueprint diff tool because even though
you’re telling me, Oh,
Hey, I only changed you know, the, the max throttle
of the vehicle. Can I be sure
that that’s all you did? You know, maybe you fat fingered
something or touch something and the Blueprint diff tool will tell you every single thing
that has been changed. And so for me as the person
who’s the gatekeeper and making sure that everything
is working and you know, it’s implemented
the way we want it to, I can then get
a much better idea of what actually happened
even though I trust you. I mean I’m sure
you just worked on the throttle.>>Arran: I definitely just
worked on the throttle. I might have worked
on the other thing as well.>>Victor: And then the antenna is
like three times the size and, yeah.>>Arran: Yeah. So one thing
that might be worth doing is do you want
to do a quick change?>>Victor: Sure. I can do that.>>Arran: Just to show it. Like if you change the Dirt
Material on the landscape, it’s a nice visual change
just so we can see it coming. So I might- at the moment, I’ve got the LandscapeMaster
checked out. But that shouldn’t matter
for Victor, right? Because he’s going to be
working inside the actual function itself
rather than the master. So he’ll be working
in this file here and being able to change
the color of the landscape. Maybe the gradient
that it’s working across. We’ll see how fancy it gets
or probably, we’ll probably
keep it pretty basic.>>Victor: Make it something.>>Arran: But yeah,
this way we can see that. So I’ve got this master file
checked out at the moment. I’m going to just refresh this to see if he’s remembered
to check it out, and he has, so he’s got
this file checked out. I can carry on working on other elements
of this Material if I wanted to. So while he’s working on this I could check out
the rock version. So I’m just going to go
over here, press the checkout, and then I’m going
to open this up and I’m just going to
change the color. What color are you going for? I don’t want anything
too conflicting.>>Victor: Well why don’t
we just make it->>Arran: I’m just going
to go bright pink. Have you gone bright pink?>>Victor: No, I did not go
bright. I checked it in.>>Arran: So I can apply this
change. We’ll just have to wait. Let the old shader compile. And this doesn’t need to be done
for landscapes. You can do this
for any Materials that you’re working on. We’ve got a new layered
Material system as well which this will work
great for because again, you can have
your layered Material set up, which is just referencing all of these different
Material functions each of which can be edited
and checked out on their own whereas the actual
master Material for the Asset can be worked
on individually. What we can also do as well as we could make
an instance of this, and that way we could edit
base things on the instance to just tweak and check. But the actual master itself
you could leave for other people to be able to work on if they needed to actually
develop the Material itself.>>Victor: If you’re iterating there
and sort of you’re trying stuff and I’m trying to stuff, exposing as much as possible
using parameters in the master and then having one instance each that
we can iterate on and compare.>>Arran: Yeah. If you don’t care
what the value needs to be fixed that then yeah, absolutely. Expose that stuff out
to the function. And that’s all good.
So I’m just going to – so we can do like
just a general sync. So we can do that just by
clicking this on the content and that will just
check everything and just start pulling
as much stuff as is possible. This is going,
you’ve modified this package but you haven’t checked it out.
Do you want to reload it? so I don’t care.
So that’s fine. Don’t care on that one.
Don’t care on that one. Don’t care on that,
don’t care on that one. God, I had a lot of stuff
edited though un-checked out. I’ve been bad. Oh, you have to do it at least
once on the stream.>>Victor: I guess so. Yeah.
Is it part of it?>>Arran: It’ll crash.>>Victor: I almost wondered
what we did there.>>Arran: I think it’s probably
because I had too much stuff that I was fiddling with
when I shouldn’t have been.>>Victor: I don’t think
I’ve ever seen a crash from trying to submit before.>>Arran: You haven’t seen me working.
>>Victor: Oh, that’s why. So what about that project? You telling me that’s how
it’s going to be like.>>Arran: You working on dirt, right?
>>Victor: Yeah.>>Arran: So I just need
to reconnect source control because it looks like
it’s lost the connection. So by default you can set it
so that the Perforce text is actually hard link
to go to the particular IP. We know this off
by heart, don’t we? 1.8.62.22.200?>>Victor: You got it.>>Arran: Yes!
We’re looking at Epic space.>>Victor: We still have a little
bit of time for questions before we’re done with
the stream, if you’re wondering,>>Arran: I’ll go to EpicSpace2, oh I don’t know
if it’s going to like that. Yeah. It might be because
we were messing around with it. So you can see we’ve got
this little exclamation mark that’s appeared next to MF_Dirt. That’s indicating
that we need to do a sync and we need to do a pull. So let’s try and do that now
and just see what happens. So it looks like
you’ve changed the color to a hideous code of green.>>Victor: Well, it’s in grass
rather than->>Arran: I’ve never seen grass
that toxic.>>Victor: It’s a full one.
>>Arran: It is a full one. Geez.>>Victor: You didn’t tell me
to make it look pretty.>>Arran: You’re right.
I didn’t, that’s on me. Okay. So we’ll let those shaders
compile and hopefully this->>Victor: I’m not sure what
happened with Incredibuild here. It was working in 4.23. I think I just need
to set it up again.>>Arran: Yeah. This is the other
cool thing I didn’t realize this that
you were telling me about is exposing the FPS count
just in this top corner. It’s a really nice
little extra feature so you don’t have to start it.>>Victor: Yeah you don’t have
to clobber the 3D viewport,
instead FPS counter.>>Arran: Just checked
my LandscapeMaster to see if there’s
anything going on here because we should be
seeing it in green.>>Victor: It’s very green on mine.
>>Arran: Yeah. Just going to refresh the- looks like you’ve got
the LandscapeMaster checked out.>>Victor: No. That’s you.
You got it checked out.>>Arran: It was me?
And why is it- let’s just refresh
and, oh, it’s not liking this.>>Victor: You want to show
them how to revert it?>>Arran: No, I know what’s
going on. So this is the problem with setting up
the same Perforce twice. I’ve got it checked out on P4,
on EpicSpace1 and I’m working in EpicSpace2
at the moment.>>Victor: Okay.
>>Arran: So anyway->>Victor: So no changes
to the LandscapeMaster?>>Arran: Yeah,
so I’m not going to be able to change
any of this stuff. We should still be seeing
this Material change.>>Victor: There we go.>>Arran: So there it is.
The change has come across; it just doesn’t seem
to be propagating. I think it’s because we’ve got
the actual LandscapeMaster checked out, so it’s not able to update
on this on this sub-file. But anyway, one other thing I’ll
just show super quick as well is just what it looks like
when we make a new thing. So we’ve got this little
question mark appears here. This is just saying
what do we want to do with this file that we’ve made? It knows that it’s not
in the depot yet. So what we need to do
is just press the mark for add. You don’t need to do this.
Once you’ve saved it out, as soon as you press the submit
to source control, it should find
that particular thing. So you can see these new
particle systems listed here. So anything that’s got a plus, we don’t need to mark
every single thing for add. So don’t worry about
having to do that. If you’ve got lots
of different files, you can just make as many as you
like and then mass add it. So, we can do that.
And then we can also delete it or remove it
or whatever we want to do. Just take that out.>>Victor: It’s quite
comprehensive and I don’t think
we’re going to – source control can be something
that slows you down occasionally. Right? So we just had
this issue here now, although we aren’t maybe
doing it the most proper way because it’s just
a demonstration, but it’s important to realize that the amount of work
you can lose and the amount of time
that you can save because of the fact that you
have it is always worth it. Even if I work
on my own project, I always keep it on
source control, whether that’s a simple
SVN set up or if it’s a Perforce server
somewhere because you never know when something’s
going to go wrong. And also more
so it’s just sort of like, oh, I worked late one night and then I was pushing
a bunch of stuff, making some major changes and the next morning
I’m like wait, what did I
actually do yesterday. You go back and if you’ve been
detailing your commit messages, then you can just go back
and see what you did.>>Arran: Yeah. That, I mean
it adds an extra step, right? So yes, it’s going to add a little bit
of extra time consumption. You might have to spend
a little bit of time just fixing stuff up, which you wouldn’t have
otherwise had to do, but the gains that you get just are so far in a way
just blown out the water. When I was a younger person,
I did a game and it was done
without any source control. And I would work
on memory sticks, just transferring it across from computer
to computer as I needed. And then once I finished
the game and released it, I went back and I started
working in version control, and then to go back
to that project, I was just like,
how did I work like this with the paralysis
of knowing that if I screw up, I have got like one step back
of revert that I can do. I think that’s something
else as well. Every single Asset
has a history as well. So this is the other
really useful thing, right? Is that we can right click and
we can see the history location. We can just go back to any point
in the pushed lifecycle of this particular thing,
soz if I break it. So yeah,
it’s just absolutely vital. I mean, it’s every single person
in the games industry is using version control, right?
Like, there’s so few reasons to not do it
that you just should.>>Victor: Might be a little bit
of a learning period as most things are.>>Arran: Yeah.
There’ll be a little thing, but actually it’s-
on the front end there’s not
that much to it, right? All you’re doing is just,
all you need to do is add the extra step
of checking something out, pushing something
back in, right? And then that’s all
you’re going to be doing for like 90% of the time. There’s going to be
some very small issues where you might have to resolve
some conflicts or fix up some issues where something’s
gone wrong somewhere. But most of the time it’s just
going to be an absolute godsend that you’ve got this backup
that’s nice and safe for as long as
Digital Ocean is up and running.>>Victor: Which from my experience
it has been very reliable.>>Arran: Yeah. I haven’t had
any issues with it. I’ve had a local Perforce server set up on that
for like five years.>>Victor: I’ve also used
Amazon EC2 servers on AWS. They have a really nice
console interface. I even think there’s
a tutorial on YouTube that’s like a 15-minute thing
on how to set that up. They have a free tier if you’re actually interested
in trying that out.>>Arran: Yeah.
You can mix and match. All of this stuff that
we’ve talked about as well. Like there’s no reason
why you can’t buy a server. You know that, like 800 quid, maybe a grand for like
just a very small personal one. You could buy a personal Windows
based server I think is better for Perforce. Maybe that’s for Jenkins.
But you buy a server, set it up at home,
do the exact same setup, but just doing it
to that particular IP address. Then you’ve got your own little
personal Perforce server set up. You know, there’s no reason
why you have to use Digital Ocean.
There’s, as you said, there’s loads
of different providers that can do that stuff for you.
So, yeah, I mean, there’s a real range of options. I know we haven’t talked about
Git much on this, but Git is again another option, especially if you’re not really
caring about front end artistic or maybe even
some of the design elements where you’re working
inside the Editor. You know,
if you’re working in the Engine, most of the time,
you’re going to want to be in Git, because it’s just
got more Assets.>>Victor: And it can be traditional
for teams to have the programmers who are sort
of iterating on Engine rather than the project files that they actually keep that
on a Git repo. Since it’s easier to sync
and share your pick and pull from the official ones
that are available on Github.>>Arran: Yeah, you can, you can mix
and match your version control’s setup if you want to,
and that’s absolutely fine. So just very quickly as well, I think we might’ve missed
just one or two bits. So with setting up
your P4ignore, you will need
to do a tiny bit of code. So if you open up a
command line and just CD to any workspace directory
that’s got your depot in there, all you need to do
is just P4 set P4ignore and then to whatever file
you’re marking it as. And that way it just knows
that it’s the correct one. A lot of the time it actually
recognizes that automatically as long as the
naming convention is correct. But if for some reason
you don’t want to call it that or you want to call it
something different.>>Victor: I think that step is outlined
in the documentation as well.>>Arran: The docs are really
good on a lot of this stuff.>>Victor: I linked them
in Chat earlier, but they will also exist
on the forum announcement thread
that exists on our forums. I’ll make sure I’ll put all
the doc links there.>>Arran: And also,
because I mean this is- while today we’ve used this
for Unreal, it’s just a generic
Perforce server, right? And you can use this for
literally any content you want, anything that you want
to be versioning you can just push this stuff up.
Once it’s there it’s there it doesn’t care
what you’re putting there. So I’ve just got one last bit, which is just general
best practices. Obviously we’ve been over
splitting up your Assets. So this is just general
good recommendation. There’s lots of different ways
to do this inside the Engine. So Material functions behavior,
trees, blah, blah, blah, all that good stuff.>>Victor: We can share
this deck, right?>>Arran: Oh yeah, absolutely.>>Victor: Cool, I’ll make sure
that I put that up as well.>>Arran: Only check out
the Assets you’re working on. So obviously just make sure you’re staying on
top of that stuff. Make use of ignore files
just to be a bit more selective about how you’re working. One thing we missed
as well as the DCC. Don’t put the DCC on Perforce. That should be on a separate
server, that you can access. For anyone who’s accessing
that stuff, it only really makes sense
to have it for local access. Has the DCC been
ever gone over before? Or DDC, sorry?
The derived data cache.>>Victor: On Inside Unreal?
I don’t think so. No, I haven’t.>>Because it popped up
around 4.22 I think. It’s just like a generic error that was suddenly
with the Engine that’s like, this hasn’t been
set up properly. But it’s really useful. Basically it’s just taking
all of your cached data so every time it has to compile,
if you’re building for Xbox and PlayStation
and Windows or whatever, you have to cook the content
for each of those things. And the derived data cache will
just store all of that stuff and then multiple people
can access it and use it, which means you can
really heavily reduce any compile work
that you’re doing because that compile data was
shared across multiple users. So yeah, don’t put that
on the Perforce server. But that should be going onto
a shared server that is local. At the point where it’s not
local, it’s probably not worth.>>Victor: No, it’s going
to be slower downloading.>>Arran: It will be slow, right? So if you’ve got a mate who’s
working in Madrid or something and you are in England
or America or whatever, then it’s not worth it.
But if you’re a localized team, then it’s definitely worth
setting up because it’ll save you
a huge amount of time. So also it’s not on here
as well, but there’s no reason
why you can’t set up a Jenkins server as well.
So Jenkins servers is automation, which allows you to like just
automatically cook content and deploy builds
and things like that. This is something
that most major studios, if not all major studios have so that they can basically
just cook content, do builds overnight or whatever. Again, you’d need to buy
your own server or pay for server space. But there’s some really
good documentation on setting up a Jenkins server and allowing you
to deploy that content.>>Victor: Is it the one
that also builds for you?>>Arran: Yeah, it does all
your building for you. So it will do a live build. So every time
there’s a change registered, it will do a new build
of your game. So you’ve always got
the latest build accessible. And it can also do a lot
of content cooking as well.>>Victor: I think I’ve used
TeamCity in the past as well.>>Arran: Yeah, Jenkins is just-
it’s not a, that’s just a brand that can do it that I just know
a lot of people use. So yeah, that’s worth doing.
So yeah. Make sure your change lists
are useful. That’s a big one. And just again,
general security, I do not want to tell you
how to secure your server because I’m not
an IT professional or a server specialist
or anything like that. I am very much
on the let’s hack together a little
Perforce server for fun. Make sure that
you’re researching this stuff. But just general little bits
of optional extras that you can do, secure with an SHH, which is basically
just like a big, long key. That means that you’ve got
much more secure passwording on your actual server itself.
So you can set that up. Again, Digital Ocean makes that really,
really easy to do. And then you can also restrict IPS as well,
which is a good idea. Basically means that only people
from set IP addresses will be able
to access your server, right? So if I’ve got
a static IP at home, you’ve got to start
the IP at home. I can add that. And that way only people
from that IP will be able to access it. So it’s just a little way of
securing up your system. But yeah, please,
please, please, please read up
on how to secure this stuff. If you’re putting anything that
has any value to you whatsoever, just make sure that
you’re researching this stuff. And then last thing, right?
UnrealGameSync.>>Victor: This is
not a small topic.>>Arran: This is
not a small topic. We could probably do a
full talk on UnrealGameSync and setting it up to work with
UnrealGameSync. It may not be applicable to you if you’re working
on standard projects. Basically it’s just a nice
middle user interface that acts between
the Engine and Perforce. I think it only works
with Perforce.>>Victor: I believe so. Yes.>>Arran: But what it will do
is it will kind of, it does a lot of cook content
for you. So if you have an Engine build
inside your Perforce repository with streams of the different
games that you’re working on, you can very quickly move
between different streams and then get that content and then have it cook
that content for you. So it’s automatically
just going through and building up the Engine
and making sure it’s working and then running
the final thing. This is really nice
if you’ve got a team where you’ve got some
very technical people and then some people
who aren’t as technical people, who are key artists
who aren’t interested in code and aren’t interested
in any of the techie stuff. They just want to be able
to load up the Engine like they would
with the launcher and just be able to put
their stuff in and work in it. This allows them to just
very quickly access this stuff. It’s got a few useful
other things as well. You can vote on builds. So if someone does a build
and it screws everything up, you can mark it as bad, right? And then multiple people
can mark it as bad and then you can automatically
sync to the last good change, which means that you can have
a load of builds above you, but you know
that they aren’t stable, they’re not in a good state. So you cannot work
on those particular areas and just work on the last
good version that you had. And then it’s got quick links,
you can do Asset tagging and loads
of other stuff like that. So if you are- it does require
a bit of technical know how to get set up, especially making sure
that your Engine and your game content
is all linked up correctly. But if it’s something
that you think will be useful then definitely have
a look at it, we always, always,
always recommend when we’re doing visits
to big studios to use this. And the positive feedback
that we get on it is just immense,
people absolutely love it.>>Victor: If you just look at
the interface and the difference between that and Perforce,
it’s very clear how->>Arran: It’s nice, it’s clean,
it’s easy to use. It’s a bit more simple
to have setup.>>Victor: And to teach someone
how to use.>>Arran: Yeah. That’s good.>>Victor: Alright. We don’t have
a lot of time left, but we definitely have
a lot of questions, so let’s try to move
through them as fast as we can. I thought this question
was funny. I hope they get into
how to save projects with screwed up version control. And it’s a little tricky to know
sort of what’s going on there, like, oh,
I can’t pull it no longer because something’s going on
with the server. But what I’ve come across
in the past is that, something goes wrong and because,
you’re trying to do things that maybe you weren’t
supposed to do and you’re reverting
and rolling back this file and not that one,
someone forgot to check out and they’re
no longer on the team and you don’t really know
how to use the admin, you can always, always,
always take your local copy, set it all to be writeable and then push it back up
on the server again.>>Arran: Yeah, absolutely.>>Victor: And, I’ve had to do it
in the past. It’s not beautiful.
It’s not great, because yes, you will lose
all the history changes, but you know,
if everything fails, you still have whatever was the
last thing you pulled on your PC and maybe what you’ve
come across and said like, oh, I can’t save it
and I can’t check it out because version control is done, just right click the folder
and make it writeable.>>Arran: I’ve found as well that you can have issues with
if you’ve deleted content, but you haven’t done it
the right way that Perforce wants you
to delete content. You can have some
issues with that. So every now and then you’ll
have to redownload a load of content
that you’ve already deleted and then manually mark it as
for delete and go through
and remove that content. So yeah,
there’s absolutely loads of ways that you can screw up
your Perforce, but it’s->>Victor: Also loads
of ways to fix it.>>Arran: Yeah, there are
a lot of ways to fix it. You’ve got, you’ve got
all the history. A lot of the time it’s just
about picking a thing, right? It’s about choosing between
one or multiple versions of a particular thing that is
in conflict with the other. And a lot of the time
you just resolve it by picking the thing
that you want and then it’ll go through
and it will sort itself out.>>Victor: Let’s see. So I know
we’re getting into something that might be a little bit
above our knowledge here, but, when distributing
a custom Engine build to artists and developers we currently use
Perforce streams, and he’s mentioning
that they have some limitations, like not being linked
to the launcher. Is there a way to distribute
Engine builds to developers that retains launcher
and Marketplace integration? As far as I know,
my custom Engine builds actually do show up
as an option in the launcher, but I don’t know if
the Marketplace ties into them. However, I almost never ever, ever pull down
Marketplace content straight into the project
that I’m working on. That’s not a good workflow
because there’s probably a lot of stuff in there
that you don’t want. And if you do that on Perforce
it’s just going to go, oh, look at all these new files. Do you want to push them?
And you might->>Arran: So I don’t know
what magic you set up, but mine doesn’t show Engine,
but it does show your project. So, your project should- the launcher
should detect any projects that are sitting on the computer
and it should display them so you can access them
through that way. And then you can load up
your project from there. Just not the particular Engine.>>Victor: Yeah. Or pushing the
plugin or the Marketplace Assets, the way I always have a project
I called Marketplace migrate and I have one for almost
every Engine version and I will just usually
leave it in there. I mean, it’s also cached
in the vault. So you can actually
delete it from the vault and then just keep it in that
project or in a hard drive.>>Arran: I always have to do
a bit of Marketplace cleanup. Not necessarily because
the creator has done it wrong. A lot of the times, it’s just
because they’ve done it differently
to how I like the setup to be. So I do the same thing. I just put it into
an empty project folder, I sort it all out
and then I migrated it over to the particular project
I’m working on.>>Victor: Yeah, and you might
not want all 300 different kinds of chairs that came with
archviz pack. Right?
You might just want one. And then trying to keep
your project less bloated will also save you space
on the server, takes less time. If someone new comes
on the project, there might be
a much quicker pull. Is that – I think they’re
mentioning the UDN license, if it’s a custom license
on the Unreal side or on the Perforce side. It’s on Unreal on Epic side.
You get that license with us.>>Arran: Well, yeah, so you have
to have a license for Perforce if you’re using more than five
users, that’s just Perforce. But if you want to access our-
we have our own server of Unreal builds
that you can get access to. So if you want to get access
to those, and at that point you have
to get a custom license. If you want to do that,
we’ve got a link on our website where you can go if you’re interested
in becoming a custom licensee. Obviously, we don’t discuss
terms face to face. You have to sign an MNDA first. But if you’re interested
in doing that, then definitely reach out to us.>>Victor: Yeah, there’s
plenty of people.>>Arran: Because kind of,
we do all that stuff and, yes, it can be so useful. The things that you can get
from having a custom license are massively,
massively beneficial.>>Victor: Is Perforce centralized
like Subversion? Yes. But you can also actually
do a local depot. That’s, I think the other one,
the personal option when you set up your log in.>>Arran: Yeah, so if you open
up P4V, I’ve just closed it. You can set up the P4D,
I think it’s called, which allows you to establish
a server on your own computer.>>Victor: Okay. I haven’t done it.
I just know that it’s possible.>>Arran: No, I haven’t done it. So yeah, you could set up a
personal server access as well.>>Victor: Yes.
There’s a local helix server.>>Arran: Yeah.
And then you can just remote on.>>Victor: How do AAA studios
manage source control without merging Blueprints then?
All you’re going to have is conflict
all around your branches. I guess we didn’t talk too much
about branching mainly because as far as we know here,
internally, we mostly work with streams
because of the fact that they can have
interdependencies between them. We, and so in that regard,
when I’ve been on a larger team, what we do
is that we essentially never work
on the same Blueprints and we try to split up the work
as much as possible. Right? And you’re owning a small
section of the larger framework.>>Arran: So, yeah.
So what a lot of people do is they’ll have
just a rule in place and this will either
be just a company wide rule or it will be
an extra piece of software or an extra piece of logic. That means that
if you have branches, and you are working
across branches, any binary files, if they’re
checked out on any branch, they’re checked out
on all branches, right? So at that point, any binary file is basically
can’t be branched right? You basically are working
on the file for it. And you can have branches
of code within that, but anything that is binary will
not adhere to the branch rule.>>Victor: So if you have
several programmers that are going to need to
work simultaneously on something, Blueprints might not be the
right choice for those objects and you might want
to do it in code and then just expose
whatever you need to the designers or artists.>>Arran: Yeah, branching’s
a really tricky one. I mean, I don’t think
we really do it Epic anymore. I mean Fortnite is a very,
very, very big game. We have a-
you should look at Ben Marsh did a talk on how we operate
on Fortnite. Definitely worth watching
if you haven’t already. And I think he does
briefly mention a robomerge.>>Victor: Yes, he does.>>Arran: Which is the internal
tool that we have for managing those particular
potentially issues.>>Victor: I’m
going to link this. I’m glad you mentioned it
because this is a literally->>Arran: It’s a really,
it’s an amazing talk generally. So you should definitely go
and watch it. Even if you’re just interested
in games development generally rather than actual
Perforce.>>Victor: The talk is called tools
and infrastructure for large teams and he goes over that.
So I’ll make sure I’ll put that in the forum announcement
notes as well.>>Arran: But I think everyone
runs into these issues with Blueprints
and needing to branch out. And I think people are starting
to just work around those. They’re very difficult
things to do. It’s like a Texture, right? It’s like, would you open
up both and then just paint out which bits you want it
to keep and not keep?>>Victor: That’d be tricky.
Let’s see. We don’t have time. We’re definitely not going to go
through all of these. We’ll have two.>>Arran: I talked for too long.>>Victor: No, it’s good.
It’s all good knowledge. But there’s definitely also
a lot of questions, which is good.
It means that this is a topic that needs to be addressed
and talked about. Some of them we can try to follow up
on the forum afterwards.>>Arran: I’ll jump on the
forums.>>Victor: Let’s pick two more and
then I’m going to have to round up. As a tech artist, what sort of version control
work do you tend to do?>>Arran: Okay. I mean my general workflow
is sticking inside the Engine. So I never work on code stuff, so I’m always doing
either Blueprints or shaders or basically my remit
kept on expanding to basically include anything
that’s inside of Unreal. Even though I’m a tech artist,
I still do a lot on Behavior Trees
and AI and stuff like that. So yeah, for me, version control
is just a way of keeping backup of my work
and going through it. A lot of the time I’m working on
my own on particular projects. So I’m not using it for working
with lots of people. I’m using it as a,
as a personal device for just keeping
my work backed up and for being able to go back
if something ever goes wrong. I like to use it to just go down
a particular thought process. So I’ll be doing things
in a particular way and I’ll be working
on a particular demo or a particular prototype
or whatever and I can go quite far down
a rabbit hole and realize that it’s just
the wrong way of doing it. And at that point
I’ll just revert back and start going down
another path, which again is branching. But because I’m working
on my own, I don’t need to worry
about that Avenue so I can just
make that decision.>>Victor: There are a few questions
about why not using Git LFS since that is available now,
it’s the Git large file system which allows you
to do large files. You still can’t check out
as far as I know.>>Arran: Yeah, Git still
doesn’t->>Victor: Yeah. There’s just
some fundamental problems there when you were working
with the file types that we have in the game Engine. You can, you just need to pay
a lot of attention to what’s going on
in the project and who’s doing what and when.>>Arran: Yeah.
If you’ve ever worked with just Git as an artist on a team,
you’ll very quickly understand why it’s just not workable. People end up having to have
just these mountains of post it notes where it’s just like, okay, if I have the hammer post
it note, that means that no one else
can work on it and you have to go to the board
and take like the- it’s an archaic way of working
and having checkout is so useful for people
who are working on binary files that you can’t work
any other way.>>Victor: Trying to grab this.
There were some really nice questions here
in the end we can talk about. Do I have to check out every
file again after I did a commit? Not unless you don’t
want to work on it again.>>Arran: You only check it out
when you’re working on it. Once you’re done with it,
you push it back to the server and then it’s locked again
until you want to access it. You can always access
all the files. You know, there’s no point
at which you can’t see it. Even if it’s been checked out
by someone else. It’s just the case that you
can’t actually do work on it.>>Victor: Cool.
I think that’s it. We’re almost at
the two-hour mark. Almost.>>Arran: We’ve been talking
for two hours?>>Victor: Technically there is a bit
of the news and intro as well, which is about four
to seven minutes, but we definitely been here
for quite some time. Arran, thanks for coming,
showing up all of these things. We will be back next week and we
actually have Pasquale Scionti the lead designer who helped Epic out on our Ray Traced
Archviz sample that you can get
on the learn tab. If you want to get a little bit
prepared and check that out, you can do that
before next week’s stream. He’s going to be calling in
from Florida and talking to us about his thought
process behind the project and how he made such an incredibly beautiful
looking scene.>>Arran: It looks stunning.
>>Victor: It was not him alone but he definitely had a big
a big impact on the project. As always, make sure you
check out our Meetup pages. We got user groups
all around the world, some of them where you can
find Arran, hopefully me this year.
At least that’s the plan. Make sure you submit everything
you’re working on to us. Let us know what you’re doing. You might be featured
in our community spotlight. Count down videos. We just got
another one actually just today. Very happy. We’re probably going
to be playing it next week. Take 30 minutes of development,
speed it up to five minutes, send that into us together
with a separate logo. We will composite them together
and your game might be featured as a countdown on the stream. As always, follow us
on social media and blah, blah, blah,
blah, blah, blah. Going through all the things
there trying to make it not hit the two-hour mark.
Also remember the transcript. If you had an issue hearing
what we said or specifically
what we were talking about or even
if you wanted to find something that you remember
we talked about, but during these two hours you might not know
where in the stream they are, you can go ahead
in a couple of days, we always upload
a transcript file in the YouTube description. You can go ahead
and control F that and the timestamp is right there
and you can go ahead and find a section of the stream
where we talked about revert or branching
or streams or merge or shader. So you know, you name it. And as always, I’m not going
to forget to tell you that you should fill out
this survey that we have. Let us know what you want to see
in the future, what we did well
or we didn’t do so well. Maybe we should
have made bigger blobs instead of squashing the blobs. Anything you want to
point out to us, we always want to know
what you think. So please let us know. And then until next time,
Arran’s here, because you’re
definitely coming back. I think we had a great time.
>>Arran: Oh yeah definitely. People have asked for me
to do some shader stuff.>>Victor: You’re going to come
here and you’re going to do some shader stuff. Yup.
And possibly it might be even been
in an exciting project later. Yeah, we’ll see. And that’s it
for today, everyone. Thanks for sticking around. If you’re here
for the entire time, we will see you next week.
And until then, have a great time
and happy development. Bye everyone.>>Bye.

11 comments

  1. Git does support check-out with git-lfs and there are paid options to increase storage for your project. It doesn't cost much, for example github offers 50 gb for $5.

  2. A BIG thumbs down, if you really was going to talk about everything Unreal then you would mention the one thing that is the reason Unreal is alive today, That is Unreal Tournament and when ever is it going to get finished!!!.

  3. Is there a way to connect projects in one game other than redoing all of the blueprints. I would like to go to another project like going to another level does anybody have any suggestions

  4. Maybe someone will find next interesting: the Kimsufi offers a cheap servers (1-2TB storage for 6-10EUR/month), the self-managed Bitbucket server for 10$ for 10 users (one-time payment, 1st year updates) or the Gitea (it's free and looks like the GitHub).
    The Perforce is free for up to 5 users and 20 workspaces (but it seemed strange to me after the git, maybe I'm not used to it).
    Of course, all this will require some initial Linux admin (or DevOps) skills. But I think a novice can deploy it with the Google and "how-to"s for a pair days.

  5. What was that brief mention about needing a Static IP for game development? Where can I find more information about that?

  6. The Marketplace has a plugin called GitCentral which basically works like a centralized VCS like Perforce within the Editor while allowing programmers to use the standard git workflow for code. Also, Azure DevOps offers virtually infinite LFS space and is free for 5 users.

  7. I would like to know more about Plastic SCM. From what I read it seems to be superior to both Git and P4 (and of course, SVN)

Leave a Reply

Your email address will not be published. Required fields are marked *