I'm trying to figure out how to manage a scene with some arbitrary mixed indoor and outdoor environment.
I guess the outdoor would be using some heightmap related stuff and rendered using proper level of detail.
The indoor areas are extremely detailed buildings with rooms interconnected.
Here's an example with some arbitrary rooms and hills.
I was reading about various things such as portal culling for indoor environments. I understand the concept but not how to implement it.
I've done some Doom 3 mapping so I know how to set up portals as a mapper, but I'm not sure how the engine knows what the different rooms are between the portals. It seems to determine what the actual rooms are somehow without the mapper having to say, "This is room A" for example. You just place portals in tight corridors and door ways and the engine somehow figures out the rest.
I'm familiar with how back in the day Quake and all those games used BSP trees for that but from what I hear BSP isn't really being used nowadays.
I fooled around a bit with the Crysis 2 Sandbox editor and I feel like the engine I'm making can be similar to that. I haven't been able to find any good tutorials on mapping interior spaces in Crysis 2 though. After playing Crysis 2 I know it's possible to have some detailed interior areas inside buildings as well as large outdoor areas. I'm not sure how level designers do that kind of thing though. All I know is you create terrain and then import some 3DS max models for the more complex shapes. They also have their own modeling tools similar to 3DS max's for modeling directly inside the level. This is fine for modeling a village of some sort with very simple buildings that you either can't go inside of, or have very simple rooms. I'm not sure how they make the more complex levels that you see a lot of in Crysis 2.
I'd also like to know how they would make a map like Operation Metro in Battlefield 3. There's a lot of outdoors going on as well as networks of complex interior rooms inside the buildings and the subway tunnel.
I've also fooled around with the Skyrim Creation Kit a bit and watched some tutorials. They have complex interior areas as separate scenes that the player loads in and out of which isn't really what I want. I want the player to see a building, and walk inside it seamlessly. Maybe taking a position at a window and firing down at some enemies. Pretty standard stuff in Battlefield 3.
In my previous work I've been using 3DS max to make arbitrary polygon environments organized by a uniform 3D grid. I have View Frustum Culling operating on the 3D grid which works, but I have no other forms of occlusion to prevent rooms you can't see into from being drawn. This was fine for a 2D platformer rendered in 3D.
Both games just use mesh soups with some software occlusion culling, actually. There are some details for each in publications issued by the respective shops, off the top of my head Crysis 2/CE3 does an async readback of the hardware depth buffer then does some reprojection to estimate the current occluder set. BF3/FB2 actually maintains a separate low-resolution software rasterizer that draws some special occluder geometry and culls against that.
clb: At the end of 2012, the positions of jupiter, saturn, mercury, and deimos are aligned so as to cause a denormalized flush-to-zero bug when computing earth's gravitational force, slinging it to the sun.
Heh yeah I was reading about the software depth buffer thing they had going. That probably needs to be super efficient or something. I read that Crysis 2 does that too. Not sure how well I could possibly write a software rasterizer for that kind of thing. I hope it wouldn't need non cross platform assembler of some sort...
I've read about using GPU for occlusion tests but those make the engine architecture way more complicated and are a frame late or so. The low res software occlusion seems like it would at least keep the engine architecture itself a bit more simple.
So when you render the occluding meshes, it's supposed to be fast because it's really simple geometry? I can see the view frustum having many rooms but be rendering about 100 or so occluding polygons which should be super fast...
I wrote a simplified software rasterizer in as3 (flash no less) and it should actually be pretty effective for this kinda thing (indoor/outdoor) in fact if you had a sample scene (.max or 3ds file or something) I could try it out and post the results on line...
you can see a post with a little more about it here: