Commit Graph

7962 Commits

Author SHA1 Message Date
Clément Foucault
65ad36f5fd DRWManager: New implementation.
This is a new implementation of the draw manager using modern
rendering practices and GPU driven culling.

This only ports features that are not considered deprecated or to be
removed.

The old DRW API is kept working along side this new one, and does not
interfeer with it. However this needed some more hacking inside the
draw_view_lib.glsl. At least the create info are well separated.

The reviewer might start by looking at `draw_pass_test.cc` to see the
API in usage.

Important files are `draw_pass.hh`, `draw_command.hh`,
`draw_command_shared.hh`.

In a nutshell (for a developper used to old DRW API):
- `DRWShadingGroups` are replaced by `Pass<T>::Sub`.
- Contrary to DRWShadingGroups, all commands recorded inside a pass or
   sub-pass (even binds / push_constant / uniforms) will be executed in order.
- All memory is managed per object (except for Sub-Pass which are managed
   by their parent pass) and not from draw manager pools. So passes "can"
   potentially be recorded once and submitted multiple time (but this is
   not really encouraged for now). The only implicit link is between resource
   lifetime and `ResourceHandles`
- Sub passes can be any level deep.
- IMPORTANT: All state propagate from sub pass to subpass. There is no
   state stack concept anymore. Ensure the correct render state is set before
   drawing anything using `Pass::state_set()`.
- The drawcalls now needs a `ResourceHandle` instead of an `Object *`.
   This is to remove any implicit dependency between `Pass` and `Manager`.
   This was a huge problem in old implementation since the manager did not
   know what to pull from the object. Now it is explicitly requested by the
   engine.
- The pases need to be submitted to a `draw::Manager` instance which can
   be retrieved using `DRW_manager_get()` (for now).

Internally:
- All object data are stored in contiguous storage buffers. Removing a lot
   of complexity in the pass submission.
- Draw calls are sorted and visibility tested on GPU. Making more modern
   culling and better instancing usage possible in the future.
- Unit Tests have been added for regression testing and avoid most API
   breakage.
- `draw::View` now contains culling data for all objects in the scene
   allowing caching for multiple views.
- Bounding box and sphere final setup is moved to GPU.
- Some global resources locations have been hardcoded to reduce complexity.

What is missing:
- ~~Workaround for lack of gl_BaseInstanceARB.~~ Done
- ~~Object Uniform Attributes.~~ Done (Not in this patch)
- Workaround for hardware supporting a maximum of 8 SSBO.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D15817
2022-09-02 18:45:14 +02:00
370b17a8c6 Merge remote-tracking branch 'origin/blender-v3.3-release' 2022-08-31 16:30:57 +02:00
0864ab5248 UI: Fix order of Geometry Nodes in the Add Nodes Mesh menu 2022-08-31 16:29:13 +02:00
ae79bc490a GPencil: Apply Brush Size to Outline thickness while drawing
The new factor allows to apply the current brush size to the
external stroke perimeter conversion done in draw mode.
2022-08-31 16:18:08 +02:00
f1c0249f34 Mesh: Move material indices to a generic attribute
This patch moves material indices from the mesh `MPoly` struct to a
generic integer attribute. The builtin material index was already
exposed in geometry nodes, but this makes it a "proper" attribute
accessible with Python and visible in the "Attributes" panel.

The goals of the refactor are code simplification and memory and
performance improvements, mainly because the attribute doesn't have
to be stored and processed if there are no materials. However, until
4.0, material indices will still be read and written in the old
format, meaning there may be a temporary increase in memory usage.

Further notes:
* Completely removing the `MPoly.mat_nr` after 4.0 may require
  changes to DNA or introducing a new `MPoly` type.
* Geometry nodes regression tests didn't look at material indices,
  so the change reveals a bug in the realize instances node that I fixed.
* Access to material indices from the RNA `MeshPolygon` type is slower
  with this patch. The `material_index` attribute can be used instead.
* Cycles is changed to read from the attribute instead.
* BMesh isn't changed in this patch. Theoretically it could be though,
  to save 2 bytes per face when less than two materials are used.
* Eventually we could use a 16 bit integer attribute type instead.

Ref T95967

Differential Revision: https://developer.blender.org/D15675
2022-08-31 09:09:01 -05:00
Charlie Jolly
bfa0ee13d5 Node: Mix node
This patch is a response to T92588 and is implemented
as a Function/Shader node.

This node has support for Float, Vector and Color data types.

For Vector it supports uniform and non-uniform mixing.

For Color it now has the option to remove factor clamping.

It replaces the Mix RGB for Shader and Geometry node trees.

As discussed in T96219, this patch converts existing nodes
in .blend files. The old node is still available in the
Python API but hidden from the menus.

Reviewed By: HooglyBoogly, JacquesLucke, simonthommes, brecht

Maniphest Tasks: T92588

Differential Revision: https://developer.blender.org/D13749
2022-08-31 00:13:57 +01:00
4d107041ec Merge branch 'blender-v3.3-release' 2022-08-30 10:43:36 -05:00
002f339aed Fix: Alphabetical order in duplicate data preferences panel 2022-08-30 08:22:31 -05:00
e0ab4b29a9 Merge branch 'blender-v3.3-release' 2022-08-30 21:07:31 +10:00
524d9a3e2f Fix error in operator poll functions
- PALETTE_OT_color_add: crashed without a brush.
- SCREEN_OT_actionzone: crashed without a window.
- PREFERENCES_OT_studiolight_show: exception when opening prefs failed.
2022-08-30 21:06:17 +10:00
24b8ccaa94 Cleanup: format 2022-08-30 16:22:49 +10:00
26487530f2 Merge branch 'blender-v3.3-release' 2022-08-30 11:14:08 +10:00
e9fe4aa7d7 Fix Dirty Vertex Colors failure when no vertex colors existed 2022-08-30 11:12:55 +10:00
Damien Picard
9120c86c3f I18n: disambiguate and make a few more strings translatable
Those strings were at least partly disambiguated:
- Area
  - Zone
  - Measurement
- Ease
  - BBone Ease In / Out
- Back
  - Camera BG image depth
  - GP interpolate sequence
- Edge Crease
  - Theme
- Jitter
  - Brush
  - GPencil
  - Lens distorsion compositing node
- Cineon color management
  - Black
  - Gamma
  - White

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D15791
2022-08-29 16:04:03 +02:00
Damien Picard
9bf5c37bee I18n: translate newly created node group sockets
Translate:
- new group socket names
  - default names Input and Output
  - on connecting a link from another node
- new geometry nodes input and output socket names

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D15763
2022-08-29 14:26:10 +02:00
Damien Picard
73bfd8058f I18n: make add-ons' info translatable
The info provided by add-ons is very valuable to users, yet it wasn’t translatable yet.

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D15747
2022-08-29 14:12:21 +02:00
613b6ad9e5 GPencil: New conversion to outline in draw mode
This new option converts the stroke to outline perimeter as soon as is drawn.

If no alternative material is set, the actual material is used.

The algorithm is similar to the new operator in D15664

Reviewed By: pepeland

Differential Revision: https://developer.blender.org/D15738
2022-08-29 09:47:08 +02:00
51178fd4da UV: improve consistency for scale parameter of uvcalc_randomize_transform 2022-08-26 21:19:46 +12:00
96d8367924 PyAPI: return faces instead of indices from bmesh_linked_uv_islands
Return faces instead of face indices from bmesh_linked_uv_islands
since BMesh indices aren't reliable when geometry is added/removed,
where the faces will still be valid.
2022-08-25 17:05:50 +10:00
012db9e820 Cleanup: replace dict with set for bmesh_utils.bmesh_linked_uv_islands
Also correct doc-string syntax.
2022-08-25 16:41:22 +10:00
de570dc87e Fix T78406: create uv randomize islands operator
Implement a new operator to randomize the scale, rotation and offset
of selected UV islands.
2022-08-25 18:09:32 +12:00
a77a1bcae7 Merge branch 'blender-v3.3-release' 2022-08-23 15:09:50 +02:00
ffb6cc263f Cleanup: format 2022-08-23 22:55:48 +10:00
500e4d540a Merge branch 'blender-v3.3-release'
Conflicts:
	release/scripts/startup/bl_ui/space_userpref.py
2022-08-22 15:44:44 +02:00
Damien Picard
0b2be4fbc3 I18n: Fix lighting preferences error messages
While the current situation sort of works, a proper translation cannot
be achieved in every language. Separate messages for each lighting
type.
2022-08-22 15:34:27 +02:00
4ad471d67f I18n: systematically tag all messages in RNA_ENUM_ITEM_HEADING.
Add missing labels, and also add tooltips.

Unfortunately there is no way currently to extract two messages from a
single 'function' call, so unless those type of macros become very
widely used, would keep it as manual tagging.

Also disambiguate `case` in text context, pretty sure English is one of
the very rare languages to use this word for character case too.
2022-08-22 15:24:21 +02:00
Damien Picard
ee985fa925 I18n: disambiguate a few translations
- Keying (keyframe insertion)
- Roughness (particle children)
- New image, collection, text (in menus)
- Parents (particles)
- Wrap (text)
- Light (add menu)
- Empty (volume add menu)
- Empty (empty add menu)
- Cycles (f-curve modifier)
- Drag (workspace tool type)
- Power (light intensity)
- Power (math nodes)

This last change also moves all math operations in nodes to the
ID_nodetree context. It's needed only for some operations, but we
can't be more granular here.

Also...

- Fix context extraction for interpolation mode headers in F-Curves
  and GPencil interpolation operator
- Enable new translation: "Slot %d" in image editor
- Fix an English message in the node editor:
  "Replace the input image's alpha channels by..." -> channel

Ref. T43295

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D15694
2022-08-22 14:33:07 +02:00
aa7b2f1dd9 GPencil: New operator to convert strokes to perimeter.
This operator converts any stroke of gpencil with a center line into a stroke with the perimeter.

It's possible to assign the active material, keep current or create a new material for all perimeters.

The conversion is only done for strokes with a material using `Stroke`. Only `Fill` strokes are not converted.

Known issues: As the perimter has not boolean implementation, some perimeters can be overlaped. This could be solved in the future when a new 2D boolean library will be developed.

Reviewed By: mendio, pepeland, frogstomp

Differential Revision: https://developer.blender.org/D15664
2022-08-18 16:30:27 +02:00
9a65dca37c Merge branch 'blender-v3.3-release' 2022-08-18 15:26:30 +02:00
8a799b00f8 Fix T100423: Addon's custom context menu entries get overridden by other addons
This introduces a new `UI_MT_button_context_menu` class which is
registered at startup. Addons can append/prepend draw functions to this
class, in order to add their custom context menu entries.

The new class replaces the old `WM_MT_button_context` class, thus
requiring a small change in addons using this feature. This is done
because addons were previously required to register the class
themselves, which caused addons to override each other's context menu
entries.

Now the class registration is handled by Blender, and addons need only
append their draw functions. The new class name ensures that addons
using the old method don't override menu entries made using the new
class.

Menu entries added with the legacy `WM_MT_button_context` class are
still drawn for backwards compatibility, but this class must not be used
going forward, as any addon using it still runs the risk of having its
menu entries overridden, and support for the legacy class is subject to
removal in a future version.

Reviewed By: campbellbarton

Maniphest Tasks: T100423

Differential Revision: https://developer.blender.org/D15702
2022-08-18 14:46:30 +02:00
f60b47f2c8 UI: Fix inconsistency use of uppercase/capitalization
Since VBO stands for vertex buffer object it should always be uppercase.

"Vertex" in "vertex buffer object" should only be capitalized at the
beginning of a sentence.
2022-08-17 22:23:48 +02:00
646ef6e157 UI: Avoid the word "Use" in checkbox labels
As per the writing styles guidelines.
https://wiki.blender.org/wiki/Human_Interface_Guidelines/Writing_Style
2022-08-17 22:14:28 +02:00
04a04e9f69 Merge branch 'blender-v3.3-release' 2022-08-17 18:08:37 +02:00
244ef1f0f5 LibOverride: Remove the 'make all editable' user preferences.
This behavior is now implicitely controlled by the 'Make' operations,
based either on context or selected items.
2022-08-17 18:08:18 +02:00
Fynn Grotehans
cdfe2e1c3f UI: Add View pie to File Browser
Adds a pie menu to the File Browser for convenient switching between vertical list, horizontal list and thumbnail view.

Uses the same shortcut as other View pie menus (`ACCENT_GRAVE`).

{F12811673}

Reviewed By: #user_interface, pablovazquez, Severin

Differential Revision: https://developer.blender.org/D13874
2022-08-16 18:10:18 +02:00
850126ab44 Merge branch 'blender-v3.3-release' 2022-08-16 15:43:24 +02:00
a42896a8a1 LibOverride: Refactor of menu entries in the View3D.
Move override creation into their own menu, add entries for reset and
clear operations.
2022-08-16 15:42:04 +02:00
90c14b1e44 Merge branch 'blender-v3.3-release' 2022-08-16 14:21:33 +02:00
a93f6a5429 LibOverride: Tweaks to new menus in Outliner.
Also add new outliner liboverride operators mapping to the manual,
though this is useless currently as this feature is not working in many
part of the UI, including the Outliner contextual menu.
2022-08-16 14:20:29 +02:00
3aeacb9ab3 Merge branch 'blender-v3.3-release' 2022-08-15 13:53:42 +02:00
8c77fa558a Cleanup: make format 2022-08-15 13:47:14 +02:00
67d7792503 EEVEE-Next: Light: New light module
Compared to the previous implementation this has a limit of 65536 lights
per scene. Lights exceeding this limit will be ignored.

This also introduce fine grained GPU light culling, making rendering
many lights in a scene more efficient as long they don't overlap much.

Compatible light panels have been unhidden.

Note: This commit does not include surface evaluation, only light culling.
2022-08-14 20:40:04 +02:00
4e5f9bbd34 Merge branch 'blender-v3.3-release'
Conflicts:
	source/blender/editors/space_outliner/outliner_tools.cc
2022-08-12 15:17:12 +02:00
c73cc15e07 LibOverride: Rework Outliner contextual menu.
Follow-up to design discussions here at the studio, add liboverride
operations into their own sub-menu, with three main entries:
- Create: Create, or enable for user editing, override hierarchies.
- Reset: Keep overrides data, but reset all local changes to the
  reference linked data values.
- Clear: like reset, but also turn editable overrides back to system
  overrides (aka non user editable).

Those three options can all operate either on the selected items, their
content only, or both.

Advanced operations are moved into a "Troubleshoot Hierarchy" sub-menu,
where one can resync, resync enforced, and fully delete library
overrides. Those operations always affect a whole override hierarchy,
regardless of which items are selected or not.
2022-08-12 15:11:59 +02:00
7f733e294d Merge branch 'blender-v3.3-release' 2022-08-12 14:43:53 +10:00
95cc5c6081 Fix T96885: Drag Fallback on Tweak is using Move instead
Since [0] (fix for T95591), the tweak tools fallback action used tweak
instead of press.

This was enabled so tools such as "Measure" & "Add Cube" could use
fallback tools (otherwise is wasn't possible to add a new ruler without
also selecting for e.g.), however this is of limited use since both
tools support dragging anywhere to activate, making them less useful
with other selection tools beside tweak (box/lasso for e.g.).

Resolve by disabling the fallback option for tools where using the
tweak tool to select is undesirable. Selection by clicking with
"Measure" & "Add Cube" is still supported as this is also set in the
3D view's key-map.

[0]: 0e51defcf4
2022-08-12 14:24:31 +10:00
a6d2fcef9f Cleanup: group translation imports 2022-08-12 12:07:52 +10:00
7347252f0f Cleanup: remove unnecessary icon assignment 2022-08-12 11:05:45 +10:00
dfd2570d28 WM: define WM_OT_drop_blend_file path as a file-path, skip-save
File paths have special handling of non-utf8 characters, so it's
best to use the FILE_PATH sup-type for all file-paths.
2022-08-12 10:59:14 +10:00
d52d71b834 Cleanup: doxy parameters, use static set instead of tuple 2022-08-11 11:17:24 +10:00