Skip to content

appleseed 2.1.0-beta

Choose a tag to compare
@dictoon dictoon released this 03 Sep 08:14
· 284 commits to master since this release

These are the release notes for appleseed 2.1.0-beta.

These notes are part of a larger release, check out the main announcement for details.

This release of appleseed has a DOI:


This release is the result of more than ten months of work by the incredibly talented and dedicated appleseed development team.

Many thanks to our code contributors for this release, in alphabetical order:

  • Stephen Agyemang
  • Luis Barrancos
  • Sagnik Basu
  • François Beaune
  • Mandeep Bhutani
  • Lovro Bosnar
  • Rafael Brune
  • Matt Chan
  • João Marcos Mororo Costa
  • Herbert Crepaz
  • Junchen Deng
  • Jonathan Dent
  • Mayank Dhiman
  • Dorian Fevrier
  • Karthik Ramesh Iyer
  • Dibyadwati Lahiri
  • Kevin Masson
  • Gray Olson
  • Achal Pandey
  • Jino Park
  • Sergo Pogosyan
  • Bassem Samir
  • Oleg Smolin
  • Esteban Tovagliari
  • Thibault Vergne
  • Luke Wilimitis
  • Lars Zawallich

Many thanks as well to our internal testers, feature specialists and artists, in particular:

  • Richard Allen
  • François Gilliot
  • Juan Carlos Gutiérrez

Interested in joining the appleseed development team, or want to get in touch with the developers? Join us on Discord. Simply interested in following appleseed's development and staying informed about upcoming appleseed releases? Follow us on Twitter.


⭐️ Cryptomatte AOVs

appleseed now has native support for Cryptomatte via a pair of new Cryptomatte AOVs. Cryptomatte is a system to generate ID maps that work even in the presence of transparency, depth of field and motion blur.

Cryptomatte AOV
(IKEA Home Office scene by Chau Tran. Feel free to download the original OpenEXR file to inspect embedded metadata.)

⭐️ Render Checkpointing

We've added render checkpointing, a mechanism to resume multi-pass renders after they were interrupted (voluntarily or not), and to add rendering passes to a finished render.

At the moment render checkpointing is only exposed in appleseed.cli. Eventually it should become available in as well.

Here's an example workflow: when starting your multi-pass render (notice the --passes option), you add the --checkpoint-create option to create/update the checkpoint file after each render pass:

Creating a checkpoint

After you've interrupted the render with CTRL+C, or, Heaven forbid, after appleseed crashed, you can simply resume the render from the last complete render pass by adding the --checkpoint-resume option:

Resuming from a checkpoint

You can also pass both --checkpoint-create and --checkpoint-resume at the same time to simultaneously resume rendering from a checkpoint and continuing updating it as new passes are rendered:

Resuming and updating a checkpoint

Finally, you can pass both options even if no checkpoint exists yet, in which case rendering will simply start from the first pass:

Resuming or creating a checkpoint

⭐️ OSL Source Shaders Support

appleseed now has the ability to compile OSL source shaders on the fly. We currently exposed this feature in our Blender plugin. In the following screenshot, the user has written a small OSL shader that remaps its input to a color using a custom color map, then has connected it to the V texture coordinate of the object:

OSL source shaders support in blenderseed

Future versions of the 3ds Max and Maya plugins will expose this feature in a similar manner.

⭐️ Fisheye Lens Camera

We've added a new fisheye lens camera model with support for equisolid angle, equidistance, stereographic and Thoby projections.

Here is a render of the Japanese Classroom scene with the fisheye lens using a 120° horizontal field of view and a stereographic projection:

Japanese Classroom scene rendered with fisheye lens camera
(Japanese Classroom scene by Blend Swap user NovaZeeke, converted to Mitsuba format by Benedikt Bitterli, then to appleseed format via the script that ships with appleseed.)

⭐️ Texture-Controlled Pixel Renderer

We've added a way to control how many samples each pixel will receive based on a user-provided black-and-white mask. This allows to get rid of sampling noise in specific parts of a render without adding samples in areas that are already smooth. This is yet another tool in the toolbox, complementing the new adaptive tile sampler introduced in appleseed 2.0.0-beta and the per-object shading quality control that has been present in appleseed since its early days.

In the following mosaic, the top-left image (1) is the base render using 128 samples for each pixel; the top-right image (2) is a user-painted mask where black corresponds to 128 samples/pixel, white corresponds to 2048 samples/pixel and gray levels correspond to intermediate values; the bottom-left image (3) is the render produced with the new texture-controlled pixel renderer using the mask; the bottom-right image (4) is the Pixel Time AOV where the color of each pixel reflects the relative amount of time spent rendering it (the brighter the pixel, the longer it took to render it):

Teapot renders with texture-controlled pixel renderer

⭐️ Filter Importance Sampling

We switched appleseed to use Filter Importance Sampling instead of filtered sample splatting. This new technique has three advantages over the previous one: lower noise for a given number of samples per pixel, less waste (tile borders are no longer required), and statistically independent pixels, meaning in practice that modern denoisers should work a lot better when applied to images produced by appleseed.

To illustrate this last point, here is an appleseed render of the Modern Hall scene denoised with Intel® Open Image Denoise, a set of open source, high quality, machine learning-based denoising filters:

Modern Hall scene denoised with Intel Open Image Denoise
(Modern Hall scene by Blend Swap user NewSee2l035, converted to Mitsuba format by Benedikt Bitterli, then to appleseed format via the script that ships with appleseed.)

Other New Features and Improvements


New Features and Improvements
  • Added controls to fix or vary sampling patterns per frame.
  • Implemented optional dithering of the frame (AOVs are not affected).
  • Implemented new energy conservation algorithm.
  • Allow to stop progressive rendering after a given amount of time.
  • Print estimated remaining render time.
  • Record light paths due to image-based lighting.
  • Keep texture files open during a rendering session (in progressive mode or multi-pass final mode).
  • Added as_matte() closure and updated OSL shaders to use it.
  • Allow scaling render stamps.
  • Allow flipping environment maps.
  • Added Screen-Space Velocity AOV.
  • Added Pixel Error AOV.
  • Use Inferno color map in diagnostic AOVs (Pixel Sample Count, Pixel Time, Pixel Variation and Pixel Error AOVs).
  • Added an alpha channel to the Depth AOV, allowing background pixels to use depth = 0 instead of some extremely large value that causes problems with some applications.
  • Normalize pixel variation with respect to the noise threshold set by the user in the Pixel Variation AOV.
Shading Overrides
  • Added Objects, Assemblies and World-Space Velocity shading overrides.
  • Prevent accidental shading override changes during final rendering.
  • Added Max Ray Intensity setting to SPPM lighting engine.
  • Disallow progressive rendering with SPPM lighting engine.
  • Display enabled library features as part of appleseed's version information.
  • Print texture store settings when rendering starts.
  • Improved tile statistics and log messages in Adaptive Tile Renderer.
  • Properly handle and report I/O errors when loading a reference image.
  • Increased average noise level precision in Adaptive Tile Renderer log message.
  • Increased precision of floating point values in *.obj and *.appleseed files.
  • Print project writing and packing times.
  • Emit log message when closing texture file.
  • Emit log messages when writing AOVs to disk.
  • Changed procedural assemblies expansion summary from debug to info messages.
  • Allow saving frames in all formats supported by OpenImageIO.
  • Look for OpenImageIO plugins in the project search paths.
  • Added sample procedural texture OpenImageIO plugin.
  • Bundled OpenImageIO's idiff tool.
Bug Fixes
  • Fixed Oren-Nayar BRDF's diffuse model.
  • Fixed Albedo AOV for Oren-Nayar BRDF when roughness is zero.
  • Fixed Albedo AOV for Diffuse BTDF.
  • Fixed Position AOV for background pixels.
  • Handle multipass rendering in Pixel Sample Count AOV.
  • Handle multipass rendering in Pixel Variation AOV.
  • Don't set pixels outside the crop window in AOVs.
  • Don't apply Max Ray Intensity after specular bounces.
  • Load plugins from paths set in the APPLESEED_SEARCHPATH environment variable even if a project does not define any explicit search path.
  • Fixed rendering of Disney built-in materials that have an EDF set.
  • Fixed Sun orientation when bound to environment EDF with a transform.
  • Fixed banding with low resolution environment maps.
  • Fixed time displayed in render stamp when rendering has been paused.
  • Fixed occasional crash with procedural objects.
  • Fixed intersection of procedural objects.
  • Honor visibility flags on instances of procedural objects.
  • Fixed occasional NaN values in the latitude-longitude environment EDF.
  • Fixed invalid samples warnings in diagnostic surface shader.
  • Use case-insensitive comparison when checking file extensions.
  • Fixed infinite loop when OSL shading system's initialization fails.
  • Fixed Sampler combobox when loading project that uses adaptive sampling.
  • Removed redundant color and alpha parameters from color entities.
  • Switch built-in color maps to linear RGB.
  • Linearize custom color map image file if necessary.
  • Fixed anisotropy when shading samples is greater than 1.
  • Fixed required parameter "volume_parameterization" not found error message whenever an OSL shader uses the as_glass() closure.
  • Fixed crash in presence of light-emitting curves.
  • Fixed World-Space Position diagnostic mode to show normalized coordinates relative to the scene's bounding box instead of absolute coordinates.
  • Fixed World-Space Position diagnostic mode for flat (2D) or otherwise degenerate scenes.
  • Include all pixels when computing average noise threshold in Adaptive Tile Renderer.
  • Fixed Adaptive Tile Renderer metadata.
  • Fixed small robustness issues in Physical Sun light.
Removed Features
  • The Glossy, Plastic, Metal and Glass BSDFs are now exclusively using the GGX microfacet model.
  • Removed deprecated Adaptive Pixel Renderer: it has been replaced by a new Adaptive Tile Renderer in appleseed 2.0.0-beta.

New Features and Improvements
  • Switch to Qt 5.12. This may fix various issues on modern systems such as issues related to high DPI displays.
  • Allow setting the default number of rendering threads in the global Settings dialog.
  • Made Advanced sections in Rendering Settings dialog collapsible.
  • Expose light importance sampling option in Rendering Settings dialog.
  • Switch light paths visualization to OpenGL 3.3 (Core Profile).
  • Use Reinhard tone mapping in light paths visualization widget.
  • CTRL+Enter now closes the Search Paths dialog.
  • Made ViewFullscreen menu item checkable.
  • Allow drag and drop of materials to render widget.
  • Disallow dropping text into the main window.
  • Use OpenImageIO files filter instead of Qt one when saving renders.
  • Print paths to Python's site-packages and appleseed Python module's directories on startup.
  • Print warnings if Python's site-packages or appleseed Python module's directories cannot be found.
  • Manually saving settings now also saves the state of the user interface.
  • Print detailed diagnostic messages about the value of the PYTHONHOME environment variable and the likely consequences.
  • Adjust width of Noise Threshold widget.
Bug Fixes
  • Fixed rare crash when quickly stopping then restarting a render.
  • Fixed crash if a numeric input has more than one value in the Entity Editor.
  • Search paths from the APPLESEED_SEARCHPATH environment variable were saved as explicit search paths in projects.
  • The project's root path was not updated when the project was saved to another location.
  • Fixed locale issues with OpenColorIO.
  • Fixed push button style on macOS.


New Features and Improvements
  • Added --disable-abort-dialogs option to disable abort dialogs (Windows only).
  • appleseed.cli now prints its exit code.
Bug Fixes
  • Fixed convergence statistics when using appleseed.cli.
  • Preserve post-processing stages when recreating frame in appleseed.cli.
Removed Features
  • Removed --to-mplay and --to-hrmanpipe command line options.

Python Bindings

New Features and Improvements
  • Added the following class to Python bindings:

  • Added the following entry points to Python bindings:

Removed Features
  • Removed the following entry point from Python bindings (breaking change):


OSL Shaders

New Features and Improvements
  • Added color inversion shader (as_invert_color).
  • Added Color Decision List shader (as_asc_cdl).
  • Increased default number of bounces in shaders from 4 or 8 to 100.
  • Increased default number of bounces in as_subsurface shader from 2 to 8.
  • Updated OSL language specification document (docs/osl/osl-languagespec.pdf) to version 1.10.
  • Removed blenderseed/as_closure2surface.osl shader as it is redundant with appleseed/as_closure2surface.osl.
  • Made Energy Compensation parameter of as_metal shader non-texturable.
Bug Fixes
  • Fixed handling of Oren-Nayar BRDF's diffuse albedo in appleseed Standard Surface shader.
  • Fixed Fresnel at grazing angles when normal mapping is used with the appleseed Standard Surface shader.
  • Fixed normal blending in as_triplanar shader.

Other Tools

  • The animatecamera tool now varies the sampling pattern per frame.
  • Added --motion-blur to animatecamera tool.
  • Added --disable-abort-dialogs option to all command line tools to disable abort dialogs (Windows only).
  • Allow input file of to be anywhere.