Help creating organic looking "blobs"

I’d like to take this opportunity to post another technique that I didn’t know about at the time of this post and that I’ve been meaning to add to the above list for a couple of years now.

Some call it the “shrink-wrap” method, it consists in approximating the closing of a set of polygons by offsetting inward the outward offset of the whole. In more specific words, it’s the “erosion” of the “dilatation” process that precedes it.

5 circles (white) are offsetted outward. The result (dashed line) is offsetted back inward (black outline)

It’s nothing new but gives great results and is easy to implement with the help of a good library for offsetting polygons. Here’s a quick example in Python mode with a port of the Clipper library.

import clipper as cp

W, H = 600, 400            # Dimensions of canvas
N = 60                     # Number of vertices for each circle
A = TAU/N                  # Step angle
D = 37                     # Offset distance

RAD = (43, 32, 15, 54, 95) # List of radii
PTS = (PVector(355, 198),  # List of points (circles' centers)
       PVector(407, 260), 
       PVector(475, 164), 
       PVector(301, 290), 
       PVector(187, 150))

def setup():
    size(W, H, P2D)
    background('#FFFFFF')
    strokeWeight(2)
    smooth(8)
    noFill()
    
    vertices = [] # List of vertices for each circle
    
    # Create a circle around each point (p) with a specific radius (r)
    for p, r in zip(PTS, RAD):
        
        # Convert circle vertices to Clipper 'Point' format
        v_list = [cp.Point(p.x + cos(A*i) * r, p.y + sin(A*i) * r) for i in xrange(N)]
        vertices.append(v_list)
        
        # Draw circles
        pushStyle()
        strokeWeight(1)
        stroke(180)
        fill(255)
        circle(p.x, p.y, r*2)
        popStyle()
    
    # Compute outward offset + inward offset (dilatation + erosion)  
    ### Args:
    ###  points (Clipper Point) - Vertices of the polygon to offset
    ###  delta (Float) - Offset distance
    ###  jointype (Int) - 0=Square, 1=Round, 2=Miter
    
    out_offset = cp.OffsetPolygons(vertices, D, jointype=0)
    in_offset = cp.OffsetPolygons(out_offset, -D+10, jointype=1) 
    
    # Draw outline
    beginShape()
    for p in in_offset[0]:
        vertex(*p)
    endShape(CLOSE)

Edit: I believe @micycle 's PGS library does that as well (see Erosion-Dilation example gif) but never had the chance to try.