Stefano Jannuzzo - mental ray CV.
(most of the pictures and movies come from my own tests, nothing really fancy.)
1993 - 1997, Softimage, Milan, Los Angeles
I started working with mental ray in 1994, with Softimage Italia, when Marc Petit, at that time head of Softimage Special Projects Europe, asked us to deliver some example code from the incoming version of Softimage 3d. I hardly knew what a texture was, however I survived that and learned a lot.
I then moved to Softimage Europe, then Los Angeles Special Projects, where we supported a few production, however nothing really worth to recall.
1997 - 2002, Phoenix Tools, Milan.
I co-founded Phoenix Tools. We were mostly on 3d plugin development, however we also had a couple of shaders collections.
I worked on non photo real stuff (P, M),
translucency (long before sss) (M), glass
(P) and how not to mention sport balls ! (P).
My biggest projects was a fur system (P1, P2,
M1, M1).
Beside the fur generator plugins, we had a geometry shader replacing each strand with a polyline facing the camera.
That happened long before mr implemented hair primitives. Softimage 3D did not even have a geo shader placeholder, so we had to export and hack the mi file in the background to add the shader declaration and instance.
I also ported the whole collection under Xsi when it was eventuelly released.
The last projects was porting the whole Arete Digital Nature set under Xsi. The result was very good to me. Unfortunately both companies collapsed after a few months and the effort went lost.
2003 - 2004, Action Synthese, Marseille/Turin.
I freelanced for "The Magic Roundabout", ("Doogal" in the US), with Matt Daw and Bernard Lebel technical directors.
I worked from home, going to Marseille once per season.
They asked me for both phenomena (collapsing complex rendertrees to a single node) and shaders:
-
Basic math and color utilities (P), texture mappers (P) and such
-
Camera visibility for camera mapping (P)
-
Several bumpers, like 3d texture bumper (P), normal maps (P1, P2), etc
-
Environment shaders mixer (P)
-
Fake environment refraction (P)
-
Adaptive glossy reflection (P)
-
Illumination to weight map converter (lightmap were not available yet) (P)
-
Fast hair self shadowing, caching and retrieving per segment shadow color (P)
-
Hair transparency P and motion vectors P
-
Feet: an improvement of [1], a set of shaders for rendering the occlusion height field of two objects and bumping or displacing the result (M)
-
Smoke: a volume density renderer, feeded by the data coming from a simulator developed by Matteo Manganelli. The volume shader supports self and cast shadows, multiple smoke emitters and colors, photon scattering. M1 M2 M3 M4 M5 M6
-
Subsurface scattering: implementation of [2] with sample distribution from [3]. SSS was introduced later by mental ray with version 3.4
-
Strands: a set of geometry and texture shaders to render the trails of particles, of any length. A particle's path defines, for a given time range, a kind of fat hair, that can be then textures both length and crosswise. Subframe jittering was also supported. (M1 -> M2 -> M3)
2005-2007, Lumiq Studios, Turin
I did a lot of Xsi scripting and c++ plugin development, although my first occupancy was still on shader writing.
We had around 40 Windows workstation, plus a 150 blade Linux based renderfarm. I also took care of managing the Xsi, Maya and mental ray installation
on the renderfarm including all the custom tools and shaders.
At Lumiq we also hosted a small and brilliant company, Edenlab, working mostly in the automotive area.
Since they model in Maya, I manteined a Maya version of all the shaders I wrote for Xsi.
Also here I was asked for a wide range of basic nodes, for instance all the set Maya was missing compared to Xsi (state info, scalar and vector math and transformation (P), switchers, ray direction utilities) and such.
For the rest, here is a list:
-
Per object final gathering (P) and antialiasing settings (P)
-
Reusable shadow maps (P)
-
My version of the popular occlusion, supporting transparency (P)
-
My version of multiple frame buffering, allowing the artists to render at once up to 30 passes instead of having to render them
sequentially (that was before Xsi 6). (P1 P2)
-
Light occlusion, faster and better looking than traditional area ligths (P)
-
Compenetration, a camera shader allowing to check for objectss intersections (P)
-
Fake SSS. It's a photon volume shader which stores the photons coming from a light at a given depth below the object's surface, after being filtered by the diffuse color. The material shader then computes the volume irradiance coming from the photons on the surface. P1 -> P2, M1 M2
-
Image based lighting, pretty standard P M2 M2
-
Antialias pass. Nice (not mine) idea. A greyscale color buffer is returned, based on the number of supersampling rays a pixel required for the beauty pass P1 -> P2
-
Radio (my favourite): there is a broadcaster shader and several receivers, one per type (color, vector, scalar...). A broadcaster can be placed anywhere in a rendertree and broadcasts a color, a vector, etc, on a given frequency (a number). All the shaders which are being called after the broadcaster can have a receiver as a parameter, which will override the parameter value if receiving something on its frequency. Pretty hard to explain in short, however think it a render time fully texturable overriding mechanism. P1 P2
-
Tessellation pass for displacement diagnostic P
-
Global Illumination for dummies. Think it as a colored occlusion.
There is a GI receiving shader which sends rays around. If a GI emitting object is hit, a color is returned,
which is not necessarely the material color, but can be for instance a constant one, or a faster shader than
the surface's. Several bounces are supported. Also I provide a sort of importance sampling, by allowing the
user to add up to 100 bright spots with their position or direction and radius.
These shaders are often exploited by Edenlab which helped me designing them.
P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13
-
Arbitrary direction displacement P
2007-Today, Pumpkin3D, Paris/Turin
Hired for "A Monster in Paris". Working from home and travelling to Paris once every two months or such.
As usual, a mix of plugin (geo baking), script and shader/phenomena writing.
-
Finite distance environment reflection, with a placer object for each of the projection types. P
-
Fake Fur with correct tangent space.
-
Final gathering lookup and mixer, allowing you to mix several fg maps. P
-
Lightmap hub, to generate several lightmaps at once. P
-
A couple of translucency shaders (maya like). P
-
Hair instancer shader, faster and more efficient than the Xsi hair geometry instancer. P
-
A lot of info nodes like incoming/traced/accumulated ray length, raster unit length (to tune adaptive bumping
step), rendering status (for instance avoiding rendering channels in region mode), detailed ray type checking, and so on.
Sometimes I contribute to the XSIBlog community, my favourite resource for Xsi users.