Last month I was working on a lot of new test scenes for my Rust implementation of the PBRT renderer. But a big chunk of my time went into implementing the curve shape needed for the geometry of hair, and a material, which implements a hair scattering model.
> rg Film -A 1 straight-hair.pbrt 6:Film "image" 7- "integer xresolution" [ 1024 ] "integer yresolution" [ 1024 ] curly-hair.pbrt 5:Film "image" 6- "integer xresolution" [ 1024 ] "integer yresolution" [ 1024 ] > rg hdr straight-hair.pbrt 1100028: LightSource "infinite" "string mapname" [ "textures/Skydome.hdr" ] curly-hair.pbrt 3291601: LightSource "infinite" "string mapname" [ "textures/Skydome.hdr" ]
rg program used above is called ripgrep and is a
line-oriented search tool that recursively searches your current
directory for a regex pattern while respecting your gitignore rules.
The straight hair version used only 512 pixel samples.
> tar tfvz hair_pbrt.tar.gz drwxrwxrwx jan/users 0 2018-02-02 12:25 hair/ -rw-r--r-- jan/users 237072788 2018-01-31 11:27 hair/straight-hair.pbrt drwxrwxrwx jan/users 0 2018-01-31 11:27 hair/textures/ -rw-r--r-- jan/users 790841 2018-01-31 11:20 hair/textures/Skydome.exr -rw-r--r-- jan/users 113311 2018-01-31 11:27 hair/textures/Skydome.hdr -rw-r--r-- jan/users 710196608 2018-01-31 19:55 hair/curly-hair.pbrt
So, what did I modify (and why)?
HDR instead of Portable FloatMap (PFM)
The current version of rs_pbrt does not support PFM files. You can compile with OpenEXR support using the openexr crate, but that might be tricky on some platforms, so I also support HDR via the image crate.
No include lines in PBRT
This is probably easy to fix in one of the future versions of rs_pbrt, but right now it was not on my agenda, so I simply replaced lines like this:
> rg Include straight-hair.pbrt 20: Include "models/straight-hair.pbrt" curly-hair.pbrt 15: Include "models/curly-hair.pbrt" sphere-hairblock.pbrt 19: Include "models/block.pbrt"
By just cutting & pasting the lines from mentioned files to replace the include lines. But I created an issue for this, so it get fixed in a future version.
Other Test Scenes
The White Room (above) comes from Benedikt Bitterli’s Rendering Resources and I rendered only a noisy version with rs_pbrt, which can be found here. The image above was rendered by Mitsuba. This is a good scene to render again, once I have implemented bi-directional path-tracing.