Contours and Polystrips Retopology Tools (soon to be RetopoFlow)

What with these tools being out in the wild for a while now I figured it was time to give them a dedicated thread for discussing development progress and for a better feedback loop. For those unfamiliar with these tools, read on.

Dedicated Retopology Tool Suite from CG Cookie
Contours and Polystrips are two dedicated retopology tool add-ons for Blender designed by yours truly and developed by Patrick Moore and Jon Denning.

The eventual goal is to create a full suite of retopology tools that’s carefully designed to work together, allowing you to complete the full retopology workflow from beginning to end.

After all three main tools are complete, the workflow will go like this: block the simple forms with Contours, map out the difficult flows with Polystrips, and then finally fill in the holes with Patches.

Update 11-21-2014:
after a lot of feedback I’ve chosen to re-release Contours and Polystrips (and future tools) as a single add-on, called RetopoFlow. Read the blog post here: http://cgcookiemarkets.com/blender/2014/11/21/contours-polystrips-combined/


Tool #1: Contours - available here

The Contours Retopology tool is an addon for Blender that provides quick and easy ways retopologize cylindrical forms. Use cases include organic forms, such as arms, legs, tentacles, tails, horns, etc.The tool works by drawing strokes perpendicular to the form to define the contour of the shape. Immediately upon drawing the first stroke, a preview mesh is generated, showing you exactly what you’ll get. You can draw as many strokes as you like, in any order, from any direction.

Tool #2: Polystrips - [available here](http://cgcookiemarkets.com/blender/all-products/polystrips-retopology-tool/)

The Polystrips tool provides quick and easy ways create the key face loops needed to retopologize a complex model. Use cases include complex forms, such as human faces, creatures, and other organic & hard-surface objects.

In most cases, difficult part of retopology is getting the topology flow right around details. The goal of Polystrips is to provide a fast and artist-friendly method of mapping out the crucial topology around complex forms, allowing the remaining areas to simply be filled in.

Tool #3: Patches - coming soon

Patches is the third tool in development that will round out most of the retopology workflow. It is still in the very early development stages, but it will allow you to fill in holes with quad-based poly patches very easily.


Each of the add-ons are available on the Blender Market.

Any and all feedback is welcome!

1 Like

hey, jonathan, i’m busily retopping my current wip with my usual tools then the contour/polystrips after that so i can posts comparisons here.

but first, i noticed that brush size has no effect in perspective and also the brush does not conform to the surface like in ortho, also getting reverse back-snapping some of the time (i polystrip in front, activation leads to snapping at the back of the model) and i made sure the model is “fat” as you have seen :slight_smile:

I cannot repo the brush size not working in perspective mode. Can you share a video or series of screenshots?

Also, the back-side snapping in orthographic view is a known bug. For now you’ll have to work in perspective.

Hi Jonathan,

On the V1 you send me, the Ctrl+wheel dosn"t seems to work (CTRL& + - work).
Right know on my tests, I think it’s really usefull, maybe to slow to edit.

I continue my tests !

Are you on a Mac? If so, then use CMD+Wheel for adjusting segments. Or you can use CTRL -+

I’m on PC ^^

Make sure you’re selecting a whole strip when adjusting segments. Currently segments cannot be adjusted if only an endpoint/junction is selected. I’ve considered supporting segments with endpoint selections, though.

Hi Jonathan,

I suspect that the issue you are experiencing with back-side snapping in orthographic mode is similar to a problem that I addressed when updating one of my addons to 2.72.

Comments in the following code explain the issues with orthographic ray casting:


import bpy
from bpy_extras import view3d_utils
from mathutils import Vector

def ray_from_region(x, y, mesh_object):
    context = bpy.context
    region = context.region
    region_co = Vector((x, y))
    rv3d = context.region_data
    sv3d = context.space_data


    # Determine the view's clipping distances.
    if rv3d.view_perspective == 'CAMERA':
        camera_data = sv3d.camera.data
        clip_start = camera_data.clip_start
        clip_end = camera_data.clip_end
    else:
        clip_start = sv3d.clip_start
        clip_end = sv3d.clip_end


    # Determine the ray's direction in world space.
    ray_direction = view3d_utils.region_2d_to_vector_3d(
        region, rv3d, region_co
    )
    ray_direction.normalize()


    # For orthographic projections in Blender versions prior to 2.72, the ray's
    # direction needs to be inverted to point into the scene.
    if bpy.app.version < (2, 72, 0):
        if rv3d.view_perspective == 'ORTHO' or (
               rv3d.view_perspective == 'CAMERA' and
               sv3d.camera.data.type == 'ORTHO'
           ):
            ray_direction *= -1


    # Determine the ray's origin in world space.
    ray_origin = view3d_utils.region_2d_to_origin_3d(region, rv3d, region_co)


    # Determine the ray's target in world space.
    ray_target = ray_origin + clip_end * ray_direction


    # If the view is an orthographic projection, the ray's origin may exist
    # behind the mesh object.  Therefore, it is necessary to move the ray's
    # origin a sufficient distance antiparallel to the ray's direction in order
    # to ensure that the ray's origin is in front of the mesh object.
    if rv3d.view_perspective == 'ORTHO':
        ray_origin -= 10000 * ray_direction


    # Otherwise, if the view is either a perspective projection or projected
    # from a camera then advance the ray's origin to the near clipping plane.
    else:
        ray_origin += clip_start * ray_direction


    # Convert the ray's origin and target from world space to object space.
    inverse_model_matrix = mesh_object.matrix_world.inverted()
    for co in ray_origin, ray_target:
        co.xyz = inverse_model_matrix * co


    # Return the object space ray's initial and terminal points.
    return (ray_origin, ray_target)

Here is a usage example:


active_object = context.active_object
x = event.mouse_region_x
y = event.mouse_region_y
face_index = active_object.ray_cast(*ray_from_region(x, y, active_object))[2]
active_object.select = True if face_index != -1 else False

Thanks for that Umdee! I’ve sent this to Jon Denning, who is doing most of the coding for Polystrips.

Version 1.2.0 of Contours has been released! There’s no new features but the mesh visualization has been greatly improved. It’s been all prettified :slight_smile:


Attachments


Hey all,

The next major version of Polystrips is getting closer and closer. It’ll bring a lot of cosmetic improvements and bug fixes. Most importantly, though, it’ll introduce Simple Fill! A tool for filling rectangular areas between strips with quads.

Here’s a video teaser:

This is really good !

ufffff, ufffff, uffffff …:smiley:

Thanks pitiwazou! Have you had a chance to play with them yet?

That’s very cool.
Great work !

I will use it on this dog tomorrow ^^

For my current test, it’s good, little slow, but good.
the fill tool seems to be really great.

That’ll make a great test model. Which tool is slow? Contours, Polystrips, or both? What’re your machine specs?

BTW, regarding the Contours version 1.2.0 update. Didn’t get an email w the download link. And can’t access it from the CGCookie Dashboard, CG Cookie Purchases (I get the Contours Retopology V1.1.0).

Any chance of hooking me up with the update?

What’s your CGCookie username? I’ll get it added to your dashboard on the Blender Market.

Polystrip is slow on my PC.
I7 950 16go titan+780 6go, SSD.

Yes it will be a great test^^