Blender Git Commits

Blender Git "cycles-x" branch commits.

Page: 2 / 44

September 17, 2021, 08:56 (GMT)
Fix wrong display when rendering multiple view layers in Cycles X

The issue was that the texture used by GPUDisplay was never cleared and
was only used for partial updates.

The actual reasoning of that is a bit more tricky than it looks on a
first glance since the GPUDisplay was re-created together with session
via session_reset so one would think it is weird to have a texture from
previous view layer to appear in the new GPUDisplay. Probably caused by
the fact that OpenGL is the same for all view layers, and texture ID is
happened to be the same.

Anyhow, the way texture is created is considered to have an undefined
behavior by the standard when is attempted to be used without explicit
data assignment.

This change makes it so new texture is always guaranteed to be zeroed
and that the GPU display is cleared when rendering multiple views from
within the same session.

The clearing is done by a GPUDisplay subclass, as the parent does not
know details of how to perform the zeroing. For the CPU the zeroing is
done on a mapped memory, as it makes it easy and does not require any
extra OpenGL requirements.

For the graphics interop things a bit more difficult as attempts to map
texture will make graphics interop to fail out (it really wants to be
an exclusive thing which takes care of the memory mapping). So for the
graphics interop clearing is done when memory is mapped by the interop
implementation.

Differential Revision: https://developer.blender.org/D12514
September 17, 2021, 08:38 (GMT)
Fix persistent data not allowing to change sample count and time limit

The root cause was that `session->params` were never updated to the new
parameters.

Made it so `session->reset()` will make sure the session is fully up to
date with the desired parameters.

Investigation by @dingto, code by self.

Differential Revision: https://developer.blender.org/D12515
September 17, 2021, 08:25 (GMT)
Fix pass accessor with 0 samples

Avoid division by zero when calculating scale, and avoid multiplication
by inf later on.

The pixel processing functions are changed so that they return fully
transparent pixel for pixels where number of samples is 0. This allows
to have matched behavior of non-finished tiles with master, without
relying on non-finite math.

The extra condition when calculating scale is inevitable, and hopefully
the pixel processing function's if statement gets folded into it as
well ()due to force-inline).

Differential Revision: https://developer.blender.org/D12518
September 17, 2021, 08:14 (GMT)
Fix race condition between draw and render threads

Caused crashes like the one William was fixing in the D12498, or the
crash when rendering multiple view layers.

Need to guarantee that the render engine is not freed during drawing,
and that the external engine is not in the middle of re-allocation due
to `update()` which might cause session reset (happens in Cycles).

Had to introduce a separate lock. The reason for this comes from the
fact that we need to acquire the engine early on in the draw manager,
and release it only when drawing is done. However, some other engines
(like overlay) might be requesting ImBuf for the image space, so that
they know dimensions. Such acquisition is guarded by the resultmutex.
This means reusing `resultmutex` for the `RenderEngine::draw()` would
cause a recursive lock.

Not entirely happy with implicit release in the external engine code,
but not sure there is an existing way of making it explicit without
introducing new draw engine callback.

Differential Revision: https://developer.blender.org/D12521
September 16, 2021, 19:20 (GMT)
Fix T91426: don't display outdated denoised result when increasing samples
September 16, 2021, 18:33 (GMT)
Fix T91427: wrong display with adaptive sampling and pixel size

Need to use the appropriate resolution divider for postprocessing of such
renders.
September 16, 2021, 17:58 (GMT)
Fix static initialization order crash with denoise parameters

Now that DenoiseParams is a Node, we can no longer create an instance of
it when defining the Integrator Node, since that might not have been
registered yet.
September 16, 2021, 17:39 (GMT)
Fix T91441: bump node not working for shadow rays
September 16, 2021, 17:20 (GMT)
Cycles X: set integrator state size relative to the number of GPU cores

More specifically, 16x the max number of threads on all multiprocessors,
with 1048576 minimum.

What this effectively does is double the state size on the very high end
GPUs like RTX A6000 and RTX 3080 while leaving the size unchanged for
others. On the RTX A6000 I there are 2-10% render time reductions on our
benchmark scenes. The biggest reduction is on the barbershop interior, as
scenes with more objects and shaders are more likely to benefit from
improved coherence.

This also adds an environment variable for developers to test different
sizes, and debug logging about the size and memory usage.

Reviewed By: sergey

Differential Revision: https://developer.blender.org/D12432
September 16, 2021, 11:00 (GMT)
Fix invalid address error in Cycles X GPUDisplay update

Make sure no display update happens after full buffer was written.
Makes it possible to free memory used by path trace works without
causing issues.
September 16, 2021, 09:23 (GMT)
Cleanup: Naming
September 15, 2021, 18:33 (GMT)
Fix wrong render with portals and constant background color

Need to apply MIS weight also in that case.
September 15, 2021, 18:04 (GMT)
Fix missing mutex lock for viewport OpenGL context

A mistake in D12468: the viewport uses GHOST to operate on contexts,
bypassing draw manager state,

Differential Revision: https://developer.blender.org/D12505
September 15, 2021, 17:52 (GMT)
Cleanup: Typo fix in a comment
September 15, 2021, 17:51 (GMT)
Render: Introduce render_frame_finish RenderEngine callback

Allows to inform the engine that nothing else will be rendered for the
current frame and that the engine can perform post-processing of any
pending result.

For example, this allows the engine to free its memory, read all files
from disk and write them to Blender.

Currently no functional changes, just preparing API for the further
development of Cycles on-disk tile storage.

Differential Revision: https://developer.blender.org/D12502
September 15, 2021, 17:35 (GMT)
Cycles X: Convert DenoiseParams to a "lite" Node

It is not supposed to be a node of a scene graph, but this change
allows to simplify serialization of the denoising parameters.

The goal is to be able to easily (de)serialize denoiser parameters
to/from image metadata, so that processing of the files can happen
outside of the scene graph (for example, on-disk tile buffer and
animation denoising).
September 15, 2021, 17:35 (GMT)
Cycles X: Switch TileManager to use BufferPass

Continuation of work related on making buffers a sufficient entity
to properly access pass pixels.

For the ease of (de)serialization the buffer pass and parameters
are now subclass of Node. Can try looking into adding an explicit
Serializable API, but it will be outside of this patch and not
currently sure it will make things more clear.
September 15, 2021, 17:33 (GMT)
Fix missing shadow catcher pass in viewport

The regression was caused by changes related on GPUDisplay used for
an offline rendering.
September 15, 2021, 17:33 (GMT)
Ensure unique names of tile buffer files in Cycles X

It is possible that processing and deletion of tile buffer from disk
will happen after tile manager was re-allocated. This happens, for
example, when rendering multiple view layers in Blender: each view
layer will reset session (which re-creates the tile manager).
September 15, 2021, 17:33 (GMT)
Cycles X: Keep track of passes list in BufferParams

Currently should no functional changes.

The goal is to completely decouple BufferParams from Scene graph for
pass accessing.

This is needed for the on-disk tiled storage when EXR is to be read
from disk after the session got freed. Also, will make animation
denoising easier to implement.
By: Miika HämäläinenLast update: Nov-07-2014 14:18MiikaHweb | 2003-2021