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!
Thursday, July 2, 2009
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.
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:
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
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!

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):
Linux (Athlon 64 X2 2140MHz):
String::atoi() and String::atof() are Unigine functions.
Windows (Core2 Quad 2400MHz):
atoi | Time: 0.276 | FPS: 3.6231 |
strtol | Time: 0.278 | FPS: 3.6001 |
String::atoi | Time: 0.095 | FPS: 10.4853 |
atof | Time: 2.104 | FPS: 0.4752 |
strtod | Time: 2.127 | FPS: 0.4701 |
String::atof | Time: 0.349 | FPS: 2.8644 |
Linux (Athlon 64 X2 2140MHz):
atoi | Time: 0.271 | FPS: 3.6840 |
strtol | Time: 0.301 | FPS: 3.3271 |
String::atoi | Time: 0.112 | FPS: 8.9447 |
atof | Time: 1.337 | FPS: 0.7480 |
strtod | Time: 1.224 | FPS: 0.8168 |
String::atof | Time: 0.328 | FPS: 3.0481 |
Friday, April 24, 2009
Friday, April 17, 2009
Sunday, April 12, 2009
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?
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?
Subscribe to:
Posts (Atom)