From c257640b0dd200670dbdecb3cbecd7ff01f3a08d Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Mon, 26 May 2025 17:53:27 -0500 Subject: [PATCH] blender_shadow_volume2: reverse-port from C back to Python --- blender_shadow_volume2.py | 434 ++++++++++++++++++++++++++++++++++++++ model/torus.blend | Bin 2951777 -> 2984653 bytes shadow_volume.cpp | 45 ++-- 3 files changed, 454 insertions(+), 25 deletions(-) create mode 100644 blender_shadow_volume2.py diff --git a/blender_shadow_volume2.py b/blender_shadow_volume2.py new file mode 100644 index 0000000..0edb6c8 --- /dev/null +++ b/blender_shadow_volume2.py @@ -0,0 +1,434 @@ +import bpy +import bmesh +from mathutils import Vector, Euler +from collections import defaultdict +from dataclasses import dataclass +import colorsys + +def sprint(*text): + screen = bpy.data.screens['Scripting'] + for area in screen.areas: + if area.type != "CONSOLE": + continue + override = {'screen': screen, 'area': area} + with bpy.context.temp_override(**override): + bpy.ops.console.scrollback_append(text=" ".join(map(str, text))) + +print = sprint + +@dataclass +class Edge: + a: int # vertex index + b: int # vertex index + +@dataclass +class PolygonIndex: + a: int # polygon index + b: int # polygon index + +@dataclass +class EdgePolygon: + edge: Edge + polygon_index: PolygonIndex + +@dataclass +class Graph: + a: int # index into edge_indices + b: int # index into edge_indices + +def select_edge(bm, edge): + for e in bm.edges: + if frozenset((e.verts[0].index, e.verts[1].index)) == frozenset((edge.a, edge.b)): + e.select = True + +def select_edge_single(edge): + obj = bpy.context.edit_object + bm = bmesh.from_edit_mesh(obj.data) + select_edge(bm, edge) + bmesh.update_edit_mesh(obj.data) + +def select_light_faces(indicators): + obj = bpy.context.edit_object + bm = bmesh.from_edit_mesh(obj.data) + for i, v in enumerate(indicators): + if v > 0: + bm.faces[i].select = True + else: + bm.faces[i].select = False + + bmesh.update_edit_mesh(obj.data) + +def select_silhouette(edge_polygons: list[EdgePolygon], + edge_indices: list[int], + edge_indices_length: int): + obj = bpy.context.edit_object + bm = bmesh.from_edit_mesh(obj.data) + + for i in range(len(edge_polygons)): + bm.edges[i].select = False + + for i in range(edge_indices_length): + ep = edge_polygons[edge_indices[i]] + select_edge(bm, ep.edge) + + bmesh.update_edit_mesh(obj.data) + +def face_indicators(light: Vector, + position: list[Vector], + polygon_normal: list[Vector], + mesh: bpy.types.Mesh, + # outputs + indicators: list[float]): + for i in range(len(mesh.polygons)): + n = polygon_normal[i] + p = position[mesh.polygons[i].vertices[0]] + indicator = n.dot(light - p) + indicators[i] = indicator + +def build_edge_polygons(mesh: bpy.types.Mesh): + by_edge = defaultdict(list) + for i, polygon in enumerate(mesh.polygons): + for edge in polygon.edge_keys: + by_edge[frozenset(edge)].append(i) + + #l = [(edge, p) for edge, p in by_edge.items() if len(p) != 2] + #print(l[0]) + #edge, _ = l[0] + #select_edge_single(Edge(*edge)) + + assert all(len(p) == 2 for p in by_edge.values()) + + return [ + EdgePolygon(Edge(*edge), PolygonIndex(*polygons)) + for edge, polygons in by_edge.items() + ] + +def object_silhouette(indicators: list[float], + edge_polygons: list[EdgePolygon], + # outputs + edge_indices: list[int]): + ix = 0 + + for i in range(len(edge_polygons)): + ep = edge_polygons[i] + if (indicators[ep.polygon_index.a] > 0) != (indicators[ep.polygon_index.b] > 0): + edge_indices[ix] = i + ix += 1 + + return ix + +def graph_append(g, v): + assert g.a == -1 or g.b == -1 + if g.a == -1: + g.a = v + else: + g.b = v + +def edge_loop_graph(mesh: bpy.types.Mesh, + edge_polygons: list[EdgePolygon], + edge_indices: list[int], + edge_indices_length: list[int], + #output + graph: list[Graph]): + for i in range(len(mesh.vertices)): + graph[i].a = -1 + graph[i].b = -1 + + for i in range(edge_indices_length): + edge_index = edge_indices[i] + edge = edge_polygons[edge_index].edge + graph_append(graph[edge.a], i) + graph_append(graph[edge.b], i) + +def graph_next_neighbor(g: Graph, + ix: int): + if g.a == ix: + return g.b + else: + return g.a + +def edge_loop_inner(edge_polygons: list[EdgePolygon], + edge_indices: list[int], + graph: list[Graph], + # output + visited_edge_indices: list[bool], + ix: int, + edge_loop: list[int], + edge_loop_ix: int): + e = edge_polygons[edge_indices[ix]].edge + edge_loop[edge_loop_ix] = e.b + edge_loop_ix += 1 + + while True: + visited_edge_indices[ix] = True + e = edge_polygons[edge_indices[ix]].edge + next_ix_a = graph_next_neighbor(graph[e.a], ix) + next_ix_b = graph_next_neighbor(graph[e.b], ix) + + if visited_edge_indices[next_ix_a] == False: + edge_loop[edge_loop_ix] = e.a + edge_loop_ix += 1 + ix = next_ix_a + elif visited_edge_indices[next_ix_b] == False: + edge_loop[edge_loop_ix] = e.b + edge_loop_ix += 1 + ix = next_ix_b + else: + break + + return edge_loop_ix + +def next_unvisited(visited_edge_indices: list[bool], + edge_indices_length: int): + for i in range(edge_indices_length): + if visited_edge_indices[i] == False: + return i + return -1 + +def edge_loop(edge_polygons: list[EdgePolygon], + edge_indices: list[int], + edge_indices_length: int, + graph: list[Graph], + edge_loops: list[int], + edge_loop_lengths: list[int], + max_edge_loops: int): + visited_edge_indices = [False] * edge_indices_length + + edge_loop_ix = 0 + i = 0 + #while i < max_edge_loops: + while True: + start = next_unvisited(visited_edge_indices, edge_indices_length) + if start == -1: + break + assert i < max_edge_loops + + new_edge_loop_ix = edge_loop_inner(edge_polygons, + edge_indices, + graph, + visited_edge_indices, + start, + edge_loops, + edge_loop_ix) + length = new_edge_loop_ix - edge_loop_ix + edge_loop_lengths[i] = length + edge_loop_ix = new_edge_loop_ix + + i += 1 + + return i + +def list_init(l, init): + for i in range(len(l)): + l[i] = init(0, 0) + +def print_edge_loops(edge_loops: list[int], + edge_loop_lengths: list[int], + edge_loop_count: int): + edge_loop_ix = 0 + for i in range(edge_loop_count): + length = edge_loop_lengths[i] + l = [edge_loops[edge_loop_ix + j] for j in range(length)] + s = ", ".join(map(str, l)) + print(f"loop {i} [{s}]") + edge_loop_ix += length + +def reset_mesh_colors(mesh): + for color in mesh.color_attributes['Attribute'].data: + color.color = (1, 1, 1, 1) + +def color_edge_loop(mesh, + edge_loops: list[int], + edge_loop_lengths: int, + edge_loop_count: int): + edge_loop_ix = 0 + for i in range(edge_loop_count): + length = edge_loop_lengths[i] + + for j in range(length): + fraction = j / length + r, g, b = colorsys.hsv_to_rgb(fraction, 1, j != 0) + + vertex_index = edge_loops[edge_loop_ix + j] + for polygon in mesh.polygons: + if vertex_index in polygon.vertices: + ix = list(polygon.vertices).index(vertex_index) + loop_ix = polygon.loop_indices[ix] + mesh.color_attributes['Attribute'].data[loop_ix].color_srgb = (r, g, b, 1) + + edge_loop_ix += length + +def cast_ray(light: Vector, + start: Vector): + ray = start - light + ray.normalize() + return start + (ray * 7.0) + +def link_bmesh(bm, name): + mesh = bpy.data.meshes.new(name) + bm.to_mesh(mesh) + bm.free() + object = bpy.data.objects.new(name, mesh) + bpy.context.scene.collection.objects.link(object) + +def shadow_volume_mesh_rays(bm, + bm_position: list[bmesh.types.BMVert], + bm_cast_position: list[bmesh.types.BMVert], + edge_loops: list[int], + edge_loop_ix: int, + edge_loop_length: int): + for i in range(edge_loop_length): + j = (i + 1) % edge_loop_length + + i1 = edge_loops[edge_loop_ix + i] + i2 = edge_loops[edge_loop_ix + j] + + a = bm_position[i1] + b = bm_position[i2] + c = bm_cast_position[i2] + d = bm_cast_position[i1] + + bm.faces.new([a, b, c, d]) + +def shadow_volume_end_caps(bm, + bm_position: list[bmesh.types.BMVert], + bm_cast_position: list[bmesh.types.BMVert], + mesh, + indicators: list[float]): + for i in range(len(mesh.polygons)): + p = mesh.polygons[i] + if indicators[i] > 0: + a = bm_position[p.vertices[0]] + b = bm_position[p.vertices[1]] + c = bm_position[p.vertices[2]] + d = bm_position[p.vertices[3]] + bm.faces.new([a, b, c, d]) + else: + a = bm_cast_position[p.vertices[0]] + b = bm_cast_position[p.vertices[1]] + c = bm_cast_position[p.vertices[2]] + d = bm_cast_position[p.vertices[3]] + bm.faces.new([a, b, c, d]) + +def main(): + light = bpy.data.objects['Light'].location + torus = bpy.data.objects['Torus'] + + position = [0] * len(torus.data.vertices) + for i, vertex in enumerate(torus.data.vertices): + position[i] = torus.matrix_world @ vertex.co + + polygon_normal = [0] * len(torus.data.polygon_normals) + for i, normal in enumerate(torus.data.polygon_normals): + n = torus.matrix_world.to_3x3() @ normal.vector + n.normalize() + polygon_normal[i] = n + + mesh = torus.data + + indicators = [0] * len(torus.data.polygon_normals) + + face_indicators(light, + position, + polygon_normal, + mesh, + # outputs + indicators) + + # select_light_faces(indicators) + + edge_polygons = build_edge_polygons(mesh) + + edge_indices = [0] * len(edge_polygons) + + edge_indices_length = object_silhouette(indicators, + edge_polygons, + # outputs + edge_indices) + + # select_silhouette(edge_polygons, edge_indices, edge_indices_length) + + # graph is a mapping from vertex indices to edge_indices + graph = [0] * len(mesh.vertices) + list_init(graph, Graph) + edge_loop_graph(mesh, + edge_polygons, + edge_indices, + edge_indices_length, + # outputs + graph) + + #print(graph) + + max_edge_loops = 2 + edge_loops = [0] * edge_indices_length + edge_loop_lengths = [0] * max_edge_loops + edge_loop_count = edge_loop(edge_polygons, + edge_indices, + edge_indices_length, + graph, + edge_loops, + edge_loop_lengths, + max_edge_loops) + print("edge loop count", edge_loop_count) + + print_edge_loops(edge_loops, edge_loop_lengths, edge_loop_count) + + """ + reset_mesh_colors(mesh) + color_edge_loop(mesh, + edge_loops, + edge_loop_lengths, + edge_loop_count) + """ + + cast_position = [0] * len(mesh.vertices) + for i in range(len(mesh.vertices)): + cast_position[i] = cast_ray(light, position[i]) + + bm = bmesh.new() + bm_position = list(map(bm.verts.new, position)) + bm_cast_position = list(map(bm.verts.new, cast_position)) + + edge_loop_ix = 0 + for i in range(edge_loop_count): + edge_loop_length = edge_loop_lengths[i] + shadow_volume_mesh_rays(bm, + bm_position, + bm_cast_position, + edge_loops, + edge_loop_ix, + edge_loop_length) + edge_loop_ix += edge_loop_length + + shadow_volume_end_caps(bm, + bm_position, + bm_cast_position, + mesh, + indicators) + + link_bmesh(bm, "test") + +angle = 50 +def rotate(): + global angle + + torus = bpy.data.objects['Torus'] + torus.rotation_mode = 'XYZ' + torus.rotation_euler = Euler((0, angle / 100, 0), 'XYZ') + + try: + main() + except: + import traceback + for line in traceback.format_exc().split('\n'): + print(line) + return + + angle += 1 + print(angle) + if angle < 1000: + bpy.app.timers.register(rotate, first_interval=0.01) + +#rotate() +main() diff --git a/model/torus.blend b/model/torus.blend index 31cc56ef4744bc92b7331437e949490d00e6248c..d4303a78ee57d2d9f9542233ace95b0ac020d561 100644 GIT binary patch delta 109961 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 M#Ga~}+6&(MKbU*PHUIzs delta 84841 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%0D2{ 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[edge_index].edge; - int next_ix_a = next_neighbor(graph[e.a], ix); - int next_ix_b = next_neighbor(graph[e.b], ix); + const edge& e = mesh->edge_polygons[edge_indices[ix]].edge; + int next_ix_a = graph_next_neighbor(graph[e.a], ix); + int next_ix_b = graph_next_neighbor(graph[e.b], ix); if (visited_edge_indices[next_ix_a] == false) { edge_loop[edge_loop_ix] = e.a; edge_loop_ix += 1; @@ -160,8 +159,7 @@ static inline vec3 cast_ray(const vec3 light, return start + (normalize(ray) * 7.f); } -void shadow_volume_mesh_rays(const vec3 light, - const vec3 * position, +void shadow_volume_mesh_rays(const vec3 * position, const vec3 * cast_position, const int * edge_loop, const int edge_loop_length, @@ -184,8 +182,7 @@ void shadow_volume_mesh_rays(const vec3 light, } } -void shadow_volume_end_caps(const vec3 light, - const vec3 * position, +void shadow_volume_end_caps(const vec3 * position, const vec3 * cast_position, const mesh * mesh, const float * indicators, @@ -232,13 +229,13 @@ void shadow_volume_mesh(const vec3 light, const int max_edge_loops = 2; int edge_loops[edge_indices_length]; int edge_loop_lengths[max_edge_loops]; - int loop_count = edge_loop(mesh, - edge_indices, - edge_indices_length, - graph, - edge_loops, - edge_loop_lengths, - max_edge_loops); + int edge_loop_count = edge_loop(mesh, + edge_indices, + edge_indices_length, + graph, + edge_loops, + edge_loop_lengths, + max_edge_loops); vec3 cast_position[mesh->position_length]; @@ -246,8 +243,7 @@ void shadow_volume_mesh(const vec3 light, cast_position[i] = cast_ray(light, position[i]); } - shadow_volume_end_caps(light, - position, + shadow_volume_end_caps(position, cast_position, mesh, indicators, @@ -255,11 +251,10 @@ void shadow_volume_mesh(const vec3 light, // edge_loops contains position indices int edge_loop_ix = 0; - for (int i = 0; i < loop_count; i++) { + for (int i = 0; i < edge_loop_count; i++) { int edge_loop_length = edge_loop_lengths[i]; int * edge_loop = &edge_loops[edge_loop_ix]; - shadow_volume_mesh_rays(light, - position, + shadow_volume_mesh_rays(position, cast_position, edge_loop, edge_loop_length, @@ -269,7 +264,7 @@ void shadow_volume_mesh(const vec3 light, if (0) { int edge_loop_ix = 0; - for (int i = 0; i < loop_count; i++) { + for (int i = 0; i < edge_loop_count; i++) { int length = edge_loop_lengths[i]; printf("loop %d: %d\n", i, length); for (int j = 0; j < length; j++) {