Proper mapping techniques
Quote from Interitus on December 1, 2007, 8:13 pmNodraw every brush face that can't be seen. if it doesnt have a nodraw, then its gonna get drawn. I dont believe vbsp gets rid of the extra faces, and will draw them.
I remember being told when I started to nodraw everything that isnt seen because it increases compile time and ... well what gepy said (I just read his post as I typed this)
I build everything with nodraw, then texture everything visible. my compile times are nill.
Nodraw every brush face that can't be seen. if it doesnt have a nodraw, then its gonna get drawn. I dont believe vbsp gets rid of the extra faces, and will draw them.
I remember being told when I started to nodraw everything that isnt seen because it increases compile time and ... well what gepy said (I just read his post as I typed this)
I build everything with nodraw, then texture everything visible. my compile times are nill.
Quote from Shmitz on December 1, 2007, 8:37 pmInteritus wrote:I dont believe vbsp gets rid of the extra faces, and will draw them.Not true. For world geometry, the compiler will take any face outside the map and any face flat between brushes and remove them, which is why if you have no leaks when you clip outside the map, you can see back in.
Detail brushes on the other hand definitely definitely need nodraw on all faces the player can't see, because they are within the world and the engine will render them.
Not true. For world geometry, the compiler will take any face outside the map and any face flat between brushes and remove them, which is why if you have no leaks when you clip outside the map, you can see back in.
Detail brushes on the other hand definitely definitely need nodraw on all faces the player can't see, because they are within the world and the engine will render them.
Quote from volt on December 1, 2007, 9:14 pmA lot of good information here, and here are my reactions:
volt wrote:Longer load time for the player?youme wrote:carefull balanceing act. Too many quick loads is bad. Only a few huge loads is bad too. You have to get a compromise of medium load time with a reasonable number of loads (this is assuming you are making multiple maps into one game)I meant loading a single map, from the time they select which map to load until the time that they start playing.
youme wrote:func_details are great for reducing VVIS time and boosting performanceDoes this infer that any single face not touching the void should be a func_detail? If not, why not? what exactly does func_detailing something do?
MrTwoVideoCards wrote:Another thing to mention is to have the grid as large as possible, why? well thats the basic size of all textures, and brushwork, keeping to this size at all times will help alot when having lots of brushwork. Also the grid is your friend, align to it.Does this mean, as I expect, that if you rotate an entire map by 5 degrees for any reason, it will totally ruin just about everything?
Thanks! Also I'm sure this thread is helping many more than just me...
A lot of good information here, and here are my reactions:
I meant loading a single map, from the time they select which map to load until the time that they start playing.
Does this infer that any single face not touching the void should be a func_detail? If not, why not? what exactly does func_detailing something do?
Does this mean, as I expect, that if you rotate an entire map by 5 degrees for any reason, it will totally ruin just about everything?
Thanks! Also I'm sure this thread is helping many more than just me...
Quote from youme on December 1, 2007, 9:32 pmmaking a brush a func_detail means that VVIS will ignore it. Its helpful for things like windows or the trim around a door. If VVIS were to try and cut visleaves out of it it would make a horrible mess and have way too many leaves (the areas you can see) but if you func_detail them then VVIS ignores them as though they weren't there.
do not go OTT with func details, its not really a sensible thing to do. Also It is worth noting that func_details allow leaks through them.I suspect that rotating a whole map through 5 degrees will cause VVIS to have a fit - don't try it
making a brush a func_detail means that VVIS will ignore it. Its helpful for things like windows or the trim around a door. If VVIS were to try and cut visleaves out of it it would make a horrible mess and have way too many leaves (the areas you can see) but if you func_detail them then VVIS ignores them as though they weren't there.
do not go OTT with func details, its not really a sensible thing to do. Also It is worth noting that func_details allow leaks through them.
I suspect that rotating a whole map through 5 degrees will cause VVIS to have a fit - don't try it
Quote from Shmitz on December 1, 2007, 10:08 pmA rule of thumb for func_detail is that anything that does not block LOS to another significant area of a map should be detail. What counts as a significant area is a little muddy, and is up to the mapper really. A wall separating two massive rooms with tons of stuff should not be detail, even if it's not expressly touching the void. On the other hand, if that same wall had a bunch of windows, it wouldn't be doing the vis tree a whole lot of good, and therefore the entire wall should be detail.
A rule of thumb for func_detail is that anything that does not block LOS to another significant area of a map should be detail. What counts as a significant area is a little muddy, and is up to the mapper really. A wall separating two massive rooms with tons of stuff should not be detail, even if it's not expressly touching the void. On the other hand, if that same wall had a bunch of windows, it wouldn't be doing the vis tree a whole lot of good, and therefore the entire wall should be detail.
Quote from NocturnalGhost on December 1, 2007, 10:12 pmvolt wrote:Does this infer that any single face not touching the void should be a func_detail? If not, why not? what exactly does func_detailing something do?Not quite. Internal walls, etc. should not be made into func_details, as they help block line-of-sight to entities, which means less work for the engine. Take this example:
If the wall to the right of the player was a func_detail, all the entities beyond it would be visible to the engine, and therefore rendered, despite the fact you can't physically see them from that point.
Good things to func_detail are small, or oddly shaped brushes, that touch larger brushes. An example is a simple box room, with a cylindrical column stretching from floor to ceiling.
If the cylinder is a standard brush, the compiler will chop up the floor and ceiling where the cylinder touches it. Not only this, but it will chop it up into many oddly shaped pieces, which will affect both compile times and performance in-game, not to mention lighting.
If, however, the cylinder is made into a func_detail, the floor and ceiling will not be butchered by the compiler, and will remain as one brush, instead of 20 odd shaped triangles.
The func_detail method is not limited to complex shapes either. If you have a basic room, and put a small cube brush in the centre of the room touching the floor, the compiler will divide the floor up in a tic-tac-toe style pattern, making 9 brushes instead of one. Func_detail will avoid this.
An example of this usage is the metal walls in Portal, that have panels slightly sticking out in some places to prevent a repetative look. If they weren't func_detail, the walls would end up being split into lots of smaller pieces where the panels touched them, and player framerates would take a hit, as well as compile times being much longer.
To learn more about optimisation methods, go to this site. It is very detailed, if a little hard to follow at times. I only know the basics myself, but even some optimisation is better than none at all
Not quite. Internal walls, etc. should not be made into func_details, as they help block line-of-sight to entities, which means less work for the engine. Take this example:
If the wall to the right of the player was a func_detail, all the entities beyond it would be visible to the engine, and therefore rendered, despite the fact you can't physically see them from that point.
Good things to func_detail are small, or oddly shaped brushes, that touch larger brushes. An example is a simple box room, with a cylindrical column stretching from floor to ceiling.
If the cylinder is a standard brush, the compiler will chop up the floor and ceiling where the cylinder touches it. Not only this, but it will chop it up into many oddly shaped pieces, which will affect both compile times and performance in-game, not to mention lighting.
If, however, the cylinder is made into a func_detail, the floor and ceiling will not be butchered by the compiler, and will remain as one brush, instead of 20 odd shaped triangles.
The func_detail method is not limited to complex shapes either. If you have a basic room, and put a small cube brush in the centre of the room touching the floor, the compiler will divide the floor up in a tic-tac-toe style pattern, making 9 brushes instead of one. Func_detail will avoid this.
An example of this usage is the metal walls in Portal, that have panels slightly sticking out in some places to prevent a repetative look. If they weren't func_detail, the walls would end up being split into lots of smaller pieces where the panels touched them, and player framerates would take a hit, as well as compile times being much longer.
To learn more about optimisation methods, go to this site. It is very detailed, if a little hard to follow at times. I only know the basics myself, but even some optimisation is better than none at all
Quote from msleeper on December 2, 2007, 12:40 amI've skimmed this thread and seen a lot of "I thinks" and "maybes" about stuff, especially when it comes to optimization. I'd deffinately give this article a read:
http://www.student.ru.nl/rvanhoorn/optimization.php
It explains when and how to func_detail, how the best way to apply hints are, and a lot of other good topics.
All of that said, the best way to learn to get better at making maps that run smoothly and do not have big lag spikes is to learn to think like the compile tools do. When you can learn how the engine works, you can play into it's strengths and weaknesses.
Pretty much everything MrTwo said - especially about staying on the grid - is all true and his link is another priceless read.
I've skimmed this thread and seen a lot of "I thinks" and "maybes" about stuff, especially when it comes to optimization. I'd deffinately give this article a read:
http://www.student.ru.nl/rvanhoorn/optimization.php
It explains when and how to func_detail, how the best way to apply hints are, and a lot of other good topics.
All of that said, the best way to learn to get better at making maps that run smoothly and do not have big lag spikes is to learn to think like the compile tools do. When you can learn how the engine works, you can play into it's strengths and weaknesses.
Pretty much everything MrTwo said - especially about staying on the grid - is all true and his link is another priceless read.
Please do not Private Message me for assistance. Post a thread if you have questions or concerns.
If you need to contact the staff privately, contact the Global Moderators via Discord.
Quote from msleeper on December 2, 2007, 1:02 amYeah it sucks doing that, but in the long run you and your maps will be better off because of it.
Yeah it sucks doing that, but in the long run you and your maps will be better off because of it.
Please do not Private Message me for assistance. Post a thread if you have questions or concerns.
If you need to contact the staff privately, contact the Global Moderators via Discord.