Vertex Color/Attribute Edit Design #71947
Closed
opened 2019-11-27 00:08:47 +01:00 by Pablo Dobarro
·
59 comments
No Branch/Tag Specified
blender-v3.6-release
main
blender-v3.3-release
temp-sculpt-dyntopo
asset-shelf
temp-sculpt-dyntopo-hive-alloc
brush-assets-project
tmp-usd-python-mtl
asset-browser-frontend-split
node-group-operators
blender-v2.93-release
universal-scene-description
temp-sculpt-attr-api
blender-v3.5-release
realtime-clock
sculpt-dev
gpencil-next
bevelv2
microfacet_hair
blender-projects-basics
xr-dev
principled-v2
v3.3.7
v2.93.18
v3.5.1
v3.3.6
v2.93.17
v3.5.0
v2.93.16
v3.3.5
v3.3.4
v2.93.15
v2.93.14
v3.3.3
v2.93.13
v2.93.12
v3.4.1
v3.3.2
v3.4.0
v3.3.1
v2.93.11
v3.3.0
v3.2.2
v2.93.10
v3.2.1
v3.2.0
v2.83.20
v2.93.9
v3.1.2
v3.1.1
v3.1.0
v2.83.19
v2.93.8
v3.0.1
v2.93.7
v3.0.0
v2.93.6
v2.93.5
v2.83.18
v2.93.4
v2.93.3
v2.83.17
v2.93.2
v2.93.1
v2.83.16
v2.93.0
v2.83.15
v2.83.14
v2.83.13
v2.92.0
v2.83.12
v2.91.2
v2.83.10
v2.91.0
v2.83.9
v2.83.8
v2.83.7
v2.90.1
v2.83.6.1
v2.83.6
v2.90.0
v2.83.5
v2.83.4
v2.83.3
v2.83.2
v2.83.1
v2.83
v2.82a
v2.82
v2.81a
v2.81
v2.80
v2.80-rc3
v2.80-rc2
v2.80-rc1
v2.79b
v2.79a
v2.79
v2.79-rc2
v2.79-rc1
v2.78c
v2.78b
v2.78a
v2.78
v2.78-rc2
v2.78-rc1
v2.77a
v2.77
v2.77-rc2
v2.77-rc1
v2.76b
v2.76a
v2.76
v2.76-rc3
v2.76-rc2
v2.76-rc1
v2.75a
v2.75
v2.75-rc2
v2.75-rc1
v2.74
v2.74-rc4
v2.74-rc3
v2.74-rc2
v2.74-rc1
v2.73a
v2.73
v2.73-rc1
v2.72b
2.72b
v2.72a
v2.72
v2.72-rc1
v2.71
v2.71-rc2
v2.71-rc1
v2.70a
v2.70
v2.70-rc2
v2.70-rc
v2.69
v2.68a
v2.68
v2.67b
v2.67a
v2.67
v2.66a
v2.66
v2.65a
v2.65
v2.64a
v2.64
v2.63a
v2.63
v2.61
v2.60a
v2.60
v2.59
v2.58a
v2.58
v2.57b
v2.57a
v2.57
v2.56a
v2.56
v2.55
v2.54
v2.53
v2.52
v2.51
v2.50
v2.49b
v2.49a
v2.49
v2.48a
v2.48
v2.47
v2.46
v2.45
v2.44
v2.43
v2.42a
v2.42
v2.41
v2.40
v2.37a
v2.37
v2.36
v2.35a
v2.35
v2.34
v2.33a
v2.33
v2.32
v2.31a
v2.31
v2.30
v2.28c
v2.28a
v2.28
v2.27
v2.26
v2.25
Labels
Clear labels
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
Apply labels
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
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
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
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
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
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
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 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
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
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
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
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
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Set Project
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
35 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#71947
Reference in New Issue
There is no content yet.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may exist for a short time before cleaning up, in most cases it CANNOT be undone. Continue?
This task lists and details all tasks related to the design of a Sculpt/Vertex painting mode and a attribute edit mode.
2019-11-20 23-59-09.mp4
Vertex Colors Project Description
Sculpt/Paint Mode
By adding the MVertCol datalayer we can reuse the sculpt mode code to support painting functionality inside Blender.
This painting mode is intended to be an artistic painting mode with support for all tools and workflows designed for this task. Texturing, illustration and concept art uses cases fall into this category. This does not mean that other modes with other uses cases should not have brush tools or painting functionality.
This functionality is accesible inside the current Sculpt Mode to support features and workflows that could take advantage of sculpting and painting at the same time, as well as sharing common features instead of implementing a painting and a sculpting version of the same thing.
Tools
Paint Brush
Implementation of Blender´s main painting brush in Sculpt/Vertex paint
mode.
The behavior of this brush is most likely going to be used as a reference to implement 2D and 3D painting. The goal should be to support the same brush presets in all paint modes, so the implementation in the different paint modes should match.
Brush paint properties
Vertex Colores Test 1.mp4
Density noise
Density is a factor that controls how many elements inside the brush radius are going to be painted. This adds extra detail to the stroke without needing to add a texture. Useful for simulating pencils or organic mix brushes.
This works by hashing the pseudorandom values before applying the paint to each element (in this case, hashing the vertex index + brush position). Some other painting apps have the density seed fixed per stroke instead of per sample. We can add an option to support both.
Opacity/Flow
Opacity controls the alpha of the painting color (it is currently called strength in the UI, so it should be renamed for painting modes).
Flow controls how many brush samples are needed to reach the opacity alpha value. This is often explained as “how much paint the brush applies”.
To support that, the PBVH needs extra compositing buffers to mix the paint from the current stroke on top of the original colors.
Wet Mix/Persistence
This controls how much paint is picked from the surface and added to the brush color while painting. This is essential to support proper brush color blending while painting.
Falloff hardness
Hardness should be the main property to control the brush fall off. The current Falloff panel should be hidden in the UI as an advanced brush option as changing that curve breaks the intended behavior of the brushes.
Furthermore,Hardness is a linear property and it can be mapped to pressure or tilt, which is a basic behavior of any painting software.
As it is implemented now, hardness shifts the falloff interval towards the edges of the brush.
Some features in the sculpt and paint modes are already coded with a hard coded hardness value, so we need to replace it with the brush property.
Procedural tip shape
The functionality of this feature is implemented in brush_test_cube and it is shared with the sculpt Clay Strips brush. It allows to change the brush tip shape between a square and a circle.
Tip shape rotation
The paint brush should support tip rake rotation. The implementation is identical to the clay strip brush.
We can also support locking the initial rotation in screen space. This is useful for creating inking and lineart brushes with non uniform scaled tip shapes. The initial rotation can be controlled by another brush property.
This feature is more important in 2D paint than in 3D paint, so I need to investigate a correct way to implement it.
Tip shape scale
This is achieved by scaling the brush local space matrix. Exposing one axis as a brush property is enough as you should be able to set the rotation.
We can also look at using the brush tip scale to adjust the brush spacing accordingly, but it is not absolutely necessary.
Default brush presets
As the new brush with all the new painting properties is flexible enough to create brushes for different purposes, we may want to ship Blender with a small set of default brushes (like Grease Pencil).
We may need feedback from texture artist and illustrators to design a set that fits most users needs.
Brush input curves
Until we have the functions branch merged and the new brush input system in master, all brushes should come with a default input curve hard coded to get the correct behavior (this is something that was done during the 2.82 development in the sculpt brushes).
As part of this task, it may be needed to add extra flags to map pressure to some of the new attributes, similar to how we are now enabling pressure/size and pressure/strength. This flags won’t let users modify the curves.
After adding the new node based brush input system, all these attributes should be exposed to the node network and users would be able to choose how they want to map them to the pen pressure/tilt
Color Mix Modes
Add all the color mix modes available in Blender to the paint brush. The implementation is straightforward.
Paint Brush UI
We need to decide were to add the new brush properties in the UI. Properties like hardness should be easily accesible, both for sculpting and painting.
We may need to reconsider how the top bar is organized in Sculpt Mode, as currently it does not make much sense. Often the most important properties of the brush are hidden under a popover.
Color smooth brush
Simple color smoothing function, similar to the current mask smooth. It can be included as part of the main paint brush when pressing shift or as a separate tool.
Liquify tool
This brush tool should move the vertex colors without displacing the geometry. I need to check how to implement it, but it could be similar to the Slide/Relax brush.
Color filter
P2N6BZfTCgcLiz3s.mp4
The color filter is a tool that modifies all colors in the sculpt at once taking the sculpt mask into account. The implementation is exactly the same as the current mesh filter, so all extra modifications needed to support this are already in Blender (FilterCache, filter fully masked nodes)
Color fill
We may consider adding the color fill functionality to the color filter instead of adding a separate fill color operator. The main advantage is that users will be able to control the intensity of the fill in real time, because in sculpt mode the redo panel is not available. We need to add a color property to Sculpt to support this (similar to the Texture or Gravity Object datablock)
Texture color filter
Exact same implementation than the Mesh texture filter but for colors instead of for displacement. This needs a texture datablock to be in Sculpt, similar to the gravity object.
We may want to consider this later as it uses the old Texture datablock and nodes, which is currently deprecated.
Color editing filters
This is the standard set of color editing operations on colors, also available in Cycles/EEVEE and in the compositor. Most of these operators are already coded for MLoopCol and can be easily ported to the color filter.
Gradient tool
MS_Hf5pqrpjSTNf_.mp4
The gradient tool is almost identical to the color filter. The main differences are the input code (this tool needs the direction of the cursor movement) and the functions that are used to modify the colors.
It includes the basic types of gradients that are supported in most graphic editing software.
It also supports snapping to 90 degree angles and it takes the sculpt mask into account.
Top bar color ramp UI design
If we render the current color ramp template in the top bar in a single row it does not look nice (it usually needs 3 rows). We may want to improve this, but it does not affect the functionality of the feature.
Gradient types
All gradient types work the same, they just use a different geometry operation to determine the gradient (Distance to plane, distance, angle…)
Radial gradient
Gradient based on the distance to the initial position
Linear gradient
Gradient based in the distance to a plane
Circular gradient
Gradient based on the angle difference between the mouse drag vector and the initial position - vertex position vector.
Active vertex color picker
The painting sample_color operator should pick the color of the active vertex and assign in to the brush (or to the UnifiedPaintSettings color)instead of picking the shaded color from the viewport.
Features
Brush management
This task needs the asset manager in master in order to start.
Brush engine preview generator
This needs the new input system on top of the asset manager in order to start. The idea is to generate brush previews based on the parameters of the new brush engine and use them in the asset manager.
Asset manager global brush palette
After merging the asset manager, all brushes should be accesible from a single place, changing the tool automatically when you select a brush preset.
Import/export brushes
We need to decide how are we going to store, export and import brushes. This is an asset manager related task.
Import/export
Import/Export support for the vertex colors layers. We need to check which formats and use cases support this.
In the meanwhile we can use the vertex colors/attributes conversion operators to get the colors in an out or Blender
Sculpt mode integration
This describes different task that can be done to create new tools and workflows that can be done after supporting sculpting and painting in the same mode.
Sculpt + Paint at the same time
This feature is useful when creating concept art. As all the painting functionality shares the same code as sculpt mode, this is easy to support.
Paint capability
We need to add an extra paint capability to the brushes to enable only the sculpt brushes that make sense for painting (for example, it does not make sense that the pose brush applies paint).
Undo support
We need to add a SCULP_UNDO_COORD_COLOR flag to support storing the undo data for coordinates and colors at the same time. Internally, this is just calling both coord and color store functions in the same node undo push.
Sculpt mask integration
When painting, the sculpt mask and all the tools to edit it (mask filter, mask expand, box and lasso selections) can provide the same functionality as selections in other painting software, so we don’t need to code another selection system for painting.
Mask by color operator
Simple operator that mask all similar colors to the active vertex color.
Mask expand by color
The current mask expand supports two modes (topology and curvature). We can turn this operator property into an enum and add a mask expand color mode that calculates the mask expand factors based on the color differences. After this change, this operator should provide the same functionality of the “magic wand” or “smart selection” in other painting softwares.
Automask by color
The automasking code supports enabling multiple automasking operations. We can create another automasking modes that assigns mask values automatically based on the color difference of the active vertex when the stroke started. This can be useful when sculpting across painted ¨materials¨.
Remesh support
One of the main features of this paint mode is that you can sculpt on models with colors without using UV. This allows to keep the topology dynamic using the remeshers.
Voxel remesh Reprojection
This will add the “Preserver paint colors” option to the Voxel remesher. All vertex colors layers are recreated and colors are transferred using the nearest vertex color from the previous mesh. This is also how the “preserve sculpt mask” option works.
This function can be also added to Quadriflow, but it does not make much sense as Quadriflow is supposed to be used with Multires.
Quadrilfow reprojection to multires
Quadriflow remesh should produces a base mesh with the sculpt detail projected to the appropriate Multires level. This is currently not implemented as the current Multires modifier is not enabled for sculpting.
After enabling Multires and implementing this feature, it should also support vertex color reprojection.
Multires support
We need to check the status and roadmap of Multires before tackling these tasks. If sculpting multires is not fully functional, it does not make sense to add color features to it.
Multires color data layer
A datalayer needs to be added to support vertex colors in Multires, similar to how the Sculpt Mask works.
This also needs all necessary updates to Multires to support vertex colors in the grids.
Multires level propagation
Color values need to be propagated across levels without creating artifacts.
Multires texture baking
After finishing these task, Sculpt/Vertex paint mode will be a more advance painting more than Texture paint and some users will want to use it as the main painting mode. Until we design and update texture paint to support all these painting features it would be nice to have some baking functionality to be able to work on texture colors by converting them to vertex colors. Sculpt mode can easily work with 17M vertices + duplicates on Multires, so supporting painting a baked 4K texture on vertex colors seems like a reasonable use case.
Rendering
Workbench vertex color rendering
PBVH Rendering
Sculpt PBVH rendering support for regular meshes (PBVH_FACES). We also need to add support for PBVH_GRIDS if we want to support Multires.
Object Mode rendering
Regular workbench vertex color rendering for the rest of the modes. This should be enabled when enabling the vertex color mode in the Shading popover
EEVEE/Cycles vertex color node
Vertex Colors layers should be accesible with the Vertex Color node to render in Cycles/EEVEE.
Color management
Vertex colors are stored as floats in scene linear color soace as defined by the OpenColorIO configuration. By default this would be a linear color space with sRGB chromaticities. This is the same color space as for example material colors. That means these colors can be used as is for rendering without any color space transformation.
Note that by convention old vertex colors are stored in scene linear color space with the sRGB transform used for compressing them to bytes. This transform should be considered purely a compression and has no semantic meaning.
Attribute Edit Mode
Attribute Edit is intended to be a mode to modify and visualize any kind of data stored in mesh elements. Some use cases for it could be:
Some of these task could use a brush, but they don’t need a brush with artistic painting functionality. It does not make sense to edit the weights of a rig with a brush with wet paint and density noise.
Furthermore, these task could take advantage of a mode with more control and precision tools than an artistic painting mode, like precise elements selection and data editing, controlled value interpolation…
The plan is to use the current Vertex Paint mode as a base implementation for this mode and start adding all necessary features during multiple releases. It already has quite some work done because most users were using it with these use cases in mind.
This task is not as detailed as the Sculpt/Paint mode, but it should be enough to have an idea of its purpose, use cases and design goal.
Tools
Simple brush tools
The current Blender brush functionality is enough to support this kind of painting, if we consider painting changing the values of elements that are inside the cursor radius. We can reuse the current brush code for that.
Value interpolation tool
This tool could produce controllable interpolations of an attribute between two mesh elements following the mesh topology. For example:
Mesh elements selection
Attribute paint should provide tools for selecting mesh elements and assign values directly to them. This provides much more control than a brush. This could be useful when working with low poly models, where you want to assign values like armature weights in a precise way.
Mesh element masking
We can support a basic masking functionality for the brush that supports all mesh elements (not only vertices like the Sculpt/Paint mask). This can make easier some painting task.
Features
Data conversion operators
Attribute edit mode should provide a set of conversion tools to convert data between elements and other Blender data layers when possible. For example:
Per face corner color data to sculpt/vertex color data
This is a specific case of a conversion operator. Other conversion operators can be added in the future as we support more attribute types.
Internal attribute conversion
We need to identify what element/attribute type conversion combinations are more frequent and design how they can work (usually averaging the values). For example
Topology symmetry
We could support editing operations with symmetry based on the mesh topology instead of mirroring the XYZ axis.
Attribute data type selection
The use should be able to choose what kind of data he/she wants to edit and in which mesh element that data should be stored. For example
All tools should be aware of the data type of the layer and behave accordingly.
Import/Export
It should be possible to import and export meshes with different attributes in mesh elements. We need to check format compatibility.
Rendering
Attribute edit overlay
As we can make assumptions that the attributes are colors, we need to render a configurable overlay to display the data in an appropriate way.
Attribute rendering mode selector
The attribute rendering overlay should provide and UI to choose which rendering mode the user wants to render the data. This should include tools like a gradient editor, rendering two attributes at the same time, render vectors and randomly generated ID maps.
EEVEE/Cycles attribute node
The current attribute nodes exposes MLoopCol and UVs to the render, which are both loop attributes. We need to investigate how to expose face, vertex and edge values.
Development Plan
I recommend that the main priority for merging and reviewing the patches should be getting the full version of the paint brush to master as soon as possible, even with a temporally incomplete painting workflow. The design decisions on parameters, default values and behavior are really hard to get right, it would me nice to have as much artist feedback as possible. We will continue making changes to the brush during the release cycle to ship Blender with a proper implementation, defaults and presets.
Datalayers and Paint Brush
As it is possible that the design of the brush will be reused for texture painting, this is a critical task. In order to achieve this, these are the task that the first patch should contain:
In order to create small test projects to test the brush more extensively, it would be also recommended to include:
With that set of features merged, we should be in a good place to start creating vertex paint projects.
Note that the naming (Sculpt vertex colors vs vertex colors) won´t be final when merging this patch. This is to avoid duplicating the length of the patch with a huge name of line changes that won’t make any difference on what we should be doing at that stage.
Renaming
After merging the first patch, we can create another patch that includes only the renaming of the current code functions and UI. By doing this, we reduce the amount of lines changed in the first patch and we will have more time to decide the final naming of the datalayer to make it less confusing for the users.
Alternative:
After this patch, we should have stablished the difference between Painting and Attribute editing described in this patch. Vertex Paint/Vertex colors will became Attribute Edit and it will have the exact same functionality, with is a subset of the Attribute Edit mode.
Tools
After merging the two initial patches, we can start merging the rest of the tools, in no particular order.
Gradient and Mesh Filter
The Gradient tool and the mesh filter code is almost identical, so it should be easier to review them at the same time. Also, both share some common code (color data in the filter cache)
Color Smooth Brush
This is just a copy of the regular smooth/mask smooth brush but that works on color data. Should be easy to review and merge.
Added subscriber: @PabloDobarro
#67690 was marked as duplicate of this issue
#58711 was marked as duplicate of this issue
#73128 was marked as duplicate of this issue
Added subscriber: @JulienKaspar
Added subscriber: @DanieleViagi
Added subscriber: @ideasman42
It's not clear what is meant by this, or why it's needed.
MLoopCol
is an internal name, not exposed in the interface, and there are many kinds of face corner data layers, so removing color from it's name doesn't make sense.@ideasman42 The idea is to find another name to keep the MLoopCol data available after merging the new vertex colors while preparing the UI to introduce Attribute Paint (#67520). To keep both systems in a release, we should think a name that suggest that the MLoopCol is storing colors, but it can store any kind of data (that is how most people are using them, to store IDs, masks or vectors for game engines or VFX)
Sculpt Vertex Colorsto Vertex Color/Attribute Edit DesignAdded subscriber: @Jeroen-Bakker
Added subscriber: @WilliamReynish
The Vertex Colors vs Sculpt Vertex Color difference seems quite confusing to me here. Isn't the idea to change it, so the old vertex colors are now attributes?
This area has the potential to be rather confusing with essentially two types of vertex colors and two types of vertex paint, so we really should try and make it clear to users the difference between them.
I think the first panel should be Attributes and the second could then be Vertex Colors
@WilliamReynish Yes, that is exactly the idea. I'm currently writing a planning for splitting the tasks into different patches that contain similar code and functionality. I didn't include the renaming the the first patch to avoid changing a huge amount of lines with similar naming, which can make the review process confusing. Once the new Sculpt/Vertex paint mode is working, we can create a patch focusing only on the renaming:
Vertex Colors -> Attributes
Sculpt Vertex Colors -> Vertex Colors
Added subscriber: @Constantina32
Added subscriber: @zeauro
For most of people, Vertex Color is referring to the attribute of asset used by game engine or render engine.
That is something visual not related to sculpting. I think that would be misleading to rename Sculpt Vertex Colors -> Vertex Colors.
I am OK with the idea to make vertex colors a type of attribute.
But IMO, it is less problematic to rename Sculpt Vertex Colors -> Sculpt Colors.
@zeauro I think you are misunderstanding a bit. Vertex colors are not just for sculpt mode - you may paint them using the faster sculpt mode tools but they are still just vertex colors, which of course can be used in a game engine.
The attributes can be used for other things like mixing shaders or other data.
However, in general, this is also my main worry: having essentially the same functionality duplicated in two different ways, with quite subtle differences can be very confusing.
Added subscriber: @0o00o0oo
Added subscriber: @franMarz
You guys have to do a lot of work inside and outside Blender to teach users that we will have two methods for working with Vertex Colors from now on, that's undeniable, e.g., a warning while importing like "Vertex Colors will store in Color Attribute!", options when exporting to select which data to export as Vertex Colors, and so on.
Nothing you haven't done before though.
Other options can be explored, like a way to work with both methods over the same data block "Vertex Colors". But I think it would be even more confusing (automatic conversion between modes would be neccesary when swithching to Scultp Mode hence involuntary data loss more likely), and harder to design and maintain from a developer perspective.
There is no more game engine in Blender. So, basically, what you are saying is that colors painted in Sculpt Mode will be directly exported as vertex colors in .obj, .fbx, gltf file or used by render engine.
If it is not the case and one step of conversion is necessary to use those colors anywhere : that should not be called Vertex Colors.
I doubt that people only doing low poly stuff will use Brushes set to paint on high poly meshes.
If the way to paint vertex color of those low poly meshes is the attribute paint mode, UI should guide them to that mode.
For high poly meshes, people are used to talk about "poly painting".
Vertex Color painting on a sculpt is just a thing inside Blender. Other apps don't do that. That's why I think that calling that something else than "Vertex Colors" will not hurt.
If Sculpt Mode was the mode to paint vertex color on any kind of mesh, it should be renamed Sculpt Vertex Paint mode and there would be no discussion.
But that is not the case, design is talking about two modes for different cases.
So, in that case, IMO, best option is to avoid the word Vertex Color as a title, anywhere, and force user to look at manual or ask a question on a forum.
If User don't see Vertex Color in UI, he will search Vertex Color in manual.
If first line of chapter is : "There are two modes to paint Vertex Color" ; the thing will be clear for everyone.
Doesn't matter - that is irrelevant to the use case of using Blender to author game assets.
Yes of course, that would be the main point.
Added subscriber: @Vyach
Added subscriber: @brecht
Untagging design tasks from specific releases, in general these should only be tagged with the relevant modules and listed on the module page.
Added subscribers: @JamesOvnik, @fclem, @M.Pivetta, @FeralMan, @michaelknubben, @ZedDB
Added subscribers: @lasphere, @Sergey, @Mantissa, @VuPham, @Pandu93, @Poulpator, @hoanguk, @3di, @Hookflash, @dfelinto, @neouser, @vr_sebas, @avclubvids, @gnastacast, @FinbarrORiordan, @dark999, @CraigD, @StephenSwaney, @YAFU, @DimitriBastos, @lichtwerk
Hi Pablo, this is actually a very clear and complete overview. I was looking into how to create phases (eg milestones) for this project where a milestone is useful, complete and as small as possible.
My suggestion for the approach of this project is to use the next milestones. It is close to what you already provide in the patch with some nuances.
Basic Vertex Painting
We have several corner cases that need the MLoopCol's to be rendered in the 3d viewport outside a paint mode. For example when using dynamic paint or modifiers. To don't limit the current workflows we should add a first version of the attribute overlay (minimum requirement only supporting colors, but ideally also supporting weights).
IMO color management isn't a task, but something to be always aware of when handling colors and pixels. With recent changes done for MLoopCol color management will focus on how to store the colors of the tools. (Best to use floats and scene ref space)
The next bullets are taken from your design as they are needed for the basic functionality
** Rendering
Sculpt Mode Integration* Sculpt + Paint at the same time
Tools* Paint Brush
Default Brush PresetsBrush Input CurvesColor Mix Modes Paint Brush UI
Features* Data conversion operators
**Per face corner color data to sculpt/vertex color Rendering
*** Attribute Edit Overlay (as described above)
As a clean up step we might want to rename files/functions etc so it source code matches the attribute/vertex color in the tools/ui.
Note that at the end of this milestone the Vertex colors should also be accessible in the import/export api.
Other Sculpt/Paint mode tasks
It seems that the rest of the Sculpt/Paint mode tasks are doable on a per feature basis based on priority/needs and your own planning.
Brush Management and Multires Support rely on other projects so we should place them out of scope for the time being.
Import Export
This could be dealt in coordination/co-development with the maintainer, they should help out with the details.
Attribute Edit Mode
As the attribute mode a bit unclear how it will eventually look like, but that could be detailed later.
Added subscriber: @kfir
Added subscriber: @Andruxa696
I've created a separate task for geometry attributes in #76659 (Geometry Attributes Design) since this is a more general topic. I think an initial version as described in that task could be implemented in 2.90.
The way I see it is that sculpt vertex colors are a subset of the full list of attributes. For sculpting you'd want a list showing just the vertex colors, and for this there can be a Vertex Colors (or Paint Colors?) panel that shows the subset compatible with Sculpt & Paint mode. Legacy per-corner colors could also show in that list with a button to convert them to the new format. I would not auto convert them.
Mesh.vertex_colors
could become a collection of attributes that has both per-vertex and per-corner color attributes, which would be used to populate the panel list.The Vertex Color shading node could support both per-vertex and per-corner colors, and autocomplete would work fine if
Mesh.vertex_colors
includes both.Added subscriber: @zebus3dream
Added subscriber: @alvaroperez
Added subscriber: @RedMser
Added subscriber: @KenzieMac130
Added subscriber: @donmccurdy
Added subscriber: @Noto
Added subscriber: @JohanTriHandoyo
Added subscriber: @DavidKerdudo
Added subscriber: @DarkKnight
Added subscriber: @RaDGF
Added subscriber: @EAW
Added subscriber: @BulatKR
Removed subscriber: @BulatKR
Added subscriber: @Wesley-Rossi
Added subscriber: @Zombie
Added subscriber: @shiriware
Removed subscriber: @shiriware
Added subscriber: @shiriware
Added subscriber: @DARRINALDER
Added subscriber: @JanKaderabek
Hi, just tested sculpt-dev build and the Paint (vertex) feature, the performance is amazing (I use Vertex Paint heavily on my 400k tris game ground model), but I found 2 issues which prevent me from using it as Vertex Paint mode replacement:
I can't assign X shortcut to Swap Colors, because Draw brush shortcut is overriding it
BTW is there any other place (DevTalk?) where I can provide the feedback?
Big thanks for anybody working on this game-changing performance improvement!
@JanKaderabek Thanks for the feedback. The better place to share this would be on blender.chat in the sculpt-paint-texture-module channel. Also I can recommend to download and test the "temp-sculpt-colors" branch on https://builder.blender.org/download/experimental/
That one is the most up to date version as far as I know that we are testing right now. We are aiming to release it for Blender 3.2 as an official feature so every bit of testing and feedback is valuable.
Removed subscriber: @CraigD
This task should be split up into smaller tasks or merged into existing tasks where applicable, and then closed.
I read through the design task and most points have by now been addressed.
The entire Vertex Color section is essentially done and can be archived. The inclusion of a Gradient Tool can be part of the Paint Mode project instead.
Some sculpt mode features that can be further discussed and added as separate tasks:
Every other feature is already on another to-do task or done.
I will separate the section on Attribute Edit Mode into a separate design task, to be picked up at another point.
Changed status from 'Confirmed' to: 'Archived'
Added subscriber: @aceu
Added subscriber: @Meirokyn