this is a repost of my technology blog on Crydev.net, but I figured it would be very interesting to many of you guys as well.
Note: This is an article full of heavy technology phrasing aimed at people who actually care for Game Engines and Rendering etc.
So if you never cared what AA, SSAO or stuff like this is, this is not for you.
(I hope there are actually people who like to read these walls of text)
A short technical analysis of the first MechWarrior Online Screenshots (and PostMSAA)
Story about my personal connection to MW (skip if you don't care)
I have never been a great MechWarrior fan, I have no idea about the Canon, never read any novels nor played any table top games.
I have, however, played MechWarrior Living Legends and that got me into really liking the whole universe. The forums are great and the team is really focussed and delivers great content. Thanks to everyone participating. By the way: The mod is so good that they instantly won Mod of the year 2009 and also honorable mentions the next years (one cannot win twice on ModDB). The leaders of the team - Sean and Patrick Tracy are now engineers working at Crytek. See how far mods can get you? Kind regards and good luck on GDC to either one of you in case you read this!
I really loved what they delivered and so I wanted to take part. I did some maps, I did some mech skins (see this thread: link
And finally I did some promotional screenshots for the official page.
Most notably this one (which is also the header now):
![Posted Image](http://gallery.mechlivinglegends.net/var/albums/wallpapers/mwll-wallpaper-1920%201200.jpg?m=1294860567)
So when it was announced that there would be another MechWarrior Game I was a little sceptical at first. But when I heard they'd utilisize CryEngine 3? I was sold.
So let's discuss the first screenshots of the game
1. They look, in fact, awesome.
2. When looking at the Atlas one can clearly see that his right leg is slightly bend because of the height difference of his feet. This is due to the Animation Physics in CryEngine, which supports procedural motion warping and is used since Crysis.
This confirms that Piranha is using the character physics for its Mechs (which was to be expected) and it can raise hopes that they will use procedural on-hit effects like Crysis 2 did, which would bring unprecedented realistic looking fighting animations never seen before in a mech game. (Meaning the mech actually physically reacting to getting shot, so for instance after a hit the character will not play a simple shake animation, but will instead procedurally generate one based on the amount and place of impact.)
Actually one of the reasons they licensed CE3 was "Both the character animation pipeline with the procedurally and physics based animations and the destruction system fit our goals perfectly" according to Russ Bullock, president of Piranha Games. This screen is basically a confirmation.
![Posted Image](http://www.blogcdn.com/massively.joystiq.com/media/2012/03/mwogdc12019.jpg)
3. These screens are definetely captured in realtime and the scenes were not completely static and set up in the editor. How can I tell?
One of the drawbacks in the current solution of CryEngine 3 are the heavily visible halo artifacts from weapon muzzle flashes (and other short-living bright things, like sparks) due to the implementation of PostMSAA.
PostMSAA in CryEngine 3 is a modified version of the so-called Temporal Antialiasing, which, at its core, saves the last frame and blurs it into the next one to smooth out the edges.
Of course many adjustments were made so it is only barely visible when moving/turning the camera and I guess many people never noted a slight "halo"ing of the screen.
This halo becomes more visible with the things specified above because the pixels are very bright in one frame and have to be blurred in to a dark background in the next one, which of course looks a little odd (Most notable when enemies in Crysis 2 fire a single projectile - it appears like 2 because the real one travels so fast over the course of one frame that the halo is some distance behind in the next one).
I set the Editor to play in 10 FPS so I could easily make a screenshot of this (the lower the FPS, the more distance do moving objects cover per frame)
![Posted Image](http://www.abload.de/img/haloselv5.png)
In the screen below we can see this with the Muzzleflash:
It seems like the left part of it just has some real bad gamma, but it is, in fact, the halo of the muzzle one frame before. I am very certain this is the case here, it has all the characteristics of the CryEngine 3 halos.
If the halo is this significant this means: The particle was actually playing - it was not a static picture in the editor AND this screen was recorded in real time, the halo would be much much smaller if recorded in slowmo. Still following?
![:D](https://static.mwomercs.com/forums/public/style_emoticons/default/biggrin.png)
![Posted Image](http://www.blogcdn.com/massively.joystiq.com/media/2012/03/mwogdc12034.jpg)
4. Some of you may say - "Why use PostMSAA" at all when it produces these artifacts?
The jump in quality is REALLY significant and the cost of the AA is REALLY low. As in barely noticeable low. As in - no other AA is this cheap - low.
Please - go ahead and try it out (if you use the CryEngine 3 Free SDK)
Set r_PostMSAAEdgeFilterNV to 0
and r_PostMSAA to 0 as well.
Whoa this looks really bad! Now put r_PostMSAA back to 1. Really sharp and smooth looking image. No noticealbe FPS drop.
Now many enthusiasts disabled r_PostMSAA because it makes the image "blurry".
Look at your image - it's not blurry!
What actually makes the image blurry is the "EdgeFilterNV", which actually is the name for the Image Based Edge Antialiasing developed by Nvidia's Timothy Lottes (here is his blog: link). More people know it as "FXAA".
FXAA is, as said, an image based antialiasing method, which tries to calculate which edges it should blur to make the image look more steady.
It is currently in version 3 and produces great results (check out Cry-Styves's shaders for CryEngine 2 - you'll get FXAA for free then link).
Now the thing is - CryEngine 3 does not use FXAA 3. It uses FXAA 1. In fact it is one of the first engines to incorporate this method, BUT the old versions do not look nearly as good as the newest one. The image appears blurred and the method had problems with straight lines.
Straight lines you ask? Yep - click on the picture above and take a good look at the lasers. They seem blurry yet show a form of aliasing. EDIT: I might be wrong in this regard, since the images are clearly not original-scale, but I guess FXAA is interesting even if it is not the case. And everything said above applies to your SDK/Crysis 2 SDK.
Now there is hope for us: Most notably SMAA by Jorge Jimenez and colleagues is the best looking image based antialiasing yet - and Crytek's Tiago Sousa (Principal R&D) has been one of the guys researching this technique. Check it out here: http://www.iryoku.com/smaa/
There is even a video of it featuring CryEngine. Plus they announced some changes to the AA lately so we may look forward to that. I really hope MechWarrior will incorporate all Engine updates as well.
5. Some final observations on a different screen shot:
Like all of the images, there really is a stron visual identity. The terrain looks great and everything in this image fits.
The reflections of the lasers in the water, the slight HDR streaks of the green laser beam,
the green laser light colouring its surroundings in a soft green .... wait. No it does not.
Please let there be somebody from Piranha reading this.
Everyone of the old mech games had light sources directly from the muzzle of the guns.
This is not physically correct, as the laser light distributes equally and there is no "muzzle" flash like with Ballistic Weapons, BUT it has been done and it looks great and it is almost at no cost, since Dynamic lights without shadows barely affect performance at all with the deferred renderer CryEngine is using (in fact, CryEngine 3 can display hundreds of lights at a smooth Framerate) By the way - even the AC20 firing in the shot above does not cast a light.
Probably this is not final, I don't know.
EDIT: The next part is only for people who really know CryEngine 3 well.
But there is something else. Something I have always dreamed of.
CryEngine 3 does not natively support line lights, and even if it did - a line light as long as a laser beam ... boy that would be expensive (calculating speculars for all the geometry on the way...).
And placing conventional lights along the laser would not be an option either in that regard.
But i thought about it:
->All the players playing on high specs have Global Illumination enabled.
->Global illumination is displayed with irradiance volumes (cheap approximated lights).
-> To use these irradiance volumes a "Light Propagation Volume"/LPV has to be set up. The IVs have to be inside and are essentially free, the real cost comes from the initialisiation of this LPV.
This LPV is basically a box in which the IVs can be calculated.
-> In CryEngine 3 we have a fixed LPV in front of the camera, which is responsible for displaying the Global Illumination.
-> We have this LPV already set up - so why not use it for the lasers as well? Just have an Irradiance volume with every 1 m of the Laser and let it illuminate the world around?
-> Lights with "irradiance volume" property turned on is only calculated this way if it is actually inside an Light Propagation Volume. So we would have to check that the lights are only cast inside our GI distance. Doable.
If I had the skill and the access to these parts of the engine... I really think it's worth a try.
Oh yeah - here is the screenshot:
![Posted Image](http://www.blogcdn.com/massively.joystiq.com/media/2012/03/mwogdc12032.jpg)
To round it off, I'll just post other screens of the game
![:P](https://static.mwomercs.com/forums/public/style_emoticons/default/smile.png)
I hope ya'll enjoyed the read and I hope you don't mind me writing these walls of text!
![Posted Image](http://www.blogcdn.com/massively.joystiq.com/media/2012/03/mwogdc12040.jpg)
![Posted Image](http://www.blogcdn.com/massively.joystiq.com/media/2012/03/mwogdc12026.jpg)
![Posted Image](http://www.blogcdn.com/massively.joystiq.com/media/2012/03/mwogdc12015.jpg)
Edited by TheUncle, 08 March 2012 - 12:33 PM.