Many changes; started refactor in gmtypes2.py
72
gradientmesh/gmtypes2.py
Normal file
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import annotations
|
||||
from typing import TypeAlias
|
||||
from random import uniform
|
||||
|
||||
import torch
|
||||
|
||||
Point: TypeAlias = torch.FloatTensor
|
||||
Vector: TypeAlias = Point
|
||||
Color: TypeAlias = torch.FloatTensor
|
||||
|
||||
|
||||
def indexize_tensor(tensor, eps=1e-5):
|
||||
"""Take tensor of quads to flat list of points plus index map."""
|
||||
tensor_shape = tensor.shape
|
||||
tensor = tensor.view(-1, tensor_shape[-1])
|
||||
|
||||
# Round tensor elements to handle floating point precision errors
|
||||
tensor = torch.round(tensor / eps) * eps
|
||||
|
||||
# Compute unique rows and their indices
|
||||
tensor, inverse_indices = tensor.unique(dim=0, return_inverse=True)
|
||||
|
||||
# Compute index tensor
|
||||
index_tensor = inverse_indices.view(tensor_shape[:-1])
|
||||
|
||||
return tensor, index_tensor
|
||||
|
||||
|
||||
def ferguson_to_bezier(corner_points, tangent_vectors):
|
||||
"""Take Ferguson patch to Bezier representation"""
|
||||
# Assume corner_points is a list of 4 points [P0, P1, P2, P3] and
|
||||
# tangent_vectors is a list of 4 vectors [V0, V1, V2, V3]
|
||||
|
||||
# Bezier control points
|
||||
bezier_points = [None]*12
|
||||
|
||||
# Use tangent vectors to determine interior points and place them in the order
|
||||
for i in range(4):
|
||||
bezier_points[3*i] = corner_points[i]
|
||||
bezier_points[3*i + 1] = corner_points[i] + tangent_vectors[i]/3
|
||||
bezier_points[3*i + 2] = corner_points[i] + 2*tangent_vectors[i]/3
|
||||
|
||||
return bezier_points
|
||||
|
||||
|
||||
class Mesh:
|
||||
def __init__(self, points, tangents, colors):
|
||||
self.fpoints, self.ipoints = indexize_tensor(points)
|
||||
self.ftangents, self.itangents = indexize_tensor(tangents)
|
||||
self.colors = colors
|
||||
|
||||
@classmethod
|
||||
def grid(cls, width, height):
|
||||
dx = 1.0 / width
|
||||
dy = 1.0 / height
|
||||
points = []
|
||||
tangents = []
|
||||
colors = []
|
||||
for i in range(width):
|
||||
for j in range(height):
|
||||
x1, y1 = i * dx, j * dy
|
||||
x2, y2 = (i+1) * dx, (j+1) * dy
|
||||
# Clockwise order: bottom left, bottom right, top right, top left
|
||||
square = [[x1, y1], [x2, y1], [x2, y2], [x1, y2]]
|
||||
points.append(square)
|
||||
tangents.append([[0.0, 0.0] for _ in range(4)])
|
||||
colors.append([uniform(0, 1) for _ in range(3)] + [1.0])
|
||||
|
||||
return cls(torch.tensor(points),
|
||||
torch.tensor(tangents),
|
||||
torch.tensor(colors))
|
||||
BIN
gradientmesh/results/single_gradient/final.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
gradientmesh/results/single_gradient/init.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
gradientmesh/results/single_gradient/iter_0.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
gradientmesh/results/single_gradient/iter_1.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
gradientmesh/results/single_gradient/iter_10.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_11.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_12.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
gradientmesh/results/single_gradient/iter_13.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
gradientmesh/results/single_gradient/iter_14.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
gradientmesh/results/single_gradient/iter_15.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
gradientmesh/results/single_gradient/iter_16.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
gradientmesh/results/single_gradient/iter_17.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
gradientmesh/results/single_gradient/iter_18.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
gradientmesh/results/single_gradient/iter_19.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
gradientmesh/results/single_gradient/iter_2.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_20.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
gradientmesh/results/single_gradient/iter_21.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
gradientmesh/results/single_gradient/iter_22.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
gradientmesh/results/single_gradient/iter_23.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
gradientmesh/results/single_gradient/iter_24.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
gradientmesh/results/single_gradient/iter_25.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
gradientmesh/results/single_gradient/iter_26.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
gradientmesh/results/single_gradient/iter_27.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
gradientmesh/results/single_gradient/iter_28.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
gradientmesh/results/single_gradient/iter_29.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
gradientmesh/results/single_gradient/iter_3.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
gradientmesh/results/single_gradient/iter_30.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
gradientmesh/results/single_gradient/iter_31.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
gradientmesh/results/single_gradient/iter_32.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
gradientmesh/results/single_gradient/iter_33.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
gradientmesh/results/single_gradient/iter_34.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
gradientmesh/results/single_gradient/iter_35.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
gradientmesh/results/single_gradient/iter_36.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
gradientmesh/results/single_gradient/iter_37.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_38.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_39.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_4.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
gradientmesh/results/single_gradient/iter_40.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
gradientmesh/results/single_gradient/iter_41.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_42.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_43.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_44.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_45.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_46.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
gradientmesh/results/single_gradient/iter_47.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_48.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_49.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_5.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_50.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_51.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_52.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_53.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
gradientmesh/results/single_gradient/iter_54.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
gradientmesh/results/single_gradient/iter_55.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_56.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
gradientmesh/results/single_gradient/iter_57.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
gradientmesh/results/single_gradient/iter_58.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_59.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
gradientmesh/results/single_gradient/iter_6.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_60.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
gradientmesh/results/single_gradient/iter_61.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_62.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_63.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_64.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_65.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_66.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_67.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_68.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_69.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_7.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_70.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_71.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_72.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
gradientmesh/results/single_gradient/iter_73.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
gradientmesh/results/single_gradient/iter_74.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_75.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
gradientmesh/results/single_gradient/iter_76.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_77.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_78.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_79.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
gradientmesh/results/single_gradient/iter_8.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_80.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_81.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_82.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_83.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_84.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
gradientmesh/results/single_gradient/iter_85.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_86.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_87.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
gradientmesh/results/single_gradient/iter_88.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
gradientmesh/results/single_gradient/iter_89.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_9.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
gradientmesh/results/single_gradient/iter_90.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
gradientmesh/results/single_gradient/iter_91.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
gradientmesh/results/single_gradient/iter_92.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
gradientmesh/results/single_gradient/iter_93.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
gradientmesh/results/single_gradient/iter_94.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
gradientmesh/results/single_gradient/iter_95.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
gradientmesh/results/single_gradient/iter_96.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |