Posts Tagged ‘color’

h1

CrossProcessing shader

June 11, 2008

Hi ! I’m doing a lot of image processing at work since a few weeks, and there a lots of things I wanna try, from post processes to dynamic geometry, but I would need another life for that. After having watched some (really nice) super cars videos (just check at the first one showing the Corvette to see what I mean), I’ve been talking with Nico about the Cross Processing effect, also called xpro, used in photography, and probably in the Corvette video.

corvette cross processing

corvette cross processing

corvette cross processing

corvette cross processing

After a quick talk (thanks) I made a simple pixel shader that post process a given scene with this nice effect 🙂

I followed this Photoshop tutorial to make it, here are the steps to work with the shader:

  • Make a black-to-white gradient
  • Add a New fill or adjustment layer, select Curves, and set the curves just like in the tutorial

cross processing curves gradient

  • Save the 1D image, it’ll be used in the pixel shader just like a curve modifier
  • Modify the final color of your pixels with this (GLSL) code:

vec3 curvesColor;

curvesColor.r = texture1D(curveTex, pixelColor.r ).r;
curvesColor.g = texture1D(curveTex, pixelColor.g).g;
curvesColor.b = texture1D(curveTex, pixelColor.b).b;

gl_FragColor.rgb = curvesColor;

And voila ! Here are some screenshots I took in Reverse (my end of studies project [team of 6 students]), maybe not the best example for this kind of effect but anyway:

Without
reverse no cross processing shader

Without
reverse no cross processing shader

With
reverse no cross processing shader

With
reverse no cross processing shader

With
reverse no cross processing shader

With
reverse no cross processing shader

In fact it makes me think about color temperature again, but this time the color is modifyed per channel and is dependent to the color components themselves instead of the luminance component of the pixel.

One more screen with all the effects combined during turbo (dolly zoom, desaturation, radial motion blur):

With
reverse no cross processing shader

Well, I guess these are the first public screenshots of the final version of the game 🙂

Oh and by the way

Advertisement
h1

“Practical Light and Color” Shader

March 13, 2008

Hi, I’m writting the blog post from my hotel room (which is pretty nice) in Sant Cugat del Valles \o/ near Barcelona. I started to play with OpenGL Shader Language Editor (Mac) at the airport, and I was continuing a bit tonight.

I’ve been working on a GLSL shader that interprets Jeremy Vickery’s vision about light and color, especially the color temperature concept.

color temperature dvd

Practical Light and Color (Gnomon Workshop)

At first, a few notes about this very lightweight tool: it really easy to get your hands on it as there are very fews possibilities, it crashes a lot, the code (text) editor is pretty cool with instant code validation and hightlights AND instant effect on the viewport (like a super fast compilation), there are only sphere/teapot/plane objects and no way to add a mesh, no GLSL samples, finaly an automatic uniform variables binding (I mean you type “uniform float bla;” and an editable variable appears (that you can then modify with sliders or color picker or texture browser).

So, let’s talk about light and color! The basic idea is that the hue component of the color is dependent to the luminance component (illumination of the area/object/pixel), so generally dark areas tend to red, less dark ones to orange then yellow, average ones to white, and then blue for bright things.

I noticed that the visible spectrum of J. Vickery above differs from the standard (real) one that you have in every book, but it gives much nicer results (no green nor purple, and different colors spacing).

Here are some details about my way of getting the final color, actually the differences between each image come from 2 color tone variables I’ve been modifying (from 0.0 to 1.0):

  • one that acts a bit like a desaturation, but in fact it’s something like:
    • (colorTemperature + vec3(colorTone)) / 2.0)
  • and one that is a weight related to the previous one, so the final result is:
    • (colorTemperature + vec3(colorTone)) / (1.o + colorToneWeight)

In facts, this is a way to scale the color temperature (texture) AND to reduce the effect it has on the object’s lighting. By scale I mean, using for example colors from red to white, instead of the full gradient that turns into blue at the end. Visually it’s like setting the time of the day or the kind of weather or environment (for example sunset on a sunny day: mostly orange tint).

Of course that’s not the final equation to get the color, I’m still experimenting on it so maybe I’ll give it later with more interesting results. Anyway here are my results with a white teapot:

color temperature shader

color temperature shader

color temperature shader

color temperature shader

color temperature shader

color temperature shader

color temperature shader

color temperature shader

It would be very interesting to try this shader these kind of scenes (Jeremy Vickery paintings):

color temperature jeremy vickery painting

color temperature jeremy vickery painting

And add some kind of atmosphere attenuation, just like he’s talking about in its DVD and GDC session. I didn’t figure it out the visual nor technical differences between this and usual fog in games but .. yeah soon 🙂