feat(node_assets): add image plane geometry nodes and validation scripts
- Implemented `image_plane.py` to build the Image Plane Geometry Nodes group with customizable parameters for geometry, subdivide, and thickness. - Created `image_plane_validation.py` to validate the functionality of the image plane, ensuring correct geometry generation and material assignment. - Developed `material_layers.py` to construct shader node groups for image materials, including depth and normal handling. - Authored `plane_layouts.py` to define node arrangements for image geometry assets. - Introduced `shadeless.py` to create a shadeless shader node group that displays color without scene lighting while preserving shadows and reflections.
This commit is contained in:
@@ -11,7 +11,6 @@ BEN2_MODEL_KEY = "BEN2_BASE"
|
||||
REALESRGAN_GENERAL_WDN_MODEL_KEY = shared_model_catalog.DEFAULT_UPSCALE_MODEL_KEY
|
||||
SAFMN_MODEL_KEY = shared_model_catalog.SAFMN_MODEL.key
|
||||
REALESRGAN_X4PLUS_MODEL_KEY = shared_model_catalog.REALESRGAN_X4PLUS.key
|
||||
DEFAULT_DA3_MODEL_KEY = "BASE"
|
||||
DEFAULT_MOGE2_MODEL_KEY = "MOGE2_VITS_NORMAL"
|
||||
REQUIRED_MODEL_KEYS = (
|
||||
DEFAULT_MOGE2_MODEL_KEY,
|
||||
@@ -145,33 +144,8 @@ def _model_items(models):
|
||||
]
|
||||
|
||||
|
||||
def model_enum_items(_owner, _context):
|
||||
return _model_items(
|
||||
model
|
||||
for model in model_catalog()
|
||||
if model.get("family") == "da3" and model.get("enabled")
|
||||
)
|
||||
|
||||
|
||||
def moge2_model_enum_items(_owner, _context):
|
||||
return _model_items(
|
||||
model for model in model_catalog() if model.get("family") == "moge2"
|
||||
)
|
||||
|
||||
|
||||
def depth_plane_model_enum_items(_owner, _context):
|
||||
models = [model for model in model_catalog() if model.get("family") == "moge2"]
|
||||
models.sort(key=lambda model: model.get("family") != "moge2")
|
||||
items = _model_items(models)
|
||||
items.append(
|
||||
("ORIGINAL", "Original", "Use the original image as depth", len(items))
|
||||
)
|
||||
return items
|
||||
|
||||
|
||||
def geometry_model_enum_items(_owner, _context):
|
||||
models = [model for model in model_catalog() if model.get("family") == "moge2"]
|
||||
models.sort(key=lambda model: model.get("family") != "moge2")
|
||||
return _model_items(models)
|
||||
|
||||
|
||||
@@ -302,16 +276,6 @@ class AnyImageSettings(bpy.types.PropertyGroup):
|
||||
mask_gesture: mask_gesture_property()
|
||||
mask_mode: mask_mode_property()
|
||||
mask_radius: mask_radius_property()
|
||||
input_path: bpy.props.StringProperty(
|
||||
name="Image or Video",
|
||||
description="A single image or video file used for reconstruction",
|
||||
subtype="FILE_PATH",
|
||||
)
|
||||
background_input_path: bpy.props.StringProperty(
|
||||
name="Image",
|
||||
description="A single image used to test BEN2 background removal",
|
||||
subtype="FILE_PATH",
|
||||
)
|
||||
video_frames: bpy.props.IntProperty(
|
||||
name="Extract Frames",
|
||||
description="Maximum number of consecutive frames extracted from the start of a video or frame sequence",
|
||||
@@ -319,73 +283,3 @@ class AnyImageSettings(bpy.types.PropertyGroup):
|
||||
min=1,
|
||||
soft_max=64,
|
||||
)
|
||||
model: bpy.props.EnumProperty(
|
||||
name="Model",
|
||||
description="Depth Anything 3 model",
|
||||
items=model_enum_items,
|
||||
)
|
||||
device: bpy.props.EnumProperty(
|
||||
name="Debug Device",
|
||||
description=(
|
||||
"Inference device used by Debug tasks only; production tasks use "
|
||||
"the Device setting in the Add-on Preferences"
|
||||
),
|
||||
items=device_enum_items,
|
||||
default=0,
|
||||
)
|
||||
process_res: bpy.props.IntProperty(
|
||||
name="Process Res",
|
||||
description="DA3 base processing resolution",
|
||||
default=504,
|
||||
min=1,
|
||||
soft_max=2048,
|
||||
)
|
||||
process_res_method: bpy.props.EnumProperty(
|
||||
name="Process Res Method",
|
||||
description="DA3 image resize method",
|
||||
items=(
|
||||
(
|
||||
"upper_bound_resize",
|
||||
"Upper Bound Resize",
|
||||
"Make Process Res the longer side",
|
||||
),
|
||||
(
|
||||
"lower_bound_resize",
|
||||
"Lower Bound Resize",
|
||||
"Make Process Res the shorter side",
|
||||
),
|
||||
),
|
||||
default="upper_bound_resize",
|
||||
)
|
||||
moge_resolution_level: bpy.props.IntProperty(
|
||||
name="Resolution Level",
|
||||
description="MoGe-2 inference resolution level; higher is finer and slower",
|
||||
default=5,
|
||||
min=0,
|
||||
max=9,
|
||||
)
|
||||
moge_model: bpy.props.EnumProperty(
|
||||
name="Model",
|
||||
description="MoGe-2 model used for depth estimation",
|
||||
items=moge2_model_enum_items,
|
||||
default=0,
|
||||
)
|
||||
ref_view_strategy: bpy.props.EnumProperty(
|
||||
name="Ref View Strategy",
|
||||
description="DA3 reference view selection strategy",
|
||||
items=(
|
||||
("first", "First", "Always use the first view"),
|
||||
("middle", "Middle", "Use the middle view"),
|
||||
(
|
||||
"saddle_balanced",
|
||||
"Saddle Balanced",
|
||||
"Select a view with balanced feature metrics",
|
||||
),
|
||||
(
|
||||
"saddle_sim_range",
|
||||
"Saddle Sim Range",
|
||||
"Select the view with the largest similarity range",
|
||||
),
|
||||
),
|
||||
default="saddle_balanced",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user