def test_udf(): c0 = create_circle(200, 200, 0.3) c1 = create_circle(200, 200, 0.08, 0.8, 0.8) c0 = np.clip(c0 + c1, 0, 1) circles = snowy.add_border(c0, value=1) mask = circles != 0.0 udf = snowy.unitize(snowy.generate_udf(mask)) nx, ny = snowy.gradient(udf) grad = snowy.unitize(nx + ny) snowy.show(snowy.hstack([circles, udf, grad]))
def test_gdf(): "This is a (failed) effort to create a smoother distance field." c0 = create_circle(200, 200, 0.3) c1 = create_circle(200, 200, 0.08, 0.8, 0.8) c0 = np.clip(c0 + c1, 0, 1) circles = snowy.add_border(c0, value=1) circles = np.clip(snowy.blur(circles, radius=2), 0, 1) circles = np.clip(snowy.blur(circles, radius=2), 0, 1) source = (1.0 - circles) * 2000.0 gdf = np.sqrt(snowy.generate_gdf(source)) gdf = snowy.unitize(gdf) nx, ny = snowy.gradient(gdf) grad = snowy.unitize(nx + ny) snowy.show(snowy.hstack([circles, gdf, grad]))
def test_tileable_distance(): c0 = create_circle(400, 200, 0.3) c1 = create_circle(400, 200, 0.08, 0.8, 0.8) circles = np.clip(c0 + c1, 0, 1) mask = circles != 0.0 sdf = snowy.unitize(snowy.generate_sdf(mask, wrapx=True, wrapy=True)) nx, ny = snowy.gradient(sdf) grad = snowy.unitize(nx + ny) stack2 = np.hstack([sdf, sdf, grad, grad]) snowy.show(snowy.resize(np.vstack([stack2, stack2]), 600, 200)) get_mask = lambda L, U: np.logical_and(sdf > L, sdf < U) get_contour = lambda L, U: np.where(get_mask(L, U), sdf, 0) sdf -= get_contour(.20, .25) sdf -= get_contour(.60, .65) sdf -= get_contour(.90, .95) snowy.show(snowy.resize(np.hstack([sdf, sdf, sdf, sdf]), height=300))
def test_noise_smoothness(): noise = 0.5 + 0.5 * snowy.generate_noise(300, 150, 4, seed=42) grad = snowy.gradient(noise) grad = grad[0] + grad[1] grad = snowy.unitize(grad) snowy.show(grad)