19 articles and counting

Respite – first in game screenshots

Hey there!

I’ve got the iPhone 3G, so game development became significant faster.
As I expected all optimizations, which I did in engine, improved fps a lot – so it wasn’t a time waste at all. The performance is important for me, cause good game play feeling is very related with frames per second. Bearing in mind that this game will use not a few physics. Talking about physics, Respite won’t be a simple shoot-and-go game, I want something like in HL2, where you should solve some physic-puzzles, or mini-tasks, and only then able to move on. I already did objects moving like in HL2 (it’s always funny to play with physics :) )

Now game is running at 30-50 fps with:
* pretty large level – 5000 poly, 1024×1024 diffuse texture, 512×512 AO lightmap texture;
* hero personage – 600 poly, 256×256 diffuse texture, 40 bones, 10 animations;
* physics (few cubes) and collisions;
* gui (move controllers, buttons);

So, here is some early in game screen shots:

Game logo

SlyPot Editor, game design

Last month I worked on map editor (maybe I should call it entity editor for a while, cause you can’t change geometry a lot).

So what can it do?

For now, it has:

- standard tools (select, move, rotate, scale, connect, clone).
- physics (you can create rigid bodies or collision objects, like boxes, spheres or cylinders, connect each with joints, add motors, change all physics parameters etc.).
- triggers (different types, timers to activate).
- events (you can add different events according to the object type: add impulse to the physics object, destroy connections, joints, change color, speed and whatever you want).
- particle emitters (you can add wind, gravity, size, color, random factory etc.).
- collision nodes (which you can connect to lines to create stairs, collision walls, corners).
- sound entity.
- simple gui (panels, buttons, lists, text boxes).
- save/load to binary “map” file.

So you able to create systems, which may interact with game world as a part of other systems.
Events and triggers (with timers) allows to create even more interesting systems. Here is a short video:

Now I can add things like: doors, traps, lifts, even simple triggered tasks for game player.

I tried to keep all things simple as I was able to do so (both code, and editor as a tool). I think now my game(s) development will get more acceleration.

By the way, I worked a lot on my game (”Respite”) conception too. Tried to clean up story line, refused some ideas as it doesn’t fit to the iphone game at all, also I was very busy with level design (you should see dozens of dozens sheet of papers around me :D ).

Here is some concept art for game:

Characters

Vehicles and environment

Also implemented octree algorithm for game level space subdivision, in my opinion this should help to gain more performance on the iphone. As I working on iPhone simulator only, I can’t see actually performance, and this makes me nervous.
But I prepared lots of optimization already (PVR texture compression, reductions in the size of the all geometry vertex array (floats to shorts), interleaving vertex data, same geometry sharing for animated models – this should lead to significant performance).

One more thing: I am going to get iPhone (probably next week), many thanks to Woody Deck! :)

Respite – a new iPhone game project

After many hours of searching and brain-storming, I had decided to freeze my physics puzzle game.
The main reason is – I want game with 3d graphics, story, and fights :) Yes, I know it will be not so simple task for a team with one-two members.
But… The idea, which came to me was so strong and self inspired, that I couldn’t overlook it. I filled tons of paper with sketches, ideas and level concpets :)

I hope to finish, at least this one :D

“Respite” – 3d action iphone game, was inspired by blame manga and diablo 3 styles, mixing future fantasy, sci-fi and apocalypse.
Yet I can not disclose the main ideas ;) But I can show you some development screen-shots and even video:

Character rigging (models are low poly – 250-400 poly)

Character animation

Level construction using 3dsmax

I am writing engine with c++ and some objective c code for touche-event handling. What I have written so far: texture manager, model loader (with skeleton animation), 2d render classes, collision system. Now I am working on culling (octree) and level loader, so next post will be related with these problems.

By the way I got my mac mini :) and I am coding a game engine with XCode for a couple of month already. Currently I am using only iphone simulator to test my engine, but I am thinking about actual device purchase…

Some progress on iPhone game

My friend, the game designer inspires me every day, here is the wonderful progress:

Game menu screen

So far I have done game tools, initial game play and implemented simple gui. I hope so, I could show you some videos of my work soon.

Friend designer joined me!

My friend joined me. Now we are team of two. He will be responsible for game design.

So far, some updates from him:

Game sketch

I’m still working on level loading and game physics…

Switched to the iPhone game

After 80% of map textured and some tests – I realized, that 10-15fps (that’s all what I’ve got after textures was applied) is not fit for first person shooter with multiplayer mode. Maybe someday J2ME will have a better performance (Android?)…

3D map for J2ME game (all textures resolution is low as possible)

That’s why I started to develop game for iPhone. I have read a lot articles about games, marketing, what kind of games have got huge success for iPhone. The main thing is: a lot of people play games when they have time to kill (waiting for the bus or friends of the meeting). The game shouldn’t be complicated, it should be extra fun, and may have attraction, which brings a desire to play again.

I think I have a pretty nice idea – it will be a puzzle type game with physics and some kind of story. Currently I am working on physics and level editor. Some game concept, which I made:

Back from trip, ready to work

Last week I traveled around Europe. I visited Poland (Warsaw), Slovakia, Hungary (Budapest, Balaton lake), Austria (Vienna) and Czechia (Praha, Brno). During the journey I got a lot of new inspiration for my work :)

While I wait my mac-mini, I decided to create simple game for mobile phones with J2ME.
Here it is what I have done so far:

Network platform – simple commands sending, receiving and processing classes using TCP. Server side was made with c++ (scalable for multi-user) and client with J2ME (using two threads – one for commands receive and one for send).

Login system – client gui and some code on network platform.

Lobby – client gui (list, buttons, text box, font rendering):

Some environment design stages:

Currently I get ~22-30fps on my Nokia 6120c.

Collision system – firstly it was simple ray test collision, but for the performance issues (M3G checks ray test for all triangles in the scene) I changed it to circle-lines collision. My game will be based on “one height” plane, so this is fit for me, especially when it’s x2 faster now:

Note: collision lines can be non-perpendiculars and connected in to different groups.

Gun animation – I decided that gun should be animated 2d frames instead of 3d models for a better performance:

Sum up: Those, who have java skills already, J2ME is perfect environment to create games for mobile phones.

Next: I will try to create game play mechanics (player movements, shooting, different gun types)…

I am back!

:) Yes,  after more then three years of break away from this blog and personal work. Those years I worked on PoolStars – 3d online pool project. I made all graphics things and client development, got a lot of professional experience… For the some reasons I finished my work on PoolStars project…

PoolStars project

So what’s now? – I am starting my own projects – mobiles games, and not some casual single player games, but multiplayer online games! I think those countries like Japan, China (they have 3G at last!), Korea is waiting for games like that ;)
I am thinking about two platforms – iPhone and J2ME. Here is some my notes about these platforms:

iPhone – perfect business environment, easy to publish, easy to develop (considering that I have strong
OpenGL skills already). Also the new iPhone 3GS is on the market already, which supports OpenGL ES 2.0 (shaders!) drew my attention a lot.
It’s on the wave right now. Everybody talks about and everybody mad about it.

J2ME – huge market, very easy to develop for it. Also it has M3G – Mobile 3D Graphics API, which can allow you to make a 3d games on a huge amount of devices.

I already started to work, firstly on J2ME, but soon I will try myself on iPhone in a parallel mode. So wait some updates…

Short video

Ok time to show something in action :) I captured a short video of test-scene and you can download it here. The big monster model made by Zachary Brakin and Tom Miller, model was used only for testing scene. Video is a little bit laggy because of capture software working.

Currently I am working on fluid dynamics (real particle water). Be patience, I will post some screenshots in the near future.

Lighting shader and Motion blur

It seems that to develop excellent lighting system you need to develop excellent shader too :)

In this shader I need to avoid a lot of ‘if’ instructions to establish various light types, many cycles and etc…

Multiple lights are really where shaders muff up.

I estimated all lights and now I have 7 different light types. Each of them brings 3 potential samplers into shader – a 2d shadow map, a cube shadow map, and a projected cube map. Naturally, lighting shader has 4 samplers, that are already engaged – base texture maps: ColorMap, NormalMap, SpecularMap and HeightMap. Therefore, I used all possible 16 samplers very rationally. Oh, by the way last week I made Motion Blur (currently I am blending only one previous frame):

Soldier motion blur                                          Camera (fast movement) motion blur

Of course, it is not the “real” motion blur, but it requires just few adjustments to achieve the real one (blend several frames with accumulation buffer…).

In conclusion – some person’s reaction of the CryEngine2 technology trailer:

  • “Why this video is exceptional?”
  • “I don’t notice anything there that I haven’t seen before.”

Did everybody game-players/developers degraded? Oh well… What does the future hold in store for us? :D

Baked maps (Lightmaps)

During the smart lighting passes system and testing the variety texture units I found that baked maps (lightmaps) are very proper for the true static objects (the combination of the light and shadow maps is quite popular at the moment):

Also here you will find one of the post-processing effect called bloom and experimentation’s of gloss mapping (rocks are too much plastic now ).

Wonderful discovery

“All modern shader model 2.0 hardware and greater have at least 16 texture units.”

Bah! I didn’t know!!! :) I thought for example GeForce 6200 have only 4, because according this: http://delphi3d.net/hardware/

Nvidia
reports 4-texture unit for the fixed function pipeline, but we can use
16 when using the programmable pipeline (for example fragment shader).

What a wonderful discovery :)

Oh, now it is all going to be different, now I can get even four light passes in one! :) I just need to do very efficient light passes system.

Parallax mapping

I had read parallax mapping:

http://www.infiscape.com/doc/parallax_mapping.pdf

Moreover, successfully implemented it with glsl shaders:

Soldier model made by game.exe

I think nowadays this effect, even if it costs one additional texture unit (height map), adds more realistic graphics than usual bump mapping and it is fast enough to be implemented in the next-gen engines.

Shadow maps techniques

Heh stencil shadow volumes are really slow for complex objects :) (shadow volumes for skinned models are just foolish).  Therefore, I tried to implement shadow-mapping technique – it is easy, fast and looks good. The one of the complicated thing is omni directional lights shadow mapping. The perspective shadow mapping is used only for spot lights and it is unsuitable for omni lights.  There are few solutions for the way out: cube map shadowing (6 rendering passes and without depth values – non-self shadowing), and dual paraboloid shadow mapping. Firstly, I implemented cube map shadows with smooth the edges. Now I realized that cube map is too much expensive, and that dual paraboloid required only 2 rendering passes with 2-texture unit. Additionally I have been reading that: “…a Sphere and paraboloid maps uses only 78% of the actual texture resolution available in the texture map image…” and that dual paraboloid shadow maps cause unprofitable results. So I am a little bit confused now, which way is better? :)

ProjectOffset

Look at this site: http://www.projectoffset.com
these guys rock! The one of the main things that draws my attention is
per-object motion blur and specular bloom. These effects allow to draw
more realistic environments than ever before.

Soft shadow volumes

I am trying to make soft shadows so that they will cast on every object in the scene. As you know, shadow volumes are good, because shadow caster receives shadow by itself.  However, the main disadvantage of shadow volume is that they are hard-edged (non-soft). So I asked myself – how can I make shadow volumes that become soft edged? I found some algorithms and solutions on the net, like to do several shadow volumes in different alpha values… Oh yes, they are too slow in real-time graphics (imagine few objects that cast shadows and all this runs at 14fps on my gf6200). But the real idea of soft and fast shadow volumes came to me when I made post-process effect called bloom (aka fake HDR). One of the bloom elements is a screen space blur…Therefore, I thought why we couldn’t use this blur element (separable convolution) to blur our shadow volumes? :) Here you can see results of my expermentations:

Hello

Hello every one. This is my personal thoughts about new technologies,  next-generation graphics and game development.