Perfect specular reflections

Hi again! šŸ™‚

A path tracer is very simple in theory (and indeed a specialized path tracer producing good looking picturesĀ  can be written in few lines of code), but a powerful general one isĀ  not an easy task. Currently I’m doing heavy researches on the sampling area that is the core of the path tracer since smart sampling will make life easier and pictures look the right way while raw sampling only worsen things.


Fig. 1 – 160 sample per pixel (spp) – render time:Ā  4 min 58 s


Fig. 2 – 550 spp –Ā  17 min


Fig. 3 – tone mapping


Fig. 4 – 160 spp – 3 min 43


Fig. 5 – 550 spp – 11 min 20

I cannot give any dates yet, but as soon as the sampling core is stable enough I implement a few more features and make a public release before the code starts getting heavy.

One of the good things of a Monte Carlo render method is its low coupling with Blender structure, allowing very easy plug-n-play!


Perfect specular reflections

A delayed post

Hi all!:)

After returning from Havana event Informatica 2009 from February, the 9th-13th, I was so busy that I didn’t have the time to speak about the event. I presented over there a report “Volumetricos en Blender” (Volumetrics in Blender) that was a summary about what volumetrics are, and their development in blender since the beginning of the project. However, because previous speakers took more time than allowed I had to speak in a hurry šŸ˜¦ but aside on that I met excellent people, many of them being related to blender:

* The cool guys from UCI doing FreeVIUX project (on theĀ right side of the picture below), they have progressed a lot since our last meeting, they evenĀ haveĀ a 100 pcs renderfarm šŸ™‚


Abel and David and the Big Buck Bunny dvd offered by Grafixsuz (thank again!)

* Junior Frometa, a good fellow who is struggling for making blender the standard tool in a faculty that uses 3dsmax by default, best wishes to them.

* A very smart guy (that like me is working alone) in game development. he also has a blog.


IĀ“m the guy in front of the pc, I’ve changed a little my look since my last picture šŸ™‚

Cheers to all Farsthary

A delayed post

About realistic materials…

Hi all šŸ™‚

I’ve been making some researches and tests in the path tracer and as a result fewer samples per pixel (spp) are required now to achieve a desired level compared with my previous implementation. Of course , for pure path tracers thatĀ“s very dependent on the scene but in general 5 times less samples are required. A scene where 1000 spp were needed before performs now at similar level at 200 spp.

The algorithm handles very well diffuse surfaces, now is the time to tackle reflective and refractive surfaces and it’s where some questions arise :

Many small projects of path tracers around the web are designed to work with a very specific BRDF model, or support only few BRDF implementations, but since the design of the Russian Roulette (if we want to account for those effects because pure statistics diminish small probability states like specular reflections ) should be tailored to certain parameters of a light scatter model, in order to design a general Russian Roulette I need to implement a physically based material with all the parameters needed for BxDF functions.

also I need good formulas for implementing tonemappers because path tracer images fall outside the (0,1) range.

Tonemapped image with exrtools
Tonemapped image with exrtools
Direct renderer image 480 spp Time 5 min 49s
Direct renderer image 480 spp Time 5 min 49s

the show must go on šŸ™‚

About realistic materials…

Rectangular Datasets and Still Frame features

New proposal to commit for Sim_physics

Hi all! šŸ™‚

Currently the handling of voxeldata is implemented without any kind of header for the sake of simplicity and because it was implemented as a test framework of future implementation in that direction (since datasets are one of the most powerful features of a volumetric engine). But voxeldata have started to being used for some serious scientific projects to import datasets into Blender, allowing it to easily fit into more scientific pipelines than before,Ā  that Ģs why at least a basic header should be implemented, that will allow:

– Ā­Automatic resolution detection: Ā  The user no longer needs to manually set up the resolution of the dataset, a very dangerous procedure.

– Ā­Rectangular datasets: Previously only regular datasets (NxNxN sizes) were supported; now are possible any
combinations of NxMxK sizes

– Another important feature is the possibility to render only a single frame of the dataset during a whole animation, that Ģs why I added the “Still” feature.

In the future more improvements could and should be done in that area as Blender starts to being used in scientific pipelines due to its huge flexibility.Ā  The changes to the current implementation are minimal but greatly improve the usability of the voxeldata feature.

The basic header implemented is:

typedef struct Header_vb //Header could be extended here easily
int resolX,resolY,resolZ;
int frames;
} Header_vb;


The changes to the already implemented tools that make use of voxeldata are also minimal, they only need to store the header at the beginning and to take into account the size of itĀ  (offset) to properly index the dataset, and nothing more!

I have reimplemented also the basic simulator to store the header (will not be compatible with previous builds).Ā Ā So, now the basic structure of a Blender compatible Dataset is


the Data format is a Linear array of floats, where each element is adressed as before by
the formula:


the UI looks like this:


Fig. 1 – Automatic resolutionĀ  detection


Fig. 2 – Still frame selected

For those impatient to wait inclusion into the sim_physics branch, here is the “semi-manual” patch (done against Sim_physics rev18682)

Rectangular Datasets and Still Frame features

Progress bars

Hi all šŸ™‚

In order that viewers do not get lost, and following Dennis’ advices (thank for the idea! šŸ™‚ ), qualitative progress bars have been added. Aside from a lack of documentation, the volumetric renderer seems to be mature enough for an inclusion in an official blender release (stability, rational UI, flexibility..caution: theseĀ are not Ton’s words, only strong assumptions based on objective facts!). Please notice thatĀ these barsĀ only deal with blender, so even if there’s already a Navier-Stokes simulator for realisticĀ Smoke/fire, it’sĀ nonetheless in the TODO state (Daniel?) because it’s not integrated inside blender. For volumetric optimizations, adaptativeĀ step size still hasĀ to be implemented (in progress because first builds had this feature so the code is available, but the new, more robust renderer is implemented in a way which causesĀ itsĀ addition less straightforward)Ā . For external shadows, the proposal has been postponed in order toĀ design (=Ā in agreement with Broken/Ton)Ā a more general system, which can deal with buffered shadowsĀ instead of raytraced ones only. Photon Mapping is a joint project with Matt Ebb, so work will be resumed as soon as he will have a stable core to share with, avoiding thus rewrites. In the meantime, writing an unbiased renderer allows better understanding of the fundamental algorithms (see last posts for more reasons) and also will allow to have a tool for calibration inside blender.

As previously said, do not fear dilution of the work because we have to wait for the volumetric inclusion in a next blender version before doing more radical changes caused by optimization/better integrations. (see last posts). In the mean time, keep learning the existing features (cf. download the manual) whose interface won’t change for an official releaseĀ and do VFX experiments by using the particle system.

p.s: remember, volumetrics uses the raytracer which is cpu-intensive, so if you use it in a scene, DO use layer rendering: render only the smoke/clouds with ray activated, then the rest of the scene without it, then composite all the layers through blender powerful nodal system. For shadows from the volumetrics, you can fake it through dummy objects whose shape/alpha cast shadows similar to the volumetrics ones…

Hope this will help and have fun! šŸ™‚

Progress bars

Path tracer advances

As announced in the mailing list before leaving to the Havana event Informatica 2009 I have rewritten the Path Tracer code according to a modular black box BxDF design (BRDF,BTDF,BSDF… could be easily handled once implemented)
Since my return I have retaken its development and have improved convergence, now with less samples per pixel images exhibit less noise than before.
I have implemented for now only one BRDF model: the Blinn-Phong modified model and have made some tests with it.Ā  Currently not big deal but the longest journey begins with a single step.
I’m glad that the image quality is at the same level as the first versions of many path tracers floating in the web so im not so lost šŸ™‚

Later I plan to implement the perfect mirror model and the refractor, one thing I have realized from the implementation is that one single mode to achieve all the possible effects is not possible or even desired,because every rendering algorithm have pathological scenes where it will fail so there should be there other models to workaround this. ThatĀ“s the typical case of the perfect mirror: since the BRDF of it is a Dirac function, the probability of a light ray to be reflected according to that directions tend to zero and path tracers hang up (= if the raytracer shoots the rays randomly around a point (=spherical distribution), only those who are shot in the reflexion direction (one point on the spherical distribution) will converge, which is a very low probability (because only one successful point on all a sphere) )

Of course , thereĀ“s a lot of optimizations to be done, currently thereĀ“re no importance sampling, startified sampling and many more stuffs that could make the life of path tracer better, currently is the raw pathtracer in action!


Fig. 1 – 200 samples per pixel (spp) – rendering time: 3 min


Fig. 2


Fig. 3 – 1000 spp with reflexions – 30 min


Fig. 4 – 1000 spp with reflexions – 43 min


Fig. 5 – 2000 spp – 33 min


Fig. 6 – 1000 spp – 31 min


Fig. 7 – 3200 spp – 34 min


Fig. 8 – 1000 spp – 10 min

Path tracer advances

Support issues

Hi, this is a friend of Farsthary,

Due to troubles, you can not donate through paypal anymore. In the meantime, if you want to show gratitude, please support the blender foundation and improve your knowledge by buying quality learning material in the blender shop.

Moreover, the foundation may support Farsthary in the future, so please send an additional email to the eshop so that they know you support them thank to Farsthary. For people interested by animation, I also advise this really helpful book.


Support issues