Right now I have a modular set up for my map. Lots of stuff in view at the same time so to lower draw calls i am creating large merged versions with simplygon with much less polys… What i do is make that low res model appear a certain distance… and the couple of hundred models that were the modular disappear at a certain distance. Right now i use level streaming to create a modular version of an area… and a low poly version of the entire area in another map… They both overlap position wise. So…
Problem number 1.
Level A modular version overlaps Level B low res 1 draw call version… so lighting calculates together so it screws up with shadows on stuff that shouldnt have shadows… because it considers them in the same part of the light. I got around this by building both versions of the level seperately.
Problem number 2.
After i build both versions of lighting and it looks ok, i still have to deal with precomputed visbility… If i build precomputed visiblity with them together… some geometry from the low res map will block out view of the modular version of the map so certain props will disappear unexpectedly.
If i do precomputed visiblity seperately with the other areas of the map envolved… with 2 seperate builds… that doesnt work either. My project is vr and it has a solid 90 fps … if i can use precomputed visiblity… which of course right now… i cant find a way to make that work…
So I guess my question would be to anyone… whats a good way to handle all of this? I mean lighting is acceptable for me the way i do it, but that doesnt help precomputed visiblity.
Hierarchical LODs are an interesting feature and all, but there are way to many problems associated with those.
1.) Memory consumption… they would create new textures and models(unless im mistaken about how they work)… my memory is already at the very limit.
2.) Polycount. I have many buildings and furniture… interior and exterior… would be great to just use simplygon cloud (which is what i currently am doing) to replace an entire section of the level to make it 1 draw call or so… with very little polycount… were talking a million polys vs 2,000. HLODs are going to keep the high polycount… and high memory consumption…
When you say the system will be revamped in 4.11. Will I be able to create LODs for entire sections of the map myself in a 3d package and add those in to replace all the modular stuff? Seems like a pretty vital feature that your competitors have. Also is this outliner already added in 4.11 beta? I am currently on 4.10.
=========
As for keeping draw calls down… honestly i already have merged most of the level manually to the point that it would be hard for the hierachical lod system to do much at all… im more afraid of it adding to memory consumption… and i tend to get more draw calls without precomputed visibility… so this all is making it very very difficult to work with… I may have to manually turn things on and off by a volume or something if thats my only option which will sadly be TONS of work and wasted time…
With Problem 1, Your solution of building the levels separately would be the way I would approach it. If it’s draw calls that you’re worried about and wanting reduce these you may want to look at using the Hierarchical LODs, which can be enabled in the World Settings.
This system is getting revamped a little bit in 4.11 and the interface is changing so that you can use the Menu > Window > Hierarchical LODs Outliner.
You setup multiple LODs and these objects will be clustered together based on the settings you use so that they can reduce draw calls.
For Problem 2, Precomputed Visibility Volumes will not work efficiently with levels since this data is stored in the persistent level, which could be some of the issues you’re seeing with precomputed issues.
Epic’s latest game is using Hierarchical LODs extensively to help reduce draw calls, so I feel like this is something that could help, especially if you’re targeting VR where you need to keep these draw-calls to a minimum.
Problem with cull distance volume is that it requires precomputed visibility to work. That apparently is something I probably wont be able to use unless i can make HLOD work with my own distance mesh or something from an fbx… At least thats what I noticed. Let me know if I am mistaken.
Again i wouldnt want to use HLOD for a huge area. It wouldnt make sense to have a million poly model when what i want to do is replace it with a 1,000 poly model.
I suppose I will have to download 4.11 and see if it has a way to import my own FBX mesh that i created with maya and simplygon cloud to insert as a replacement LOD for a section…
Right, this would create new static meshes that are combined assets, but this also reduces draw-calls because it’s combining assets and material (if enabled) to create a single draw call for the various objects depending on the bounds set.
You’re right, it will just combine the assets, but not reduce the mesh quality with their own LODs. There may be an option to use this with Simplygon or something, but I’m not positive since I’ve not extensively used it with 4.11 yet.
4.11 changes that I’ve noticed from 4.10. These are available in the Preview Build as well:
Preview LODs is no longer located in the Build drop down in the tool bar.
Now need to go to Menu > Window > Hierarchical LOD Outliner to bring up HLODs and view the HLODs generated.
HLODs now produce a static mesh that is editable with a limited Static Mesh Editor and if you select an HLOD in the level you can change the settings for the details panel.
Will I be able to create LODs for entire sections of the map myself in a
3d package and add those in to replace all the modular stuff?
You can use the Hierarchical LOD Volume (modes panel) to set specifics for any zones you want or don’t want to be affected. If you use this it should only create HLODs in this area vs the entire level.
=======
Another way to cull is to use the Cull Distance Volume that will disable assets based on the settings you add for the level. This will cull things based on the size and distance you enter. You shouldn’t need to go through and manually disable any meshes you don’t want to have rendered.
Cull Distance Volumes do not require Precomputed Visibility Volumes. These can be used together or independently.
There isn’t a whole lot of documentation on Cull Distance Volumes yet, but the documentation for their use and setup from UE3/UDK is still relevant to their use: UDK | VisibilityCulling Distance Volumes
is there any documentation for HLOD in its current state? So far doesnt look like i can throw my own mesh in there to replace an area… which kinda makes it pointless for me since for me hlod doesnt really help all that much draw call wise.
This just kinda sux because with HLODs im at 1000-1400 draw calls in the worst area… with my method im at like 800… All this automation is great and all, but its not always a good thing. I would prefer you guys give us a method were we can do group lods… not just lods for single models… Where we can choose whats in the lods…
Look to unity3d for a good method. They have an awesome method where you can choose what models, particle emitters, lights… basically any object can be part of a single LOD. Just such an easy no hassle way of getting stuff done. Are you guys even considering anything like that, because in my opinion this is a necessity if your trying to take thigns like VR seriously.
No official documentation yet. It’s listed as in-progress in our tracker, but with the changes that have happened between 4.10 and 4.11 it’ll probably not be out until 4.11 final release or a little later depending on the learning resources team’s priorities.
As far as draw calls are concerned, I grabbed the Inifinity Blade: Grass Lands map from the marketplace, which is free, and placed a HLOD Override Volume around the main complex chunk. I only did a single HLOD and set only changed the bounds to be 5000. Once everything was built I saw the mesh draw call go from ~1300 down to 89.
Yea but thats not really a fair comparison. My map has many different materials, different textures, all in the same area. I go from like 1600 draw calls to 1400 drawcalls… and it doesnt help that when i spin the camera for a moment it will jump to 3000. I would prefer to replace every single prop in an area … regaurdless of the material or texture… as 1 simplygon mesh. poof… proxy mesh. 1 texture. Its a distance mesh so its only 2000 triangles as well. Plus i dont even want to merge interior models… id ratehr those just get deleted… lots of extra geometry for an area and for what? You will never see whats inside a room from across the street. Automation is great in games where your always outside, but not so great if u have to deal with interiors to exteriors.
I’ve not personally tried this with Precomputed Visibility and I’m not at my machine to test for certain, but if you select the mesh in its Details panel the option for “Treat as Background for Occlusion” enabled. If that seems not to work let me know and I can look into it when I’m back at the office tomorrow or Monday and see what’s going on.
I’ll give that a try thanks. Will that still allow me to make thigns disappear based on distance? The things that are “treat as background for occlusion”?
I’m not sure, if that overrides the min/max draw distance flag or not as I think these should work in conjunction without overriding the other. I can give it a test when I get a chance to clear out some of my more pressing 4.11 and bug reports.
I tried the “Treat Background for Occlusion” enabled on those meshes… that still doesnt seem to work… Those meshes still get culled in odd places and they even block other geometry (i think) and make smaller meshes get culled some of the time since im assuming they overlap even if the big treat as background ones disappear up close.