feat: Add surface generation and media handling

- Implemented surface generation functionality in `surface.py`, including geometry estimation and texture writing.
- Introduced media input handling in `input.py`, supporting image and video frame extraction.
- Added model management for geometry adapters in `models/__init__.py`.
- Created BEN2 and DA3 model inference logic in `ben2.py` and `da3.py`, respectively.
- Developed ONNX model inference utilities for BEN2 and DA3 in `onnx_ben2.py` and `onnx_da3.py`.
- Added support for MoGe-2 model inference in `moge2.py` with necessary ONNX utilities.
- Implemented output handling for depth and surface data in `depth.py` and `surface.py`.
- Created debug output utilities for DA3 and MoGe-2 predictions in `debug_da3.py` and `debug_moge2.py`.
- Enhanced ONNX runtime session management in `onnx_runtime.py`.
- Updated `__init__.py` files to include new modules and functions for better organization.
This commit is contained in:
2026-08-18 23:27:10 +08:00
parent 9dfa49602c
commit 835225d264
62 changed files with 2126 additions and 2318 deletions

View File

@@ -5,7 +5,12 @@ import bpy
import numpy as np
sys.path.insert(0, str(Path(__file__).parents[1] / "src"))
PROJECT_ROOT = Path(__file__).parents[1]
sys.path.insert(0, str(PROJECT_ROOT / "src"))
sys.path.insert(
0,
str(next((PROJECT_ROOT / "src" / "snapform" / "wheels").glob("blendjob-*.whl"))),
)
from snapform.blender.depth_plane import (
get_modifier_input,
@@ -26,7 +31,7 @@ def set_input(modifier, group, name, value):
def add_face_attributes(mesh, count):
confidence = mesh.attributes.new("o_face_confidence", "FLOAT", "FACE")
confidence = mesh.attributes.new("o_confidence", "FLOAT", "FACE")
confidence.data.foreach_set("value", [1.0] * count)
@@ -48,6 +53,15 @@ def main():
if item.item_type == "SOCKET" and item.in_out == "INPUT"
]
assert all(item.structure_type == "SINGLE" for item in input_sockets)
assert [item.name for item in input_sockets[:4]] == [
"Geometry",
"Iterations",
"Resolution",
"Smooth",
]
iterations = next(item for item in input_sockets if item.name == "Iterations")
assert iterations.default_value == 2
assert iterations.min_value == 0
resolution = next(item for item in input_sockets if item.name == "Resolution")
assert abs(resolution.default_value - 0.1) < 1e-6
assert group.asset_data is None
@@ -123,10 +137,11 @@ def main():
uv = mesh.uv_layers.new(name="UVMap")
uv.data.foreach_set("uv", [0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1])
add_face_attributes(mesh, 2)
assert "o_confidence" in mesh.attributes
assert not {
"o_background",
"o_background_face",
"o_confidence",
"o_face_confidence",
"o_confidence_percentile",
}.intersection(mesh.attributes.keys())
@@ -137,7 +152,7 @@ def main():
modifier.show_group_selector = False
assert not modifier.show_group_selector
set_input(modifier, group, "Resolution", 0.000001)
set_input(modifier, group, "Relax Iterations", 1)
set_input(modifier, group, "Iterations", 0)
set_input(modifier, group, "Fix Topology", 0)
set_input(modifier, group, "Smooth", 0.0)
evaluated = obj.evaluated_get(bpy.context.evaluated_depsgraph_get())