Blender Hair - Seems surprisingly good (File added & Updated)

First hair test

2 hour render on a GTX 580 800 samples (4 bounces)

[ATTACH=CONFIG]261648[/ATTACH]

I have been looking for a high quality hair solution, and of course, Blender is high on the list of things to test, try and get my hands on for no other reason than it is free. I am going to put aside rending discussions because it invites flaming, and will only say that I personally, find cycles to have a few missing parts in some critical places.

That being said, Cycles truly seems to be able to render hair with some of the best engines out there.

Consistently, the best hair renders that I have seen have come from 3ds max, hair farm and Vray. Hair farm itself (i think) is around $600.00 and the 3ds max package is around 3 grand last I checked. Vray is another thousand bucks, so that is a near $5,000.00 hair rendering solution right there :eek:

But after playing with Cycles just a little bit, I was able to achieve these results. I was surprised by how long it took to render, but the results seem pretty darn good. Not just “usable” good mind you, but pretty close to some of the best hair solutions that I have seen so far. If i can add just a little more gloss and anisotropy into the follicles (possibly with some compositing tricks) then Cycles hair could really be described as a high end hair solution. Considering how hard it is to achieve certain other things in cycles, I did not expect such excellent and usable hair to be hiding inside of blender.

Hats off to whoever programed this… they did a pretty good job. I also hear that blender 2.69 will have an added hair shader, and hopefully that will be a significant improvement.

Anyway, credit where credit is do.

2 hour on a 580 o.O You’ve got to be doing something wrong in your setup

i agree, 2 hours is way to long for that result…

even on cpu(8 core) it shouldn’t take that long.

800 samples seem excessive.

Please do tell.

It’s a 1920 x 1080 render and bounces set to 4. Follicle segments set to 23 and Cycles hair rendering set to smooth. The actual strand emissions were added manually with a brush so there are 18 individual strands plus children. Path steps are set to 8 in particle mode. It is lite by an HDRI environment. But I presume that the render time is do to the addition of a translucency node included in the shader, because even when the strand settings are set lower I am still getting nearly 2 hours for the render.

If I am missing anything please let me know.

I find that some renders require 1200-2000 samples to be less grainy. The hair looks “ok” at 500 samples, but similarly I think that it needs a bit more than 800 for a final render because it is a tad grainy even at 800. Unless, ofc, there is something I am missing regarding reducing grain without increasing samples. I am always up for some good advice.

Wait!, 800 Samples are you sure? it’s too much 2 hours just for that, can you share your hair settings? because with a GTX 590 at 1024 samples it takes 2 minutes 52 seconds to render the next image:


settings as follows:

1024 Samples, Child Particles set it to interpolated and with 50 number of children particles while rendering, 2500 hair particles, now… I know that a GTX 590 is almost 2 GTX 580’s, but imagine this, add ± 3 minutes more and you’ll get timings like a single GTX 580 and it doesn’t take even 10 minutes to render that image.

Hair is also a case where you would definitely benefit from branched path tracing and turning filter glossy up to 10 or so. You also probably don’t need 4 bounces (1 diffuse - 2 glossy and 2 diffuse - 2/3 glossy are pretty standard for animation in Arnold). There are also a lot of glossy -> diffuse bounces, and vice versa, where the filter glossy will really come in handy.

@ @valcar3d Do you need more than what I gave you in post 4?

@ @m9105826
Arnold also has the AA settings. You set Diff to 1, gloss to 2 and AA to 12. I am not sure about the optimal ray settings though. Does this matter in cycles as well? Or will leaving the rest at default give satisfactory results?

At any rate i’ll give it a try and see what happens.

Edit:

Well, i tried setting diffuse: to 1 (instead of 128) and Glossy to 2 (instead of 128)

Result: at default settings, tile 1 was completed in 39 sec, with your settings (presuming I am not doing this wrong) tile one was completed in 38 seconds. So I saved 1 second. There are 510 path tracing tiles, so that is 510 seconds saved which is not allot. I am not sure what the reduction in quality would be (if any) because I don’t have time to re-render it now. If I am not doing this correctly please let me know.

Arnold and Branched Path Tracing (probably still called Non-Progressive in your version) are almost identical if you have the ‘Square Samples’ option enabled. If you want these options and substantially lower render times, and an actual hair shader, search for the Blender Buildbot and download the applicable build for your setup.

With that in hand, these are the settings I would use:

Sampling: Branched

Square: on

AA: 6

Diffuse: 2

Glossy: 3

Light Paths:

Diffuse: 1 or 2

Glossy: 2 or 3

Caustics: off

Filter glossy: 10.00

Performance Panel:

Tiles: As large as you can make them without a CUDA memory error on GPU, 16x16 on CPU

BVH: Static

Spatial Slits: up to you, on will possibly give a faster render, off will allow multithreaded BVH building

Try with these settings and let me know what your results are.

If you’re still having issues post your .blend and I’ll optimize your times

You know, couldn’t you just use “Progressive path tracing”?

If it fits in memory on the GPU, sure, but 1920x1080 is a relatively large render and hair is memory intensive enough already. Splitting into tiles could save a decent chunk of memory. Unless you’re talking about the pure path tracing kernel, in which case you could, but you’d be wasting time that you could further optimize with the branched kernel.

For GPU the best is 512x512

I still fail to really understand the relationships and how it will influence render time.

That’s not the case for every card or render size

I still fail to really understand the relationships and how it will influence render time.

What don’t you understand? You only put samples where they’re needed so that you’re not wasting time calclulating materials or areas that are already noise-free.

Outcome:

I set everything up like you suggested, except i’ll be honest… i could not find these settings even after a google search. I am running the basic Blender build of 2.68.

Tile size was set to 256 per the suggested size on the blender guru website.

Results:
Tile 1 of 40 took 7m46s and each tile after was pretty close to that mark. I ran it for a little over 20min before I realized that these settings were making my GPU run more than 10 degrees hotter :eek: and I am not comfortable with running my GPU at 85 degrees for more than an hour without a cool down.

I believe this is do to increased memory controller load resulting from the increase in tile size. My normal operating GPU temperatures for Cycles is around 74-78 degrees after 2 hours of rendering at 100% load. I only see 85 degrees when running octane, and Octane can typically conclude renders much faster, and thus I seldom have to run my GPU at that temp for more than 20-30 min at a time. Octane also has a pause & restart render function when rendering scenes where the noise of stubborn caustics just won’t clear up.

Now, I am not a computer guy, I am a CGI guy. But I would image that running a GPU for 2 hours at 75 degrees is better then running it for 1h to 1h30m at 85 degrees. Maybe I am wrong, I don’t know. 580’s run hotter anyway. But lets say I save 30min in 2 hours, or even an hour in 2 hours… by increasing 10 degrees in GPU temp? I am not sure if that is a worthwhile trade off.

But if you, or someone else, could please direct me to where I can find those settings, I will try this again with slightly smaller tile size and see if I can get a compromise between speed, quality and GPU heat. I will also look into Blender Buildbot, because I have never heard of that before.

You won’t see many of those settings without a newer build. Again, if you upload a .blend I’ll gladly optimize your render settings for you to have a look at.

Do you mean the 2.69 test build, or is this 2.68a?

And if so, does that mean that these render times are in fact to be expected in 2.68?

Those still aren’t the times I’d expect to see for 2.68a. But the settings I quoted are ones I set up in my own build, which I build from trunk a couple of times a day.

Doesn’t translucency cause a massive hit to render times? Perhaps turn off translucency and use more/finer hairs to make up for it? Or am I approaching it all wrong?

yeah, I think it’s near useless to offer any explanation as to what’s going on until we are able to have a look at the scene. It could be any number of variable. Maybe even something non render related. You can easily upload the scene to http://www.pasteall.org/blend/

I would love to get to the bottom of this. By the way, I see the title of this thread and I keep thinking, "Yeah, you’re right. Hair in blender is actually very good compared to other solutions. Now if we can just get them to build some kind of method of animating it then we’d be in business. :slight_smile:

Note to any dev reading this: All I want is the ability to use the Mesh deform modifier on hair guides please. Then I could simply animate a mesh like a control cage with bones, shape keys, or even soft bodies.

Thanks.

P.S. how do I make a formal feature request without it just getting lost in the pile of one of those feature request threads?

Yeah,we need a way to have control on the hair guides in animation.
For example,also for fur or feathers you should have a way to at least make them raise on the mesh normal.
Blender hair system needs some way to change the hair shapes from user input AFTER the combing(maybe a deform modifier stack could be great).
Now you can use force fields but they work only for some cases.