Wrap mode for Sculpt?

How hard would it be to add wrap mode to Sculpt mode (including Dynatopo) ?

No wrap:

With wrap:

It’s essential for sculpting 3D textures.

@mods: can’t insert those images to be displayed in the post - forum says “invalid file”

They’re .gifs


Doesn’t work with those images I linked. They are animated and stored on imgur. I recall I could display images I uploaded from my PC in the past, but not from imgur.

He’s saying that .gifs aren’t supported by the forum

Oh, my bad. I misunderstood.

Interesting, I see how this works for a plane but how would it work for a character, or any complex surface ?

That’s not for characters. It’s specifically for plane for sculpting tileable pattern to bake displacement / normals / etc. maps for texturing.

The trouble with implementing this specifically for planes is that it would only solve the problem for planes. A more general solution would be to decouple the multires mesh tesselation from its offset data resolution and make Multires store its offsets in a texture in UV space.

That way you could have wrap-around, shared coords, partial symmetry etc, and you’d also get a great way to create vector displacement maps that could then be used with OpenSubdiv, or in sculpting brushes.

It would be a big project though.

motorsep : how to make this function not systematically fail if invoked in another use case (ie a more complex surface) ? @Piotr I guess you’d need to have uvs set and not change them after you began sculpting ? What about an “array symmetry” system, that duplicates the stroke every 5 units or so on a given axis ? (instead of mirroring like what current symmetry does)

its about inversing the stroke and adding or subtracting the distance of the plane from the input when its out of bounds.

Example:

plane.size_X = 1.2f; // X dimension of plane
plane.size_Y = 1.8f; // Y dimension of plane

if ( input.stroke.axis_X > plane.size_X )
{ input.stroke.axis_X -= plane.size_X;}
else if (input.stroke.axis_X < -plane.size_X)
{ input.stroke.axisX += plane.size_X;}

something like this.So an array is not an answer

Have a special object for it ? This way it only works on the special plane. Or simply only allow for it to be active when plane/grid object is used for sculpting.

Yes, if you wanted shared uv space you’d have to unwrap it that way. For normal sculpting like you do now with the current multires, you’d simply use a ptex texture. With the added benefit that you’d also get to set the resolution per-patch.

There should be no general solution. AFAIK in ZBrush you can only do this on a plane. It’s really the only case you need to have tileable sculpting - to generate tiled normal/displacement/spec/etc. maps that will be used anywhere tileable textures are needed (video games in particular).

Being able to use wrap even only on a plane would be great for sculpting easily tiled terrain by example without having to spend time in edit mode trying to adjust vertices to tile what you sculpted, along baking tiled various maps.

As it’s already possible in texture painting mode, i hope some of the genius coders will figure out how to get the code working for sculpt too.

In Zbrush you can enable wrap mode on every model but only on plane it works as expected. I made a short video with a workaround involving multiresolution modifier and manual offsetting of polygons:

While it’s a cool hack, it’s a hack. You are using tiling texture as a guide, sculpting the middle area, then basically doing a trick as in 2D app - offsetting sculpted quadrants so that sculpted areas end up on the edges and then filling in the middle.

ZBrush allows you to just sculpt away, without using any guides or messing with hacks. That’s what we need - to be free to focus on creating from scratch, without being concerned using existing textures.

Sure it’s a hack. But you don’t need existing textures. I didn’t use one as a guide but to show one possible application of the method.

if we are considering hacks; then there is this method. You create a 32 bit image with 2048 x 2048 resolution; fill the image with 0.5 black (128,128,128) then choose a lighter gray and paint bumps (or darker gray and paint cavity). Select options from the UV editor tabs and tick “Wrap” (this will wrap the stroke to the other side).

Create a plane , unwrap it (make sure you use unwrap so the plane edges stick to UV border). Add a multi-res modifier and subdivide until 500k faces. Add a displace modifier after multi-res. Set displace space to UV and select your newly created texture (you need to create a new displace texture and assign your image in the properties / texture tab).

Now when you apply displace modifier your multi-res will have baked displacement.

You can also use an greyscale image which has been calibrated (Levels in Gimp or photosho - set the black threshold to 128).

1 Like

Yeah, being able to do this for just a plane would be incredibly useful. You could make all sorts of tiling sculptures, bake them all out as normals and re-use them everywhere. This would make that a painless process, especially if you could view a few tiles live, while you are working as to feel the end result while you make it, instead of the trial/error process of tiling after the fact.

I just noticed that there is a patch in blender tracker (https://developer.blender.org/D1426) that will enable us to do sculpt tiling.
can’t wait to test it.