With the goal of removing the type and custom data domain from
the attribute requests, tweak the order of the calls to ensure that
each vertex buffer is allocated until after we know about the source
mesh data format. After that, it makes more sense to have the loop
over BVH nodes inside each extraction function.
Pull Request: https://projects.blender.org/blender/blender/pulls/132467
This commit exposes the "Quality" option of the Open Image Denoiser
to the user for the denoise node in the compositor.
There are a few quality modes:
- High - Highest quality, but takes the longest to process.
- Balanced - Slightly lower quality, but usually halves
the processing time compared to High.
- Fast - Further reduce the quality, for a small increase in
speed over Balanced.
Along with that there is a `Follow Scene` option which will use the
quality set in the scene settings.
This allows users that have multiple denoise nodes
(E.g. For multi-pass denoising), to quickly switch all nodes between
different quality modes.
Performance (denoising time):
High: 13 seconds
Balanced: 6 seconds
Fast: 5 seconds
Test setup:
CPU: AMD Ryzen 9 5950X
Denoising a 3840x2160 render
---
Follow ups:
Ideally the "Denoise Nodes" UI panel in the render properties panel
would be hidden if the compositor setup does not contain any
denoise nodes.
However implementing this efficiently can be difficult and so it was
decided this task was outside the scope of this commit.
Pull Request: https://projects.blender.org/blender/blender/pulls/130252
The `math::transform_point` call returns a `float3` which is being fed
into a `float4` matrix row. This causes an out of bounds read to occur.
Use the `float4` constructor taking an explicit `w` parameter to avoid
the issue.
----
To trigger the ASAN error: Add a Metaball to the viewport
```
==61887==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7f0ce84c5cac at pc 0x000000b1a6fe bp 0x7ffc5ae10070 sp 0x7ffc5ae10060
READ of size 4 at 0x7f0ce84c5cac thread T0
#0 0xb1a6fd in blender::VecBase<float, 4>::VecBase(float const*) /home/deadpin/source/blender-git/blender/source/blender/blenlib/BLI_math_vector_types.hh:219
#1 0x62ef86e in blender::draw::overlay::BoneInstanceData::BoneInstanceData(blender::MatBase<float, 4, 4, 16> const&, blender::VecBase<float, 3> const&, float, float const*) (/home/deadpin/source/blender-git/build_asan/bin/blender+0x62ef86e) (BuildId: 6ae47f47805212d94d20c0872511ec90333cb6b5)
#2 0x63b2136 in blender::draw::overlay::Metaballs::object_sync(blender::draw::Manager&, blender::draw::ObjectRef const&, blender::draw::overlay::Resources&, blender::draw::overlay::State const&) /home/deadpin/source/blender-git/blender/source/blender/draw/engines/select/../overlay/overlay_next_metaball.hh:85
```
Pull Request: https://projects.blender.org/blender/blender/pulls/132288
Geometry instances shouldn't be drawn with cage overlays or other
edit mode overlays since they don't necessarily correspond to original
data. In this case the draw manager thought they were in edit mode
because the object data is copied from the instance parent-- we need
_some_ object for rendering.
Pull Request: https://projects.blender.org/blender/blender/pulls/132081
Caused by 839108f623.
The edit mapping was invalid so we just created a dummy GPU
batch for the selection edit data. But it was invalid because we
weren't in edit mode. The fix just requires tweaking the checks
for this data that's also used outside of edit mode.
By now it is just a "compositor", so move the files one folder up.
Things that were under realtime_compositor/intern move into
already existing intern folder.
Pull Request: https://projects.blender.org/blender/blender/pulls/132004
Previously, the number of material slots on the geometry (e.g. mesh) was the
ground truth. However, this had limitations in the case when the object had more
material slots than the evaluated geometry. All extra slots on the object were
ignored.
This patch changes the definition so that the number of materials used for
rendering is the maximum of the number of material slots on the geometry and on
the object. This also implies that one always needs a reference to an object
when determining that number, but that was fairly straight forward to achieve in
current code.
This patch also cleans up the material count handling a fair amount by using the
`BKE_object_material_*_eval` API more consistently instead of manually accessing
`totcol`. Cycles uses the the same API indirectly through RNA.
Pull Request: https://projects.blender.org/blender/blender/pulls/131869
Previously, the number of material slots on the geometry (e.g. mesh) was the
ground truth. However, this had limitations in the case when the object had more
material slots than the evaluated geometry. All extra slots on the object were
ignored.
This patch changes the definition so that the number of materials used for
rendering is the maximum of the number of material slots on the geometry and on
the object. This also implies that one always needs a reference to an object
when determining that number, but that was fairly straight forward to achieve in
current code.
This patch also cleans up the material count handling a fair amount by using the
`BKE_object_material_*_eval` API more consistently instead of manually accessing
`totcol`. Cycles uses the the same API indirectly through RNA.
Pull Request: https://projects.blender.org/blender/blender/pulls/131761
`float4(float3 &)` is currently problematic because of implicit conversions
to and from `float *`. Writing the constructor explicitly fixes the problem.
Also add const to the arguments.
Pull Request: https://projects.blender.org/blender/blender/pulls/131828
When "Developer Extras" is disabled, the experemental options
must not be used.
Some checks for experemental options weren't using the macro which
checks both are set.
Add comment to avoid this happening in the future.
Use static CreateInfos for Overlay-Next shaders using a similar approach to Workbench shader variations.
Remove unused infos and shader sources.
Remove the `gpu_shader_create_info_get_unfinalized_copy` workaround.
Pull Request: https://projects.blender.org/blender/blender/pulls/131514
This was reported for freestyle, but was also the case for regular
renders.
So even though MotionBlurModule::init and MotionBlurModule::step return
early when motionblur is disabled, Sampling::init would still up the
samples with motionblur samples (even if motionblur was disabled
alltogether).
To resolve, only do this when motionblur is enabled.
Pull Request: https://projects.blender.org/blender/blender/pulls/131795
There is a case where the active image index could be placed on an
non-existing tile. This PR fixes this by keeping track of the active
tile when looping over all tiles.
Pull Request: https://projects.blender.org/blender/blender/pulls/131789
This was caused by a bad state where a texture (likely the viewport)
texture, could be bound as texture by the viewport blit function
and kept bound as texture input during the subsequent redraw.
This would provoke a feedback loop which is UB.
It is still unknown why this is not catched by our GL layer
and why it isn't an issue in Vulkan or Metal nor other GL
implementations.
Add back all missing calls from previous `DRW_state_reset` to
avoid more regressions.