Not only of domes can an artist leave of. The fisheye mode shown in the previous post is sufficient for planetarium productions, but may not satisfy artists looking for ‘real’ fisheye lens. The most common lens found in today’s market are ‘equisolid’ lens (ref: HDRI for CGI).

After a productive holiday we now have something new to play with 😉

model by Jar-Artist

model by Jar-Artist

Models/scene gently provided by Jar-Artist


The proof is in the pudin

It’s “easy” to put up a nice artistic effect together and simply assume everything is working as it should. However, I wanted to make a system that could match the effect produced by real lens. For that I had to build a fail proof experiment. People not into coding may not know, but building a reliable testing and debugging setup is one of the keys for efficient coding. In my opinion it’s always worthy to put time into this. Note: this is also why Blender users can help a lot with bug fixing by simply building proper test files for the (also carefully/methodologically) reported bugs).

1 – Photoshooting

Take some pictures with a tripod rotating the camera on its center (the focal centre actually). We have been doing this for the past two weeks so it was smooth. Those pictures were taken by Aldo Zang in the Visgraf Lab at IMPA.

2 – Stiching

I don’t get tired of recommending Hugin for stitching and panorama making – This open source project sometimes works better even than autopano pro (a pretty good commercial alternative).


3 – Rendering

I put the panorama as a background plate, calibrated the aligment, added a simple floor + spheres. This was done with the (yet to be released) IBL Toolkit. Apart from that my Blender camera needs to match the settings of the real camera+lens I’m aiming at.

In this case all the pictures for the stitching were taken with a Nikon DX2S and a fisheye 10.5mm lens. I created new presets for the sensor dimensions and the render output.

4 – Results

I was quite pleased when I compared the rendered output with the original image. The aspects we should be looking at are only field of view and line distortion across the lens:


Also note the bottom left corner of the photo. This subtle shadowing is due to the vignetting of the lens. This is not present in the cycles render because I’m not implementing a real camera model (as shown here and here).


The complete patch can be found here. The core is the following function (simplified here). I elaborated this from the ‘classic’ fisheye equisolid formula: radius = 2 * focallens * sin ( angle / 2):

__device float3 fisheye_equisolid_to_direction(
float u, float v, float lens, float width, float height)
    u = (u - 0.5) * width;
    v = (v - 0.5) * height;

    float r = sqrt(u*u + v*v);
    float phi = acos(u/r);
    float theta = 2 * asin(r/(2 * lens));

    if (v < 0) phi = -phi;

    return make_float3(

I hope you like it. If you can share any work you did with this feature I would love to see it.

11 Thoughts on “Photographic Fisheye lens in Blender (Cycles)

  1. Dalai for President!
    That’s really amazing. Not only this great feature, but also your very neat and detailed description about your process. Thanks! 😀

  2. Nice Dalai – Dalai for President +1 🙂

  3. admin on May 3, 2012 at 6:33 pm said:

    Thank you guys.
    Now please start using it and let me know the results 😉

  4. Spirou4D on May 3, 2012 at 8:02 pm said:

    Hi Daili Felinto,
    A very good news! Is’it possible to find a binary release of Blender on win32bytesx86 with this patch, please?
    Thanks for your reply in advance.

  5. Spirou4D on May 3, 2012 at 11:14 pm said:

    Oups!!! Dear Dalai, excuse-me!

  6. Adriano on May 5, 2012 at 1:57 am said:

    YES! YES! YES!
    Dome camera for Cycles is included in new builds at

    Thank you Dalai for your great work.

    Thnak you Brecht for your outstanding Cycles.

  7. admin on May 5, 2012 at 2:28 am said:

    Spirou4D, Adriano: Thanks
    This patch was easier than it may look. Any full ray tracer render system is practically begging to have fisheye support 🙂

    Nevertheless I’m quite happy for putting that into Blender. And I should confess that a week ago I still wasn’t sure how to get a grasp on camera lens (mm) and their real FOV. Nothing that the internet can’t solve 😉

  8. admin on May 5, 2012 at 2:28 am said:

    It’s committed in the svn.
    I guess I should have chosen another week to commit this. Gimp 2.8 will totally eclipse this commit :p

  9. Adriano on May 5, 2012 at 2:46 am said:


    There is maybe a small problem with vector passes and your dome camera.
    I’ve just tried to render a vector blur test and it blurs in wrong perpendicular direction when in fisheye.

    Seee images I’ve just sent you by email.


  10. Spirou4D on May 5, 2012 at 6:08 pm said:

    Thanks for your reply and I congratulate you for this work as essential!
    I can not wait to try something……
    See you soon
    Spirou4D from France

  11. admin on May 7, 2012 at 7:38 pm said:

    Adriano, it’s all fixed now (the speed vector).
    Everyone, please keep testing it, and don’t be shy on sharing your results 😉

Leave a Reply

Your email address will not be published. Required fields are marked *

Post Navigation