MentalRay Rendering

posted on: 06 / 07 / 2010

A good friend from work has arranged for me to get my hands on a fantastic book which made me decide on this next project. With the book comes a full license to Mental Ray and all of the shaders that comes with it. In particular architectural.dll which is filled with shaders you can use to generate highly realistic images. I sincerly recommend this book to annyone that is interested in MentalRay rendering.

In this project I learned a lot about:

  • The Mental Ray Shader Language
  • Mental Ray Scene Language
  • The mia_material
  • architectural.dll in general
  • Seam Carving For Content Aware Resizing

    posted on: 15 / 07 / 2009

    I wanted to try implementing this paper ever since I read it. I though the idea was brilliant and the actual solution seemed simple enough to code. Since I started working at Autodesk, I have had much less time to work on these side projects, but I finally got around to doing it.

    In this project I learned a lot about:

  • Dynamic programming
  • The Gaussian and Sobel operators
  • Glut (why it’s cool and why it sucks)
  • Windows.h (Win32)
  • Threads and parallelization
  • General application design
  • The BSSRDF

    posted on: 12 / 09 / 2007

    Well this little side project certainly kept me busy and thinking for a few weeks! I have always been curious about Henrik Jensen's method of simulating subsurface scattering (A Practical Model for Subsurface Light Transport, 2001).

    After reading his paper, implementing the subsurface scattering shader boils down to solving two main problems:

    1. The ability to move a point along a surface.
    2. The computation of the Diffuse Scattering term through a Dipole Diffusion Approximation.

    At the moment I have not found an efficient soluton to move a point along a surface (I am currently using an inverse cosine for each triangle traversed). For this reason, I have not been able to increase the sample rate of the shader high enough to produce good images.

    I will defenitly be looking forward to optimising this project in the near future.

    In this project I learned a lot about:

  • The BSSRDF
  • The diffuse and single scattering terms
  • Snell's and Fresnel's laws
  • Moving a point on the surface of a mesh
  • Newton's method for root finding
  • The Open Render Maya libraries
  • The Kitchen

    posted on: 19 / 06 / 2007

    The Kitchen is a food safety educational game I helped developed at Straylight. In this project, I was in charge of the complete creation and management of all animation data that was required.

    After finishing the evaluation of our client's requirments, we had over 300 complex animation sequences to create.

    The Biomechanics Laboratory of the University of Otago have a very nice motion capture studio which is used for sport motion analysis. We were able to use their facilities for a day to sample all of the required sequences.

    The motion capture data that came back to us was in HTR format which could not be imported into Maya so I was in charge of writing a tool which would let us import this data.

    In this project I learned a lot about:

  • Content flow in a project
  • Emergent Gamebryo (game engine)
  • The HTR format
  • Motion Capture Data Management
  • Mel UI Components
  • Vortex Based Fire Simulation

    posted on: 19 / 06 / 2007

    In 2006 during my Honours year I had the chance to study in the same lab as Alexis Angelidis (Alexis was finishing his phd at the graphics lab at Otago University). One of his interests was to use vorticity fields to simulate fluid dynamics.

    In this project I implemented a small part of his published paper called 'A Controllable, Fast and Stable Basis for Vortex Based Smoke Simulation'. I used directX and VS Express edition for this project which is all nice and free!.

    In this project I learned a lot about:

  • Signal Processing
  • Vorticity Fields
  • Octrees
  • Trilinear Interpolation
  • Alpha Functions
  • Maya Blendshape Mirror Tool

    posted on: 19 / 06 / 2007

    This is a little tool that I wrote for our modellers at work. It is used to mirror blendshape geometry onto an axis.

    Most free tools that I found online were written in Mel and seemed to rely on a sorting phase of the vertices.

    This plug-in is written using the Maya API and it uses a map to store the position of each neigbouring vertex. For example it assumes that vertex (1,0,0) has a neigbouring vertex (-1,0,0). If the neigbour is not found (say the mesh is noisy due to some zBrush modelling), then the closest neighbouring point is used.

    Later, I discovered Koshigaya Studios which is free and does blendshape mirroring much better!

    In this project I learned a lot about:

  • The Maya API
  •  

    related links:

    Koshigaya Studio

    downloads:

    BlendshapeMTSourceCode
    HiRes Video

    Maya to Nitendo DS Exporter

    posted on: 19 / 06 / 2007

    This was a very quick but useful script that I wrote in order to export OpenGL displaylists which are used to render 3d models with the Nintendo DS homebrew kit.

    In this project I learned a lot about:

  • OpenGL Displaylists
  • The Nintendo DS Homebrew Devkit
  •  

    related links:

    DevkitPro
    R4 Cards

    downloads:

    Maya to DS Mel Script

    HLSL Phong Shader

    posted on: 19 / 06 / 2006

    We got a book at work about writting HLSL shaders. This is something I had always been interested in but had never managed to get going in Visual Studio.

    After a few attempts it was suggested to me that I'd try to use ATI's RenderMonkey to write shaders. Oh boy! So much easier! First of all, the shader will not run if it's vertex or pixel shader contains an error (as oppposed to Visual Studio which just ran the application and crashed).

    So once equipped with RenderMonkey, I wrote a simple phong shader with a post process.

    In this project I learned a lot about:

  • HLSL
  • RenderMonkey
  •  

    related links:

    RenderMonkey

    downloads:

    HLSL Shader Source Code

    jGraphics (Raytracing with Java)

    posted on: 08 / 04 / 2006

    This is a project that a few postgraduates and I did together. The idea was to stay in touch after graduation by developing a graphics project together. So we started jGraphics.

    This projcet was built from the ground up and we decided to use Java for ease of compiling reasons (we did not all have computers at home, so some had to compile the project at Uni or at work).

    The raytracer can render spheres, planes and triangles. It also features reflection, refraction, bump mapping, ambient occlusion and uniform space subdivision.

    Our next goal is to render a mesh exported from a 3d package.

    In this project I learned a lot about:

  • SVN and conflict resolution
  • Ambient Occlusion
  • Uniform Space Subdivision
  • Boids

    posted on: 12 / 05 / 2006

    This was one of my favourite University projects. I was paired with my best friend Mr. Miller and the goal was to create emerging behviours from simple logic agents.

    We were encouraged to look at the work of Craig W. Reynolds and his Boids. I fell in love with the concept straight away. Stuart and I used OpenGL to simulate birds flying in space and responding to three basic layered forces.

    1. Avoid nearby boids
    2. Match nearby boids velocity
    3. Fly towards the centre of the flock.
    These layered forces were enough to create a very beautiful motion which gave a good illusion of flocking.

    In this project I learned a lot about:

  • Emmergent Behaviours
  • Bucketing Optimisations
  • Fractals (Madelbrot Set and L-Systems)

    posted on: 11 / 04 / 2005

    After reading an article about the Mandelbrot set, I was surprised to see that the algorithm described to generate it was so simple (basically consists of iterating through each pixel of an image and displaying the 'distance' of that point to the Mandelbrot Set).

    I thought it was so cool that such a simple algorithm could generate such complex looking images.

    After that I started getting interested in procedurally generated content, so I tried a simple L-System that would draw 2d trees. The trees were generated using a random seed which was hashed to a string. For each of my close friends birthdays, I would give them a t-shirt with their own generated trees on it. Very personal : )

    In this project I learned a lot about:

  • The Mandelbrot Set
  • L-Systems
  •  

    related links:

    Mandelbrot Set
    L-Systems

    downloads:

    MandelbrotSetSourceCode