Hey Ben,
Sorry this is a bit of a thread resurrection. I've been using the two step save/load mechanism that you describe and it has been working great the last few month. I noticed after the jump to 4.8 that when I serialize the records over top of my created actors as the final step that my dangling pointers no longer hook up correctly. Were there any changes that you guys had to make based on the thread safe Serialize effort that came with 4.8?
Announcement
Collapse
No announcement yet.
[Twitch] Fortnite Developers Discussion - Apr. 17, 2014
Collapse
X
-
MattyCakes repliedHey Demolition Man,
Thanks for the info. Yeah, I've already been working with the Mixamo crew. Exciting stuff coming down the pipe!
Leave a comment:
-
Demolition Man repliedBilly,
Thanks for the fireside chat last week! I just wanted to pass on to you that I have been doing some work with the folks over at Mixamo and they were very happy to hear Matthew's comments on their animation website. Simply put, it made their day! I can tell you that they are very interested in putting together animations or an anim set that works with the Unreal engine. If you or Matthew is interested I can give you a contact at Mixamo to help make this happen. Just send me a private message.
Leave a comment:
-
FrankieV repliedOriginally posted by Evenios View Postonce again BORING seriously why isnt anyone listning to the fact that a livestream of the unreal engine should show actual ENGINE FOOTAGE!
1) Women.
2) Zak after consuming vast amounts of alcohol
P.S. Women of course just to get the female perspective on gaming in general.
Leave a comment:
-
gregdumb repliedThanks for all the awesome Q&A-ing guys. It's really nice that you aren't just leaving us to figure the engine out for ourselves, getting these tips straight from the devs is great. Looking forward to the next stream!
Leave a comment:
-
MieszkoZ repliedHi Kain,
Originally posted by Kain Shin View PostCan you go over the workflow for Navigation in terms of...
1) What options you have available for marking paths as walkable/unwalkable/walkable to some but not all
When supporting multiple agents types you can also consider using multiple navmesh instances.
Originally posted by Kain Shin View Post2) Dynamic links, such as rotating bridges and elevators?
But that's not what you're askingRotating bridges or elevators could be supported by simply rebuilding navmesh at runtime. Of course done when the bridge or elevator stops moving. Navigation on platforms at move is not supported at the moment, but I imagine the low hanging fruit solution would be similar to what we did in Bulletstorm where we simply had a separate navmesh instance hard-attached to the platform. No worries, super cheap memory-wise
Originally posted by Kain Shin View Post3) Dynamic obstacles, such as moveable and destructable blockades?) is a fast-navmesh-generation open source lib. Our modifications made it even faster to the point where runtime building of big navmesh chunks is not a CPU killer, and Fortnite takes a full advantage of it.
Originally posted by Kain Shin View PostHow much of the navmesh workflow and featureset has changed from Unreal3?
Originally posted by Kain Shin View PostAre you still able to insert use own heuristic functions into the pathfinding mechanisms?
Originally posted by Kain Shin View PostI found that really useful for "finding a position to shoot projectiles from when the player is off the navmesh".
Originally posted by Kain Shin View PostI was wondering how much of my old UE3 usage patterns would remain the same in UE4.
Cheers,
--mieszko
Leave a comment:
-
Ben Zeigler repliedHey everyone, glad you enjoyed the stream. I'm Ben, and I'm one of the tech leads on Fortnite. I thought I'd chime in with a bit of extra detail on a few of the questions Billy answered, I think he did he a pretty good job eh?
Question: How many physics objects do you have in a typical game scene? Do you do anything to speed up physics usage (i.e. consolidating objects, tweaking sleep states etc).
Each of the building pieces (a wall, a floor, etc) is one actor, with one static mesh component so they stay really cheap. We use network dormancy to keep them cheap for replication, if you run the command SetNetDormancy you can put an actor to sleep for the networking system, and if you use SetActorTickEnabled you can put it to sleep for the tick system. Then, whenever the player interacts with a building piece we "wake them up" and spawn various additional components on demand. This keeps things cheap in the default case, but lets us make the entire game world interactive.
Leave a comment:
-
Ben Zeigler repliedOriginally posted by Kain Shin View PostCan you talk about the Save/Load pipeline for UE4?
Do all Actors have unique GUIDs that remain consistent between sessions for the purpose of serialization tagging?
Would users of UE4 write their own save/load mechanisms or are there stubs that users can build on?
For fortnite, we assigned each of our objects that we wanted to save a custom GUID, but other UE4 developers have used a similar system using just the object's full path, as that should stay the same. So, you have a system to identify an actor uniquely. Then, we're using a system built on the SaveGame property flag to actually serialize the actors. If you set the ArIsSaveGame archive flag on an archiver, it will only serialize properties that have that flag set on them. Some of the basic properties are set this way in the engine, and you can then tag your game specific properties.
So, you need to set up a savegame archive. For fortnite, we're using a proxy wrapper based on the Objects-as-strings proxy wrapper:
Code:struct FFortniteSaveGameArchive : public FObjectAndNameAsStringProxyArchive { FFortniteSaveGameArchive(FArchive& InInnerArchive) : FObjectAndNameAsStringProxyArchive(InInnerArchive) { ArIsSaveGame = true; } };
Code:ActorRecord->ActorClass = Actor->GetClass(); ActorRecord->ActorTransform = Actor->GetTransform(); FMemoryWriter MemoryWriter(ActorRecord->ActorData, true); // use a wrapper archive that converts FNames and UObject*'s to strings that can be read back in FFortniteSaveGameArchive Ar(MemoryWriter); // serialize the object Actor->Serialize(Ar);
Code:AFooActor *NewActor = GetWorld()->SpawnActor<AFooActor>(ActorRecord->ActorClass, TempVector, TempRotator, SpawnInfo ); FMemoryReader MemoryReader(ActorRecord->ActorData, true); FFortniteSaveGameArchive Ar(MemoryReader); NewActor->Serialize(Ar);
Leave a comment:
-
Bajee repliedBilly, thanks a lot for taking the time to write such detailed answers and for answering my questions. The livestream was very informative and enjoyable. You all seem to have a great time at Epic. Working at such a cool place sounds definitely enticing. I still have to finish up my masters though
Leave a comment:
-
Irascible- repliedAh, so many other replies in the meanwhile too! You all are fast! Thank you for all the nice comments everyone, we really enjoyed ourselves. Ever since you encouraged him, Matthew has just been practicing even more dad jokes, and he, Cameron, and I all share an office, so thanks a lot for that...Cameron has also been fulfilling his promise of providing no updates on his newly formed twitter, so I admire his dedication to his cause.
Evenios, I'm sorry the format wasn't your cup of tea, but I will pass along the feedback that some people might prefer some visual aspects too. We're not always going to be able to make everyone happy, but we're always open to suggestions for how the livestreams would work better for the community.
Leave a comment:
-
Irascible- repliedOk, whew, I tried to go through and answer most of the original round of questions to the best of my ability. The answers overflowed the amount of space a post allows, so I had to split things up. Thanks again for everyone who participated!
Leave a comment:
-
fighter5347 repliedOriginally posted by Billy Bramer View Post
As mentioned on the stream, I believe our artists want to actually do some kind of follow-up content going into stuff like this in better detail than my programmer-self could ever provide. Not sure on the time-table on that, but I'll sync up with them again. I expect we'll probably do lots of Fortnite-related content stuff as we get further along with the game.
Leave a comment:
-
Irascible- repliedPerformance/Optimization Questions
Originally posted by joessu View PostPerformance: What is your target hardware and how has it been working with UE4 to target it?
We basically approach things from the "don't do things that are obviously so bad for performance this game can't ship," but we're not down into doing tons of targeted, specific optimizations just yet. We keep tabs on performance trends of builds of the game over time so we know if we're veering off course, but as we're still pre-alpha, we're very much still in "make this game as fun as possible" phase. In the future, we'll definitely be doing perf./optimization passes specifically if we spot problem points. So far, working with UE4 for a PC game has been fantastic overall.
Originally posted by Alexarg View PostAll you can say about the problems encountered working with big open scenes in relation to UE4, If so, In what way solve these problems? advice would be welcome.
thanks
Originally posted by zoombapup View PostQuestion: How many physics objects do you have in a typical game scene? Do you do anything to speed up physics usage (i.e. consolidating objects, tweaking sleep states etc).
Tutorial/Demo Questions
Originally posted by xgalaxy View PostWould you consider creating wiki articles and/or video tutorials on some of the more interesting blueprints you had to create for Fortnite?Originally posted by TheJamsh View PostMy question: Will the game ship with editor functionality, so we can see the goodness ourselves?
Fortnite Questions
Originally posted by Bajee View PostHow many people are working on Fortnite? Are there more coders or more artists?
Originally posted by xgalaxy View PostWould you consider releasing Fortnite on Amazon Fire Tv?
Originally posted by szyszek View PostWhat about split screen? Do you guys plan to provide some support for local coop games?
Misc. Questions from the Stream as I Remember Them
How would you recommend learning C++?
One thing I would say is that if you want to be serious about programming in general, it pays to learn a lot of the basic concepts of computer science and programming paradigms, entirely agnostic of a particular language. Once you have a solid foundation, I've found it becomes much easier to pick up any one particular language, because then you roughly know what you're trying to accomplish, you just need to learn the syntax/idiosyncrasies/way of doing things in that language. I like to say an experienced programmer can probably swap to a new language and produce a working program pretty quickly, but it still takes some time to learn a language in a way that you can appreciate everything it has to offer and how to program specifically in that language. Personal example: I knew C++ well before I was exposed to C#. I was able to make a C# program that ran and did what I wanted within a day, but it was still very much from a C++ programmer's mindset. If you already know another language, there are often lots of online resources you can search for like, "C++ programming for ____ programmers," where you'd sub in the language you know.
For context, my personal learning path with all this stuff was me fiddling around with programming in high school on my own, taking some courses in high school (I think in PASCAL?!), and then studying computer science in undergrad, before going on to grad school. In undergrad, we did a lot of C and Java, with only a little C++. I mostly self-taught myself C++ from reading various websites and books in undergrad and then learned a lot more/had knowledge reinforced in grad school by excellent professors. In terms of language references, I learned C from the K&R book, which is super concise and considered *the* book about C: http://en.wikipedia.org/wiki/The_C_Programming_Language , and I learned a lot of C++ from the Stroustrup book (http://en.wikipedia.org/wiki/The_C%2...mming_Language), but as mentioned on the stream, it is very thick and can be quite dry at times, so I'm not sure it's the best intro book. If you want a super technical manual all about C++ though, it's a great source.
One final point I'd make here, if you're learning C++ or programming for the first time, don't set yourself up for frustration by jumping right into making a massive AAA-game right from the start. It's important to learn the basics of programming, how things work, etc., and it's easier to do that with a simple project first. Once you have the foundations under your belt, the rest will come. Again, from my personal experience, my first ever "game" was tic-tac-toe. I worked my way up to pong, simple maze games, etc.
Last edited by Irascible-; 04-19-2014, 06:37 PM.
Leave a comment:
-
Irascible- repliedEngine Questions
Originally posted by joessu View PostNetworking: How has your experience been with networking? Using Blueprints? Code?
Specifically re: blueprints, I've been blown away by how the engine team was able to expose networking functionality directly to blueprints in a way that is fast and usable once you know the concepts. I actually just did a 6-part tutorial on doing networking in blueprints that you can check out here: https://forums.unrealengine.com/show...-Videos-Posted As mentioned in the stream, definitely want feedback on these, ways to improve, etc.
For Fortnite in particular, because we have so many actors at once that are potentially relevant from a networked standpoint (enemies, players, tons and tons of building pieces), we actually are also using a new network optimization called network dormancy, that effectively lets us manually put various actors to "sleep" and wake them up for updates in our game. That one is definitely more of an advanced feature and something that I would expect the vast majority of games to never need to even worry about, but it is another new thing in the networking space.
The documentation and engine team are hard at work at putting together the C++ documentation for all of these networking topics, so they should be coming soon. Once they're out, if there are still questions or concerns re: C++ networking, hopefully we can follow-up and get some specific tutorials in that space too.
Originally posted by Bajee View PostDid you have to dig deep into the engine and modify things or are you using mostly a vanilla version?) things, areas the workflow isn't as fast as it should be, and so on. Fortnite's development has yielded numerous feature requests/improvements that wouldn't be obviously needed until a game team was using the tools directly.
From the game side, we benefit tremendously from being able to work directly with the engine team. They can help us optimize things, figure out the best ways we should be doing things, answer questions, add new engine features that would help our (and others'!) game development, etc. It's very neat to be able to be like, "Hmm, I have a question about how engine feature X works...I'll just go ask the person who wrote it!"
On Fortnite, any time we add a new large gameplay feature, we always try to view it through the lens of "is all of this feature specific to our game?" If not, we try to intentionally split stuff out that would be useful for other developers and work to get that put right back into the main engine. Fortnite has been pushing RPG-style mechanics more than past Epic titles, so as our systems develop and mature for that, we've been moving or requesting pieces to the engine (example: the CSV/spreadsheet importing stuff mentioned in the stream). We tend to integrate the main branch and Fortnite branch at least once a week, so anytime any Fortnite developer modifies something in the engine, it comes back to the main branch within a week or two.
Originally posted by Kain Shin View PostDo you guys make much use of Archetypes on Fortnite?
Does the archetypes system still exist?
If so, do they cause problems when properties within Archetypes change for instanced Actors placed in a level?
Originally posted by szyszek View PostCould you also describe whole Worlds mechanism? Why does GetWorld() function not always return game world while play testing in editor?.
Originally posted by Kain Shin View PostCan you go over the workflow for Navigation in terms of...
1) What options you have available for marking paths as walkable/unwalkable/walkable to some but not all
2) Dynamic links, such as rotating bridges and elevators?
3) Dynamic obstacles, such as moveable and destructable blockades?
How much of the navmesh workflow and featureset has changed from Unreal3?
Are you still able to insert use own heuristic functions into the pathfinding mechanisms? I found that really useful for "finding a position to shoot projectiles from when the player is off the navmesh". I was wondering how much of my old UE3 usage patterns would remain the same in UE4.
Originally posted by Kain Shin View PostCan you talk about the Save/Load pipeline for UE4?
Do all Actors have unique GUIDs that remain consistent between sessions for the purpose of serialization tagging?
Would users of UE4 write their own save/load mechanisms or are there stubs that users can build on?
Originally posted by b1nary View PostAs someone getting used to the new(er) workflow in UE4, my question is:
How do you guys suggest approaching a workflow in UE4 for creating a game? How did you guys approach it?
The generic answer here is we tend to brainstorm/design up some ideas we want to try and then go about prototyping them. When it's early and we don't know if something is going to be successful or not, we just piece things together with the bare-minimum prototype assets necessary to convey the idea and get people testing it, so we can iterate on feedback. It doesn't need to look good, it just needs to work enough that we can tell if we think it's fun or not. If you're starting at the very, very beginning, it's really important that you test and iterate on whatever the core mechanic of your game is going to be and make sure it is solid/fun, because that's the foundation everything else is built off of. There's definitely a temptation to start adding tons of features, mechanics, shiny art, etc., but if the core mechanic can't hold up, you're going to run into problems down the road.
The really important part of making a game that people tend to ignore or don't want to face is that you need to be willing to work really hard on a feature and throw it away when it's not working. This is why we try to do prototypes without committing full art, effects, etc. when we can avoid it. The more resources devoted to something that gets thrown away, the more expensive it was to make. Sometimes you iterate on something a lot, try everything you can think of, but when you sit back and look at it, the feature just doesn't work in the game for whatever reason. Maybe it's just not fun, it's too confusing, it doesn't fit in with the rest of the game, etc. You need to be willing to toss it in the dumpster for the good of the game, which is something that takes getting used to, especially when you're really invested in a particular feature.
When we have something we're pretty sure is fun and want to move forward on, that's usually when we start involving the art team. Depending on what it is, a concept artist might draw up what things should look like, send it off to a modeler to actually make in 3d, etc. We'll hook the art up, make the code or script more solid and shippable, etc., and move on to the next thing.
If you're meaning specifically how to start the framework of a game in UE4, that's probably dependent on your team composition and size. For Fortnite, we have a good mix of artists, designers, programmers, etc., so we tend to split things up where it makes the most sense for us. Our engineers start making custom C++ classes based off of the engine framework ones (game mode, etc.), designers/artists might prototype out some things we might want to try in blueprints, etc. A smaller team w/o programmers might just opt to start things in blueprints. It really depends.
If you can clarify your question a bit, maybe I can give you a better answer instead of this rambling mess of answer.
Leave a comment:
-
Kevin.Soares7 repliedAwesome stream guys! I found it Hilariously entertaining! Was playing it side by side while working with UE4
Leave a comment:
Leave a comment: