September 12, 2011
For those who are interested in the HDR side of things, I’ve got a new blog for you. As most of you know, www.filmicgames.com is my personal site. And I’ve finally put together a blog for 19lights, the company I’ve started. If you’re into all things HDR, you should check out the blog at blog.19lights.com.
The latest post is Top 5 Optical Illusions for HDR Photographers. I’ve found that when trying to explain the concept of HDR Photography to people that I keep re-explaining the Adelson Checkerboard illusion over and over and over. I can’t tell you how many times I’ve sat at someone’s laptop, opened Windows Paint and started drawing rectangles to explain it (like in my GDC talk). Actually, the entire point of the filmicgames website was to stop explaining things to people–I wanted one place to say my piece about arguments that I would have over and over (like linear-space lighting). So I’ve finally put my explanation for the Adelson Checkboard online (as well as a few other important illusions) and, if I’m really lucky, I can stop using Windows Paint. Although who are we kidding, I’ll always use Windows Paint.
As far as this blog, I’m going to keep posting here on occasion, but obviously the 19lights blog is a higher priority. Happy HDR!
Filed under: Uncategorized by admin
No Comments »
August 15, 2011
Hopefully you all had a good time at Siggraph. For game programmers, the one course that you absolutely must check out is Filtering Approaches for Real-Time Anti-Aliasing. Make sure to check out the course webpage which will include slides and sample images. Here’s my general thoughts on it.
1. We don’t need perfection. And FXAA is pretty cool.
When looking at AA approaches, 720p with no AA has very bad aliasing artifacts. It’s really bad, especially if you have long lines and lots of contrast. I remember talking with Alex Fry (from EA) who made the point that you get a huge gain going from 1x to 2x MSAA. When you go from 2x to 4x, it looks better, but by a smaller margin. When you are an average distance away from a real screen, 2x gets you about 80% of the way there and 4x gets you that last 20%. 4x rotated-grid MSAA on the 360 looks very good. You’ll still see some aliasing in the worst cases but artifacts will be very rare. Obviously, there are many considerations here that I’m glossing over (like deferred/light prepass rendering).
I have the same feeling about FXAA. Eric Haines (from the RealTimeRendering blog) wrote the article FXAA Rules, OK? Guess what his opinion is? Generally, I’d agree with Eric’s points. FXAA is not perfect. You don’t get ideal edge fixing. But when I look at it in real games, it seems “good enough”. There are so many reasons why games don’t look photoreal, such as lighting models, faceting, texture filtering/compression, shadows, you name it. And FXAA is good enough that I’d rather focus my development time and GPU time on something else.
(more…)
Filed under: Uncategorized by admin
12 Comments »
August 6, 2011
Hey guys. I’ve gotten a lot of questions about what I’ve been up to since leaving Naughty Dog last January. And today I’m finally able to announce something!
NaturalHDR Trailer from 19lights on Vimeo.
After leaving, I started 19lights, LLC, where I’m the Founder/CEO. I’ve got big plans for world domination, and it starts with HDR for Video. The product is called NaturalHDR and you can check out all the info at naturalhdr.com. If you’re interested, please sign up for the mailing list, or at least follow on twitter: twitter.com/19lights.
See you all at Siggraph!
Filed under: Uncategorized by admin
2 Comments »
July 6, 2011
Arithmetic encoding patents in JPEG images.
To be clear, I strongly oppose software, semiconductor design, and business method patents. That’s a longer discussion. So I was looking at how much time/money/innovation we actually lose from patents. IMO, the most damaging set of patents to the world are the ones covering Arithmetic Coding in the JPEG format.
As an example, check out this image.

Here are two links for larger versions. Can you see both in your browser?
Huffman Compressed
Arithmetic Compressed
(more…)
Filed under: Uncategorized by admin
14 Comments »
May 27, 2011
Ah yes, the “Retina Display” post. I’ve been meaning to do this one for a while, and decided to let it go, but then it came up in a private conversation so I decided it was time to go through with it. Guess what my take on it is??? I talked about similar issues before in my 720p vs 1080p post before it got overridden by trolls from n4g.com.
As you may have heard, the iPhone 4 with it’s “Retina Display” has a 326 DPI (dots per inch). And they make the implication that the display is so good that if you had a better display that you wouldn’t be able to tell the difference because at a typical viewing distance the resolution of the display is higher than the human retina. Of course, technically “Retina Display” is just an Apple marketing term, but clearly that’s the marketing narrative that Apple is pushing. Here’s the exact quote from Steve Jobs:
“It turns out there’s a magic number right around 300 pixels per inch, that when you hold something around to 10 to 12 inches away from your eyes, is the limit of the human retina to differentiate the pixels.” (more…)
Filed under: Uncategorized by admin
10 Comments »
May 8, 2011

Got a face you have to render? CG faces are hard. Of course, some are harder than others so I’m introducing the “How Hard is Your Face” test.
How Hard is Your Face:
- Does it have real human proportions (vs. creature-like)
- Is it light-skinned (vs. dark skinned)
- Is it younger (vs. older)
- Is it attractive (vs. ugly)
- Is it a woman (vs. a man)
Of course, ALL faces are hard. Any time someone does a good CG face that moves, it’s a real accomplishment. That being said, some are harder than others.
(more…)
Filed under: Uncategorized by admin
8 Comments »
April 24, 2011
Let me ask you a question. Suppose Intel came out with a CPU that was 10x faster. But there was a catch: every once in a while it would just give you the wrong number. So suppose that you calculate x=x+7, and once in a while it just gives you x-4 instead. Or sometimes when you write memory it might just put it somewhere else. Would you rather use a CPU that actually works, or the CPU that is 10x faster but unreliable? Obviously, you would want a CPU that gives the right results because even one calculation error could easily crash your program.
For that last 10 years, GPUs have gotten away with cutting corners here. We all have dealt with various driver problems on PCs. And in fact, we’ve all seen how when cards start to die, you can sometimes see the “white dots” issue where sporadic white dots tend to appear.
This is why OpenCL is such a pain. Here is a test case that I ran into today. I was trying to figure out what was wrong with my code on this image. I’m using an AMD 5750. My program is doing processing of average sized raw files (3900×2616).
(more…)
Filed under: Uncategorized by admin
4 Comments »
March 6, 2011
Graphics researchers and games programmers don’t talk to each other. That’s just how it is. I can’t count how many Siggraph papers that claim to be applicable to games. Naty has a post over at realtimerendering.com where he summarizes some of the discussion at I3D about this and adds some insights as well. I give everything in that post a solid +1. But actually, my main complaint has to do with error metrics.
Here is a hypothetical for you. There is some existing technique out there that everyone uses, and I have an approximation for it. It could be a comparison of my lighting model vs some established lighting model. My HDR tonemapping algorithm vs your HDR tonemapping program. Anything really. My technique has 2% average error. At any point, the error is no more than 4% of the maximum absolute value. So is my lighting model good enough that it “solves” the problem? Of course not. If you are saying that your technique is “visually indistinguishable” from another technique, absolute error metrics are basically worthless. And unfortunately, absolute error is the value that almost everyone uses in the graphics research community.
The classic example that I use for how error metrics can be deceiving is the Xbox 360 PWL Gamma Curve. Here is a graph of the gamma 2.2 curve, the sRGB curve, and the Xbox 360 curve. I’ve mentioned this elsewhere on this site. You can click on it for the full-res version.
(more…)
Filed under: Uncategorized by admin
7 Comments »
February 27, 2011
Hi everybody. It’s been a while since my last post, mainly because I’ve left Naughty Dog and started my own company. Suffice it to say, I’ve been very busy and feverishly coding. Don’t have anything to say about it right now other than it’s going to be cool and it’s not going to be a game. Btw, U3 is going to be crazy. And yes, I need to fix that image on the right.
Back on topic, one issue that always confused people is the terminology around gamma correction. Sometimes, when I’m talking about the issue, someone will say “It doesn’t matter because people have poorly calibrated TVs?” The answer is “Wrong Gamma Correction”. This kind of confusion happens all the time because we have two completely separate problems in CG/Video Games and they are both called “Gamma Correction”.
Problem 1: Gamma Correction (Linear Space Lighting)
This problem is making sure that all your lighting calculations are done in the correct space internally. You fix this problem by “Gamma Correcting” your textures in your shader. I.e. convert from sRGB to linear. And then at the end of your lighting calculations, you have to convert from linear back to sRGB, which is what we usually assume your output color profile is. (more…)
Filed under: Gamma! by admin
9 Comments »
December 5, 2010
You can sorta think of this post as part 2 of my “Everything is shiny rant”. While standard specular lighting is pretty common in games, one effect that we rarely see in games is proper fresnel.
Hopefully, you know what specular is by now. The most common model for specular in video games is Blinn-Phong, which is:
H = normalize(V+L);
specVal = pow(saturate(dot(H,N)),power);
In this case, V is the view vector, L is the light vector, N is the normal vector, and power is the specular exponent. H is the derived half vector, and it is the vector half-way between the View and Light vectors.
How does it work? Here’s a diagram.

(more…)
Filed under: Uncategorized by admin
12 Comments »