Wednesday, December 23, 2009
Wednesday, December 16, 2009
Tuesday, December 15, 2009
Updated JointPin and new BodyWater
Updated JointPin allows to directly attach BodyCloth to BodyRigid. This type of joint performs coordinates synchronization between the skinned mesh geometry and the cloth. The attached cloth adheres to the skinned mesh object without any undesired clearance:
New BodyWater physical object provides two-way interaction with BodyRigid. The performance is simply great:
New BodyWater physical object provides two-way interaction with BodyRigid. The performance is simply great:
Tuesday, December 1, 2009
Tuesday, November 17, 2009
Sunday, November 15, 2009
Tuesday, November 10, 2009
Saturday, November 7, 2009
flu
1/3 of the team have caught flu. It seems that there is a real epidemy in Siberia. I hope we'll recover next week, because there are a lot of interesting things to do!
Sunday, October 4, 2009
Bunch of new OpenGL extensions.
We can use signed normalmap textures with ARB_texture_snorm and ARB_texture_compression_rgtc extensions. No more ugly "*2.0-1.0" in shaders for DX10 level cards, but we should do it for legacy cards.
ARB_texture_multisample allows us to implement multisampled deferred effects such as light scattering and SSAO.
ARB_draw_elements_base_vertex great-great-great, but why only now?
ARB_texture_multisample allows us to implement multisampled deferred effects such as light scattering and SSAO.
ARB_draw_elements_base_vertex great-great-great, but why only now?
Wednesday, September 30, 2009
DirectX 11 tessellation samples
In the DirectX 11: Tessellation in Stalker: CoP, Dirt 2, Unigine and Alien vs. Predator article people mentioned that only our art sample really utilizes tessellation capabilities to improve image quality: "Only one that was a visually significant improvement was the displacement mapping on the roof. That should be a nice improvement over the various surface mapping techniques, bump, normal, POM, etc. that don't do nearly as good a job."
All hail our artists, who created that art asset! By the way, stay tuned for much more.
All hail our artists, who created that art asset! By the way, stay tuned for much more.
Monday, September 21, 2009
Fried meshes
* [20090930] Values for HD4870 and Direct3D11 are updated (it was a debug runtime:(
Huge crowd rendering can be accelerated by baking skinned meshes into static meshes in runtime. But there is no easy way to do it because of API and hardware limitations.
The scene consist of 49 characters and each character is rendered 6 times. Tables contain millions of polygons per second. There are no tests for low-level cards. But on such cards performance gain is very substantial. And there are no tests for OpenCL because of incomplete drivers.
The first two rows describe direct rendering of skinned meshes:
"Raw" is a single mesh per draw call.
"Inst" is multiple meshes per draw call.
The other rows describe different backing techniques:
"Raw" corresponds to backing single character per call between characters rendering.
"Inst" corresponds to backing 32 characters per call before characters rendering.
OpenGL:
PBO: works well on all cards but instancing is required.
FeedBack: requires DX10 level card and doesn't work on ATI cards now.
CUDA: requires NVIDIA DX10 level card. Also instancing is very important.
Direct3D9:
R2VB: is ok on ATI and NV40. But we can't use this technique with NVIDIA DX10 cards.
CUDA: same as CUDA under OpenGL.
Direct3D10:
StreamOut: there is absolutely no problem with this technique.
CUDA: same as CUDA under OpenGL.
Direct3D11:
StreamOut: same as StreamOut under Direct3D10.
DirectCompute: instancing is also very important on NVIDIA hardware.
Huge crowd rendering can be accelerated by baking skinned meshes into static meshes in runtime. But there is no easy way to do it because of API and hardware limitations.
The scene consist of 49 characters and each character is rendered 6 times. Tables contain millions of polygons per second. There are no tests for low-level cards. But on such cards performance gain is very substantial. And there are no tests for OpenCL because of incomplete drivers.
The first two rows describe direct rendering of skinned meshes:
"Raw" is a single mesh per draw call.
"Inst" is multiple meshes per draw call.
The other rows describe different backing techniques:
"Raw" corresponds to backing single character per call between characters rendering.
"Inst" corresponds to backing 32 characters per call before characters rendering.
OpenGL:
PBO: works well on all cards but instancing is required.
FeedBack: requires DX10 level card and doesn't work on ATI cards now.
CUDA: requires NVIDIA DX10 level card. Also instancing is very important.
Direct3D9:
R2VB: is ok on ATI and NV40. But we can't use this technique with NVIDIA DX10 cards.
CUDA: same as CUDA under OpenGL.
Direct3D10:
StreamOut: there is absolutely no problem with this technique.
CUDA: same as CUDA under OpenGL.
Direct3D11:
StreamOut: same as StreamOut under Direct3D10.
DirectCompute: instancing is also very important on NVIDIA hardware.
Sunday, September 13, 2009
GDC Europe 2009
Tuesday, September 8, 2009
Thursday, September 3, 2009
Saturday, August 22, 2009
Middleware in games
There is a good article in the August issue of Game Developer Magazine about middleware, here is a quote from there:
"It's long been appreciated that using game engines and middleware libraries can get the team up and running more quickly on the target platform during the development process, allowing artists and designers to mock up the game much earlier. Commenters noted, "While middleware is not perfect, it allows us to concentrate on the areas that really make our game different, rather than implement basics. But programmers tend to not like [middleware] because it makes their lives more difficult [and the naive ones think they can do it better]."
"It's long been appreciated that using game engines and middleware libraries can get the team up and running more quickly on the target platform during the development process, allowing artists and designers to mock up the game much earlier. Commenters noted, "While middleware is not perfect, it allows us to concentrate on the areas that really make our game different, rather than implement basics. But programmers tend to not like [middleware] because it makes their lives more difficult [and the naive ones think they can do it better]."
Friday, August 7, 2009
CPU Caches 2
To achieve maximum performance of multi-threaded application you should run same jobs on same threads (CPU's). It's very important for applications based on small thread jobs.
Thursday, August 6, 2009
Physics status
Performance and stability of physics is much improved and it's not a final result:)
State of all physical objects can be stored into the special buffers. In this demos this buffers are used for time wrapping effect:
This is a heap of joints:
And funny stuff with homuncles:)
State of all physical objects can be stored into the special buffers. In this demos this buffers are used for time wrapping effect:
This is a heap of joints:
And funny stuff with homuncles:)
Sunday, August 2, 2009
Saturday, August 1, 2009
Timetable
Average timetable of last week:
18:00 home power on
19:00 office work on
11:00 office work off
11:30 home power off
18:00 home power on
19:00 office work on
11:00 office work off
11:30 home power off
Tuesday, July 28, 2009
Recent photo of the crew
From left to right:
* Frustum (Alexander Zaprjagaev) // CTO and The Brain
* Andrewko (Andrey Kolchin) // 3D artist
* Silvero (Iliya Abzaev) // developer
* ANet (Anna Ishina) // developer
* FadeToBlack (Alexey Egorov) // developer
* Silen (Vitaliy Sidorov) // game designer
* TmifX (Ivan Gulyaev) // developer
* Binstream (Denis Shergin) // CEO
* Pluton (Andrey Kushner) // lead 3D artist
* Brrrrr (Stanislav Zagniy) // 3D artist
* Manguste (Nadezhda Ovchinnikova) // technical writer
Missing on the photo: Jane (Eugenia Shergina), JL (Eugeniy Logvinov), Paralyzah (Michael Kondratyev).
PS: It was the opening night of "Harry Potter and the Half-Blood Prince" in Tomsk.
PPS: Siberian summer can be hot! but short as well :(
Tuesday, July 21, 2009
New script feature
Expression e0 = new Expression("133.0 * 133.0"); |
float: 17689
int: 10
int: 36339
Thursday, July 9, 2009
AMD_vertex_shader_tessellator
Saturday, July 4, 2009
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!
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.
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?
Saturday, March 28, 2009
Total happiness
No more gypsum anymore. It was nightmare 20 days without ability to walk, to run, to ride... Right leg is little smaller than left one and it's funny :) I made a crack in splint bone 5 weeks ago by snowboard boot. Doctors said that I had closed wound only. I had been walking with crack in bone for 2 weeks. And after that I broke it totally. Now I can use my leg and it's happiness. Thanks for all Russian doctors :)
Monday, March 23, 2009
Paralyzah: 30 Years
Yesterday we celebrated 30th anniversary of our musician, Michael "Paralyzah" Kondratyev. At the moment his tracks are released by the following labels: Respect Rec (Russia), Total Advance Music (Russia), KDK Rec (Russia), Gunsta Rec (Russia), MacroVision (Russia), Covert Operations (USA). He creates music mainly in drum'n'bass style, plus he is a DJ and promoter of "Untrace" promo-group. All soundtracks of our demos were written by him, you can check out some other tracks here: http://paralyzah.all.dj/
Happy birthday, man!
Happy birthday, man!
Friday, March 20, 2009
frustum.org
Hi Everyone,
Years ago I had frustum.org website and I frequently posted demos. But years ago I totally switched into Unigine project also. And once I forgot to made payment for the domain name. Currently frustum.org is a dead site, but you can have access to it at frustum.unigine.com address. I hope the situation with domain name will be resolved and frustum.org will be alive as soon as possible.
Three weeks ago I started work on dynamical backed into the vertex buffer skinned meshes to reduce amount of vertex shaders in Unigine. Unfortunately two weeks ago I had broken my leg :) So this interesting task is unfinished now and I will report results when I will work in the office, because at home I have only a Linux based PC.
How can we use uniform scaling with dual quaternions? It's simple. First quaternion in the pair is normalized one and we can scale it on decomposing stage. And on composing we can easily calculate quaternion magnitude and it will be its own scaling.
And now I can't ride snowboard :(
Years ago I had frustum.org website and I frequently posted demos. But years ago I totally switched into Unigine project also. And once I forgot to made payment for the domain name. Currently frustum.org is a dead site, but you can have access to it at frustum.unigine.com address. I hope the situation with domain name will be resolved and frustum.org will be alive as soon as possible.
Three weeks ago I started work on dynamical backed into the vertex buffer skinned meshes to reduce amount of vertex shaders in Unigine. Unfortunately two weeks ago I had broken my leg :) So this interesting task is unfinished now and I will report results when I will work in the office, because at home I have only a Linux based PC.
How can we use uniform scaling with dual quaternions? It's simple. First quaternion in the pair is normalized one and we can scale it on decomposing stage. And on composing we can easily calculate quaternion magnitude and it will be its own scaling.
And now I can't ride snowboard :(
Monday, March 16, 2009
Next Stage
Suddenly I realized that our company (Unigine Corp.) has passed the startup stage. We are a good team working on the project for years, we have good customers, we have our main product constantly improving on schedule, so things seems to be changed to steady growth. Well, that's all for good, lets keep on moving forward.
Subscribe to:
Posts (Atom)