Vertex Painting - Is the current state useful?

Hi,

There are some development considerations to use the fast system that sculpting uses, the PBVH, to improve performance of vertex painting. However, there will a performance benefit if we assume users want to paint on vertices themselves, not on vertices per face.

So I was wondering how users use the vertex painting functionality. Is painting per face really important? Should we redesign the system to only paint on vertices instead? Should the sculpt system use per face painting too? Should we paint per vertex in sculpting and somehow flush the result to poly painting in the end?

I would be interested to hear your thoughts.

Thanks!

Wouldn’t painting vertices complicate masking? One of the benefits of the current behavior is that you can use selections to allow hard-edged masking when vertex painting. Personally, I’d prefer to keep per-face painting, but I’m selfish like that.

Also, if vertex painting is changed away from per face painting, would this also apply to weight painting?

@Psy-fi: You mean the current vertex painting is per face-vertex, like normals? I never knew that, and certainly won’t miss it. Then again, vertex painting has always been so slow I almost never really used it anyway.

i remember that is also very usufull for lots of masking for cycles shaders, sss for example (how do i forget that?)
i also remember to use per face painting to do some masks doing packaging renders, its has some uses the posibility of gettint sharp vertex color paint using per face paint or some kind of masking.

I quite like it, however I have some pet peeves:

  • Why is vertex painting limited to only 8 vertex paint layers? I wish We could work with more, since it is quite useful for vertex paint masks.

  • The + button duplicates a vert paint layer, rather than making a new one when you have at least one layer. This is not being communicated well to the user. Its not communicated at all - so I was very confused at first.

  • I wish vert paint payers had an alpha (I think they do in 3ds max, correct me if i’m wrong)

-if its done per vertex, would I still be able to control the transition of colors between faces- sharp to soft…

1 Like

multires needs to support vertex colors otherwise you can’t have enough polygons for serious poly painting!

also sculpt mode should support easy vertex color painting just like zbrush - one “color” button next to “sub” and “add”

blender would have one huge advantage over zbrush -> baking the vertex colors to a new mesh with completely different topology!

ZBrush can do this already with the project option

Vertex painting is indeed useful for game models and dense meshes (sculpts).

However there are some points that are needed to be considered relating to other features in blender.

Long story short a “vertex” only approach is all fine if there is mask layer and layer saving functionality.
Per face functionality can be achieved with masks.But they need to be managed and saved easily (Mask saving and management is also direly needed in sculpting).

Basic uses :

  • Ambient lighting or fake Ambient occlusion for low poly models (Game models).

Most games use advanced shading techniques nowadays, so vertexlit shading is not that important.However mobile games still benefit from this functionality. Also vertex color masks can be used in shaders ( realtime shaders ) for transition, blend and factor settings. It is also important to note that in these kinds of uses blender also lacks a native vertex alpha support (at least its not exposed to the user).

  • Sculpting can use vertex painting for texturing or cycles shading effects / masks.

This functionality is a efficient way to paint textures in subdivision sculpting since the data is embeded in to the subdivision history and is somewhat protected as long as the vertex count doesn’t change. However as most people know the multi-res modifier needs a refactor, so it might be wise to think this over.

Dynatopo might benefit from this also but tessellation will break the transition between the newly created vertices and the surrounding vertices. So this leads to more clean up work and discards the vertex paint benefit for dynatopo. (Still you don’t need to mess around with UV for dense meshes so it might benefit there).

So my thoughts is that current functionality will be limited to vertex paint masking (dirty vertex) until;

  • Vertex paint - Sculpt mask saving and managing functionality (Supporting mask layers in vertex paint will improve workflow greatly)

  • Vertex Alpha paint support is essential for shaders and game models.

  • Refactor for subdivision sculpting (multi-res) , dynatopo can also supported in a limited way ( warning to user on changes to topology).

@nudelZ

  1. Support of multires / subsurf. This is really important, else vpaint (or polypaint) is useless. It seems, to go per vertex is the almost forced decision?
  2. BTW, zbrush can transfer (bake) polypaint to deferent topology. See decimation master addon, etc etc
    edit: @Richard Marklew, you were faster.

I’d love to be able to do a good clean paint on a dyntopo sculpt without having to do any retopo or uv work. Also having the option to take that info and later baking it into a proper retopoed mesh would be incredibly useful. :slight_smile:

nope it can’t transfer ALL the color details to a new (low poly/different topology) mesh because the projection is also vertex based

in blender you could transfer ALL the details because its texture based :wink:

You can create textures from polypaint so you can transfer the colour from one texture to another texture which use different UVs via subdivison and polypaint.

It shouldn’t break anything… Have you seen how sculptGL handles this?

have you actually tried it? it works for meshes with even topology yes but it doesn’t work with geometry that has large/small quad/tris

here’s an example…


file :wink:

https://www.dropbox.com/s/oyy0gm6xzbhx5rs/colortransfer.ZTL?dl=0

Please stay on topic. Psy-fi asked a very specific question. It would be nice if he didn’t have to sort through a bunch of feature requests and discussions about other applications to find relevant answers.

I would prefer to have both. Sometimes I prefer having painting per face loop, but other times I really want painting per vertex. For now I have been using my own scripts and tools to paint per vertex by softening the painted result across the entire vertex with various color selectors: Most colorful, brightest, darkest, closest to hue, last brush used, etc.

What I would prefer is a simple ability to change mode between per face and per vertex while painting. But whatever you do, please never change colors being stored per face loop. This is one of the ways I preserve custom normals if I need to edit a mesh. I stash them in some vertex colors and then copy them back when I am done. With multiple vertex color channels, I can store multiple revisions of the custom normals.

First of all i have to say that i like the way you interact with users (artists ) this is how all dev should do.

Psy-Fi for a humble and stupid user as i m, all you have said sounds like an alien language (good info know too :wink: ) I would like if possible to have those builds to try them out and decide. Most of the user would like something fast, paint on faces or painting on vertices,… the fastest is our choice :slight_smile:

PS: Please don’t change for change.

I think, as long as it doesn’t conflict with masking/can be worked around with masking, noone will miss per face per vertex.

Thought the current behaviour is kinda annoyingm to be honest :slight_smile:

Being a game developer, I use vertex paint to dirty high poly meshes and bake the dirt to low poly meshes and to mask low poly meshes for textures blending in a game engine (black and white vertex paint serves as mask, usually for terrains, so that a game engine can blend two textures on in real-time).

It would be definitely cool to have high performance vertex paint to paint over dynatopo/multires mesh after sculpting, and then bake that to a low poly mesh or render it as is.

This is seriously so clever.
Other than that I don’t have much to add to the discussion, I use vertex paint layers mostly as masks for shaders, I didn’t even know they were stored per-loop.