Archive / Category / Art & Design

Yesterday I added a new node to Blender’s compositor: Displace. It works very similarly to Shake’s iDisplace node, pushing pixels around based on an input vector mask, and is useful for all sorts of things like doing hot air distortion, quick and dirty refraction effects in post, and so on. The full documentation is in the commit log, I guess I’ll have to tidy it up for the release notes.

One curiousity of this one is the technique used to code it. Most of the code logic was done using Blender’s Python Image API, as a means of quickly testing and prototyping. Python is a lot slower at the actual processing, but it’s a heck of a lot quicker to test than having to compile Blender each time. I recommend it!

You can download the prototype script/.blend file if you’re curious (just press Alt P). I then ported to C, which is relatively easy to do for simple image processing code like this, and changed a few things around. Previously in the Python version I had to try and come up with my own not-too-bad antialiasing code, though I’m sure what I came up with has been done before and has a nice technical name or something ;) In the C version I was able to use some nicer image sampling code that Ton used for the awesome Map UV node. Incidentally, I also used the same Python prototyping technique for the UV test grid option when creating new images in Blender (.blend file).


Displace node example

Quick demo video: hot air distortion

displace node displace node

Greyscale input, displacing in one direction (node setup)

2D vector input (normal map), independent (more accurate) X and Y displacement (node setup)

When I worked on adding tablet support to GHOST, Blender’s low-level input system (alongside Nicholas Bishop and Andrea Weikert who did the X11 and Windows versions), one thing I had in mind was the possibilities not only in the obvious painting and sculpting, but in other more experimental areas too. I’ve got a few ideas sketched down about potential uses in the interface, for example imagine sliders that changed in precision depending on tablet pressure, or a radial menu that uses the tablet tilt information to bias what option is selected.

A tablet, especially one that supports tilt sensitivity like the Wacom Intuos, is almost a poor man’s 3d input device. With X/Y location, pressure and tilt, you can derive a lot of information about the pen’s situation in 3D space. This is interesting to me, because unlike real 3D input devices like spaceballs (which I don’t own), many CG artists have tablets, so input methods involving a tablet can involve a much larger audience than the more obscure devices, and so investigating it doesn’t feel like such a waste of time :).


Anyway, the idea came to me that Blender’s built-in game engine could be very useful as a quick, interactive means of testing these different ways of interacting with a tablet. Over the weekend I had a hunt through it’s unfamiliar source code, and hacked together a patch that adds pressure and tilt support to the game engine’s mouse sensor (available here). It exposes these variables through Python and works very similarly to the way you currently get the mouse’s position, with three new functions: getPressure, getXtilt() and getYtilt().

So of course I had to do a first test! This one is very simple, just visualising the pen 3D space as a virtual pen over a virtual tablet surface. I mapped the pressure to the ‘height’ of the pen along it’s own local axis, and the tilt data is changing the orientation. Watch the video I recorded on a digital camera and see for yourself! The .blend file for it is here, but you’ll need to build Blender with my patch for it to work.

After doing this I’ve got a few more interesting ideas for things, such as FPS-style mouse navigation with the tablet but with tilt controlling other things like roll or turning around, or perhaps a marble madness style game where you use the pen to tilt the surface that the marbles roll around. I’m now also curious to combine this with my PowerMate for some really interesting interaction. Let me know if you have some other ideas that could work too! :)

Game Engine tablet test

Yesterday I found out about a new website called CGSphere. The premise is simple, take a sphere on a grid background in a CG application and interpret it in some creative way. It reminds me of one of my uni projects called small square book, in which we had to make a square book with 50 pages, with each page having a different image based on the idea of a square, linked together in some consistent theme. I really enjoyed that project, and the fun of trying to be inventive within limitations, so I posted my first CGSphere today.

It’s an homage to El Lissitzky, one of the Russian Suprematists / Constructivists, and his famous image Beat the Whites with Red Wedge from 1919. I really love that kind of art, and luckily had the chance to see some of the originals by Malevich, Lissitzky and Rodchenko in the Russian museum a few years ago. Anyway, this is just my small tribute :)

Update: I made another one.



Suprematism

During the last disconnected weeks, I finished cleaning up and putting together some footage for my demo reel. Now, it’s online here at mke3.net/reel. Do go and check it out, I hope you’ll like it.

And yes, I am looking for work :)



Matt Ebb demo reel screenshot

It’s interesting how productive one can be without the constant distractions of the internet. I’m alive and well in my new place and enjoying it a lot, but thanks to incompetent phone companies I’ve been disconnected from the net for the 2 1/2 weeks I’ve been here. Hopefully I’ll be back online within the next couple of days, so sorry if I’ve been a bit out of contact, I’ve got a huge backlog of emails to get through.

Apart from cleaning up a demo reel, some coding and of course unpacking, the other day I did a little test of the in-development multi-res sculpting tools, currently being constructed by Nicholas Bishop, who’s doing a sterling job as part of Google’s Summer of Code. I’m using a build that’s about 3 or 4 weeks out of date, but even so, it works very nicely already.


Although it doesn’t have many of the features and speed of an application like Zbrush, at least from my experience in both apps, it’s quite competitive for a lot of purposes. The tight integration of the sculpting tools with the rest of Blender is a huge plus - being able to step down from level 7 to level 4 subdivision, use Blender’s UV tools to unwrap the mesh and having the UV layout propagate up to the higher res surface is just fantastic. At the rate things were going previously, I wouldn’t be surprised if the current development version is a lot better, too. This little test below took an evening to sculpt and another day or so for the remaining stuff like lighting, skin shader, colour and bump map painting. My poor little Powerbook G4 can’t handle ungodly amounts of polys, this mesh being only 120k, but still the results are very nice, especially with a bump map on top, the old fashioned way.

Sculpt test

Here’s another comp test in some of my experiments with cekuhnen in the blenderartists forums. It makes use of a simple Combine RGBA node, which I wrote the other day. It doesn’t exist in Blender but a patch is available in the tracker. Without that patch though, you can replicate the functionality using a slightly convoluted node network. This technique basically takes three different versions of the refracting material, with slightly different indexes of refraction, then adds them back together in the different R/G/B channels. I’ve blurred them slightly with a mask taken from the sphere on another render layer.

It doesn’t hold up too well in close up since you can see the three different layers quite sharply, rather than a smooth blend - for that you’d need more IOR layers. I also tried doing this in material nodes too, which would be a much better approach, however the way raytraced refractions is handled there seems to be a little bit weird, and it didn’t work out. Hopefully in the future this can be cleaned up, perhaps with specific raytracing nodes that output RGB or alpha or whatever.

blend icon  .blend file



Composited dispersion

dispersion nodes setup

While helping prepare the Release Notes for the impending release of Blender 2.42, I’ve made a few more demo files, including for stress maps, and put together some comp breakdowns from Elephants Dream. The most fun (and slow) though, was using Blender’s fluid simulator for the first time, to make a nice demo of the new motion blurred fluid rendering capabilities.

It took an evening to set up, light and texture and overnight to render on my poor little G4, but it looks kinda cool! Guess I need a faster computer though, to use higher fluid resolutions and get rid of the residue stuck on the bowl at the end.

mov icon  QuickTime H.264
mp4 icon  MPEG4
blend icon  .blend file



Fluid sim video still

I did a bit of an experiment the other night as a proof of concept for a new node type that would be very nice. Although it’s unfinished and disabled for version 2.42, it’s planned that we’ll be able to extract an Ambient Occlusion pass into the compositor with Blender’s pass rendering system, which will make it much easier to manipulate, doing colour corrections, changing blend modes (screen/multiply/overlay are better blender modes than the built-in add/subtract/add+sub).

One very useful manipulation that could be done is to blur the AO pass along the surface of the geometry, to smooth out noisy sampling.

blend icon  test .blend file



Blurred AO - rendered results

I’d like to be able to blur the AO pass in post, in order to get away with having less samples (faster render time) and to prevent flickering during animation. However just evenly blurring across the entire AO pass image won’t work, as the shading will blur outside the edges of objects and look ugly. Photoshop has a filter called ’smart blur’ which does some kind of edge detection and masking in order to only blur the smooth areas, and leave sharp areas intact. Something like that would be a help, but that’s just doing an edge detect on the image itself, which probably isn’t all that accurate. Since we have plenty of information about the objects’ 3D geometry in the compositor via the Normal and Z passes, we should be able to make better use of it, and make the blur mask based on that information, to blur the smooth areas of the surfaces, but not across edges or corners.

If I knew more about filter programming, I might have a go at this myself, otherwise consider this a feature request :) I mocked up a test using a whole bunch of nodes - A screenshot of the node setup is below. Basically, it takes each of the normal channels, does an edge detect on them, then tweaks and combines them back together as a mask for a blur. I’m sure a properly coded approach would be much better, perhaps doing things like comparing normal vector angles, masking and sorting based on Z depth, etc. but the results I have already with nodes are decent. The example image above shows the render without AO, with 4 sample AO, and the same thing with the AO pass ’surface blurred’. 4 samples is usually ridiculously low and noisy, but it’s not too bad with the blur. If anyone wants to have a go at coding this, I (and I’m sure many others) will be most delighted!

Surface blur nodes setup

Some of you may have seen the video tutorial I made a while ago demonstrating how to fake a layered car paint material using ramps. Now in the upcoming Blender 2.42, we have the new material node system, so there’s no need for fakery, and a lot more flexibility and control. As a proof of concept and a nice demo for the 2.42 release, I made up a node-based car paint material using a great VW beetle model by ‘pa-furijaz’ that I found on the Blender Model Repository.

The model and my material are freely available under the Blender Artistic License.

mp4 icon  MPEG4 (600 KB)
xvid icon  XviD AVI (500 KB)
blend icon  .blend file



Car paint render

Car paint nodes setup

Today, Campbell ‘Ideasman’ Barton showed me a very cool .blend file he made to demonstrate Blender’s Array Modifier, new in the upcoming Blender version 2.42. I thought I’d light, comp and render it to make a nice demo movie to use in the 2.42 release documentation. The white 3D axes are the controller objects. Check it out:



Array modifier demo movie

After doing a fair bit of concept art for Elephants Dream, I’ve decided I need to get back into sketching more regularly not only because I’ve enjoyed it, but because its a very useful skill to have, and I’d like to practise and try and get my fundamentals more solid.

I signed up to conceptart.org and made myself a sketchbook to keep motivated and hopefully get some constructive feedback. Let’s see if I can make a habit of posting my updates here as well from time to time, starting with this.



sketch thumbnailsketch thumbnailsketch thumbnailsketch thumbnail

sketch thumbnailsketch thumbnailsketch thumbnailsketch thumbnail

sketch thumbnailsketch thumbnailsketch thumbnailsketch thumbnail

Aaron tells me today that the Video Ezy site we worked on just got plugged in the news box of Australian In Front, one of the big cool dude design websites. Not bad!

After a long time in limbo, and quite a few changes since I left it, the new Video Ezy website is up. Video Ezy is one of the largest video rental chains in Australia, akin to Blockbuster, and it was quite interesting following the process through the dealings with the franchisees.

I worked on it with Aaron and Pete while at @www, doing the page layout/template design, and also the 3D-but-not-3D ’store browser’ thing on the front page, using Blender, Swift 3D (ugh) and Flash. Although the client has now put some questionable things in their free content areas and the e-shop backend was postponed, it’s not looking too bad.



Video Ezy