My Cycles-Modifications (WIP)

WORK IN PROGRESS

I have some ideas for Cycles:

  1. Pixel based (instead picture based) sample weighting ->
<b>done</b>

Here is no visual things to see - only many code changes

  1. My own concept Noise Priority Rendering (NPR) ->
<b>done</b>

In theory it should eliminate noisy areas much faster
It just render non stable pixels (auto detected in learning process) with much more samples!!!

  1. Render specified shader / material / object (first path from camera) with more samples than others
    So you can render glass-shader with more samples than any other shader ->
<b>done</b>
  1. Stop rendering of specified material / object (first path from camera) after defined number of samples ->
<b>done</b>
  1. Stop rendering at defined noise level (npp = noise per pixel) - canceled

Sweet! Patch ready?

I will publish modifications when all things are finished
But i will post some test-images or test-builds (win32 only)
I also can not test GPU-code

Well count me as one of those who will be eagerly waiting for your first test results.

When you look at all of the other features currently being developed for Cycles (storm_st’s bidirectional sampling and volume rendering, Brecht’s render pass support, and the environmental importance sampling from Mike Farny), it is possible that we could eventually see a revolution in Open Source Rendering.

Any chance we could get a donate pool going to help you get a nvidia card?

If you publish a build you have to release the code changes as well! :slight_smile:

Sounds great TS1234. :wink: I could make builds for Linux. :stuck_out_tongue:

If you publish a build you have to release the code changes as well!
Nur Geduld :slight_smile:

i will pubish it - but a bit later after some testing

Ah, du bist Deutsch…cool…
there sees to be quite a few German users…and more every day…
so how far are you along in your code, I am just curious…?

so how far are you along in your code, I am just curious…?

only first step (critical) is done for rendering (F12) - i changed or added 100 lines of code
interactive rendering need few modifications

all other stuff is a bit easier
in my opinion - all stuff is doable

Those ideas sound really cool, I am also eagerly awaiting your test results now :slight_smile:

If you do good then who knows, you might get hired to help Brecht work on Cycles :smiley:

Sounds great TS1234. :wink: I could make builds for Linux. :stuck_out_tongue:

You beat me to it…
:stuck_out_tongue:

Yes! Here is first successful debug output (

noisemap

)!
100 samples

black = no noise (stable)
white = high noise (non-stable)

background is very stable
shadows are not so stable
diffuse is not so stable (cube)
glossy is very non-stable (monkey)

note that shadows on cube are much more non-stable than cube
note that glossy looks stable in image, but very non-stable in noise map (this is because here is nothing to reflect - otherwise you would see it)

Noisemap


Rendered Image


While it seems like you’re doing a good job so far, I do wonder.

Does the noise-analysis run on every pass or just every N-passes, because if it’s on every pass, you might be able to reduce overhead by allowing the user to have the analysis run only after every 100 passes or so.

Does the noise-analysis run on every pass or just every N-passes, because if it’s on every pass, you might be able to reduce overhead by allowing the user to have the analysis run only after every 100 passes or so
it run every pass - but it is not very time-consuming

new test image:

glossy is now without roughness (=mirror) - it is stable
other 3 monkeys with glass-shader
and soft shadows
look the difference


Whohohooo, this seems to be a VERY interesting “development”. I’ll keep my eye on this thread from now on.

@TS, prepare for this thread to be very active as you continue with this project ;).

With you, @storm_st, Cycles is going to have a huge speed boost in the next months!

Thanks to all of you for your hard work!

new noisemap image with very good results

original:
http://www.blender.org/typo3temp/pics/2fc1cb207f.png


i see in my first images above a small problem with “flickering” lights and shadows
this generate higher noise values than in reality visible
here is no direct way to fix this in cycles

workaround:
every 16 samples/pixel are stored a temporary imagemap and then compared with final image

I went to bed thinking on your approach and wondering how it would behave in complex scenarios (more complex geometry than suzanne on a plane, lighting, materials, DOF, Motion Blur…)… With that last image you just answered my question. It holds up perfectly!

I’m excited.

I just figured that having it run only once every 100 passes or so will help to prevent cases where an undersampled area would be considered stable simply because it’s an area where the samples are slow to gather. Like areas where caustics would form, but you would see very few samples at first simply due to it being a difficult situation for the pathtracer.

This could also be seen as a reason to have the noise-priority system being tile-based when that is implemented, as sometimes you would probably get better results if the system waited for an entire tile to be noise-free rather than individual pixels. The reasoning for this would be roughly the same as the reason above in which you could have a caustic region which will never converge because the system thinks it doesn’t need more sampling (when in fact the area would just be slow to receive samples until the actively sampled regions start getting smaller and fewer)