3.1 Per Pixel vs Microvertex

From 3D-Coat Wiki
Revision as of 09:12, 7 October 2009 by Daniel (talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Before we start painting on any meshes, we should really touch on some of the different methods within 3D-Coat for painting. There are a number of them, each with their own positive and negative sides.

The first we’ll talk about, is per pixel painting. It was introduced into 3D-Coat for the first iteration of the v3 cycle. The wellknown 3D-Coat V2 used microvertex painting. In this approach every face (quad only allowed) was represented as a patch N x M vertices (N and M could be different for every face). Every vertex had color and coordinates in space, so any kind of displacement was allowed. However this approach was limited because it was very difficult to edit mesh with non-quad faces, projecting patch to texture resulted in loss of quality, so it was difficult to import a texture, edit it and then export because the after-export texture appeared to be slightly blurred. So we decided to implement the per pixel painting. Here are the basic points of this technology:

• Painting is performed not over vertices but over pixels on the texture directly. It looks like every pixel on the texture is represented as a point in space.

• Every pixel contains any amount of layers of color, opacity, normal displacement, specularity.

• Every layer can be blended with previous one using common and well-known blending operations for color and displacement.

• Every texture point in space has its neighbors in per-pixel representation. It is important because it allows not only painting over model but also performing non-local operations like blurring and sharpening with brush.

• Some operations are performed in space, like painting, filling, applying curves, some – in projection, like smudge. All this is transparent to user.

• Most operations can be performed (optionally) not only on visible side of an object but on invisible too, like applying curves, filling, painting rings, rectangles and polygons over the surface.

• Exchange with other applications becomes really fast and with no quality loss, you can use 3D-Coat on any stage of the pipeline put a final touch or perform full texturing.

• You can import normal map and use it as a reference for texture painting. Normal map can be changed too, you can apply some smoothing (not over seams) or fade some areas.

• Seamless painting and smoothing over texture. This technology can be used for any kind of texturing – low poly or high poly. You can edit textures from 32 x 32 to 8192 x 8192 (if you have 1GB or more of video memory). It can be used in a very wide range of applications – from graphics for mobile phones to high-end game projects and films that require huge textures. This technology supports tiled, self-intersected and mirrored textures without any problems. In summary there is a list of advantages of per-pixel painting over microvertex painting:

• Much faster then microvertex painting.

• Supports tiled, self-intersected and mirrored UV-sets (microvertex painting supports only non-overlapped texturing).

• Takes less memory than microvertex approach.

• Gives good precision of painting without any additional blurring. The only disadvantage in comparison to microvertex painting is that per-pixel painting does not support vector displacement, only normal displacement. Sometimes this makes it an essential point, so we leaved both approaches – per pixel and microvertex in place. For example using microvertex approach to paint over baked voxel sculptures gives you better results. Advantages of per pixel painting over projection painting:

• Possibility to operate pixels on the back side of the model, for example filling, blurring, applying overall effects.

• Painting quality does not depend on distance from object to camera.

• More precise painting result, what you see is what you get. The key advantage over usual texture painting in space is a possibility to blur pixels under the brush because of every pixel has its neighbors.