Category Archives: pbrt

Blender PBRT exporter test scene.

I got contacted on twitter by @Cao_Jiayin on twitter today, and he asked about a scene that I had posted previously, specifically the ‘glass monkey’ scene.

I have now re-created that scene, and exported it, zipped it, uploaded it so that you can render it out if you want to test a bit. You have to adjust ‘”integer pixelsamples” [32]’ to something much higher if you want a clean render. I rendered it over night, I set it to low by default now
so that you can quickly get a look on how the render will look.

The ply mesh is pretty dense, that’s to prevent any artifacts in the smooth surface. You can download the zip from from here:

https://stigatle.no/owncloud/index.php/s/ynMVxiLrBRQeFQX

Status and info on my PBRT exporter for blender.

I want to write a bit about my first blender development project, if you follow me on twitter then you probaly already know its a renderer exporter for PBRT render engine.

The reason why I wrote it as an exporter is because it was the easiest way to get started. The project started when I decided to stop using 3dsmax and go to blender full-time, so I needed to learn everything I needed about blenders C/Python API while making this.
It has not been as hard as I feared, 16 years of 3dsmax daily + many years of maxscript and 3dsmax c++ SDK experience helped a lot.

I’ve spent a lot of years on the luxrender project working on the 3dsmax plugin, but after I stopped using 3dsmax it did not make sense to me to continue working on that, also the integration of luxrender in blender had already been done, so I took a look at my PBRT book and decided that I wanted to spend time with that, also later on I want to dive deeper into render engine development, so it makes perfect sense to me to use pbrt as boilerplate. But first it deserves a proper exporter, which is what I’m developing right now.

The way the exporter works right now is that it exports the scene to the format that pbrt can read, and you render the resulting scene with pbrts command-line client.

Currently the shader GUI are written in C, the reason is simply that I was not able to make it work the way I wanted in python. The downside of this is that I cannot release it in its current state as an add-on, I need to fork blender instead. So right now I’m at a crossroad, rewrite the c parts in python to make it an add-on, or do full c implementation and have it as a fork, then later do a full implementation like any other internal renderer in c, like cycles for example, that would also mean render properly from inside blender and not externally like I do now.

I’m leaning towards doing a full c implementation, but I also see the benefit of making it with python as an add-on, so Ill think a bit more about it before I make my final decision.

So, here’s a list of what I have already implemented:

*Custom shader guis with all their settings.
* Mesh export
* Camera export, with DOF setting.
* Texture map export.

Currently I have no light support except a hard-coded hdri light source, the plan is to add all lights including environment map support next.

I will openly admit that I wanted to sell the add-on, but I decided against it, the reason why I decided not to was because the market for such a thing is very small, so there’s no reason to earn maybe 100 dollars and go trough all the hassle of selling it, id rather make it open source and free for anyone to enjoy, and maybe inspire others the same way I did when I worked on the luxrender plugin.

I also earn enough at my regular job, so I have no reason to do this for money, its my passion and I love to code and help others in my free time, so it makes perfect sense to me to do this.

So, now you might wonder when the source will be released – I will do that shortly, just some more features to add (lights, render settings panel), and Ill decide if Ill rewrite the C code in python first.

Time to show some test renders, you might have seen these before on twitter, but I figured it would be nice to collect them here in this blog post.
And as you will see – some of these are grainy, I simply did not render them long enough
PBRT is CPU only, so rendering takes a lot of time.

Switching to blender on all personal projects.

So, in December (2017) I decided to leave 3dsmax and switch to blender full time for all personal work. I’ve been using 3dsmax for half my life, and still use it at work (our whole workflow there is based around autodesk software), byt at home it enabled me to completely ditch window – which has been a goal of mine for a long time, it was only 3dsmax holding me back.

Blender has been on my radar for a long time, but I never found the proper motivation to learn it – since I was quicker in 3dsmax anyways. But now I have taken the time to really learn it, and the more I use it the more I like it. I’ve spent a lot of time learning the hotkeys, I use the default blender hotkeys, and that was the key for me to really learn it. Now after just a few personal projects I’m as fast as that as 3dsmax.

My next step is to focus a lot on plugin \ addon development for blender, this is where I struggle the most right now, I’m very good with the 3dsmax SDK, but not with blender’s API yet. I do however develop a exporter in python for a external render engine, and by doing that I learn what I need.

There are many advantages for using blender, but for me the biggest reasons are the following:

  • Fast development.
  • Open source \ free.
  • Cross platform.
  • Very easy to compile from source.
  • PBR workflow in viewport (EEVEE).
  • Great documentation \ online resources.
  • Great community – all about sharing.
  • Open roadmap and planning.

There are many reasons to leave 3dsmax behind, and for me it’s these things:

  • No more free home license when we have 3dsmax at work.
  • Subscription only (200 usd a month).
  • Removed Mentalray , and nvidia stops development of mentalray.
  • Added Arnold, which cannot even do texture baking.
  • Iray cannot do texture baking either.
  • Slow development and a focus that’s not clear.
  • Not cross-platform (the only one that’s windows only..).
  • Closed source.
  • Do not care about the ‘small’ users.

There is one downside as well, and that was stopping the development of LuxMax, that was the hardest project to put away and stop working on. It’s been my pet project for many years, and I’m very proud of it, but I decided to stop working on it since I do not use 3dsmax anymore and want to focus on blender.

My render exporter \ integration project

The current renderer I’m writing a exporter for
(and later a proper integration) into blender is Pbrt.

The reason why I chose this renderer is because I have the book and I really like the renderer, and having a proper exporter \ integration of this renderer in blender is something a lot of people might find useful, especially if they have the book and want to really test the renderer.

And as you might know – many of the render engines on the market today started as Pbrt source code.

As you can see on my site I used to work with 3dsmax, but I’ve always had my eye on Blender,
and recent events with 3dsmax\Autodesk made me switch over full time to Blender.
I have been developing Luxmax (3dsmax integration of LuxRender for 3dsmax) for many years, but now I feel
that blender is where the future is, it is the best open source 3d application that exists today, and it will continue to be that,
so investing time into it is not something I’ll regret in any way.
And the best part of ditching 3dsmax is that you can get rid of windows at the same time, I now exclusively use Debian.

One other important reason why I do this is that I want to get more into the render engines as well, I want to be able to add to it, implement new things, learn new stuff, and that’s why I choose pbrt , the book really completes it.

Luxrender already has a great plugin for blender, and later I will most likely join the development on that,
but for now (since I’m busy with work and family life) I need a project I can do in my own tempo, and I need to learn all the nuts and bolts in blender.
Switching from 16 years of 3dsmax to Blender was surprisingly easy, and developing for it is not hard either, I’m used to maxscript\c++ so I feel
right at home with Python and c\c++ in Blender.

I have not decided yet if this will be a open source script, fully free, or if  you should be able to buy it instead (or maybe try the ‘patreon‘ thing).
I will decide on that in a bit once it’s more feature complete, currently it’s in its infancy.

For now I have a simple test render with a basic shader: