Pimla Shinks

Thankyou. Yea I’m loving the system I made for dynamically loading in objects around the player as you move through the world. It’s allowing me to make very large worlds very easily, without having to worry about the scene slowing down despite having tens of thousands of objects. Still need to make a video showing this… time just keeps making itself busy for me :frowning:

I’ve increased the intensity from the hemi light and it looks better. Cheers.

Well… I’d love to say that I had some great reason for this, like it plugs into your suit, or it works via your mind… buuuuuut I forgot to put one in :p. Well noticed and thanks :slight_smile:

Thankyou. I have tried to be very flexible with performance. As I mentioned above, the world is loaded in around the player, so for lower end computers, you can set the graphics quality to low and it will load in objects from a closer distance, and for higher end computers it will load in objects from far away. Pretty simple, but it works pretty well. I just use the mist to hide the popping in of new objects, so for ‘low settings’ the mist is quite close to you, and for ‘high settings’ its quite far away. You get the idea.

When I’m developing, all the objects are being read from a database, which has allowed me to split all the objects into different groups that can be called from the database. So I have groups like, foliage, buildings, buildings interiors, characters etc… And within those groups I can have sub groups, like ‘high resolution assets’ and ‘low resolution assets’. So an object can have a high resolution version and a low resolution version, each with their own discrete LOD. So when I start the engine, I can specify whether I want to use high resolution assets or low resolution assets. When I dump everything from the database onto my hard drive, it works the same and allows for the same flexibility without gamers having to read from a database (meaning I don’t need to run expensive servers when I deploy this game).

The Specs for the video was a fairly high end pc running at a comfortable 60fps (or ~180fps without vsync):

CPU: i7 3770k
GPU: GTX 580
MEM: 8GB standard stock ram

But for ‘low settings’ I can run it on my laptop at a (sort of) steady 25 - 30fps:

CPU: i3 something or other.
GPU: intel hd4000 (no dedicated GPU)

A (sort of) steady 30fps for a relatively low end computer is ok. I happy with the results, and while it doesn’t look as good as the ‘high settings’ its fine for me. I’m not going to be able to get perfect performance on all computer specs and I’m happy with the results so far.

I’ve a low/mid range GPU lying around, thinks its an old gfx 9800 or something, so I’ll try some testing with that and see I can get from that.

@hanzo, Sepiroth, 1adamm115, Ravenblood: Thanks for the kind words. Really keeps me motivated :slight_smile:

Great! I’m using a similar method. But the database only keeps data for buildings and other variable objects. The vegetation is spawned in a procedural way! I have a limited number of trees/bushes groups, merged as one object placed in a grid. Depending if one spot will have a vegetation group , a group is placed on that surface. As the player approaches the spot, singular high meshes are positioned as the part of the low poly mesh is displaced or made invisible! I didn’t specifically test it, but it works in theory!
For buildings, the first element spawned is an empty, with the building description, such as size, type and structure(interiors) The size will determine from how far it can be seen, and will be a factor for the rest of the LOD system.

Maybe I should combine my method with yours and add a local database to spawn the objects, without having to do replace, check positions, etc!

Yea, definitely sounds like we’re on a similar path for loading in objects. Using the size of the object to determine LOD factors is a good idea, I didn’t think about that. Yea I am also having to add empties to position the objects, but they only last for a couple of frames and then are removed, so the scenegraph isn’t bloated with unnecessary objects.

Are you using this technique for COS? Got to say, your massive thread on COS really helped me understand some of the pitfalls you encountered with loading in objects like this. Many thanks for documenting a lot of things you encountered.

Awesome man!!! Missed this last time I looked through the thread. Glad it gave you a couple of hours of blender fun :slight_smile:

Are you using this technique for COS? Got to say, your massive thread on COS really helped me understand some of the pitfalls you encountered with loading in objects like this. Many thanks for documenting a lot of things you encountered.

I wasn’t concious the documentation helped anyone at all!
In this case, I’ll document my progress more often then!
Thanks Klauser!

5* added

Nice work :smiley:

The multiplayer part you described sounds very cool. Like realtime dynamic loading via the internet!? HardCore!!!

Heres a little something ive been working on. Graphics suck compared to yours, but the gameplay, I believe, will have your pants off.

Spent the weekend modeling some of the characters you encounter (needed a break from coding). Heres some of the renders of them. Just trying to get a feel for the characters at this stage, and these high res models will be used for making the cutscenes. Some of them are retologised/baked ready for the game engine.

…more images

random concept art (sorry for multiple posts, can only fit 3 images a post :))

Klauser, that’s some good artwork there. Well done!

Good luck with the level loading framework. If you’re planning on having multiple players, you’ll need to consider the implications of two players sharing similar and remote spaces, as this will place more demand upon most of the game systems.

The multiplayer for this will be tricky. I’m not sure quite what model you’re going to go for, but be aware that asides from the currently inability (without a patch such as mine (see my SVN)) to control the physics simulation tick, you’re unable to truly correct input from a client. Plus, you’ll likely loose some determinism if the player has to interact with objects at a remote distance, or if their proximity doesn’t load the objects that they should (for example) collide with.

Feel free to message me if you’d like to discuss networking concepts.

Good luck, can’t wait to see where this goes.

I love this one

This project sure takes Blender game engine to the next level in terms of epic-ness.

There was quite a rumor that Blender GE can not handle big data, because of limitations e.t.c. Personally I do not know if this is true because any game level I made was not larger than a ping pong table, but if this game hits the public it would be a paradigm to mention.

I hope that the project goes well, keep up the good work you to there.

These are some wonderfully surreal Character (/Enemy?) Designs – I like the Scapegoat the most. Have you modelled the Goat Skull yourself? Because it looks really good.

Subject 22:22 looks a Bit odd, though not in the creepy Way but rather the Way that it looks more like a blocky/clunky Prototype and quick Concept and the short Leg Stubs don’t look all that threatening due to their Shortness. But other than that, with some morphological Tweaking it could turn into something rather dandy… almost a little Bit like a Puppy to the Pyramid Head. :wink:

Is the red, noisy Effect on the last Artwork supposed to be seen in similar Form in the actual Game? (Because it could be achieved maybe rather easily with a modified Variation of the typical Noise Filters combined with a Vignette Filter.)

Hi Klauser,
I’m glad to hear that someone is using spatial database for bigger terrains & objects placement. I’m currently working on a project which involves spatial database as well and I have a ‘few’ questions for you::smiley:

  1. What spatial database do you use? I’m using PostgreSQL + PostGIS
  2. Do you use LOD for terrain or just for objects(vegetation, buildings etc.)?
  3. How is your terrain mesh represented? Regular grid or triangulated irregular mesh? I use regular grid for the first terrain LOD and lower LOD are automatically created with decimate modifier without seams.
  4. Do you split terrain into smaller tiles? For the first stresstest demo I’m working on I use Takistan map from Arma2:Operation Arrowhead. It’s 12.8x12.8 km large map with 1m resolution satellite imagery as the terrain texture and 6.25m terrain grid resolution. During automated processing I split all input data(elevation, satellite imagery + splat maps(defining detail surfaces)) into 16x16 tiles(blend files).
  5. Did I get it right that you use only two LODs for objects “‘high resolution assets’ and ‘low resolution assets’”"?
  6. How do you actually place the objects? I guess BGE is reading positions from the database, but what mechanism do you use to add them to the scene, AddObject actuator??
  7. How does clutter(grass patches) works? do you read position from DB or it’s placed somehow procedurally?
    Thanks for the answers in advance. Keep on doing great job :yes:

Great job, the models are awesome.

Thank you for the answers klauser, currently I’m using mainly PostGIS’s spatial operators and functions for processing all input data, not for storing data and reading them into BGE. I also want to test raster splitting within PostGIS(currently I’m using OPENCV library and it’s satisfying). I’m wondering how do you store mesh data within db, do you read model’s triangles and ‘re-create’ them in postgis with ST_GeomFromText?

So for threaded loading into BGE you are using LibLoad(…,async=True) ? … and for adding object into the scene bge.logic.addObject()?
How is the caching done, does BGE do this automatically or you had to write it?

Here’s my first test of loading terrain tiles into BGE and herehow does the LODing system work.

What light scattering shader are you using? I have one but my rays aren’t nearly as nice at yours.