[Music] excellent wow this is a much larger turnout than uh I would have ever expected when I drafted this so how's everyone doing um thank you all for coming to the talk today I'd like to take a quick second to remind yall please turn off your cell phones um it's it's uh very interrupting when all of a sudden you hear Baby Got Back in the middle of one of your conference presentations um also please too please make sure to fill out the um the little surveys they give you guys it's uh one of the only ways I know how bad I screwed up my talk during GDC and that's important for me to grow as a speaker so um for those of you filtering in we got a couple seats here in the middle and um please look to the the people in the yellow shirts and they will direct you where to go so with that let's go ahead and get going because we got a lot of stuff to do so hello everybody my name is Colt McCanless and I am a programmer at bonfire Studios and uh when I'm not working too hard there I'm also an adjunct professor at SMU Guild Hall school for video game development where I teach various things like physics and uh multi-threading and all those fun things
and um before it was closed down in January of this year I was a graphics programmer at Microsoft Ensemble Studios now for those of you who had seen uh previous Ensemble talks uh you know that there's usually one guy stuck in a basement for about 3 years whose entire job is to work on terain and whatnot uh fortunately when I was hired there they said hey guess what you're that new guy so which isn't all that bad it gave us a chance to uh work on some new things and we got a chance to to uh bring up this Nifty talk so before we get going today I just kind of want to do a little survey of who's in in the room so I kind of know if I should skip over things or whatnot so uh let's start with artists please raise your hand you get a prize after the show um I don't know what it is yet but we'll get it uh designers you he got your prize already sorry um non- artist non-programmer non designer so Media or Administration uh a couple of you guys excellent so programmers then everybody else I'm imagining all right yeah
did I not expect that um so for for the for those of you who are programmers uh let's see your hands again if you've actually implemented a height field terrain before okay interesting subset of that and for those of you who've implemented that um how many of you have actually made an RTS game um okay interesting well don't worry um like I said ensembles is closed down so we're not really competitors don't don't tell anybody that so anyhow let's uh let's get two things so we started prototyping the uh RTS on a console idea in around 2004 2005 and we finally got around to the fact that it was far enough along that in early 2006 we said hey let let's just go ahead and scrap what we were working with and uh start a brand new engine from scratch on the Xbox 360 up until this point we had our prototypes working on uh the age3 engine working with the controller uh had some different builds and whatnot but we really said we had to hunker down now anytime you start from scratch and you build some new technology you kind of have to have some bullet points and some guidelines and says you know here here's here's what
we're going for so when we created the the engine we said first off we need to make sure that we're taking control of the hardware to create new visuals we didn't want anyone to think that when this game shipped that it was a port of any PC technology to the 360 or that later on they said well that looked okay but you could do all that on the PC no we wanted every frame of our game to scream Xbox 360 at you and I guess uh you guys can tell us whether or not we succeeded at that but at the time this is our goal the Second Step was we wanted to make sure that we took advantage of the hardware on the performance side of things so that our simulation can take advantage of it this meant going back and revisiting some things like our simulation to say hey you need to take path finding and put it on multiple cores or your animation update and put it on multiple cores and this was kind of different because this was actually the first game that Ensemble Studios did that had multiple processors they had we had done a little bit of success with it in the past but never to the degree that we were working with on the Xbox 360 and finally we wanted to make sure that anything we were contributing to this new engine and this new technology
actually was pushing the genre forward so the RTS space is actually a pretty small niche of of the gaming community and we wanted to make sure that no one came back and said oh well they could only do that because they were on the 360 and it was the Halo IP no no no no no we we wanted to make sure that sooner or later someone down the line they would go well hey you know this was a really cool thing that no one had done before and they did it in Halo Wars let's go do it again so I actually get this question from a lot of people and when we started the prototyping I got this question from management a lot they said why did you want to make new terrain I mean honestly for most video games after there first-person shooters included uh terrain is not really a huge part of your visual space but for rtss you have to understand that it's a massive part of your visual area up to uh 70 to 98 even 100% in a lot of times of your visual space so for us we had the decision early on we said well we can go innovate like most uh games do and focus on increasing our technology for rendering meshes which a lot of RTS will do that they'll have a very low
resolution train and they'll include a lot of technology for getting more meshes more particles um you know better animation and these things or we can go for what's actually taking up most of the screen and innovate in that space and sort of see what that gives us and see where that moves us on top of that we had some issues with the prior technology uh for those of you who had played Age of Empires 3 you know that one of the big features of it was the cliffing system uh which was effectively a a way to hide texture stretching on our height fields and the cool thing about it was that it gave an amazing look for horizontal displacement and got rid of all those problems that you see with texture stretching uh a downside was the content creation process effectively how we created these things was we took um meshes from 3D Studio Max which were high tesselated and then we would apply a displacement texture to them in the vertex Shader and then kind of snap them in the terrain at various places we wanted it was really an awkward process because you had artists creating these meshes in uh separate tools that then they would take back and sort of fuse into the Terin in our
editor and it never really kind of synced up too well there was always these little things you had to work with because the textures didn't match and then the the resolution didn't match and and we just didn't want to bring that over to the 360 on top of that um although the cliffing system allowed the age maps to be random and to uh have a lot of user generated content and things like that um that was not the way that Halo Wars wanted to go our goal artistically was to create unique handcrafted maps from the get-go the vision was that every map had to leave an impression in the end user's mind the problem with the cliffing system was that you kind of ended up with a lot of visuals that looked identical to each other you couldn't tell one map from the other map if it used the same cliff and all these other prefabs so that just we we couldn't really get the unique handcrafted look with our prior tool set so just to give everyone a a idea of where we were and where we're going this is a a wireframe overlay of the ag3 train and I'm going to try this here can anyone is that even showing up up there little red dot you guys can see that in the back
fantastic okay so let's let's see if this will work here this could make me crash and burn so um we've got you can see this is a low resolution height field okay and then you can see here that we've got our inserted uh cliffing mesh pieces now these mesh pieces themselves are about 8X the resolution of uh these pieces here and you can see like these uh sliver polygons there is where we've welded and you can also see here um I'm not sure how it shows up on the big screen but you can see this little line right there and on the top here where the texture that's applied to these cliffing pieces doesn't really match up with the texturing that's actually on the terrain and this is because that those texture pieces were made in a separate app in a separate environment and then sort of just welded in this mean meant that the artist kind of always had to keep up with the process to make sure that no one put a cliff in or that the textures weren't off off-kilter so the new terrain specifications now that we talked about why we wanted to create new terrain what's our goal in doing so so first off we wanted to remove the cliff pieces I think that was actually the the only bullet point we had on the board at the time um but to
do that we had to accomplish a number of things first off we decided Well if we're getting rid of the cliff pieces we have to somehow match that resolution so let's just increase the resolution of all the terrain by adex I mean hell we're on the Xbox 360 why can't we do that um because it matched the cliff resolution and at the time we were like well seems like a good idea we didn't know if it worked or not the second thing was that we still needed to get that horizontal displacement that the cliff system allowed you to get um that's actually the big thing when you're dealing with the height field you really can only only deal with sort of a a a a a uh a shell mesh sort of the the sheet dropped on a bunch of type thing um but we needed to still give you that visual appeal of having that horizontal displacement so we implemented something called a vector field trrain which I'll I'll cover a little bit more here in a second but what it allowed us to do is actually get that horizontal displacement without having to create all these other pieces so again here is our Age of Empires 3 terrain and in contrast here is a screenshot from Halo Wars now for those of you who've played
the game hopefully most of you have and that's why you're here and that makes me really happy um this is actually a screenshot from our Blood Gulch uh multiplayer map now the immediate thing that that stand out to me and that I kind of want to point out here is that the terain looks much more organic in this environment it looks like it actually exists and and the um the height difference from the bottom of the screen here to the top of the screen isn't the same as it is in the age3 screenshot which is more like a stair stepping pattern so you could really only have these linear quantized height um in contrast we allowed the the artist to go ahead in there and say you know hey well you can do whatever the hell you want I mean it's Vector field train go go sculpt crazy um and to just kind of put things in perspective you can see our vertex density at this point and that's uh that's a little bit more than uh what we were uh what we had in our previous Technologies and of course what screenshot would be okay without having a a warthog in some crates right you got to have scale so now a lot of you had implemented heightfield terrain and you're going to know everything I'm
talking about let's but let's just get our terminology on the same page right so heightfield terrain when I say that word what I'm talking about is a uniform spacing of positions on a grid where each position in space contains a scalar value which represents vertex displacement along the Y AIS at that position um now one of the big problems with this though is that when you get adjacent no that's not going to show up is it that's a great ideaal um when you get adjacent vertices that have scalar values that are a little too different there's not enough UV data there's not enough texal density in that area and what occurs is texture stretching so you get these big blotchy uh uh pixels in there now common height field approaches to fix this is you slap either a cliff piece on it or you slap meshes on it and whatnot um but in in reality that's one of the bigger problems with heightfield Terin is is you you always have to kind of make sure that your artists aren't making that difference between adjacent vertices too high now Vector field Terrain in contrast contains three scalar values per vertex that allows
displacement along the X Y and z-axis the cool thing about this besides the fact that we can now create the uh sort of overhang and cliffing structures that we got with our regular Cliff system is that we can now have the ability to kind of sweep vertices from the left over to the right when there's not enough UV density over there and uh this screenshot here actually shows it off pretty well so this is actually a picture of a sculpted Terrain in our system actually made by one of our programmers uh I said hey I'm doing this talk and he said hey I have a really cool idea of something to sculpt for it let me go make you a picture and and so this took him about 10 minutes to sculpt in our environment so the first thing obviously again this is not a mesh this wasn't made in 3D Studio backs he sat there with a brush and actually sculpted this whole thing out the first thing is you're you're getting overhangs right anyone in here who's made a height field terrain the first thing your artist asks or artists and designers ask for is I need overhangs and I need Bridges well Tada um they didn't really like it when I presented that way I was like I'm better go um the second thing is you really
notice that uh let's see if this one shows up sweet um on the shadow part here and even on the bottom here there's really no UV stretching for the amount of displacement that we have in this environment there's no UV stretching and how that's accomplished is he actually swept vertices from this low-lying area here that has low Fidelity not a lot of displacement and he swept it up into this displaced area to sort of make a more uniform density now when we originally wrote Our tool for this system you kind of had to do that by hand but after a time we said oh well why don't we just automate that process and so one of the things we did during export was we would find areas that had low UV density and sort of search around it and say you know hey if we can sweep some vertices into this thing and sort of unify the distances to to increase our texal density and and here's another good screenshot this is actually for those of you who played the game this was actually the very first pass of scenario 1's terrain sculpting and and the reason it's a little bit different now than what's in the game right um the reason I actually show this shot is this was one of the first things this is one of the first screenshots that the producers actually went oh my God you guys aren't
crazy this whole Terin thing might actually work um the artist took uh an image of these horizontal terrain sheets which are caused by Massive glaciation when you get these huge glaciers that are moving through terrain they cut these horizontal slabs into into bedrock and you can kind of see that in the in down in here and uh the artists were able to sculpt all of this horizontal displacement down here by hand in the editor um very very easily in fact the whole sculpting for this map only took them about 3 hours to do and and this was early on in our development too so we hadn't put in all the fancy clip arting systems and everything else that we have today um but it was a really good technology and it kind of showed off some subsurface scattering and uh some ambient occlusion there as well and uh yeah we've come a long way from what we shipped with right so now that we have this concept of hey this is a vector field trrain and here's what we wanted to do and how we do it um it's kind of start time to talk about the realities of innovating in these areas the fact is that when you take a Terrain system that you have and you up the
density by eight times you kind of end up with some problems that you didn't expect and uh the rest of the talk is actually focused around how I Sol well we I solved them um how we solved these problems and sort of went through them um my goal here is to kind of talk about what didn't work and what did work and uh the main thing is see this this bottom one here uh content creation burden I'm I'm really going to try as hard as I can to get to that because some of the really cool Innovative technology we came up with was actually in the content creation process so uh if I'm talking a little fast I apologize I I I really want to get to that data and if if you guys are okay with it we might cut the Q&A session a little short to get there so let's go ahead forward so let's talk about memory first so the original Terrain in our in our original demo when you up the density 8X you actually ended up with a 496 4096 by 4096 train so 4K verts by 4K verts well the uncompressed result of this was around 400 megabytes that's 200 megabytes for position and 200 megabytes for normal any of you who are Xbox
developers know there's only 512 Megs on the box uh at this point our producers were you know popping ant acid tablets and and trying to tell us hey we're not just shipping a Terrain demo um and we said don't worry don't worry we we're going to work on some compression technology to make this whole thing work now the first round of compression technology was actually fantastic it took our 400 megabytes of train and compressed it down into 32 Megs which um off the cuff that's around a 12x decrease or about 16 bits per pixel and the way I accomplished this was I took the the terrain uh Vector displacement information and I used a combination of wavelets to separate out lowf frequency data and data that just wasn't needed at all and then stored the resulting information in dxt textures and then I would take the dxt textures and in the vertex Shader sample all these textures and reconstruct my terrain environment well the the you can't argue with the compression results there that's absolutely fantastic but the real problem with this is that it was not performance enough to be able to handle
the resolution we were at there was actually seven textures when you separated all the data out and that meant that we were sampling seven Textures in our vertex Shader at 4K by 4K terrain and uh it just really wasn't performance so we needed another solution uh to say the least now anyone in here who's actually worked on a shipping product knows that there's sort of always this give and take between um design decisions and management decisions and then what your technolog is doing and what the industry is doing and I I kind of want to take a second and address address this because there were a couple things that weren't technical that actually changed the way we had to approach our compression process now the first of that was that we walked in one day and our artist said you know there's just too much density there's too many vertices we just we just can't manage all of these things you know which which in respect was probably a result of bad tools which I wrote the original tools so that's my fault but um we fix that later but anyhow they said well you know hey we it's just too much data so we said okay well how about we cut the density in half but uh increase the tile spacing so that the train itself will occupy the
same world space size um but won't have as many vertices so we went in and did this and I resized all the maps and I checked them back into the tree and the next day the artist came in and says hey we we thought you were getting rid of the density well we did get rid of the density which was kind of eye opening to us that there was so much density that our picky artists didn't know when half the density was missing so so it was kind of actually a good thing we did that cuz it showed us that we really didn't need 4K X 4K resolution that 2K X 2K resolution was actually sufficient for us the next was that uh we kind of came to a concept that the content pre creation process for these 2K X 2K trains was actually too large it was taking too long for our designers to map out the things it was taking too long for our artists to sculpt the data and make it look good and so we had a sort of settle in a middle ground and said well our maximum size is going to be 1280 x 1280 verts and this this again was was not necessarily due to a technological limitation because we we've uh you know said we can address all these other problems it was more done due to the the fact that our content throughput process so needless
to say that now that we have a 1280 x 1280 vert terrain um it drastically changed our memory footprint unfortunately we didn't figure this out until we had made these other memory modifications but here we are anyway so the final result that we ended up shipping Halo Wars with was a uh 14 megabyte footprint for 1280 x 1280 train and that was accomplished by putting XYZ and normal displacement data into 32-bit textures at 11110 and then we also added an a and Alpha texture per vertex uh that were stored in dxt 5A textures now for those of you who played the game you also know that when you place down a UNC Command Center it'll kind of cut a hole in the train you'll see the slide doors open and then something will come up from the bottom well en able in order to do that I also provided a dxt 3A texture which those of you who worked on the Xenon know that when you sample that it comes out to one bit per vertex with a little bit of trickery you can actually turn that xyz1 bit into actual you know a horizontal movement so we actually used a quarter res or half yeah quarter
resolution with dxt 3A texture to actually map one bit of alpha to map out those areas uh in general this this worked again you know the the bigger thing wasn't there wasn't a technological Revolution after those decisions were made it was just like well let's find a good middle ground now now I I kind of have to put this in this talk this was actually the very first screenshot we had of the terrain system and this was actually sent around in uh early or late 2005 when we prototyped the technology on the PC and this was our original density and you can really see how quickly we went from a pretty cool wireframe to just sub pixel triangles to complete solid and uh we were really impressed at that time like oh my God we can really push that many vertices on the 360 um and this was back when we had the beta Hardware too so we didn't have the final Hardware so some of these numbers over here are are a little skewed because it's a different Hardware so that was our memory that was how we handled that and uh to to kind of move along with uh the next big issue in train is always performance now when we
created our original train document we were still in RTS we were still dealing with an RTS camera and RTS angles but for some reason almost overnight it all of a sudden it turned into the fact that we needed to support FPS camera angles and uh we we all kind of looked at each other like well wait a minute what for um the design doc called for cinematics and in-game wow moments and the ability to snap to and from these things uh on a trigger of a dime and we all kind of looked at each other like well that wasn't in the original design documents what the we didn't we didn't design for those things so but necessarily we couldn't push back on it so we had to put in some support and you can remember our density really didn't support a first person angle I mean there's a great picture of it right there so we had to put in some sort of uh LOD metric for the process and specifically we had to put in something that wasn't a memory burden and wasn't a performance burden because we kind of already had our technology prototyped out to this point and we we're moving forward with content generation so the first round of LOD Solutions was actually geomip mapping now this is different than geoc clip mapping which is uh some research uh by
Hugh hop over at Microsoft research this is this is your standard uh vanilla geomip mapping um the basic process works by taking um index buffers and changing the stride so our terrain was actually one gigantic texture and each uh quad node chunk was 64 vertices by 64 vertices so the simplest way to do LOD was instead of an index buffer that samples 64 by 64 you have an index buffer that samples 32x 32 and 16 x 16 etc etc etc and then depending on how far the chunk is from the camera you depend on uh you determine which which resolution it should be now in general it was pretty quick pretty easy to use but you can see one of the big problems right here is that this transitionary line was kind of right in the middle of where the we the user was looking and in motion the difference between the 64x 64 and the 32x 32 was an immediate pop and so to fix that we'd have to kind of push this line way up to the top of the screen and by that point 90% of the screen was high resolution and it just didn't work on top of that GE mid mapping really wasn't responsive to
areas of low density uh or at least where the artists really hadn't sculpted anything so it's like well wait a minute there's no displacement here why is this still high resolution so the second thing I took a look at was restricted quadree triangulation and um you can find a good talk of this by the flight Sim team at Microsoft who actually put a a much larger and more robust version of this in Microsoft flight simulator 10 now rqt works on a concept of taking sort of a 3X3 area verticy and creating a a plane an average plane and then defi desiging distance from that plane and if a verticy is not too far away it says well you're not displac enough get out of here and then retri angul the process so uh to kind of describe what you're looking at here here's a wireframe shot we've got a little bit of vertex density here and we got some Cliffs there and we also have uh some sort of scars in the terrain and a little bit of overhang area and here's what it looks like at lower resolution um we pretty much got what we wanted out of this it kept the areas that the artist had and got rid of the areas that the artist hadn't touched
yet and this was what we considered a win the problem with this though is that we were now introducing that each quad node chunk had to had a unique index buffer to be able to describe how that area was represented in memory and and we just did not have the memory ability to to be able to to do that so we're kind of like well it's great because it gave us what we wanted but it wasn't memory efficient enough and at this time we kind of had our final hardware and we were sort of messing around with some different things which we didn't think we had the ability to R rely on before and then we decided to move move to the hardware Tes lator so for those of you who have worked with the 360 or have attended any of the directx11 talks you're hearing a lot about this new hardware tessellation thing that's going on so um we we were really blessed though because the the gods of numerical accuracy like kind of opened a a cloud and put down a god Ray upon us because we ended up in a lucky situation that our quad nodes were 64 vertices by 64 vertices well a hardware tessellated patch for the 360s Max prolusion is 16 vertices x 16 vertices which without any
change of me we could just easily do 4x4 patches and kind of move on and say hey it's a day so how we would do this is uh I would compute the bounding box of the patches in World space at an export time and then at runtime projects that bound box to screen space on the CPU and measure its projected area now you guys are probably reading some papers right now especially in the Shader X7 book that just came out that talks about the same process but doing it on the GPU instead and using stream out to write out this information well in our RTS we are GPU bound more than we're CPU bound and if you've got six core or three cores and six threads to work with it's much easier to offload this onto the thread pool and have that computation done there than it is to sort of have this readback process on the Xbox 360 the cool thing about this was that water tightness was kind of automatic for us I mean just like with geomip mapping we had the ability to just say you know here's a patch go sample this large texture in your vertex Shader and as long as we kept the edges between two Patches at the same density we never had
to worry about t Junctions or holes in our train which hey that's perfect that's less work that I have to do so here's a good picture um this is one of this is actually the map that uh we got the whole project green lit with and so we're we're kind of up in space looking down on top of it now and you can kind of see a a nice Canyon and you can see some walls working on that as well um and you can see that these areas are low tessellated we move a little bit closer to and and kind of focus around where the user's cursor is here moving closer you can see that the terrain Cliff walls immediately start getting more density because they are higher density to begin with and now their projected screen space area is is much higher uh around the around the focal point here you can see that this is now increased in resolution all the way to where we get into the max resolution and you get these cool little tread tracks left by a warthog who had just run over a grunt and threw a 7-Eleven and hopped on a grenade and did a back flip and all those cool things you see on YouTube um in general the the hardware testator was fantastic we shipped with it and we loved every bit about it um it had some
downsides in the fact that it was it was a little bit of brain dead and that it just kind of tesselated it would have been cool if we could do some other things with it but I guess that's a different talk for some different technology people one downside about it though was it sort of had the same problem that geomip mapping did but at a much smaller scale you still had problems with boundaries between patches especially if you had like a a high tessellated patch here and a low tesselated patch here well you had to sort of find a middle ground of what the edge should be between those two patches and what this was you would get some slivers sometime and I don't know if you can really pick it out in the oh yeah here so if everyone can see right here you kind of have a low tessellation patch here and a high Tes patch here and you get all these little sliver triangles in the middle the problem with that is that kind of creates anomalies in lighting and so our artists kind of always came back to me and said hey you know the patches are screwing up our lighting why aren't you doing your job and I would kind of point at the hardware and go well it's you you have a brush to fix that dude just hit a button um but e it was easy enough to police and the artist really didn't take too much time to fix it because it wasn't everywhere um so but that's just
something to be aware of that when you're working with this you can can get these sliver polygons and those sliver polygons can give you anomalies in your lighting so LOD performance we can now support first-person camera angles our producers were happy they were throwing confetti and and and parties for everyone oh I hit the wrong button sorry no wrong button again wh where am I going there we go anyhow moving to the Sim so so it's a great idea to say hey let's make a new terrain that takes advantage of the Xbox 360 it's a different question to say well how does your game actually interact with this new technology so for most height Fields you have the you have a visual representation and a Sim representation that are sort of coupled in one and the same and they're usually low resolution because the Sim needs to be able to do things like height field calculations uh rate casting and physics and whatnot well the problem with our Vector field terrain was it was GPU specific and it was compressed on top of that and also we kind of had a problem saying like well what you do to define a ray cast into the vector field without
resorting to going to an ABT or bsp or anything like that and effectively just turning into polygon soup well the solution we decided to opt for was actually create a lower resolution terrain which was height field only and acted like these sort of Legacy terrain systems that age3 and Age of Mythology had before it so that way any systems that had come over from those prior systems just kind of worked automatically um this actually by the way turned out to be one of the best decisions we made in in the entire freaking project so to to to kind of cover this again um the solution was to create a CPU side terrain which we called the Sim rep just so we're cool on terminology which was a much lower resolution than the viz rep which was the GPU side solution and it was organized and swizzled to take advantage of the CPU caches so that we could do things like physics interaction and Ray casting at much higher speeds which was great because the we could make decisions on how to organize that data for the CPUs they didn't step on the feet of how to organize that for the gpus and that was absolutely fantastic
so how we would generate this process which was actually a question a lot of people said they said well you know do the designers go in and block out the level and then in the low resolution and the artists come in and you know they spec it out and yada y y and it was a big back and forth and finally I said tell you what I'll just automatically generate it for you so to generate this process effectively what I do is during export I render the terrain from top down in an orthographic camera and I render it to a render Target which the render Target size is actually the resolution of the Sim rep that we want to support so hypothetically I'm rendering a 4K X 4K Trin to a 256 x 256 texture and when I rasterize the train I actually write out the world Heights at that position the cool thing about that is that I read it back on the CPU at that point and I kind of have an automatic height field um which is kind of nifty um that that you can then take it and do various GPU or CPU massaging and whole filling algorithms we'd also you leverage this process to be able to go through this process and say oh this is too steep you know make it impassible this isn't steep enough etc etc etc and this was actually such a successful idea
that we had four separate versions of these rep low res representations we had one for the Sim which was what all the units used we had super two super low resolution versions for the flight rep and the camera rep which eventually actually only ended up being 8 by8 uh tiles Al together so that you know when a when your camera was swinging around the environment it had a a much more gradual height field to interact with as opposed to our 4K x4k train and then the Scarab had his own representation because it's a freaking Scarab and it can do whatever the hell it wants so and all of these were at different densities and I think we had like two more for um our our uh our decal representation and another one that I can't remember so um one other side point that designers decided to throw into our design document a little too late was that we need the ability to play on Forerunner objects we need the ability to play on Bridges which again a lot of you have probably heard that same thing before and we said well hey wait a minute we have this ability to sort of generate a Sim rep on the GPU why don't
we leverage that technology to allow you to insert meshes into that process that could then modify the Sim rep that's exactly what we did so we allowed the designers and artists to flag meshes in the editor that could then be rendered during this the Sim rep generation process and the bonus for this was that it modified the Sim rep with these objects without screwing with the viz WP and then no one had to change any of these things oh that's what I said sorry so here's here's a great here's a great picture of that so for those of you who've played the game this is a picture of one of our multiplayer maps it's called repository and uh you can see here's a massive big Forerunner object it kind of drops down to Infinity there um here is the terrain itself and this is not Alpha this is actually sculpted using the vector field displacement just you know making nice little little curves because when you swing the camera around there still has to be density there and this is actually the Sim WP that represents that same area now you can notice that it's much lower resolution it picks up the fact that the terrain drops off right here and it also
picks up the fact that you have this massive mesh in there and and it actually does it to a fault which can be a good or bad thing you can see that it's immediately picking up these bumpers right along here I don't know if you can see that with my weak laser pointer um it picks up these bumpers and it also picks up this little Observatory tongue depressor looking thing which I don't I mean I don't I don't mind that you can't play on it but it's really cool that it picked it up automatically for you an extension of this actually came to us uh very very nicely in that our design document required you to play on the back of the spirit of fire which was uh is the main ship from our storyline and originally we had decided well we'll just zoom the camera in and change the textures to look like metallic and so you won't ever see the edges of the ship we said wellit why would you do that why we have the ability to insert meshes so we actually took the spirit of fire model that was given to us by blur who did our cinematics and we had some artists actually remove polygons and make it uh acceptable for gameplay usage then we went ahead and put it in the edit edor flagged it to be included in the Sim rep
and voila we immediately had a heightfield representation that the Sim could play on and we had a visual representation that was given to us that had nothing to do with terrain and in fact for these scenarios that you play on the back of the spirit of fire we actually turn the terrain off entirely so we get all of the memory footprint back for the trade and we don't have to do any of the processing and um I just sort of a side comment uh sort of a spoiler I guess you kind of get bombarded by some Covenant artillery and that's uh you can see they raised the terrain way up in the corner there just to make sure that they have the proper height and I didn't realize that when I originally took the screenshot but someone pointed it out while I was giv the presentation like hey what is that over there so it's it's kind of just funny to see see how that looks so we now have the ability to allow the Sim to interact with this crazy new terrain that this bald Graphics programmer kept ranting on about um the next biggest problem and probably one of the bigger issues that we didn't realize would take so much problems is texturing so for standard height fields we do a texturing process in the industry called splatting and this
process is involved by rendering the geometric data to the frame buffer and applying combinations of alpha textures and I guess diffuse ALB normal textures and whatnot and you render the chunk and you bind a texture and you bind an alpha and you keep rendering and you do this multipass rendering and the result is that you get an alpha Blended terrain the problem with this is that we just increased our density by adex and we really couldn't render a chunk more than one time so that kind of caused some problems because we were no longer able to do splatting now another way to actually do sort of the same terrain process is that you put bind four Alpha textures and you bind four textures that you want to visualize and you kind of sample them all at the same time and you get one result and you write that out instead well the problem with that was that early on our artist had requested to increase the number of Blends that we allow per vertex to 12 and then increase the number of textures to blend to five now a lot of you who've implemented terrain you usually only have diffuse and normal maybe you've got a single Channer gloss Speck or something like that well we actually support diffuse
normal three Channel specular uh an HDR emissive and a three Channel ref reflective mask and originally when they came to me and said we need these channels I said you're high you don't need those channels it's terrain um but then they came back with this information and said well hey here's what it really looks like in the game and I said well sold so this was an ice map that we were working on and they went ahead and made some great use of uh some fake Fel in here as well as some fake use of subsurface scattering using these five texture channels and I said cool hey well I guess it was a good idea maybe you weren't high after all um uh I'm I'm glad that this all worked out of course at the end of the day I'm walking out of the office and one of the artists said hey man I I just checked in a map that that plays a little bit more with the emissive you know go check it out tomorrow and I get in the next day and I find this map sitting there and at this time I said well maybe I shouldn't have put all that information in and and I I took this screenshot back then saying sooner or later I'm going to have to show somebody this this is just fantastic but needless
to say this was actually kind of cool to see terrain contributing to the emissive part of the rendering equation instead of without just having to be sort of the uh highpass specular capping where you just sort of you know take anything above 0.8 or something like that they could actually control this and and and for the most part this this worked out really well and we were happy with it now the big problem with texturing here was that we allowed a 512x 512 texture per terrain chunk which meant that for our large terain for our 1280 x 1280 that resulted in 10K X 10K texture across the entire terrain when you start looking at it that way it's actually easier to visualize the entire thing as a virtual texture um which a lot of you I'm sure have heard things like Mega texturing or sparse virtual textures uh depending on what paper you read or unique texturing and they're all buzzwords that effectively mean some huge freaking texture that has to be paged in and out of memory using you know smaller pages and whatnot now the problem with our particular texturing system was that our train was actually our our data for texturing was actually too large to use unique texturing uh effectively in an
FPS for those of you who made first person shooter games you kind of work on a rail system I mean you're moving from portal to Portal from area to area you sort of have this predictive nature about what's coming up next in in which case you can say oh well you know I know these portals are coming up next go ahead and preload these things so that I can use them when I get there and RTS is very very different in that fact that if you click on that mini map at the bottom of the screen you can jump to anywhere you want as many times as you want in which case you're looking at completely new new terrain completely new units all across the board well if we're going to be streaming unique texture data we have to stream five channels for you know the 15 chunks that are visible in a given given view as well as decompress and stream all of our me mesh textures at the same time well the compression technology that we had at the same time was fantastic I mean it was amazing but it wasn't fast enough to handle the texture load from the terrain as well as the meshes so the terrain being a little less complex and able to solve we said okay well we'll keep using the Real Time texture decompression for the meshes but
for the train we'll do something a little bit different so typically with a virtual texture page you'll decompress a page and to an uncompressed form and then use that in your rendering process so you kind of have this massive texture in uh either off disk or in a compressed forbin memory and then you kind of grab what you want and decompress it and put it into a cache and whatnot well instead what we're going to do is instead of decompressing it we're actually going to do the same splatting process which is very common to terrain but instead of doing it in the screen buffer we're going did do it in 2D space in effectively texture space and we're going to do it on the GPU so the cool thing about this is we just render some quads we create all of our data and then we apply that back to the Chunk in the same UV mapping that you would normally expect to get after we would do this we would then take those textures and we would put them in a cache now to make sure that we fit in memory that cache actually had to be compressed because otherwise we'd have you know 70 to 100 Megs of cache space because when you do a render Target you can't actually render directly to a dxn or a dxt5 or something like that so we'd have to render to a dxt 8 and then feed it back into the GPU
and then compress it to using on the GPU we had some shaders that would actually do the compress to dxt5 and whatnot and then each texture Channel albo diffuse uh normal specular and emissive and everything had its own cache you kind of look horizontally you've got these stacks of caches where any cache page vertically all represented the same terrain chunk now the cool thing about well I guess not the cool thing about this was because of the fact that you're jumping around in your environment so much managing troops attacking this guy dropping a bomb over here going getting these resources fighting on this front you're jumping around a lot and again an RTS is very very different from an FPS in such are the standard sort of virtual texture cash management routines kind of fell on its face we needed a different solution because we just couldn't do that we couldn't call create texture new texture load texture we couldn't do that for every frame so instead we made a custom system basically for the entire cash we would just allocate one large physical chunk of memory on the 360 and then anytime we needed to update it with
different size textures or composite into the cache we would just use the XG set texture header to point to that area in memory so this allowed us all the benefits of of sort of rendering to a texture Atlas but without all the problems with that and allowed us to say you know here's your handle here's this handle uh it allowed us a little bit more CPUs side cache modification and usage we also found out that mru and lru weren't sufficient predictors for victim page elimination like they are in other sorts of systems and the the research that I was able to put into that actually uh was uh published in efficient cash replacement using the agent cost metrics in game programming gem 7 if any of you are dealing with these systems where you're paging lots of data in and out that can be randomly moved at any given time I highly recommend you check out the age and cost metrics because it gives a better predictor than lru or mru or n r u FS d uh any one of those algorithms so please check it out and if you have better ways to do it please let me know I'm I'm always interested in in hearing more of
those things into because I've had six slides without a picture here's a picture now this um first off this is obviously uh temporary artwork from 2006 so please don't go post this on your blog and be like the early origins of Hala Wars um this is between us and and the slideshow on the top here is the actual cache itself now the reason is a lot of you people are saying well why are you using the XG set texture header and whatnot well if you look at the bottom uh right hand area here these these are all low resolution 64x64 textures and there's a a ton of them that we have to move in and out especially when we're swinging our camera around at such fast speeds in first-person shooter mode for cam for cinematics and wow moments and everything like that so you know having to either have a greedy cach of 64x 64 is already allocated or a greedy cache of 512 X 512s or or expanding those things over time it's just too much burden on the CPU and the driver so instead we just move around these XG set texture headers and allows our 64s X 64s to occupate the same space that a 512 x 512 would so this was actually a huge
win for us because it gave us all the benefits of a caching system without the burdens of actually having extra resource handles now I just want to talk a little bit about the uh compression system because it's it's important to say that hey you know we when you do render to to uh texture and it does come out in uncompressed format rgba 8 or something like that that you then have to compress it in order to put it in our compressed cache and we like I said before we did have some shaders that would take in the uncompressed and compress it and Swizzle it to the uh 360 swizzled format and then write that data into the cache itself and just for number comparisons here uh diffuse three Channel spec and three Channel reflective all got their own dxt1 texture um normal was compressed to dxn and then emissive which we use as a high dynamic range went to dxt5 and you can you can see their memory Footprints there uh in reality the cool thing was that for a lot of maps that didn't use emissive or didn't use um reflective Maps we could turn off those caches entirely and save us some memory so if
you were playing on a map with all dirt you know we wouldn't allocate six Megs for a cash for that so um now I would usually get into the content creation process but I actually kind of want to talk about something else first um one of the other big things that we wanted to fix with the Halo Wars terrain was we really wanted to fix the whole floating in space RTS look so for those of you who had played Age of Empires 3 when you get to the edge of the map it's just kind of black you know you get over there and it's just a black black fallof or if you're playing Age of Mythology you get to the edge of the map and it looks cut and you kind of see the the Strat uh the layers of the earth inside there we we kind of wanted to get rid of that uh as well as now that we have to support a first-person camera angle when you swing the camera into first person mode if there's nothing out there it's a little alarming for the user so we needed the ability to put geometry out there that um made it look convincing but didn't really have any impact in our content creation process or additional impact on our memory footprint or for that matter our performance footprint hence what we call a uh terrain
skirt so what we decided to do was uh take quad nodes basically just empty quad nodes and sort of populate them out around the end of the map out to sort of a a preset distance and then each quad node actually pointed to a node on the playable map that it referenced the goal here was to actually make it appear as though the train itself were mirrored across the edges of the playable boundary area so this this quad node over here on the end would actually say well I'm referencing quad node 715 or whatever like that and then when we actually get that quad node visible in the camera we'd render its referenced quad node at the lowest resolution with the lowest texture resolution for that as well and here is how that sort of turned on so um from the top down you can see that the playable area is down here in the Le hand side and you can see objects and whatnot and then you can see that along the boundaries here you've got a mirrored version here a mirrored version here and a mirrored version here you can see that these terrain details like this is easily mirrored across that
basically for those of you who who who understand it this is just like the mirror texture mode and and texture addressing and whatnot so you know for for us it was kind of a well let's just do what the textures do now from top down this looks kind of obvious and hackish but from a first- person angle this actually comes across very very well now this is an unaltered undoctored screenshot an artist went in he moved the camera he put down some wraiths there and he hit makes screenshot and this is kind of what came out and um to show you what this actually is doing in the background the actual geometry is highlighted in green the skirt is actually highlighted in red and the Skydome is in blue now I'm going to switch kind of back and forth a couple times here and I want you to focus on a couple things first off uh this area back here normally would be approximated in a first-person shooter game as a as part of the sky doome um but for us it's actually part of the skirt so what that actually means is since we're doing a mirror mode the camera is sitting on this little Plateau here and those mountains are actually uh quad nodes
that are behind us that are being flipped onto that side out there oop wrong way you guys didn't see that yet um the other thing too is you can actually kind of see that where the object stop right here that this is the line sort of right here that uh that we're actually flipping and mirroring the train off and when you actually take a look at it you can see that these geometric features here are easily reflected on the other side as well as this and this and uh and you know these little Cliffs right here um but if if you didn't actually know that that was a skirt you wouldn't actually you know you wouldn't actually see it especially when you're flying through a canyon and seeing all these things now um just to kind of bring up another Point here we kind of got a lot of uh slack when we finally released the demo that everyone was saying like oh my God it doesn't look like the e3200 7 demo well the e3207 demo where you're actually following a pelican through a canyon flying around actually used this skirting technology extensively to show that sort of horizontal View and make it look like it's a much larger environment so it's not to say that it's not the same technology it is it's just a different usage of it for what we
actually shipped with so uh let's talk about some takeaway points and I think I'm doing okay on time 10 five minutes what do I got I got 12 12 Okay cool so um good good good good then we can talk about content authoring so um takeaway points so first off I want to point out that height fields are no longer deao if there's anything that you come out of this talk with I want you to know that there's something else beside height fields and meshes being inserted with them in general a vector field displacement is actually pretty easy to implement in its basic form even if you have a height field terrain and then a separate channel that is the vector field displacement afterwards um there's a lot of different modifications that you can play with and there's really no reason to not Empower your artist to be able to sculpt things like that overhang that a programmer did um secondly is that uh the Tes lator Hardware is really the future of terrain if you've read the article in Shader X7 and if you've attended in any of the AMD talks the direct X11 talks you know it talks about the ability to do these Tes lated quads and whatnot that fits perfect for terrain there's really no reason to not
use it um things like a buy LOD or um SAR or Rome uh really with the hardware being able to support those things those are really all in the past at this point the next thing is that the the separation of the Sim data and the viz data was a fantastic idea now uh in the firsters community we see this a lot that you have a visual representation and then you have a lower resolution physics or or Collision representation but in the RTS Community it's not really that prominent of a feature you usually have some coupling between tile data and pathing data and visual data and no one well at least that Ensemble and the research that we did no one had ever taken such a drastic step like we have to draw a hard Line in the Sand and say no no no no these are Sim Concepts and these are visual concepts and we will make decisions on each separate from each other um that was by far one of the coolest things that came out of this research especially when you look at scenarios 11 and 12 when playing on the back of the spirit of fire we we really hadn't seen any visuals like that in any
other rtss out there which if you remember the the second slide we said we want to advance the genre you really can't ask for anything more than that when when you when you actually ship a product so since I have a captive room of people and you're all seeing the little bonfire Studios at the bottom there I figure you know I might as well talk about this a little bit so if you read the news you know that bonfire Studios is made up of X Ensemble Studios employees and uh we're actually uh mainly comprised of the original team team the original technology team that create created the renderer created the engine created the tool chain and actually got the game green lid it's the same team that's been there from the beginning of Halo Wars to the end of Halo Wars and got the whole thing shipped and uh we got about 35 of us we're all from Ensemble so far and we're working on very new intellectual property and please check out bonfire.com if you're interested in more information there and uh I'm still good on time right so I'll go ahead and say thank you 10 minutes good so um thank you very much Andrew Foster Rich geld Sergio tonei winet and Ken Adams these guys have been uh in you know crucial in
getting this technology together over the past four or five years so um now this isn't my last slide if you guys don't mind I'm going to kind of try to push the Q&A session back and talk about some uh density or some uh content creation process is that okay unless people don't is that okay okay cool all right excellent extra slides sweet so how do you actually edit a 4K by 4K freaking terrain well well Ensemble Studio this was the first time we had made a console train or a console game so we kind of had to to to answer problems in a little different way than we were used to working with so we had our editor designed entirely on our PC and we had a game on our 360 and so we had a very very robust streaming and content reloading pipeline that any changes that were picked up on the PC would immediately be reloaded sent across the network and and and shown on the 360 this included any modifications to terrain our editor was written entirely in C which um was a fantastic idea C is a great language it allows you a lot of abilities to add controls and
visual elements that don't really that aren't as robust when you start talking about um you know other sort of widget languages on top of that it allowed us to say well this is all in C and so it can't be in C++ which actually led us to one of the worst decisions that I think I've ever made in my professional career was that I actually duplicated the entire rendering system on Halo Wars on the three on the PC in manage direct X um which was a horrible horrible idea don't ever do that ever in in your career please um it was cool that we sort of had the same renderer on the PC in C but at the same time you you just didn't have the same hardware and so we were constantly fighting with people's machines not being up to spec or weird things with managed direct X running out of memory for no freaking reason so let's talk about vertex editing because when you increase their density to this type we did standard height field brushes just don't work I mean height up height down I mean that's really you need in a standard height field but for a vector field you have to start looking
at things and controls like zbrush and and mudbox things that allow you to rotate the camera and get in there and actually sculpt like an artist would actually sculpt so we actually sat down with the artist and looked at those programs and and said well okay here's a control here's here's displacement along a camera angle or here's displacement along a a normal or here's a unifier here's a a digger and things like that and we actually implemented pretty much 90% of the functionality that these two tools had in our terrain system and allowed them to use that uh addition to that we allowed something like Adobe Photoshop masking situation which allowed you to go in and mask out areas and apply different filters to them and also mask them out and say well you know mask out this Cliff area I'm going to do all this sculpting over here and I don't want to modify this and that was actually a pretty cool process too um it allowed us to actually introduce the concepts of some uh vertex translation widgets which are very familiar to you guys who work in 3D Studio Max being able to select a bunch of vertices and move them around so here's our Terrain in our editor in C uh here's some C buttons and uh we have the areas
selected in red here that are masked out and then you can see that we just kind of created a little widget that you can grab the widget and move it and displacement in any way you want and all of the data just kind of moves around since we're now dealing with a vector field uh these widgets were absolutely fantastic and allowed the artist to do Mass properties at the same time um The Next Step though was they said well we need some other things we don't just need per vertex definition we actually need filters we need fbm we need perlin uh we need sort of these Mass generation things uh the problem with that though is that perlin really doesn't look like terrain fbm really doesn't look like terrain if you've ever looked at terrain it's not a noise function it's really not um terrain is actually a modification of erosion properties it's it's the process of thousands of years of hydraulic and thermal erosion moving dirt through the through the environment and that's the look that we really needed to get so what I did is I probably spent probably about four months of pure whole time during the development of Halo Wars you know kind of spread out between years working on a hydraulic erosion process now if you got
Shader X7 you probably read an article in there that by Eric Ben I hope that's his name I apologize um on how to do this whole thing in the GPU well I did it a different process I actually did the whole thing on the CPU using a process called path tracing effectively what I did was I dropped millions of raindrops on the train and for each raindrop I would sort of figure out the next delta pick up some dirt move to that next Delta drop some dirt add some water etc etc etc you can find some various situ out there that kind of describe the same process uh the the trick to this was actually getting it right like it's one thing to just say I'm going to move to the next element pick up some dirt and then drop some dirt off getting the the control parameters is actually correct when you're sort of dealing with these sloping pieces of data that can kind of accumulate and snowball and then Channel and then do you hit sedentary Rock are you loose dirt uh is it defined by your texture I mean we had the the concept of all these things in our editor system so that if they put down some grass it wouldn't get eroded like it would with the the dirt and everything um and so I I know I'm a little clamped on time so I'm going to try to speed through these
really quick I'm sorry um on average uh you can erode the entire map took about 20 to 30 seconds and this was back when we were still a 2K X 2K terrain I I fortunately didn't didn't time it um the cool thing was that I actually figured out a way to make this whole process multi-threaded um so if you've ever looked at the Talks by World machine or some of those other things they talk about doing um doing each node as a separate threaded process well we actually figured out a way to five minutes thank you uh we figured out a way to actually thread the drops of these water and moving every around which allowed us to speed up so here is a picture of a chunk of terrain and it's highlighted in red because we we had the ability to say just apply this filter to this selected terrain and then here is the eroded process now granted it's probably not the best looking erosion but you can imagine that hey having the ability to just make it look eroded at all is better than a pein filter or anything along those lines and so here's another view of this and this is actually something else that that is really really cool is that we allowed the ability to not only erode the brain but because we were doing the whole thing on the CPU we could then generate masking information that we pass back to
the artist they could sort of put back into the information so you can see our C control over here we had uh no masking or generate an erosion with a mask or just uh generate the mask itself and so here is the terrain eroded with a mask that defines the eroded area and the intensity of the Mask defines how much erosion actually occurred in that place and the result of that is allowed the artist to sort of apply this green texture everywhere and then when they did the erosion they would be given a selection mass that then they can apply a mass texture applied to to the dirt texture and that kind of gave you these nice grooves in the terrain like that um to our knowledge no one's really implemented anything like this in any tool we were aware of so uh we were very very impressed by the fact that this came out this way and and again terrain doesn't look like perlin terrain doesn't look like fbm terrain looks like eroded uh information and so this was this was actually the Cornerstone for everything we were doing um texture editing actually worked the same way way uh the the artists had requests for increased Alpha resolution uh the concept of
layers just like Adobe Photoshop so they could take textures and swap them visually um uh in a vertical fashion um they had ma masking they also had extra data channels that they could add in they would that would be applied per texture information and um we really had to go back just like we did with mud BR mudbox and zbrush and sort of implement all these other tools that existed in Adobe Photoshop so at the end of the day our terrain editor actually looked more like uh mudbox and studo Max and Photoshop just kind of all stuffed into itself with 4kx 4K terrain and that's what we dealt with every day so again thank you all very much for coming to my talk I appreciate you all being here this is more response than I could have ever imagined so thank you very [Applause] [Music] much and so I think uh we have three minutes for anyone who does want to ask questions um if you don't get your question asked I'll be standing outside probably for the next 3 days uh with any other information so if you do have a question please approach the
mic hey how you doing my name is I just wanted to sleep my card and you know you did a great job oh thank you very much man' I'm sure you're going to talk to a lot of people so I don't want to like a headache right now but um do you have a unfortunately I don't uh Ensemble sort of shut down and we're sort of bonfires in the process so uh let me let me come around here actually right like if you have like an oak thing that HS over thank you thank you very much thank you so yes ma'am how long did your editor was in a um we went from initial concept to something that the artist could actually use in about 3 weeks uh that included the C tool set that included the um the specifications and everything so we went from concept to here's something you guys go play with it in about 3 weeks youting oh yes ma'am in fact I say we iterated on it to about until about July of 2008 at which time we said Hey listen
we got to ship a freaking game we can't fix any more that so yes ma'am thank you no problem thank you uh hopefully quick question okay so with the uh not the visre but the uh the Sim Sim sir okay so if you're constructing it by uh just straight projecting down yes sir and you had a scenario where let's say the the terrain was being pulled so it outcropped over like over a canyon ah yes yes yes yes yes would you account for the fact that you know things should be able to move underneath so our simulation didn't actually allow for objects to move under that because we were the to the Sim we were still using a height field so it had no concept of pathing under bridges or pathing under objects the Sim was still using effectively the same pathing engine and AI engine that Age of Empires 3 shipped with um so we just had to make sure that our data supported that Legacy code path um we did have to do some tricks though for decals so when you do have sort of these overhanging things and you move your cursor to something underneath it um you had to show the decal there as
opposed to on top of it and to do that we would render from the top and then we would do a depth peel that would get rid of the front fragments that would give us sort of bottom and we would store that as a separate texture um that had height and low data and then when you would get the cursor position and the GPU I would scale it and determine which one you should use should I use the high value or the low value and then draw our decal there okay so some of it's just sort of uh conditioning the artist to not do crazy stuff right we wanted them to oh absolutely weird things where you could almost like have the terrain wrap over itself or build a cave correct yeah uh Utah overhangs and things like that well we actually wanted our artists to do those things unfortunately we didn't get enough of that in our shipped product we wanted them to do that the big thing was whether or not that that should have an impact on our Sim representation so that that was the big question and early on they said we don't have time to innovate on the pathing and all those other things so we'll just use a height field right so okay well that makes perfect excellent thank you yes sir uh great to talk um I'm from uh
Japan sir maybe could you give me a presentation uh yeah you can actually download the presentation on the GDC website as soon as GDC is over and uh I'll have a version at bonfire studios.com as well do want need to grab that sir I'll just unhook from the system um so that that should be available within the upcoming weeks sir okay thank you thank you so this might be a really newbish question is there would be a good place for me to look to find out about the algorithms for sort of automatically pushing the verts around to balance the UV density um there's we used a a spring Mass tensor system so it's actually something from the particle Dynamics World um where like a relaxation yes exactly yeah um we actually implemented a sort of hacky version first which said that uh if if any two vertices are more than x distance apart sort of just snap them and then uh and then we sort of moved it to these these sort of the particle Dynamics things and then our analyzation process kind of handled the details of
saying hey these need to be moved over here and here's sort of a a a interest point that everyone needs to move to and and that moved there so I've only I mean this talk kind of blew me away I'm well thank you thank you very much I'm still opting l
Auto-generated captions from YouTube — names and numbers may be misheard.
Distilling the key insights…
Game Developers Conference · 2026
Extra Credits · 2026
Comments