Welcome

This blog represents a common area where we can share ideas, thoughts and other verbose information with others - While giving a little more insight into the inner workings/minds of our team.

Though there might be overlap in places, the content here differs from that of the main Aqsis website and is intended to be complimentary while still acting as a useful resource for those interested in the world of 3D graphics and rendering.

So... sit back, relax, and have fun... we will !!! ;-)

Tuesday, 15 May 2007

Improved Texture Filtering

It seems Aqsis has a few problems with texture filtering at present, with some complaining of too much blurring, so I've been hacking 'texturemap.cpp' over the last few weeks to find a better solution.

Texture access can be achieved using several methods. For realtime graphics, 'Trilinear' and 'Bilinear' filtering have been popular because they give reasonable results quite quickly, though it's easy to reach circumstances where they don't produce very high quality results. The main reason for this is that the mapping from texture coordinates to surface coordinates can be arbitrary, and in particular may stretch the texture nonuniformly (or anisotropicaly) along the surface coordinates. In this case trilinear filtering fails, and we need something called 'Anisotropic filtering'.

Being new to this area I bumbled around for a while until I ran into Paul Heckbert's thesis, entitled "Fundamentals of Texture Mapping and Image Warping", describing a very nice technique called the 'Elliptical Weighted Average' (EWA) filter.

This allows you to warp images such as this...



into things like this...



The idea behind EWA is really pretty cool, so I'll try to describe it briefly.

The problem of image warping is to transform some discrete input image into a discrete output image, without artifacts (notably aliasing). To understand how we might do this think of a box representing a pixel in the output image, now transform the corners of the box back to the input image. To get the colour of the pixel you then want to average over this box somehow...



It turns out that simple averaging doesn't give the best results though, and this is were the ellipses come in. There's some quite elegant theory for EWA - it says that
  1. If the input image is reconstructed from the discrete image with a gaussian reconstruction filter,
  2. The antialiasing filter (also called a prefilter) is also gaussian, and
  3. If the image warp is well-represented on the scale of the box by it's local linear approximation. (Yes, a somewhat technical point.)
then the total filter is a gaussian as well, which makes it particularly easy to deal with.

What EWA boils down to is a nice way to get some filter coefficients for averaging over a small well-defined piece of the original image. The white blur in the image above shows an example of the gaussian filter coefficients which might allow us to average over the red box shown.

More detailed information on this subject can be found in the 'Texture Filtering' section of our wiki.

Sunday, 13 May 2007

Advanced Framebuffer

Work is currently underway on a new standalone framebuffer to compliment the Aqsis toolset, offering greater functionality than our existing effort...



Though only in the early stages of development it's already looking very promising, and a definite improvement over the standard framebuffer - Even in its present state!

While the featureset's still subject to change the following is planned...

  • Dynamic scene switching (live updates)
  • Network rendering
  • Simple compositing
  • Basic flipbook functionality
  • Render arbitrary scenes to 'books' (image management)
  • Save scenes using additional image formats
  • Standard RenderMan display interface (for other renderers)

The development can be monitored through the usual channels (IRC, mailing lists, etc) and is available via the 'new-framebuffer' branch within our SVN repository.