[Bf-cycles] Tiled Texture Caching for Cycles

Stefan Werner stewreo at gmail.com
Fri Jun 9 20:29:43 CEST 2017

Here’s a little update on my progress.

I believe I have it working reasonably now. I tried some of the Agent 327 scenes and was able to render them with a 500MB texture cache at only a minimal speed penalty. "03_01_B - Enter” rendered on my machine without caching in 2h2m47s, with caching it clocked in at 2h2m50s. With the Gooseberry benchmark scene I get something more around 5%-10% render time increase.

For the interested, here’s what happened to a few things I wrote about earlier:

> On 7. May 2017, at 11:05, Stefan Werner <stewreo at gmail.com> wrote:
> I was playing with the subtree cloning approach, and that may be a way
> to get the basics working (at the expense of a larger shader tree). Maybe
> then I can continue with introducing optimised shortcuts for common
> use cases, such as direct use of UV maps, box/sphere mapping, etc.

That one still holds up. Cloning subtrees works, and it was a fairly low-impact way of getting texture differentials. It was easy to implement that based on the work that’s already there for bump mapping.

> High frequency bumps on sharp speculars are indeed one of the worst
> case scenarios for texture (or geometry) caching. Disco balls are evil. :)

That is one benchmark I need to run still - a worst case scenario built on purpose. I wonder how slow things will get in bad situations.

(about texture differentials for light samples:)
> I was looking at that, and this looks like shouldn’t be too hard. In addition
> to evaluating the BSDF, we’d also need to get domega_in_dx/dy from the
> BSDFs, maybe through a separate call. For the branched path tracing
> case, we would then need to pick the result from the BSDF with the
> narrowest footprint.

It actually works reasonably well without asking the BSDF. I just plugged in the code for perfect specular reflections and that appears to be good enough for basic cases. I could however try much wider differentials here, since MIS will assign very low weights to specular BSDF + light sampling and any artefacts from picking too high of a mip map level should be barely noticeable.

Currently my branch is off master, but I guess I should rebase to 2.80 as there’s no realistic chance of this being added to 2.79, or am I wrong?

=== In other news ===
I am also in the middle of adding embree as an alternative to Cycles’ own BVH (CPU only of course). With that I am seeing speedups of varying magnitude, depending on the scene. In simpler scenes it’s just a percent or two, the Gooseberry benchmark already drops from 1h23 to 1h04 on my machine, and certain frames from Agent 327 with plenty of motion blur and hair drop from 2 hours (already with Cycles’ time step BVH) to ~12 minutes. There are a few little kinks to work out still, as I’m getting self-shadowing with embree hair that I don’t get with Cycles hair.


More information about the Bf-cycles mailing list