WIP: Sculpt: Repeat last stroke for sculpt #113270

Draft
Joseph Eagar wants to merge 12 commits from JosephEagar/blender:temp-sculpt-repeat-last-stroke into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
Member

This PR adds support for repeating the last sculpt stroke, along with a new "repeat last relative"
operator bound to alt-shift-R that repeats the last stroke at the current brush location
using a tangent frame derived from the surface normal and the camera (sculpt mode only).

Dev Notes:

  • paint_brush_stroke_add_step no longer deletes the stroke RNA
    data if the paint operator has flag OPTYPE_REGISTER set.
  • Added a new method WM_operator_repeat_clone that repeats
    with a cloned operator (it just calls wm_operator_invoke).
This PR adds support for repeating the last sculpt stroke, along with a new "repeat last relative" operator bound to `alt-shift-R` that repeats the last stroke at the current brush location using a tangent frame derived from the surface normal and the camera (sculpt mode only). Dev Notes: * `paint_brush_stroke_add_step` no longer deletes the stroke RNA data if the paint operator has flag `OPTYPE_REGISTER` set. * Added a new method `WM_operator_repeat_clone` that repeats with a cloned operator (it just calls `wm_operator_invoke`).
Joseph Eagar added 1 commit 2023-10-05 04:08:42 +02:00
buildbot/vexp-code-patch-coordinator Build done. Details
195310e0ef
Sculpt: Repeat last stroke for sculpt
Add support for repeating strokes to sculpt mode:
 * `paint_brush_stroke_add_step` no longer deletes the stroke RNA
   data if the paint operator has flag `OPTYPE_REGISTER` set.
 * Added a new method `WM_operator_repeat_clone` that repeats
   with a cloned operator (it just calls `wm_operator_invoke`).
 * Added a "repeat last relative" operator that executes the last
   stroke at the current brush location using a tangent frame derived
   from the surface normal and the camera. It's shortcut is
   `Shift-Alt-R`.
Author
Member

@blender-bot package

@blender-bot package
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR113270) when ready.
Julien Kaspar added the
Module
Sculpt, Paint & Texture
label 2023-10-05 11:43:57 +02:00
Member

I tested it for a bit. Overall is a great addition and works. I have some notes:

  • Undo forgets the last stroke. Seems like a general limitation with repeating any operations. Would be great to fix that too
  • It looks like the wrong strength is applied. Repeat Last is generally way to strong
  • Currently the repeated strokes never accumulate. Is this expected? Should this depend on the Accumulate brush setting or should repeated strokes always be treated as a brand new stroke? (This is expected for now)
  • Repeat Last (Relative) has a hard time following surface curvature correctly. To fix this it could be applied in screen space instead and the stroke is conforming the the new curvature underneath.
  • The Repeat Last (Relative) operator should be added to a menu. We could add it to the Edit menu in the top bar right under Repeat Last and grey it out anywhere except Sculpt Mode (unless it gets support for other modes in some way).
I tested it for a bit. Overall is a great addition and works. I have some notes: - [ ] Undo forgets the last stroke. Seems like a general limitation with repeating any operations. Would be great to fix that too - [x] It looks like the wrong strength is applied. `Repeat Last` is generally way to strong - [x] ~~Currently the repeated strokes never accumulate. Is this expected? Should this depend on the `Accumulate` brush setting or should repeated strokes always be treated as a brand new stroke?~~ (This is expected for now) - [ ] `Repeat Last (Relative)` has a hard time following surface curvature correctly. To fix this it could be applied in screen space instead and the stroke is conforming the the new curvature underneath. - [x] The `Repeat Last (Relative)` operator should be added to a menu. We could add it to the Edit menu in the top bar right under `Repeat Last` and grey it out anywhere except Sculpt Mode (unless it gets support for other modes in some way).
Author
Member

I tested it for a bit. Overall is a great addition and works. I have some notes:

  • Undo forgets the last stroke. Seems like a general limitation with repeating any operations. Would be great to fix that too

Right. It shouldn't do that, that was part of the reason why I made it clone the operator instead of using the old one in-place.

  • It looks like the wrong strength is applied. Repeat Last is generally way to strong

I'll take a look.

  • Currently the repeated strokes never accumulate. Is this expected? Should this depend on the Accumulate brush setting or should repeated strokes always be treated as a brand new stroke?

This is expected, yes. Making it accumulate would require special per-brush logic and it's own operator, but it is possible.

  • Repeat Last (Relative) has a hard time following surface curvature correctly. To fix this it could be applied in screen space instead and the stroke is conforming the the new curvature underneath.

I'll try it out.

  • The Repeat Last (Relative) operator should be added to a menu. We could add it to the Edit menu in the top bar right under Repeat Last and grey it out anywhere except Sculpt Mode (unless it gets support for other modes in some way).

Will do.

> I tested it for a bit. Overall is a great addition and works. I have some notes: > > - Undo forgets the last stroke. Seems like a general limitation with repeating any operations. Would be great to fix that too Right. It shouldn't do that, that was part of the reason why I made it clone the operator instead of using the old one in-place. > - It looks like the wrong strength is applied. `Repeat Last` is generally way to strong I'll take a look. > - Currently the repeated strokes never accumulate. Is this expected? Should this depend on the `Accumulate` brush setting or should repeated strokes always be treated as a brand new stroke? This is expected, yes. Making it accumulate would require special per-brush logic and it's own operator, but it is possible. > - `Repeat Last (Relative)` has a hard time following surface curvature correctly. To fix this it could be applied in screen space instead and the stroke is conforming the the new curvature underneath. I'll try it out. > - The `Repeat Last (Relative)` operator should be added to a menu. We could add it to the Edit menu in the top bar right under `Repeat Last` and grey it out anywhere except Sculpt Mode (unless it gets support for other modes in some way). Will do.
Julien Kaspar requested review from Julien Kaspar 2023-10-06 12:12:25 +02:00
Julien Kaspar requested review from Sergey Sharybin 2023-10-06 12:12:44 +02:00
Julien Kaspar requested review from Hans Goudey 2023-10-06 12:12:44 +02:00
Sergey Sharybin requested changes 2023-10-09 18:13:22 +02:00
Sergey Sharybin left a comment
Owner

There are some review points. It might also worth adding someone who is more familiar with the WM and operator invocation. That part seems a bit strange to me, but maybe it is just what it is.

There are some review points. It might also worth adding someone who is more familiar with the WM and operator invocation. That part seems a bit strange to me, but maybe it is just what it is.
@ -5630,6 +5630,40 @@ bool SCULPT_handles_colors_report(SculptSession *ss, ReportList *reports)
return false;
}
void SCULPT_create_repeat_frame(Object *ob, float mat[3][3], float viewinv[4][4], float normal[3])

In the new code we should use the bli::math type of primitives, something like: float3x3 SCULPT_create_repeat_frame(const Object *object, const float4x4 &view_inv, const float3 %normal)

In the new code we should use the bli::math type of primitives, something like: `float3x3 SCULPT_create_repeat_frame(const Object *object, const float4x4 &view_inv, const float3 %normal)`
Sergey marked this conversation as resolved
@ -5632,1 +5632,4 @@
void SCULPT_create_repeat_frame(Object *ob, float mat[3][3], float viewinv[4][4], float normal[3])
{
float viewTan[3] = {1.0f, 0.0f, 0.0f};

Naming: snake_style for variables.

Naming: snake_style for variables.
Sergey marked this conversation as resolved
@ -5633,0 +5634,4 @@
{
float viewTan[3] = {1.0f, 0.0f, 0.0f};
invert_m4_m4(ob->world_to_object, ob->object_to_world);

The new code should no overwrite the world_to_object . It is done as part of the scene evaluation.

The new code should no overwrite the `world_to_object `. It is done as part of the scene evaluation.
JosephEagar marked this conversation as resolved
@ -5954,3 +5992,3 @@
/* Flags (sculpt does own undo? (ton)). */
ot->flag = OPTYPE_BLOCKING;
ot->flag = OPTYPE_BLOCKING | OPTYPE_REGISTER;

Doing so makes it so this operator becomes available in the "Repeat history". Not sure if that's an intended change, but it seems big enough to be mentioned in the PR description.

Doing so makes it so this operator becomes available in the "Repeat history". Not sure if that's an intended change, but it seems big enough to be mentioned in the PR description.
Author
Member

This is the brush stroke operator.

This is the brush stroke operator.

it is hard to argue it is a brush stroke operator, but that wasn't a point. Unless there is some other not-so-obvious connection between Repeat History, presentation, and the fact that it is a brush stroke operator.

it is hard to argue it is a brush stroke operator, but that wasn't a point. Unless there is some other not-so-obvious connection between Repeat History, presentation, and the fact that it is a brush stroke operator.
Author
Member

It won't work without OPTYPE_REGISTER, operators without it aren't inserted into the recent operator list at all.

It won't work without OPTYPE_REGISTER, operators without it aren't inserted into the recent operator list at all.
@ -5959,3 +5997,4 @@
paint_stroke_operator_properties(ot);
RNA_def_float_array(ot->srna, "repeat_tangent_frame", 9, 0, -1, 1, "", "", 0, 0);

This should have PROP_HIDDEN, and likely PROP_SKIP_SAVE as well. Not sure if that's enough to make the property hidden in the keymap editor. but it definitely should not be exposed there.

This should have `PROP_HIDDEN`, and likely `PROP_SKIP_SAVE` as well. Not sure if that's enough to make the property hidden in the keymap editor. but it definitely should not be exposed there.
JosephEagar marked this conversation as resolved
@ -1362,0 +1387,4 @@
return false;
}
wmWindowManager *wm = CTX_wm_manager(C);
return !BLI_listbase_is_empty(&wm->operators);

repeat_last_get_op returned true here, so the operator list is not empty. Why is this extra check?

`repeat_last_get_op ` returned true here, so the operator list is not empty. Why is this extra check?
Author
Member

You're right.

You're right.
JosephEagar marked this conversation as resolved
@ -1362,0 +1448,4 @@
RNA_END;
WM_operator_free_all_after(wm, lastop);
WM_operator_repeat_clone(C, lastop);

Is my understanding correct that this code first overrides an existing operator and then re-executes it under the new undo stack entry?

This seems fragile, as the stroke location seem to run out of sync from the tangent frame, and will also make the "Repeat History" not work as expected.

Is my understanding correct that this code first overrides an existing operator and then re-executes it under the new undo stack entry? This seems fragile, as the stroke location seem to run out of sync from the tangent frame, and will also make the "Repeat History" not work as expected.
Author
Member

Oh, I should've replied to this first. No, it clones the operator.

Oh, I should've replied to this first. No, it clones the operator.

But before the operator is cloned the code above modifies stroke property of the lastop. So intuitively clone happens after modification.

But before the operator is cloned the code above modifies `stroke` property of the `lastop`. So intuitively clone happens after modification.
Author
Member

I changed it to clone the operator properties. We probably should have the wm changes reviewed by someone, any idea who?

I changed it to clone the operator properties. We probably should have the wm changes reviewed by someone, any idea who?

Julian, Campbell, or Brecht would be my guess based on the module page.

Julian, Campbell, or Brecht would be my guess based on the module page.
@ -1362,0 +1450,4 @@
WM_operator_free_all_after(wm, lastop);
WM_operator_repeat_clone(C, lastop);
return OPERATOR_CANCELLED;

OPERATOR_FINISHED ?

`OPERATOR_FINISHED` ?
Author
Member

The operator itself doesn't do anything, it just executes another one. SCREEN_OT_repeat_last does the same thing.

The operator itself doesn't do anything, it just executes another one. `SCREEN_OT_repeat_last` does the same thing.
JosephEagar marked this conversation as resolved
@ -746,3 +746,3 @@
int WM_operator_repeat(bContext *C, wmOperator *op);
int WM_operator_repeat_last(bContext *C, wmOperator *op);
/**
int WM_operator_repeat_clone(bContext *C, wmOperator *op);

I am confused by the naming. What does the "clone" refer to?

I am confused by the naming. What does the "clone" refer to?
Author
Member

Instead of re-using the existing operator in the operator stack, it clones a new one. That way repeat last relative isn't changing RNA properties in the original operator. I could remove it if it's okay to change properties in the original operator.

Instead of re-using the existing operator in the operator stack, it clones a new one. That way repeat last relative isn't changing RNA properties in the original operator. I could remove it if it's okay to change properties in the original operator.

Maybe call it WM_operator_clone_and_repeat ?
And add the description from the in-lined PR comment to the public header as it helps understanding what exactly the function is for.

Maybe call it `WM_operator_clone_and_repeat` ? And add the description from the in-lined PR comment to the public header as it helps understanding what exactly the function is for.
JosephEagar marked this conversation as resolved
@ -748,1 +748,3 @@
/**
int WM_operator_repeat_clone(bContext *C, wmOperator *op);
/**

Unrelated change. Run clang-format, should get rid of it.

Unrelated change. Run clang-format, should get rid of it.
JosephEagar marked this conversation as resolved
Joseph Eagar added 2 commits 2023-10-10 00:47:43 +02:00
Joseph Eagar added 1 commit 2023-10-10 00:49:53 +02:00
Sergey Sharybin reviewed 2023-10-17 11:43:02 +02:00
@ -1649,6 +1653,7 @@ int paint_stroke_exec(bContext *C, wmOperator *op, PaintStroke *stroke)
if (stroke->stroke_started) {
RNA_BEGIN (op->ptr, itemptr, "stroke") {
stroke->ups->overlap_factor = RNA_float_get(&itemptr, "overlap_factor");

Isn't the overlap factor calculated once at the beginning of a stroke and used for all brush steps?

Isn't the overlap factor calculated once at the beginning of a stroke and used for all brush steps?
Author
Member

It's not , it's calculate per dab.

It's not , it's calculate per dab.
Author
Member

It's not , it's calculated per dab.

It's not , it's calculated per dab.
@ -5633,0 +5641,4 @@
float3 view_tan = {1.0f, 0.0f, 0.0f};
bool success;
float4x4 world_to_object = invert(float4x4(ob->object_to_world), success);

Why not float4x4 world_to_object = ob->world_to_object ?

Why not `float4x4 world_to_object = ob->world_to_object` ?
JosephEagar marked this conversation as resolved
@ -5960,2 +6000,4 @@
paint_stroke_operator_properties(ot);
PropertyRNA *prop = RNA_def_float_array(ot->srna, "repeat_tangent_frame", 9, 0, -1, 1, "", "", 0, 0);
RNA_def_property_flag(prop, PROP_SKIP_SAVE|PROP_HIDDEN);

Clang-format.

Also, did you check on your end the property is hidden in the keymap editor? I was testing the patch and the property was still exposed there.

Clang-format. Also, did you check on your end the property is hidden in the keymap editor? I was testing the patch and the property was still exposed there.
Author
Member

It is, yes.

It is, yes.
JosephEagar marked this conversation as resolved
@ -3939,1 +3939,4 @@
prop = RNA_def_property(srna, "overlap_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_flag(prop, PROP_IDPROPERTY);
RNA_def_property_ui_text(prop, "Factor used to attenuate strength from spacing.", "");

Seems like property description is used as property name. Also, don't think description is to include full-stop.

Seems like property description is used as property name. Also, don't think description is to include full-stop.
JosephEagar marked this conversation as resolved

On a user level it does seem very interesting and cool feature.

The implication of adding tangent matrix as an operator property is that it is visible in the keymap editor. Even after it was marked as skip and hidden. Is the keymap editor just ignores the hidden flag? In any case, I do not think we should be exposing such internal properties anywhere in the UI.

Not sure how useful it is to have this operator in the menu. Having it there will make the operator run relative to the mouse position when the menu item was clicked?

There are also some inlined questions. Maybe it will also worth adding a reviewer for the WM part, as some things which were more internal are more public now.

On a user level it does seem very interesting and cool feature. The implication of adding tangent matrix as an operator property is that it is visible in the keymap editor. Even after it was marked as skip and hidden. Is the keymap editor just ignores the hidden flag? In any case, I do not think we should be exposing such internal properties anywhere in the UI. Not sure how useful it is to have this operator in the menu. Having it there will make the operator run relative to the mouse position when the menu item was clicked? There are also some inlined questions. Maybe it will also worth adding a reviewer for the WM part, as some things which were more internal are more public now.
Member

Not sure how useful it is to have this operator in the menu. Having it there will make the operator run relative to the mouse position when the menu item was clicked?

@Sergey The menu operator should use the OPTYPE_DEPENDS_ON_CURSOR flag like many others. Not that useful to access the operator that way but great for discoverability.

> Not sure how useful it is to have this operator in the menu. Having it there will make the operator run relative to the mouse position when the menu item was clicked? @Sergey The menu operator should use the `OPTYPE_DEPENDS_ON_CURSOR` flag like many others. Not that useful to access the operator that way but great for discoverability.

@JulienKaspar Oh, that's interesting!

@JulienKaspar Oh, that's interesting!
Joseph Eagar added 1 commit 2023-10-20 22:58:02 +02:00
Joseph Eagar added 1 commit 2023-10-20 23:02:01 +02:00
Joseph Eagar added 1 commit 2023-10-21 04:25:13 +02:00
buildbot/vexp-code-patch-coordinator Build done. Details
81f65c366b
Run clang-format
Add repeat_last_relative to Sculpt menu.
Author
Member
  • The Repeat Last (Relative) operator should be added to a menu. We could add it to the Edit menu in the top bar right under Repeat Last and grey it out anywhere except Sculpt Mode (unless it gets support for other modes in some way).

Looks like it can't be added to the Edit menu since it expects a viewport context. I added it to the top of the Sculpt menu instead.

> - The `Repeat Last (Relative)` operator should be added to a menu. We could add it to the Edit menu in the top bar right under `Repeat Last` and grey it out anywhere except Sculpt Mode (unless it gets support for other modes in some way). Looks like it can't be added to the Edit menu since it expects a viewport context. I added it to the top of the Sculpt menu instead.
Author
Member

On a user level it does seem very interesting and cool feature.

The implication of adding tangent matrix as an operator property is that it is visible in the keymap editor. Even after it was marked as skip and hidden. Is the keymap editor just ignores the hidden flag? In any case, I do not think we should be exposing such internal properties anywhere in the UI.

It's not in the keymap editor anymore

> On a user level it does seem very interesting and cool feature. > > The implication of adding tangent matrix as an operator property is that it is visible in the keymap editor. Even after it was marked as skip and hidden. Is the keymap editor just ignores the hidden flag? In any case, I do not think we should be exposing such internal properties anywhere in the UI. It's not in the keymap editor anymore

@blender-bot package

@blender-bot package
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR113270) when ready.
Julien Kaspar requested changes 2023-10-23 11:06:02 +02:00
Julien Kaspar left a comment
Member

One more issue I noticed with Repeat Last:
When using an operation that opens the redo panel and then doing a stroke, the redo panel doesn't disappear. If any settings in the redo panel are changed, the stroke that came after and any repeated strokes will disappear.
Example:

  • Create a mask
  • Smooth the mask with A -> Smooth Mask
  • Make a sculpt stroke
  • Press Shift R a few times
  • Adjust a value in the redo panel for the smooth mask operation

Apart from this the repeat last operator is working exactly like expected. Imo that could go into main anytime, without the Repeat Last (Relative).

One more issue I noticed with Repeat Last: When using an operation that opens the redo panel and then doing a stroke, the redo panel doesn't disappear. If any settings in the redo panel are changed, the stroke that came after and any repeated strokes will disappear. Example: - Create a mask - Smooth the mask with `A` -> Smooth Mask - Make a sculpt stroke - Press `Shift R` a few times - Adjust a value in the redo panel for the smooth mask operation Apart from this the repeat last operator is working exactly like expected. Imo that could go into main anytime, without the Repeat Last (Relative).
Joseph Eagar added 1 commit 2023-10-24 03:21:29 +02:00
dbbf21ab4d The last operator RNA is no longer modified.
Instead, `WM_operator_repeat_clone` now takes a
properties argument.
Joseph Eagar added 1 commit 2023-10-24 03:23:27 +02:00
Joseph Eagar added 1 commit 2023-10-24 03:25:45 +02:00
Joseph Eagar added 1 commit 2023-10-24 03:45:26 +02:00

It's not in the keymap editor anymore

It still appears to be there Screenshot 2023-10-30 at 12.43.31.png

> It's not in the keymap editor anymore It still appears to be there ![Screenshot 2023-10-30 at 12.43.31.png](/attachments/c7380ccb-b4d1-4d72-ab15-5abcd7bbfcc0)
Joseph Eagar added a new dependency 2023-10-31 22:11:41 +01:00
Author
Member

Ok I added a PR fixing the keymap editor so it doesn't display hidden properties, #114344

Ok I added a PR fixing the keymap editor so it doesn't display hidden properties, #114344
Joseph Eagar added 1 commit 2023-11-01 21:33:14 +01:00
Joseph Eagar added a new dependency 2023-11-01 21:41:52 +01:00
Author
Member

Ok, I've split the WM part off into #114380

Ok, I've split the WM part off into #114380
Hans Goudey added this to the Sculpt, Paint & Texture project 2023-11-30 20:42:58 +01:00
Member

I tested it again to see where it's at. Some new notes:

  • The menu operator in Edit -> Repeat Last doesn't work for stroke. it only works via the shortcut. If Edit->Repeat Last is the wrong operator, then it should still be added to a menu.
  • When using Repeat Last on a stroke it seem way to strong with pressure sensitivity. It takes 4-5 Repeat Last operations to get to to the strength cap height, even if the initial stroke strength was a tiny fraction because of pressure sensitivity.

My previous comment is also not yet addressed.
I also thought the Repeat Last (Relative) operator should be split from this PR for now until it works like expected.

I tested it again to see where it's at. Some new notes: - The menu operator in Edit -> Repeat Last doesn't work for stroke. it only works via the shortcut. If Edit->Repeat Last is the wrong operator, then it should still be added to a menu. - When using Repeat Last on a stroke it seem way to strong with pressure sensitivity. It takes 4-5 Repeat Last operations to get to to the strength cap height, even if the initial stroke strength was a tiny fraction because of pressure sensitivity. My previous comment is also not yet addressed. I also thought the Repeat Last (Relative) operator should be split from this PR for now until it works like expected.
Sergey Sharybin changed title from Sculpt: Repeat last stroke for sculpt to WIP: Sculpt: Repeat last stroke for sculpt 2024-02-27 16:24:49 +01:00

Marking as Work-in-Progress, as the feedback needs to be incorporated, and it helps to introduce some clarity over the state of the PR in the workboard.

Marking as Work-in-Progress, as the feedback needs to be incorporated, and it helps to introduce some clarity over the state of the PR in the workboard.
Sergey Sharybin removed this from the Sculpt, Paint & Texture project 2024-04-02 16:14:20 +02:00
This pull request has changes conflicting with the target branch.
  • source/blender/editors/sculpt_paint/sculpt.cc
  • source/blender/editors/sculpt_paint/sculpt_ops.cc

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u temp-sculpt-repeat-last-stroke:JosephEagar-temp-sculpt-repeat-last-stroke
git checkout JosephEagar-temp-sculpt-repeat-last-stroke
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Reference: blender/blender#113270
No description provided.