Thursday, July 2, 2009

Unigine goes PS3

We made it, Unigine joined Tools & Middleware License Program for PLAYSTATION®3.

The process took 8 months to complete, it was kinda hard. Now we're going to get devkits and make the porting!

CPU Caches

Sometimes absolutely correct code can produces huge stalls because of cache misses.
For example if we have two 3D arrays: source ([128][128][16]) and destination ([16][128][128]) and we should copy data from source to destination.
Ordinary copying spends 5.0ms on old Athlon64 X2 3800+ CPU in this case.
But if we create a temporary copy array ([16][129][129]) and perform copying of data two times (from source to copy and from copy to destination), so copying time is only 1.9ms.

Thursday, May 14, 2009

Pretty matrix trick

Floating point numbers are wonderful things.
Let's try to draw a distant mesh by standard approach.

Engine code:
shader_modelviewprojection = player_projection * player_modelview;

Vertex shader:
gl_Position = shader_modelviewprojection * vertex;

The result will be funny:


And it's time to trick now.

Engine code:
shader_offset = player_position;
shader_modelviewprojection = player_projection * player_modelview * translate(shader_offset);


Vertex shader:
gl_Position = shader_modelviewprojection * (vertex - shader_offset);

The result will be absolutely correct:

Thursday, May 7, 2009

frustum.org

frustum.org domain name is officially dead.

Wednesday, April 29, 2009

Screenshots Buzz

Recently we have shown a bunch of screenshots from our forthcoming game, which created some buzz. Linux users are especially enthusiastic about the fact that the project will natively support both Windows and Linux (thanks to Michael Larabel for posting news item on Phoronix website).


The bad thing is that we still don't know even a genre of our game %) In fact, we intended to make a large tech-demo, but eventually we came up to the small game idea. According to the first feedback users expect the project to deliver fun, so it's kinda complicated situation for us. Well, it seems that we have no other option than to make a full-featured game =)

PS: Another fun thing is that the news were translated into Russian and copied several times by different sites and blogs, so in the end overall data distortion was so severe that a reader can get to know about "unique feature of the project: unlimited multiplayer!", while there was no single word with "net" in the original entry.

More to come, stay tuned!

Sunday, April 26, 2009

stdlib performance

This is a relative performance of some standard library function.
String::atoi() and String::atof() are Unigine functions.

Windows (Core2 Quad 2400MHz):
atoiTime: 0.276FPS: 3.6231
strtolTime: 0.278FPS: 3.6001
String::atoiTime: 0.095FPS: 10.4853
atofTime: 2.104FPS: 0.4752
strtodTime: 2.127FPS: 0.4701
String::atofTime: 0.349FPS: 2.8644

Linux (Athlon 64 X2 2140MHz):
atoiTime: 0.271FPS: 3.6840
strtolTime: 0.301FPS: 3.3271
String::atoiTime: 0.112FPS: 8.9447
atofTime: 1.337FPS: 0.7480
strtodTime: 1.224FPS: 0.8168
String::atofTime: 0.328FPS: 3.0481

Friday, April 24, 2009

Hall of GPUs killed by Unigine


NVIDIA 8800GTX is dead because of memory problems
NVIDIA 9800GT is dead because of memory problems

Friday, April 17, 2009

Sunday, April 12, 2009

Magic Spring

Now we have a magic spring in our studio:






Thursday, April 9, 2009

Cubemap filtering

All Direct3D10-compatible cards use linear filtering across cube map faces.
NVIDIA NV50 uses linear filtering across cube map faces under OpenGL for 6-9 months.
ATI R700 uses linear filtering across cube map faces under Direct3D9 since Catalyst 7.1 or 7.2.

Who is next?