| import argparse
|
| import os
|
| import sys
|
|
|
| import torch
|
|
|
| from mvadapter.pipelines.pipeline_texture import ModProcessConfig, TexturePipeline
|
| from mvadapter.utils import make_image_grid
|
|
|
| if __name__ == "__main__":
|
| parser = argparse.ArgumentParser()
|
| parser.add_argument("--device", type=str, default="cuda")
|
| parser.add_argument("--variant", type=str, default="sdxl", choices=["sdxl", "sd21"])
|
|
|
| parser.add_argument("--mesh", type=str, required=True)
|
| parser.add_argument("--text", type=str, required=True)
|
| parser.add_argument("--seed", type=int, default=-1)
|
| parser.add_argument("--save_dir", type=str, default="./output")
|
| parser.add_argument("--save_name", type=str, default="t2tex_sample")
|
|
|
| parser.add_argument("--preprocess_mesh", action="store_true")
|
| args = parser.parse_args()
|
|
|
| if args.variant == "sdxl":
|
| from .inference_tg2mv_sdxl import prepare_pipeline, run_pipeline
|
|
|
| base_model = "stabilityai/stable-diffusion-xl-base-1.0"
|
| vae_model = "madebyollin/sdxl-vae-fp16-fix"
|
| height = width = 768
|
| uv_size = 4096
|
| elif args.variant == "sd21":
|
| from .inference_tg2mv_sd import prepare_pipeline, run_pipeline
|
|
|
| base_model = "stabilityai/stable-diffusion-2-1-base"
|
| vae_model = None
|
| height = width = 512
|
| uv_size = 2048
|
| else:
|
| raise ValueError(f"Invalid variant: {args.variant}")
|
|
|
| device = args.device
|
| num_views = 6
|
|
|
|
|
| pipe = prepare_pipeline(
|
| base_model=base_model,
|
| vae_model=vae_model,
|
| unet_model=None,
|
| lora_model=None,
|
| adapter_path="huanngzh/mv-adapter",
|
| scheduler=None,
|
| num_views=num_views,
|
| device=device,
|
| dtype=torch.float16,
|
| )
|
| texture_pipe = TexturePipeline(
|
| upscaler_ckpt_path="./checkpoints/RealESRGAN_x2plus.pth",
|
| inpaint_ckpt_path="./checkpoints/big-lama.pt",
|
| device=device,
|
| )
|
| print("Pipeline ready.")
|
|
|
| os.makedirs(args.save_dir, exist_ok=True)
|
|
|
|
|
| images, pos_images, normal_images = run_pipeline(
|
| pipe,
|
| mesh_path=args.mesh,
|
| num_views=num_views,
|
| text=args.text,
|
| height=height,
|
| width=width,
|
| num_inference_steps=50,
|
| guidance_scale=7.0,
|
| seed=args.seed,
|
| negative_prompt="watermark, ugly, deformed, noisy, blurry, low contrast",
|
| device=device,
|
| )
|
| mv_path = os.path.join(args.save_dir, f"{args.save_name}.png")
|
| make_image_grid(images, rows=1).save(mv_path)
|
|
|
| torch.cuda.empty_cache()
|
|
|
|
|
| out = texture_pipe(
|
| mesh_path=args.mesh,
|
| save_dir=args.save_dir,
|
| save_name=args.save_name,
|
| uv_unwarp=True,
|
| preprocess_mesh=args.preprocess_mesh,
|
| uv_size=uv_size,
|
| rgb_path=mv_path,
|
| rgb_process_config=ModProcessConfig(view_upscale=True, inpaint_mode="view"),
|
| camera_azimuth_deg=[x - 90 for x in [0, 90, 180, 270, 180, 180]],
|
| )
|
| print(f"Output saved to {out.shaded_model_save_path}")
|
|
|