3Delight/Blender 0.6.2

August 9th, 2011 . 42 comments

Everyone else releases software at siggraph, so why not join in the fun. In ever-diminishing free time, I’ve made some small updates to 3Delight/blender.

There’s a few bug fixes since the last version (thanks Janne Heikkinen for reporting) and using some new features in Blender 2.58’s python API (thanks Campbell Barton), it’s now been possible to improve the shader UI significantly, removing the necessity to click ‘Initialise Shader Parameters’ each time, and now dynamically presenting all shaders in your shader path in a list to select from. Scanning the shaders is done in a background thread and cached – it’s only regenerated when a folder in the shader path is modified, and no more frequently than every 2 seconds.

Download the new addon here: render_3delight_0.6.2.zip

3Delight/Blender 0.6

July 5th, 2011 . 7 comments

After continuous small incremental improvements, it’s time to release a new version of the 3Delight/Blender render engine exporter. This version now requires blender 2.58 and adds a few new features, continuing to round out support for getting geometry data out of Blender. The main additions include:

  • Exporting geometry to RIB archives, either manually (File → Export → RIB Archive) or at render time, automatically. Animated RIB archive file sequences can be exported to disk too, and rendered appropriately.
  • Rendering blender objects as procedural geometry (Object Properties → Renderman Geometry panel). There’s basic support for DynamicLoad DSOs, RunProgram procedurals, Archives and DelayedReadArchives.
  • Instancing blender objects on particles – full deformation and transformation motion blur is supported
  • Exporting primitive variables from custom mesh data (such as vertex groups, vertex colors, and uv sets), with some convenient options for default UV sets and colors. Particles can also have primitive variables too, exporting per-point data such as particle age, velocity, lifetime, etc.
  • Exporting blender fluid with motion blur
  • Exporting blender curve objects as either renderman curve primitives (no animation supported yet due to limitations in the blender API), or as tessellated polygon mesh or subdivision mesh objects (animation supported).

Download the new addon here: render_3delight_0.6.0.zip

As always, feedback and questions are welcome in the comments here.

3Delight/Blender 0.5.4

May 5th, 2011 . 14 comments

I’ve now updated the 3Delight/Blender exporter to be compatible with Blender 2.57. Hopefully now there’s a ‘stable’ release, the Python API will fluctuate less and I can spend whatever spare time I have on developing this further, rather than fixing it to make it work! :)

The bpy API has changed recently to be stricter about where and when it will allow modifying scene data. This has had the effect of preventing some things happening as automatically as I would like, and I’ve had to make some things a bit more manual. Now, before using shaders for the first time, you need to click a button ‘Initialise Shader Parameters’ will will read the data from the shader file on disk and generate the UI inside Blender for it. This only needs to be done once on blender startup, and once when you use a new shader. It will automatically initialise all shaders correctly at render time, so it should still work rendering from the command line. I’d like this to happen all automatically behind the scenes but until there are new features added to Blender to support this, it’ll have to do.

As well as fixes, there are couple of new features. It now supports motion blurred dynamic hair (strands), deep shadow maps, and motion blurred shadows/ray tracing via the samplemotion attribute. The last two were contributed by Magnus Loefgren – thanks!

Get the new package here: render_3delight_0.5.4b.zip

edit 10/05/2011: Released a 0.5.4b version, with path handling fixes for Windows – download above

vop pathtracer bsdfs

April 15th, 2011 . 7 comments

Added some different bsdfs to my fun little houdini vopsop pathtracer, trying to see how far I can push things. Now supports perfect specular mirror and fresnel dielectrics – more info on the vimeo page.

Pathtracer vopsop

March 25th, 2011 . 2 comments

So I ended up taking my previous silly Houdini VOPs experiment another step further, and upgraded it to a pathtracer supporting indirect diffuse illumination. More info and hip file are at the vimeo page.

Raytracer vopsop

March 6th, 2011 . 4 comments

Fooling around in Houdini with the intersect VOP today, made a little raytracer inside SOPs. I’m sure its not the first time somebody’s done this, but it was a bit of fun while passing time.

It’s tracing rays from each grid point, doing (soft) shadowed diffuse lighting from a point light, with an optional specular reflection layer with fake fresnel blending.

3Delight/Blender 0.5.2

March 3rd, 2011 . 21 comments

I’ve been very short on time lately and haven’t had much of a chance to look into fixing the 3Delight/Blender addon to work with recent Blender Python API changes. Jeff Doyle (nfz) however, has generously gone through the code and updated it to work with a current Blender SVN version (as of today, r35311). I haven’t been able to spend a huge amount of time testing it, but on a brief inspection it seems to be working well.

Since you’ve been waiting for a new working version, I’ll release Jeff’s changes now, and hopefully spend a bit more time soon with some other fixes.

Get the new package here: render_3delight_0.5.2.zip

Recent 3Delight exporter errors

February 22nd, 2011 . 6 comments

Hi, many people have been having trouble getting the 3Delight exporter to work in some Blender versions recently – unfortunately it’s a case of bad timing. There have been several changes lately in Blender’s Python API, each of which have broken existing scripts. I released the addon soon after one of these changes, (happened around rev. 34500 or so?), and that was fine for about a week, but then there were more API changes in Blender around rev. 34850 which have broken the addon again. I’ve just been away having a week off, so I haven’t had time to investigate what’s needed to update the addon to work again with current SVN builds.

So, until I can find the time to fix it, this addon is only working in a small range of SVN revisions,between about rev. 34500 – 34850.

* If your error looks like this: unable to get srna from class ‘atmosphereShaders’ then your build of blender is too new

* If your error looks like this: AttributeError: ‘mathutils.Matrix’ object has no attribute ‘to_translation’then your build of blender is too old.

If anyone would like to help updating the script, that would be very much appreciated, otherwise you’ll just have to bear with me for a little while until I can fix what’s been broken. Thanks!

PS: I’ve disabled comments on the main 3Delight/Blender page – it was getting a bit messy and difficult to track which comment belongs to which version. I’ve moved all the existing comments to the posts for the different exporter version releases, so if you have questions or comments for any of those releases, please post them in there.

3Delight/Blender 0.5.1

February 9th, 2011 . 43 comments

I’ve posted an update to the 3Delight/Blender exporter, hopefully fixing some problems that people have run into after trying the first released version. I’d only been developing this on my own system, so I guess it’s expected that for people on different platforms, with different configurations, it may not behave the same way that I assume it will! Thanks to everyone for the feedback letting me know about this.

I’ve fixed two main issues, one was with the way it interpreted and exported file paths on Windows. Many thanks to @vitos1k for spending several hours helping to debug this with me. Another issue is that on Mac OS X, the 3Delight installation only sets up the environment variables it needs, for use in the Terminal. This meant that launching Blender from an icon in the dock wouldn’t detect the correct 3Delight paths.

To fix this, there are two additional options – one method allows you to define the path to the 3Delight installation folder from within Blender (Render Properties -> Search Paths panel -> 3Delight Path), or alternatively you can force it to always use a specified folder by specifying the 3delight_env.txt file in the addon folder. However if you have environment variables properly set up, they will still take precedence. This is explained in more detail in the installation.txt file inside the addon package.

You can download the new package here: render_3delight_0.5.1.zip

3Delight/Blender 0.5

February 7th, 2011 . 72 comments

I’ve released a first version of the external render engine exporter I’ve been working on, connecting Blender to 3Delight. It’s still not as complete as I’d like it to be, but I might be quite busy soon, so might as well get the code out there. It’s been several months now slowly massaging it into place, including some practical projects done with it in the meantime. Over the next few days I hope to continue putting up some videos explaining how it currently works. There’s still plenty more things that I’d like to implement and improve, but will probably just take a bit of time.

If you’e going to be testing or using this, I’d recommend familiarising yourself with renderman and the reyes pipeline, to understand more about what’s going on. I’d like to hear feedback and bugs, though I may not have a lot of time to work on them or provide support.

More info and download on its page here: http://mke3.net/3delightblender/

3delight/blender geometry

February 7th, 2011 . 0 comments

3delight/blender overview

February 7th, 2011 . 0 comments

Ocean Simulation

January 19th, 2011 . 6 comments

I’ve been doing some work lately on ocean simulation tools for Blender. It’s based on Drew Whitehouse’s open source Houdini Ocean Toolkit, and on a previous patch that was made for blender. A few years ago at ProMotion when we were working on a short film ‘Lighthouse’, we hired Hamed Zaghaghi to make a patch for blender 2.4x, converting the HOT code from C++ to C, and using it to drive a texture in blender, which could provide displacement and foam outputs. In the state we left it in, it was a big improvement over previously available methods such as animated noise, though it was a bit rough around the edges, and since then the code was mostly neglected due to lack of time and interest.

I was asked by Todd McIntosh of Resonance Media if I was interested in restoring what could be salvaged of the old code and re-integrating it as a new patch for Blender 2.5, as a freelance coding project. Todd was able to get a good deal of additional crowd-funding, which really enabled me to spend the required amount of time on this. I was able to reuse some of the old patch ( mostly the C conversion of the main engine) however there was a lot of extra work and re-work that needed to be done. A fair bit of time was spent on making the simulation/evaluation thread-safe, since Blender 2.5 is much more multithreaded than previously, and just dropping in the old code was very unstable. Now the simulator sits as a separate ‘library’ inside blender that can be accessed from other parts of the software, and from a user perspective, there is now a new Ocean modifier, that can either generate an ocean mesh from scratch, or displace an existing mesh. The modifier adds correct UVs and if required, vertex colours to represent foam, for visualisation in the 3d view. I’ve also brought in multithreading to the main simulation engine, using OpenMP after seeing some example code here. I’ve written up some documentation online in the blender wiki.

Among the new features there’s also functionality to bake the simulation results (displacement/normal/foam data) out to a sequence of OpenEXR files. One of the reasons for this is to allow integration with external renderers. The sequence above was rendered in 3Delight with my blender->3Delight render exporter, using such baked files, with custom shaders (more info on the vimeo page). I’m currently just finishing off some final tweaks and bug fixes, and hopefully the tools should be released freely quite soon.

procedural jewellery

December 23rd, 2010 . 1 comment

It was K’s birthday recently, and this year I wanted to do something a bit different for a present. I’ve been getting more familiar with Houdini lately, and thought it would be a good exercise to use it to design a ring, to be rapid prototyped and cast in sterling silver. I was aiming for something geometric with a hint of art deco (which she likes), and I also involved random elements in the production, so the end product would be something quite unique.

Houdini was great for this, I tried to keep it as procedural as possible, giving lots of room for experimentation. The final model was brought into Blender for some more detailing, and export to STL. The printers (rapidprototype.com.au) did a great job, the cast ended up looking great with very well resolved detail in what is a very small piece. I made a little video below showing some of the sop network in Houdini.

Medical voxel data in blender 2.5

November 19th, 2010 . 4 comments

From time to time I get emails asking about voxel data/volume rendering capabilities in Blender for medical scan data (see this previous post). Today I got one asking for a simple example for using it in 2.5, so I thought I’d re-post it here. It’s using a 512 x 512 x 233 scan of a plastic skull, and the demo file is just loading it up as a density source in a simple scene with ground plane and light. To set it up from scratch, you should be able to follow the same instructions as any tutorial for rendering smoke or other volumes in blender, but change the density source.

Download the demo .blend file here.

Some extra notes:

  • The main thing to remember is that volume rendering in blender is not really intended for solids, or even medical usage at all – it’s really just a nice side effect. The volume shader in blender is intended for gas/particles like clouds or smoke. Having said that, if you crank the density of the volume right up, you can approach something more solid looking. The above example is using a Density Scale of 50.
  • This plastic skull example was quite easy because I didn’t have to isolate any kind of extra tissue etc. To do that normally you’d have to use the ramp option in the Texture’s Color panel. Here’s an example of a scan of my own head, using the ramp to isolate out the skull (right) from all the flesh (left).
  • You may notice on a dense volume like this, the shading looks a bit blocky – this is due to the Light Cache, which speeds up rendering a lot, without too much visual quality loss on most cloud/smoke kinds of volumes. The artifacts do show a bit more clearly with very dense volumes though. You can remedy this by either increasing the Light Cache resolution (using more memory) or turning it off completely (using more CPU).

Blender sensor sizes

October 28th, 2010 . 22 comments

Today I finally got around to fixing Blender’s weird camera to more closely resemble real-world counterparts. Previously Blender’s camera was hardcoded to use a sensor aperture width of 32mm, which doesn’t reflect any commonly available real-world camera sensor/film size. In turn, this meant the focal length (mm) for the lens didn’t resemble any real-world lenses whatsoever. It was pretty misleading when trying to intuitively choose lenses based on photographic experience, and also makes it a lot harder to match live-action footage.

I’ve made a patch to allow specifying a sensor size, along with a handful of common presets – easy to add some more. This first version isn’t 100% correct in that it doesn’t modify the FOV due to focus (in reality, the extension of the lens elements due to focusing slightly alters the FOV), but this can be added pretty easily as an option later. It’s also deriving the apparent FOV purely based on the horizontal aperture width, options for vertical/diagonal may be possible to add later, but would need to check how the renderer works with varying frame resolution aspect ratios.

I thought it would be fun to do some real-world tests, so I quickly set up a very rough set in my backyard to see if a virtual set in Blender would match up. The setup and measurements were very very dodgy and I didn’t expect it to match perfectly. I shot with two cameras – first a 5D Mk II with a 12-24mm on 24mm and a 24-70mm on 70mm. To compound the un-scientific sketchiness of the test even further I tried again with my 6×6 Mamiya C330f TLR with 65mm and 80mm lenses, using a compact digital camera shooting the ground glass focusing screen (yes, too cheap to spend film on this). Given all this, I was pretty surprised to see that with a bit of tweaking it looks like it’s doing the right thing.

Anyway, the patch is up on the blender patch tracker, would be good to get some testing first before trying to commit, especially since I’m not sure how it should interact with the game engine either.