Intel Details Handling Anti-Aliasing On CPUs
MojoKid writes "When AMD launched their Barts GPU that powers the Radeon 6850 and 6870, they added support for a new type of anti-aliasing called Morphological AA (MLAA). However, Intel originally developed MLAA in 2009 and they have released a follow-up paper on the topic--including a discussion of how the technique could be handled by the CPU. Supersampling is much more computationally and bandwidth intensive than multisampling, but both techniques are generally too demanding of more horsepower than modern consoles or mobile devices are able to provide. Morphological Anti-aliasing, in contrast, is performed on an already-rendered image. The technique is embarrassingly parallel and, unlike traditional hardware anti-aliasing, can be effectively handled by the CPU in real time. MLAA is also equally compatible with ray tracing or rasterized graphics."
Can amateur journalists PLEASE stop using the phrase "embarrassingly parallel" to describe software tasks? Who's embarrassed? Why are they embarrassed about designing something that can be efficiently processed?
If it is "embarrassingly parallel", why not leave it on the GPU? Makes more sense to have it running on dozens to potentially hundreds of stream processors than a couple "free" cores on the CPU.
If your signal is aliased during sampling, you are toasted.
No voodoo will help you if your spectrum folded on itself.
So super-sample it or shut up.
Everything else is a snake oil for unwashed masses.
And yes, MPLAA still looks like crap in comparison to SS.
They want everything to run on the CPU, and thus for you to need a big beefy Intel CPU. Remember Intel doesn't have a GPU division. They make small integrated chips but they are not very powerful and don't stack up well with the low power nVidia/ATi stuff. What they make is awesome CPUs. So they really want to transition back to an all-CPU world, no GPUs.
They've been pushing this idea slowly with various things, mostly based around ray-tracing (which GPUs aren't all that good at).
Right now it is nothing but wishful thinking. Nobody is going to dump their GPU for CPU only rendering since even a cheap GPU and out do a powerful CPU in many respects. However maybe some day.
While it is for selfish reasons, I don't disagree with Intel's idea over all. It would be nice to have computers where everything is done on the CPU, no special dedicated hardware. That's really the whole idea of a computer, rather than having dedicated devices to do things, you have a powerful device that can do everything in software.
If the system is 'embarrassingly parallel' and simple then the GPU would be a better use case. GPU's typically have a lot (200-400) cores that are optimized for embarrassingly simple calculations. Sure you could render everything on a CPU these days, simpler games could even run with an old school SVGA (simple frame buffer) card and let all the graphics be handled by the CPU as used to be the case in the 90's and is evidenced by the 'game emulators in JavaScript' we've been seeing lately but GPU's are usually fairly unused except for the ultramodern 3D shooters which also tax a CPU pretty hard.
Custom electronics and digital signage for your business: www.evcircuits.com
Do you have any sort of formal (that is, university-level) training in Computer Science or Computer Engineering? Based on your comment, it really doesn't look like you have any at all.
Like others have already pointed out, "embarrassingly parallel" is a very legitimate and correct term to use in the field of parallel computing. It may sound funny to you, but it's a term used by the experts. In fact, it's such a core concept that even most undergraduates are well aware of it and what it means.
This is the sort of shit I see time and time again from Rails "developers" and JavaScript "programmers". Such people have no real training whatsoever, yet somehow believe themselves to be experts in the field. They go out and make blatantly ignorant and incorrect comments on various social media sites, and then wonder why actual professionals and academics think that these Ruby and JavaScript users are idiots.
So, it basically blurs the image around areas of high contrast? Sounds like thats whats going on. Looks like it, too. I can understand why they are targeting this at mobile and lower powered devices: it kinda looks crappy. I might even say that no antialiasing looks better, but I'd really have to see more samples, especially contrasting this with regular MSAA. I suspect, however, that normal antialiasing will always look considerably better. For instance, normal AA would not blur the edge between two high-contrast textures on a wall (I think, since it is actually aware that it is processing polygon edges), while I suspect MLAA will, since it only sees an area of high contrast. Look at the sample image they post in the article: the white snow on the black rock looks blurred in the MLAA processed picture, while it has no aliasing artifacts at all in the unprocessed image. Its pretty slight, but its definitely there. Like I say, need to see more real world renders to really tell if its a problem at all or simply a minor thing no one will ever notice. I'll stick to my 4X MSAA, TYVM.
"None can love freedom heartily, but good men; the rest love not freedom, but license." --John Milton
Correct me if I'm wrong, but MSAA is already embarrassingly parallel, and provides for better fidelity than this newfangled MLAA.
Yes, its faster than MSAA, but modern GPUs are already pretty good at handling real-time MSAA.
GCS/MU/P d- s:- a-- C++++$ UL++ P+ L++ E+ W++ N o K- w--- O M+ V- PS+++ PE Y+ PGP t+ 5- X R++ tv+ b++ DI++ D++ G+ e++ h-
This is a phrase I would have reserved for myself after several too many drinks... not so much for this article ;p
I do not respond to cowards. Especially anonymous ones.
Anti-aliasing, by definition, must be performed in object space or, possibly, in picture space. But it cannot be possibly carried out on an already rendered image. They must be trying to market some glorified blur technique under the anti-aliasing moniker. Nothing new here...
Nope, I studied photography, evangelized multiple distributions of Linux, wrote my own games, work in IT at a place where all the workloads are single-threaded, have my own home recording studio, and other such things. That's my geek cred, not CS/CE.
I don't understand why people need to anonymously criticize an honest mistake by someone not "in the business" to the point where it's the biggest thread. I guess it's the Internet, and that's what's been happening since USENET, so I don't let it get to me. (I also used to participate in USENET, if that counts for anything anymore.)
Actually the original poster is right it now that I think about it. It is the wrong term to use.
Embarrassingly UNparallel would be a better term..
As if it can not be done in parallel then it is embarrassing. As by definition you can only do 1 at a time. Instead of getting scale with more cpu cores.
Anti-aliasing, by definition, must be performed in object space or, possibly, in picture space. But it cannot be possibly carried out on an already rendered image.
Ever heard of hq3x? Or the pixel art vectorizer we talked about two months ago?
[Morphological AA postprocessing] really ruined the readability of my games' GUIs. So, while it may be an effective AA technique, applications may need to be rewritten to take advantage of it.
Just as games and other applications supporting a "10-foot user interface" need to be rewritten with larger text so that the text is not unreadable when a game is played on a standard-definition television. The developers of Dead Rising found this out the hard way.
(FYI, I'm an auto mechanic. I don't have any comp sci background, aside from that I've learned while working with and on the systems embedded within modern vehicles.)
While I can't speak for the GP, I can understand why he's angry when an untrained amateur like yourself starts spewing ignorance all over the place.
We mechanics experience this phenomenon a lot, too. On a daily basis we have to deal with customers who think that they know about cars, and will speak very loudly as if they do, but while doing so they'll be wrong again and again and again. The worst are those who are so ignorant that they choose to work on their own vehicles, causing very serious damage. We call them 'tinkertards'.
Maybe you just need to think twice before posting about something that you don't know much about. Or at least don't act like you do know about the field when you apparently don't.
It is the wrong term to use
No. "Embarrassingly parallel" is a term often used in parallel computing by academics and experts. An embarrassingly parallel problem is one that so easily lends itself to parallelism that to solve it any other way would be embarrassing.
Embarrassingly UNparallel would be a better term..
Not really. Just because a problem doesn't lend itself so easily to parallelism, doesn't mean that it is in any way embarrassing. There is not anything embarrassing about solving a problem serially unless the problem is embarrassingly parallel.
While I understand AA, and why we do it; but I always experience a moment's rush of absurdity when I consider it.
Up until quite recently, with high-speed digital interfaces nowhere near what video of any real resolution required, and high-bandwidth analog components very expensive, AA was just something that happened naturally, whether you liked it or not: your not-at-all-AAed digital frame went to the RAMDAC(which, unless you had really shelled out, could likely have been a bit lax about accuracy in exchange for speed), and was then shoved through a VGA cable of undistinguished parentage, a whole pile of analog widgetry that controlled the yokes on the CRT, and was finally smeared onto the nice, soft, phosphor blobs on your CRT. For things involving video gear, rather than computers, this went double: a trip through a composite->RF modulator pretty much eliminated the ability to even display jagged pixels, whether you wanted them or not.
It's always a little strange to think of how much computer power we now burn so that our all-digital video signal paths don't shove the jaggies in our faces.
It can work on any DX9 GPU without dedicated support. http://hardocp.com/article/2011/07/18/nvidias_new_fxaa_antialiasing_technology/1
Your definition of anti-aliasing is off by a long shot.
Both this edge blending technique and pixel art upscalers work by guessing underlying shapes based on the corners within high-contrast edges in the image. Pixel art upscalers aren't the same as hand-drawing the image at a higher pixel density, but they still produce a picture with some of the same desirable qualities. Likewise, even if this sort of edge blending isn't the same as proper anti-aliasing, it still produces a picture with some of the same desirable qualities.
I only said one thing, for which I accepted correction, but apparently the quality of discussion on Slashdot has degraded to the point of the mud-slinging on Digg and Youtube... I am mildly intrigued by one thing, though. Why do you feel the need to rip me to shreds so thoroughly? Are you trying to accomplish something? And, why are you doing it anonymously?
In this kind of situation, it's a lot better to simply admit your ignorance, thank the people who pointed it out to you, and move on.
Don't start some commentary on anonymity.
I don't know, it looks very close to just blurring to me. Non-"anti-aliased" sample images are better IMHO.
I have, but I didn't come upon the term "embarrassingly parallel" until much later. Possibly because I'm embarrassingly old; the first use I can find of the term is in 1989, and it doesn't seem to have become mainstream even within computer science until a few years later.
Many of the commercial ray tracing packages have written GPU-based versions that work remarkably well.
V-Ray and mental ray, in particular, have very exciting GPU implementations. A presentation by mental images showed some very high-quality global illumination calculations done on the GPU. Once you get good sampling algorithms, the challenge is dealing with memory latency. It's very slow to do random access into memory on a GPU. mental images solved that problem by running a lot of threads, as GPU's context switch very quickly. When I said "a lot of threads", I wasn't kidding -- the demo I saw was running 100,000 threads over 10 graphics cards. The huge majority of those threads are stalled waiting for memory, but it doesn't cost anything to wait for those accesses to be satisfied if you have other threads to run.
I love Mondays. On a Monday, anything is possible.
Even better is nVidia's FXAA, which was inspired by MLAA.
MLAA is also crap, compared to "proper" antialiasing (supersampling) or even "draft" antialiasing (multisampling). Any detail smaller than 1 pixel simply isn't rendered with MLAA (and that also means no sub-pixel motion). Essentially, MLAA is just a blur filter, which actually reduces the amount of detail in the image (unlike supersampling, which increases the detail).
Edge detect + supersampling (or edge detect + high multisampling) is by far the best solution.
Oh, and technically blurring is antialiasing. It's just a very primitive flavor of.
In Wikipedia's defense, it's at the least more authoritative than The Bible, even though the latter is [i]embarrassingly trusted[/i] by more people.
MLAA is also crap, compared to "proper" antialiasing (supersampling) or even "draft" antialiasing (multisampling). Any detail smaller than 1 pixel simply isn't rendered with MLAA (and that also means no sub-pixel motion). Essentially, MLAA is just a blur filter, which actually reduces the amount of detail in the image (unlike supersampling, which increases the detail).
Edge detect + supersampling (or edge detect + high multisampling) is by far the best solution.
Oh, and technically blurring is antialiasing. It's just a very primitive flavor of.
Aliasing is when signals become indistinguishable. The common symptom of jaggies occurs when of the ray that is chosen to sample hides the signal of the nearby rays.
But blurring is aliasing! In physical blurring signals from in focus rays are overwhelmed by signals from out of focus rays. Similarly, with a blur filter you're definitely losing data by blurring it with neighboring signals.
And you're right: this technology is nothing but an elaborate blur filter. So this looks like anti-aliasing because it masks one well known symptom, but it's clearly obscuring signal and thus aliasing.
it looks like shit.
AA is a crutch to get around a lack of DPI. Take the iphone 4 at 326 DPI, it is 3 to 4x the DPI of the average craptasic "HD" computer monitor. I have a laptop with a 15" 1920x1200 screen. At that DPI Seeing the "jaggies" is pretty difficult compared with the same resolution on my 24". On the 15" can turn AA on/off and its pretty difficult to discern the difference. That monitor is only ~150DPI. I challenge you to see the affects of anti-aliasing on a screen with a DPI equivalent to the iphone 4.
The playstation/xbox on the other-hand are often used on TV's with DPI's approaching 30. If you get within a couple feet of those things the current generation of game machines look like total crap. Of course the game machines have AC power, so there really isn't an excuse. I've often wondered why sony/MS haven't added AA to one of the respun versions of their consoles.
This is image reconstruction, where additional information (not necessarily correct) is derived from a limited image.
Close equivalents are the "font smoothing" done by the earliest versions of Macintosh for printing their bitmap graphics on a PostScript printer to draw 72 dpi 1-bit images at 300 dpi. Also I believe Microsoft's earliest subpixel font rendering, smoothtype, was done this way (not cleartype or any other modern font rendering).
Much more complicated examples are algorithms for scaling up images, including ones for converting video to HDTV or even IMAX resolution. These create images that replace the pixels, based on analysis of sometimes very large areas around the pixel. And by far the most complicated example are the programs that recover shapes from very low-resolution bitmaps, such as the Microsoft one posted earlier on slashdot.
Lets be fair, "embarrassingly parallel" is an embarrassingly stupid phrase. It takes a word out of it's normal context.
You'd think they would chose something less silly sounding and less prone to confusing those who encounter it for the first time. Say, "independently parallel" - seems to sum it up nicely while not confusing the hell out of those unfamiliar with the jargon.
For large sets, this will be our guide even unto death, for the LORD will work for each type of data it is applied to...
MSAA looks awful - and Intel's CEO famously knocked antialiasing as being a stupid blurring technique not long ago. So, he goes with the only form of AA that literally adds no value. Cutting off their nose to spite their face?
But he did already admit to being wrong. And since he is now aware of the validity of the term, he is by definition no longer "ignorant". So your use of that word indicates your point is simply to be a dick about it, as opposed to discussing the use of the term and whether it makes sense.
Don't start some commentary on anonymity
You're a Troll, and you don't want to ruin your karma with your registered login. We get it.
Kinda hard to take you seriously, though, when you seem to confuse Ruby on Rails with the Ruby language it's built upon. Or just ignorantly generalize from one to the other.
Then again, as someone with formal training in Software Engineering, I hold a much lower opinion on Anonymous Cowards of all kinds than I do of people proficient in Ruby, Rails or Javascript ;)
No problem is insoluble in all conceivable circumstances.
How is anti-aliasing performed on the rendered image comparable to supersampling? When you supersample, you produce more pixel data which you then use to produce a reduced resolution image. When you post-process you don't get more pixel data, you just filter what you already have. Wouldn't supersampling always give better results for the same final resolution?
...it looks like shit.
I am reminded of this :
"Text Rendering in the QML Scene Graph"
http://labs.qt.nokia.com/2011/07/15/text-rendering-in-the-qml-scene-graph/
"Some time ago, Gunnar presented to you what the new QML Scene Graph is all about. As mentioned in that article, one of the new features is a new technique for text rendering based on distance field alpha testing. This technique allows us to leverage all the power of OpenGL and have text like we never had before in Qt: scalable, sub-pixel positioned and sub-pixel antialiased and at almost no cost."
Max.
This isn't really anti-aliasing but more like the 'font smoothing' included with early Windows 95, which took the existing low-res image and smudged it a bit. It's debatable whether this technique makes the image more lifelike or text easier to read, but it is a good way to fake up a 'quality' look: at a first glance the smoothed display looks very similar to the high-quality anti-aliased image. Certainly for big, cartoonish images without sub-pixel-level detail the two produce similar results. Perhaps the best comparison is the hqx series of image scaling algorithms which scale by a factor of 2 or 3 or 4 by guessing the intermediate pixels. You could see this technique as roughly equivalent to scaling up with h2x and then scaling back down again. For a few dollars worth of custom hardware, your monitor could have a switch to turn on this smoothing effect for the whole display.
-- Ed Avis ed@membled.com
what you want with antialiasing is to use it to show more actual data of the scene - the vectorizer and eagle etc etc.. they all just make up data.
This edge-blending technique also makes up data, and it makes up the blending amounts in almost the exact same way that the extrapolators make it up. MLAA just presents the made-up data in a way that looks like AA.
How about "superbly parallel" task?
- Raynet --> .
I mean, seriously... An article about a new AA technique and two screenshots for comparisons encoded as... JPG :(
Oh rly?
The problem is that you didn't just make a mistake, but you criticised others for using the correct term. Nobody likes to be criticised, and especially not for wrong reasons.
The Tao of math: The numbers you can count are not the real numbers.
I only said one thing, for which I accepted correction
No, you didn't. Here's your reply, which you seem to have conveniently forgotten:
Well whaddya know, it's in Wikipedia. That makes it officially okay, right?
That's not accepting correction, that's a poor attempt at still coming out on top.
There's nothing wrong with making a mistake and admitting it. Nobody will pile up on you, even on Slashdot (I've seen it happen time and time again).
But you were arrogant about something completely outside of your field (in a site full of people from that field, no less), and then couldn't admit to it.
And you continue by accusing others instead of admitting that you were wrong.
More data, white paper, video, source code, etc. located here: http://software.intel.com/en-us/articles/mlaa/
How can anyone look at this and call it anti-aliasing?
The point of anti-aliasing isn't to just remove contrast at edges, even if that's what it often does. It's to give more information to the viewer about where that edge really is. And to do that, you've got to add samples. The information that you're trying to send, needs to exist.
What we have here, instead, is a clever algorithm that tries to approximate the blurred-edge "look" of anti-aliasing without really containing the information; the information that it implies to the viewer is fake. WTF is the point of that? My own brain can look at a jaggy line and fake things and deceive my own perceptions, way better than your damn computer. And let's remember brains are the target, here.
This is just blurring. If you want to call it some kind of cool fancy blur, go ahead. But please don't call it anti-aliasing.
As copyright owner of this comment, I authorize everyone to defeat any technological measure which limits access to it.
Can I get a vote in for "Cromulently Parallel?"
Okay everyone, my communication skills haven't been up to par, so I took extra care in writing this message. Most of you have moved on by now, but in case you haven't, please continue...
Today I learned about a term. I have been corrected. This is a valid and legitimate term. I had been unaware of its validity, but had seen it used in several articles in such a way that it appeared to be marketing fluff to show how a processor can perform a task quickly. Apparently, it is more than that, and some of you were insulted by the multiple layers of slight in my postings. I apologize for upsetting those of you who are experts in related fields by not recognizing your terminology, which apparently has a long and storied history into the 1980s. I also apologize for arguing with those of you who didn't read my mind and understand exactly what I was trying to convey. Furthermore, I apologize for willingly feeding the trolls for my own entertainment, and regret having brought the discussion down to this level. My sarcasm and attempts at humor were feeble at best, and have gone largely unnoticed.
Whether or not I agree with your methods, I can appreciate those of you who have not posted AC.
I will try to double-check my posts in the future.
Thanks for reading, and I wish you well. I hope this clears up any misconceptions. To the undying, publicly searchable archives with this thread...