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: https://zenodo.org/record/3456967
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.
⭐️ 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 appleseed.studio 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:
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
You can also pass both
--checkpoint-resume at the same time to simultaneously resume rendering from a checkpoint and continuing updating it as new passes are rendered:
Finally, you can pass both options even if no checkpoint exists yet, in which case rendering will simply start from the first pass:
⭐️ 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:
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 by Blend Swap user NovaZeeke, converted to Mitsuba format by Benedikt Bitterli, then to appleseed format via the
mitsuba2appleseed.py 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):
⭐️ 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:
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).
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.
- 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
- 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
- If a color entity has multiple alpha values, keep the first one.
- Improved rendering error analysis.
- Made Cornell Box's background solid black.
- Replaced Max Samples by Max Average Samples Per Pixel in interactive mode.
- Introduced disk, rectangle and sphere procedural objects.
- Entity paths now start with a
- Binary Curve file format specifications are now in the wiki.
- Binary Mesh file format specifications are now in the wiki.
- 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_SEARCHPATHenvironment 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
alphaparameters 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.
required parameter "volume_parameterization" not founderror message whenever an OSL shader uses the
- 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.
- 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 View → Fullscreen 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-packagesand appleseed Python module's directories on startup.
- Print warnings if Python's
site-packagesor 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
PYTHONHOMEenvironment variable and the likely consequences.
- Adjust width of Noise Threshold widget.
- 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_SEARCHPATHenvironment 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
--disable-abort-dialogsoption to disable abort dialogs (Windows only).
- appleseed.cli now prints its exit code.
- Fixed convergence statistics when using appleseed.cli.
- Preserve post-processing stages when recreating frame in appleseed.cli.
--to-hrmanpipecommand line options.
New Features and Improvements
Added the following class to Python bindings:
Added the following entry points to Python bindings:
AOV.get_cryptomatte_image() Project.get_post_processing_stage_factory_registrar() Project.get_volume_factory_registrar() ShaderGroup.add_source_shader() ShaderQuery.open_bytecode() get_lib_compilation_date() get_lib_compilation_time() get_lib_configuration() get_lib_cpu_features() get_lib_name() get_lib_version() get_synthetic_version_string() get_third_parties_versions() oiio_make_texture()
Removed the following entry point from Python bindings (breaking change):
New Features and Improvements
- Added color inversion shader (
- Added Color Decision List shader (
- Increased default number of bounces in shaders from 4 or 8 to 100.
- Increased default number of bounces in
as_subsurfaceshader from 2 to 8.
- Updated OSL language specification document (
docs/osl/osl-languagespec.pdf) to version 1.10.
blenderseed/as_closure2surface.oslshader as it is redundant with
Energy Compensationparameter of
- 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
animatecameratool now varies the sampling pattern per frame.
--disable-abort-dialogsoption to all command line tools to disable abort dialogs (Windows only).
- Allow input file of
mitsuba2appleseed.pyto be anywhere.