|
2 registered members (TipmyPip, izorro),
556
guests, and 2
spiders. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Optimize the Level
[Re: JetpackMonkey]
#45477
08/16/05 19:24
08/16/05 19:24
|
Joined: Oct 2004
Posts: 1,856
TheExpert
Senior Developer
|
Senior Developer
Joined: Oct 2004
Posts: 1,856
|
Excellent advices, i usually uses. This should be on the manual, Conitec should put such tips , advices for very good FPS in the manual. I use what some people call agressive Culling. my level is splitted in several models , and each part is only visible when the player is in an certain area, so ech part will be displayed only if the player is in the proper area, it saves lot of FPS. An yes , use models, no Blocks at all for collision use C_move and if a level part is very detailled with lot of details, collision checking will be slow for lot of triangles, so : -make the hight detailled model passable - make a more simple collision model without all details from the hight detailled (polygon reduction tools or manually) - make the low poly version with alpha = 0 : invisible With that you'll have very detailled model passable , with an invisible low poly version at same position for fast collision checking No Blocks at all, caus even some small blocks really put down a lot FPS : i hate blocks 
|
|
|
Re: Optimize the Level
[Re: TheExpert]
#45478
08/17/05 00:25
08/17/05 00:25
|
Joined: Sep 2002
Posts: 8,177 Netherlands
PHeMoX
Senior Expert
|
Senior Expert
Joined: Sep 2002
Posts: 8,177
Netherlands
|
First off, nice advices in this thread! Quote:
I use what some people call agressive Culling. my level is splitted in several models , and each part is only visible when the player is in an certain area, so ech part will be displayed only if the player is in the proper area, it saves lot of FPS.
When you design your level the proper way, the engine should already do this for us.. I would like to hear conitec on this! About when the engine does render something, and when it doesn't render something. I've made an outdoor level with a terrain and water and everything runs great, except when moving a certain distance away from the terrain and turning towards it again. I know what's the problem though, some models come in the view at the same time, and that seems a little to much. I've got to add LOD models and LOD to the terrain, if possible.
Quote:
An yes , use models, no Blocks at all for collision use C_move and if a level part is very detailled with lot of details, collision checking will be slow for lot of triangles, so : -make the hight detailled model passable - make a more simple collision model without all details from the hight detailled (polygon reduction tools or manually) - make the low poly version with alpha = 0 : invisible
With that you'll have very detailled model passable , with an invisible low poly version at same position for fast collision checking
No Blocks at all, caus even some small blocks really put down a lot FPS : i hate blocks
Thanks for the collision hint, I'll keep that in mind. By the way for static stuff you might as well use invisible blocks for collision, I found no difference in fps (ok maybe 1 or 2 fps less, when using it 'a lot') (except you'll use extra portals?).
As for my own tips for speeding up a level; 1#Think good about the general level design; one room with 200 objects followed by a room with 600 objects, 40 sprites and a large block structure, already visible from the first room won't do your game any good. 2#Don't waste texture memory on objects; if they are small enough to use a smaller texture that'll give the same effect, then use a smaller texture. Also; there is no need to use a 32bit texture for every skin/texture. 3#Are you creating a top down or sidescroller game? Use 512x512 skins at maximum and use it rarely, it'll saves heaps of memory for extra speed and you most likely won't need those extra details because of the camera distance.. 4#When creating a detailed first person shooter, make the details with models, never with blocks. 5#As for blocks, switch on the 'none' flag on surfaces that never can been seen by the player. Also, you don't have to model those areas. For example if a mountainridge is the boundary of your game's world, then modeling the backside of it, is senseless. 6#Use LOD where ever possible. 7#When using blocks for your level, NEVER use CSG substract, it'll ruin the level. Always try to manually make complex geometry, and yeah, I needed some time to be able to handle those 'concave block' errors... 8#Try playing with the BUILD options, and you could decide not to set everything to superb quality there. 9#Don't use a lot dynamic lights. 10#On models and terrain you could use the detail / mipmaps things, in my experience they almost didn't slow things down, but add a lot of detail to the skin. When used in the right way, you can get (almost ) the same quality as a just a 1024x1024 skin, but while using a 512x512 skin with detail/mipmapping.
I've probably forgotten quite some things that I've experienced as stuff that'll make the level run slow(er), but I'm a bit tired, just hope I've added some useful things...
Cheers
|
|
|
Re: Optimize the Level
[Re: PHeMoX]
#45479
08/17/05 01:59
08/17/05 01:59
|
Joined: Sep 2004
Posts: 1,214 Austin, Texas
Josh_Arldt
Senior Developer
|
Senior Developer
Joined: Sep 2004
Posts: 1,214
Austin, Texas
|
Quote:
Think about your level design and what you can and cannot see. You can make a rich-detail city using LOD at it's best. This isn't the type of LOD where you have multiple files of different detail levels, it's a type of LOD that, if something is otherwise invisible, turn the invisible flag off as otherwise, it'd be rendered.
You can find a script to do this here . Read through the whole thread first because there have been some good moddifications done to it. 
|
|
|
Re: Optimize the Level
[Re: Josh_Arldt]
#45480
08/17/05 07:26
08/17/05 07:26
|
Joined: Oct 2004
Posts: 1,856
TheExpert
Senior Developer
|
Senior Developer
Joined: Oct 2004
Posts: 1,856
|
I'm ok with you Phemox  Just one thing not : i don't like/use any Blocks  And for agressive culling , when you manage what parts of level are displayed, the engine won't do it caus i talk about models not BSP. For example you have a room after a turning wall , you can't it when you are before the turning room, but the engine would display it caus that's models, so i use a script on the room that will be displayed only if camera in a certain area. I just wait for the next update of the engine that will have lightmaping on models 
|
|
|
Re: Optimize the Level
[Re: TheExpert]
#45481
08/17/05 10:32
08/17/05 10:32
|
Joined: Sep 2002
Posts: 8,177 Netherlands
PHeMoX
Senior Expert
|
Senior Expert
Joined: Sep 2002
Posts: 8,177
Netherlands
|
Ok, I see, it's because of models... Yeah, I know blocks aren't perfect  ... By the way, about the models and what the engine will render or not, this means that when a model isn't literally visible that the engine still will render them? In that case we would need some traces to determine if the model is visible or not, aaarrrggh  Nevertheless I have a similar LOD script like Josh pointed to to handle everything.  Cheers
|
|
|
Re: Optimize the Level
[Re: PHeMoX]
#45482
08/17/05 10:59
08/17/05 10:59
|
Joined: Jan 2004
Posts: 2,013 The Netherlands
Excessus
Expert
|
Expert
Joined: Jan 2004
Posts: 2,013
The Netherlands
|
You guys want to create your own scripted culling? I don't think using traces for every model will improve the framerate  , and you would need more than 1 trace per model, since it's center can be obstructed while another part should still be visible. If you use BSP levels, this would not be needed at all, since BSP culls objects that can't be seen. Quote:
I use what some people call agressive Culling. my level is splitted in several models , and each part is only visible when the player is in an certain area, so ech part will be displayed only if the player is in the proper area, it saves lot of FPS.
So you want to only display geometry that is close to the player? Why create such a system when you can just set clip_range? Geometry behind the clip_range doesn't get rendered, right?
I am not an expert on this, so excuse me if I gave false info!
|
|
|
|