Improve Palette management in Paint Modes (Meshes and Grease Pencil) #71705

Open
opened 2019-11-20 17:05:42 +01:00 by Antonio Vazquez · 35 comments

This is not a task only related to Grease Pencil, but also to any Paint mode.

As part of the Vertex Paint development in Grease Pencil, we have detected some missing features in Palettes and we have decided to fix it, because Palettes look a little outdate and without improvements for several versions.

Missing features/ WishList:

  • There is no default palette.
  • Swatches cannot be re-arranged
  • Colors cannot be sorted
  • Colors can't be named
  • Palettes cannot be merged
  • templatePalette control UI is outdated
  • No ability to import palettes from other software
  • No ability to export palettes to other software
  • Missing easy way to create palettes from images

About default palette, in grease pencil we have implemented a default palette similar to Krita/GImp palette. This palette is required by GPencil, but it would be good idea to set this default palette in Texture Paint and Vertex Paint for meshes too.

Currently, I have solved the Sorting, Moving, Join and some Import modules in Grease Pencil branch, but the list above is the initial ideas.

This is not a task only related to Grease Pencil, but also to any Paint mode. As part of the Vertex Paint development in Grease Pencil, we have detected some missing features in Palettes and we have decided to fix it, because Palettes look a little outdate and without improvements for several versions. Missing features/ WishList: * There is no default palette. * Swatches cannot be re-arranged * Colors cannot be sorted * Colors can't be named * Palettes cannot be merged * templatePalette control UI is outdated * No ability to import palettes from other software * No ability to export palettes to other software * Missing easy way to create palettes from images About default palette, in grease pencil we have implemented a default palette similar to Krita/GImp palette. This palette is required by GPencil, but it would be good idea to set this default palette in Texture Paint and Vertex Paint for meshes too. Currently, I have solved the Sorting, Moving, Join and some Import modules in Grease Pencil branch, but the list above is the initial ideas.
Antonio Vazquez self-assigned this 2019-11-20 17:05:42 +01:00
Author
Member
Added subscribers: @antoniov, @mendio, @pablovazquez, @WilliamReynish, @pepe-school-land, @dfelinto
Author
Member

Example of moving colors:

Palette.gif

Example creating a Palette from Image:

Extract_Palette.gif

Example of moving colors: ![Palette.gif](https://archive.blender.org/developer/F8148286/Palette.gif) Example creating a Palette from Image: ![Extract_Palette.gif](https://archive.blender.org/developer/F8148290/Extract_Palette.gif)
Member

Added subscriber: @PabloDobarro

Added subscriber: @PabloDobarro
Author
Member

See blender/blender-addons#71548 for import add-ons

See blender/blender-addons#71548 for import add-ons
Author
Member

Example of default palette defined in grease pencil branch (equals to Krita default).

image.png

Example of default palette defined in grease pencil branch (equals to Krita default). ![image.png](https://archive.blender.org/developer/F8148308/image.png)
Author
Member

Example of Photoshop default palette imported using new addon of blender/blender-addons#71548

image.png

Example of Photoshop default palette imported using new addon of blender/blender-addons#71548 ![image.png](https://archive.blender.org/developer/F8148312/image.png)

The palette list does not follow the UI of other lists in Blender, and with new operators we will need more buttons and menus:

palette.PNG

The palette list does not follow the UI of other lists in Blender, and with new operators we will need more buttons and menus: ![palette.PNG](https://archive.blender.org/developer/F8148332/palette.PNG)
Member

Added subscriber: @HooglyBoogly

Added subscriber: @HooglyBoogly
Member

That right side looks quite a bit better, I agree.

Small thing but it would also be cool if "Extract Palette" used the same name as the image for the palette.

That right side looks quite a bit better, I agree. Small thing but it would also be cool if "Extract Palette" used the same name as the image for the palette.

Added subscriber: @JulianEisel

Added subscriber: @JulianEisel

Example of moving colors

I really would prefer if we can solve this with drag and drop, rather than adding more Up/Down arrow buttons. Not only is it unsightly and ungainly, it's also impractical if you want to move a color swatch 40 places up, you'd have to click that button 40 times!

@JulianEisel Is this another thing that could be handled by your drag and drop system?

> Example of moving colors I really would prefer if we can solve this with drag and drop, rather than adding more Up/Down arrow buttons. Not only is it unsightly and ungainly, it's also impractical if you want to move a color swatch 40 places up, you'd have to click that button 40 times! @JulianEisel Is this another thing that could be handled by your drag and drop system?
Member

In #71705#814106, @WilliamReynish wrote:
@JulianEisel Is this another thing that could be handled by your drag and drop system?

It will not be handled by D4071, but should be once we extend it for #67893 (Drag and Drop for UI elements).

> In #71705#814106, @WilliamReynish wrote: > @JulianEisel Is this another thing that could be handled by your drag and drop system? It will not be handled by [D4071](https://archive.blender.org/developer/D4071), but should be once we extend it for #67893 (Drag and Drop for UI elements).

Added subscriber: @MaciejJutrzenka

Added subscriber: @MaciejJutrzenka

In #71705#814106, @WilliamReynish wrote:

Example of moving colors

I really would prefer if we can solve this with drag and drop, rather than adding more Up/Down arrow buttons. Not only is it unsightly and ungainly, it's also impractical if you want to move a color swatch 40 places up, you'd have to click that button 40 times!

@JulianEisel Is this another thing that could be handled by your drag and drop system?

this yes! so much i absolutly hate this up/down arrow design +1 to your idea

> In #71705#814106, @WilliamReynish wrote: >> Example of moving colors > > I really would prefer if we can solve this with drag and drop, rather than adding more Up/Down arrow buttons. Not only is it unsightly and ungainly, it's also impractical if you want to move a color swatch 40 places up, you'd have to click that button 40 times! > > @JulianEisel Is this another thing that could be handled by your drag and drop system? this yes! so much i absolutly hate this up/down arrow design +1 to your idea

In #71705#814106, @WilliamReynish wrote:

Example of moving colors

I really would prefer if we can solve this with drag and drop, rather than adding more Up/Down arrow buttons. Not only is it unsightly and ungainly, it's also impractical if you want to move a color swatch 40 places up, you'd have to click that button 40 times!

@JulianEisel Is this another thing that could be handled by your drag and drop system?

Totally agree, but this is somewhat more general for all list controls in Blender. It's not the main topic of this task, we can implement it when drag and drop to rearrange list items is ready

> In #71705#814106, @WilliamReynish wrote: >> Example of moving colors > > I really would prefer if we can solve this with drag and drop, rather than adding more Up/Down arrow buttons. Not only is it unsightly and ungainly, it's also impractical if you want to move a color swatch 40 places up, you'd have to click that button 40 times! > > @JulianEisel Is this another thing that could be handled by your drag and drop system? Totally agree, but this is somewhat more general for all list controls in Blender. It's not the main topic of this task, we can implement it when drag and drop to rearrange list items is ready
Antonio Vazquez changed title from Improve Palette management to Improve Palette management in Paint Modes (Meshes and Grease Pencil) 2019-11-24 11:47:22 +01:00

Added subscriber: @joules-2

Added subscriber: @joules-2

Great to see palettes getting some care.
From the python API perspective, I would like also to use palettes generally, (specifically with materials/shader editor), but any kind of flexibility would be useful.
At the moment, I had trouble getting a custom palette property to behave, it seems template_palette is limited in scope and not much is exposed within the API and locked down to update parts in the UI it only knows about.
I wouldn't know where to start since Palette and specifically how PaletteColor behaves is quite unique CTRL-click to change, click to update the color picker; but currently only the color picker it knows about.
But since Palette.colors is a collection property itself, perhaps a new template?

template_palette_colors(myproperty.active_palette, "colors", myproperty, "picker_color")

Not to mention the required operators (new, remove, etc)

Just some thoughts. Thanks again.

Great to see palettes getting some care. From the python API perspective, I would like also to use palettes generally, (specifically with materials/shader editor), but any kind of flexibility would be useful. At the moment, I had trouble getting a custom palette property to behave, it seems template_palette is limited in scope and not much is exposed within the API and locked down to update parts in the UI it only knows about. I wouldn't know where to start since Palette and specifically how PaletteColor behaves is quite unique CTRL-click to change, click to update the color picker; but currently only the color picker it knows about. But since Palette.colors is a collection property itself, perhaps a new template? ``` template_palette_colors(myproperty.active_palette, "colors", myproperty, "picker_color") ``` Not to mention the required operators (new, remove, etc) Just some thoughts. Thanks again.

Added subscriber: @zeauro

Added subscriber: @zeauro

I don't know if it is possible. But it could be interesting to keep space to be able to display it as an horizontal ribbon.
mock-up_horizontal_ribbon_palette.jpg
I imagine that by pressing Tab with mouse pointer over tool settings bar, this bar would display a ribbon of colors instead of brush settings.

Such behavior would be as useful for a weight paint palette.

I don't know if it is possible. But it could be interesting to keep space to be able to display it as an horizontal ribbon. ![mock-up_horizontal_ribbon_palette.jpg](https://archive.blender.org/developer/F8167777/mock-up_horizontal_ribbon_palette.jpg) I imagine that by pressing Tab with mouse pointer over tool settings bar, this bar would display a ribbon of colors instead of brush settings. Such behavior would be as useful for a weight paint palette.

Added subscriber: @RobertWesseling

Added subscriber: @RobertWesseling

An additional idea:
I remember in another render engine (older version of Appleseed I believe) we were able to define colors, like global colors that can be re-used in shaders.
If we could re-use the colors of a color palette for shaders then we could also just change the color palette to change the colors of all shaders in one go. To get an idea, check: https://youtu.be/DkznarCvPEQ?t=33

An additional idea: I remember in another render engine (older version of Appleseed I believe) we were able to define colors, like global colors that can be re-used in shaders. If we could re-use the colors of a color palette for shaders then we could also just change the color palette to change the colors of all shaders in one go. To get an idea, check: https://youtu.be/DkznarCvPEQ?t=33

In #71705#817743, @RobertWesseling wrote:
An additional idea:
I remember in another render engine (older version of Appleseed I believe) we were able to define colors, like global colors that can be re-used in shaders.
If we could re-use the colors of a color palette for shaders then we could also just change the color palette to change the colors of all shaders in one go. To get an idea, check: https://youtu.be/DkznarCvPEQ?t=33

Yes, currently my addon injects a custom RGB node (named/identifier is unique) into a shader which allows easy access to coloring outside of the shader and to experiment with visual ideas. However palettes at this stage are limited in scope as I mentioned and was only able to resort to this solution which is far from optimal.
custompalette.png

> In #71705#817743, @RobertWesseling wrote: > An additional idea: > I remember in another render engine (older version of Appleseed I believe) we were able to define colors, like global colors that can be re-used in shaders. > If we could re-use the colors of a color palette for shaders then we could also just change the color palette to change the colors of all shaders in one go. To get an idea, check: https://youtu.be/DkznarCvPEQ?t=33 Yes, currently my addon injects a custom RGB node (named/identifier is unique) into a shader which allows easy access to coloring outside of the shader and to experiment with visual ideas. However palettes at this stage are limited in scope as I mentioned and was only able to resort to this solution which is far from optimal. ![custompalette.png](https://archive.blender.org/developer/F8171033/custompalette.png)

Added subscriber: @MichaelOtto

Added subscriber: @MichaelOtto

Added subscriber: @CMC

Added subscriber: @CMC

Added subscriber: @RomboutVersluijs

Added subscriber: @RomboutVersluijs

Ive added more sorting methods which i believe work better. Also added CSS and fixed KPL and ASE import. Its almost done, i couldn't get it all working for the release though. Im still working on a function which can also restore the order if the user doesn't like the result of the sorting.

Screen Shot 2020-03-29 at 16.08.35.png

Ive added more sorting methods which i believe work better. Also added CSS and fixed KPL and ASE import. Its almost done, i couldn't get it all working for the release though. Im still working on a function which can also restore the order if the user doesn't like the result of the sorting. ![Screen Shot 2020-03-29 at 16.08.35.png](https://archive.blender.org/developer/F8435691/Screen_Shot_2020-03-29_at_16.08.35.png)
Author
Member

@RomboutVersluijs This is great! When you hav ethe code ready, please upload a patch for review.

@RomboutVersluijs This is great! When you hav ethe code ready, please upload a patch for review.

@antoniov ive looked a bit into how to work with that. I haven't found a method to only make a patch for single addons. Is it correct i need to fork all of them? I normally use github for this kind of stuff. I know nothing about the other. Ill try my best to figure out everything.

Currenlty menu looks like this. I would also like to see if i can get the export working. That would be nice if one need to paint in a different application and also want to use the same palette.

@antoniov ive looked a bit into how to work with that. I haven't found a method to only make a patch for single addons. Is it correct i need to fork all of them? I normally use github for this kind of stuff. I know nothing about the other. Ill try my best to figure out everything. Currenlty menu looks like this. I would also like to see if i can get the export working. That would be nice if one need to paint in a different application and also want to use the same palette.
Author
Member

@RomboutVersluijs You can do a ptach following these steps:

  1. Create a branch based on master addon
  2. Apply your changes in this temp branch and commit
  3. using ARC: arc diff

if don't use ARC, you can create a patch manually (step 3):

  1. Change to master branch
  2. git diff master mybranch > c:/tmp/mypatch.diff
  3. Copy the diff to the patch screen: https://developer.blender.org/differential/diff/create/
@RomboutVersluijs You can do a ptach following these steps: 1) Create a branch based on master addon 2) Apply your changes in this temp branch and commit 3) using ARC: `arc diff` if don't use ARC, you can create a patch manually (step 3): 1) Change to master branch 2) `git diff master mybranch > c:/tmp/mypatch.diff` 3) Copy the diff to the patch screen: https://developer.blender.org/differential/diff/create/

Im on OSX, but what i don't fully understand is why do i need to fork or get the complete addon branch? Or am i not understanding it correct? SOrry for the fuzz

Im on OSX, but what i don't fully understand is why do i need to fork or get the complete addon branch? Or am i not understanding it correct? SOrry for the fuzz
Author
Member

@RomboutVersluijs To have a branch is to get your changes separated and be able to generate a diff patch. A branch in Git just use few bytes, it's not a copy.

@RomboutVersluijs To have a branch is to get your changes separated and be able to generate a diff patch. A branch in Git just use few bytes, it's not a copy.
Antonio Vazquez removed their assignment 2020-08-18 16:32:51 +02:00
Contributor

Added subscriber: @Nika-Kutsniashvili

Added subscriber: @Nika-Kutsniashvili
Philipp Oeser removed the
Interest
User Interface
label 2023-02-10 09:25:04 +01:00

I like to work a bit more and this addon. About making a pull request. Do I need to get the complete repository with all the addons or can I pick just a single addon as repo?

I like to work a bit more and this addon. About making a pull request. Do I need to get the complete repository with all the addons or can I pick just a single addon as repo?

You would need the entire repository (until this becomes its own project - either incorporated into Blender or maintained indepently as part of the extensions platform)

You would need the entire repository (until this becomes its own project - either incorporated into Blender or maintained indepently as part of the extensions platform)

@dfelinto
Thanks for the answer. One more question, I can't find info about. Sayi work on object_edit_linked, make a new branch and add my altered version. Right before a pull request I checkout the online original repo once more and it has lots of updates in other addons ik not working on and shows lots of conflicts. Doesn't mean I need Todo much more work on other parts on which I'm not actually working?

Hope my explanationakes sense to you

@dfelinto Thanks for the answer. One more question, I can't find info about. Sayi work on object_edit_linked, make a new branch and add my altered version. Right before a pull request I checkout the online original repo once more and it has lots of updates in other addons ik not working on and shows lots of conflicts. Doesn't mean I need Todo much more work on other parts on which I'm not actually working? Hope my explanationakes sense to you
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
15 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#71705
No description provided.