Advertisement

A Tile engine/map editor demo......

Started by February 05, 2000 10:14 PM
37 comments, last by Darrell 24 years, 8 months ago
I noticed some bugs in the rendering. While walking the character, twice some tiles from the hut were drawn over him, when they shouldn''t be.
Also, the framerate drops amazingly when the hut is on the screen. Either your multilayer rendering algorithm needs optimization, or your map models do (considering the bitmaps i saw you using, the hut could be optimized).

Keep in mind, that plotting 200 pixels with one call is hellable faster than plotting ''em with 15 calls.

CPU: AMD 400
RAM: 128MB
Video Adapter: ATI 3D RAGE IIC AGP (8MB)

i got about 79FPS withough the hut on the screen, and about 55 with the hut on the screen.

I''ll try to remember to check it at home too where i have a CPU: PIII 500
RAM: 128
Video Adapter: 3dfx Voodoo 3000 (16MB)

c ''ya around.

PS: Good effort. Keep up!
... LEMMINGS ... LEMMINGS ... LEMMINGS ... LEM..... SpLaSh!...Could this be what we stand like before the mighty One?Are we LeMmIngS or WhAt!? ;)
60 fps even. NeoMagic 256ZX, C400, 64 MB.

Good job
joeG
Advertisement
I''m aware of the performance problem when multilayer buildings are on screen. The bottle neck is the actually blitting, I draw left to right, top to down, and each tile is rendered from low to high. I can''t see anyway to optimize this routine, basically the more items you have onscreen the more blits that are going to occur.

Is there anyway to force DirectX to not lock a surface. i.e. while I''m rendering my backbuffer I''d prefer that each call to blit did not lock the backbuffer.
Does DX run in a different thread for blits? If so then not locking might not preserve my "ordered" blitting.

My theory is: if I can get atleast 20fps in windowed mode, with alot of objects on screen, then I can just lock my frame rate at 20 fps and don''t worry about it.

Does anyone have any thoughts on this? If anyone wants to see the code I''m willing to put it up for download on the site. Post here if interested.
Hello Darrell!
I am working now on my tile engine, and i crashed on the problem of blitting.
It seems that doing many small blits instead of a big blit has a lot of overhead. Enough to halve framerate. I do not see a way around this, though. And if you have multiple layers and alpha blending, things get a lot worse.
I am releasing a demo of my tile engine very soon, but in a 32x32 pixel tiles on a 800x600x16 resolution it is throwing no more than 42 fps, which is very bad. My engine is overheaded (not isometric). Any ideas how to speed up the blits?
By the way, which bit depth has your engine?

Daniel.

It''s not so much the blit size, but how many you do. So smaller blit sizes usually mean more blits in general. It''s the locking of the surface that creates the most bottle neck.

To preserve the correct order of your scene, this usually means alot of overdraw and I''m not sure of an effective alternative to do this with tiles. I''m going to update the engine so you can switch to modes 800x600 and 1024x768 as well, so you can see the performance in those modes.

The engine currently is running in 16 bit colour depth.
There are plenty of optimizations

Here''s one.
Consider that the ground itself has two layers. One layer has huge tiles. They are simple textures of terrain... The other layer has little terrain tiles on the ground. Just a few objects in this terrain is drawn, just to sparkle up the terrain. These can also change so that the terrain becomes interactive.
The buildings layer has other sized tiles. Greater than tha second terrain layer. Assume that if the user doesn''t see the interiors, you can place a plain bitmap there. If the user sees the interior, then you''ll draw the tiles to represent the interior of the building.
This way, you end up limiting the blits heavily.

Also, for many renderings on a surface, consider that it might be possible, to just lock the surface and perform the blits your-self. Software rendering, which in your case will prove faster than DirectX''s rendering.

Personally i use the DirectX''s rendering, when i render LARGE bitmaps.

I know this takes some more time to develop, but trust me, its faster. Also, try to find someway to optimize the calculation of the blitting coordinates.

Hope these help for a start.

c ''ya
... LEMMINGS ... LEMMINGS ... LEMMINGS ... LEM..... SpLaSh!...Could this be what we stand like before the mighty One?Are we LeMmIngS or WhAt!? ;)
Advertisement
I''m considering implmenting my own blitter however I don''t think that I''ll be able to beat the performance in full screen mode, which is what I''m targeting.

Windowed mode will be optional for users with fast enough systems.

I''m satisfied with 20 fps on low end systems. Typically in fullscreen mode most people seem to have good enough performace for me to start adding game elements - NPC''s, AI, projectiles etc.

160-210 fps in windowed mode, 110-130 fps in fullscreen.
My computer is Celeron 466, Voodoo 3 3000, 64mb.
What was the language you used in editor and in the game?
The "game" was coded in C++ using Visual C++ 6.0. No MFC.
The map editor was coded same as above, but uses MFC.
It also uses DirectX 7
I have a total piece-of-crap laptop (I do all of my development on it rather than my home PC to get the best optimization (if I can make it work well here, it will fly on a real system)...

On the P166 with 64 megs of RAM (and a Tecra 550CDT display) I''m getting between 29 and 31 FPS near the building and water. It jumps significantly when I leave town, but oddly also jumps when I enter the house (causing the roof to disappear)... I gain about 15FPS when I enter the house -- I would try optimization on your routines that handle the roofs -- you''ll probably gain a great deal of speed by optimizing those first.

-Chris
---<<>>--- Chris Rouillard Software Engineercrouilla@hotmail.com

This topic is closed to new replies.

Advertisement