Commit Graph

6820 Commits

Author SHA1 Message Date
Campbell Barton
cc892efcd4 Cleanup: use snake case, especially for structs that define callbacks
Use snake case for ShaderFxTypeInfo, ModifierTypeInfo,
GpencilModifierTypeInfo & bConstraintTypeInfo.
2023-07-27 12:21:06 +10:00
Hans Goudey
580833165c Fix #109583: Avoid non-threadsafe writing to custom normals data
Currently, while calculating face corner normals, Blender retrieves
custom normal data with write access. When the the custom normals in a
single smooth corner fan don't match, they are reset to the average
value.

This behavior is very old, but it comes from when Blender didn't have a
strong idea of const correctness. Indeed, modifying custom normal data
while calculating normals isn't threadsafe, which is important because
normals are calculated for viewport drawing, for example. And in the
future, properly caching face corner normals (see #93551) will require
the ability to calculate normals on a properly const mesh.

The fix is to still use the average of custom normals in a fan, but
not write that back to the custom data array. In my testing the results
are the same. Setting custom normals still fills the same value for all
corners in a fan.

Pull Request: https://projects.blender.org/blender/blender/pulls/110478
2023-07-26 17:04:13 +02:00
Clément Foucault
38542ceeda DRW: Make tests pass
These were just changes that changed the test
output but not the behavior.
2023-07-26 12:42:36 +02:00
Clément Foucault
ad2771878d DRW: Add missing defines for tests
Prior to that, the Draw tests would be missing.
2023-07-26 11:45:36 +02:00
Hans Goudey
aebc743bf1 Cleanup: Make format
Sorry for the noise, I thought I ran this in the previous commit.
2023-07-25 15:23:56 -04:00
Hans Goudey
95edff7495 Cleanup: Rename mesh custom data fields
Implements the rest of #101689, after 5e9ea9243b.

- `vdata` -> `vert_data`
- `edata` -> `edge_data`
- `pdata` -> `face_data`
- `ldata` -> `loop_data`

A deeper rename of `loop` to `corner` will be proposed as a next
step, and renaming `totvert` and `totedge` can be done separately.

Pull Request: https://projects.blender.org/blender/blender/pulls/110432
2023-07-25 21:15:52 +02:00
Brecht Van Lommel
aef3d1c95b Fix grease pencil crash with render engines that don't deliver Z pass
Found during Hydra render engine development, could also happen with
render engine add-ons.
2023-07-25 19:19:51 +02:00
Hans Goudey
0e87e25b37 Cleanup: Simplify iteration over mesh faces, use utility functions
Utility functions make accessing the next and previous corner of a face
more obvious, and range based for loops make iterating over corners
or vertices in a face simpler too.
2023-07-25 11:56:01 -04:00
Ray molenkamp
4ea2baf4ae CMake: revert last weeks modernizations
The cleanup of blenkernel last weeks , caused the house of cards to
collapse on  top of bf_gpu's shader_builder, which is off by default
but used on a daily basis by the rendering team.

Given the fixes forward in #110394 ran into a ODR violation in OSL that
was hiding there for years, I don't see another way forward without
impeding the rendering teams productivity for "quite a while" as there
is no guarantee the OSL issue would be the end of it.

the only way forward appears to be back.

this reverts :

19422044ed
a670b53abe
0f541db97c
be516e8c81
3e88a2f44c
4e64b772f5
9547e7a317
07fe6c5a57

The problematic commit was 07fe6c5a57
as blenkernel links most of blender, it's a bit of a link order issue
magnet. Given all these commits stack, it's near impossible to revert
just that one without spending a significant amount of time resolving
merge conflicts. 99% of that work was automated, so easier to just
revert all of them, and re-do the work, than it is to deal with the
merge conflicts.

Pull Request: https://projects.blender.org/blender/blender/pulls/110438
2023-07-25 16:43:21 +02:00
Campbell Barton
530ee6e7fa Cleanup: make class doc-strings directly above classes
In some cases it wasn't clear if a comment before a class was meant
to be it's doc-string. Remove blank lines between the class & it's
doc-string.
2023-07-25 14:11:42 +10:00
Hans Goudey
f3f31054ba Cleanup: Make format 2023-07-24 16:32:08 -04:00
Hans Goudey
318f9b259b Cleanup: Use const pointers in PBVH draw arguments
Also remove two unused variables
2023-07-24 16:32:00 -04:00
Hans Goudey
5e9ea9243b Mesh: Rename "polys" to "faces"
Implements part of #101689.

The "poly" name was chosen to distinguish the `MLoop` + `MPoly`
combination from the `MFace` struct it replaced. Those two structures
persisted together for a long time, but nowadays `MPoly` is gone, and
`MFace` is only used in some legacy code like the particle system.

To avoid unnecessarily using a different term, increase consistency
with the UI and with BMesh, and generally make code a bit easier to
read, this commit replaces the `poly` term with `poly`. Most variables
that use the term are renamed too. `Mesh.totface` and `Mesh.fdata` now
have a `_legacy` suffix to reduce confusion. In a next step, `pdata`
can be renamed to `face_data` as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/109819
2023-07-24 22:06:55 +02:00
Sybren A. Stüvel
00e5b2b6db Refactor: Anim, simplify Armature drawing code a little bit
Reduce indentation in two armature drawing functions, by flipping
conditions and using `continue` (instead of having the entire `for`-body
inside two nested conditions).

No functional changes.
2023-07-24 15:53:59 +02:00
Campbell Barton
b8ea968929 Cleanup: simplify struct & enum declarations for C++ 2023-07-24 10:13:31 +10:00
Clément Foucault
9bf37be99c EEVEE-Next: Fix invalid surfel normals
The normals were inverted because they use
geometric normals. These are computed using
partial derivatives (`dFdx` & `dFdy`) and are
dependent on the view orientation. But the
baking views were not all captured from the
same side, which flipped sufels normals in
2 out of the 3 views.
2023-07-22 10:43:49 +02:00
Ray molenkamp
19422044ed Cleanup: CMake: Modernize bf_bmesh dependencies
Pretty straightforward

- Remove any bmesh paths from INC
- Add a dependency though LIB when missing

context: https://devtalk.blender.org/t/cmake-cleanup/30260

Pull Request: https://projects.blender.org/blender/blender/pulls/110363
2023-07-22 02:05:21 +02:00
Ray Molenkamp
a670b53abe Cleanup: CMake: Modernize bf_blenfont dependencies
Pretty straightforward

- Remove any blenfont paths from INC
- Add a dependency though LIB when missing

context: https://devtalk.blender.org/t/cmake-cleanup/30260

Pull Request: https://projects.blender.org/blender/blender/pulls/110351
2023-07-21 19:13:37 +02:00
Ray Molenkamp
0f541db97c Cleanup: CMake: Modernize bf_intern_clog dependencies
Pretty straightforward

- Remove any clog paths from INC
- Add a dependency though LIB when missing

context: https://devtalk.blender.org/t/cmake-cleanup/30260

Pull Request: https://projects.blender.org/blender/blender/pulls/110350
2023-07-21 18:37:30 +02:00
Ray molenkamp
be516e8c81 Cleanup: CMake: Modernize bf_blentranslation dependencies
Pretty straightforward:

- Remove any blentranslation paths from INC
- Add a dependency though LIB when needed

Slightly different than usual:

blentranslation still had a dependency on imbuf, from a time long
gone, cleaned that up since I was in the area

context: https://devtalk.blender.org/t/cmake-cleanup/30260

Pull Request: https://projects.blender.org/blender/blender/pulls/110324
2023-07-21 16:22:10 +02:00
Sybren A. Stüvel
f645130465 Anim: Refactor the armature drawing code
Introduces a strategy pattern for the implementation of the various
armature drawing modes. Instead of having to `switch (arm->drawtype)`
(or `if`/`else if`/`else` chains) everywhere, one function is used to
select the appropriate `ArmatureBoneDrawStrategy` subclass.

In the future this class could be expanded even further. Currently there
are still places where there are explict checks for the draw type,
making it cumbersome to add new types. For now I feel it's already a
good enough move forward; future extensions can be done in later PRs.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/106232
2023-07-21 15:03:50 +02:00
Campbell Barton
530e1ac151 Fix building drawing test WITH_OPENGL_BACKEND=OFF 2023-07-21 14:09:04 +10:00
Ray molenkamp
3e88a2f44c Cleanup: CMake: Modernize bf_depsgraph dependencies
Pretty straightforward

- Remove any depsgraph paths from INC
- Add a dependency though LIB when needed

context: https://devtalk.blender.org/t/cmake-cleanup/30260

Pull Request: https://projects.blender.org/blender/blender/pulls/110317
2023-07-20 22:13:00 +02:00
Clément Foucault
7158844424 EEVEE-Next: Irradiance Cache: Add manual trilinear weights
This replaces the trilinear interpolation with manually
placed samples to avoid most light leak.

Add two new parameters to bias the sampling position:
- Normal bias
- View bias

Move the irradiance smoothing parameter per grid.

Pull Request: https://projects.blender.org/blender/blender/pulls/110312
2023-07-20 19:03:08 +02:00
Ray molenkamp
4e64b772f5 Cleanup: CMake: Modernize bf_windowmanager dependencies
Pretty straightforward

- Remove any windowmanager paths from INC
- Add a dependency though LIB when needed

context: https://devtalk.blender.org/t/cmake-cleanup/30260

Pull Request: https://projects.blender.org/blender/blender/pulls/109984
2023-07-20 18:52:52 +02:00
Campbell Barton
246292f486 Cleanup: various non-functional changes (mainly for C++)
- Remove redundant void, struct.
- Remove redundant parenthesis.
- Use STR_ELEM(..)
- Use function style casts.
2023-07-20 11:55:34 +10:00
Campbell Barton
08f4f1f41e Cleanup: spelling in comments, capitalize tags 2023-07-20 09:42:00 +10:00
casey bianco-davis
1629eb61a1 GPv3: UI and RNA for layer opacity
Adds the UI for layer opacity in the layer panel.

Currently layer blending rendering is not implemented, so the last layer's opacity will affect all of the layers.

Pull Request: https://projects.blender.org/blender/blender/pulls/110177
2023-07-19 17:34:05 +02:00
Clément Foucault
7f905a0b06 Fix: EEVEE-Next: Make irradiance baking use world probe
The texture and ubo weren't using references. So they could
be referenced before creation.

The ray direction was also inverted.
2023-07-19 16:38:10 +02:00
Jeroen Bakker
9cacdf6c42 EEVEE-Next: Extract Spherical Harmonics from World
This PR adds diffuse light from environment to the scene without having an
irradiance volume in the scene.

It does this by extracting the sperical harmonics from the world probe and
store it in the irradiance brick that is reserved for world diffuse light
in the irradiance cache.

This also fixes that selecting an LookDev HDRI didn't update the diffuse
light.

**Known Issues**

- When sampling probes with lower resolution strokes are visible, leading
  to flickering and instability in the spherical harmonics. This is an
  issue that should be solved in a separate patch as it is already visible
  in main
- When selecting a lookdev HDRI all irradiance volumes needs to be disabled
  manually for the expected results (but this also disabled GI). In the future
  this will be done automatically or we will add a solution to separate the
  world diffuse light from the irradiance cache so we can update it on the fly.

Pull Request: https://projects.blender.org/blender/blender/pulls/110110
2023-07-19 13:48:31 +02:00
Sergey Sharybin
ae543c01a4 Refactor: Make viewport to use ViewRender
This change replaces a bare RenderEngine owned by a viewport
with a VeiwRender. This unlocks a possibility of accessing
RenderResult for viewport renders. Currently it is not done,
but it will be needed for an upcoming work towards unification
of the render passes handling.

Ref #108618

Pull Request: https://projects.blender.org/blender/blender/pulls/110244
2023-07-19 12:12:09 +02:00
Jeroen Bakker
56f0f4b2a5 Fix: World Light Direction in Irradiance Cache
The world light direction in the irradiance cache was inverted due
to misunderstanding of a code review comment. This PR fixes this
so the captured light from a direction is stored in the SH correctly.

Pull Request: https://projects.blender.org/blender/blender/pulls/110258
2023-07-19 09:20:02 +02:00
Jason Fielder
a8c29fb221 EEVEE Next: Ensure correct resource usage flags for Metal
Shader write must be correctly specified where required for
shaders which perform direct image and buffer writing operations.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/110219
2023-07-18 19:18:33 +02:00
Miguel Pozo
548ff9dc8d Cleanup: EEVEE Next: Clarify sampling rng functions usage
Pull Request: https://projects.blender.org/blender/blender/pulls/110221
2023-07-18 15:23:50 +02:00
Jeroen Bakker
d82cbcaa96 Fix: Eevee-next world only probe didn't update
When scenes only have a world probe the world probe had several
artifacts.

- The first sample didn't update the world.
- When switching between viewports the world didn't get updates
- When rendering it ignored the resolution that was set by the user

The reason was that the ubo was only updated when the probes where
synced. This PR adds an exception to also update when there is only
the world probe.

Pull Request: https://projects.blender.org/blender/blender/pulls/110238
2023-07-18 11:58:00 +02:00
Jeroen Bakker
e9dbb68729 Fix: Eevee-next LOD selection
The LOD selection for reflection probes wasn't correct and would
select a noisier texture than required. This change will improve
the LOD selection making less noise in the rendered image.

Pull Request: https://projects.blender.org/blender/blender/pulls/110234
2023-07-18 09:21:40 +02:00
Campbell Barton
db345366fe Cleanup: struct member comments for DrawEngineType & RenderEngineType 2023-07-18 14:34:59 +10:00
Jason Fielder
3f99b6e71c EEVEE Next: Avoid out of bounds cryptomatte buf and image access
Resolves shader validation error in Metal backend for EEVEE Next.

Authored by Apple: Michael Parkin-White

Pull Request: https://projects.blender.org/blender/blender/pulls/110215
2023-07-17 17:56:04 +02:00
Clément Foucault
9305778fb5 Fix: EEVEE-Next: bindpoint collision from Object 2023-07-17 16:46:16 +02:00
Jeroen Bakker
5aff5bc0e7 Fix: Reflection Probe Memory Alignment
Introduced in recent commit (#110194) where the reflection probes are used as
ubos. Ubos have different memory requirements, but the struct
wasn't adjusted, resulting in incorrect renderings.

Pull Request: https://projects.blender.org/blender/blender/pulls/110202
2023-07-17 13:40:16 +02:00
Jacques Lucke
129f78eee7 Blenkernel: move to C++
Also see #103343.

Couldn't move two files yet:
* `softbody.c`: The corresponding regression test fails. It seems like the
  conversion to C++ changes floating point accuracy, but it's not clear where that happens exactly.
* `writeffmpeg.c`: Is a bit more complex to convert because of the static array in `av_err2str`.

Pull Request: https://projects.blender.org/blender/blender/pulls/110182
2023-07-17 10:46:26 +02:00
Jeroen Bakker
ac1f015246 Eevee-next: Ensure Uniform Buffer for Reflection Probes
Our intent was that uniform buffers would have been used already. The
buffer was already marked as uniform buffer, but still was attached
as an SSBO leading to incorrect bindings.

Until now we didn't detect any artifacts, but it conflicted with
cryptomatte.

Pull Request: https://projects.blender.org/blender/blender/pulls/110194
2023-07-17 09:46:17 +02:00
Jeroen Bakker
bac6e81e57 Cleanup: Remove Compilation Warning Eevee Materials
Pull Request: https://projects.blender.org/blender/blender/pulls/110193
2023-07-17 07:50:25 +02:00
Campbell Barton
caf0024463 Cleanup: add degrees UTF8 symbol, prefer ascii over unicode in comments 2023-07-16 21:54:58 +10:00
Campbell Barton
d82322f616 Cleanup: spelling in comments 2023-07-16 15:50:02 +10:00
Campbell Barton
3889baab4f Cleanup: spelling in comments 2023-07-15 15:54:55 +10:00
Campbell Barton
f957a6da22 Cleanup: compiler warnings (unused functions & variable) 2023-07-15 15:45:03 +10:00
Clément Foucault
d8e4fe3207 EEVEE-Next: Add back fresnel functions 2023-07-14 19:03:08 +02:00
Miguel Pozo
1a24b5f81f EEVEE Next: Hair & Curves
Finalize the hair & curves implementation for EEVEE Next.

- Ensure Hair particles have their own `ResourceHandle` and
  `ObjectKey`, so Motion Blur works correctly.
  (Note that the `ObjectHandle` and the `ObjectKey` are always created
  "on the fly" instead of being stored as `DrawData`, since it's not
  supported for particle system `ID`s).
- The (unused) `ObjectKey::use_particle_hair` has been replaced by an
  integer `sub_key`, so multiple particle systems per object can be
  supported.
- `VelocityModule::step_object_sync` now has 2 extra optional
  parameters for syncing Hair particle systems.
- Update `DRW_curves_update` so it's safe to call it from "Next"
  engines.
- Disable the `sampling.reset()` call from `step_object_sync`, since
  `is_deform` is always true for objects with particle modifiers, and
  this causes the renderer to get stuck at sample 1.

Pull Request: https://projects.blender.org/blender/blender/pulls/109833
2023-07-14 18:23:26 +02:00
Miguel Pozo
e48d0c3cda EEVEE Next: Point Clouds
Add support for point cloud rendering in EEVEE Next.

Update `point_cloud_sub_pass_setup` to retrieve texture based
attributes, since that's the way they're actually meant to be used.

Pull Request: https://projects.blender.org/blender/blender/pulls/109832
2023-07-14 17:23:29 +02:00