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 😉
Models/scene gently provided by Jar-Artist
http://www.blendswap.com/blends/author/jay-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 – hugin.sourceforge.net. 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).
Algorithm
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):
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(
cos(theta),
-cos(phi)*sin(theta),
sin(phi)*sin(theta)
)
I hope you like it. If you can share any work you did with this feature I would love to see it.
Dalai
Dalai for President!
That’s really amazing. Not only this great feature, but also your very neat and detailed description about your process. Thanks! 😀
Nice Dalai – Dalai for President +1 🙂
Thank you guys.
Now please start using it and let me know the results 😉
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.
Spirou4D
Oups!!! Dear Dalai, excuse-me!
YES! YES! YES!
Dome camera for Cycles is included in new builds at Graphicall.org.
Thank you Dalai for your great work.
Thnak you Brecht for your outstanding Cycles.
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 😉
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
Dalai,
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.
😉
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
Adriano, it’s all fixed now (the speed vector).
Everyone, please keep testing it, and don’t be shy on sharing your results 😉