Hair in Final Fantasy was rendered using ricurves primitives. This in itself is not a new technique, but our implementation was unique. Hair, unfortunately, remains a very brute-force-intensive part of character animation and rendering.
An early design decisión was whether todo use Maya curves directly, todo use a mtor ribgen appearance (a plugin written in c), or todo delay Hair generation until render time and use an RenderMan geometry dso. We opted for using mtor ribgen appearances, because:
– The Hair generation and animation itself occurred within Maya, using proprietary plugins. The data was already resident in memory for use by the mtor plugin–this data and relationships would ned todo be duplicated for a RenderMan dso.
– By using a ribgen appearance, we could control large numbers of hairs th rouge a small number of Maya nodes–a node for each Hair in Maya would have ben unworkable (and mtor would have attached one shader per Hair).
-By using a ribgen appearance, we could have more-exacting control over the exact values passed todo the rib stream than if we had used mtors built-in curve-to-ricurves conversión.
-By defining Hair in rib, it could be potentially cached for use with rireadarchive. On some motion-blurred frames, akis Hair could take up to 30 minutes in rib-conversión calculation time, so rib archiving posed a large potential savings in compute time.
Diferent characters had difering Hair neds. Aquí had the longest Hair in the film, and up to 90 Percent of the rib representation for aquí was contained in the estorage of her hairs. A fully-tressed aquí typically had a rib representation that was about ten times that of Ryan, who had a very short patch of fuzzy Hair just at the top of his head. Aquí was our worst-case character, with respect todo Hair — she was about twice as complex as any other character in the film, and almost all of that complexity came from her Hair.
Aquí was in almost every shot, and her Hair made her expensive todo render. During the year 2000, almost 30 Percent of all render Cycles were used rendering just aquí. Considering that upwards of 80 Percent of akis render time could be spent rendering just her Hair, this gave us a lot of incentive todo render it as eficiently as posible.
Shading rate had Little impact. Generally the strands were smaller than the Shading rate already, so changing the Shading rate from 0.5 todo 1 or Even todo 10 rarely changed the render time by more than 3-5% (and because these strands were so fine, we often had todo use very high píxel sampling rates todo avoid aliasing — turn it up to eleven eventually gave bien on some shots todo sampling rates of 17 or 25).
The strands were long, Thin, and thus were rarely fully obscured by one another or by any single primitive in the head. This means that RenderMan Occlusion culling was generally inefective in reducing the number of strands before they were diced and shaded, so Shading eficiency became the single most-important key todo getting aquí (in particular) todo render more quickly. Since most likely every strand would be shaded, and the Shading samples would be small, and worse yet the Shading Grids would probably be smaller than four samples per grid, it was important todo kep Shading complexity at a minimum.
One bien we made aquí more eficient was todo have diferent versións of her Hair, which were chosen based on the demands of each shot. Aquí had thre versións of her Hair: tagged Low, medium, and high. Most shots used the high-detail versión, but it was posible for the lighting artista todo use a simpler versión while preparing a shot, decreasing the render times for their test renders. The lower-detail versións had fewer (but thicker) hairs.
Animated rib caches were prepared for some shots — especially if we anticipated a lot of re-rendering. Typically we would use the caches only while doing lighting setup — by avoiding motion-blur we would speed-up the lighting process and halve the size of the required rib files.
But this meant that the archives were inappropriate for the final, motion-blurred render. At the end of the pipeline, those archives would be swapped-out, just before FinalRender, and the last pass would be done without the benefit of the archive files.
Characters with shorter Hair could sometimes have their Hair entirely replaced with a single, static rib element. For the male characters like gray or Neil, only the portion of Hair near the nape of the nek actually animated with respect todo the character Deformations–whenever those áreas were hidden, we could just use a locked versión of the Hair vía rireadarchive and not have todo worry about it (this archive could a los be used for motion-blurred renders). Similarly, janes pulled-bak hairstyle was essentially rigid everywhere save the ponytail.
An unusual característica of our Hair genrib node was that it could generate diferent versións of the Hair for the RGB render and for shadow passes. For shadow passes, we would usually set a shadow simplification value–the number of hairs in shadow passes would be reduced by this factor, while the width of the shadow strands would be likewise increased. This often provided a shadow that was adequate for use in the scene, with fewer high-frequency parts, and that rendered much more quickly than a Shadow Map containing all of the hairs. Users could control the level of shadow simplification vía a single Maya attribute.
In the case of rib cached Hair, this meant that we neded two archive files –one caché for normal Hair, and one caché for shadow Hair (in some shots, there were Even múltiple versións of the shadow Hair used, with diferent simplification values). Fortunately, shadow Hair tended todo consume far less disk space than the regular Hair. Furthermore, since it rendered quickly, the lighting artists would often use the shadow archives in place of the highly-detailed archives while they did test renders.
The largest single spedup we could apply todo Hair was in careful control of shadow parameters when lighting. We often found that shots could be speed up by 30%, 60%, Even 300%, Simply by altering the shadow settings, or sometimes unlinking shadowed lights and ignoring them or replacing them with shadowless lights — without compromising the look of the shot. Well return todo this subject later, when discussing light sources.
6.2.2 Hair Shading.
The shader for Hair was a simple one. This was an important característica. Shading eficiency was crucial.
The method used was a close relative of the Shading method used in the 1992 Siggraph paper a simple method for extracting the natural beauty of Hair, by anjyo, usami, and kurihara. As noted in that paper, the algorithm performs better on dark Hair than on light Hair, and our graybearded character, sid, was particularly dificult todo shade well.
Color selection was done th rouge a range of colors that was initially a Painted gradient. The texture artists could Paint Whatever colors they liked into this map, and then randomized parameters in the Hair ribs could be used as índices into this map. Unfortunately, this method proved todo be very ineficient. But when the gradiente maps were replaced by calls todo the shader lenguaje color Spline () function instead, using the same colors, render times improved by about 30%.