Started by func_Mathias, March 26, 2016, 09:50:49 PM

Previous topic - Next topic


Here's my map for the first "Old School Level Design Contest" at the Wall Worm forums, fy_delaunay_world.
Its a little fight yard map made for CSGO where I really tried to work with the criteria set by the contest.

The main criteria for the contest ware to make a level out of only convex world geometry (brushes), and to make it in 3D Studio Max with Wall Worm.
After a day of thinking I settled on trying to do a style similar to one of my first Max projects, but you know, make it good..
I was aiming for a more cartoony/painted style like TF2 and Firewatch, but in the end it became more cartoony/geometrical like the original, which is fitting for world geometry.

Here is the Workshop Download so you don't have to look hard for it, and here is a big picture (go to the Workshop for more):
(One thing to note is that its very laggy with bots, not sure why yet..)

The making of.

Here is some story if you're bored :)
The small pictures are clickable and will be shown in groups, you'll have to try to connect which one is relevant to the text.
I am no writer so lets see how this goes.

I knew I wanted to do nature from the start, wanted to push brushes to their limit with something organic, was expecting to hit the brush limit quickly.
The first thing made was a tree, using very few brushes so they could be mass-able, but not look like a boring convex pyramid.
Used 5 brushes to make the overall shape concave so that it would have visible overhang over its bottom part and trunk.
Started out with some simple ground and painted the trees on it as objects to get a feel of the forest, which turned out well.
It was nice, but thought it was just a little bit on the plain side close up. Managed to make the brushes more complex without making the brush count any higher, now it had more character.
Next on the list was finding out how to do some cabin walls and some rocks, the walls were pretty straight forward, rocks needed a little more thought.
I wanted to make sure the rocks were convex to keep brush count to a minimum, used a geosphere with some intense noise on it, and used a WW tool that wrapped it in a convex hull, this hull became the rock pretty much.

So at this point progress was flowing excellently, it should all be valid geometry for Source and it was looking nice.
They needed some textures put on them though, I imagine it could be easy to lose track of your surroundings or just be a little plain overall in first person.
Since the painted look was the goal I tried to see how that could be achieved, but not being that kind of artist I wasn't sure how to pull that off well.
Started testing out what could be done with geometry, rendered some simple grass from the top which gave diamond patterns and put that on a green noise, not great but a start.
Not being sure if the noise was a good fit or not I tried adding some detail by replicating what the terrain would do but in a smaller scale.
It's at this point a friend (Rush_Freak) let me know about Delaunay triangulation, figured out how to make it and tiled it manually which took a couple hours with its size.
Applied it to the grass as a normal map and man that adds a lot more depth and detail than anticipated, at this point the noise didn't really seem necessary any more.

So with those results the noise was removed and the results were good, thought about what else this magical normal map could be used for, how about EVERYTHING!
So I put it on the tree trunks, and it was good, I put it on the rocks, and it was good, I put it on the leav.. wait no it wasn't all that great there.
While it looked good on many things, just using Delaunay on everything could get stale, some things like the trees needed something more sensible and fitting for their shape.
There ended up being some textures that had to be quite specialized compared to the rest, the most complex is probably the roof tiles with moss on them.

At this point I should probably start to cut down on the details a bit, heh..

Anyway, I got a tree stump and a lovely axe done, then after three weeks of life stuff the cabins were made and it all fit in nicely.
Compiled and tested it in Source and didn't actually have many problems, got those fixed up and it looked better in Source than I thought it would. A little dark, but good.
It hit me there now was only 4 days left, and I had no layout at all or any idea how/if a whole scene like this would work in Source.
I slapped together some splines that could represent a layout, it took shape pretty quickly, tried to make it with enough interesting areas and twists and turns in between.
Using the WW plug-in corvex with the splines it generates some quick brush walls that can easily be changed as testing proved necessary, also used this to make the tree cards near the end.
While testing it was quickly apparent it was way too big and after a few rescales ended up only half the size, way to overestimate. Feels a lot smaller when making it.

We're nearing the end, most assets are done, there is now a layout to place the assets around in, I start placing trees like a madman to get an idea of the density and visuals.
The ground needed to be less flat however, began sloping the whole area down towards the lake making the tiny river flow into it.
I got to the point of the second picture under, thought this would be a good place to compile.
Got a nice river, the little "island" with lots of trees on it, 4 cabins spread across the map and all the world geometry done, and only with 1800/8192 brushes used, I seem to be in a good position.

Then, we all know what's coming, don't we?
A problem I've never had before and never thought would be a threat popped up, how kind of you Source, you shouldn't have. Just 12 hours before the deadline too? AWESOME!!

The map did not compile, vbsp.exe crashed, got an error I was completely unfamiliar with, it hit the "MAX_MAP_PLANES" limit, a limit I haven't even glanced at before because when you make boxes it's no problem.
Source basically makes an infinite plane for each face of a brush, if two of these planes match they can use the same one, when building your normal blocks they will share a lot, but with all my angles they don't.
After deleting about half of the terrain it was finally able to compile, with this limit there didn't seem to be any way of making this not look like a wasteland.
I basically went into panic mode and tried to look for ways to crack vbsp.exe to update the number of planes it can store, only found cracked ones for the default vis cut size.
Unsuccessful after maybe three hours of searching I went into a state of hopelessness and ordered pizza, it was delicious.

The pizza got me feeling a little better, it seemed the best way to finish this would be to redo the level on a smaller scale, with only 6 or so hours left the pressure surely was on.
There was little choice but to make a little arena map as seen in the third picture, one house for each team in a little area surrounded in trees, that's about all that could fit, barely could afford cover.

Crunch time is seriously on, trying to make viable cover while also not reaching the plane limit, there were textures to fix and lighting to get right and making sure not to get other errors.
With just an hour left I had to render a 2d skybox and make tree cards to make it feel more like a dense forest, just about managed to get it all done.

Somehow it had been done, all hope was lost 8 hours prior, but there it was, completed for the contest.

We did get an extra bonus day a few days later because of some issues another contestant had and that made me able to get some pretty nice varied terrain going, as well as some water and dirt to get some more colors.
At this point I am very happy with the map for the size Source allows me, only things left to do is change where some cover is placed after some game play feedback and possibly make the houses enter-able.
I feel happy to release this as is for now on the Workshop to get some feedback, since that'll automatically update for people.

Here's a comparison of the original entry and the one after the bonus day. Hope this story was interesting enough, there will be a bit of random thoughts bellow.

Thoughts and pros with Max/WW.

I've learned lots about the map making pipeline in Max from this, it's a now lot less scary/mysterious than it seemed at first.
It was an excellent way to learn making maps in Max with this contest since there was no worry about models at all, and in my case not about importing many texture libraries either.
Very much recommended to see what you can do with just brushes when starting out, doesn't have to be as bad (complex) as mine.

I think one of the coolest things about mapping in Max is how clever you can get with modifiers and plug-ins, on all my trees I had a noise modifier, when I copied them around the map they all looked the same.
But with help from a plug-in I could randomize the seed of the noise modifier on every tree at once and suddenly they're all different, I also used another plug-in to give them random rotation and a bit of height variation.
It would be quite the tedious task in hammer to go in to vertex manipulation to change each one up a bit and then after change all the rotations and positions manually.

Another very nice thing if you're being adventurous with your brush making is the WW plug-in Brushify. It helps you get things to snap to grid and keep the brushes valid, which was quite useful for this map.
Shawn (WW author) also added a neat feature during my struggle that can collapse faces with a certain material id and can remove one face of off each brush if you're struggling with limits, which lowered my plane count by 10%.
Overall Wall Worm is filled with little features that might help you out, skywriter is one I like a lot, just place it and it will render a 6 sided 2d skybox that works in game for you.

Overall this was a great experience, wish I could have done without the misery pizza, but in the end it was all worth it.
If you like fy maps or just want to test my map for the looks feel free to give some feedback :)

Here are two pictures, go to the Workshop page for more.


Great write up Mathias. Thank you for sharing this. I read the whole thing with a giant smile plastered on my face... so much that my cheeks now hurt! :D


Enjoyed the write up.  Loved all your time saving methods, especially the way you randomized the trees, nice job :)

If you don't mind me asking, what plugins did you use to randomize the noise and rotation?


Quote from: the6thmonkey on March 27, 2016, 12:00:04 AM
If you don't mind me asking, what plugins did you use to randomize the noise and rotation?

For the seeds I used "Modifier Modifier Zorb", it modifies modifiers in all or all selected objects, also material setting and some others I think.

And for the random position/rotation I got "Object Randomizer V3", can randomize position, rotation and scale but absolute and relative.
Keep in mind it does not work for groups, if they are grouped they will act independantly of eachither, so for my purpouse I had to edit it a little with the help of Shawn.
You shouldn't need it for groups in most cases but I'll tell you what to edit just in case, I'll keep both the edited and unedited versions for future use.

Thers two instances of "for obj in selection do" in the code, replace both with "for obj in selection where isGroupHead obj do", and there you go :)

Joris Ceoen

Very interesting and helpful :) Keep up the great work! It's really nice to see more people dive into the tools. The Wall Worm Model Tools are endless for both modeling and level design! I'll scan this finished levels/wip threads more now :D


Quote from: func_Mathias on March 27, 2016, 10:15:59 AM
Thers two instances of "for obj in selection do" in the code, replace both with "for obj in selection where isGroupHead obj do", and there you go :)

Awesome, thanks for the information!

SMF spam blocked by CleanTalk