2 months agoFix issues with Monkey XML example file. master
Thomas Dinges [Sat, 2 Oct 2021 18:56:19 +0000 (20:56 +0200)]
Fix issues with Monkey XML example file.

Due to changes in Cycles (variable names and defaults) this scene rendered wrong.

5 months agoCMake/Embree: Silence warning
Ray Molenkamp [Wed, 16 Jun 2021 13:59:48 +0000 (07:59 -0600)]
CMake/Embree: Silence warning

The EMBREE_STATIC_LIB define is no longer
required to be passed to the compiler.
Embree now handles this internally inside

5 months agoCMake: Find debug library for PugiXML
Ray Molenkamp [Wed, 16 Jun 2021 13:54:37 +0000 (07:54 -0600)]
CMake: Find debug library for PugiXML

FindPugiXML.cmake was not looking for the debug
version of pugi leading to the release library
being linked, which caused a linker error on windows.

5 months agoCMake/Windows: Fix OSL Build issue
Ray Molenkamp [Tue, 15 Jun 2021 21:19:06 +0000 (15:19 -0600)]
CMake/Windows: Fix OSL Build issue

Fix additional build issues, given find_package is no
longer used on windows some of the OSL cmake Variables
were not set, I did not notice this since cmake had them
cached, starting a new build folder brought the issue to

WITH_SYSTEM_PUGIXML needed to be set on windows since we
no longer rely on the copy previously bundled by OIIO.

5 months agoCMake/Windows: Update for 2.93 libraries
Ray Molenkamp [Thu, 10 Jun 2021 01:18:18 +0000 (19:18 -0600)]
CMake/Windows: Update for 2.93 libraries

Small adjustments were needed for linking against
the 2.93 library set mostly due to changes in OCIO
and OSL.

The find_package use was problematic on windows
due it linking the clang release libs in the
debug configuration.

6 months agoFixed macOS build
Stefan Werner [Fri, 4 Jun 2021 08:03:31 +0000 (10:03 +0200)]
Fixed macOS build

 * OpenImageIO requires IOKit.framework
 * OpenImageDenoise requires Accelerate.framework on ARM
 * Updated FindEmbree with the Blender version to support ARM

6 months agoCMake followup fixes after v2.93 update.
Stefan Werner [Fri, 4 Jun 2021 06:19:47 +0000 (08:19 +0200)]
CMake followup fixes after v2.93 update.

There were changes in Blender's CMake scipts that were not picked up on
by the commit sync script.

 * OpenColorIO is now using expat instead of tinyxml
 * Clang is a new dependency for OSL
 * Added FindOptiX.cmake

6 months agoIncreased Cycles Standalone version to 2.93 v2.93.0
Stefan Werner [Wed, 2 Jun 2021 19:14:30 +0000 (21:14 +0200)]
Increased Cycles Standalone version to 2.93

6 months agoRevert "Cycles: optimize ensure_valid_reflection(), reduces render time by about 1%"
Brecht Van Lommel [Wed, 26 May 2021 16:22:43 +0000 (18:22 +0200)]
Revert "Cycles: optimize ensure_valid_reflection(), reduces render time by about 1%"

Both before and after can have artifacts with some normal maps, but this seems to give
worse artifacts on average which are not worth the minor performance increase.

This reverts commit 21bc1a99baa765d81c3203fd2e451681b8a7fd55.

Ref T88368, D10084

6 months agoFix T87793: Cycles OptiX crash hiding objects in viewport render
Brecht Van Lommel [Tue, 18 May 2021 22:55:22 +0000 (00:55 +0200)]
Fix T87793: Cycles OptiX crash hiding objects in viewport render

6 months agoCycles OpenCL: disable AO preview kernels
Brecht Van Lommel [Tue, 18 May 2021 22:14:23 +0000 (00:14 +0200)]
Cycles OpenCL: disable AO preview kernels

These seem to be causing some stability issues, and really are just not that
useful in practice. Compiling them is slow already, so it does not improve
the user experience much to show an AO preview if it's not nearly instant.

6 months agoCleanup: clang-format
Campbell Barton [Tue, 18 May 2021 02:53:27 +0000 (12:53 +1000)]
Cleanup: clang-format

6 months agoFix T85892: disable progressive refine when using adaptive sampling
Brecht Van Lommel [Mon, 17 May 2021 17:24:51 +0000 (19:24 +0200)]
Fix T85892: disable progressive refine when using adaptive sampling

This is giving too bright pixel values, as the sample scaling and random number
sample are wrong. The proper fix for this is complicated. It will be solved in
Cycles X, for now we disable this combination.

6 months agoFix T88216: Cycles persistent data fails with animated object transform in instance
Brecht Van Lommel [Mon, 17 May 2021 13:43:42 +0000 (15:43 +0200)]
Fix T88216: Cycles persistent data fails with animated object transform in instance

6 months agoFix T88210: Cycles persistent data failing with image sequences
Brecht Van Lommel [Mon, 17 May 2021 13:36:50 +0000 (15:36 +0200)]
Fix T88210: Cycles persistent data failing with image sequences

6 months agoFix OpenCL group size performance issue on Intel GPUs
Brecht Van Lommel [Mon, 17 May 2021 11:32:50 +0000 (13:32 +0200)]
Fix OpenCL group size performance issue on Intel GPUs

Contributed by Intel. On some scenes like classroom with particular integrated
GPUs this speeds up rendering 1.97x. With other benchmarks and GPUs it's
between 0.99-1.14x.

6 months agoFix T87929: Cycles, missing update when visibility is modified
Kévin Dietrich [Mon, 10 May 2021 16:23:32 +0000 (18:23 +0200)]
Fix T87929: Cycles, missing update when visibility is modified

This issue originates from a missing BVH packing for visibility data
when it is modified.

To fix this, this adds update flags to the managers to carry the
modified visibility information from the Objects' modified flag to the

Another set of flags is added to determine which data need to be packed:
geometry, vertices, or visibility. Those flags are then used when
packing the primivites.

Reviewed By: brecht

Maniphest Tasks: T87929

Differential Revision:

6 months agoFix non-finite tangent in Cycles with missing UV map
Sergey Sharybin [Tue, 11 May 2021 18:36:15 +0000 (20:36 +0200)]
Fix non-finite tangent in Cycles with missing UV map

Was causing calculation issues later on in the kernel.

This change catches the most obvious case: missing attribute. The old
code was trying to set tangent to 0, but because it was transformed as
a normal it got converted to non-finite value. This change makes it so
that no transform is involved and 0 is written directly to the SVM

To cover all cases it will require using safe_normalize() in this node
and in the normal transform function. This is more involved change from
performance point of view, would be nice to verify whether we really want
to go this route.

I've left asserts in the BSDF allocation functions. Don't have strong
connection to them, but think they are handy and are not different from
having an assert in the path radiance checks.

Differential Revision:

6 months agoCycles X: Fix possible use of uninitialized ShaderClosure
Sergey Sharybin [Tue, 11 May 2021 15:53:09 +0000 (17:53 +0200)]
Cycles X: Fix possible use of uninitialized ShaderClosure

It is possible that BSDF allocation will advance pointer in the
allocation "pool" but will return null pointer if the weight is
too small.

One artist-measurable issue this change fixes is random issues
with denoising: normal pass for denoising could have accessed
non-initialized normal of a closure.

Differential Revision:

6 months agoFix T72791: Cycles wrong results when mixing multiple random walk BSSRDFs
Chris Eveleigh [Tue, 11 May 2021 20:06:10 +0000 (22:06 +0200)]
Fix T72791: Cycles wrong results when mixing multiple random walk BSSRDFs

Take into account the closure sample weight for the throughput.

Differential Revision:

6 months agoFix T88093: persistent data and particle object instancing not working
Brecht Van Lommel [Tue, 11 May 2021 15:17:00 +0000 (17:17 +0200)]
Fix T88093: persistent data and particle object instancing not working

6 months agoFix T88099: error with persistent data and motion blur
Brecht Van Lommel [Tue, 11 May 2021 12:22:40 +0000 (14:22 +0200)]
Fix T88099: error with persistent data and motion blur

6 months agoFix kernel loading time accounted twice in render progress
Sergey Sharybin [Wed, 5 May 2021 09:31:04 +0000 (11:31 +0200)]
Fix kernel loading time accounted twice in render progress

The render session is keeping track of the scene update, which includes
kernel loading time.

This fixes negative render times reported when CUDA kernels are compiled
at runtime.

A bit fragile logic, can be re-implemented using some user-counted
scope utility classes, so that only outer-most time skip is applied.

6 months agoFix errors in Cycles comments
Brecht Van Lommel [Mon, 3 May 2021 20:44:22 +0000 (22:44 +0200)]
Fix errors in Cycles comments

6 months agoFix T85287: Cycles deadlock loading Blender images in some cases
Brecht Van Lommel [Mon, 3 May 2021 19:18:48 +0000 (21:18 +0200)]
Fix T85287: Cycles deadlock loading Blender images in some cases

6 months agoFix T88001: persistent data render wrong when changing camera border
Brecht Van Lommel [Mon, 3 May 2021 18:11:34 +0000 (20:11 +0200)]
Fix T88001: persistent data render wrong when changing camera border

6 months agoFix error in Python UI script
Brecht Van Lommel [Thu, 29 Apr 2021 15:48:14 +0000 (17:48 +0200)]
Fix error in Python UI script

6 months agoFix build error after recent changes to CPU name detection
Brecht Van Lommel [Thu, 29 Apr 2021 14:21:30 +0000 (16:21 +0200)]
Fix build error after recent changes to CPU name detection

6 months agoFix missing Cycles CPU name on macOS Arm
Christian Baars [Thu, 29 Apr 2021 13:52:27 +0000 (15:52 +0200)]
Fix missing Cycles CPU name on macOS Arm

Differential Revision:

6 months agoFix missing Cycles CPU name for Arm processors
Patrick Mours [Thu, 29 Apr 2021 13:51:29 +0000 (15:51 +0200)]
Fix missing Cycles CPU name for Arm processors

6 months agoFix T87686: Cycles persistent data not updating correctly with hair
Brecht Van Lommel [Thu, 29 Apr 2021 13:46:06 +0000 (15:46 +0200)]
Fix T87686: Cycles persistent data not updating correctly with hair

6 months agoCleanup: removed unnecessary multiplications in area light importance sampling
Matteo Falduto [Thu, 29 Apr 2021 13:10:16 +0000 (15:10 +0200)]
Cleanup: removed unnecessary multiplications in area light importance sampling

Differential Revision:

6 months agoFix ASAN warnings with Cycles OSL
Brecht Van Lommel [Thu, 29 Apr 2021 12:56:49 +0000 (14:56 +0200)]
Fix ASAN warnings with Cycles OSL

6 months agoFix: missing AO factor from Cyclest Fast GI panel
Brecht Van Lommel [Sat, 24 Apr 2021 11:34:05 +0000 (13:34 +0200)]
Fix: missing AO factor from Cyclest Fast GI panel

The AO distance was already there, but I forgot the factor also has an impact
on this.

6 months agoFix some Cycles random walk SSS precision issues with small radius
Brecht Van Lommel [Wed, 21 Apr 2021 15:32:32 +0000 (17:32 +0200)]
Fix some Cycles random walk SSS precision issues with small radius

6 months agoInitialize all optix structs to zero before use
Patrick Mours [Tue, 13 Apr 2021 11:43:34 +0000 (13:43 +0200)]
Initialize all optix structs to zero before use

This is done to ensure building with newer OptiX SDK releases that add new struct fields gives
deterministic results (no uninitialized fields and therefore random data is passed to OptiX).

6 months agoFix Cycles broken motion blur pass after recent bugfix
Brecht Van Lommel [Mon, 12 Apr 2021 18:57:18 +0000 (20:57 +0200)]
Fix Cycles broken motion blur pass after recent bugfix

6 months agoFix T86880: Cycles bevel shader not working after editing world
Brecht Van Lommel [Mon, 12 Apr 2021 18:10:07 +0000 (20:10 +0200)]
Fix T86880: Cycles bevel shader not working after editing world

6 months agoFix T87283: crash with persistent data and motion blur
Brecht Van Lommel [Mon, 12 Apr 2021 17:52:01 +0000 (19:52 +0200)]
Fix T87283: crash with persistent data and motion blur

6 months agoFix T87324: incorrect parametric coordinates with light spread
Brecht Van Lommel [Mon, 12 Apr 2021 14:34:50 +0000 (16:34 +0200)]
Fix T87324: incorrect parametric coordinates with light spread

6 months agoCleanup: clang-format
Campbell Barton [Sun, 11 Apr 2021 04:37:37 +0000 (14:37 +1000)]
Cleanup: clang-format

6 months agoCleanup: Use const arguments for volume code
Hans Goudey [Thu, 8 Apr 2021 17:00:26 +0000 (12:00 -0500)]
Cleanup: Use const arguments for volume code

The problem was that you could getting write access to a grid from a
`const Volume *` without breaking const correctness. I encountered this
when working on support for volumes in the bounding box node. For
geometry nodes there is an important distinction between getting data
"for read" and "for write", with the former returning a `const` version
of the data.

Also, for volumes it was necessary to cast away const, since all of
the relevant functions in `` didn't have const versions. This
patch adds `const` in these places, distinguising between "for read"
and "for write" versions of functions where necessary.

The downside is that loading and unloading in the global volume cache
needs const write-access to some member variables. I see that as an
inherent problem that comes up with caching that never has a beautiful
solution anyway.

Some of the const-ness could probably be propogated futher in EEVEE
code, but I'll leave that out, since there is another level of caching.

Differential Revision:

6 months agoCleanup: spelling
Campbell Barton [Thu, 8 Apr 2021 06:20:22 +0000 (16:20 +1000)]
Cleanup: spelling

6 months agoFix Cycles rendering files with Simplify wrong after recent changes
Brecht Van Lommel [Tue, 6 Apr 2021 13:34:13 +0000 (15:34 +0200)]
Fix Cycles rendering files with Simplify wrong after recent changes

The versioning code was not taking into account the old default for AO

6 months agoRender: faster animation and re-rendering with Persistent Data
Brecht Van Lommel [Sun, 4 Apr 2021 21:51:24 +0000 (23:51 +0200)]
Render: faster animation and re-rendering with Persistent Data

For Cycles, when enabling the Persistent Data option, the full render data
will be preserved from frame-to-frame in animation renders and between
re-renders of the scene. This means that any modifier evaluation, BVH
building, OpenGL vertex buffer uploads, etc, can be done only once for
unchanged objects. This comes at an increased memory cost.

Previously there option was named Persistent Images and had a more limited
impact on render time and memory.

When using multiple view layers, only data from a single view layer is
preserved to keep memory usage somewhat under control. However objects
shared between view layers are preserved, and so this can speedup such
renders as well, even single frame renders.

For Eevee and Workbench this option is not available, however these engines
will now always reuse the depsgraph for animation and multiple view layers.
This can significantly speed up rendering.

These engines do not support sharing the depsgraph between re-renders, due
to technical issues regarding OpenGL contexts. Support for this could be added
if those are solved, see the code comments for details.

6 months agoUpdate light paths preset
Brecht Van Lommel [Mon, 5 Apr 2021 11:53:26 +0000 (13:53 +0200)]
Update light paths preset

* Add Fast GI / AO bounces to presets
* Add Default preset matching defaults
* Add Fast Approximate GI preset
* Lower Full GI depths to 32

6 months agoMake ao bounces settings more discoverable
Brecht Van Lommel [Sun, 4 Apr 2021 13:01:00 +0000 (15:01 +0200)]
Make ao bounces settings more discoverable

* Move out of Simplify panel, into Light Paths > Fast Global Illumination
* Add separate boolan setting to enable/disable it separate from Simplify
* Default AO bounces to 1
* Put ambient occlusion distance in this panel as well

6 months agoCleanup: spelling
Campbell Barton [Thu, 1 Apr 2021 11:20:53 +0000 (22:20 +1100)]
Cleanup: spelling

6 months agoFix "unused variable" warning when compiling without nanovdb
Sebastian Parborg [Thu, 1 Apr 2021 10:35:33 +0000 (12:35 +0200)]
Fix "unused variable" warning when compiling without nanovdb

6 months agoLight spread importance sampling for rectangular area lights
Brecht Van Lommel [Mon, 22 Mar 2021 18:27:58 +0000 (19:27 +0100)]
Light spread importance sampling for rectangular area lights

Compute a subset of the area light that actually affects the shading point
and only samples points within that.

It's not perfect as the real subset is a circle instead of a rectangle, and
the attenuation is not accounted for. However it massively reduces noise for
shading points near the area light anyway.

Ellipse shaped area lights do not have this importance sampling, but do not
have solid angle importance sampling either.

Ref D10594

6 months agoAdd a spread setting for area lights
Matteo Falduto [Thu, 1 Apr 2021 03:35:56 +0000 (05:35 +0200)]
Add a spread setting for area lights

This simulates the effect of a honeycomb or grid placed in front of a softbox.
In practice, it works by attenuating rays coming off-angle as a function of the
provided spread angle parameter.

Setting the parameter to 180 degrees poses no restrictions to the rays, making
the light behave the same way as before this patch.

The total light power is normalized based on the spread angle, so that the
light strength remains the same.

Differential Revision:

6 months agoFix Cycles build error with "make developer" on some CPUs
Nikita Sirgienko [Tue, 30 Mar 2021 14:53:43 +0000 (16:53 +0200)]
Fix Cycles build error with "make developer" on some CPUs

The combination of building unit tests and WITH_CYCLES_NATIVE_ONLY did not
correctly detect when AVX/AVX2 support is available.

Differential Revision:

6 months agoAlembic procedural: fix missing update when editing shaders
Kévin Dietrich [Wed, 31 Mar 2021 15:17:54 +0000 (17:17 +0200)]
Alembic procedural: fix missing update when editing shaders

6 months agoAlembic procedural: comment, speficy the behavior of a function
Kévin Dietrich [Wed, 31 Mar 2021 15:14:27 +0000 (17:14 +0200)]
Alembic procedural: comment, speficy the behavior of a function

6 months agoAlembic procedural: cleanup, make add_object private
Kévin Dietrich [Wed, 31 Mar 2021 15:13:25 +0000 (17:13 +0200)]
Alembic procedural: cleanup, make add_object private

This should only be accessed from within the procedural.

6 months agoAlembic procedural: fix out of bound access when editing object properties or shaders
Kévin Dietrich [Wed, 31 Mar 2021 15:10:04 +0000 (17:10 +0200)]
Alembic procedural: fix out of bound access when editing object properties or shaders

The index_data_map was not cleared when clearing a cache, so this would just append
the new correct data to the end of the array instead of overwriting it, which would
cause us to then use outdated indices.

6 months agoFix T87007: Cycles Background not updated if strength is initially null
Kévin Dietrich [Tue, 30 Mar 2021 13:40:40 +0000 (15:40 +0200)]
Fix T87007: Cycles Background not updated if strength is initially null

When the strength is initially set to zero, the shader graph is
optimized out to remove any node which will not be executed because of
this, which removes pretty much every single node, except for the
output. As the graph is empty, the world shader is made invisible to
rays so it is not evaluated in the kernel.

However, when the strength is then modified, the Background is not
updated as the modification happens on the Shader Node and not on the
Background Node, so it is never tagged as modified.

To fix this, we need to tag the Background as modified when its shader
is also modified so the Kernel data is properly updated.

Regression caused by rBbbe6d44928235cd4a5cfbeaf1a1de78ed861bb92.

6 months agoDo not allocate tile buffers on all devices when peer memory is active and denoising...
Patrick Mours [Tue, 30 Mar 2021 10:59:03 +0000 (12:59 +0200)]
Do not allocate tile buffers on all devices when peer memory is active and denoising is not

Separate tile buffers on all devices only need to exist when denoising is active (so any overlap
being rendered simultaneously does not write to the same memory region).
When denoising is not active they can be distributed like all other memory when peer
memory support is available.

Reviewed By: brecht

Differential Revision:

6 months agoDisable nanovdb for amd opencl
Brecht Van Lommel [Mon, 29 Mar 2021 20:58:19 +0000 (22:58 +0200)]
Disable nanovdb for amd opencl

It is causing issue with AMD OpenCL drivers, due to a potential driver bug.

Ref T84461

6 months agoCleanup: redundant expression
Kévin Dietrich [Fri, 26 Mar 2021 09:50:13 +0000 (10:50 +0100)]
Cleanup: redundant expression

6 months agoFix T86939: Cycles objects bounds not updated when transforming objects
Kévin Dietrich [Fri, 26 Mar 2021 09:49:43 +0000 (10:49 +0100)]
Fix T86939: Cycles objects bounds not updated when transforming objects

As a rather premature optimization from rBbbe6d4492823, Object bounds
were only computed when either the Object or its Geometry were modified.
Prior to rB42198e9eb03b, this would work, as the Geometry was tagged as
modified if the Object's transform was also modified.

Since this tagging is not done anymore due to side effects, and since at
the time bounds are computed Objects were already processed and tag as
unmodified, the check on the modified status was always false.

For now remove this check, so the bounds are always unconditionally
updated. If this ever becomes a performance problem in large scenes with
motion blur, we will then try to find a way to nicely optimize it.

This would only affect BHV2 as OptiX and Embree handle object bounds

6 months agoCleanup: clang-format
Campbell Barton [Fri, 26 Mar 2021 01:28:49 +0000 (12:28 +1100)]
Cleanup: clang-format

6 months agoGeometry Nodes: rename attribute domains
Jacques Lucke [Thu, 25 Mar 2021 11:01:42 +0000 (12:01 +0100)]
Geometry Nodes: rename attribute domains

This patch renames two domains:
* `Polygon` -> `Face`
* `Corner` -> `Face Corner`

For the change from `polygon` to `face` I did a "deep rename" where I updated
all (most?) cases where we refere to the attribute domain in code as well.
The change from `corner` to `face corner` is only a ui change. I did not see
a real need to update all code the code for that. It does not seem to improve
the code, more on the contrary.

Ref T86818.

Differential Revision:

6 months agoAlembic procedural: deduplicate cached data accross frames
Kévin Dietrich [Wed, 24 Mar 2021 13:18:05 +0000 (14:18 +0100)]
Alembic procedural: deduplicate cached data accross frames

Currently the procedural will add an entry to the cache for every frame
even if the data only changes seldomly. This means that in some cases we
will have duplicate data accross frames.

The cached data is now stored separately from the time information, and
an index is used to retrieve it based on time. This decoupling allows
for multiple frames to point to the same data.

To check if two arrays are the same, we compute their keys using the
Alembic library's routines (which is based on murmur3), and tell the
cache to reuse the last data if the keys match.

This can drastically reduce memory usage at the cost of more processing
time, although processing time is only increased if the topology may

6 months agoCleanup: unused variable
Kévin Dietrich [Wed, 24 Mar 2021 09:38:46 +0000 (10:38 +0100)]
Cleanup: unused variable

6 months agoFix T86601: Cycles accumulates displacement when transforming an Object
Kévin Dietrich [Wed, 24 Mar 2021 09:36:31 +0000 (10:36 +0100)]
Fix T86601: Cycles accumulates displacement when transforming an Object

In order to update the BVH when only the transformations are changing,
we would tag the Object's Geometry as modified. However, when
displacement is used, and the vertices were not themselves modified,
this would cause us to redo the displacement on already displaced

To fix this, use a specific update flag for detecting and notifying that
transformations were modified.

Regression caused by rBbbe6d44928235cd4a5cfbeaf1a1de78ed861bb92.

6 months agoFix T86567: Cycles crashes when playing back animated volumes
Kévin Dietrich [Tue, 23 Mar 2021 14:55:01 +0000 (15:55 +0100)]
Fix T86567: Cycles crashes when playing back animated volumes

The crash is caused by an out of bound access in the kernel due to
missing data update when a Volume's voxel data changes. Although the
previous bounding mesh is cleared, the Volume Node was not tagged as
modified, and therefore never rebuilt.

To fix this, tag the Geometries (not just Volumes, to be more robust) as
modified in Geometry.clear().

Regression caused by rBbbe6d44928235cd4a5cfbeaf1a1de78ed861bb92.

6 months agoNodes: Add Refract and Faceforward functions to Vector Maths nodes
Charlie Jolly [Tue, 23 Mar 2021 09:21:56 +0000 (09:21 +0000)]
Nodes: Add Refract and Faceforward functions to Vector Maths nodes

Cycles, Eevee, OSL, Geo, Attribute

Based on outdated refract patch D6619 by @cubic_sloth

`refract` and `faceforward` are standard functions in GLSL, OSL and Godot shader languages.
Adding these functions provides Blender shader artists access to these standard functions.

Reviewed By: brecht

Differential Revision:

6 months agoCleanup: spelling, doxygen comment formatting
Campbell Barton [Sun, 21 Mar 2021 02:18:20 +0000 (13:18 +1100)]
Cleanup: spelling, doxygen comment formatting

6 months agoFix Cycles NaN assert in random walk SSS due to very small throughput
Brecht Van Lommel [Fri, 19 Mar 2021 12:14:56 +0000 (13:14 +0100)]
Fix Cycles NaN assert in random walk SSS due to very small throughput

Now terminate if there are many bounces and the throughput gets so small
that we get precision issues.

6 months agoCleanup: spelling
Campbell Barton [Wed, 17 Mar 2021 22:35:12 +0000 (09:35 +1100)]
Cleanup: spelling

6 months agoNodes: Add support to mute node wires
Charlie Jolly [Tue, 16 Mar 2021 19:11:54 +0000 (19:11 +0000)]
Nodes: Add support to mute node wires

This patch adds the ability to mute individual wires in the node editor.
This is invoked like the cut links operator but with a new shortcut.

Mute = Ctrl + Alt
Cut = Ctrl

Dragging over wires will toggle the mute state for that wire.
The muted wires are drawn in red with a bar across the center.
Red is used in the nodes context to indicate invalid links, muted links and internal links.

When a wire is muted it exposes the original node buttons which are normally hidden when a wire is connected.

Downstream and upstream links connected using reroute nodes are also muted.

Outside scope of patch:
- Add support for pynodes e.g. Animation Nodes
- Requires minor change to check for muted links using the `is_muted` link property or the `is_linked` socket property.

Maniphest Tasks: T52659

Differential Revision:

6 months agoRevert removal of lambda usage for Python RNA callbacks
Campbell Barton [Tue, 16 Mar 2021 01:19:13 +0000 (12:19 +1100)]
Revert removal of lambda usage for Python RNA callbacks

This reverts commits
08dbc4f996e4e95f3ab64f7bb3e1193700c585f5 (partially).

6 months agoFix T86121: Cycles Attribute returning wrong results with OSL
Brecht Van Lommel [Mon, 15 Mar 2021 19:42:06 +0000 (20:42 +0100)]
Fix T86121: Cycles Attribute returning wrong results with OSL

Fix uninitialized variable in the OSL shader.

6 months agoFix (apparently harmless) Cycles asan warnings
Brecht Van Lommel [Mon, 15 Mar 2021 17:52:45 +0000 (18:52 +0100)]
Fix (apparently harmless) Cycles asan warnings

6 months agoOptimize ensure_valid_reflection(), reduces render time by about 1%
Mikhail [Mon, 15 Mar 2021 16:59:38 +0000 (17:59 +0100)]
Optimize ensure_valid_reflection(), reduces render time by about 1%

This is an implementation that is about 1.5-2.1 times faster. It gives a result
that is on average 6° different from the old implementation. The difference is
because normals (Ng, N, N') are not selected to be coplanar, but instead
reflection R is lifted the least amount and the N' is computed as a bisector.

Differential Revision:

6 months agoFix T56925: Cycles banding artifacts in dense volumes
Mikhail Matrosov [Mon, 15 Mar 2021 14:17:46 +0000 (15:17 +0100)]
Fix T56925: Cycles banding artifacts in dense volumes

Offset the starting point of segments by a random amount to avoid the bounding
box shape affecting the result and creating artifacts.

Differential Revision:

6 months agoFix T86332: setting Cycles dicing camera fails after recent changes
Brecht Van Lommel [Fri, 12 Mar 2021 15:33:13 +0000 (16:33 +0100)]
Fix T86332: setting Cycles dicing camera fails after recent changes

Somehow "from __future__ import annotations" and "lambda" are not working
together well here, work around it by not using a lambda function.

6 months agoAlembic procedural: specific result type for cache lookups
Kévin Dietrich [Fri, 12 Mar 2021 00:57:41 +0000 (01:57 +0100)]
Alembic procedural: specific result type for cache lookups

This type, CacheLookupResult, holds the data for the current time, or an
explanation as to why no data is available (already loaded, or simply
nothing available). This is useful to document the behavior of the code
but also, in future changes, to respond appropriately for missing data.

6 months agoAlembic procedural: add support for instancing
Kévin Dietrich [Fri, 12 Mar 2021 00:30:12 +0000 (01:30 +0100)]
Alembic procedural: add support for instancing

Inside of the procedural, instances are AlembicObjects which point to
the AlembicObject that they instance.

In Alembic, an instance is an untyped Object pointing to the original
(instanced) one through its source path. During the archive traversal we
detect such instances and, only if the instanced object is asked to be
rendered, set the instance's AlembicObject to point to the original's

Cycles Object Nodes are created for each AlembicObject, but only for
non-instances are Geometries created, which are then shared between
Object Nodes. It is supposed, and expected, that all instances share the
same shaders, which will be set to be the ones found on the original

As for caching, the data cache for an AlembicObject is only valid for
non-instances and should not be read to or from as it is implicitly

6 months agoAlembic procedural: move cache building out of object update methods
Kévin Dietrich [Thu, 11 Mar 2021 23:15:07 +0000 (00:15 +0100)]
Alembic procedural: move cache building out of object update methods

This will help support instancing as cache building is now decoupled
from the logic to update the Nodes' sockets as data (and cache) will
need to be shared by different Geometries somehow, and also simplify
implementing different data caching methods by centralizing this

6 months agoAlembic procedural: fix missing attribute update
Kévin Dietrich [Thu, 11 Mar 2021 22:51:54 +0000 (23:51 +0100)]
Alembic procedural: fix missing attribute update

We need to explicitely tag the Attribute and AttributeSet as modified if
we change or add/remove data. This is more of a bandaid until attributes
handling is refactored to be able to reuse routines from the Attribute

6 months agoCleanup: unused variable
Kévin Dietrich [Thu, 11 Mar 2021 22:47:23 +0000 (23:47 +0100)]
Cleanup: unused variable

6 months agoAlembic procedural: fix potential zero scale matrix generation
Kévin Dietrich [Thu, 11 Mar 2021 22:45:42 +0000 (23:45 +0100)]
Alembic procedural: fix potential zero scale matrix generation

This can happen during user edits or with files missing the global scale

6 months agoChange device-only memory to actually only allocate on the device
Patrick Mours [Wed, 3 Mar 2021 13:35:50 +0000 (14:35 +0100)]
Change device-only memory to actually only allocate on the device

This patch changes the `MEM_DEVICE_ONLY` type to only allocate on the device and fail if
that is not possible anymore because out-of-memory (since OptiX acceleration structures may
not be allocated in host memory). It also fixes high peak memory usage during OptiX
acceleration structure building.

Reviewed By: brecht

Maniphest Tasks: T85985

Differential Revision:

6 months agoFix wrong white point of Linear ACES in config reading and the bundled config
Brecht Van Lommel [Wed, 10 Mar 2021 15:38:26 +0000 (16:38 +0100)]
Fix wrong white point of Linear ACES in config reading and the bundled config

The Blender/Cycles XYZ color space has a D65 white point instead of E, and
this was not correctly accounted for both in the OpenColor config reading code
and the bundled config.

This meant that since the OpenColorIO v2 upgrade, the Linear ACES color space
was not working correctly, and other OpenColorIO configs defining
aces_interchange were not interpreted correctly.

6 months agoFix Cycles CUDA build error with Visual Studio 2019 v16.9
Brecht Van Lommel [Mon, 8 Mar 2021 12:59:16 +0000 (13:59 +0100)]
Fix Cycles CUDA build error with Visual Studio 2019 v16.9

Something in this update broke the floor() function in CUDA, instead use
floorf() like we do everywhere else in the kernel code. Thanks to Ray
Molenkamp for identifying the solution.

6 months agoCleanup: do not pass class member to class methods
Kévin Dietrich [Sun, 7 Mar 2021 16:22:00 +0000 (17:22 +0100)]
Cleanup: do not pass class member to class methods

6 months agoAlembic procedural: fix missing update when only the transforms change
Kévin Dietrich [Sun, 7 Mar 2021 15:17:59 +0000 (16:17 +0100)]
Alembic procedural: fix missing update when only the transforms change

The missing update has two sources:

The TimeSampling used for looking up transformations in the cache was
uninitialized. To fix this, simply use the TimeSampling from the last
transformation in the hierarchy (that is the object's parent), which
should also contain the time information for all of its parents.

The objects are not tagged for update when their trasformations change.

6 months agoAlembic procedural: fix infinite update loop when modifying Object level properties
Kévin Dietrich [Sun, 7 Mar 2021 14:39:01 +0000 (15:39 +0100)]
Alembic procedural: fix infinite update loop when modifying Object level properties

6 months agoGLog: Lower default logging severity to INFO
Sergey Sharybin [Tue, 23 Feb 2021 15:37:55 +0000 (16:37 +0100)]
GLog: Lower default logging severity to INFO

Before this change messages of ERROR and above were printed.
This change makes it so LOG(INFO), LOG(WARNING), LOG(ERROR)
and LOG(FATAL) will be printed to the console by default
(without --debug-libmv and --debug-cycles).

On a user level nothing is changed because neither INFO nor
WARNING severity are used in our codebase. For developers this
change allows to use LOG(INFO) to print relevant for debugging
information. Bering able to see WARNING messages is also nice,
since those are not related to debugging, but are about some
detected "bad" state.

After this change the LOG(INFO) is really treated as a printf.
Why not to use printf to begin with? Because it is often more
annoying to print non-scalar types. Why not to use cout? Just
a convenience, so that all type of logging is handled in the
same way. When one is familiar with Glog used in the area, it
is easy to use same utilities during development. Also, it is
easy to change LOG(INFO) to VLOG(2) when development is done
and one wants to keep the log print but make it only appear
when using special verbosity flags.

The initial reason why default severity was set to maximum
possible value is because of misuse of VLOG with verbosity
level 0, which is the same as LOG(INFO). This is also why
back in the days --debug-libmv was introduced.

Now there is some redundancy between --debug-libmv, --debug-cyles
and --verbose, but changes in their meaning will cause user
level side effects.

Differential Revision:

6 months agoFix Cycles build error without Embree on Windows
Brecht Van Lommel [Mon, 1 Mar 2021 15:28:55 +0000 (16:28 +0100)]
Fix Cycles build error without Embree on Windows

Don't use ssize_t, it's not available in MSVC.

6 months agoCleanup: unused class member
Kévin Dietrich [Fri, 26 Feb 2021 19:57:24 +0000 (20:57 +0100)]
Cleanup: unused class member

6 months agoFix T85926: Cycles missing viewport updates when making materials single user
Kévin Dietrich [Thu, 25 Feb 2021 01:16:58 +0000 (02:16 +0100)]
Fix T85926: Cycles missing viewport updates when making materials single user

This issue seems to be caused by the reallocation flag not being set on
the device shader data array so it was never updated on the GPU although
the host memory was modified.

6 months agoCmake/deps: Update OSL to
Ray Molenkamp [Wed, 24 Feb 2021 14:13:37 +0000 (07:13 -0700)]
Cmake/deps: Update OSL to

This bumps OSL to OSL Has a new build time
dependency: Clang, and more importantly it expects
clang and llvm to share a library folder, which it
previously for us did not.

This patch changes:

-OSL Update to

-refactor the llvm/clang/clang-tools-extra builds into the llvm
 build using the llvm-project tarball for building that has all
 of the subprojects in it.

-update ispc/openmp builds since clang no longer its own dependency
 and they have to depend on the llvm build now.

-Update the windows builder to use the 64 bit host tools since it
 ran out of ram linking clang

-Since OSL now needs clang to link successfully a findclang.cmake
 has been provided for linux/OSX

Differential Revision:

Reviewed By: brecht, sebbas, sybren

6 months agoAdd option to change input passes for viewport denoising
Patrick Mours [Mon, 22 Feb 2021 17:09:48 +0000 (18:09 +0100)]
Add option to change input passes for viewport denoising

There are cases where the default input passes of color+albedo do not yield useful results
and while this was possible to change that for final frame rendering (in the layer settings),
viewport denoising always used a fixed color+albedo. This adds an option to change the
input passes for viewport denoising too, so that one can use it in scenes that otherwise
wouldn't work well with it.

Reviewed By: brecht

Differential Revision:

6 months agoAlembic procedural: avoid storing constant hair topology for each frame
Kévin Dietrich [Tue, 23 Feb 2021 05:01:28 +0000 (06:01 +0100)]
Alembic procedural: avoid storing constant hair topology for each frame

Only store the curve keys and radiuses for each frame if the topology does not change through time, this helps saving quit a bit of memory.

6 months agoAlembic procedural: cleanup, demultiply Object and Geometry Node creation
Kévin Dietrich [Tue, 23 Feb 2021 04:45:55 +0000 (05:45 +0100)]
Alembic procedural: cleanup, demultiply Object and Geometry Node creation

6 months agoAlembic procedural: use an enumeration to discriminate IObjects
Kévin Dietrich [Tue, 23 Feb 2021 04:31:34 +0000 (05:31 +0100)]
Alembic procedural: use an enumeration to discriminate IObjects

Using the various IObject::matches() to do so was expensive and would
show up in profiles as requires creating std::strings for each call.

6 months agoAlembic procedural: fix crash when accessing data out of frame bounds
Kévin Dietrich [Tue, 23 Feb 2021 00:57:03 +0000 (01:57 +0100)]
Alembic procedural: fix crash when accessing data out of frame bounds